diff --git a/docs/compiled/artplayer.js b/docs/compiled/artplayer.js index 63a76aed3..e5c1e3723 100644 --- a/docs/compiled/artplayer.js +++ b/docs/compiled/artplayer.js @@ -67,4 +67,4 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var e,r={exports:{}};var n=(e||(e=1,r.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const s=globalThis.CUSTOM_USER_AGENT??("undefined"===typeof navigator?"":navigator.userAgent),c=/^(?:(?!chrome|android).)*safari/i.test(s),l=/iPad|iPhone|iPod/i.test(s)&&("undefined"===typeof window||!window.MSStream),d=l||s.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,u=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)||d,p="undefined"!==typeof window&&"undefined"!==typeof document;const f={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class h extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class m{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new m,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof h?t.push(...e.errors):t.push(e)}if(t.length)throw new h(t)}}const g=new WeakMap,v=new WeakMap;function y(t){const e=g.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function b(t){return y(t).scope}function w(t){const e=y(t);return e.destroying||e.scope.closed}function x(t,e,r,n,o=!1){const i=y(t);if(i.destroying||i.scope.closed)return;i.destroying=!0;const a=[],s=t=>{try{t()}catch(e){a.push(...e instanceof h?e.errors:[e])}};n&&t.template?.$video&&s(()=>t.reset()),s(()=>i.scope.dispose()),s(()=>(t.template||i.mountingTemplate)?.destroy(r));const c=e.indexOf(t);-1!==c&&e.splice(c,1),t.isDestroy=!0,o||(i.releaseContainer?.(),i.releaseContainer=void 0),s(()=>t.emit("destroy")),s(()=>i.finalizers.dispose()),o&&i.rollback&&s(i.rollback),i.rollback=void 0,i.releaseContainer?.(),i.releaseContainer=void 0;for(const l of a.slice(1))console.warn("Additional ArtPlayer cleanup failure:",l);if(a.length)throw a[0]}const k=new WeakMap;function $(t,e){const r=b(t).child();return k.set(e,r),r}function E(t){const e=k.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function A(t){k.get(t)?.dispose()}function C(t,e,r,n){const o=E(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function S(t,e){return{on:(r,n)=>{C(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=E(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function T(t){if(t.composedPath)return t.composedPath();const e=[];let r=t.target;for(;r;)e.push(r),r=r.parentNode??null;return"undefined"===typeof window||e.includes(window)||e.push(window),e}function L(t,e){return T(t).includes(e)}function P(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function M(t){return t.getBoundingClientRect()}function z(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function R(t,e=document){return e.querySelector(t)}function O(t,e){return t.classList.add(e)}function D(t,e){return t.classList.remove(e)}function I(t,e){return t.classList.contains(e)}function N(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function _(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function W(t,e){_(t).forEach(t=>D(t,e)),O(t,e)}function F(t,e){return e.parentNode.replaceChild(t,e),t}function V(t){return document.createElement(t)}function Y(t,e,r="top"){u||(t.setAttribute("aria-label",e),O(t,"hint--rounded"),O(t,`hint--${r}`))}function B(t="",e=""){const r=V("i");return O(r,"art-icon"),O(r,`art-icon-${t}`),N(r,e),r}function H(t,e,r){return t.style[e]=r,t}function j(t,e){for(const r in e)H(t,r,e[r]);return t}function q(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new m;let a=!1,s=()=>{};function c(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function l(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void l(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const c=new Image;d(c,()=>l(c)),i.closed||(c.src=e)}catch(e){c(e)}}))}),i.closed||(n.src=t)}catch(u){c(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){c(u)}},e.onerror=()=>c(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class U extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function X(t,e){if(!t)throw new U(e);return t}function G(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function K(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function Z(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function J(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function Q(t){return t.charAt(0).toUpperCase()+t.slice(1)}function tt(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const et={"&":"&","<":"<",">":">","'":"'",'"':"""},rt={"&":"&","<":"<",">":">","'":"'",""":'"'},nt=/(&|<|>|'|")/g;function ot(t){return t.replace(/[&<>'"]/g,t=>et[t]||t)}const it=Object.defineProperty,{hasOwnProperty:at}=Object.prototype;function st(t,e){return at.call(t,e)}function ct(t,e){return Object.getOwnPropertyDescriptor(t,e)}function lt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?lt(o,i):i,it(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function dt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function ut(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function pt(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const ft=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:U,addClass:O,append:N,assToVtt:pt,capitalize:Q,clamp:J,createElement:V,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:it,download:Z,errorHandle:X,escape:ot,get:ct,getComposedPath:T,getExt:K,getIcon:B,getRect:M,getSafeAreaInsets:z,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:st,hasClass:I,includeFromEvent:L,inverseClass:W,isBrowser:p,isIOS:l,isIOS13:d,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:u,isSafari:c,loadImg:function(t,e){return q(t,e,void 0)},mergeDeep:lt,query:R,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:D,replaceElement:F,secondToTime:tt,setStyle:H,setStyleText:a,setStyles:j,siblings:_,silencePromise:G,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:dt,supportsFlex:P,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Y,unescape:function(t){return t.replace(nt,t=>rt[t]||t)},userAgent:s,vttToBlob:ut},Symbol.toStringTag,{value:"Module"}));function ht(){}function mt(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||s?.aborted)return ht;let c=ht;function l(e){a&&c(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,l,o),c=t.add(()=>{try{e.removeEventListener(r,l,i)}finally{s?.removeEventListener("abort",c)}}),s?.addEventListener("abort",c,{once:!0}),c}function gt(t,e,r){if(t.closed)return ht;let n=!0,o=ht;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function vt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=ht;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const yt=new WeakSet;function bt(t){yt.add(t),t.preventDefault()}function wt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function xt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;mt(t,e,"keydown",t=>{const e=t;a(e)&&wt(e)&&!e.defaultPrevented&&("Enter"===e.key?(bt(e),!e.repeat&&i()&&r()):" "===e.key&&(bt(e),!e.repeat&&i()&&(o=!0)))}),mt(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&wt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(bt(n),r())}),mt(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function kt(t,e){return N(t,e)}function $t(t,e){return e.querySelector(t)}const Et=new WeakSet;function At(t){const e=t.template.$player;!w(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Et.has(e)||(Et.add(e),b(t).add(()=>{Et.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Ct=new WeakSet,St="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Tt(t){return[t,...t.querySelectorAll(St)].find(t=>{if(!t.matches(St)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t);return"hidden"!==e?.visibility&&"collapse"!==e?.visibility})}function Lt(t,e,r){const n=e?.ownerDocument,o=n?.activeElement;if(!["control","contextmenu"].includes(t.name??"")||Ct.has(t)||!e||!n||!o||!e.contains(o))return()=>{};const i=t.art.template.$player,a=Array.from(i.querySelectorAll(`.art-${t.name}`)),s=a.indexOf(e),c=[...a.slice(s+1),...a.slice(0,s).reverse()];return Ct.add(t),()=>{if(Ct.delete(t),w(t.art)||!i.isConnected||n.activeElement!==n.body)return;const e=r?t.cache.get(r)?.$ref:void 0;for(const t of[...e?[e]:[],...c]){if(!i.contains(t))continue;const e=Tt(t);if(e)return void e.focus({preventScroll:!0})}At(t.art)}}const Pt="array",Mt="boolean",zt="string",Rt="number",Ot="object",Dt="function";function It(t,e,r){return X(e===zt||e===Rt||t instanceof Element,`${r.join(".")} require '${zt}' or 'Element' type`)}const Nt={html:It,disable:`?${Mt}`,name:`?${zt}`,index:`?${Rt}`,style:`?${Ot}`,click:`?${Dt}`,mounted:`?${Dt}`,tooltip:`?${zt}|${Rt}`,width:`?${Rt}`,selector:`?${Pt}`,onSelect:`?${Dt}`,switch:`?${Mt}`,onSwitch:`?${Dt}`,range:`?${Pt}`,onRange:`?${Dt}`,onChange:`?${Dt}`},_t={id:zt,container:It,url:zt,poster:zt,type:zt,theme:zt,lang:zt,volume:Rt,isLive:Mt,muted:Mt,autoplay:Mt,autoSize:Mt,autoMini:Mt,loop:Mt,flip:Mt,playbackRate:Mt,aspectRatio:Mt,screenshot:Mt,setting:Mt,hotkey:Mt,pip:Mt,mutex:Mt,backdrop:Mt,fullscreen:Mt,fullscreenWeb:Mt,subtitleOffset:Mt,miniProgressBar:Mt,useSSR:Mt,playsInline:Mt,lock:Mt,gesture:Mt,fastForward:Mt,autoPlayback:Mt,autoOrientation:Mt,airplay:Mt,proxy:`?${Dt}`,plugins:[Dt],layers:[Nt],contextmenu:[Nt],settings:[Nt],controls:[{...Nt,position:(t,e,r)=>{const n=["top","left","right"];return X("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}}],quality:[{default:`?${Mt}`,html:zt,url:zt}],highlight:[{time:Rt,text:zt}],thumbnails:{url:zt,number:Rt,column:Rt,width:Rt,height:Rt,scale:Rt},subtitle:{url:zt,name:zt,type:zt,style:Ot,escape:Mt,encoding:zt,onVttLoad:Dt},moreVideoAttr:Ot,i18n:Ot,icons:Ot,cssVar:Ot,customType:Ot},Wt=new WeakSet;class Ft{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return I(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?O(e,r):D(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t;if(w(this.art))return;if(e.html=e.html||"",o(e,Nt),!this.$parent||!this.name||e.disable)return;const r=e.name||`${this.name}${this.id}`,n=this.cache;X(!n.has(r),`Can't add an existing [${r}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=$(this.art,i),s=[],c=Object.getOwnPropertyDescriptor(this,r);let l=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){O(t,`art-${r}`),O(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):N(e,t),i.html&&N(t,i.html),i.style&&j(t,i.style),i.tooltip&&Y(t,i.tooltip)}(i,this.$parent,this.name,r,this.id,e),a.closed)return;if(e.click){("control"===this.name&&!e.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&xt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),e.click.call(this.art,this,t))});s.push(t)}if(e.selector&&["left","right"].includes(e.position)&&this.selector(e,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,r,i),l=!0,n.set(r,{$ref:i,events:s,option:e}),e.mounted&&e.mounted.call(this.art,i),i}catch(d){try{A(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw n.get(r)?.$ref===i&&n.delete(r),l&&this[r]===i&&(c?Object.defineProperty(this,r,c):delete this[r]),i.remove(),d}}remove(t){X(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Wt.has(e))return;const r=Lt(this,e.$ref);Wt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{A(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Wt.delete(e),r()}}update(t){const e=Lt(this,this.cache.get(t.name)?.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{e()}}}function Vt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Yt(t,e){const r=E(t);if(!r.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const n of t.querySelectorAll("[data-value]"))xt(r,n),n.setAttribute("aria-label",`${e}: ${n.textContent?.trim()??""}`);Vt(t)}}const Bt=new WeakMap;function Ht(t,e){e?Bt.set(t,e):Bt.delete(t)}function jt(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=Bt.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function qt(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function Ut(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}class Xt extends Ft{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,$(t,this.$parent),u||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=S(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="1"]',t);n&&W(n,"art-current"),Yt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="default"]',t);n&&W(n,"art-current"),Yt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(Q(t))}`).join(""),i=r.get("Video Flip");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="normal"]',t);n&&W(n,"art-current"),Yt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"flip",index:30})),this.add(function(t){return e=>({...t,html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return{...t,html:`ArtPlayer ${i}`}}({name:"version",index:50})),this.add(function(t){return e=>({...t,html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let i=0;i{this.show=!0,a.closed||w(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:c}=M(n),{height:l,width:d}=M(o);let u=e-s,p=r-c;e+d>s+a&&(u=a-d),r+l>c+i&&(p=i-l),w(t)||j(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=E(o),a=()=>!i.closed&&!w(r);let s,c=!1,l="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?jt(t):n,Ht(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&Ut(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||c&&e===n.ownerDocument.body,d=s;s=void 0,c=!1,l="",Ht(o),i&&(d&&n.contains(d)&&Ut(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&At(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),Ht(o)}),mt(i,o,"focusin",()=>{c=!0});let m=!1;return mt(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,gt(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),mt(i,n,"keydown",n=>{const i=n;if(!a()||!wt(i)||i.defaultPrevented)return;if(("ContextMenu"===i.key||"F10"===i.key&&i.shiftKey)&&r.constructor.CONTEXTMENU&&!qt(i.target)){bt(i),u();const r=i.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&p()[0]?.focus({preventScroll:!0}))}if(!t.show||!o.contains(i.target))return;if("Escape"===i.key)return bt(i),void(t.show=!1);if("Tab"===i.key)return void(t.show=!1);if(qt(i.target))return;const s=p(),c=s.indexOf(i.target);let f;if("ArrowDown"===i.key||"ArrowRight"===i.key)f=s[(c+1)%s.length];else if("ArrowUp"===i.key||"ArrowLeft"===i.key)f=s[(c+s.length-1)%s.length];else if("Home"===i.key)f=s[0];else if("End"===i.key)f=s[s.length-1];else{if(1!==i.key.length||" "===i.key)return;{const t=i.key.toLowerCase();l=Date.now()-d>700?t:l+t,d=Date.now();const e=[...l].every(e=>e===t)?t:l;f=[...s.slice(c+1),...s.slice(0,c+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}bt(i),f?.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||qt(t.target))&&(u(),!0)}}(this,s);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),s(t.clientX,t.clientY))}),o(e,"click",t=>{L(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const Gt=new WeakMap,Kt=new WeakMap,Zt=new WeakMap;function Jt(t){return Zt.get(t)||b(t)}function Qt(t){const e=Gt.get(t),r=Zt.get(t);return()=>Gt.get(t)===e&&(!e||e.active())&&Zt.get(t)===r&&(!r||!r.closed)}function te(t){const e=Zt.get(t),r=b(t).child(),n=r.child();Zt.set(t,r),r.add(()=>{Zt.get(t)===r&&Zt.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!w(t)&&!n.closed&&Gt.get(t)===o};return Gt.set(t,o),n.add(()=>{Gt.get(t)===o&&Gt.delete(t),o.onAssigned=void 0,o.onError=void 0}),e?.dispose(),o}function ee(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&e?.()}function re(t,e,r){Kt.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{Kt.get(t)===e&&(Kt.delete(t),ee(e))}}function ne(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function oe(t,e){const{$progress:r}=t.template,{left:n}=M(r),o=J((u?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:tt(i),width:o,percentage:J(o/r.clientWidth,0,1)}}function ie(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=oe(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ae=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function se(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),c=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),mt(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!wt(r)||r.defaultPrevented)return;const i=ae.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;bt(r);const l=n();if(!a(l))return void c();const d="Home"===r.key?l.min:"End"===r.key?l.max:s(l.value,l)+i*l.step;o(s(d,l)),c()}),c()),c}const ce=new WeakMap;function le(t){return ce.get(t)||0}function de(t,e,r){let n,o=!1,i=!1,a=!1,s=le(t);const c=()=>a||le(t)!==s,l=()=>!!t.template?.$video?.seeking;return{restore(i=()=>{t.currentTime=e}){if(!r()||c())return;const d=le(t);i(),s=le(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!c()&&(o=l()))},manual(){a=!0},ready(){if(!r()||l())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!c()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!l()}}}function ue(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=E(e),{on:a}=S(t,e);let s=()=>{};const c=$t(".art-progress-hover",e),l=$t(".art-progress-loaded",e),d=$t(".art-progress-played",e),p=$t(".art-progress-highlight",e),f=$t(".art-progress-indicator",e),h=$t(".art-progress-tip",e);function m(r,n){const{width:o,time:i}=n||oe(t,r);h.textContent=i||"00:00";const a=h.clientWidth;o<=a/2?H(h,"left",0):o>e.clientWidth-a/2?H(h,"left",e.clientWidth-a+"px"):H(h,"left",o-a/2+"px")}r.indicator?N(f,r.indicator):H(f,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const g="played"===r&&a&&u;if("loaded"===r&&H(l,"width",100*n+"%"),"hover"===r&&(H(c,"width",100*n+"%"),L(a,p)?function(r){const{width:n}=oe(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;h.textContent=o??"";const i=h.clientWidth;n<=i/2?H(h,"left",0):n>e.clientWidth-i/2?H(h,"left",e.clientWidth-i+"px"):H(h,"left",n-i/2+"px")}(a):m(a),0===n?D(o,"art-progress-hover"):O(o,"art-progress-hover")),"played"===r&&(H(d,"width",100*n+"%"),H(f,"left",100*n+"%")),g){O(o,"art-progress-hover");m(a,{width:e.clientWidth*n,time:tt(n*t.duration)}),s(),s=gt(i,()=>{D(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){p.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function pe(t){return e=>({...t,html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ue(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=S(t,e),a=E(e);let s=0;const c=()=>{const e=Qt(t);return()=>!a.closed&&!w(t)&&e()},l=()=>{const t=++s,e=c();return()=>t===s&&e()};if(!u){let e;i(r,"click",e=>{e.target!==n&&ie(t,e,l())}),i(r,"mousemove",e=>{const r=c(),{percentage:n}=oe(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?l():void 0}),o("document:mousemove",r=>{const n=e;if(n?.()){const{second:o,percentage:i}=oe(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=E(e),{on:n}=S(t,e);let o,i=0;const a=se(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${tt(e)} / ${tt(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;o?.dispose();const s=r.child();o=s;const c=Jt(t).add(()=>{s.dispose()});s.add(()=>{c()}),s.add(()=>{o===s&&(o=void 0)});const l=Qt(t),d=()=>n===i&&!s.closed&&!w(t)&&l(),u=de(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function fe(t){const{option:e}=t.art;e.isLive||t.add(pe({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.play),s=kt(t,o.pause);function c(){t.setAttribute("aria-label",i.get("Play")),H(a,"display","flex"),H(s,"display","none")}function l(){t.setAttribute("aria-label",i.get("Pause")),H(a,"display","none"),H(s,"display","flex")}xt(E(t),t,()=>(e.playing?s:a).click()),Y(a,i.get("Play")),Y(s,i.get("Pause")),n(a,"click",()=>{G(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?l():c(),r("video:playing",()=>{l()}),r("video:pause",()=>{c()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.volume),s=kt(t,o.volumeClose);for(const e of[a,s])xt(E(t),e),e.setAttribute("aria-label",i.get("Mute"));const c=kt(t,'
'),l=kt(c,'
'),d=kt(l,'
'),p=kt(l,'
'),f=kt(p,'
'),h=kt(f,'
'),m=kt(p,'
'),g=E(t);let v=0;const y=se(g,p,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||g.closed||w(e)||(e.volume=t/100)},"vertical");function b(t){const{top:e,height:r}=M(p);return 1-(t.clientY-e)/r}function x(){y();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)H(a,"display","none"),H(s,"display","flex"),H(m,"top","100%"),H(h,"top","100%"),d.textContent="0";else{const t=100*e.volume;H(a,"display","flex"),H(s,"display","none"),H(m,"top",100-t+"%"),H(h,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(x(),r("video:volumechange",x),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),u)H(c,"display","none");else{let t=!1;n(p,"mousedown",r=>{t=0===r.button,e.volume=b(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=b(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>({...t,style:u?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=S(e,t);function n(){const r=`${tt(e.currentTime)} / ${tt(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!b(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!u&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.screenshot),r(t,"click",()=>{G(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;kt(t,o.setting),xt(E(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Y(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t),kt(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Y(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenWebOn),s=kt(t,o.fullscreenWebOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Y(t,i.get("Exit Web Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Web Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenOn),s=kt(t,o.fullscreenOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Y(t,i.get("Exit Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rge.get(t).option.selector}),it(t,"$control_item",{get:()=>ge.get(t).item}),it(t,"$control_value",{get:()=>ge.get(t).value})),ge.set(t,e)}function ye(t,e){t.innerHTML=e}function be(t,e,r,n,o){const{proxy:i}=t.events,a=E(n),s=r.selector;O(n,"art-control-selector");const c=document.createElement("div");O(c,"art-selector-value"),N(c,r.html),n.textContent="",N(n,c);const l=kt(n,'
');for(let f=0;f{if(a.closed)return;const o=T(n),i=r.selector.find(t=>o.includes(t.$control_item));if(!i)return;const s=++d,l=()=>!a.closed&&s===d,u=a.add(function(t,e){return he.set(t,e),()=>{he.get(t)===e&&he.delete(t)}}(n,l));try{if(e(i),a.closed)return;if(r.onSelect){const e=await r.onSelect.call(t,i,i.$control_item,n);if(l()){const t=c.contains(c.ownerDocument.activeElement);ye(c,e),ge.get(i)?.refresh?.(t)}}}catch(p){console.warn("ArtPlayer selector failed:",p)}finally{u()}});o.push(u);const p=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(me));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,c=!1,l=!1,d="",u=0;const p=()=>i.length>0&&(c||s&&!l),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(me)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{c=t,l=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},g=e=>{e&&!t.closed&&((e.querySelector(me)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},v=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",g(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};xt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&v()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(me)||(b.tabIndex=-1,xt(t,b,()=>{b.click(),y()}))}return mt(t,r,"keydown",t=>{const e=t;!wt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(bt(e),v("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(bt(e),y()))}),mt(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&v()}),mt(t,n,"keydown",t=>{const e=t;if(!wt(e)||e.defaultPrevented)return;if("Escape"===e.key)return bt(e),void y();const r=i.indexOf(e.target);if(r<0)return;let n;switch(1!==e.key.length&&(d=""),e.key){case"ArrowDown":n=Math.min(r+1,i.length-1);break;case"ArrowUp":n=Math.max(r-1,0);break;case"Home":n=0;break;case"End":n=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void bt(e);default:{if(1!==e.key.length||" "===e.key)return;const t=Date.now();d=t-u<500?d+e.key.toLocaleLowerCase():e.key.toLocaleLowerCase(),u=t;const o=[...d].every(t=>t===d[0])?d[0]:d;for(let e=1;e<=i.length;e++){const t=(r+e)%i.length;if(i[t].textContent?.trim().toLocaleLowerCase().startsWith(o)){n=t;break}}}}bt(e),void 0!==n&&g(i[n])}),mt(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),mt(t,e,"mouseenter",()=>{s=!0,m(c)}),mt(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),mt(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,c,l,String(r.tooltip||r.name||c.textContent||t.i18n.get("Open")));for(const f of s)ge.get(f).refresh=p}class we extends Ft{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},c=()=>{i=!0,s()},l=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(o?.dispose(),n=e.ownerDocument,o=t.child(),mt(o,n,"keydown",c,{capture:!0}),mt(o,n,"mousedown",l,{capture:!0}),mt(o,n,"touchstart",l,{capture:!0,passive:!0}))};return d(),mt(t,e,"keydown",c,{capture:!0}),mt(t,e,"mousedown",l,{capture:!0}),mt(t,e,"touchstart",l,{capture:!0,passive:!0}),mt(t,e,"focusin",()=>{d(),s()}),mt(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}($(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=S(t,n);a(r,"focusin",e=>{t.isFocus=!0,t.isInput="INPUT"===e.target?.tagName}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{u||(this.show=!0)}),i("click",()=>{u?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=L(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(D(r,"art-hide-cursor"),O(r,"art-hover"),this.timer=Date.now()):(O(r,"art-hide-cursor"),D(r,"art-hover"))}),this.init(),b(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=E(e),{on:i}=S(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);t.observe(r),o.add(()=>{t.disconnect()})}else if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){fe(this)}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:X(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){if(!t)return;const e=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);ye(t.$control_value,t.html);for(let r=0;rthis.check(t),t,e,r)}}function xe(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{if(w(t))return;const n=L(r,e);t.isInput=n&&"INPUT"===r.target?.tagName,t.isFocus=n,t.emit(n?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),b(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(w(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:c}=r,l=o.filter(t=>n-t<=a);switch(l.length){case 1:if(t.emit("click",e),w(t))return;(!u||!t.isLock&&i)&&G(t.toggle()),o=l;break;case 2:if(t.emit("dblclick",e),w(t))return;u?!t.isLock&&s&&G(t.toggle()):c&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function ke(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!w(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),b(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(w(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:Qt(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ie(t,i,()=>n(s))}catch(c){throw e===s&&r(),c}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,c=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,c].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const l=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===l||2===l:3===l||4===l))return;const d=J((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=J(i.time+t.duration*d*c,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",J(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${tt(u)} / ${tt(t.duration)}`))},cancel:r}}const $e=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],Ee=["resize","scroll","orientationchange"];const Ae=new WeakMap;function Ce(t){const e=Ae.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function Se(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=Se(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ce(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(o?.capture),once:Boolean(o?.once),passive:o?.passive,signal:o?.signal},c="boolean"===typeof s?s:s.capture,l="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||l?.aborted)return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,c),l?.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):l?.aborted?p():l?.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function Te(t){return(e,r)=>{if(w(t))return;const n=(...e)=>{if(!w(t))return r(...e)};t.on(e,n),b(t).add(()=>{t.off(e,n)})}}function Le(t){if(!t.constructor.USE_RAF)return;const e=b(t);let r=()=>{};const n=()=>{w(t)||(t.playing&&t.emit("raf"),w(t)||(r=function(t,e){if(t.closed)return ht;let r=!0,n=ht;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),Te(t)("destroy",()=>r())}class Pe{constructor(t){this.destroyEvents=new Set,function(t,e){Ae.set(t,{scope:b(e),cleaning:!1})}(this,t),b(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),xe(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{w(t)||(O(r,"art-hover"),t.emit("hover",!0,e))},e=>{w(t)||(D(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{w(t)||t.emit("mousemove",e)})}(t,this),function(t,e){const{option:r,constructor:n}=t,o=Te(t);o("resize",()=>{const{aspectRatio:e,notice:n}=t;"standard"===t.state&&r.autoSize&&t.autoSize(),w(t)||(t.aspectRatio=e,w(t)||(n.show=""))});const i=b(t);let a=()=>{};const s=()=>{w(t)||(a(),a=gt(i,()=>t.emit("resize"),n.RESIZE_TIME))};o("window:orientationchange",s),o("window:resize",s);const c=t.template.$player.ownerDocument.defaultView?.screen?.orientation;"function"===typeof c?.addEventListener&&e.proxy(c,"change",s)}(t,this),function(t,e){if(!u||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=ke(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=b(t),a=Te(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=o?.innerHeight||n.documentElement.clientHeight,a=o?.innerWidth||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,c=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&c}(n,r.SCROLL_GAP)),w(t)||(s=!0,gt(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;b(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){if(w(t))return;const a=++n,s={disposers:[]},c=()=>a!==n||w(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,a=i.window||n.ownerDocument?.defaultView||window,l=(n,o,i)=>{for(const a of o){if(c())return;s.disposers.push(e.proxy(n,a,e=>{r!==s||w(t)||t.emit(`${i}:${a}`,e)}))}};l(o,$e,"document"),l(a,Ee,"window")}catch(d){throw o(s),d}if(c())return void o(s);const l=r;r=s,o(l)}i(),e.bindGlobalEvents=i}(t,this),Le(t)}proxy(t,e,r,n={}){return Array.isArray(e),Se(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ce(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Me(t){if(t&&1===t.nodeType)return t}function ze(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function Re(t,e){if(function(t){return yt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const r=function(t,e){const r=t.target;return 9===r?.nodeType?r:r?.ownerDocument||t.view?.document||e}(t,e);let n=Me(r.activeElement);for(;n?.shadowRoot?.activeElement;)n=Me(n.shadowRoot.activeElement);if(n&&ze(n))return!1;const o=Me(t.composedPath?.()[0])||Me(t.target),i="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(i||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(i?",a[href]":"");if(o?.closest?.(t)||n?.closest?.(t))return!1}return!o||!ze(o)}const Oe=new WeakMap;class De{constructor(t){this.art=t,this.keys={},Oe.set(this,{subscribed:!1}),u||this.init()}init(){const t=this.art;if(w(t))return;const e=Oe.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{G(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!w(t)){if(t.isFocus&&Re(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ie={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ie);class Ne{constructor(t){this.art=t,this.languages={"zh-cn":Ie},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=st(this.languages,t)&&this.languages[t]||{}}get(t){return st(this.language,t)&&this.language[t]||t}update(t){this.languages=lt(this.languages,t),this.init()}}const _e={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class We{constructor(t){const e={..._e,...t.option.icons};for(const r in e)it(this,r,{get:()=>B(r,e[r])})}}const Fe=new WeakMap;function Ve(t,e,r){const n=()=>!e.closed&&!w(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:c,$video:l}}=t,d=i(c,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!w(t),s=()=>n.classList.contains("art-info-show"),c=t.i18n.get("Close");if(!a())return;const l=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",c),o.setAttribute("role","group"),o.setAttribute("aria-label",l),xt(e,i,()=>i.click(),s),mt(e,o,"keydown",t=>{const e=t;a()&&s()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),r())});const d=e=>{if(!a())return;const r=n.ownerDocument,s=r.activeElement;if(e)o.contains(s)||(Fe.delete(t),s&&n.contains(s)&&(Fe.set(t,jt(s)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Fe.get(t);if(Fe.delete(t),!o.contains(s))return;const i=e&&r.defaultView?.getComputedStyle(e).visibility;e?.isConnected&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):At(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{try{for(const t of u){if(!n())return;const e=Reflect.get(l,t.dataset.video??"undefined");if(!n())return;const r="number"===typeof e?e.toFixed(2):e;if(!n())return;if(t.textContent!==r){const e=null==r?null:`${r}`;if(!n())return;t.textContent=e}}n()&>(e,f,a.INFO_LOOP_TIME)}catch(t){o(t)}};n()&&f()}catch(i){o(i)}}const Ye=new WeakMap;class Be extends Ft{constructor(t){super(t),this.name="info",Ye.set(this,{revision:0}),u||this.init()}init(){const t=Ye.get(this),e=++t.revision;if(t.scope?.dispose(),w(this.art)||t.revision!==e)return;const r=b(this.art).child();t.scope=r,r.add(()=>{t.scope===r&&(t.scope=void 0)}),Ve(this.art,r,()=>{this.show=!1})}}class He extends Ft{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{H(i,"display","none"),H(s,"display",null),w(t)&&(c=!0)};var d;t.on("destroy",l),(d=t,y(d).finalizers).add(()=>{try{c||l()}finally{t.off("destroy",l)}}),w(t)||n.proxy(e.$state,"click",()=>{w(t)||G(t.play())})}}const Ue=new WeakMap;function Xe(t){const e=Ue.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class Ge{constructor(t){this.art=t,this.timer=null,Ue.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),b(t).add(()=>{t.off("destroy",e)}),b(t).add(()=>{this.destroy()})}destroy(){Xe(this)}set show(t){if(w(this.art))return;const e=Ue.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){Xe(this);const i=e.revision,a=()=>!w(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(O(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const c={};e.pending=c;const l=setTimeout(()=>{if(w(this.art)||e.pending!==c)return;e.pending=void 0;const t=e.revision;o.textContent="",w(this.art)||e.revision!==t||D(n,"art-notice-show")},s);a()?this.timer=l:clearTimeout(l)}else D(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function Ke(t,e){return function(t,e){const r=lt(e,t);return r.container=t.container,o(r,_t)}(t,e)}function Ze({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function Je(t,e){if(!Ze(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return Ze(r)?r:void 0}function Qe(t,e,r,n=!1){const o=e=>{w(t)||r(e)};t[n?"once":"on"](e,o),b(t).add(()=>{t.off(e,o)})}function tr(t,e,r){for(const[n,o]of e){if(w(t)||r&&!r())return;t[n].show=o}}function er(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=Jt(t),c=0;return{reset(){c=0,a?.dispose(),D(i,"art-error")},loadStart(){D(i,"art-error")},schedule(l){(async l=>{if(w(t))return;const d=Jt(t);if(d!==s&&(s=d,c=0),a&&!a.closed)return;const u=d.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!w(t)&&!u.closed&&d===Jt(t),f=c{console.warn("ArtPlayer reconnect failed:",t)})}}}const rr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],nr=(()=>{if("undefined"===typeof document)return!1;const t=rr[0],e={};for(const r of rr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),or={change:nr.fullscreenchange,error:nr.fullscreenerror},ir={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{ir.off("change",o),r()};ir.on("change",o);const i=t[nr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!ir.isFullscreen)return void t();const r=()=>{ir.off("change",r),t()};ir.on("change",r);const n=document[nr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>ir.isFullscreen?ir.exit():ir.request(t,e),onchange(t){ir.on("change",t)},onerror(t){ir.on("error",t)},on(t,e){const r=or[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=or[t];r&&document.removeEventListener(r,e,!1)},raw:nr};function ar(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(ir,{isFullscreen:{get:()=>Boolean(document[nr.fullscreenElement])},element:{enumerable:!0,get:()=>document[nr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[nr.fullscreenEnabled])}});const sr=new WeakMap;function cr(t){try{Promise.resolve(t()).catch(()=>{})}catch{}}function lr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=sr.get(t);if(!n){n=new WeakMap,sr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),cr(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),cr(i))}function dr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,c=!1,l=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!c){c=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{c||(c=!0,l=!0,a(),d&&!u&&r&&lr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(mt(i,t.document,t.changeEvent,m),mt(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){sr.get(t.document)?.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,l&&!u&&r&&lr(t),u?Promise.resolve(e).then(()=>{l?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(g){h(!0,g)}return{promise:f,cancel:()=>i.dispose()}}function ur(t,e){const r=b(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),c=0,l=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch{}}return r.add(()=>{c+=1,l=!1,n.classList.remove("art-fullscreen"),f()}),mt(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){return sr.get(t.document)?.has(t.target)??!1}(e))return;if(r&&u)return void f();if(r===s||w(t))return;s=r;const o=c,a=()=>w(t)||i()!==r||o!==c&&l!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),mt(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!w(t)&&t.emit("fullscreenError",r)}),{get:()=>!w(t)&&i(),set(n){if(w(t))return Promise.resolve();const o=++c;if(l=Boolean(n),l?u=!1:d&&(u=!0),a?.cancel(),a=void 0,d=!1,!l&&!i())return Promise.resolve();p=!0,d=l;const s=dr(e,r,l,()=>{!w(t)&&l||f()},()=>!i());p=!1,c===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw w(t)||c!==o||(t.notice.show=e),e}).finally(()=>{c===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const pr=new WeakSet;function fr(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function hr(t){pr.delete(t),t.removeEventListener("webkitbeginfullscreen",mr),t.removeEventListener("webkitpresentationmodechanged",mr)}function mr(t){if(pr.has(this)&&fr(this,"webkitbeginfullscreen"===t.type)){hr(this);try{this.webkitExitFullscreen?.()}catch{}}}function gr(t){pr.add(t),t.addEventListener("webkitbeginfullscreen",mr),t.addEventListener("webkitpresentationmodechanged",mr)}function vr(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=fr(e),i=o,a=!1,s=0;const c=()=>fr(e,n);function l(r){if(w(t)||(l=e,pr.has(l)))return;var l;"boolean"===typeof r&&(n=r);const d=c();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>w(t)||c()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{s++,i=!1,a&&gr(e),c()&&e.webkitExitFullscreen?.()}),mt(r,e,"webkitbeginfullscreen",()=>l(!0)),mt(r,e,"webkitendfullscreen",()=>l(!1)),mt(r,e,"webkitpresentationmodechanged",()=>l());const d=()=>l();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!w(t)&&c(),set(r){if(w(t))return;const n=++s;if(i=Boolean(r),r){if(hr(e),t.state="fullscreen",w(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,gr(e)),c()&&e.webkitExitFullscreen()}}}function yr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function br({node:t,parent:e,next:r}){if(!e)return void t.parentNode?.removeChild(t);const n=r?.parentNode===e?r:null;t.parentNode===e&&t.nextSibling===n||e.insertBefore(t,n)}function wr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function xr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function kr(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const c=t.icons.play,l=t.icons.pause;if(o.closed)return;i.append(c,l),s.append(e,i),xt(o,e,()=>e.click(),r),xt(o,i,()=>(t.playing?l:c).click(),r);const d=t.i18n.get("Close");if(o.closed||w(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||w(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),mt(o,s,"keydown",t=>{const e=t;r()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),n())}),mt(o,e,"click",n),mt(o,c,"click",()=>{G(t.play())}),mt(o,l,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||w(t)||(i.setAttribute("aria-label",e),c.style.display=t.playing?"none":"flex",l.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};mt(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const c=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},l=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=wr(i.left,i.top,xr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",c),r.add(()=>{t.off("document:mousemove",c)}),t.on("document:mouseup",l),r.add(()=>{t.off("document:mouseup",l)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(c){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,c}}function $r(t){const{$player:e,$video:r}=t.template,n=b(t).child();let o,i,a=0,s=!1,c=!1;const l=()=>!w(t)&&e.classList.contains("art-mini"),d=function(t){const e=t.template.$player;let r;return{entering(){const n=e.ownerDocument,o=n.activeElement,i=o&&e.contains(o);t.template.$mini?.contains(o)||(r=i?jt(o):void 0);const a=i&&e.classList.contains("art-keyboard-focus");return e=>{!a||w(t)||n.activeElement!==o&&n.activeElement!==n.body||e?.()}},leaving(n){const o=e.ownerDocument,i=n?.contains(o.activeElement);return()=>{if(!i||w(t)||o.activeElement!==o.body&&!n?.contains(o.activeElement))return;const e=r&&o.defaultView?.getComputedStyle(r).visibility;r?.isConnected&&r.getClientRects().length&&"hidden"!==e&&"collapse"!==e&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):At(t)}}}}(t);function u(){if(i){const e=i,r=a;i=void 0;try{br(e)}catch(t){throw r!==a||i||(i=e),t}}}function p(){if(w(t))return;const r=++a;c=!1;const n=d.leaving(t.template.$mini);u(),w(t)||r!==a||(o?.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),w(t)||r!==a||t.emit("mini",!1)))}function f(){if(w(t))return;const h=++a;if(s)return void(c=!0);const m=d.entering();if(t.state="mini",!w(t)&&h===a){i??(i=yr(r)),e.classList.add("art-mini");try{if(!o){s=!0;try{o=kr(t,n,l,p)}finally{s=!1}}if(c)return c=!1,void f();if(!o||w(t))return;if(h!==a)return void(l()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),w(t)||h!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:{...wr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r),reset:!0}}(t.storage.get("left"),e,xr(o.element));if(w(t)||h!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),w(t)||h!==a)return;t.storage.set("left",i.left)}w(t)||h!==a||m(o.focus),w(t)||h!==a||t.emit("mini",!0)}catch(g){const r=c;throw c=!1,w(t)||h!==a&&!r||(u(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),g}}}return n.add(()=>{a++;try{u()}finally{o?.cancelDrag(),e.classList.remove("art-mini")}}),{get:l,set(t){t?f():p()}}}const Er=new WeakSet,Ar=t=>"picture-in-picture"===t.webkitPresentationMode;function Cr(t){Er.delete(t),t.removeEventListener("webkitpresentationmodechanged",Sr),t.removeEventListener("enterpictureinpicture",Sr)}function Sr(){if(Er.has(this)&&Ar(this)){Cr(this);try{this.webkitSetPresentationMode?.("inline")}catch{}}}function Tr(t){Er.add(t),t.addEventListener("webkitpresentationmodechanged",Sr),t.addEventListener("enterpictureinpicture",Sr)}function Lr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Pr(t,e,r){return new Promise((n,o)=>{if(w(t)||e===t.url)return void n();const i=te(t),a=i.scope.child();let s=!1;const c=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{c()});const l=()=>!s&&i.active(),d=t=>c(!0,t);i.onError=d;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!l())return;const u=a.child();let p=!1,f=!1,h=!1;const m=de(t,r,l),g=async()=>{if(t.aspectRatio=o,l()){if(n)try{await t.play()}catch{}l()&&(t.notice.show="",c())}},v=()=>{if(l()&&!f&&p)try{if(t.template?.$video?.seeking)return;if(!l())return;if(h||(h=!0,t.playbackRate=s),!m.ready()||!l()||f)return;f=!0,u.dispose(),g().catch(d)}catch(e){d(e)}},y={"video:error":d,"video:loadedmetadata":()=>{if(l())try{m.restore()}catch(t){d(t)}},"video:canplay":()=>{p=!0,v()},"video:seeked":v,seek:m.manual},b=a.child(),w=[],x=Object.keys(y);for(const e of x)Lr(b,t,e,t=>{i.acceptingEvents&&w.push([e,t])},!1);if(re(t,i,e),!l())return;if(t.notice.show="",!l())return;const k=()=>{if(b.dispose(),!e)return void c();const r={};for(const e of x)r[e]=Lr(u,t,e,y[e],"video:seeked"!==e);for(const[t,e]of w){if(!l()||u.closed)break;r[t](e)}w.length=0};i.assigned?k():i.onAssigned=k}catch(u){d(u)}})}function Mr(t,e){const{number:r,column:n,width:o,height:i,scale:a}=t,{imageWidth:s,videoWidth:c,videoHeight:l,progressWidth:d,position:u}=e,p=Number(n),f=Number(o)*Number(a)||s/p,h=Number(i)*Number(a)||f/(c/l),m=Math.floor(u/(d/Number(r)));return{height:`${h}px`,width:`${f}px`,backgroundPosition:`-${m%p*f}px -${Math.floor(m/p)*h}px`,left:u<=f/2?0:u>d-f/2?d-f+"px":u-f/2+"px"}}function zr(t){const{option:e,template:{$video:r}}=t;it(t,"url",{get:()=>r.src,async set(n){if(w(t))return;const o=function(t){const e=Kt.get(t);return Kt.delete(t),e||te(t)}(t);o.acceptingEvents=!1;try{if(!n)return void(await vt(o.scope)&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||K(n),s=e.customType[a];if(a&&s){if(!(await vt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const c=o.scope.child();let l=!1,d=!1;Lr(c,t,"video:canplay",()=>{l=!d}),Lr(c,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>ne(o,t))}else{if(!o.active())return;r.src=n}}finally{c.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};l?e():d||Lr(o.scope,t,"video:canplay",e)}}catch(i){ne(o,i)}finally{ee(o)}}})}const Rr=[function(t){const{template:{$video:e}}=t;it(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;it(t,"play",{async value(){const a=Qt(t),s=await i.play();if(!a())return s;const c=e.get("Play");if(!a())return s;if(r.show=c,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;it(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${tt(t.currentTime)} / ${tt(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;it(t,"forward",{set(e){r.seek=t.currentTime+e}}),it(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;it(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=J(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),it(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;it(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){ce.set(t,le(t)+1)}(t),e.currentTime=J(n,0,t.duration))}})},function(t){it(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Pr(t,e,0);it(t,"switchQuality",{value:e=>Pr(t,e,t.currentTime)}),it(t,"switchUrl",{value:e}),it(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;it(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;it(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!w(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=Je({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(w(t))return;"width"===r?.axis?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,w(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=Qt(t);return new Promise((a,s)=>{const c=r=>{try{!w(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,c):a(n.toDataURL("image/png"))}catch(l){c(l)}})}it(t,"getDataURL",{value:()=>o(!1)}),it(t,"getBlobUrl",{value:()=>o(!0)}),it(t,"screenshot",{value:async e=>{const n=Qt(t),o=await t.getDataURL();if(!w(t)&&n()){const i=e||`artplayer_${tt(r.currentTime)}`;!w(t)&&n()&&Z(o,`${i}.png`),!w(t)&&n()&&t.emit("screenshot",o)}return o}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(w(t))return;const i=function(t){const e=ir.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>ar(t,e.requestFullscreen,void 0),exit:()=>ar(r,e.exitFullscreen)}}(o);i?it(t,"fullscreen",ur(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?it(t,"fullscreen",vr(t)):it(t,"fullscreen",{get:()=>!1,set(){w(t)||(r.show=e.get("Fullscreen Not Supported"))}}),it(t,"fullscreen",ct(t,"fullscreen"))};t.once("video:loadedmetadata",i),b(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(br(t.placement),r()))}return b(t).add(()=>{n+=1;const t=r;if(r=void 0,t)try{o(t,()=>!0)}catch(i){try{e.parentNode!==t.placement.parent&&e.parentNode?.removeChild(e)}catch(a){throw new h([i,a])}throw i}}),i=>{if(w(t))return;const a=++n,s=()=>a===n&&!w(t),c=function(t){const e=t.ownerDocument?.activeElement,r=e&&t.contains(e);return()=>{r&&e.isConnected&&t.contains(e)&&e.ownerDocument.activeElement===e.ownerDocument.body&&e.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:yr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(l){throw s()&&o(n,s)&&(r=void 0,c()),l}if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);it(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?it(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=b(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,c=!1,l=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch{}}function u(e,r,n){e.then(()=>{!r||!w(t)&&a||d()},e=>{w(t)||l!==n||(t.notice.show=e)}).finally(()=>{l===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{l++,a=!1,d()}),mt(n,e,"enterpictureinpicture",()=>{if(c)return void d();if(!o()||i)return;const e=l;t.state="pip",!w(t)&&e===l&&o()&&(i=!0,t.emit("pip",!0))}),mt(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!w(t)&&o()?e:null,set(n){if(w(t))return;const i=++l;if(a=Boolean(n),a?c=!1:s&&(c=!0),s=!1,a){if(t.state="pip",w(t)||l!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw l===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?it(t,"pip",function(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(w(t)||Er.has(e))return;const s=Ar(e);if(s&&(o=!1),s===n&&!r)return;const c=i;s&&(t.state="pip"),w(t)||i!==c||Ar(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Tr(e),Ar(e)&&e.webkitSetPresentationMode("inline")});for(const c of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])mt(r,e,c,()=>s());return{get:()=>!w(t)&&Ar(e),set(r){if(w(t))return;const n=++i,c=a;if(r){if(!1===e.webkitSupportsPresentationMode?.("picture-in-picture"))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Cr(e),t.state="pip",w(t)||i!==n)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(l){throw n===i&&(o=!1),l}}else o&&(o=!1,Tr(e)),Ar(e)&&e.webkitSetPresentationMode("inline");w(t)||n!==i||c!==a||Ar(e)!==Boolean(r)||s(!0)}}}(t)):it(t,"pip",{get:()=>!1,set(){w(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;it(t,"loaded",{get:()=>r.loadedTime/e.duration}),it(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){it(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;it(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;it(t,"autoSize",{value(){if(w(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!Ze(o))return;const i=M(e),a=Je(i,o.width/o.height);a&&!w(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;it(t,"rect",{get:()=>M(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}it(t,"x",{get:()=>e.left+window.pageXOffset}),it(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;it(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){w(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(Q(o))}`,w(t)||t.emit("flip",o))}})},function(t){it(t,"mini",$r(t))},function(t){const{template:{$poster:e}}=t;it(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(t){H(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;it(t,"autoHeight",{value(){if(w(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!Ze(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||w(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;it(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){it(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){it(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];it(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;nn.$track?.offset||0,set(o){const{cues:i}=t.subtitle;if(!n.$track||0===i.length)return;const a=J(o,-10,10);n.$track.offset=a;for(let e=0;e{if(!w(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,w(t)||it(t,"airplay",{value(){if(!w(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(w(t))return;Reflect.apply(e,o,[]),w(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");w(t)||(r.show=n)}}}))},function(t){it(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:i?.html||"",selector:e,async onSelect(e,r,i){const a=function(t){return t&&he.get(t)||(()=>!0)}(i);if(await t.switchQuality(e.url),!w(t)&&a()){const r=`${o.get("Switch Video")}: ${e.html}`;!w(t)&&a()&&(n.show=r)}return e.html}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,s=b(t).child(),c=!1;function l(){const e=s;s=b(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function d(){const i=a,c=s;if(!i||!o)return;const l=()=>!w(t)&&!c.closed&&s===c&&a===i&&i.sourceActive()&&t.controls?.thumbnails===i.element;if(!l())return;const d=r.clientWidth*i.percentage;if(!(d>0&&d{const f=t.controls?.thumbnails,{url:h,scale:m}=e.thumbnails;if(!w(t)&&f&&h&&("hover"===r||"played"===r&&p&&u)){if(i!==f){const t=E(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,l())})}if(a={percentage:n,element:f,sourceActive:Qt(t)},o)d();else if(!c){const t=s;c=!0,function(t,e,r){return q(t,e,r)}(h,m,t).then(e=>{s!==t||t.closed||(c=!1,o=e,d())}).catch(e=>{s!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),it(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{w(t)||!e.url||t.option.isLive||w(t)||(t.option.thumbnails=e,l())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{w(t)||t.emit(`video:${e.type}`,e)})}(t);const e=er(t);!function(t,e){Qe(t,"video:canplay",()=>{e.reset(),tr(t,[["loading",!1]])}),Qe(t,"video:canplay",()=>{tr(t,[["loading",!1],["controls",!0],["mask",!0]]),w(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;Qe(t,"video:ended",()=>{if(e.loop){const e=Qt(t);if(t.seek=0,w(t)||!e())return;G(t.play()),e()&&tr(t,[["controls",!1],["mask",!1]],e)}else tr(t,[["controls",!0],["mask",!0]])})}(t),Qe(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;Qe(t,"video:loadedmetadata",()=>{t.emit("resize"),u&&tr(t,[["loading",!1],["controls",!0],["mask",!0]])}),Qe(t,"video:loadstart",()=>{e.loadStart(),tr(t,[["loading",!0],["mask",!1],["controls",!0]])}),Qe(t,"video:pause",()=>{tr(t,[["controls",!0],["mask",!0]])}),Qe(t,"video:play",()=>{tr(t,[["mask",!1]]),w(t)||H(r,"display","none")}),Qe(t,"video:playing",()=>tr(t,[["mask",!1]])),Qe(t,"video:progress",()=>{t.playing&&tr(t,[["loading",!1]])}),Qe(t,"video:seeked",()=>tr(t,[["loading",!1],["mask",!0]])),Qe(t,"video:seeking",()=>tr(t,[["loading",!0],["mask",!1]])),Qe(t,"video:timeupdate",()=>tr(t,[["mask",!1]])),Qe(t,"video:waiting",()=>tr(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(w(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(w(t))return;const r=e.moreVideoAttr[s];if(w(t))return;t.attr(s,r)}if(w(t))return;if(e.muted){const r=e.muted;if(w(t))return;t.muted=r}if(w(t))return;if(e.volume){const r=J(e.volume,0,1);if(w(t))return;n.volume=r}if(w(t))return;const i=r.get("volume");if(w(t))return;if("number"===typeof i&&(n.volume=J(i,0,1)),w(t))return;if(e.poster){const r=`url(${e.poster})`;if(w(t))return;H(o,"backgroundImage",r)}if(w(t))return;if(e.autoplay){const r=e.autoplay;if(w(t))return;n.autoplay=r}if(w(t))return;if(e.playsInline){if(w(t))return;if(n.playsInline=!0,w(t))return;n["webkit-playsinline"]=!0}if(w(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(w(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(w(t))return;const r=e.cssVar[s];if(w(t))return;t.cssVar(s,r)}if(w(t))return;const a=e.url;w(t)||(t.url=a)}];class Or{constructor(t){if(!w(t)){zr(t);for(const e of Rr){if(w(t))return;e(t)}}}}const Dr=new WeakMap,Ir="art-auto-orientation-fullscreen";function Nr(t){if(Dr.get(t.orientation)===t)try{t.orientation.unlock()}catch{}}const _r="art-auto-orientation",Wr=["width","height","transform-origin","transform"];function Fr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return Ze(t)&&Ze(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=b(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(_r);r.classList.remove(_r),n&&(t.isRotate=!1,w(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=z();if(w(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;o??(o=Wr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(_r),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{w(t)||(r?o?s(!1):e()&&(i(),i=gt(n,()=>{o||s(!0)},Number(t.constructor.AUTO_ORIENTATION_TIME??0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(Ir),t&&(t.cancelled=!0,Nr(t),t.settled&&Dr.get(t.orientation)===t&&Dr.delete(t.orientation))}return b(t).add(o),i=>{if(w(t))return;if(!i)return void o();if(n&&!n.cancelled&&Dr.get(n.orientation)===n)return;const a=r.ownerDocument.defaultView?.screen?.orientation;if("function"!==typeof a?.lock||"function"!==typeof a.unlock||!e())return;const s={orientation:a,cancelled:!1,settled:!1};n=s,Dr.set(a,s);const c=()=>!w(t)&&!s.cancelled&&n===s&&Dr.get(a)===s,l=e=>{s.settled=!0;const o=c();Dr.get(a)===s&&Dr.delete(a),n===s&&(n=void 0),o&&(r.classList.remove(Ir),t.notice.show=e)};try{const t=a.lock(a.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{s.settled=!0,c()?r.classList.add(Ir):(Nr(s),Dr.get(a)===s&&Dr.delete(a))}).catch(l)}catch(d){l(d)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),b(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Vr(t){return t.get("times")||{}}function Yr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||w(t))return()=>{};const s=$t(".art-auto-playback-last",a),c=$t(".art-auto-playback-jump",a),l=$t(".art-auto-playback-close",a);kt(l,r.close);const d=E(a);let u,p=0;const f=()=>{const r=++p;if(u?.dispose(),d.closed||w(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!w(t);f.add(()=>{u===f&&(u=void 0,H(a,"display","none"))});const m=Jt(t).add(()=>{f.dispose()});f.add(()=>{m()});const g=Vr(n)[t.option.id||t.option.url];if(!h())return;if(H(a,"display","none"),!h()||!g||!(g>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(H(a,"display","flex"),!h())return;const v=`${e.get("Last Seen")} ${tt(g)}`;if(!h())return;if(s.textContent=v,!h())return;const y=e.get("Jump Play");if(!h())return;if(c.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(l,()=>{H(a,"display","none")}),!h())return;if(b(c,()=>{t.seek=g,h()&&(G(t.play()),h()&&(H(i,"display","none"),h()&&H(a,"display","none")))}),!h())return;let x=()=>{},k=!1;const $=()=>{!k&&h()&&(k=!0,x(),gt(f,()=>{h()&&H(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",$),x=f.add(()=>{t.off("video:timeupdate",$)}),k&&x()};return()=>{C(t,a,"ready",f),C(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;Te(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Vr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;w(t)||(o.length>i&&delete n[o[0]],n[a]=s,w(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Vr(e)},clear:()=>e.del("times"),delete(t){const r=Vr(e);return delete r[t],e.set("times",r),r}}}function Br(t){let e,r=0;return{start:n=>{const o=++r;if(e?.scope.dispose(),o!==r||w(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:Jt(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{e?.active||D(t.template.$player,"art-fast-forward")}}),gt(i.scope,()=>{if(e!==i||w(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||w(t))return;t.playbackRate=r,e!==i||i.scope.closed||w(t)||O(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,e?.scope.dispose()}}}function Hr(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Br(t),i=Te(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return I(r,"art-fast-forward")}}}function jr(t,e,r,n){let o;const i=()=>!r.closed&&!w(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),xt(r,e),mt(r,e,"keydown",t=>{const r=t;i()&&n()&&wt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(bt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function qr(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return I(n,"art-lock")}function i(){w(t)||(O(n,"art-lock"),w(t)||(t.isLock=!0,w(t)||t.emit("lock",!0)))}function a(){w(t)||(D(n,"art-lock"),w(t)||(t.isLock=!1,w(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=E(e);if(n.closed||w(t))return;const i=kt(e,r.lock);if(n.closed||w(t))return;const a=kt(e,r.unlock);if(n.closed||w(t))return;const s=jr(t,e,n,o);n.closed||w(t)||(o()?(H(i,"display","inline-flex"),n.closed||w(t)||H(a,"display","none")):H(i,"display","none"),C(t,e,"lock",e=>{w(t)||(H(i,"display",e?"inline-flex":"none"),n.closed||w(t)||H(a,"display",e?"none":"inline-flex"),n.closed||w(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function Ur(t){return Te(t)("control",e=>{e?D(t.template.$player,"art-mini-progress-bar"):O(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class Xr{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){w(t.art)||!e.miniProgressBar||e.isLive||t.add(Ur),!w(t.art)&&e.lock&&u&&t.add(qr),w(t.art)||!e.autoPlayback||e.isLive||t.add(Yr),!w(t.art)&&e.autoOrientation&&u&&t.add(Fr),!w(t.art)&&e.fastForward&&u&&!e.isLive&&t.add(Hr)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){X(!w(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(w(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(w(t.art))return t;let o=n;const i=st(t,o);if(w(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return w(t.art)||(X(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),w(t.art)||it(t,o,{value:r})),t}(this,t,e)}}const Gr=new WeakMap;function Kr(t){return!t.closed&&!Gr.get(t)}function Zr(t){Gr.set(t,(Gr.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(Gr.get(t)||1)-1;r?Gr.set(t,r):Gr.delete(t)}}const Jr=new WeakMap,Qr=new WeakMap,tn=["$parent","$parents","$option","$events","$formatted"];function en(t){const e=new Set;let r=t;for(;r&&!e.has(r);){e.add(r);const t=Jr.get(r);if(!t||!t.owner.active||t.owner.scope?.closed||!t.option.includes(r))return!1;if(!t.parent)return t.owner.root===t.option;if(Jr.get(t.parent)?.owner!==t.owner)return!1;r=t.parent}return!1}function rn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function nn(t){const e=Jr.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function on(t,e){for(let r=0;r{l&&l!==r&&l.dispose()},()=>pn(t,o)])try{e()}catch(d){d instanceof h?c.push(...d.errors):c.push(d)}if(r.closed||w(t)||(o.push(...i.splice(0)),un.set(r,o),ln.set(e,r),dn.set(e,n)),a(),c.length)throw new h(c)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function vn(t,e,r,n,o,i){const a=i||hn(e);if(!Kr(a)||w(t))return;const s=t.proxy(r,n,e=>{if(Kr(a)&&!w(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!Kr(a)||w(t)?t.events.remove(s):(nn(e).events.push(s),i&&i!==ln.get(e)&&i.add(()=>{const r=nn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function yn(t,e,r,n){const o=hn(e);if(!Kr(o)||w(t))return;const i=(...e)=>{if(Kr(o)&&!w(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}function bn(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}function wn(t){return Array.from(t.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter(t=>"-1"!==t.getAttribute("tabindex")&&bn(t))}function xn(t,e,r=!1){if(!t.show||w(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!Kr(sn(n)))return;const o=wn(n),i=n.querySelector(".art-setting-item.art-current"),a=o.find(t=>e===t||e?.contains(t))||(r?o[o.length-1]:o.find(t=>i?.contains(t))||o.find(t=>!t.classList.contains("art-setting-item-back"))||o[0]);a?.focus({preventScroll:!0}),w(t.art)||a?.scrollIntoView({block:"nearest",inline:"nearest"})}function kn(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!w(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!r?.getClientRects().length)&&xn(t,o)}}function $n(t){const{art:e}=t,r=b(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||w(e)||t.render()},a=i=>{r.closed||w(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&xn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!w(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&bn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&At(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),mt(r,e.template.$player,"keydown",r=>{const n=r;if(!wt(n)||n.defaultPrevented||w(e))return;const a=n.target;if(a===e.controls.setting){if("ArrowDown"===n.key||"ArrowUp"===n.key)if(bt(n),t.show)xn(t,void 0,"ArrowUp"===n.key);else{o="ArrowUp"===n.key;try{t.show=!0}finally{o=!1}}else"Escape"===n.key&&t.show&&(bt(n),i());return}if(!t.show||!t.$parent.contains(a))return;if("Escape"===n.key)return bt(n),void i();const s=a.closest(".art-setting-item");if(!s||a!==s&&!a.matches('button,a[href],[role="button"]'))return;const c=t.active&&t.cache.get(t.active);if(!c)return;const l=t.active?.find(t=>t.$item===s);if(!Kr(sn(c))||l&&!Kr(hn(l)))return void(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(n.key)&&bt(n));const d=wn(c),u=d.indexOf(a);if(u<0)return;let p;switch(n.key){case"ArrowDown":p=Math.min(u+1,d.length-1);break;case"ArrowUp":p=Math.max(u-1,0);break;case"Home":p=0;break;case"End":p=d.length-1;break;case"ArrowLeft":{const t=c.querySelector(".art-setting-item-back");return bt(n),void t?.click()}case"ArrowRight":return bt(n),void(l?.selector?.length&&a.click());default:return}bt(n),void 0!==p&&xn(t,d[p])});let s=!1;mt(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,gt(r,()=>{s=!1,r.closed||w(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function En(t){const{art:e,active:r}=t,{controls:n,constructor:{SETTING_WIDTH:o,SETTING_ITEM_HEIGHT:i},template:{$player:a,$setting:s,$bottom:c}}=e;if(!n.setting||!t.show||!r)return;const l=a.getBoundingClientRect(),d=n.setting.getBoundingClientRect(),p=l.width/a.offsetWidth||1,f=(d.left-l.left+d.width/2)/p-a.clientLeft,h=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:c}=t,l=Math.min(Math.max(0,c),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*l));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-l)),left:Math.max(l,Math.min(a-d/2,e-l-d))}}({containerWidth:a.clientWidth,containerHeight:a.clientHeight,requestedWidth:r[0]?.$parent?.width||o,rows:r.length+(r===t.option?0:1),rowHeight:i,controlCenter:f,bottom:Number.parseFloat(getComputedStyle(s).bottom)||0,padding:Number.parseFloat(getComputedStyle(c).paddingLeft)||0});s.style.height=`${h.height}px`,s.style.width=`${h.width}px`,e.isRotate||u||(f+h.width/2>a.clientWidth?(s.style.left="",s.style.right=""):(s.style.left=`${h.left}px`,s.style.right="auto"))}const An=new WeakMap;function Cn(t){An.delete(t)}const Sn=new WeakMap;function Tn(t,e){e?Sn.set(t,e):Sn.delete(t)}function Ln(t){const e=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),r=[],n=Sn.get(t),o=n?.();for(const i of["html","icon","tooltip"]){const t=e.get(i)?.value;t instanceof Node&&r.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{for(const r of Reflect.ownKeys(t))!e.has(r)&&Object.getOwnPropertyDescriptor(t,r)?.configurable&&Reflect.deleteProperty(t,r);for(const[r,n]of e)Object.defineProperty(t,r,n);o?.(),Tn(t,n);for(const{node:t,parent:e,next:n}of r)e?e.insertBefore(t,n?.parentNode===e?n:null):t.parentNode?.removeChild(t)}}function Pn(t){const e=t.$item?.querySelector(".art-setting-range");e&&e.setAttribute("aria-label",t.$html?.textContent||"")}const Mn=new WeakMap;async function zn(t,e,r,n,o,i,a,s){try{const c=hn(e),l=hn(i),d=(Mn.get(i)||0)+1;Mn.set(i,d);const u=()=>Kr(c)&&Kr(l)&&!w(t.art)&&Mn.get(i)===d;if(s?.(),!u())return;const p=await o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(c){console.warn("ArtPlayer setting callback failed:",c)}}function Rn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const On=new WeakMap;function Dn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof h?e.push(...r.errors):e.push(r)}if(e.length)throw new h(e)}function In(t){On.get(t)?.()}function Nn(t,e){const r=t.find(e.name);if(w(t.art))return r||e;if(!r)return t.add(e);const n=kn(t);Cn(r),In(r);const o=Ln(r),i=r.$item,a=i?.parentNode,s=i?.nextSibling,c=i?Rn(i):void 0,l=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=gn(t.art,e);r&&i.push(r)}for(const t of n)a.push(Zr(sn(t)))}catch(c){try{Dn([...i.reverse().map(t=>t.resume),...a])}catch(l){console.warn("ArtPlayer setting restore failed:",l)}throw c}let s=!0;return{items:r,resume(){s&&(s=!1,Dn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,Dn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>cn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);if(w(t.art))return void u.dispose();const e=r.$item;try{Dn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>c?.(),()=>{a&&i&&a.insertBefore(i,s?.parentNode===a?s:null)},()=>t.format(),()=>{if(f){t.active=l,l&&t.cache.has(l)&&W(t.cache.get(l),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!w(t.art)&&On.get(r)===h;for(const y of u.items)On.set(y,h);const g=b(t.art).add(()=>{p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!o?.enumerable||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);return u.dispose(),n(r.$item),r}catch(v){throw m()&&h(),v}finally{g()}}const _n=new WeakMap;function Wn(t,e,r){it(t,`$${e}`,{configurable:!0,get:()=>r}),it(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",N(r,n),"html"===e&&Pn(t)}})}function Fn(t,e,r=!1){const n=function(t){const e=On.get(t);return()=>!e||On.get(t)===e}(e);if(!t.cache.has(e.$option))return;const o=t.cache.get(e.$option),i=e.$item;let a="selector";st(e,"switch")&&(a="switch"),st(e,"range")&&(a="range"),st(e,"onClick")&&(a="button");const{icons:s,constructor:c}=t.art;if(!n())return;const l=function(t,e,r=b(t)){const n=ln.get(e);(!n||Kr(n)||n.closed)&&mn(t,e);const o=r.child();return ln.set(e,o),dn.set(e,r),un.set(o,nn(e).events),o.add(()=>{pn(t,un.get(o))}),o}(t.art,e,sn(o)),d=()=>Kr(l)&&!w(t.art)&&n();if(!d())return;const u=document.createElement("div");try{if(Tn(e),O(u,"art-setting-item"),H(u,"height",`${c.SETTING_ITEM_HEIGHT}px`),u.dataset.name=e.name||"",u.dataset.value=String(e.value||""),!d())return;const n=kt(u,'
'),p=kt(u,'
'),f=document.createElement("div");switch(O(f,"art-setting-item-left-icon"),a){case"button":case"switch":case"range":{const t=e.icon||s.config;if(!d())return;N(f,t);break}case"selector":if(e.selector?.length){const t=e.icon||s.config;if(!d())return;N(f,t)}else N(f,s.check)}if(N(n,f),!d())return;Wn(e,"icon",f);const h=document.createElement("div");O(h,"art-setting-item-left-text");const m=e.html||"";if(!d())return;N(h,m),N(n,h),Wn(e,"html",h);const g=document.createElement("div");O(g,"art-setting-item-right-tooltip");const v=e.tooltip||"";if(!d())return;switch(N(g,v),N(p,g),Wn(e,"tooltip",g),a){case"switch":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=kt(t,s.switchOn),n=kt(t,s.switchOff),o=e.switch;if(!d())return;H(o?n:r,"display","none"),N(p,t),it(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!d())return;Tn(e,()=>{const t=i;return()=>{i=t}}),it(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,u.setAttribute("aria-checked",String(Boolean(t))),t?(H(n,"display","none"),H(r,"display",null)):(H(n,"display",null),H(r,"display","none"))}});break}case"range":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",N(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!d())return;Reflect.set(r,i,String(t))}O(r,"art-setting-range"),N(p,t),it(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!d())return;Tn(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),it(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(e.selector?.length){const t=document.createElement("div");O(t,"art-setting-item-right-icon"),N(t,s.arrowRight),N(p,t)}}if(!d())return;if(function(t,e,r,n){const{art:o}=t,i=hn(e),a=(t,r,n)=>vn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>zn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>zn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{if(e.selector?.length)t.render(e.selector);else{if(e.$parent?.onSelect)return zn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&O(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>zn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,u,a),!d())return;it(e,"$item",{configurable:!0,get:()=>u}),function(t,e,r,n,o){"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||e.selector?.length||r.setAttribute("aria-current",String(Boolean(e.default))),xt(o,r,()=>r.click(),()=>Kr(o)&&!w(t.art))):Pn(e)}(t,e,u,a,l),r&&i?.parentNode?i.replaceWith(u):N(o,u),e.mounted&&d()&>(l,()=>{if(!w(t.art))try{const r=e.mounted?.call(t.art,u,e);Promise.resolve(r).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(r){console.warn("ArtPlayer setting mounted failed:",r)}},0)}catch(p){try{l.dispose()}catch(f){console.warn("ArtPlayer setting cleanup failed:",f)}throw u.remove(),p}}function Vn(t,e=t.option){if(w(t.art))return;const r=kn(t),n=t.cache.get(e);if(n&&!Kr(sn(n)))return;const o=(_n.get(t)||0)+1;_n.set(t,o);const i=()=>_n.get(t)===o&&!w(t.art),a=t.active,s=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),c=()=>{t.active=a,a&&t.cache.has(a)&&W(t.cache.get(a),"art-current");for(const[e,r,n]of s)t.$parent.style.setProperty(e,r,n)};if(t.active=e,n)try{W(n,"art-current"),t.resize()}catch(l){throw i()&&t.cache.get(e)===n&&!sn(n).closed&&c(),l}else{const r=document.createElement("div");t.cache.set(e,r);const n=function(t,e,r){const n=b(t.art).child();return an.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,r),o=()=>!n.closed&&!w(t.art)&&t.cache.get(e)===r,a=[];try{if(!o())return;O(r,"art-setting-panel"),r.setAttribute("role","group"),r.setAttribute("aria-label",e[0]?.$parent?.$html?.textContent||t.art.i18n.get("Settings")),N(t.$parent,r),W(r,"art-current"),e[0]?.$parent&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=Qr.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=b(e).child(),n=(t,n)=>{if(r.closed||w(e))return;const o=(...t)=>{if(!r.closed&&!w(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=L(r,e.controls.setting),o=L(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||w(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),$n(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(Q(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{yn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){on(e,t)}check(t){!function(t,e){e?.$parent&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&W(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=Qr.get(t)||{active:!0},a=[],s=new Set,c=new Set(o),l=(t,e,r)=>{for(let n=0;nnn(t).parent},$parents:{get:()=>nn(t).parents},$option:{get:()=>nn(t).option},$events:{get:()=>nn(t).events},$formatted:{get:()=>!0}}),Jr.set(t,{parent:r,parents:n,option:o,events:a?.events||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return on(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){En(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&cn(n)}catch(i){r.push(i)}}try{mn(t.art,e)}catch(i){i instanceof h?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new h(r)}(this,t)}remove(t){const e=kn(this),r=this.find(t);X(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Cn(t),In(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>o?.remove(),()=>this.render()])try{s()}catch(a){a instanceof h?i.push(...a.errors):i.push(a)}if(i.length)throw new h(i);e()}update(t){return Nn(this,t)}add(t,e=this.option){if(w(this.art))return t;let r=!1;this.traverse(e=>{r||(r=e===t)});const n=e.length,o=r?void 0:function(t){const e={};An.set(t,e);const r=()=>An.get(t)===e;return{current:r,finish(){r()&&An.delete(t)}}}(t);let i=!1;try{e.push(t),this.format(),i=!0,this.createItem(t),this.render()}catch(a){if(w(this.art)||o&&!o.current())throw a;if(e[n]===t&&e.splice(n,1),!r&&i){try{this.inactivate(t)}catch(s){console.warn("ArtPlayer setting cleanup failed:",s)}t.$item?.remove()}throw a}finally{o?.finish()}return t}createHeader(t){!function(t,e){if(!t.cache.has(e.$option))return;const r=t.cache.get(e.$option),{icons:{arrowLeft:n},constructor:{SETTING_ITEM_HEIGHT:o}}=t.art,i=document.createElement("div");H(i,"height",`${o}px`),O(i,"art-setting-item"),O(i,"art-setting-item-back");const a=kt(i,'
'),s=document.createElement("div");O(s,"art-setting-item-left-icon"),N(s,n),N(a,s),N(a,e.$parent.html),vn(t.art,e.$parent,i,"click",()=>t.render(e.$parents),sn(r));const c=sn(r);i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||xt(c,i,()=>i.click(),()=>Kr(c)&&!w(t.art)),i.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${i.textContent?.trim()||""}`),N(r,i)}(this,t)}createItem(t,e=!1){Fn(this,t,e)}render(t=this.option){Vn(this,t)}}class Hn{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch{return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch{this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch{delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}const jn='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class qn{constructor(t){this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope)?.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}async run(t){if(this.active)try{return await Promise.race([t(),this.cancelled])}finally{this.cancel()}}}const Un=new WeakMap;function Xn(t){return Un.get(t)}function Gn(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const Kn=Ft;class Zn extends Kn{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=b(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return Un.set(t,n),r.add(()=>{Gn(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){return this.art.template.$video?.textTracks?.[0]}get activeCues(){return Array.from(this.textTrack?.activeCues||[])}get cues(){return Array.from(this.textTrack?.cues||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?j(r,t):H(r,t,e)}update(){!function(t){const e=Xn(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?ot(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}async switch(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i={...o.subtitle,...e,url:t},a=Xn(this),s=a.revision+1,c=await this.init(i);return!a.scope.closed&&a.revision===s&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),c}createTrack(t,e){!function(t,e,r){const n=Xn(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,c=s.parentNode,l=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const c=t.textTrack,l=c?i.proxy(c,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(l)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=l,s.onload=null,s.onerror=null,p=!0;try{f?.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&Gn(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,c&&c.insertBefore(s,l?.parentNode===c?l:null),f}}(this,t,e)}async init(t){const e=Xn(this),r=function(t){const e=t.request,r=new qn(t.scope);return t.request=r,t.revision+=1,e?.cancel(),r}(e),{notice:n,template:{$subtitle:i}}=this.art;return r.run(async()=>{if(!this.textTrack)return null;if(o(t,_t.subtitle),!t.url)return;let a;this.option=t,this.style(t.style);try{if(!r.active)return;const n=await fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const o=await n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||K(e.url)){case"srt":return{vtt:e.onVttLoad(dt(r))};case"ass":return{vtt:e.onVttLoad(pt(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(o,t);if(!r.active)return;const c=void 0===s?t.url:a=ut(s.vtt);if(!r.active)return;i.innerHTML="";const l=e.trackRevision+1;if(this.url!==c&&this.createTrack("metadata",c),!r.active||e.trackRevision>l)return;return a&&(e.ownedURL=a,a=void 0),c}catch(s){if(!r.active)return;throw i.innerHTML="",n.show=s,s}finally{a&&(e.scope.closed||this.url!==a?URL.revokeObjectURL(a):e.ownedURL=a)}})}}const Jn=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${i}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class Qn{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=R(e.container),X(this.$container,`No container element found by ${e.container}`)),X(P(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();X("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),X(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=v.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=y(t);o.rollback=r,v.set(e,t),o.releaseContainer=()=>{v.get(e)===t&&v.delete(e)}}(t,this.$container,Rn(this.$container)),function(t,e,r){const n=y(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return Jn}query(t){return R(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=Qn.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(w(this.art))return;!function(t){X(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),F(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&O(this.$player,"art-backdrop"),u&&O(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":O(this.$player,"art-destroy")}}const to=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class eo{on(t,e,r){const n=this.e||(this.e={});let o=to(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(to(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=to(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new Qn(this),b(this).closed)return;if(this.events=new Pe(this),b(this).closed)return;if(this.storage=new Hn,b(this).closed)return;if(this.icons=new We(this),b(this).closed)return;if(this.i18n=new Ne(this),b(this).closed)return;if(this.notice=new Ge(this),b(this).closed)return;if(this.player=new Or(this),b(this).closed)return;if(this.layers=new He(this),b(this).closed)return;if(this.controls=new we(this),b(this).closed)return;if(this.contextmenu=new Xt(this),b(this).closed)return;if(this.subtitle=new Zn(this),b(this).closed)return;if(this.info=new Be(this),b(this).closed)return;if(this.loading=new je(this),b(this).closed)return;if(this.hotkey=new De(this),b(this).closed)return;if(this.mask=new qe(this),b(this).closed)return;if(this.setting=new Bn(this),b(this).closed)return;if(this.plugins=new Xr(this),b(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),oo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${oo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=y(t);return e.rollback=void 0,!e.scope.closed})(this)&&no.push(this)}catch(r){try{x(this,no,!0,oo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return no}static get version(){return i}static get config(){return f}static get utils(){return ft}static get scheme(){return _t}static get Emitter(){return eo}static get validator(){return o}static get kindOf(){return o.kindOf}static get html(){return Qn.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:c?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator?.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){x(this,no,t,oo.REMOVE_SRC_WHEN_DESTROY)}}var io,ao;return oo.STYLE=jn,oo.DEBUG=!1,oo.CONTEXTMENU=!0,oo.NOTICE_TIME=2e3,oo.SETTING_WIDTH=250,oo.SETTING_ITEM_WIDTH=200,oo.SETTING_ITEM_HEIGHT=35,oo.RESIZE_TIME=200,oo.SCROLL_TIME=200,oo.SCROLL_GAP=50,oo.AUTO_PLAYBACK_MAX=10,oo.AUTO_PLAYBACK_MIN=5,oo.AUTO_PLAYBACK_TIMEOUT=3e3,oo.RECONNECT_TIME_MAX=5,oo.RECONNECT_SLEEP_TIME=1e3,oo.CONTROL_HIDE_TIME=3e3,oo.DBCLICK_TIME=300,oo.DBCLICK_FULLSCREEN=!0,oo.MOBILE_DBCLICK_PLAY=!0,oo.MOBILE_CLICK_PLAY=!1,oo.AUTO_ORIENTATION_TIME=200,oo.INFO_LOOP_TIME=1e3,oo.FAST_FORWARD_VALUE=3,oo.FAST_FORWARD_TIME=1e3,oo.TOUCH_MOVE_RATIO=.5,oo.VOLUME_STEP=.1,oo.SEEK_STEP=5,oo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],oo.ASPECT_RATIO=["default","4:3","16:9"],oo.FLIP=["normal","horizontal","vertical"],oo.FULLSCREEN_WEB_IN_BODY=!0,oo.LOG_VERSION=!0,oo.USE_RAF=!1,oo.REMOVE_SRC_WHEN_DESTROY=!0,io=oo,ao=jn,p&&(window.Artplayer=io,a("artplayer-style",ao),setTimeout(()=>{io.LOG_VERSION&&console.log(`%c ArtPlayer %c ${io.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),oo}); +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var e,r={exports:{}};var n=(e||(e=1,r.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const s=globalThis.CUSTOM_USER_AGENT??("undefined"===typeof navigator?"":navigator.userAgent),c=/^(?:(?!chrome|android).)*safari/i.test(s),l=/iPad|iPhone|iPod/i.test(s)&&("undefined"===typeof window||!window.MSStream),d=l||s.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,u=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)||d,p="undefined"!==typeof window&&"undefined"!==typeof document;const f={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class h extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class m{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new m,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof h?t.push(...e.errors):t.push(e)}if(t.length)throw new h(t)}}const g=new WeakMap,v=new WeakMap;function y(t){const e=g.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function b(t){return y(t).scope}function w(t){const e=y(t);return e.destroying||e.scope.closed}function x(t,e,r,n,o=!1){const i=y(t);if(i.destroying||i.scope.closed)return;i.destroying=!0;const a=[],s=t=>{try{t()}catch(e){a.push(...e instanceof h?e.errors:[e])}};n&&t.template?.$video&&s(()=>t.reset()),s(()=>i.scope.dispose()),s(()=>(t.template||i.mountingTemplate)?.destroy(r));const c=e.indexOf(t);-1!==c&&e.splice(c,1),t.isDestroy=!0,o||(i.releaseContainer?.(),i.releaseContainer=void 0),s(()=>t.emit("destroy")),s(()=>i.finalizers.dispose()),o&&i.rollback&&s(i.rollback),i.rollback=void 0,i.releaseContainer?.(),i.releaseContainer=void 0;for(const l of a.slice(1))console.warn("Additional ArtPlayer cleanup failure:",l);if(a.length)throw a[0]}const k=new WeakMap;function $(t,e){const r=b(t).child();return k.set(e,r),r}function E(t){const e=k.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function A(t){k.get(t)?.dispose()}function C(t,e,r,n){const o=E(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function S(t,e){return{on:(r,n)=>{C(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=E(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function T(t){if(t.composedPath)return t.composedPath();const e=[];let r=t.target;for(;r;)e.push(r),r=r.parentNode??null;return"undefined"===typeof window||e.includes(window)||e.push(window),e}function L(t,e){return T(t).includes(e)}function P(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function M(t){return t.getBoundingClientRect()}function z(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function R(t,e=document){return e.querySelector(t)}function O(t,e){return t.classList.add(e)}function D(t,e){return t.classList.remove(e)}function I(t,e){return t.classList.contains(e)}function N(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function _(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function W(t,e){_(t).forEach(t=>D(t,e)),O(t,e)}function F(t,e){return e.parentNode.replaceChild(t,e),t}function V(t){return document.createElement(t)}function Y(t,e,r="top"){u||(t.setAttribute("aria-label",e),O(t,"hint--rounded"),O(t,`hint--${r}`))}function B(t="",e=""){const r=V("i");return O(r,"art-icon"),O(r,`art-icon-${t}`),N(r,e),r}function H(t,e,r){return t.style[e]=r,t}function j(t,e){for(const r in e)H(t,r,e[r]);return t}function q(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new m;let a=!1,s=()=>{};function c(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function l(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void l(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const c=new Image;d(c,()=>l(c)),i.closed||(c.src=e)}catch(e){c(e)}}))}),i.closed||(n.src=t)}catch(u){c(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){c(u)}},e.onerror=()=>c(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class U extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function X(t,e){if(!t)throw new U(e);return t}function G(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function K(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function Z(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function J(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function Q(t){return t.charAt(0).toUpperCase()+t.slice(1)}function tt(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const et={"&":"&","<":"<",">":">","'":"'",'"':"""},rt={"&":"&","<":"<",">":">","'":"'",""":'"'},nt=/(&|<|>|'|")/g;function ot(t){return t.replace(/[&<>'"]/g,t=>et[t]||t)}const it=Object.defineProperty,{hasOwnProperty:at}=Object.prototype;function st(t,e){return at.call(t,e)}function ct(t,e){return Object.getOwnPropertyDescriptor(t,e)}function lt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?lt(o,i):i,it(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function dt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function ut(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function pt(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const ft=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:U,addClass:O,append:N,assToVtt:pt,capitalize:Q,clamp:J,createElement:V,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:it,download:Z,errorHandle:X,escape:ot,get:ct,getComposedPath:T,getExt:K,getIcon:B,getRect:M,getSafeAreaInsets:z,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:st,hasClass:I,includeFromEvent:L,inverseClass:W,isBrowser:p,isIOS:l,isIOS13:d,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:u,isSafari:c,loadImg:function(t,e){return q(t,e,void 0)},mergeDeep:lt,query:R,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:D,replaceElement:F,secondToTime:tt,setStyle:H,setStyleText:a,setStyles:j,siblings:_,silencePromise:G,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:dt,supportsFlex:P,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Y,unescape:function(t){return t.replace(nt,t=>rt[t]||t)},userAgent:s,vttToBlob:ut},Symbol.toStringTag,{value:"Module"}));function ht(){}function mt(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||s?.aborted)return ht;let c=ht;function l(e){a&&c(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,l,o),c=t.add(()=>{try{e.removeEventListener(r,l,i)}finally{s?.removeEventListener("abort",c)}}),s?.addEventListener("abort",c,{once:!0}),c}function gt(t,e,r){if(t.closed)return ht;let n=!0,o=ht;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function vt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=ht;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const yt=new WeakSet;function bt(t){yt.add(t),t.preventDefault()}function wt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function xt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;mt(t,e,"keydown",t=>{const e=t;a(e)&&wt(e)&&!e.defaultPrevented&&("Enter"===e.key?(bt(e),!e.repeat&&i()&&r()):" "===e.key&&(bt(e),!e.repeat&&i()&&(o=!0)))}),mt(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&wt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(bt(n),r())}),mt(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function kt(t,e){return N(t,e)}function $t(t,e){return e.querySelector(t)}const Et=new WeakSet;function At(t){const e=t.template.$player;!w(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Et.has(e)||(Et.add(e),b(t).add(()=>{Et.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Ct=new WeakSet,St="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Tt(t){return[t,...t.querySelectorAll(St)].find(t=>{if(!t.matches(St)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t);return"hidden"!==e?.visibility&&"collapse"!==e?.visibility})}function Lt(t,e,r){const n=e?.ownerDocument,o=n?.activeElement;if(!["control","contextmenu"].includes(t.name??"")||Ct.has(t)||!e||!n||!o||!e.contains(o))return()=>{};const i=t.art.template.$player,a=Array.from(i.querySelectorAll(`.art-${t.name}`)),s=a.indexOf(e),c=[...a.slice(s+1),...a.slice(0,s).reverse()];return Ct.add(t),()=>{if(Ct.delete(t),w(t.art)||!i.isConnected||n.activeElement!==n.body)return;const e=r?t.cache.get(r)?.$ref:void 0;for(const t of[...e?[e]:[],...c]){if(!i.contains(t))continue;const e=Tt(t);if(e)return void e.focus({preventScroll:!0})}At(t.art)}}const Pt="array",Mt="boolean",zt="string",Rt="number",Ot="object",Dt="function";function It(t,e,r){return X(e===zt||e===Rt||t instanceof Element,`${r.join(".")} require '${zt}' or 'Element' type`)}const Nt={html:It,disable:`?${Mt}`,name:`?${zt}`,index:`?${Rt}`,style:`?${Ot}`,click:`?${Dt}`,mounted:`?${Dt}`,tooltip:`?${zt}|${Rt}`,width:`?${Rt}`,selector:`?${Pt}`,onSelect:`?${Dt}`,switch:`?${Mt}`,onSwitch:`?${Dt}`,range:`?${Pt}`,onRange:`?${Dt}`,onChange:`?${Dt}`},_t={id:zt,container:It,url:zt,poster:zt,type:zt,theme:zt,lang:zt,volume:Rt,isLive:Mt,muted:Mt,autoplay:Mt,autoSize:Mt,autoMini:Mt,loop:Mt,flip:Mt,playbackRate:Mt,aspectRatio:Mt,screenshot:Mt,setting:Mt,hotkey:Mt,pip:Mt,mutex:Mt,backdrop:Mt,fullscreen:Mt,fullscreenWeb:Mt,subtitleOffset:Mt,miniProgressBar:Mt,useSSR:Mt,playsInline:Mt,lock:Mt,gesture:Mt,fastForward:Mt,autoPlayback:Mt,autoOrientation:Mt,airplay:Mt,proxy:`?${Dt}`,plugins:[Dt],layers:[Nt],contextmenu:[Nt],settings:[Nt],controls:[{...Nt,position:(t,e,r)=>{const n=["top","left","right"];return X("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}}],quality:[{default:`?${Mt}`,html:zt,url:zt}],highlight:[{time:Rt,text:zt}],thumbnails:{url:zt,number:Rt,column:Rt,width:Rt,height:Rt,scale:Rt},subtitle:{url:zt,name:zt,type:zt,style:Ot,escape:Mt,encoding:zt,onVttLoad:Dt},moreVideoAttr:Ot,i18n:Ot,icons:Ot,cssVar:Ot,customType:Ot},Wt=new WeakSet;class Ft{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return I(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?O(e,r):D(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t;if(w(this.art))return;if(e.html=e.html||"",o(e,Nt),!this.$parent||!this.name||e.disable)return;const r=e.name||`${this.name}${this.id}`,n=this.cache;X(!n.has(r),`Can't add an existing [${r}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=$(this.art,i),s=[],c=Object.getOwnPropertyDescriptor(this,r);let l=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){O(t,`art-${r}`),O(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):N(e,t),i.html&&N(t,i.html),i.style&&j(t,i.style),i.tooltip&&Y(t,i.tooltip)}(i,this.$parent,this.name,r,this.id,e),a.closed)return;if(e.click){("control"===this.name&&!e.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&xt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),e.click.call(this.art,this,t))});s.push(t)}if(e.selector&&["left","right"].includes(e.position)&&this.selector(e,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,r,i),l=!0,n.set(r,{$ref:i,events:s,option:e}),e.mounted&&e.mounted.call(this.art,i),i}catch(d){try{A(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw n.get(r)?.$ref===i&&n.delete(r),l&&this[r]===i&&(c?Object.defineProperty(this,r,c):delete this[r]),i.remove(),d}}remove(t){X(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Wt.has(e))return;const r=Lt(this,e.$ref);Wt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{A(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Wt.delete(e),r()}}update(t){const e=Lt(this,this.cache.get(t.name)?.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{e()}}}function Vt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Yt(t,e){const r=E(t);if(!r.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const n of t.querySelectorAll("[data-value]"))xt(r,n),n.setAttribute("aria-label",`${e}: ${n.textContent?.trim()??""}`);Vt(t)}}const Bt=new WeakMap;function Ht(t,e){e?Bt.set(t,e):Bt.delete(t)}function jt(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=Bt.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function qt(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function Ut(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}class Xt extends Ft{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,$(t,this.$parent),u||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=S(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="1"]',t);n&&W(n,"art-current"),Yt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="default"]',t);n&&W(n,"art-current"),Yt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(Q(t))}`).join(""),i=r.get("Video Flip");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="normal"]',t);n&&W(n,"art-current"),Yt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"flip",index:30})),this.add(function(t){return e=>({...t,html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return{...t,html:`ArtPlayer ${i}`}}({name:"version",index:50})),this.add(function(t){return e=>({...t,html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let i=0;i{this.show=!0,a.closed||w(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:c}=M(n),{height:l,width:d}=M(o);let u=e-s,p=r-c;e+d>s+a&&(u=a-d),r+l>c+i&&(p=i-l),w(t)||j(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=E(o),a=()=>!i.closed&&!w(r);let s,c=!1,l="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?jt(t):n,Ht(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&Ut(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||c&&e===n.ownerDocument.body,d=s;s=void 0,c=!1,l="",Ht(o),i&&(d&&n.contains(d)&&Ut(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&At(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),Ht(o)}),mt(i,o,"focusin",()=>{c=!0});let m=!1;return mt(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,gt(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),mt(i,n,"keydown",n=>{const i=n;if(!a()||!wt(i)||i.defaultPrevented)return;if(("ContextMenu"===i.key||"F10"===i.key&&i.shiftKey)&&r.constructor.CONTEXTMENU&&!qt(i.target)){bt(i),u();const r=i.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&p()[0]?.focus({preventScroll:!0}))}if(!t.show||!o.contains(i.target))return;if("Escape"===i.key)return bt(i),void(t.show=!1);if("Tab"===i.key)return void(t.show=!1);if(qt(i.target))return;const s=p(),c=s.indexOf(i.target);let f;if("ArrowDown"===i.key||"ArrowRight"===i.key)f=s[(c+1)%s.length];else if("ArrowUp"===i.key||"ArrowLeft"===i.key)f=s[(c+s.length-1)%s.length];else if("Home"===i.key)f=s[0];else if("End"===i.key)f=s[s.length-1];else{if(1!==i.key.length||" "===i.key)return;{const t=i.key.toLowerCase();l=Date.now()-d>700?t:l+t,d=Date.now();const e=[...l].every(e=>e===t)?t:l;f=[...s.slice(c+1),...s.slice(0,c+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}bt(i),f?.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||qt(t.target))&&(u(),!0)}}(this,s);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),s(t.clientX,t.clientY))}),o(e,"click",t=>{L(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const Gt=new WeakMap,Kt=new WeakMap,Zt=new WeakMap;function Jt(t){return Zt.get(t)||b(t)}function Qt(t){const e=Gt.get(t),r=Zt.get(t);return()=>Gt.get(t)===e&&(!e||e.active())&&Zt.get(t)===r&&(!r||!r.closed)}function te(t){const e=Zt.get(t),r=b(t).child(),n=r.child();Zt.set(t,r),r.add(()=>{Zt.get(t)===r&&Zt.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!w(t)&&!n.closed&&Gt.get(t)===o};return Gt.set(t,o),n.add(()=>{Gt.get(t)===o&&Gt.delete(t),o.onAssigned=void 0,o.onError=void 0}),e?.dispose(),o}function ee(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&e?.()}function re(t,e,r){Kt.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{Kt.get(t)===e&&(Kt.delete(t),ee(e))}}function ne(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function oe(t,e){const{$progress:r}=t.template,{left:n}=M(r),o=J((u?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:tt(i),width:o,percentage:J(o/r.clientWidth,0,1)}}function ie(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=oe(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ae=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function se(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),c=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),mt(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!wt(r)||r.defaultPrevented)return;const i=ae.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;bt(r);const l=n();if(!a(l))return void c();const d="Home"===r.key?l.min:"End"===r.key?l.max:s(l.value,l)+i*l.step;o(s(d,l)),c()}),c()),c}const ce=new WeakMap;function le(t){return ce.get(t)||0}function de(t,e,r){let n,o=!1,i=!1,a=!1,s=le(t);const c=()=>a||le(t)!==s,l=()=>!!t.template?.$video?.seeking;return{restore(i=()=>{t.currentTime=e}){if(!r()||c())return;const d=le(t);i(),s=le(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!c()&&(o=l()))},manual(){a=!0},ready(){if(!r()||l())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!c()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!l()}}}function ue(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=E(e),{on:a}=S(t,e);let s=()=>{};const c=$t(".art-progress-hover",e),l=$t(".art-progress-loaded",e),d=$t(".art-progress-played",e),p=$t(".art-progress-highlight",e),f=$t(".art-progress-indicator",e),h=$t(".art-progress-tip",e);function m(r,n){const{width:o,time:i}=n||oe(t,r);h.textContent=i||"00:00";const a=h.clientWidth;o<=a/2?H(h,"left",0):o>e.clientWidth-a/2?H(h,"left",e.clientWidth-a+"px"):H(h,"left",o-a/2+"px")}r.indicator?N(f,r.indicator):H(f,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const g="played"===r&&a&&u;if("loaded"===r&&H(l,"width",100*n+"%"),"hover"===r&&(H(c,"width",100*n+"%"),L(a,p)?function(r){const{width:n}=oe(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;h.textContent=o??"";const i=h.clientWidth;n<=i/2?H(h,"left",0):n>e.clientWidth-i/2?H(h,"left",e.clientWidth-i+"px"):H(h,"left",n-i/2+"px")}(a):m(a),0===n?D(o,"art-progress-hover"):O(o,"art-progress-hover")),"played"===r&&(H(d,"width",100*n+"%"),H(f,"left",100*n+"%")),g){O(o,"art-progress-hover");m(a,{width:e.clientWidth*n,time:tt(n*t.duration)}),s(),s=gt(i,()=>{D(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){p.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function pe(t){return e=>({...t,html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ue(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=S(t,e),a=E(e);let s=0;const c=()=>{const e=Qt(t);return()=>!a.closed&&!w(t)&&e()},l=()=>{const t=++s,e=c();return()=>t===s&&e()};if(!u){let e;i(r,"click",e=>{e.target!==n&&ie(t,e,l())}),i(r,"mousemove",e=>{const r=c(),{percentage:n}=oe(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?l():void 0}),o("document:mousemove",r=>{const n=e;if(n?.()){const{second:o,percentage:i}=oe(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=E(e),{on:n}=S(t,e);let o,i=0;const a=se(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${tt(e)} / ${tt(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;o?.dispose();const s=r.child();o=s;const c=Jt(t).add(()=>{s.dispose()});s.add(()=>{c()}),s.add(()=>{o===s&&(o=void 0)});const l=Qt(t),d=()=>n===i&&!s.closed&&!w(t)&&l(),u=de(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function fe(t){const{option:e}=t.art;e.isLive||t.add(pe({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.play),s=kt(t,o.pause);function c(){t.setAttribute("aria-label",i.get("Play")),H(a,"display","flex"),H(s,"display","none")}function l(){t.setAttribute("aria-label",i.get("Pause")),H(a,"display","none"),H(s,"display","flex")}xt(E(t),t,()=>(e.playing?s:a).click()),Y(a,i.get("Play")),Y(s,i.get("Pause")),n(a,"click",()=>{G(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?l():c(),r("video:playing",()=>{l()}),r("video:pause",()=>{c()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.volume),s=kt(t,o.volumeClose);for(const e of[a,s])xt(E(t),e),e.setAttribute("aria-label",i.get("Mute"));const c=kt(t,'
'),l=kt(c,'
'),d=kt(l,'
'),p=kt(l,'
'),f=kt(p,'
'),h=kt(f,'
'),m=kt(p,'
'),g=E(t);let v=0;const y=se(g,p,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||g.closed||w(e)||(e.volume=t/100)},"vertical");function b(t){const{top:e,height:r}=M(p);return 1-(t.clientY-e)/r}function x(){y();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)H(a,"display","none"),H(s,"display","flex"),H(m,"top","100%"),H(h,"top","100%"),d.textContent="0";else{const t=100*e.volume;H(a,"display","flex"),H(s,"display","none"),H(m,"top",100-t+"%"),H(h,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(x(),r("video:volumechange",x),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),u)H(c,"display","none");else{let t=!1;n(p,"mousedown",r=>{t=0===r.button,e.volume=b(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=b(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>({...t,style:u?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=S(e,t);function n(){const r=`${tt(e.currentTime)} / ${tt(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!b(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!u&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.screenshot),r(t,"click",()=>{G(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;kt(t,o.setting),xt(E(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Y(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t),kt(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Y(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenWebOn),s=kt(t,o.fullscreenWebOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Y(t,i.get("Exit Web Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Web Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenOn),s=kt(t,o.fullscreenOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Y(t,i.get("Exit Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rge.get(t).option.selector}),it(t,"$control_item",{get:()=>ge.get(t).item}),it(t,"$control_value",{get:()=>ge.get(t).value})),ge.set(t,e)}function ye(t,e){t.innerHTML=e}function be(t,e,r,n,o){const{proxy:i}=t.events,a=E(n),s=r.selector;O(n,"art-control-selector");const c=document.createElement("div");O(c,"art-selector-value"),N(c,r.html),n.textContent="",N(n,c);const l=kt(n,'
');for(let f=0;f{if(a.closed)return;const o=T(n),i=r.selector.find(t=>o.includes(t.$control_item));if(!i)return;const s=++d,l=()=>!a.closed&&s===d,u=a.add(function(t,e){return he.set(t,e),()=>{he.get(t)===e&&he.delete(t)}}(n,l));try{if(e(i),a.closed)return;if(r.onSelect){const e=await r.onSelect.call(t,i,i.$control_item,n);if(l()){const t=c.contains(c.ownerDocument.activeElement);ye(c,e),ge.get(i)?.refresh?.(t)}}}catch(p){console.warn("ArtPlayer selector failed:",p)}finally{u()}});o.push(u);const p=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(me));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,c=!1,l=!1,d="",u=0;const p=()=>i.length>0&&(c||s&&!l),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(me)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{c=t,l=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},g=e=>{e&&!t.closed&&((e.querySelector(me)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},v=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",g(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};xt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&v()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(me)||(b.tabIndex=-1,xt(t,b,()=>{b.click(),y()}))}return mt(t,r,"keydown",t=>{const e=t;!wt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(bt(e),v("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(bt(e),y()))}),mt(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&v()}),mt(t,n,"keydown",t=>{const e=t;if(!wt(e)||e.defaultPrevented)return;if("Escape"===e.key)return bt(e),void y();const r=i.indexOf(e.target);if(r<0)return;let n;switch(1!==e.key.length&&(d=""),e.key){case"ArrowDown":n=Math.min(r+1,i.length-1);break;case"ArrowUp":n=Math.max(r-1,0);break;case"Home":n=0;break;case"End":n=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void bt(e);default:{if(1!==e.key.length||" "===e.key)return;const t=Date.now();d=t-u<500?d+e.key.toLocaleLowerCase():e.key.toLocaleLowerCase(),u=t;const o=[...d].every(t=>t===d[0])?d[0]:d;for(let e=1;e<=i.length;e++){const t=(r+e)%i.length;if(i[t].textContent?.trim().toLocaleLowerCase().startsWith(o)){n=t;break}}}}bt(e),void 0!==n&&g(i[n])}),mt(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),mt(t,e,"mouseenter",()=>{s=!0,m(c)}),mt(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),mt(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,c,l,String(r.tooltip||r.name||c.textContent||t.i18n.get("Open")));for(const f of s)ge.get(f).refresh=p}class we extends Ft{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},c=()=>{i=!0,s()},l=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(o?.dispose(),n=e.ownerDocument,o=t.child(),mt(o,n,"keydown",c,{capture:!0}),mt(o,n,"mousedown",l,{capture:!0}),mt(o,n,"touchstart",l,{capture:!0,passive:!0}))};return d(),mt(t,e,"keydown",c,{capture:!0}),mt(t,e,"mousedown",l,{capture:!0}),mt(t,e,"touchstart",l,{capture:!0,passive:!0}),mt(t,e,"focusin",()=>{d(),s()}),mt(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}($(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=S(t,n);a(r,"focusin",e=>{t.isFocus=!0,t.isInput="INPUT"===e.target?.tagName}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{u||(this.show=!0)}),i("click",()=>{u?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=L(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(D(r,"art-hide-cursor"),O(r,"art-hover"),this.timer=Date.now()):(O(r,"art-hide-cursor"),D(r,"art-hover"))}),this.init(),b(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=E(e),{on:i}=S(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);return t.observe(r),void o.add(()=>{t.disconnect()})}if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){fe(this)}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:X(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){if(!t)return;const e=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);ye(t.$control_value,t.html);for(let r=0;rthis.check(t),t,e,r)}}function xe(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{if(w(t))return;const n=L(r,e);t.isInput=n&&"INPUT"===r.target?.tagName,t.isFocus=n,t.emit(n?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),b(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(w(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:c}=r,l=o.filter(t=>n-t<=a);switch(l.length){case 1:if(t.emit("click",e),w(t))return;(!u||!t.isLock&&i)&&G(t.toggle()),o=l;break;case 2:if(t.emit("dblclick",e),w(t))return;u?!t.isLock&&s&&G(t.toggle()):c&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function ke(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!w(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),b(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(w(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:Qt(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ie(t,i,()=>n(s))}catch(c){throw e===s&&r(),c}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,c=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,c].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const l=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===l||2===l:3===l||4===l))return;const d=J((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=J(i.time+t.duration*d*c,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",J(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${tt(u)} / ${tt(t.duration)}`))},cancel:r}}const $e=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],Ee=["resize","scroll","orientationchange"];const Ae=new WeakMap;function Ce(t){const e=Ae.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function Se(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=Se(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ce(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(o?.capture),once:Boolean(o?.once),passive:o?.passive,signal:o?.signal},c="boolean"===typeof s?s:s.capture,l="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||l?.aborted)return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,c),l?.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):l?.aborted?p():l?.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function Te(t){return(e,r)=>{if(w(t))return;const n=(...e)=>{if(!w(t))return r(...e)};t.on(e,n),b(t).add(()=>{t.off(e,n)})}}function Le(t){if(!t.constructor.USE_RAF)return;const e=b(t);let r=()=>{};const n=()=>{w(t)||(t.playing&&t.emit("raf"),w(t)||(r=function(t,e){if(t.closed)return ht;let r=!0,n=ht;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),Te(t)("destroy",()=>r())}class Pe{constructor(t){this.destroyEvents=new Set,function(t,e){Ae.set(t,{scope:b(e),cleaning:!1})}(this,t),b(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),xe(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{w(t)||(O(r,"art-hover"),t.emit("hover",!0,e))},e=>{w(t)||(D(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{w(t)||t.emit("mousemove",e)})}(t,this),function(t,e){const{option:r,constructor:n}=t,o=Te(t);o("resize",()=>{const{aspectRatio:e,notice:n}=t;"standard"===t.state&&r.autoSize&&t.autoSize(),w(t)||(t.aspectRatio=e,w(t)||(n.show=""))});const i=b(t);let a=()=>{};const s=()=>{w(t)||(a(),a=gt(i,()=>t.emit("resize"),n.RESIZE_TIME))};o("window:orientationchange",s),o("window:resize",s);const c=t.template.$player.ownerDocument.defaultView?.screen?.orientation;"function"===typeof c?.addEventListener&&e.proxy(c,"change",s)}(t,this),function(t,e){if(!u||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=ke(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=b(t),a=Te(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=o?.innerHeight||n.documentElement.clientHeight,a=o?.innerWidth||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,c=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&c}(n,r.SCROLL_GAP)),w(t)||(s=!0,gt(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;b(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){if(w(t))return;const a=++n,s={disposers:[]},c=()=>a!==n||w(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,a=i.window||n.ownerDocument?.defaultView||window,l=(n,o,i)=>{for(const a of o){if(c())return;s.disposers.push(e.proxy(n,a,e=>{r!==s||w(t)||t.emit(`${i}:${a}`,e)}))}};l(o,$e,"document"),l(a,Ee,"window")}catch(d){throw o(s),d}if(c())return void o(s);const l=r;r=s,o(l)}i(),e.bindGlobalEvents=i}(t,this),Le(t)}proxy(t,e,r,n={}){return Array.isArray(e),Se(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ce(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Me(t){if(t&&1===t.nodeType)return t}function ze(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function Re(t,e){if(function(t){return yt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const r=function(t,e){const r=t.target;return 9===r?.nodeType?r:r?.ownerDocument||t.view?.document||e}(t,e);let n=Me(r.activeElement);for(;n?.shadowRoot?.activeElement;)n=Me(n.shadowRoot.activeElement);if(n&&ze(n))return!1;const o=Me(t.composedPath?.()[0])||Me(t.target),i="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(i||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(i?",a[href]":"");if(o?.closest?.(t)||n?.closest?.(t))return!1}return!o||!ze(o)}const Oe=new WeakMap;class De{constructor(t){this.art=t,this.keys={},Oe.set(this,{subscribed:!1}),u||this.init()}init(){const t=this.art;if(w(t))return;const e=Oe.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{G(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!w(t)){if(t.isFocus&&Re(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ie={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ie);class Ne{constructor(t){this.art=t,this.languages={"zh-cn":Ie},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=st(this.languages,t)&&this.languages[t]||{}}get(t){return st(this.language,t)&&this.language[t]||t}update(t){this.languages=lt(this.languages,t),this.init()}}const _e={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class We{constructor(t){const e={..._e,...t.option.icons};for(const r in e)it(this,r,{get:()=>B(r,e[r])})}}const Fe=new WeakMap;function Ve(t,e,r){const n=()=>!e.closed&&!w(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:c,$video:l}}=t,d=i(c,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!w(t),s=()=>n.classList.contains("art-info-show"),c=t.i18n.get("Close");if(!a())return;const l=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",c),o.setAttribute("role","group"),o.setAttribute("aria-label",l),xt(e,i,()=>i.click(),s),mt(e,o,"keydown",t=>{const e=t;a()&&s()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),r())});const d=e=>{if(!a())return;const r=n.ownerDocument,s=r.activeElement;if(e)o.contains(s)||(Fe.delete(t),s&&n.contains(s)&&(Fe.set(t,jt(s)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Fe.get(t);if(Fe.delete(t),!o.contains(s))return;const i=e&&r.defaultView?.getComputedStyle(e).visibility;e?.isConnected&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):At(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{try{for(const t of u){if(!n())return;const e=Reflect.get(l,t.dataset.video??"undefined");if(!n())return;const r="number"===typeof e?e.toFixed(2):e;if(!n())return;if(t.textContent!==r){const e=null==r?null:`${r}`;if(!n())return;t.textContent=e}}n()&>(e,f,a.INFO_LOOP_TIME)}catch(t){o(t)}};n()&&f()}catch(i){o(i)}}const Ye=new WeakMap;class Be extends Ft{constructor(t){super(t),this.name="info",Ye.set(this,{revision:0}),u||this.init()}init(){const t=Ye.get(this),e=++t.revision;if(t.scope?.dispose(),w(this.art)||t.revision!==e)return;const r=b(this.art).child();t.scope=r,r.add(()=>{t.scope===r&&(t.scope=void 0)}),Ve(this.art,r,()=>{this.show=!1})}}class He extends Ft{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{H(i,"display","none"),H(s,"display",null),w(t)&&(c=!0)};var d;t.on("destroy",l),(d=t,y(d).finalizers).add(()=>{try{c||l()}finally{t.off("destroy",l)}}),w(t)||n.proxy(e.$state,"click",()=>{w(t)||G(t.play())})}}const Ue=new WeakMap;function Xe(t){const e=Ue.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class Ge{constructor(t){this.art=t,this.timer=null,Ue.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),b(t).add(()=>{t.off("destroy",e)}),b(t).add(()=>{this.destroy()})}destroy(){Xe(this)}set show(t){if(w(this.art))return;const e=Ue.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){Xe(this);const i=e.revision,a=()=>!w(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(O(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const c={};e.pending=c;const l=setTimeout(()=>{if(w(this.art)||e.pending!==c)return;e.pending=void 0;const t=e.revision;o.textContent="",w(this.art)||e.revision!==t||D(n,"art-notice-show")},s);a()?this.timer=l:clearTimeout(l)}else D(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function Ke(t,e){return function(t,e){const r=lt(e,t);return r.container=t.container,o(r,_t)}(t,e)}function Ze({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function Je(t,e){if(!Ze(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return Ze(r)?r:void 0}function Qe(t,e,r,n=!1){const o=e=>{w(t)||r(e)};t[n?"once":"on"](e,o),b(t).add(()=>{t.off(e,o)})}function tr(t,e,r){for(const[n,o]of e){if(w(t)||r&&!r())return;t[n].show=o}}function er(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=Jt(t),c=0;return{reset(){c=0,a?.dispose(),D(i,"art-error")},loadStart(){D(i,"art-error")},schedule(l){(async l=>{if(w(t))return;const d=Jt(t);if(d!==s&&(s=d,c=0),a&&!a.closed)return;const u=d.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!w(t)&&!u.closed&&d===Jt(t),f=c{console.warn("ArtPlayer reconnect failed:",t)})}}}const rr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],nr=(()=>{if("undefined"===typeof document)return!1;const t=rr[0],e={};for(const r of rr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),or={change:nr.fullscreenchange,error:nr.fullscreenerror},ir={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{ir.off("change",o),r()};ir.on("change",o);const i=t[nr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!ir.isFullscreen)return void t();const r=()=>{ir.off("change",r),t()};ir.on("change",r);const n=document[nr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>ir.isFullscreen?ir.exit():ir.request(t,e),onchange(t){ir.on("change",t)},onerror(t){ir.on("error",t)},on(t,e){const r=or[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=or[t];r&&document.removeEventListener(r,e,!1)},raw:nr};function ar(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(ir,{isFullscreen:{get:()=>Boolean(document[nr.fullscreenElement])},element:{enumerable:!0,get:()=>document[nr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[nr.fullscreenEnabled])}});const sr=new WeakMap;function cr(t){try{Promise.resolve(t()).catch(()=>{})}catch{}}function lr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=sr.get(t);if(!n){n=new WeakMap,sr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),cr(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),cr(i))}function dr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,c=!1,l=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!c){c=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{c||(c=!0,l=!0,a(),d&&!u&&r&&lr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(mt(i,t.document,t.changeEvent,m),mt(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){sr.get(t.document)?.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,l&&!u&&r&&lr(t),u?Promise.resolve(e).then(()=>{l?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(g){h(!0,g)}return{promise:f,cancel:()=>i.dispose()}}function ur(t,e){const r=b(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),c=0,l=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch{}}return r.add(()=>{c+=1,l=!1,n.classList.remove("art-fullscreen"),f()}),mt(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){return sr.get(t.document)?.has(t.target)??!1}(e))return;if(r&&u)return void f();if(r===s||w(t))return;s=r;const o=c,a=()=>w(t)||i()!==r||o!==c&&l!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),mt(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!w(t)&&t.emit("fullscreenError",r)}),{get:()=>!w(t)&&i(),set(n){if(w(t))return Promise.resolve();const o=++c;if(l=Boolean(n),l?u=!1:d&&(u=!0),a?.cancel(),a=void 0,d=!1,!l&&!i())return Promise.resolve();p=!0,d=l;const s=dr(e,r,l,()=>{!w(t)&&l||f()},()=>!i());p=!1,c===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw w(t)||c!==o||(t.notice.show=e),e}).finally(()=>{c===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const pr=new WeakSet;function fr(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function hr(t){pr.delete(t),t.removeEventListener("webkitbeginfullscreen",mr),t.removeEventListener("webkitpresentationmodechanged",mr)}function mr(t){if(pr.has(this)&&fr(this,"webkitbeginfullscreen"===t.type)){hr(this);try{this.webkitExitFullscreen?.()}catch{}}}function gr(t){pr.add(t),t.addEventListener("webkitbeginfullscreen",mr),t.addEventListener("webkitpresentationmodechanged",mr)}function vr(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=fr(e),i=o,a=!1,s=0;const c=()=>fr(e,n);function l(r){if(w(t)||(l=e,pr.has(l)))return;var l;"boolean"===typeof r&&(n=r);const d=c();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>w(t)||c()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{s++,i=!1,a&&gr(e),c()&&e.webkitExitFullscreen?.()}),mt(r,e,"webkitbeginfullscreen",()=>l(!0)),mt(r,e,"webkitendfullscreen",()=>l(!1)),mt(r,e,"webkitpresentationmodechanged",()=>l());const d=()=>l();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!w(t)&&c(),set(r){if(w(t))return;const n=++s;if(i=Boolean(r),r){if(hr(e),t.state="fullscreen",w(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,gr(e)),c()&&e.webkitExitFullscreen()}}}function yr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function br({node:t,parent:e,next:r}){if(!e)return void t.parentNode?.removeChild(t);const n=r?.parentNode===e?r:null;t.parentNode===e&&t.nextSibling===n||e.insertBefore(t,n)}function wr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function xr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function kr(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const c=t.icons.play,l=t.icons.pause;if(o.closed)return;i.append(c,l),s.append(e,i),xt(o,e,()=>e.click(),r),xt(o,i,()=>(t.playing?l:c).click(),r);const d=t.i18n.get("Close");if(o.closed||w(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||w(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),mt(o,s,"keydown",t=>{const e=t;r()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),n())}),mt(o,e,"click",n),mt(o,c,"click",()=>{G(t.play())}),mt(o,l,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||w(t)||(i.setAttribute("aria-label",e),c.style.display=t.playing?"none":"flex",l.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};mt(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const c=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},l=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=wr(i.left,i.top,xr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",c),r.add(()=>{t.off("document:mousemove",c)}),t.on("document:mouseup",l),r.add(()=>{t.off("document:mouseup",l)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(c){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,c}}function $r(t){const{$player:e,$video:r}=t.template,n=b(t).child();let o,i,a=0,s=!1,c=!1;const l=()=>!w(t)&&e.classList.contains("art-mini"),d=function(t){const e=t.template.$player;let r;return{entering(){const n=e.ownerDocument,o=n.activeElement,i=o&&e.contains(o);t.template.$mini?.contains(o)||(r=i?jt(o):void 0);const a=i&&e.classList.contains("art-keyboard-focus");return e=>{!a||w(t)||n.activeElement!==o&&n.activeElement!==n.body||e?.()}},leaving(n){const o=e.ownerDocument,i=n?.contains(o.activeElement);return()=>{if(!i||w(t)||o.activeElement!==o.body&&!n?.contains(o.activeElement))return;const e=r&&o.defaultView?.getComputedStyle(r).visibility;r?.isConnected&&r.getClientRects().length&&"hidden"!==e&&"collapse"!==e&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):At(t)}}}}(t);function u(){if(i){const e=i,r=a;i=void 0;try{br(e)}catch(t){throw r!==a||i||(i=e),t}}}function p(){if(w(t))return;const r=++a;c=!1;const n=d.leaving(t.template.$mini);u(),w(t)||r!==a||(o?.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),w(t)||r!==a||t.emit("mini",!1)))}function f(){if(w(t))return;const h=++a;if(s)return void(c=!0);const m=d.entering();if(t.state="mini",!w(t)&&h===a){i??(i=yr(r)),e.classList.add("art-mini");try{if(!o){s=!0;try{o=kr(t,n,l,p)}finally{s=!1}}if(c)return c=!1,void f();if(!o||w(t))return;if(h!==a)return void(l()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),w(t)||h!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:{...wr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r),reset:!0}}(t.storage.get("left"),e,xr(o.element));if(w(t)||h!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),w(t)||h!==a)return;t.storage.set("left",i.left)}w(t)||h!==a||m(o.focus),w(t)||h!==a||t.emit("mini",!0)}catch(g){const r=c;throw c=!1,w(t)||h!==a&&!r||(u(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),g}}}return n.add(()=>{a++;try{u()}finally{o?.cancelDrag(),e.classList.remove("art-mini")}}),{get:l,set(t){t?f():p()}}}const Er=new WeakSet,Ar=t=>"picture-in-picture"===t.webkitPresentationMode;function Cr(t){Er.delete(t),t.removeEventListener("webkitpresentationmodechanged",Sr),t.removeEventListener("enterpictureinpicture",Sr)}function Sr(){if(Er.has(this)&&Ar(this)){Cr(this);try{this.webkitSetPresentationMode?.("inline")}catch{}}}function Tr(t){Er.add(t),t.addEventListener("webkitpresentationmodechanged",Sr),t.addEventListener("enterpictureinpicture",Sr)}function Lr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Pr(t,e,r){return new Promise((n,o)=>{if(w(t)||e===t.url)return void n();const i=te(t),a=i.scope.child();let s=!1;const c=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{c()});const l=()=>!s&&i.active(),d=t=>c(!0,t);i.onError=d;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!l())return;const u=a.child();let p=!1,f=!1,h=!1;const m=de(t,r,l),g=async()=>{if(t.aspectRatio=o,l()){if(n)try{await t.play()}catch{}l()&&(t.notice.show="",c())}},v=()=>{if(l()&&!f&&p)try{if(t.template?.$video?.seeking)return;if(!l())return;if(h||(h=!0,t.playbackRate=s),!m.ready()||!l()||f)return;f=!0,u.dispose(),g().catch(d)}catch(e){d(e)}},y={"video:error":d,"video:loadedmetadata":()=>{if(l())try{m.restore()}catch(t){d(t)}},"video:canplay":()=>{p=!0,v()},"video:seeked":v,seek:m.manual},b=a.child(),w=[],x=Object.keys(y);for(const e of x)Lr(b,t,e,t=>{i.acceptingEvents&&w.push([e,t])},!1);if(re(t,i,e),!l())return;if(t.notice.show="",!l())return;const k=()=>{if(b.dispose(),!e)return void c();const r={};for(const e of x)r[e]=Lr(u,t,e,y[e],"video:seeked"!==e);for(const[t,e]of w){if(!l()||u.closed)break;r[t](e)}w.length=0};i.assigned?k():i.onAssigned=k}catch(u){d(u)}})}function Mr(t,e){const{number:r,column:n,width:o,height:i,scale:a}=t,{imageWidth:s,videoWidth:c,videoHeight:l,progressWidth:d,position:u}=e,p=Number(n),f=Number(o)*Number(a)||s/p,h=Number(i)*Number(a)||f/(c/l),m=Math.floor(u/(d/Number(r)));return{height:`${h}px`,width:`${f}px`,backgroundPosition:`-${m%p*f}px -${Math.floor(m/p)*h}px`,left:u<=f/2?0:u>d-f/2?d-f+"px":u-f/2+"px"}}function zr(t){const{option:e,template:{$video:r}}=t;it(t,"url",{get:()=>r.src,async set(n){if(w(t))return;const o=function(t){const e=Kt.get(t);return Kt.delete(t),e||te(t)}(t);o.acceptingEvents=!1;try{if(!n)return void(await vt(o.scope)&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||K(n),s=e.customType[a];if(a&&s){if(!(await vt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const c=o.scope.child();let l=!1,d=!1;Lr(c,t,"video:canplay",()=>{l=!d}),Lr(c,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>ne(o,t))}else{if(!o.active())return;r.src=n}}finally{c.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};l?e():d||Lr(o.scope,t,"video:canplay",e)}}catch(i){ne(o,i)}finally{ee(o)}}})}const Rr=[function(t){const{template:{$video:e}}=t;it(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;it(t,"play",{async value(){const a=Qt(t),s=await i.play();if(!a())return s;const c=e.get("Play");if(!a())return s;if(r.show=c,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;it(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${tt(t.currentTime)} / ${tt(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;it(t,"forward",{set(e){r.seek=t.currentTime+e}}),it(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;it(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=J(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),it(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;it(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){ce.set(t,le(t)+1)}(t),e.currentTime=J(n,0,t.duration))}})},function(t){it(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Pr(t,e,0);it(t,"switchQuality",{value:e=>Pr(t,e,t.currentTime)}),it(t,"switchUrl",{value:e}),it(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;it(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;it(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!w(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=Je({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(w(t))return;"width"===r?.axis?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,w(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=Qt(t);return new Promise((a,s)=>{const c=r=>{try{!w(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,c):a(n.toDataURL("image/png"))}catch(l){c(l)}})}it(t,"getDataURL",{value:()=>o(!1)}),it(t,"getBlobUrl",{value:()=>o(!0)}),it(t,"screenshot",{value:async e=>{const n=Qt(t),o=await t.getDataURL();if(!w(t)&&n()){const i=e||`artplayer_${tt(r.currentTime)}`;!w(t)&&n()&&Z(o,`${i}.png`),!w(t)&&n()&&t.emit("screenshot",o)}return o}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(w(t))return;const i=function(t){const e=ir.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>ar(t,e.requestFullscreen,void 0),exit:()=>ar(r,e.exitFullscreen)}}(o);i?it(t,"fullscreen",ur(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?it(t,"fullscreen",vr(t)):it(t,"fullscreen",{get:()=>!1,set(){w(t)||(r.show=e.get("Fullscreen Not Supported"))}}),it(t,"fullscreen",ct(t,"fullscreen"))};t.once("video:loadedmetadata",i),b(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(br(t.placement),r()))}return b(t).add(()=>{n+=1;const t=r;if(r=void 0,t)try{o(t,()=>!0)}catch(i){try{e.parentNode!==t.placement.parent&&e.parentNode?.removeChild(e)}catch(a){throw new h([i,a])}throw i}}),i=>{if(w(t))return;const a=++n,s=()=>a===n&&!w(t),c=function(t){const e=t.ownerDocument?.activeElement,r=e&&t.contains(e);return()=>{r&&e.isConnected&&t.contains(e)&&e.ownerDocument.activeElement===e.ownerDocument.body&&e.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:yr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(l){throw s()&&o(n,s)&&(r=void 0,c()),l}if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);it(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?it(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=b(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,c=!1,l=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch{}}function u(e,r,n){e.then(()=>{!r||!w(t)&&a||d()},e=>{w(t)||l!==n||(t.notice.show=e)}).finally(()=>{l===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{l++,a=!1,d()}),mt(n,e,"enterpictureinpicture",()=>{if(c)return void d();if(!o()||i)return;const e=l;t.state="pip",!w(t)&&e===l&&o()&&(i=!0,t.emit("pip",!0))}),mt(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!w(t)&&o()?e:null,set(n){if(w(t))return;const i=++l;if(a=Boolean(n),a?c=!1:s&&(c=!0),s=!1,a){if(t.state="pip",w(t)||l!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw l===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?it(t,"pip",function(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(w(t)||Er.has(e))return;const s=Ar(e);if(s&&(o=!1),s===n&&!r)return;const c=i;s&&(t.state="pip"),w(t)||i!==c||Ar(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Tr(e),Ar(e)&&e.webkitSetPresentationMode("inline")});for(const c of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])mt(r,e,c,()=>s());return{get:()=>!w(t)&&Ar(e),set(r){if(w(t))return;const n=++i,c=a;if(r){if(!1===e.webkitSupportsPresentationMode?.("picture-in-picture"))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Cr(e),t.state="pip",w(t)||i!==n)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(l){throw n===i&&(o=!1),l}}else o&&(o=!1,Tr(e)),Ar(e)&&e.webkitSetPresentationMode("inline");w(t)||n!==i||c!==a||Ar(e)!==Boolean(r)||s(!0)}}}(t)):it(t,"pip",{get:()=>!1,set(){w(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;it(t,"loaded",{get:()=>r.loadedTime/e.duration}),it(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){it(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;it(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;it(t,"autoSize",{value(){if(w(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!Ze(o))return;const i=M(e),a=Je(i,o.width/o.height);a&&!w(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;it(t,"rect",{get:()=>M(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}it(t,"x",{get:()=>e.left+window.pageXOffset}),it(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;it(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){w(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(Q(o))}`,w(t)||t.emit("flip",o))}})},function(t){it(t,"mini",$r(t))},function(t){const{template:{$poster:e}}=t;it(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(t){H(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;it(t,"autoHeight",{value(){if(w(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!Ze(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||w(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;it(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){it(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){it(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];it(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;nn.$track?.offset||0,set(o){const{cues:i}=t.subtitle;if(!n.$track||0===i.length)return;const a=J(o,-10,10);n.$track.offset=a;for(let e=0;e{if(!w(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,w(t)||it(t,"airplay",{value(){if(!w(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(w(t))return;Reflect.apply(e,o,[]),w(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");w(t)||(r.show=n)}}}))},function(t){it(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:i?.html||"",selector:e,async onSelect(e,r,i){const a=function(t){return t&&he.get(t)||(()=>!0)}(i);if(await t.switchQuality(e.url),!w(t)&&a()){const r=`${o.get("Switch Video")}: ${e.html}`;!w(t)&&a()&&(n.show=r)}return e.html}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,s=b(t).child(),c=!1;function l(){const e=s;s=b(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function d(){const i=a,c=s;if(!i||!o)return;const l=()=>!w(t)&&!c.closed&&s===c&&a===i&&i.sourceActive()&&t.controls?.thumbnails===i.element;if(!l())return;const d=r.clientWidth*i.percentage;if(!(d>0&&d{const f=t.controls?.thumbnails,{url:h,scale:m}=e.thumbnails;if(!w(t)&&f&&h&&("hover"===r||"played"===r&&p&&u)){if(i!==f){const t=E(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,l())})}if(a={percentage:n,element:f,sourceActive:Qt(t)},o)d();else if(!c){const t=s;c=!0,function(t,e,r){return q(t,e,r)}(h,m,t).then(e=>{s!==t||t.closed||(c=!1,o=e,d())}).catch(e=>{s!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),it(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{w(t)||!e.url||t.option.isLive||w(t)||(t.option.thumbnails=e,l())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{w(t)||t.emit(`video:${e.type}`,e)})}(t);const e=er(t);!function(t,e){Qe(t,"video:canplay",()=>{e.reset(),tr(t,[["loading",!1]])}),Qe(t,"video:canplay",()=>{tr(t,[["loading",!1],["controls",!0],["mask",!0]]),w(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;Qe(t,"video:ended",()=>{if(e.loop){const e=Qt(t);if(t.seek=0,w(t)||!e())return;G(t.play()),e()&&tr(t,[["controls",!1],["mask",!1]],e)}else tr(t,[["controls",!0],["mask",!0]])})}(t),Qe(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;Qe(t,"video:loadedmetadata",()=>{t.emit("resize"),u&&tr(t,[["loading",!1],["controls",!0],["mask",!0]])}),Qe(t,"video:loadstart",()=>{e.loadStart(),tr(t,[["loading",!0],["mask",!1],["controls",!0]])}),Qe(t,"video:pause",()=>{tr(t,[["controls",!0],["mask",!0]])}),Qe(t,"video:play",()=>{tr(t,[["mask",!1]]),w(t)||H(r,"display","none")}),Qe(t,"video:playing",()=>tr(t,[["mask",!1]])),Qe(t,"video:progress",()=>{t.playing&&tr(t,[["loading",!1]])}),Qe(t,"video:seeked",()=>tr(t,[["loading",!1],["mask",!0]])),Qe(t,"video:seeking",()=>tr(t,[["loading",!0],["mask",!1]])),Qe(t,"video:timeupdate",()=>tr(t,[["mask",!1]])),Qe(t,"video:waiting",()=>tr(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(w(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(w(t))return;const r=e.moreVideoAttr[s];if(w(t))return;t.attr(s,r)}if(w(t))return;if(e.muted){const r=e.muted;if(w(t))return;t.muted=r}if(w(t))return;if(e.volume){const r=J(e.volume,0,1);if(w(t))return;n.volume=r}if(w(t))return;const i=r.get("volume");if(w(t))return;if("number"===typeof i&&(n.volume=J(i,0,1)),w(t))return;if(e.poster){const r=`url(${e.poster})`;if(w(t))return;H(o,"backgroundImage",r)}if(w(t))return;if(e.autoplay){const r=e.autoplay;if(w(t))return;n.autoplay=r}if(w(t))return;if(e.playsInline){if(w(t))return;if(n.playsInline=!0,w(t))return;n["webkit-playsinline"]=!0}if(w(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(w(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(w(t))return;const r=e.cssVar[s];if(w(t))return;t.cssVar(s,r)}if(w(t))return;const a=e.url;w(t)||(t.url=a)}];class Or{constructor(t){if(!w(t)){zr(t);for(const e of Rr){if(w(t))return;e(t)}}}}const Dr=new WeakMap,Ir="art-auto-orientation-fullscreen";function Nr(t){if(Dr.get(t.orientation)===t)try{t.orientation.unlock()}catch{}}const _r="art-auto-orientation",Wr=["width","height","transform-origin","transform"];function Fr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return Ze(t)&&Ze(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=b(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(_r);r.classList.remove(_r),n&&(t.isRotate=!1,w(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=z();if(w(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;o??(o=Wr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(_r),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{w(t)||(r?o?s(!1):e()&&(i(),i=gt(n,()=>{o||s(!0)},Number(t.constructor.AUTO_ORIENTATION_TIME??0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(Ir),t&&(t.cancelled=!0,Nr(t),t.settled&&Dr.get(t.orientation)===t&&Dr.delete(t.orientation))}return b(t).add(o),i=>{if(w(t))return;if(!i)return void o();if(n&&!n.cancelled&&Dr.get(n.orientation)===n)return;const a=r.ownerDocument.defaultView?.screen?.orientation;if("function"!==typeof a?.lock||"function"!==typeof a.unlock||!e())return;const s={orientation:a,cancelled:!1,settled:!1};n=s,Dr.set(a,s);const c=()=>!w(t)&&!s.cancelled&&n===s&&Dr.get(a)===s,l=e=>{s.settled=!0;const o=c();Dr.get(a)===s&&Dr.delete(a),n===s&&(n=void 0),o&&(r.classList.remove(Ir),t.notice.show=e)};try{const t=a.lock(a.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{s.settled=!0,c()?r.classList.add(Ir):(Nr(s),Dr.get(a)===s&&Dr.delete(a))}).catch(l)}catch(d){l(d)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),b(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Vr(t){return t.get("times")||{}}function Yr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||w(t))return()=>{};const s=$t(".art-auto-playback-last",a),c=$t(".art-auto-playback-jump",a),l=$t(".art-auto-playback-close",a);kt(l,r.close);const d=E(a);let u,p=0;const f=()=>{const r=++p;if(u?.dispose(),d.closed||w(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!w(t);f.add(()=>{u===f&&(u=void 0,H(a,"display","none"))});const m=Jt(t).add(()=>{f.dispose()});f.add(()=>{m()});const g=Vr(n)[t.option.id||t.option.url];if(!h())return;if(H(a,"display","none"),!h()||!g||!(g>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(H(a,"display","flex"),!h())return;const v=`${e.get("Last Seen")} ${tt(g)}`;if(!h())return;if(s.textContent=v,!h())return;const y=e.get("Jump Play");if(!h())return;if(c.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(l,()=>{H(a,"display","none")}),!h())return;if(b(c,()=>{t.seek=g,h()&&(G(t.play()),h()&&(H(i,"display","none"),h()&&H(a,"display","none")))}),!h())return;let x=()=>{},k=!1;const $=()=>{!k&&h()&&(k=!0,x(),gt(f,()=>{h()&&H(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",$),x=f.add(()=>{t.off("video:timeupdate",$)}),k&&x()};return()=>{C(t,a,"ready",f),C(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;Te(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Vr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;w(t)||(o.length>i&&delete n[o[0]],n[a]=s,w(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Vr(e)},clear:()=>e.del("times"),delete(t){const r=Vr(e);return delete r[t],e.set("times",r),r}}}function Br(t){let e,r=0;return{start:n=>{const o=++r;if(e?.scope.dispose(),o!==r||w(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:Jt(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{e?.active||D(t.template.$player,"art-fast-forward")}}),gt(i.scope,()=>{if(e!==i||w(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||w(t))return;t.playbackRate=r,e!==i||i.scope.closed||w(t)||O(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,e?.scope.dispose()}}}function Hr(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Br(t),i=Te(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return I(r,"art-fast-forward")}}}function jr(t,e,r,n){let o;const i=()=>!r.closed&&!w(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),xt(r,e),mt(r,e,"keydown",t=>{const r=t;i()&&n()&&wt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(bt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function qr(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return I(n,"art-lock")}function i(){w(t)||(O(n,"art-lock"),w(t)||(t.isLock=!0,w(t)||t.emit("lock",!0)))}function a(){w(t)||(D(n,"art-lock"),w(t)||(t.isLock=!1,w(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=E(e);if(n.closed||w(t))return;const i=kt(e,r.lock);if(n.closed||w(t))return;const a=kt(e,r.unlock);if(n.closed||w(t))return;const s=jr(t,e,n,o);n.closed||w(t)||(o()?(H(i,"display","inline-flex"),n.closed||w(t)||H(a,"display","none")):H(i,"display","none"),C(t,e,"lock",e=>{w(t)||(H(i,"display",e?"inline-flex":"none"),n.closed||w(t)||H(a,"display",e?"none":"inline-flex"),n.closed||w(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function Ur(t){return Te(t)("control",e=>{e?D(t.template.$player,"art-mini-progress-bar"):O(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class Xr{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){w(t.art)||!e.miniProgressBar||e.isLive||t.add(Ur),!w(t.art)&&e.lock&&u&&t.add(qr),w(t.art)||!e.autoPlayback||e.isLive||t.add(Yr),!w(t.art)&&e.autoOrientation&&u&&t.add(Fr),!w(t.art)&&e.fastForward&&u&&!e.isLive&&t.add(Hr)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){X(!w(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(w(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(w(t.art))return t;let o=n;const i=st(t,o);if(w(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return w(t.art)||(X(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),w(t.art)||it(t,o,{value:r})),t}(this,t,e)}}const Gr=new WeakMap;function Kr(t){return!t.closed&&!Gr.get(t)}function Zr(t){Gr.set(t,(Gr.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(Gr.get(t)||1)-1;r?Gr.set(t,r):Gr.delete(t)}}const Jr=new WeakMap,Qr=new WeakMap,tn=["$parent","$parents","$option","$events","$formatted"];function en(t){const e=new Set;let r=t;for(;r&&!e.has(r);){e.add(r);const t=Jr.get(r);if(!t||!t.owner.active||t.owner.scope?.closed||!t.option.includes(r))return!1;if(!t.parent)return t.owner.root===t.option;if(Jr.get(t.parent)?.owner!==t.owner)return!1;r=t.parent}return!1}function rn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function nn(t){const e=Jr.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function on(t,e){for(let r=0;r{l&&l!==r&&l.dispose()},()=>pn(t,o)])try{e()}catch(d){d instanceof h?c.push(...d.errors):c.push(d)}if(r.closed||w(t)||(o.push(...i.splice(0)),un.set(r,o),ln.set(e,r),dn.set(e,n)),a(),c.length)throw new h(c)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function vn(t,e,r,n,o,i){const a=i||hn(e);if(!Kr(a)||w(t))return;const s=t.proxy(r,n,e=>{if(Kr(a)&&!w(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!Kr(a)||w(t)?t.events.remove(s):(nn(e).events.push(s),i&&i!==ln.get(e)&&i.add(()=>{const r=nn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function yn(t,e,r,n){const o=hn(e);if(!Kr(o)||w(t))return;const i=(...e)=>{if(Kr(o)&&!w(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}const bn='[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]';function wn(t){if(!t.isConnected||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return"hidden"!==e&&"collapse"!==e}function xn(t){return Array.from(t.querySelectorAll(bn)).filter(t=>"-1"!==t.getAttribute("tabindex")&&wn(t))}function kn(t,e,r=!1){if(!t.show||w(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!Kr(sn(n)))return;const o=function(t,e,r=!1){if(e&&e!==t&&t.contains(e)&&e.matches(bn)&&"-1"!==e.getAttribute("tabindex")&&wn(e))return e;const n=xn(t),o=t.querySelector(".art-setting-item.art-current");return n.find(t=>e?.contains(t))||(r?n[n.length-1]:n.find(t=>o?.contains(t))||n.find(t=>!t.classList.contains("art-setting-item-back"))||n[0])}(n,e,r);o?.focus({preventScroll:!0}),w(t.art)||o?.scrollIntoView({block:"nearest",inline:"nearest"})}function $n(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!w(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!r?.getClientRects().length)&&kn(t,o)}}function En(t){const{art:e}=t,r=b(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||w(e)||t.render()},a=i=>{r.closed||w(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&kn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!w(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&wn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&At(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),mt(r,e.template.$player,"keydown",r=>{const n=r;if(!wt(n)||n.defaultPrevented||w(e))return;const a=n.target;if(a===e.controls.setting){if("ArrowDown"===n.key||"ArrowUp"===n.key)if(bt(n),t.show)kn(t,void 0,"ArrowUp"===n.key);else{o="ArrowUp"===n.key;try{t.show=!0}finally{o=!1}}else"Escape"===n.key&&t.show&&(bt(n),i());return}if(!t.show||!t.$parent.contains(a))return;if("Escape"===n.key)return bt(n),void i();if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(n.key))return;const s=a.closest(".art-setting-item");if(!s||a!==s&&!a.matches('button,a[href],[role="button"]'))return;const c=t.active&&t.cache.get(t.active);if(!c)return;const l=t.active?.find(t=>t.$item===s);if(!Kr(sn(c))||l&&!Kr(hn(l)))return void bt(n);const d=xn(c),u=d.indexOf(a);if(u<0)return;let p;switch(n.key){case"ArrowDown":p=Math.min(u+1,d.length-1);break;case"ArrowUp":p=Math.max(u-1,0);break;case"Home":p=0;break;case"End":p=d.length-1;break;case"ArrowLeft":{const t=c.querySelector(".art-setting-item-back");return bt(n),void t?.click()}case"ArrowRight":return bt(n),void(l?.selector?.length&&a.click());default:return}bt(n),void 0!==p&&kn(t,d[p])});let s=!1;mt(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,gt(r,()=>{s=!1,r.closed||w(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function An(t){const{art:e,active:r}=t,{controls:n,constructor:{SETTING_WIDTH:o,SETTING_ITEM_HEIGHT:i},template:{$player:a,$setting:s,$bottom:c}}=e;if(!n.setting||!t.show||!r)return;const l=a.getBoundingClientRect(),d=n.setting.getBoundingClientRect(),p=l.width/a.offsetWidth||1,f=(d.left-l.left+d.width/2)/p-a.clientLeft,h=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:c}=t,l=Math.min(Math.max(0,c),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*l));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-l)),left:Math.max(l,Math.min(a-d/2,e-l-d))}}({containerWidth:a.clientWidth,containerHeight:a.clientHeight,requestedWidth:r[0]?.$parent?.width||o,rows:r.length+(r===t.option?0:1),rowHeight:i,controlCenter:f,bottom:Number.parseFloat(getComputedStyle(s).bottom)||0,padding:Number.parseFloat(getComputedStyle(c).paddingLeft)||0});s.style.height=`${h.height}px`,s.style.width=`${h.width}px`,e.isRotate||u||(f+h.width/2>a.clientWidth?(s.style.left="",s.style.right=""):(s.style.left=`${h.left}px`,s.style.right="auto"))}const Cn=new WeakMap;function Sn(t){Cn.delete(t)}const Tn=new WeakMap;function Ln(t,e){e?Tn.set(t,e):Tn.delete(t)}function Pn(t){const e=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),r=[],n=Tn.get(t),o=n?.();for(const i of["html","icon","tooltip"]){const t=e.get(i)?.value;t instanceof Node&&r.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{for(const r of Reflect.ownKeys(t))!e.has(r)&&Object.getOwnPropertyDescriptor(t,r)?.configurable&&Reflect.deleteProperty(t,r);for(const[r,n]of e)Object.defineProperty(t,r,n);o?.(),Ln(t,n);for(const{node:t,parent:e,next:n}of r)e?e.insertBefore(t,n?.parentNode===e?n:null):t.parentNode?.removeChild(t)}}function Mn(t){const e=t.$item?.querySelector(".art-setting-range");e&&e.setAttribute("aria-label",t.$html?.textContent||"")}const zn=new WeakMap;async function Rn(t,e,r,n,o,i,a,s){try{const c=hn(e),l=hn(i),d=(zn.get(i)||0)+1;zn.set(i,d);const u=()=>Kr(c)&&Kr(l)&&!w(t.art)&&zn.get(i)===d;if(s?.(),!u())return;const p=await o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(c){console.warn("ArtPlayer setting callback failed:",c)}}function On(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const Dn=new WeakMap;function In(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof h?e.push(...r.errors):e.push(r)}if(e.length)throw new h(e)}function Nn(t){Dn.get(t)?.()}function _n(t,e){const r=t.find(e.name);if(w(t.art))return r||e;if(!r)return t.add(e);const n=$n(t);Sn(r),Nn(r);const o=Pn(r),i=r.$item,a=i?.parentNode,s=i?.nextSibling,c=i?On(i):void 0,l=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=gn(t.art,e);r&&i.push(r)}for(const t of n)a.push(Zr(sn(t)))}catch(c){try{In([...i.reverse().map(t=>t.resume),...a])}catch(l){console.warn("ArtPlayer setting restore failed:",l)}throw c}let s=!0;return{items:r,resume(){s&&(s=!1,In([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,In([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>cn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);if(w(t.art))return void u.dispose();const e=r.$item;try{In([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>c?.(),()=>{a&&i&&a.insertBefore(i,s?.parentNode===a?s:null)},()=>t.format(),()=>{if(f){t.active=l,l&&t.cache.has(l)&&W(t.cache.get(l),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!w(t.art)&&Dn.get(r)===h;for(const y of u.items)Dn.set(y,h);const g=b(t.art).add(()=>{p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!o?.enumerable||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);return u.dispose(),n(r.$item),r}catch(v){throw m()&&h(),v}finally{g()}}const Wn=new WeakMap;function Fn(t,e,r){it(t,`$${e}`,{configurable:!0,get:()=>r}),it(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",N(r,n),"html"===e&&Mn(t)}})}function Vn(t,e,r=!1){const n=function(t){const e=Dn.get(t);return()=>!e||Dn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const o=t.cache.get(e.$option),i=e.$item;let a="selector";st(e,"switch")&&(a="switch"),st(e,"range")&&(a="range"),st(e,"onClick")&&(a="button");const{icons:s,constructor:c}=t.art;if(!n())return;const l=function(t,e,r=b(t)){const n=ln.get(e);(!n||Kr(n)||n.closed)&&mn(t,e);const o=r.child();return ln.set(e,o),dn.set(e,r),un.set(o,nn(e).events),o.add(()=>{pn(t,un.get(o))}),o}(t.art,e,sn(o)),d=()=>Kr(l)&&!w(t.art)&&n();if(!d())return;const u=document.createElement("div");try{if(Ln(e),O(u,"art-setting-item"),H(u,"height",`${c.SETTING_ITEM_HEIGHT}px`),u.dataset.name=e.name||"",u.dataset.value=String(e.value||""),!d())return;const n=kt(u,'
'),p=kt(u,'
'),f=document.createElement("div");switch(O(f,"art-setting-item-left-icon"),a){case"button":case"switch":case"range":{const t=e.icon||s.config;if(!d())return;N(f,t);break}case"selector":if(e.selector?.length){const t=e.icon||s.config;if(!d())return;N(f,t)}else N(f,s.check)}if(N(n,f),!d())return;Fn(e,"icon",f);const h=document.createElement("div");O(h,"art-setting-item-left-text");const m=e.html||"";if(!d())return;N(h,m),N(n,h),Fn(e,"html",h);const g=document.createElement("div");O(g,"art-setting-item-right-tooltip");const v=e.tooltip||"";if(!d())return;switch(N(g,v),N(p,g),Fn(e,"tooltip",g),a){case"switch":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=kt(t,s.switchOn),n=kt(t,s.switchOff),o=e.switch;if(!d())return;H(o?n:r,"display","none"),N(p,t),it(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!d())return;Ln(e,()=>{const t=i;return()=>{i=t}}),it(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,u.setAttribute("aria-checked",String(Boolean(t))),t?(H(n,"display","none"),H(r,"display",null)):(H(n,"display",null),H(r,"display","none"))}});break}case"range":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",N(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!d())return;Reflect.set(r,i,String(t))}O(r,"art-setting-range"),N(p,t),it(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!d())return;Ln(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),it(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(e.selector?.length){const t=document.createElement("div");O(t,"art-setting-item-right-icon"),N(t,s.arrowRight),N(p,t)}}if(!d())return;if(function(t,e,r,n){const{art:o}=t,i=hn(e),a=(t,r,n)=>vn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Rn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Rn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{if(e.selector?.length)t.render(e.selector);else{if(e.$parent?.onSelect)return Rn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&O(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Rn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,u,a),!d())return;it(e,"$item",{configurable:!0,get:()=>u}),function(t,e,r,n,o){"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||e.selector?.length||r.setAttribute("aria-current",String(Boolean(e.default))),xt(o,r,()=>r.click(),()=>Kr(o)&&!w(t.art))):Mn(e)}(t,e,u,a,l),r&&i?.parentNode?i.replaceWith(u):N(o,u),e.mounted&&d()&>(l,()=>{if(!w(t.art))try{const r=e.mounted?.call(t.art,u,e);Promise.resolve(r).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(r){console.warn("ArtPlayer setting mounted failed:",r)}},0)}catch(p){try{l.dispose()}catch(f){console.warn("ArtPlayer setting cleanup failed:",f)}throw u.remove(),p}}function Yn(t,e=t.option){if(w(t.art))return;const r=$n(t),n=t.cache.get(e);if(n&&!Kr(sn(n)))return;const o=(Wn.get(t)||0)+1;Wn.set(t,o);const i=()=>Wn.get(t)===o&&!w(t.art),a=t.active,s=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),c=()=>{t.active=a,a&&t.cache.has(a)&&W(t.cache.get(a),"art-current");for(const[e,r,n]of s)t.$parent.style.setProperty(e,r,n)};if(t.active=e,n)try{W(n,"art-current"),t.resize()}catch(l){throw i()&&t.cache.get(e)===n&&!sn(n).closed&&c(),l}else{const r=document.createElement("div");t.cache.set(e,r);const n=function(t,e,r){const n=b(t.art).child();return an.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,r),o=()=>!n.closed&&!w(t.art)&&t.cache.get(e)===r,a=[];try{if(!o())return;O(r,"art-setting-panel"),r.setAttribute("role","group"),r.setAttribute("aria-label",e[0]?.$parent?.$html?.textContent||t.art.i18n.get("Settings")),N(t.$parent,r),W(r,"art-current"),e[0]?.$parent&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=Qr.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=b(e).child(),n=(t,n)=>{if(r.closed||w(e))return;const o=(...t)=>{if(!r.closed&&!w(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=L(r,e.controls.setting),o=L(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||w(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),En(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(Q(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{yn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){on(e,t)}check(t){!function(t,e){e?.$parent&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&W(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=Qr.get(t)||{active:!0},a=[],s=new Set,c=new Set(o),l=(t,e,r)=>{for(let n=0;nnn(t).parent},$parents:{get:()=>nn(t).parents},$option:{get:()=>nn(t).option},$events:{get:()=>nn(t).events},$formatted:{get:()=>!0}}),Jr.set(t,{parent:r,parents:n,option:o,events:a?.events||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return on(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){An(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&cn(n)}catch(i){r.push(i)}}try{mn(t.art,e)}catch(i){i instanceof h?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new h(r)}(this,t)}remove(t){const e=$n(this),r=this.find(t);X(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Sn(t),Nn(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>o?.remove(),()=>this.render()])try{s()}catch(a){a instanceof h?i.push(...a.errors):i.push(a)}if(i.length)throw new h(i);e()}update(t){return _n(this,t)}add(t,e=this.option){if(w(this.art))return t;let r=!1;this.traverse(e=>{r||(r=e===t)});const n=e.length,o=r?void 0:function(t){const e={};Cn.set(t,e);const r=()=>Cn.get(t)===e;return{current:r,finish(){r()&&Cn.delete(t)}}}(t);let i=!1;try{e.push(t),this.format(),i=!0,this.createItem(t),this.render()}catch(a){if(w(this.art)||o&&!o.current())throw a;if(e[n]===t&&e.splice(n,1),!r&&i){try{this.inactivate(t)}catch(s){console.warn("ArtPlayer setting cleanup failed:",s)}t.$item?.remove()}throw a}finally{o?.finish()}return t}createHeader(t){!function(t,e){if(!t.cache.has(e.$option))return;const r=t.cache.get(e.$option),{icons:{arrowLeft:n},constructor:{SETTING_ITEM_HEIGHT:o}}=t.art,i=document.createElement("div");H(i,"height",`${o}px`),O(i,"art-setting-item"),O(i,"art-setting-item-back");const a=kt(i,'
'),s=document.createElement("div");O(s,"art-setting-item-left-icon"),N(s,n),N(a,s),N(a,e.$parent.html),vn(t.art,e.$parent,i,"click",()=>t.render(e.$parents),sn(r));const c=sn(r);i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||xt(c,i,()=>i.click(),()=>Kr(c)&&!w(t.art)),i.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${i.textContent?.trim()||""}`),N(r,i)}(this,t)}createItem(t,e=!1){Vn(this,t,e)}render(t=this.option){Yn(this,t)}}class jn{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch{return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch{this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch{delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}const qn='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class Un{constructor(t){this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope)?.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}async run(t){if(this.active)try{return await Promise.race([t(),this.cancelled])}finally{this.cancel()}}}const Xn=new WeakMap;function Gn(t){return Xn.get(t)}function Kn(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const Zn=Ft;class Jn extends Zn{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=b(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return Xn.set(t,n),r.add(()=>{Kn(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){return this.art.template.$video?.textTracks?.[0]}get activeCues(){return Array.from(this.textTrack?.activeCues||[])}get cues(){return Array.from(this.textTrack?.cues||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?j(r,t):H(r,t,e)}update(){!function(t){const e=Gn(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?ot(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}async switch(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i={...o.subtitle,...e,url:t},a=Gn(this),s=a.revision+1,c=await this.init(i);return!a.scope.closed&&a.revision===s&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),c}createTrack(t,e){!function(t,e,r){const n=Gn(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,c=s.parentNode,l=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const c=t.textTrack,l=c?i.proxy(c,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(l)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=l,s.onload=null,s.onerror=null,p=!0;try{f?.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&Kn(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,c&&c.insertBefore(s,l?.parentNode===c?l:null),f}}(this,t,e)}async init(t){const e=Gn(this),r=function(t){const e=t.request,r=new Un(t.scope);return t.request=r,t.revision+=1,e?.cancel(),r}(e),{notice:n,template:{$subtitle:i}}=this.art;return r.run(async()=>{if(!this.textTrack)return null;if(o(t,_t.subtitle),!t.url)return;let a;this.option=t,this.style(t.style);try{if(!r.active)return;const n=await fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const o=await n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||K(e.url)){case"srt":return{vtt:e.onVttLoad(dt(r))};case"ass":return{vtt:e.onVttLoad(pt(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(o,t);if(!r.active)return;const c=void 0===s?t.url:a=ut(s.vtt);if(!r.active)return;i.innerHTML="";const l=e.trackRevision+1;if(this.url!==c&&this.createTrack("metadata",c),!r.active||e.trackRevision>l)return;return a&&(e.ownedURL=a,a=void 0),c}catch(s){if(!r.active)return;throw i.innerHTML="",n.show=s,s}finally{a&&(e.scope.closed||this.url!==a?URL.revokeObjectURL(a):e.ownedURL=a)}})}}const Qn=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${i}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class to{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=R(e.container),X(this.$container,`No container element found by ${e.container}`)),X(P(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();X("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),X(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=v.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=y(t);o.rollback=r,v.set(e,t),o.releaseContainer=()=>{v.get(e)===t&&v.delete(e)}}(t,this.$container,On(this.$container)),function(t,e,r){const n=y(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return Qn}query(t){return R(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=to.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(w(this.art))return;!function(t){X(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),F(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&O(this.$player,"art-backdrop"),u&&O(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":O(this.$player,"art-destroy")}}const eo=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class ro{on(t,e,r){const n=this.e||(this.e={});let o=eo(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(eo(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=eo(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new to(this),b(this).closed)return;if(this.events=new Pe(this),b(this).closed)return;if(this.storage=new jn,b(this).closed)return;if(this.icons=new We(this),b(this).closed)return;if(this.i18n=new Ne(this),b(this).closed)return;if(this.notice=new Ge(this),b(this).closed)return;if(this.player=new Or(this),b(this).closed)return;if(this.layers=new He(this),b(this).closed)return;if(this.controls=new we(this),b(this).closed)return;if(this.contextmenu=new Xt(this),b(this).closed)return;if(this.subtitle=new Jn(this),b(this).closed)return;if(this.info=new Be(this),b(this).closed)return;if(this.loading=new je(this),b(this).closed)return;if(this.hotkey=new De(this),b(this).closed)return;if(this.mask=new qe(this),b(this).closed)return;if(this.setting=new Hn(this),b(this).closed)return;if(this.plugins=new Xr(this),b(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),io.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${io.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=y(t);return e.rollback=void 0,!e.scope.closed})(this)&&oo.push(this)}catch(r){try{x(this,oo,!0,io.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return oo}static get version(){return i}static get config(){return f}static get utils(){return ft}static get scheme(){return _t}static get Emitter(){return ro}static get validator(){return o}static get kindOf(){return o.kindOf}static get html(){return to.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:c?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator?.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){x(this,oo,t,io.REMOVE_SRC_WHEN_DESTROY)}}var ao,so;return io.STYLE=qn,io.DEBUG=!1,io.CONTEXTMENU=!0,io.NOTICE_TIME=2e3,io.SETTING_WIDTH=250,io.SETTING_ITEM_WIDTH=200,io.SETTING_ITEM_HEIGHT=35,io.RESIZE_TIME=200,io.SCROLL_TIME=200,io.SCROLL_GAP=50,io.AUTO_PLAYBACK_MAX=10,io.AUTO_PLAYBACK_MIN=5,io.AUTO_PLAYBACK_TIMEOUT=3e3,io.RECONNECT_TIME_MAX=5,io.RECONNECT_SLEEP_TIME=1e3,io.CONTROL_HIDE_TIME=3e3,io.DBCLICK_TIME=300,io.DBCLICK_FULLSCREEN=!0,io.MOBILE_DBCLICK_PLAY=!0,io.MOBILE_CLICK_PLAY=!1,io.AUTO_ORIENTATION_TIME=200,io.INFO_LOOP_TIME=1e3,io.FAST_FORWARD_VALUE=3,io.FAST_FORWARD_TIME=1e3,io.TOUCH_MOVE_RATIO=.5,io.VOLUME_STEP=.1,io.SEEK_STEP=5,io.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],io.ASPECT_RATIO=["default","4:3","16:9"],io.FLIP=["normal","horizontal","vertical"],io.FULLSCREEN_WEB_IN_BODY=!0,io.LOG_VERSION=!0,io.USE_RAF=!1,io.REMOVE_SRC_WHEN_DESTROY=!0,ao=io,so=qn,p&&(window.Artplayer=ao,a("artplayer-style",so),setTimeout(()=>{ao.LOG_VERSION&&console.log(`%c ArtPlayer %c ${ao.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),io}); diff --git a/docs/compiled/artplayer.legacy.js b/docs/compiled/artplayer.legacy.js index bda28836c..f49664937 100644 --- a/docs/compiled/artplayer.legacy.js +++ b/docs/compiled/artplayer.legacy.js @@ -67,4 +67,4 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";var t=Object.defineProperty,e=Object.defineProperties,r=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(e,r,n)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,s=(t,e)=>{for(var r in e||(e={}))o.call(e,r)&&a(t,r,e[r]);if(n)for(var r of n(e))i.call(e,r)&&a(t,r,e[r]);return t},l=(t,n)=>e(t,r(n)),c=(t,e,r)=>new Promise((n,o)=>{var i=t=>{try{s(r.next(t))}catch(e){o(e)}},a=t=>{try{s(r.throw(t))}catch(e){o(e)}},s=t=>t.done?n(t.value):Promise.resolve(t.value).then(i,a);s((r=r.apply(t,e)).next())});function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var u,p={exports:{}};var f=(u||(u=1,p.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const g=globalThis.CUSTOM_USER_AGENT,y=null!=g?g:"undefined"===typeof navigator?"":navigator.userAgent,b=/^(?:(?!chrome|android).)*safari/i.test(y),w=/iPad|iPhone|iPod/i.test(y)&&("undefined"===typeof window||!window.MSStream),x=w||y.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,k=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(y)||x,$="undefined"!==typeof window&&"undefined"!==typeof document;const E={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class A extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class C{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new C,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof A?t.push(...e.errors):t.push(e)}if(t.length)throw new A(t)}}const S=new WeakMap,T=new WeakMap;function L(t){const e=S.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function P(t){return L(t).scope}function M(t){const e=L(t);return e.destroying||e.scope.closed}function z(t,e,r,n,o=!1){var i,a,s;const l=L(t);if(l.destroying||l.scope.closed)return;l.destroying=!0;const c=[],d=t=>{try{t()}catch(e){c.push(...e instanceof A?e.errors:[e])}};n&&(null==(i=t.template)?void 0:i.$video)&&d(()=>t.reset()),d(()=>l.scope.dispose()),d(()=>{var e;return null==(e=t.template||l.mountingTemplate)?void 0:e.destroy(r)});const u=e.indexOf(t);-1!==u&&e.splice(u,1),t.isDestroy=!0,o||(null==(a=l.releaseContainer)||a.call(l),l.releaseContainer=void 0),d(()=>t.emit("destroy")),d(()=>l.finalizers.dispose()),o&&l.rollback&&d(l.rollback),l.rollback=void 0,null==(s=l.releaseContainer)||s.call(l),l.releaseContainer=void 0;for(const p of c.slice(1))console.warn("Additional ArtPlayer cleanup failure:",p);if(c.length)throw c[0]}const O=new WeakMap;function R(t,e){const r=P(t).child();return O.set(e,r),r}function D(t){const e=O.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function I(t){var e;null==(e=O.get(t))||e.dispose()}function N(t,e,r,n){const o=D(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function _(t,e){return{on:(r,n)=>{N(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=D(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function W(t){var e;if(t.composedPath)return t.composedPath();const r=[];let n=t.target;for(;n;)r.push(n),n=null!=(e=n.parentNode)?e:null;return"undefined"===typeof window||r.includes(window)||r.push(window),r}function F(t,e){return W(t).includes(e)}function V(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function Y(t){return t.getBoundingClientRect()}function B(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function H(t,e=document){return e.querySelector(t)}function j(t,e){return t.classList.add(e)}function q(t,e){return t.classList.remove(e)}function U(t,e){return t.classList.contains(e)}function X(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function G(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function K(t,e){G(t).forEach(t=>q(t,e)),j(t,e)}function Z(t,e){return e.parentNode.replaceChild(t,e),t}function J(t){return document.createElement(t)}function Q(t,e,r="top"){k||(t.setAttribute("aria-label",e),j(t,"hint--rounded"),j(t,`hint--${r}`))}function tt(t="",e=""){const r=J("i");return j(r,"art-icon"),j(r,`art-icon-${t}`),X(r,e),r}function et(t,e,r){return t.style[e]=r,t}function rt(t,e){for(const r in e)et(t,r,e[r]);return t}function nt(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new C;let a=!1,s=()=>{};function l(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function c(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void c(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const l=new Image;d(l,()=>c(l)),i.closed||(l.src=e)}catch(e){l(e)}}))}),i.closed||(n.src=t)}catch(u){l(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){l(u)}},e.onerror=()=>l(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class ot extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function it(t,e){if(!t)throw new ot(e);return t}function at(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function st(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function lt(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function ct(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ut(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const pt={"&":"&","<":"<",">":">","'":"'",'"':"""},ft={"&":"&","<":"<",">":">","'":"'",""":'"'},ht=/(&|<|>|'|")/g;function mt(t){return t.replace(/[&<>'"]/g,t=>pt[t]||t)}const vt=Object.defineProperty,{hasOwnProperty:gt}=Object.prototype;function yt(t,e){return gt.call(t,e)}function bt(t,e){return Object.getOwnPropertyDescriptor(t,e)}function wt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?wt(o,i):i,vt(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function xt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function kt(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function $t(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const Et=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:ot,addClass:j,append:X,assToVtt:$t,capitalize:dt,clamp:ct,createElement:J,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:vt,download:lt,errorHandle:it,escape:mt,get:bt,getComposedPath:W,getExt:st,getIcon:tt,getRect:Y,getSafeAreaInsets:B,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:yt,hasClass:U,includeFromEvent:F,inverseClass:K,isBrowser:$,isIOS:w,isIOS13:x,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:k,isSafari:b,loadImg:function(t,e){return nt(t,e,void 0)},mergeDeep:wt,query:H,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:q,replaceElement:Z,secondToTime:ut,setStyle:et,setStyleText:v,setStyles:rt,siblings:G,silencePromise:at,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:xt,supportsFlex:V,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Q,unescape:function(t){return t.replace(ht,t=>ft[t]||t)},userAgent:y,vttToBlob:kt},Symbol.toStringTag,{value:"Module"}));function At(){}function Ct(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||(null==s?void 0:s.aborted))return At;let l=At;function c(e){a&&l(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,c,o),l=t.add(()=>{try{e.removeEventListener(r,c,i)}finally{null==s||s.removeEventListener("abort",l)}}),null==s||s.addEventListener("abort",l,{once:!0}),l}function St(t,e,r){if(t.closed)return At;let n=!0,o=At;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function Tt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=At;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const Lt=new WeakSet;function Pt(t){Lt.add(t),t.preventDefault()}function Mt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function zt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;Ct(t,e,"keydown",t=>{const e=t;a(e)&&Mt(e)&&!e.defaultPrevented&&("Enter"===e.key?(Pt(e),!e.repeat&&i()&&r()):" "===e.key&&(Pt(e),!e.repeat&&i()&&(o=!0)))}),Ct(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&Mt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(Pt(n),r())}),Ct(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function Ot(t,e){return X(t,e)}function Rt(t,e){return e.querySelector(t)}const Dt=new WeakSet;function It(t){const e=t.template.$player;!M(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Dt.has(e)||(Dt.add(e),P(t).add(()=>{Dt.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Nt=new WeakSet,_t="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Wt(t){return[t,...t.querySelectorAll(_t)].find(t=>{var e;if(!t.matches(_t)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t);return"hidden"!==(null==r?void 0:r.visibility)&&"collapse"!==(null==r?void 0:r.visibility)})}function Ft(t,e,r){var n;const o=null==e?void 0:e.ownerDocument,i=null==o?void 0:o.activeElement;if(!["control","contextmenu"].includes(null!=(n=t.name)?n:"")||Nt.has(t)||!e||!o||!i||!e.contains(i))return()=>{};const a=t.art.template.$player,s=Array.from(a.querySelectorAll(`.art-${t.name}`)),l=s.indexOf(e),c=[...s.slice(l+1),...s.slice(0,l).reverse()];return Nt.add(t),()=>{var e;if(Nt.delete(t),M(t.art)||!a.isConnected||o.activeElement!==o.body)return;const n=r?null==(e=t.cache.get(r))?void 0:e.$ref:void 0;for(const t of[...n?[n]:[],...c]){if(!a.contains(t))continue;const e=Wt(t);if(e)return void e.focus({preventScroll:!0})}It(t.art)}}const Vt="array",Yt="boolean",Bt="string",Ht="number",jt="object",qt="function";function Ut(t,e,r){return it(e===Bt||e===Ht||t instanceof Element,`${r.join(".")} require '${Bt}' or 'Element' type`)}const Xt={html:Ut,disable:`?${Yt}`,name:`?${Bt}`,index:`?${Ht}`,style:`?${jt}`,click:`?${qt}`,mounted:`?${qt}`,tooltip:`?${Bt}|${Ht}`,width:`?${Ht}`,selector:`?${Vt}`,onSelect:`?${qt}`,switch:`?${Yt}`,onSwitch:`?${qt}`,range:`?${Vt}`,onRange:`?${qt}`,onChange:`?${qt}`},Gt={id:Bt,container:Ut,url:Bt,poster:Bt,type:Bt,theme:Bt,lang:Bt,volume:Ht,isLive:Yt,muted:Yt,autoplay:Yt,autoSize:Yt,autoMini:Yt,loop:Yt,flip:Yt,playbackRate:Yt,aspectRatio:Yt,screenshot:Yt,setting:Yt,hotkey:Yt,pip:Yt,mutex:Yt,backdrop:Yt,fullscreen:Yt,fullscreenWeb:Yt,subtitleOffset:Yt,miniProgressBar:Yt,useSSR:Yt,playsInline:Yt,lock:Yt,gesture:Yt,fastForward:Yt,autoPlayback:Yt,autoOrientation:Yt,airplay:Yt,proxy:`?${qt}`,plugins:[qt],layers:[Xt],contextmenu:[Xt],settings:[Xt],controls:[l(s({},Xt),{position:(t,e,r)=>{const n=["top","left","right"];return it("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}})],quality:[{default:`?${Yt}`,html:Bt,url:Bt}],highlight:[{time:Ht,text:Bt}],thumbnails:{url:Bt,number:Ht,column:Ht,width:Ht,height:Ht,scale:Ht},subtitle:{url:Bt,name:Bt,type:Bt,style:jt,escape:Yt,encoding:Bt,onVttLoad:qt},moreVideoAttr:jt,i18n:jt,icons:jt,cssVar:jt,customType:jt},Kt=new WeakSet;class Zt{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return U(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?j(e,r):q(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){var e;if(M(this.art))return;const r="function"===typeof t?t(this.art):t;if(M(this.art))return;if(r.html=r.html||"",h(r,Xt),!this.$parent||!this.name||r.disable)return;const n=r.name||`${this.name}${this.id}`,o=this.cache;it(!o.has(n),`Can't add an existing [${n}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=R(this.art,i),s=[],l=Object.getOwnPropertyDescriptor(this,n);let c=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){j(t,`art-${r}`),j(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):X(e,t),i.html&&X(t,i.html),i.style&&rt(t,i.style),i.tooltip&&Q(t,i.tooltip)}(i,this.$parent,this.name,n,this.id,r),a.closed)return;if(r.click){("control"===this.name&&!r.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&zt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),r.click.call(this.art,this,t))});s.push(t)}if(r.selector&&["left","right"].includes(r.position)&&this.selector(r,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,n,i),c=!0,o.set(n,{$ref:i,events:s,option:r}),r.mounted&&r.mounted.call(this.art,i),i}catch(d){try{I(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw(null==(e=o.get(n))?void 0:e.$ref)===i&&o.delete(n),c&&this[n]===i&&(l?Object.defineProperty(this,n,l):delete this[n]),i.remove(),d}}remove(t){it(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Kt.has(e))return;const r=Ft(this,e.$ref);Kt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{I(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Kt.delete(e),r()}}update(t){var e;const r=Ft(this,null==(e=this.cache.get(t.name))?void 0:e.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{r()}}}function Jt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Qt(t,e){var r,n;const o=D(t);if(!o.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const i of t.querySelectorAll("[data-value]"))zt(o,i),i.setAttribute("aria-label",`${e}: ${null!=(n=null==(r=i.textContent)?void 0:r.trim())?n:""}`);Jt(t)}}const te=new WeakMap;function ee(t,e){e?te.set(t,e):te.delete(t)}function re(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=te.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function ne(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function oe(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}class ie extends Zt{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,R(t,this.$parent),k||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=_(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="1"]',t);n&&K(n,"art-current"),Qt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="default"]',t);n&&K(n,"art-current"),Qt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(dt(t))}`).join(""),i=r.get("Video Flip");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="normal"]',t);n&&K(n,"art-current"),Qt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"flip",index:30})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return l(s({},t),{html:`ArtPlayer ${m}`})}({name:"version",index:50})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let s=0;s{this.show=!0,i.closed||M(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:l}=Y(n),{height:c,width:d}=Y(o);let u=e-s,p=r-l;e+d>s+a&&(u=a-d),r+c>l+i&&(p=i-c),M(t)||rt(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=D(o),a=()=>!i.closed&&!M(r);let s,l=!1,c="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?re(t):n,ee(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&oe(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||l&&e===n.ownerDocument.body,d=s;s=void 0,l=!1,c="",ee(o),i&&(d&&n.contains(d)&&oe(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&It(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),ee(o)}),Ct(i,o,"focusin",()=>{l=!0});let m=!1;return Ct(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,St(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),Ct(i,n,"keydown",n=>{var i;const s=n;if(!a()||!Mt(s)||s.defaultPrevented)return;if(("ContextMenu"===s.key||"F10"===s.key&&s.shiftKey)&&r.constructor.CONTEXTMENU&&!ne(s.target)){Pt(s),u();const r=s.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&(null==(i=p()[0])||i.focus({preventScroll:!0})))}if(!t.show||!o.contains(s.target))return;if("Escape"===s.key)return Pt(s),void(t.show=!1);if("Tab"===s.key)return void(t.show=!1);if(ne(s.target))return;const l=p(),f=l.indexOf(s.target);let h;if("ArrowDown"===s.key||"ArrowRight"===s.key)h=l[(f+1)%l.length];else if("ArrowUp"===s.key||"ArrowLeft"===s.key)h=l[(f+l.length-1)%l.length];else if("Home"===s.key)h=l[0];else if("End"===s.key)h=l[l.length-1];else{if(1!==s.key.length||" "===s.key)return;{const t=s.key.toLowerCase();c=Date.now()-d>700?t:c+t,d=Date.now();const e=[...c].every(e=>e===t)?t:c;h=[...l.slice(f+1),...l.slice(0,f+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}Pt(s),null==h||h.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||ne(t.target))&&(u(),!0)}}(this,a);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),a(t.clientX,t.clientY))}),o(e,"click",t=>{F(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const ae=new WeakMap,se=new WeakMap,le=new WeakMap;function ce(t){return le.get(t)||P(t)}function de(t){const e=ae.get(t),r=le.get(t);return()=>ae.get(t)===e&&(!e||e.active())&&le.get(t)===r&&(!r||!r.closed)}function ue(t){const e=le.get(t),r=P(t).child(),n=r.child();le.set(t,r),r.add(()=>{le.get(t)===r&&le.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!M(t)&&!n.closed&&ae.get(t)===o};return ae.set(t,o),n.add(()=>{ae.get(t)===o&&ae.delete(t),o.onAssigned=void 0,o.onError=void 0}),null==e||e.dispose(),o}function pe(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&(null==e||e())}function fe(t,e,r){se.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{se.get(t)===e&&(se.delete(t),pe(e))}}function he(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function me(t,e){const{$progress:r}=t.template,{left:n}=Y(r),o=ct((k?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:ut(i),width:o,percentage:ct(o/r.clientWidth,0,1)}}function ve(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=me(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ge=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function ye(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),l=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),Ct(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!Mt(r)||r.defaultPrevented)return;const i=ge.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;Pt(r);const c=n();if(!a(c))return void l();const d="Home"===r.key?c.min:"End"===r.key?c.max:s(c.value,c)+i*c.step;o(s(d,c)),l()}),l()),l}const be=new WeakMap;function we(t){return be.get(t)||0}function xe(t,e,r){let n,o=!1,i=!1,a=!1,s=we(t);const l=()=>a||we(t)!==s,c=()=>{var e,r;return!!(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)};return{restore(i=()=>{t.currentTime=e}){if(!r()||l())return;const d=we(t);i(),s=we(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!l()&&(o=c()))},manual(){a=!0},ready(){if(!r()||c())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!l()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!c()}}}function ke(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=D(e),{on:a}=_(t,e);let s=()=>{};const l=Rt(".art-progress-hover",e),c=Rt(".art-progress-loaded",e),d=Rt(".art-progress-played",e),u=Rt(".art-progress-highlight",e),p=Rt(".art-progress-indicator",e),f=Rt(".art-progress-tip",e);function h(r,n){const{width:o,time:i}=n||me(t,r);f.textContent=i||"00:00";const a=f.clientWidth;o<=a/2?et(f,"left",0):o>e.clientWidth-a/2?et(f,"left",e.clientWidth-a+"px"):et(f,"left",o-a/2+"px")}r.indicator?X(p,r.indicator):et(p,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const m="played"===r&&a&&k;if("loaded"===r&&et(c,"width",100*n+"%"),"hover"===r&&(et(l,"width",100*n+"%"),F(a,u)?function(r){const{width:n}=me(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;f.textContent=null!=o?o:"";const i=f.clientWidth;n<=i/2?et(f,"left",0):n>e.clientWidth-i/2?et(f,"left",e.clientWidth-i+"px"):et(f,"left",n-i/2+"px")}(a):h(a),0===n?q(o,"art-progress-hover"):j(o,"art-progress-hover")),"played"===r&&(et(d,"width",100*n+"%"),et(p,"left",100*n+"%")),m){j(o,"art-progress-hover");h(a,{width:e.clientWidth*n,time:ut(n*t.duration)}),s(),s=St(i,()=>{q(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){u.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function $e(t){return e=>l(s({},t),{html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ke(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=_(t,e),a=D(e);let s=0;const l=()=>{const e=de(t);return()=>!a.closed&&!M(t)&&e()},c=()=>{const t=++s,e=l();return()=>t===s&&e()};if(!k){let e;i(r,"click",e=>{e.target!==n&&ve(t,e,c())}),i(r,"mousemove",e=>{const r=l(),{percentage:n}=me(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?c():void 0}),o("document:mousemove",r=>{const n=e;if(null==n?void 0:n()){const{second:o,percentage:i}=me(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=D(e),{on:n}=_(t,e);let o,i=0;const a=ye(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${ut(e)} / ${ut(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;null==o||o.dispose();const s=r.child();o=s;const l=ce(t).add(()=>{s.dispose()});s.add(()=>{l()}),s.add(()=>{o===s&&(o=void 0)});const c=de(t),d=()=>n===i&&!s.closed&&!M(t)&&c(),u=xe(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function Ee(t){const{option:e}=t.art;e.isLive||t.add($e({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.play),s=Ot(t,o.pause);function l(){t.setAttribute("aria-label",i.get("Play")),et(a,"display","flex"),et(s,"display","none")}function c(){t.setAttribute("aria-label",i.get("Pause")),et(a,"display","none"),et(s,"display","flex")}zt(D(t),t,()=>(e.playing?s:a).click()),Q(a,i.get("Play")),Q(s,i.get("Pause")),n(a,"click",()=>{at(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?c():l(),r("video:playing",()=>{c()}),r("video:pause",()=>{l()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.volume),s=Ot(t,o.volumeClose);for(const e of[a,s])zt(D(t),e),e.setAttribute("aria-label",i.get("Mute"));const l=Ot(t,'
'),c=Ot(l,'
'),d=Ot(c,'
'),u=Ot(c,'
'),p=Ot(u,'
'),f=Ot(p,'
'),h=Ot(u,'
'),m=D(t);let v=0;const g=ye(m,u,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||m.closed||M(e)||(e.volume=t/100)},"vertical");function y(t){const{top:e,height:r}=Y(u);return 1-(t.clientY-e)/r}function b(){g();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)et(a,"display","none"),et(s,"display","flex"),et(h,"top","100%"),et(f,"top","100%"),d.textContent="0";else{const t=100*e.volume;et(a,"display","flex"),et(s,"display","none"),et(h,"top",100-t+"%"),et(f,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(b(),r("video:volumechange",b),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),k)et(l,"display","none");else{let t=!1;n(u,"mousedown",r=>{t=0===r.button,e.volume=y(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=y(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>l(s({},t),{style:k?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=_(e,t);function n(){const r=`${ut(e.currentTime)} / ${ut(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!P(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!k&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.screenshot),r(t,"click",()=>{at(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;Ot(t,o.setting),zt(D(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Q(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t),Ot(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Q(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenWebOn),s=Ot(t,o.fullscreenWebOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Q(t,i.get("Exit Web Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Web Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenOn),s=Ot(t,o.fullscreenOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Q(t,i.get("Exit Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rSe.get(t).option.selector}),vt(t,"$control_item",{get:()=>Se.get(t).item}),vt(t,"$control_value",{get:()=>Se.get(t).value})),Se.set(t,e)}function Le(t,e){t.innerHTML=e}function Pe(t,e,r,n,o){const{proxy:i}=t.events,a=D(n),s=r.selector;j(n,"art-control-selector");const l=document.createElement("div");j(l,"art-selector-value"),X(l,r.html),n.textContent="",X(n,l);const d=Ot(n,'
');for(let c=0;cc(null,null,function*(){var o,i;if(a.closed)return;const s=W(n),c=r.selector.find(t=>s.includes(t.$control_item));if(!c)return;const d=++u,p=()=>!a.closed&&d===u,f=a.add(function(t,e){return Ae.set(t,e),()=>{Ae.get(t)===e&&Ae.delete(t)}}(n,p));try{if(e(c),a.closed)return;if(r.onSelect){const e=yield r.onSelect.call(t,c,c.$control_item,n);if(p()){const t=l.contains(l.ownerDocument.activeElement);Le(l,e),null==(i=null==(o=Se.get(c))?void 0:o.refresh)||i.call(o,t)}}}catch(h){console.warn("ArtPlayer selector failed:",h)}finally{f()}}));o.push(p);const f=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(Ce));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,l=!1,c=!1,d="",u=0;const p=()=>i.length>0&&(l||s&&!c),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(Ce)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{l=t,c=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},v=e=>{e&&!t.closed&&((e.querySelector(Ce)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},g=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",v(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};zt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&g()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(Ce)||(b.tabIndex=-1,zt(t,b,()=>{b.click(),y()}))}return Ct(t,r,"keydown",t=>{const e=t;!Mt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(Pt(e),g("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(Pt(e),y()))}),Ct(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&g()}),Ct(t,n,"keydown",t=>{var e;const r=t;if(!Mt(r)||r.defaultPrevented)return;if("Escape"===r.key)return Pt(r),void y();const n=i.indexOf(r.target);if(n<0)return;let o;switch(1!==r.key.length&&(d=""),r.key){case"ArrowDown":o=Math.min(n+1,i.length-1);break;case"ArrowUp":o=Math.max(n-1,0);break;case"Home":o=0;break;case"End":o=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void Pt(r);default:{if(1!==r.key.length||" "===r.key)return;const t=Date.now();d=t-u<500?d+r.key.toLocaleLowerCase():r.key.toLocaleLowerCase(),u=t;const a=[...d].every(t=>t===d[0])?d[0]:d;for(let r=1;r<=i.length;r++){const t=(n+r)%i.length;if(null==(e=i[t].textContent)?void 0:e.trim().toLocaleLowerCase().startsWith(a)){o=t;break}}}}Pt(r),void 0!==o&&v(i[o])}),Ct(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),Ct(t,e,"mouseenter",()=>{s=!0,m(l)}),Ct(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),Ct(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,l,d,String(r.tooltip||r.name||l.textContent||t.i18n.get("Open")));for(const c of s)Se.get(c).refresh=f}class Me extends Zt{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},l=()=>{i=!0,s()},c=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(null==o||o.dispose(),n=e.ownerDocument,o=t.child(),Ct(o,n,"keydown",l,{capture:!0}),Ct(o,n,"mousedown",c,{capture:!0}),Ct(o,n,"touchstart",c,{capture:!0,passive:!0}))};return d(),Ct(t,e,"keydown",l,{capture:!0}),Ct(t,e,"mousedown",c,{capture:!0}),Ct(t,e,"touchstart",c,{capture:!0,passive:!0}),Ct(t,e,"focusin",()=>{d(),s()}),Ct(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}(R(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=_(t,n);a(r,"focusin",e=>{var r;t.isFocus=!0,t.isInput="INPUT"===(null==(r=e.target)?void 0:r.tagName)}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{k||(this.show=!0)}),i("click",()=>{k?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=F(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(q(r,"art-hide-cursor"),j(r,"art-hover"),this.timer=Date.now()):(j(r,"art-hide-cursor"),q(r,"art-hover"))}),this.init(),P(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=D(e),{on:i}=_(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);t.observe(r),o.add(()=>{t.disconnect()})}else if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){Ee(this)}add(t){if(M(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:it(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){var e,r;if(!t)return;const n=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);Le(t.$control_value,t.html);for(let o=0;othis.check(t),t,e,r)}}function ze(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{var n;if(M(t))return;const o=F(r,e);t.isInput=o&&"INPUT"===(null==(n=r.target)?void 0:n.tagName),t.isFocus=o,t.emit(o?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),P(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(M(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:l}=r,c=o.filter(t=>n-t<=a);switch(c.length){case 1:if(t.emit("click",e),M(t))return;(!k||!t.isLock&&i)&&at(t.toggle()),o=c;break;case 2:if(t.emit("dblclick",e),M(t))return;k?!t.isLock&&s&&at(t.toggle()):l&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function Oe(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!M(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),P(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(M(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:de(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ve(t,i,()=>n(s))}catch(l){throw e===s&&r(),l}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,l=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,l].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const c=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===c||2===c:3===c||4===c))return;const d=ct((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=ct(i.time+t.duration*d*l,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",ct(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${ut(u)} / ${ut(t.duration)}`))},cancel:r}}const Re=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],De=["resize","scroll","orientationchange"];const Ie=new WeakMap;function Ne(t){const e=Ie.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function _e(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=_e(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ne(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(null==o?void 0:o.capture),once:Boolean(null==o?void 0:o.once),passive:null==o?void 0:o.passive,signal:null==o?void 0:o.signal},l="boolean"===typeof s?s:s.capture,c="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||(null==c?void 0:c.aborted))return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,l),null==c||c.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):(null==c?void 0:c.aborted)?p():null==c||c.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function We(t){return(e,r)=>{if(M(t))return;const n=(...e)=>{if(!M(t))return r(...e)};t.on(e,n),P(t).add(()=>{t.off(e,n)})}}function Fe(t){if(!t.constructor.USE_RAF)return;const e=P(t);let r=()=>{};const n=()=>{M(t)||(t.playing&&t.emit("raf"),M(t)||(r=function(t,e){if(t.closed)return At;let r=!0,n=At;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),We(t)("destroy",()=>r())}class Ve{constructor(t){this.destroyEvents=new Set,function(t,e){Ie.set(t,{scope:P(e),cleaning:!1})}(this,t),P(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),ze(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{M(t)||(j(r,"art-hover"),t.emit("hover",!0,e))},e=>{M(t)||(q(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{M(t)||t.emit("mousemove",e)})}(t,this),function(t,e){var r,n;const{option:o,constructor:i}=t,a=We(t);a("resize",()=>{const{aspectRatio:e,notice:r}=t;"standard"===t.state&&o.autoSize&&t.autoSize(),M(t)||(t.aspectRatio=e,M(t)||(r.show=""))});const s=P(t);let l=()=>{};const c=()=>{M(t)||(l(),l=St(s,()=>t.emit("resize"),i.RESIZE_TIME))};a("window:orientationchange",c),a("window:resize",c);const d=null==(n=null==(r=t.template.$player.ownerDocument.defaultView)?void 0:r.screen)?void 0:n.orientation;"function"===typeof(null==d?void 0:d.addEventListener)&&e.proxy(d,"change",c)}(t,this),function(t,e){if(!k||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=Oe(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=P(t),a=We(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=(null==o?void 0:o.innerHeight)||n.documentElement.clientHeight,a=(null==o?void 0:o.innerWidth)||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,l=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&l}(n,r.SCROLL_GAP)),M(t)||(s=!0,St(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;P(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){var a;if(M(t))return;const s=++n,l={disposers:[]},c=()=>s!==n||M(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,s=i.window||(null==(a=n.ownerDocument)?void 0:a.defaultView)||window,d=(n,o,i)=>{for(const a of o){if(c())return;l.disposers.push(e.proxy(n,a,e=>{r!==l||M(t)||t.emit(`${i}:${a}`,e)}))}};d(o,Re,"document"),d(s,De,"window")}catch(u){throw o(l),u}if(c())return void o(l);const d=r;r=l,o(d)}i(),e.bindGlobalEvents=i}(t,this),Fe(t)}proxy(t,e,r,n={}){return Array.isArray(e),_e(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ne(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Ye(t){if(t&&1===t.nodeType)return t}function Be(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function He(t,e){var r,n,o,i;if(function(t){return Lt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const a=function(t,e){var r;const n=t.target;return 9===(null==n?void 0:n.nodeType)?n:(null==n?void 0:n.ownerDocument)||(null==(r=t.view)?void 0:r.document)||e}(t,e);let s=Ye(a.activeElement);for(;null==(r=null==s?void 0:s.shadowRoot)?void 0:r.activeElement;)s=Ye(s.shadowRoot.activeElement);if(s&&Be(s))return!1;const l=Ye(null==(n=t.composedPath)?void 0:n.call(t)[0])||Ye(t.target),c="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(c||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(c?",a[href]":"");if((null==(o=null==l?void 0:l.closest)?void 0:o.call(l,t))||(null==(i=null==s?void 0:s.closest)?void 0:i.call(s,t)))return!1}return!l||!Be(l)}const je=new WeakMap;class qe{constructor(t){this.art=t,this.keys={},je.set(this,{subscribed:!1}),k||this.init()}init(){const t=this.art;if(M(t))return;const e=je.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{at(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!M(t)){if(t.isFocus&&He(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ue={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ue);class Xe{constructor(t){this.art=t,this.languages={"zh-cn":Ue},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=yt(this.languages,t)&&this.languages[t]||{}}get(t){return yt(this.language,t)&&this.language[t]||t}update(t){this.languages=wt(this.languages,t),this.init()}}const Ge={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class Ke{constructor(t){const e=s(s({},Ge),t.option.icons);for(const r in e)vt(this,r,{get:()=>tt(r,e[r])})}}const Ze=new WeakMap;function Je(t,e,r){const n=()=>!e.closed&&!M(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:l,$video:c}}=t,d=i(l,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!M(t),s=()=>n.classList.contains("art-info-show"),l=t.i18n.get("Close");if(!a())return;const c=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",l),o.setAttribute("role","group"),o.setAttribute("aria-label",c),zt(e,i,()=>i.click(),s),Ct(e,o,"keydown",t=>{const e=t;a()&&s()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),r())});const d=e=>{var r;if(!a())return;const s=n.ownerDocument,l=s.activeElement;if(e)o.contains(l)||(Ze.delete(t),l&&n.contains(l)&&(Ze.set(t,re(l)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Ze.get(t);if(Ze.delete(t),!o.contains(l))return;const i=e&&(null==(r=s.defaultView)?void 0:r.getComputedStyle(e).visibility);(null==e?void 0:e.isConnected)&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):It(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{var t;try{for(const e of u){if(!n())return;const r=Reflect.get(c,null!=(t=e.dataset.video)?t:"undefined");if(!n())return;const o="number"===typeof r?r.toFixed(2):r;if(!n())return;if(e.textContent!==o){const t=null==o?null:`${o}`;if(!n())return;e.textContent=t}}n()&&St(e,f,a.INFO_LOOP_TIME)}catch(r){o(r)}};n()&&f()}catch(i){o(i)}}const Qe=new WeakMap;class tr extends Zt{constructor(t){super(t),this.name="info",Qe.set(this,{revision:0}),k||this.init()}init(){var t;const e=Qe.get(this),r=++e.revision;if(null==(t=e.scope)||t.dispose(),M(this.art)||e.revision!==r)return;const n=P(this.art).child();e.scope=n,n.add(()=>{e.scope===n&&(e.scope=void 0)}),Je(this.art,n,()=>{this.show=!1})}}class er extends Zt{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{et(i,"display","none"),et(s,"display",null),M(t)&&(l=!0)};var d;t.on("destroy",c),(d=t,L(d).finalizers).add(()=>{try{l||c()}finally{t.off("destroy",c)}}),M(t)||n.proxy(e.$state,"click",()=>{M(t)||at(t.play())})}}const or=new WeakMap;function ir(t){const e=or.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class ar{constructor(t){this.art=t,this.timer=null,or.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),P(t).add(()=>{t.off("destroy",e)}),P(t).add(()=>{this.destroy()})}destroy(){ir(this)}set show(t){if(M(this.art))return;const e=or.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){ir(this);const i=e.revision,a=()=>!M(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(j(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const l={};e.pending=l;const c=setTimeout(()=>{if(M(this.art)||e.pending!==l)return;e.pending=void 0;const t=e.revision;o.textContent="",M(this.art)||e.revision!==t||q(n,"art-notice-show")},s);a()?this.timer=c:clearTimeout(c)}else q(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function sr(t,e){return function(t,e){const r=wt(e,t);return r.container=t.container,h(r,Gt)}(t,e)}function lr({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function cr(t,e){if(!lr(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return lr(r)?r:void 0}function dr(t,e,r,n=!1){const o=e=>{M(t)||r(e)};t[n?"once":"on"](e,o),P(t).add(()=>{t.off(e,o)})}function ur(t,e,r){for(const[n,o]of e){if(M(t)||r&&!r())return;t[n].show=o}}function pr(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=ce(t),l=0;return{reset(){l=0,null==a||a.dispose(),q(i,"art-error")},loadStart(){q(i,"art-error")},schedule(d){(d=>c(null,null,function*(){if(M(t))return;const c=ce(t);if(c!==s&&(s=c,l=0),a&&!a.closed)return;const u=c.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!M(t)&&!u.closed&&c===ce(t),f=l{console.warn("ArtPlayer reconnect failed:",t)})}}}const fr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],hr=(()=>{if("undefined"===typeof document)return!1;const t=fr[0],e={};for(const r of fr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),mr={change:hr.fullscreenchange,error:hr.fullscreenerror},vr={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{vr.off("change",o),r()};vr.on("change",o);const i=t[hr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!vr.isFullscreen)return void t();const r=()=>{vr.off("change",r),t()};vr.on("change",r);const n=document[hr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>vr.isFullscreen?vr.exit():vr.request(t,e),onchange(t){vr.on("change",t)},onerror(t){vr.on("error",t)},on(t,e){const r=mr[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=mr[t];r&&document.removeEventListener(r,e,!1)},raw:hr};function gr(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(vr,{isFullscreen:{get:()=>Boolean(document[hr.fullscreenElement])},element:{enumerable:!0,get:()=>document[hr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[hr.fullscreenEnabled])}});const yr=new WeakMap;function br(t){try{Promise.resolve(t()).catch(()=>{})}catch(e){}}function wr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=yr.get(t);if(!n){n=new WeakMap,yr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),br(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),br(i))}function xr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,l=!1,c=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!l){l=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{l||(l=!0,c=!0,a(),d&&!u&&r&&wr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(Ct(i,t.document,t.changeEvent,m),Ct(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){var e;null==(e=yr.get(t.document))||e.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,c&&!u&&r&&wr(t),u?Promise.resolve(e).then(()=>{c?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(v){h(!0,v)}return{promise:f,cancel:()=>i.dispose()}}function kr(t,e){const r=P(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),l=0,c=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch(t){}}return r.add(()=>{l+=1,c=!1,n.classList.remove("art-fullscreen"),f()}),Ct(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){var e,r;return null!=(r=null==(e=yr.get(t.document))?void 0:e.has(t.target))&&r}(e))return;if(r&&u)return void f();if(r===s||M(t))return;s=r;const o=l,a=()=>M(t)||i()!==r||o!==l&&c!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),Ct(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!M(t)&&t.emit("fullscreenError",r)}),{get:()=>!M(t)&&i(),set(n){if(M(t))return Promise.resolve();const o=++l;if(c=Boolean(n),c?u=!1:d&&(u=!0),null==a||a.cancel(),a=void 0,d=!1,!c&&!i())return Promise.resolve();p=!0,d=c;const s=xr(e,r,c,()=>{!M(t)&&c||f()},()=>!i());p=!1,l===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw M(t)||l!==o||(t.notice.show=e),e}).finally(()=>{l===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const $r=new WeakSet;function Er(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function Ar(t){$r.delete(t),t.removeEventListener("webkitbeginfullscreen",Cr),t.removeEventListener("webkitpresentationmodechanged",Cr)}function Cr(t){var e;if($r.has(this)&&Er(this,"webkitbeginfullscreen"===t.type)){Ar(this);try{null==(e=this.webkitExitFullscreen)||e.call(this)}catch(r){}}}function Sr(t){$r.add(t),t.addEventListener("webkitbeginfullscreen",Cr),t.addEventListener("webkitpresentationmodechanged",Cr)}function Tr(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=Er(e),i=o,a=!1,s=0;const l=()=>Er(e,n);function c(r){if(M(t)||(c=e,$r.has(c)))return;var c;"boolean"===typeof r&&(n=r);const d=l();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>M(t)||l()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{var t;s++,i=!1,a&&Sr(e),l()&&(null==(t=e.webkitExitFullscreen)||t.call(e))}),Ct(r,e,"webkitbeginfullscreen",()=>c(!0)),Ct(r,e,"webkitendfullscreen",()=>c(!1)),Ct(r,e,"webkitpresentationmodechanged",()=>c());const d=()=>c();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!M(t)&&l(),set(r){if(M(t))return;const n=++s;if(i=Boolean(r),r){if(Ar(e),t.state="fullscreen",M(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,Sr(e)),l()&&e.webkitExitFullscreen()}}}function Lr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function Pr({node:t,parent:e,next:r}){var n;if(!e)return void(null==(n=t.parentNode)||n.removeChild(t));const o=(null==r?void 0:r.parentNode)===e?r:null;t.parentNode===e&&t.nextSibling===o||e.insertBefore(t,o)}function Mr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function zr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function Or(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const l=t.icons.play,c=t.icons.pause;if(o.closed)return;i.append(l,c),s.append(e,i),zt(o,e,()=>e.click(),r),zt(o,i,()=>(t.playing?c:l).click(),r);const d=t.i18n.get("Close");if(o.closed||M(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||M(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),Ct(o,s,"keydown",t=>{const e=t;r()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),n())}),Ct(o,e,"click",n),Ct(o,l,"click",()=>{at(t.play())}),Ct(o,c,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||M(t)||(i.setAttribute("aria-label",e),l.style.display=t.playing?"none":"flex",c.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};Ct(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const l=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},c=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=Mr(i.left,i.top,zr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",l),r.add(()=>{t.off("document:mousemove",l)}),t.on("document:mouseup",c),r.add(()=>{t.off("document:mouseup",c)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(l){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,l}}function Rr(t){const{$player:e,$video:r}=t.template,n=P(t).child();let o,i,a=0,c=!1,d=!1;const u=()=>!M(t)&&e.classList.contains("art-mini"),p=function(t){const e=t.template.$player;let r;return{entering(){var n;const o=e.ownerDocument,i=o.activeElement,a=i&&e.contains(i);(null==(n=t.template.$mini)?void 0:n.contains(i))||(r=a?re(i):void 0);const s=a&&e.classList.contains("art-keyboard-focus");return e=>{!s||M(t)||o.activeElement!==i&&o.activeElement!==o.body||null==e||e()}},leaving(n){const o=e.ownerDocument,i=null==n?void 0:n.contains(o.activeElement);return()=>{var e;if(!i||M(t)||o.activeElement!==o.body&&!(null==n?void 0:n.contains(o.activeElement)))return;const a=r&&(null==(e=o.defaultView)?void 0:e.getComputedStyle(r).visibility);(null==r?void 0:r.isConnected)&&r.getClientRects().length&&"hidden"!==a&&"collapse"!==a&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):It(t)}}}}(t);function f(){if(i){const e=i,r=a;i=void 0;try{Pr(e)}catch(t){throw r!==a||i||(i=e),t}}}function h(){if(M(t))return;const r=++a;d=!1;const n=p.leaving(t.template.$mini);f(),M(t)||r!==a||(null==o||o.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),M(t)||r!==a||t.emit("mini",!1)))}function m(){if(M(t))return;const v=++a;if(c)return void(d=!0);const g=p.entering();if(t.state="mini",!M(t)&&v===a){null!=i||(i=Lr(r)),e.classList.add("art-mini");try{if(!o){c=!0;try{o=Or(t,n,u,h)}finally{c=!1}}if(d)return d=!1,void m();if(!o||M(t))return;if(v!==a)return void(u()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),M(t)||v!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:l(s({},Mr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r)),{reset:!0})}(t.storage.get("left"),e,zr(o.element));if(M(t)||v!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),M(t)||v!==a)return;t.storage.set("left",i.left)}M(t)||v!==a||g(o.focus),M(t)||v!==a||t.emit("mini",!0)}catch(y){const r=d;throw d=!1,M(t)||v!==a&&!r||(f(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),y}}}return n.add(()=>{a++;try{f()}finally{null==o||o.cancelDrag(),e.classList.remove("art-mini")}}),{get:u,set(t){t?m():h()}}}const Dr=new WeakSet,Ir=t=>"picture-in-picture"===t.webkitPresentationMode;function Nr(t){Dr.delete(t),t.removeEventListener("webkitpresentationmodechanged",_r),t.removeEventListener("enterpictureinpicture",_r)}function _r(){var t;if(Dr.has(this)&&Ir(this)){Nr(this);try{null==(t=this.webkitSetPresentationMode)||t.call(this,"inline")}catch(e){}}}function Wr(t){Dr.add(t),t.addEventListener("webkitpresentationmodechanged",_r),t.addEventListener("enterpictureinpicture",_r)}function Fr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Vr(t,e,r){return new Promise((n,o)=>{if(M(t)||e===t.url)return void n();const i=ue(t),a=i.scope.child();let s=!1;const l=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{l()});const d=()=>!s&&i.active(),u=t=>l(!0,t);i.onError=u;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!d())return;const p=a.child();let f=!1,h=!1,m=!1;const v=xe(t,r,d),g=()=>c(null,null,function*(){if(t.aspectRatio=o,d()){if(n)try{yield t.play()}catch(e){}d()&&(t.notice.show="",l())}}),y=()=>{var e,r;if(d()&&!h&&f)try{if(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)return;if(!d())return;if(m||(m=!0,t.playbackRate=s),!v.ready()||!d()||h)return;h=!0,p.dispose(),g().catch(u)}catch(n){u(n)}},b={"video:error":u,"video:loadedmetadata":()=>{if(d())try{v.restore()}catch(t){u(t)}},"video:canplay":()=>{f=!0,y()},"video:seeked":y,seek:v.manual},w=a.child(),x=[],k=Object.keys(b);for(const e of k)Fr(w,t,e,t=>{i.acceptingEvents&&x.push([e,t])},!1);if(fe(t,i,e),!d())return;if(t.notice.show="",!d())return;const $=()=>{if(w.dispose(),!e)return void l();const r={};for(const e of k)r[e]=Fr(p,t,e,b[e],"video:seeked"!==e);for(const[t,e]of x){if(!d()||p.closed)break;r[t](e)}x.length=0};i.assigned?$():i.onAssigned=$}catch(p){u(p)}})}function Yr(t){const{option:e,template:{$video:r}}=t;vt(t,"url",{get:()=>r.src,set(n){return c(this,null,function*(){if(M(t))return;const o=function(t){const e=se.get(t);return se.delete(t),e||ue(t)}(t);o.acceptingEvents=!1;try{if(!n)return void((yield Tt(o.scope))&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||st(n),s=e.customType[a];if(a&&s){if(!(yield Tt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const l=o.scope.child();let c=!1,d=!1;Fr(l,t,"video:canplay",()=>{c=!d}),Fr(l,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>he(o,t))}else{if(!o.active())return;r.src=n}}finally{l.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};c?e():d||Fr(o.scope,t,"video:canplay",e)}}catch(i){he(o,i)}finally{pe(o)}})}})}const Br=[function(t){const{template:{$video:e}}=t;vt(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;vt(t,"play",{value(){return c(this,null,function*(){const a=de(t),s=yield i.play();if(!a())return s;const l=e.get("Play");if(!a())return s;if(r.show=l,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;vt(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${ut(t.currentTime)} / ${ut(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;vt(t,"forward",{set(e){r.seek=t.currentTime+e}}),vt(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;vt(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=ct(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),vt(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;vt(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){be.set(t,we(t)+1)}(t),e.currentTime=ct(n,0,t.duration))}})},function(t){vt(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Vr(t,e,0);vt(t,"switchQuality",{value:e=>Vr(t,e,t.currentTime)}),vt(t,"switchUrl",{value:e}),vt(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;vt(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;vt(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!M(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=cr({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(M(t))return;"width"===(null==r?void 0:r.axis)?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,M(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=de(t);return new Promise((a,s)=>{const l=r=>{try{!M(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,l):a(n.toDataURL("image/png"))}catch(c){l(c)}})}vt(t,"getDataURL",{value:()=>o(!1)}),vt(t,"getBlobUrl",{value:()=>o(!0)}),vt(t,"screenshot",{value:e=>c(null,null,function*(){const n=de(t),o=yield t.getDataURL();if(!M(t)&&n()){const i=e||`artplayer_${ut(r.currentTime)}`;!M(t)&&n()&<(o,`${i}.png`),!M(t)&&n()&&t.emit("screenshot",o)}return o})})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(M(t))return;const i=function(t){const e=vr.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>gr(t,e.requestFullscreen,void 0),exit:()=>gr(r,e.exitFullscreen)}}(o);i?vt(t,"fullscreen",kr(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?vt(t,"fullscreen",Tr(t)):vt(t,"fullscreen",{get:()=>!1,set(){M(t)||(r.show=e.get("Fullscreen Not Supported"))}}),vt(t,"fullscreen",bt(t,"fullscreen"))};t.once("video:loadedmetadata",i),P(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(Pr(t.placement),r()))}return P(t).add(()=>{var t;n+=1;const i=r;if(r=void 0,i)try{o(i,()=>!0)}catch(a){try{e.parentNode!==i.placement.parent&&(null==(t=e.parentNode)||t.removeChild(e))}catch(s){throw new A([a,s])}throw a}}),i=>{if(M(t))return;const a=++n,s=()=>a===n&&!M(t),l=function(t){var e;const r=null==(e=t.ownerDocument)?void 0:e.activeElement,n=r&&t.contains(r);return()=>{n&&r.isConnected&&t.contains(r)&&r.ownerDocument.activeElement===r.ownerDocument.body&&r.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:Lr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(c){throw s()&&o(n,s)&&(r=void 0,l()),c}if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);vt(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?vt(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=P(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,l=!1,c=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch(t){}}function u(e,r,n){e.then(()=>{!r||!M(t)&&a||d()},e=>{M(t)||c!==n||(t.notice.show=e)}).finally(()=>{c===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{c++,a=!1,d()}),Ct(n,e,"enterpictureinpicture",()=>{if(l)return void d();if(!o()||i)return;const e=c;t.state="pip",!M(t)&&e===c&&o()&&(i=!0,t.emit("pip",!0))}),Ct(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!M(t)&&o()?e:null,set(n){if(M(t))return;const i=++c;if(a=Boolean(n),a?l=!1:s&&(l=!0),s=!1,a){if(t.state="pip",M(t)||c!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw c===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?vt(t,"pip",function(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(M(t)||Dr.has(e))return;const s=Ir(e);if(s&&(o=!1),s===n&&!r)return;const l=i;s&&(t.state="pip"),M(t)||i!==l||Ir(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Wr(e),Ir(e)&&e.webkitSetPresentationMode("inline")});for(const l of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])Ct(r,e,l,()=>s());return{get:()=>!M(t)&&Ir(e),set(r){var n;if(M(t))return;const l=++i,c=a;if(r){if(!1===(null==(n=e.webkitSupportsPresentationMode)?void 0:n.call(e,"picture-in-picture")))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Nr(e),t.state="pip",M(t)||i!==l)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(d){throw l===i&&(o=!1),d}}else o&&(o=!1,Wr(e)),Ir(e)&&e.webkitSetPresentationMode("inline");M(t)||l!==i||c!==a||Ir(e)!==Boolean(r)||s(!0)}}}(t)):vt(t,"pip",{get:()=>!1,set(){M(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;vt(t,"loaded",{get:()=>r.loadedTime/e.duration}),vt(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){vt(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;vt(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;vt(t,"autoSize",{value(){if(M(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!lr(o))return;const i=Y(e),a=cr(i,o.width/o.height);a&&!M(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;vt(t,"rect",{get:()=>Y(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}vt(t,"x",{get:()=>e.left+window.pageXOffset}),vt(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;vt(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){M(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(dt(o))}`,M(t)||t.emit("flip",o))}})},function(t){vt(t,"mini",Rr(t))},function(t){const{template:{$poster:e}}=t;vt(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch(t){return""}},set(t){et(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;vt(t,"autoHeight",{value(){if(M(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!lr(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||M(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;vt(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){vt(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){vt(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];vt(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;n{if(!M(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,M(t)||vt(t,"airplay",{value(){if(!M(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(M(t))return;Reflect.apply(e,o,[]),M(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");M(t)||(r.show=n)}}}))},function(t){vt(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(null==i?void 0:i.html)||"",selector:e,onSelect(e,r,i){return c(this,null,function*(){const r=function(t){return t&&Ae.get(t)||(()=>!0)}(i);if(yield t.switchQuality(e.url),!M(t)&&r()){const i=`${o.get("Switch Video")}: ${e.html}`;!M(t)&&r()&&(n.show=i)}return e.html})}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,l=P(t).child(),c=!1;function d(){const e=l;l=P(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function u(){const i=a,c=l;if(!i||!o)return;const d=()=>{var e;return!M(t)&&!c.closed&&l===c&&a===i&&i.sourceActive()&&(null==(e=t.controls)?void 0:e.thumbnails)===i.element};if(!d())return;const u=r.clientWidth*i.percentage;if(!(u>0&&ud-f/2?d-f+"px":u-f/2+"px"}}(e.thumbnails,{imageWidth:o.naturalWidth,videoWidth:n.videoWidth,videoHeight:n.videoHeight,progressWidth:r.clientWidth,position:u}));for(const[t,e]of Object.entries(p)){if(!d())return;et(i.element,t,e)}}We(t)("setBar",(r,n,s)=>{var p;const f=null==(p=t.controls)?void 0:p.thumbnails,{url:h,scale:m}=e.thumbnails;if(!M(t)&&f&&h&&("hover"===r||"played"===r&&s&&k)){if(i!==f){const t=D(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,d())})}if(a={percentage:n,element:f,sourceActive:de(t)},o)u();else if(!c){const t=l;c=!0,function(t,e,r){return nt(t,e,r)}(h,m,t).then(e=>{l!==t||t.closed||(c=!1,o=e,u())}).catch(e=>{l!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),vt(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{M(t)||!e.url||t.option.isLive||M(t)||(t.option.thumbnails=e,d())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{M(t)||t.emit(`video:${e.type}`,e)})}(t);const e=pr(t);!function(t,e){dr(t,"video:canplay",()=>{e.reset(),ur(t,[["loading",!1]])}),dr(t,"video:canplay",()=>{ur(t,[["loading",!1],["controls",!0],["mask",!0]]),M(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;dr(t,"video:ended",()=>{if(e.loop){const e=de(t);if(t.seek=0,M(t)||!e())return;at(t.play()),e()&&ur(t,[["controls",!1],["mask",!1]],e)}else ur(t,[["controls",!0],["mask",!0]])})}(t),dr(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;dr(t,"video:loadedmetadata",()=>{t.emit("resize"),k&&ur(t,[["loading",!1],["controls",!0],["mask",!0]])}),dr(t,"video:loadstart",()=>{e.loadStart(),ur(t,[["loading",!0],["mask",!1],["controls",!0]])}),dr(t,"video:pause",()=>{ur(t,[["controls",!0],["mask",!0]])}),dr(t,"video:play",()=>{ur(t,[["mask",!1]]),M(t)||et(r,"display","none")}),dr(t,"video:playing",()=>ur(t,[["mask",!1]])),dr(t,"video:progress",()=>{t.playing&&ur(t,[["loading",!1]])}),dr(t,"video:seeked",()=>ur(t,[["loading",!1],["mask",!0]])),dr(t,"video:seeking",()=>ur(t,[["loading",!0],["mask",!1]])),dr(t,"video:timeupdate",()=>ur(t,[["mask",!1]])),dr(t,"video:waiting",()=>ur(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(M(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(M(t))return;const r=e.moreVideoAttr[s];if(M(t))return;t.attr(s,r)}if(M(t))return;if(e.muted){const r=e.muted;if(M(t))return;t.muted=r}if(M(t))return;if(e.volume){const r=ct(e.volume,0,1);if(M(t))return;n.volume=r}if(M(t))return;const i=r.get("volume");if(M(t))return;if("number"===typeof i&&(n.volume=ct(i,0,1)),M(t))return;if(e.poster){const r=`url(${e.poster})`;if(M(t))return;et(o,"backgroundImage",r)}if(M(t))return;if(e.autoplay){const r=e.autoplay;if(M(t))return;n.autoplay=r}if(M(t))return;if(e.playsInline){if(M(t))return;if(n.playsInline=!0,M(t))return;n["webkit-playsinline"]=!0}if(M(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(M(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(M(t))return;const r=e.cssVar[s];if(M(t))return;t.cssVar(s,r)}if(M(t))return;const a=e.url;M(t)||(t.url=a)}];class Hr{constructor(t){if(!M(t)){Yr(t);for(const e of Br){if(M(t))return;e(t)}}}}const jr=new WeakMap,qr="art-auto-orientation-fullscreen";function Ur(t){if(jr.get(t.orientation)===t)try{t.orientation.unlock()}catch(e){}}const Xr="art-auto-orientation",Gr=["width","height","transform-origin","transform"];function Kr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return lr(t)&&lr(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=P(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(Xr);r.classList.remove(Xr),n&&(t.isRotate=!1,M(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=B();if(M(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;null!=o||(o=Gr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(Xr),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{var l;M(t)||(r?o?s(!1):e()&&(i(),i=St(n,()=>{o||s(!0)},Number(null!=(l=t.constructor.AUTO_ORIENTATION_TIME)?l:0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(qr),t&&(t.cancelled=!0,Ur(t),t.settled&&jr.get(t.orientation)===t&&jr.delete(t.orientation))}return P(t).add(o),i=>{var a,s;if(M(t))return;if(!i)return void o();if(n&&!n.cancelled&&jr.get(n.orientation)===n)return;const l=null==(s=null==(a=r.ownerDocument.defaultView)?void 0:a.screen)?void 0:s.orientation;if("function"!==typeof(null==l?void 0:l.lock)||"function"!==typeof l.unlock||!e())return;const c={orientation:l,cancelled:!1,settled:!1};n=c,jr.set(l,c);const d=()=>!M(t)&&!c.cancelled&&n===c&&jr.get(l)===c,u=e=>{c.settled=!0;const o=d();jr.get(l)===c&&jr.delete(l),n===c&&(n=void 0),o&&(r.classList.remove(qr),t.notice.show=e)};try{const t=l.lock(l.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{c.settled=!0,d()?r.classList.add(qr):(Ur(c),jr.get(l)===c&&jr.delete(l))}).catch(u)}catch(p){u(p)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),P(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Zr(t){return t.get("times")||{}}function Jr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||M(t))return()=>{};const s=Rt(".art-auto-playback-last",a),l=Rt(".art-auto-playback-jump",a),c=Rt(".art-auto-playback-close",a);Ot(c,r.close);const d=D(a);let u,p=0;const f=()=>{const r=++p;if(null==u||u.dispose(),d.closed||M(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!M(t);f.add(()=>{u===f&&(u=void 0,et(a,"display","none"))});const m=ce(t).add(()=>{f.dispose()});f.add(()=>{m()});const v=Zr(n)[t.option.id||t.option.url];if(!h())return;if(et(a,"display","none"),!h()||!v||!(v>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(et(a,"display","flex"),!h())return;const g=`${e.get("Last Seen")} ${ut(v)}`;if(!h())return;if(s.textContent=g,!h())return;const y=e.get("Jump Play");if(!h())return;if(l.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(c,()=>{et(a,"display","none")}),!h())return;if(b(l,()=>{t.seek=v,h()&&(at(t.play()),h()&&(et(i,"display","none"),h()&&et(a,"display","none")))}),!h())return;let w=()=>{},x=!1;const k=()=>{!x&&h()&&(x=!0,w(),St(f,()=>{h()&&et(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",k),w=f.add(()=>{t.off("video:timeupdate",k)}),x&&w()};return()=>{N(t,a,"ready",f),N(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;We(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Zr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;M(t)||(o.length>i&&delete n[o[0]],n[a]=s,M(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Zr(e)},clear:()=>e.del("times"),delete(t){const r=Zr(e);return delete r[t],e.set("times",r),r}}}function Qr(t){let e,r=0;return{start:n=>{const o=++r;if(null==e||e.scope.dispose(),o!==r||M(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:ce(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{(null==e?void 0:e.active)||q(t.template.$player,"art-fast-forward")}}),St(i.scope,()=>{if(e!==i||M(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||M(t))return;t.playbackRate=r,e!==i||i.scope.closed||M(t)||j(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,null==e||e.scope.dispose()}}}function tn(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Qr(t),i=We(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return U(r,"art-fast-forward")}}}function en(t,e,r,n){let o;const i=()=>!r.closed&&!M(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),zt(r,e),Ct(r,e,"keydown",t=>{const r=t;i()&&n()&&Mt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(Pt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function rn(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return U(n,"art-lock")}function i(){M(t)||(j(n,"art-lock"),M(t)||(t.isLock=!0,M(t)||t.emit("lock",!0)))}function a(){M(t)||(q(n,"art-lock"),M(t)||(t.isLock=!1,M(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=D(e);if(n.closed||M(t))return;const i=Ot(e,r.lock);if(n.closed||M(t))return;const a=Ot(e,r.unlock);if(n.closed||M(t))return;const s=en(t,e,n,o);n.closed||M(t)||(o()?(et(i,"display","inline-flex"),n.closed||M(t)||et(a,"display","none")):et(i,"display","none"),N(t,e,"lock",e=>{M(t)||(et(i,"display",e?"inline-flex":"none"),n.closed||M(t)||et(a,"display",e?"none":"inline-flex"),n.closed||M(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function nn(t){return We(t)("control",e=>{e?q(t.template.$player,"art-mini-progress-bar"):j(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class on{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){M(t.art)||!e.miniProgressBar||e.isLive||t.add(nn),!M(t.art)&&e.lock&&k&&t.add(rn),M(t.art)||!e.autoPlayback||e.isLive||t.add(Jr),!M(t.art)&&e.autoOrientation&&k&&t.add(Kr),!M(t.art)&&e.fastForward&&k&&!e.isLive&&t.add(tn)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){it(!M(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(M(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(M(t.art))return t;let o=n;const i=yt(t,o);if(M(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return M(t.art)||(it(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),M(t.art)||vt(t,o,{value:r})),t}(this,t,e)}}const an=new WeakMap;function sn(t){return!t.closed&&!an.get(t)}function ln(t){an.set(t,(an.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(an.get(t)||1)-1;r?an.set(t,r):an.delete(t)}}const cn=new WeakMap,dn=new WeakMap,un=["$parent","$parents","$option","$events","$formatted"];function pn(t){var e,r;const n=new Set;let o=t;for(;o&&!n.has(o);){n.add(o);const t=cn.get(o);if(!t||!t.owner.active||(null==(e=t.owner.scope)?void 0:e.closed)||!t.option.includes(o))return!1;if(!t.parent)return t.owner.root===t.option;if((null==(r=cn.get(t.parent))?void 0:r.owner)!==t.owner)return!1;o=t.parent}return!1}function fn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function hn(t){const e=cn.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function mn(t,e){var r;for(let n=0;n{c&&c!==r&&c.dispose()},()=>kn(t,o)])try{e()}catch(d){d instanceof A?l.push(...d.errors):l.push(d)}if(r.closed||M(t)||(o.push(...i.splice(0)),xn.set(r,o),bn.set(e,r),wn.set(e,n)),a(),l.length)throw new A(l)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function Sn(t,e,r,n,o,i){const a=i||En(e);if(!sn(a)||M(t))return;const s=t.proxy(r,n,e=>{if(sn(a)&&!M(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!sn(a)||M(t)?t.events.remove(s):(hn(e).events.push(s),i&&i!==bn.get(e)&&i.add(()=>{const r=hn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function Tn(t,e,r,n){const o=En(e);if(!sn(o)||M(t))return;const i=(...e)=>{if(sn(o)&&!M(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}function Ln(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}function Pn(t){return Array.from(t.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter(t=>"-1"!==t.getAttribute("tabindex")&&Ln(t))}function Mn(t,e,r=!1){if(!t.show||M(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!sn(gn(n)))return;const o=Pn(n),i=n.querySelector(".art-setting-item.art-current"),a=o.find(t=>e===t||(null==e?void 0:e.contains(t)))||(r?o[o.length-1]:o.find(t=>null==i?void 0:i.contains(t))||o.find(t=>!t.classList.contains("art-setting-item-back"))||o[0]);null==a||a.focus({preventScroll:!0}),M(t.art)||null==a||a.scrollIntoView({block:"nearest",inline:"nearest"})}function zn(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!M(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!(null==r?void 0:r.getClientRects().length))&&Mn(t,o)}}function On(t){const{art:e}=t,r=P(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||M(e)||t.render()},a=i=>{r.closed||M(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&Mn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!M(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&Ln(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&It(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),Ct(r,e.template.$player,"keydown",r=>{var n,a;const s=r;if(!Mt(s)||s.defaultPrevented||M(e))return;const l=s.target;if(l===e.controls.setting){if("ArrowDown"===s.key||"ArrowUp"===s.key)if(Pt(s),t.show)Mn(t,void 0,"ArrowUp"===s.key);else{o="ArrowUp"===s.key;try{t.show=!0}finally{o=!1}}else"Escape"===s.key&&t.show&&(Pt(s),i());return}if(!t.show||!t.$parent.contains(l))return;if("Escape"===s.key)return Pt(s),void i();const c=l.closest(".art-setting-item");if(!c||l!==c&&!l.matches('button,a[href],[role="button"]'))return;const d=t.active&&t.cache.get(t.active);if(!d)return;const u=null==(n=t.active)?void 0:n.find(t=>t.$item===c);if(!sn(gn(d))||u&&!sn(En(u)))return void(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(s.key)&&Pt(s));const p=Pn(d),f=p.indexOf(l);if(f<0)return;let h;switch(s.key){case"ArrowDown":h=Math.min(f+1,p.length-1);break;case"ArrowUp":h=Math.max(f-1,0);break;case"Home":h=0;break;case"End":h=p.length-1;break;case"ArrowLeft":{const t=d.querySelector(".art-setting-item-back");return Pt(s),void(null==t||t.click())}case"ArrowRight":return Pt(s),void((null==(a=null==u?void 0:u.selector)?void 0:a.length)&&l.click());default:return}Pt(s),void 0!==h&&Mn(t,p[h])});let s=!1;Ct(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,St(r,()=>{s=!1,r.closed||M(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function Rn(t){var e,r;const{art:n,active:o}=t,{controls:i,constructor:{SETTING_WIDTH:a,SETTING_ITEM_HEIGHT:s},template:{$player:l,$setting:c,$bottom:d}}=n;if(!i.setting||!t.show||!o)return;const u=l.getBoundingClientRect(),p=i.setting.getBoundingClientRect(),f=u.width/l.offsetWidth||1,h=(p.left-u.left+p.width/2)/f-l.clientLeft,m=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:l}=t,c=Math.min(Math.max(0,l),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*c));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-c)),left:Math.max(c,Math.min(a-d/2,e-c-d))}}({containerWidth:l.clientWidth,containerHeight:l.clientHeight,requestedWidth:(null==(r=null==(e=o[0])?void 0:e.$parent)?void 0:r.width)||a,rows:o.length+(o===t.option?0:1),rowHeight:s,controlCenter:h,bottom:Number.parseFloat(getComputedStyle(c).bottom)||0,padding:Number.parseFloat(getComputedStyle(d).paddingLeft)||0});c.style.height=`${m.height}px`,c.style.width=`${m.width}px`,n.isRotate||k||(h+m.width/2>l.clientWidth?(c.style.left="",c.style.right=""):(c.style.left=`${m.left}px`,c.style.right="auto"))}const Dn=new WeakMap;function In(t){Dn.delete(t)}const Nn=new WeakMap;function _n(t,e){e?Nn.set(t,e):Nn.delete(t)}function Wn(t){var e;const r=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),n=[],o=Nn.get(t),i=null==o?void 0:o();for(const a of["html","icon","tooltip"]){const t=null==(e=r.get(a))?void 0:e.value;t instanceof Node&&n.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{var e,a;for(const n of Reflect.ownKeys(t))!r.has(n)&&(null==(e=Object.getOwnPropertyDescriptor(t,n))?void 0:e.configurable)&&Reflect.deleteProperty(t,n);for(const[n,o]of r)Object.defineProperty(t,n,o);null==i||i(),_n(t,o);for(const{node:t,parent:r,next:o}of n)r?r.insertBefore(t,(null==o?void 0:o.parentNode)===r?o:null):null==(a=t.parentNode)||a.removeChild(t)}}function Fn(t){var e,r;const n=null==(e=t.$item)?void 0:e.querySelector(".art-setting-range");n&&n.setAttribute("aria-label",(null==(r=t.$html)?void 0:r.textContent)||"")}const Vn=new WeakMap;function Yn(t,e,r,n,o,i,a,s){return c(this,null,function*(){try{const l=En(e),c=En(i),d=(Vn.get(i)||0)+1;Vn.set(i,d);const u=()=>sn(l)&&sn(c)&&!M(t.art)&&Vn.get(i)===d;if(null==s||s(),!u())return;const p=yield o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(l){console.warn("ArtPlayer setting callback failed:",l)}})}function Bn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const Hn=new WeakMap;function jn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof A?e.push(...r.errors):e.push(r)}if(e.length)throw new A(e)}function qn(t){var e;null==(e=Hn.get(t))||e()}function Un(t,e){const r=t.find(e.name);if(M(t.art))return r||e;if(!r)return t.add(e);const n=zn(t);In(r),qn(r);const o=Wn(r),i=r.$item,a=null==i?void 0:i.parentNode,s=null==i?void 0:i.nextSibling,l=i?Bn(i):void 0,c=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=Cn(t.art,e);r&&i.push(r)}for(const t of n)a.push(ln(gn(t)))}catch(l){try{jn([...i.reverse().map(t=>t.resume),...a])}catch(c){console.warn("ArtPlayer setting restore failed:",c)}throw l}let s=!0;return{items:r,resume(){s&&(s=!1,jn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,jn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>yn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);if(M(t.art))return void u.dispose();const e=r.$item;try{jn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>null==l?void 0:l(),()=>{a&&i&&a.insertBefore(i,(null==s?void 0:s.parentNode)===a?s:null)},()=>t.format(),()=>{if(f){t.active=c,c&&t.cache.has(c)&&K(t.cache.get(c),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!M(t.art)&&Hn.get(r)===h;for(const y of u.items)Hn.set(y,h);const v=P(t.art).add(()=>{p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!(null==o?void 0:o.enumerable)||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);return u.dispose(),n(r.$item),r}catch(g){throw m()&&h(),g}finally{v()}}const Xn=new WeakMap;function Gn(t,e,r){vt(t,`$${e}`,{configurable:!0,get:()=>r}),vt(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",X(r,n),"html"===e&&Fn(t)}})}function Kn(t,e,r=!1){var n,o;const i=function(t){const e=Hn.get(t);return()=>!e||Hn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const a=t.cache.get(e.$option),s=e.$item;let l="selector";yt(e,"switch")&&(l="switch"),yt(e,"range")&&(l="range"),yt(e,"onClick")&&(l="button");const{icons:c,constructor:d}=t.art;if(!i())return;const u=function(t,e,r=P(t)){const n=bn.get(e);(!n||sn(n)||n.closed)&&An(t,e);const o=r.child();return bn.set(e,o),wn.set(e,r),xn.set(o,hn(e).events),o.add(()=>{kn(t,xn.get(o))}),o}(t.art,e,gn(a)),p=()=>sn(u)&&!M(t.art)&&i();if(!p())return;const f=document.createElement("div");try{if(_n(e),j(f,"art-setting-item"),et(f,"height",`${d.SETTING_ITEM_HEIGHT}px`),f.dataset.name=e.name||"",f.dataset.value=String(e.value||""),!p())return;const i=Ot(f,'
'),h=Ot(f,'
'),m=document.createElement("div");switch(j(m,"art-setting-item-left-icon"),l){case"button":case"switch":case"range":{const t=e.icon||c.config;if(!p())return;X(m,t);break}case"selector":if(null==(n=e.selector)?void 0:n.length){const t=e.icon||c.config;if(!p())return;X(m,t)}else X(m,c.check)}if(X(i,m),!p())return;Gn(e,"icon",m);const v=document.createElement("div");j(v,"art-setting-item-left-text");const g=e.html||"";if(!p())return;X(v,g),X(i,v),Gn(e,"html",v);const y=document.createElement("div");j(y,"art-setting-item-right-tooltip");const b=e.tooltip||"";if(!p())return;switch(X(y,b),X(h,y),Gn(e,"tooltip",y),l){case"switch":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=Ot(t,c.switchOn),n=Ot(t,c.switchOff),o=e.switch;if(!p())return;et(o?n:r,"display","none"),X(h,t),vt(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!p())return;_n(e,()=>{const t=i;return()=>{i=t}}),vt(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,f.setAttribute("aria-checked",String(Boolean(t))),t?(et(n,"display","none"),et(r,"display",null)):(et(n,"display",null),et(r,"display","none"))}});break}case"range":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",X(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!p())return;Reflect.set(r,i,String(t))}j(r,"art-setting-range"),X(h,t),vt(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!p())return;_n(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),vt(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(null==(o=e.selector)?void 0:o.length){const t=document.createElement("div");j(t,"art-setting-item-right-icon"),X(t,c.arrowRight),X(h,t)}}if(!p())return;if(function(t,e,r,n){const{art:o}=t,i=En(e),a=(t,r,n)=>Sn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Yn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Yn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{var o,i;if(null==(o=e.selector)?void 0:o.length)t.render(e.selector);else{if(null==(i=e.$parent)?void 0:i.onSelect)return Yn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&j(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Yn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,f,l),!p())return;vt(e,"$item",{configurable:!0,get:()=>f}),function(t,e,r,n,o){var i;"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||(null==(i=e.selector)?void 0:i.length)||r.setAttribute("aria-current",String(Boolean(e.default))),zt(o,r,()=>r.click(),()=>sn(o)&&!M(t.art))):Fn(e)}(t,e,f,l,u),r&&(null==s?void 0:s.parentNode)?s.replaceWith(f):X(a,f),e.mounted&&p()&&St(u,()=>{var r;if(!M(t.art))try{const n=null==(r=e.mounted)?void 0:r.call(t.art,f,e);Promise.resolve(n).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(n){console.warn("ArtPlayer setting mounted failed:",n)}},0)}catch(h){try{u.dispose()}catch(m){console.warn("ArtPlayer setting cleanup failed:",m)}throw f.remove(),h}}function Zn(t,e=t.option){var r,n,o,i,a,s;if(M(t.art))return;const l=zn(t),c=t.cache.get(e);if(c&&!sn(gn(c)))return;const d=(Xn.get(t)||0)+1;Xn.set(t,d);const u=()=>Xn.get(t)===d&&!M(t.art),p=t.active,f=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),h=()=>{t.active=p,p&&t.cache.has(p)&&K(t.cache.get(p),"art-current");for(const[e,r,n]of f)t.$parent.style.setProperty(e,r,n)};if(t.active=e,c)try{K(c,"art-current"),t.resize()}catch(m){throw u()&&t.cache.get(e)===c&&!gn(c).closed&&h(),m}else{const a=document.createElement("div");t.cache.set(e,a);const s=function(t,e,r){const n=P(t.art).child();return vn.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,a),l=()=>!s.closed&&!M(t.art)&&t.cache.get(e)===a,c=[];try{if(!l())return;j(a,"art-setting-panel"),a.setAttribute("role","group"),a.setAttribute("aria-label",(null==(o=null==(n=null==(r=e[0])?void 0:r.$parent)?void 0:n.$html)?void 0:o.textContent)||t.art.i18n.get("Settings")),X(t.$parent,a),K(a,"art-current"),(null==(i=e[0])?void 0:i.$parent)&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=dn.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=P(e).child(),n=(t,n)=>{if(r.closed||M(e))return;const o=(...t)=>{if(!r.closed&&!M(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=F(r,e.controls.setting),o=F(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||M(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),On(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(dt(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{Tn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){mn(e,t)}check(t){!function(t,e){(null==e?void 0:e.$parent)&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&K(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=dn.get(t)||{active:!0},a=[],s=new Set,l=new Set(o),c=(t,e,r)=>{var n;for(let o=0;ohn(t).parent},$parents:{get:()=>hn(t).parents},$option:{get:()=>hn(t).option},$events:{get:()=>hn(t).events},$formatted:{get:()=>!0}}),cn.set(t,{parent:r,parents:n,option:o,events:(null==a?void 0:a.events)||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return mn(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){Rn(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&yn(n)}catch(i){r.push(i)}}try{An(t.art,e)}catch(i){i instanceof A?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new A(r)}(this,t)}remove(t){const e=zn(this),r=this.find(t);it(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{In(t),qn(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>null==o?void 0:o.remove(),()=>this.render()])try{s()}catch(a){a instanceof A?i.push(...a.errors):i.push(a)}if(i.length)throw new A(i);e()}update(t){return Un(this,t)}add(t,e=this.option){var r;if(M(this.art))return t;let n=!1;this.traverse(e=>{n||(n=e===t)});const o=e.length,i=n?void 0:function(t){const e={};Dn.set(t,e);const r=()=>Dn.get(t)===e;return{current:r,finish(){r()&&Dn.delete(t)}}}(t);let a=!1;try{e.push(t),this.format(),a=!0,this.createItem(t),this.render()}catch(s){if(M(this.art)||i&&!i.current())throw s;if(e[o]===t&&e.splice(o,1),!n&&a){try{this.inactivate(t)}catch(l){console.warn("ArtPlayer setting cleanup failed:",l)}null==(r=t.$item)||r.remove()}throw s}finally{null==i||i.finish()}return t}createHeader(t){!function(t,e){var r;if(!t.cache.has(e.$option))return;const n=t.cache.get(e.$option),{icons:{arrowLeft:o},constructor:{SETTING_ITEM_HEIGHT:i}}=t.art,a=document.createElement("div");et(a,"height",`${i}px`),j(a,"art-setting-item"),j(a,"art-setting-item-back");const s=Ot(a,'
'),l=document.createElement("div");j(l,"art-setting-item-left-icon"),X(l,o),X(s,l),X(s,e.$parent.html),Sn(t.art,e.$parent,a,"click",()=>t.render(e.$parents),gn(n));const c=gn(n);a.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||zt(c,a,()=>a.click(),()=>sn(c)&&!M(t.art)),a.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${(null==(r=a.textContent)?void 0:r.trim())||""}`),X(n,a)}(this,t)}createItem(t,e=!1){Kn(this,t,e)}render(t=this.option){Zn(this,t)}}class to{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch(e){return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch(r){this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch(e){delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch(t){this.settings={}}}}const eo='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class ro{constructor(t){var e;this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=null==(e=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope))?void 0:e.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}run(t){return c(this,null,function*(){if(this.active)try{return yield Promise.race([t(),this.cancelled])}finally{this.cancel()}})}}const no=new WeakMap;function oo(t){return no.get(t)}function io(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const ao=Zt;class so extends ao{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=P(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return no.set(t,n),r.add(()=>{io(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){var t,e;return null==(e=null==(t=this.art.template.$video)?void 0:t.textTracks)?void 0:e[0]}get activeCues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.activeCues)||[])}get cues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.cues)||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?rt(r,t):et(r,t,e)}update(){!function(t){const e=oo(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?mt(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}switch(t){return c(this,arguments,function*(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i=l(s(s({},o.subtitle),e),{url:t}),a=oo(this),c=a.revision+1,d=yield this.init(i);return!a.scope.closed&&a.revision===c&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),d})}createTrack(t,e){!function(t,e,r){const n=oo(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,l=s.parentNode,c=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const l=t.textTrack,c=l?i.proxy(l,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(c)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=c,s.onload=null,s.onerror=null,p=!0;try{null==f||f.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&io(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,l&&l.insertBefore(s,(null==c?void 0:c.parentNode)===l?c:null),f}}(this,t,e)}init(t){return c(this,null,function*(){const e=oo(this),r=function(t){const e=t.request,r=new ro(t.scope);return t.request=r,t.revision+=1,null==e||e.cancel(),r}(e),{notice:n,template:{$subtitle:o}}=this.art;return r.run(()=>c(this,null,function*(){if(!this.textTrack)return null;if(h(t,Gt.subtitle),!t.url)return;let i;this.option=t,this.style(t.style);try{if(!r.active)return;const n=yield fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const a=yield n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||st(e.url)){case"srt":return{vtt:e.onVttLoad(xt(r))};case"ass":return{vtt:e.onVttLoad($t(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(a,t);if(!r.active)return;const l=void 0===s?t.url:i=kt(s.vtt);if(!r.active)return;o.innerHTML="";const c=e.trackRevision+1;if(this.url!==l&&this.createTrack("metadata",l),!r.active||e.trackRevision>c)return;return i&&(e.ownedURL=i,i=void 0),l}catch(a){if(!r.active)return;throw o.innerHTML="",n.show=a,a}finally{i&&(e.scope.closed||this.url!==i?URL.revokeObjectURL(i):e.ownedURL=i)}}))})}}const lo=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${m}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class co{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=H(e.container),it(this.$container,`No container element found by ${e.container}`)),it(V(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();it("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),it(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=T.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=L(t);o.rollback=r,T.set(e,t),o.releaseContainer=()=>{T.get(e)===t&&T.delete(e)}}(t,this.$container,Bn(this.$container)),function(t,e,r){const n=L(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return lo}query(t){return H(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=co.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(M(this.art))return;!function(t){it(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),Z(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&j(this.$player,"art-backdrop"),k&&j(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":j(this.$player,"art-destroy")}}const uo=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class po{on(t,e,r){const n=this.e||(this.e={});let o=uo(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(uo(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=uo(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new co(this),P(this).closed)return;if(this.events=new Ve(this),P(this).closed)return;if(this.storage=new to,P(this).closed)return;if(this.icons=new Ke(this),P(this).closed)return;if(this.i18n=new Xe(this),P(this).closed)return;if(this.notice=new ar(this),P(this).closed)return;if(this.player=new Hr(this),P(this).closed)return;if(this.layers=new er(this),P(this).closed)return;if(this.controls=new Me(this),P(this).closed)return;if(this.contextmenu=new ie(this),P(this).closed)return;if(this.subtitle=new so(this),P(this).closed)return;if(this.info=new tr(this),P(this).closed)return;if(this.loading=new rr(this),P(this).closed)return;if(this.hotkey=new qe(this),P(this).closed)return;if(this.mask=new nr(this),P(this).closed)return;if(this.setting=new Qn(this),P(this).closed)return;if(this.plugins=new on(this),P(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),mo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${mo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=L(t);return e.rollback=void 0,!e.scope.closed})(this)&&ho.push(this)}catch(r){try{z(this,ho,!0,mo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return ho}static get version(){return m}static get config(){return E}static get utils(){return Et}static get scheme(){return Gt}static get Emitter(){return po}static get validator(){return h}static get kindOf(){return h.kindOf}static get html(){return co.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:b?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:null==navigator?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){z(this,ho,t,mo.REMOVE_SRC_WHEN_DESTROY)}}var vo,go;return mo.STYLE=eo,mo.DEBUG=!1,mo.CONTEXTMENU=!0,mo.NOTICE_TIME=2e3,mo.SETTING_WIDTH=250,mo.SETTING_ITEM_WIDTH=200,mo.SETTING_ITEM_HEIGHT=35,mo.RESIZE_TIME=200,mo.SCROLL_TIME=200,mo.SCROLL_GAP=50,mo.AUTO_PLAYBACK_MAX=10,mo.AUTO_PLAYBACK_MIN=5,mo.AUTO_PLAYBACK_TIMEOUT=3e3,mo.RECONNECT_TIME_MAX=5,mo.RECONNECT_SLEEP_TIME=1e3,mo.CONTROL_HIDE_TIME=3e3,mo.DBCLICK_TIME=300,mo.DBCLICK_FULLSCREEN=!0,mo.MOBILE_DBCLICK_PLAY=!0,mo.MOBILE_CLICK_PLAY=!1,mo.AUTO_ORIENTATION_TIME=200,mo.INFO_LOOP_TIME=1e3,mo.FAST_FORWARD_VALUE=3,mo.FAST_FORWARD_TIME=1e3,mo.TOUCH_MOVE_RATIO=.5,mo.VOLUME_STEP=.1,mo.SEEK_STEP=5,mo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],mo.ASPECT_RATIO=["default","4:3","16:9"],mo.FLIP=["normal","horizontal","vertical"],mo.FULLSCREEN_WEB_IN_BODY=!0,mo.LOG_VERSION=!0,mo.USE_RAF=!1,mo.REMOVE_SRC_WHEN_DESTROY=!0,vo=mo,go=eo,$&&(window.Artplayer=vo,v("artplayer-style",go),setTimeout(()=>{vo.LOG_VERSION&&console.log(`%c ArtPlayer %c ${vo.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),mo}); +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";var t=Object.defineProperty,e=Object.defineProperties,r=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(e,r,n)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,s=(t,e)=>{for(var r in e||(e={}))o.call(e,r)&&a(t,r,e[r]);if(n)for(var r of n(e))i.call(e,r)&&a(t,r,e[r]);return t},l=(t,n)=>e(t,r(n)),c=(t,e,r)=>new Promise((n,o)=>{var i=t=>{try{s(r.next(t))}catch(e){o(e)}},a=t=>{try{s(r.throw(t))}catch(e){o(e)}},s=t=>t.done?n(t.value):Promise.resolve(t.value).then(i,a);s((r=r.apply(t,e)).next())});function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var u,p={exports:{}};var f=(u||(u=1,p.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const g=globalThis.CUSTOM_USER_AGENT,y=null!=g?g:"undefined"===typeof navigator?"":navigator.userAgent,b=/^(?:(?!chrome|android).)*safari/i.test(y),w=/iPad|iPhone|iPod/i.test(y)&&("undefined"===typeof window||!window.MSStream),x=w||y.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,k=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(y)||x,$="undefined"!==typeof window&&"undefined"!==typeof document;const E={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class A extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class C{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new C,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof A?t.push(...e.errors):t.push(e)}if(t.length)throw new A(t)}}const S=new WeakMap,T=new WeakMap;function L(t){const e=S.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function P(t){return L(t).scope}function M(t){const e=L(t);return e.destroying||e.scope.closed}function z(t,e,r,n,o=!1){var i,a,s;const l=L(t);if(l.destroying||l.scope.closed)return;l.destroying=!0;const c=[],d=t=>{try{t()}catch(e){c.push(...e instanceof A?e.errors:[e])}};n&&(null==(i=t.template)?void 0:i.$video)&&d(()=>t.reset()),d(()=>l.scope.dispose()),d(()=>{var e;return null==(e=t.template||l.mountingTemplate)?void 0:e.destroy(r)});const u=e.indexOf(t);-1!==u&&e.splice(u,1),t.isDestroy=!0,o||(null==(a=l.releaseContainer)||a.call(l),l.releaseContainer=void 0),d(()=>t.emit("destroy")),d(()=>l.finalizers.dispose()),o&&l.rollback&&d(l.rollback),l.rollback=void 0,null==(s=l.releaseContainer)||s.call(l),l.releaseContainer=void 0;for(const p of c.slice(1))console.warn("Additional ArtPlayer cleanup failure:",p);if(c.length)throw c[0]}const O=new WeakMap;function R(t,e){const r=P(t).child();return O.set(e,r),r}function D(t){const e=O.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function I(t){var e;null==(e=O.get(t))||e.dispose()}function N(t,e,r,n){const o=D(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function _(t,e){return{on:(r,n)=>{N(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=D(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function W(t){var e;if(t.composedPath)return t.composedPath();const r=[];let n=t.target;for(;n;)r.push(n),n=null!=(e=n.parentNode)?e:null;return"undefined"===typeof window||r.includes(window)||r.push(window),r}function F(t,e){return W(t).includes(e)}function V(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function Y(t){return t.getBoundingClientRect()}function B(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function H(t,e=document){return e.querySelector(t)}function j(t,e){return t.classList.add(e)}function q(t,e){return t.classList.remove(e)}function U(t,e){return t.classList.contains(e)}function X(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function G(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function K(t,e){G(t).forEach(t=>q(t,e)),j(t,e)}function Z(t,e){return e.parentNode.replaceChild(t,e),t}function J(t){return document.createElement(t)}function Q(t,e,r="top"){k||(t.setAttribute("aria-label",e),j(t,"hint--rounded"),j(t,`hint--${r}`))}function tt(t="",e=""){const r=J("i");return j(r,"art-icon"),j(r,`art-icon-${t}`),X(r,e),r}function et(t,e,r){return t.style[e]=r,t}function rt(t,e){for(const r in e)et(t,r,e[r]);return t}function nt(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new C;let a=!1,s=()=>{};function l(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function c(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void c(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const l=new Image;d(l,()=>c(l)),i.closed||(l.src=e)}catch(e){l(e)}}))}),i.closed||(n.src=t)}catch(u){l(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){l(u)}},e.onerror=()=>l(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class ot extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function it(t,e){if(!t)throw new ot(e);return t}function at(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function st(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function lt(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function ct(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ut(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const pt={"&":"&","<":"<",">":">","'":"'",'"':"""},ft={"&":"&","<":"<",">":">","'":"'",""":'"'},ht=/(&|<|>|'|")/g;function mt(t){return t.replace(/[&<>'"]/g,t=>pt[t]||t)}const vt=Object.defineProperty,{hasOwnProperty:gt}=Object.prototype;function yt(t,e){return gt.call(t,e)}function bt(t,e){return Object.getOwnPropertyDescriptor(t,e)}function wt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?wt(o,i):i,vt(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function xt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function kt(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function $t(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const Et=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:ot,addClass:j,append:X,assToVtt:$t,capitalize:dt,clamp:ct,createElement:J,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:vt,download:lt,errorHandle:it,escape:mt,get:bt,getComposedPath:W,getExt:st,getIcon:tt,getRect:Y,getSafeAreaInsets:B,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:yt,hasClass:U,includeFromEvent:F,inverseClass:K,isBrowser:$,isIOS:w,isIOS13:x,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:k,isSafari:b,loadImg:function(t,e){return nt(t,e,void 0)},mergeDeep:wt,query:H,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:q,replaceElement:Z,secondToTime:ut,setStyle:et,setStyleText:v,setStyles:rt,siblings:G,silencePromise:at,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:xt,supportsFlex:V,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Q,unescape:function(t){return t.replace(ht,t=>ft[t]||t)},userAgent:y,vttToBlob:kt},Symbol.toStringTag,{value:"Module"}));function At(){}function Ct(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||(null==s?void 0:s.aborted))return At;let l=At;function c(e){a&&l(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,c,o),l=t.add(()=>{try{e.removeEventListener(r,c,i)}finally{null==s||s.removeEventListener("abort",l)}}),null==s||s.addEventListener("abort",l,{once:!0}),l}function St(t,e,r){if(t.closed)return At;let n=!0,o=At;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function Tt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=At;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const Lt=new WeakSet;function Pt(t){Lt.add(t),t.preventDefault()}function Mt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function zt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;Ct(t,e,"keydown",t=>{const e=t;a(e)&&Mt(e)&&!e.defaultPrevented&&("Enter"===e.key?(Pt(e),!e.repeat&&i()&&r()):" "===e.key&&(Pt(e),!e.repeat&&i()&&(o=!0)))}),Ct(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&Mt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(Pt(n),r())}),Ct(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function Ot(t,e){return X(t,e)}function Rt(t,e){return e.querySelector(t)}const Dt=new WeakSet;function It(t){const e=t.template.$player;!M(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Dt.has(e)||(Dt.add(e),P(t).add(()=>{Dt.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Nt=new WeakSet,_t="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Wt(t){return[t,...t.querySelectorAll(_t)].find(t=>{var e;if(!t.matches(_t)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t);return"hidden"!==(null==r?void 0:r.visibility)&&"collapse"!==(null==r?void 0:r.visibility)})}function Ft(t,e,r){var n;const o=null==e?void 0:e.ownerDocument,i=null==o?void 0:o.activeElement;if(!["control","contextmenu"].includes(null!=(n=t.name)?n:"")||Nt.has(t)||!e||!o||!i||!e.contains(i))return()=>{};const a=t.art.template.$player,s=Array.from(a.querySelectorAll(`.art-${t.name}`)),l=s.indexOf(e),c=[...s.slice(l+1),...s.slice(0,l).reverse()];return Nt.add(t),()=>{var e;if(Nt.delete(t),M(t.art)||!a.isConnected||o.activeElement!==o.body)return;const n=r?null==(e=t.cache.get(r))?void 0:e.$ref:void 0;for(const t of[...n?[n]:[],...c]){if(!a.contains(t))continue;const e=Wt(t);if(e)return void e.focus({preventScroll:!0})}It(t.art)}}const Vt="array",Yt="boolean",Bt="string",Ht="number",jt="object",qt="function";function Ut(t,e,r){return it(e===Bt||e===Ht||t instanceof Element,`${r.join(".")} require '${Bt}' or 'Element' type`)}const Xt={html:Ut,disable:`?${Yt}`,name:`?${Bt}`,index:`?${Ht}`,style:`?${jt}`,click:`?${qt}`,mounted:`?${qt}`,tooltip:`?${Bt}|${Ht}`,width:`?${Ht}`,selector:`?${Vt}`,onSelect:`?${qt}`,switch:`?${Yt}`,onSwitch:`?${qt}`,range:`?${Vt}`,onRange:`?${qt}`,onChange:`?${qt}`},Gt={id:Bt,container:Ut,url:Bt,poster:Bt,type:Bt,theme:Bt,lang:Bt,volume:Ht,isLive:Yt,muted:Yt,autoplay:Yt,autoSize:Yt,autoMini:Yt,loop:Yt,flip:Yt,playbackRate:Yt,aspectRatio:Yt,screenshot:Yt,setting:Yt,hotkey:Yt,pip:Yt,mutex:Yt,backdrop:Yt,fullscreen:Yt,fullscreenWeb:Yt,subtitleOffset:Yt,miniProgressBar:Yt,useSSR:Yt,playsInline:Yt,lock:Yt,gesture:Yt,fastForward:Yt,autoPlayback:Yt,autoOrientation:Yt,airplay:Yt,proxy:`?${qt}`,plugins:[qt],layers:[Xt],contextmenu:[Xt],settings:[Xt],controls:[l(s({},Xt),{position:(t,e,r)=>{const n=["top","left","right"];return it("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}})],quality:[{default:`?${Yt}`,html:Bt,url:Bt}],highlight:[{time:Ht,text:Bt}],thumbnails:{url:Bt,number:Ht,column:Ht,width:Ht,height:Ht,scale:Ht},subtitle:{url:Bt,name:Bt,type:Bt,style:jt,escape:Yt,encoding:Bt,onVttLoad:qt},moreVideoAttr:jt,i18n:jt,icons:jt,cssVar:jt,customType:jt},Kt=new WeakSet;class Zt{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return U(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?j(e,r):q(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){var e;if(M(this.art))return;const r="function"===typeof t?t(this.art):t;if(M(this.art))return;if(r.html=r.html||"",h(r,Xt),!this.$parent||!this.name||r.disable)return;const n=r.name||`${this.name}${this.id}`,o=this.cache;it(!o.has(n),`Can't add an existing [${n}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=R(this.art,i),s=[],l=Object.getOwnPropertyDescriptor(this,n);let c=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){j(t,`art-${r}`),j(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):X(e,t),i.html&&X(t,i.html),i.style&&rt(t,i.style),i.tooltip&&Q(t,i.tooltip)}(i,this.$parent,this.name,n,this.id,r),a.closed)return;if(r.click){("control"===this.name&&!r.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&zt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),r.click.call(this.art,this,t))});s.push(t)}if(r.selector&&["left","right"].includes(r.position)&&this.selector(r,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,n,i),c=!0,o.set(n,{$ref:i,events:s,option:r}),r.mounted&&r.mounted.call(this.art,i),i}catch(d){try{I(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw(null==(e=o.get(n))?void 0:e.$ref)===i&&o.delete(n),c&&this[n]===i&&(l?Object.defineProperty(this,n,l):delete this[n]),i.remove(),d}}remove(t){it(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Kt.has(e))return;const r=Ft(this,e.$ref);Kt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{I(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Kt.delete(e),r()}}update(t){var e;const r=Ft(this,null==(e=this.cache.get(t.name))?void 0:e.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{r()}}}function Jt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Qt(t,e){var r,n;const o=D(t);if(!o.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const i of t.querySelectorAll("[data-value]"))zt(o,i),i.setAttribute("aria-label",`${e}: ${null!=(n=null==(r=i.textContent)?void 0:r.trim())?n:""}`);Jt(t)}}const te=new WeakMap;function ee(t,e){e?te.set(t,e):te.delete(t)}function re(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=te.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function ne(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function oe(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}class ie extends Zt{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,R(t,this.$parent),k||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=_(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="1"]',t);n&&K(n,"art-current"),Qt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="default"]',t);n&&K(n,"art-current"),Qt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(dt(t))}`).join(""),i=r.get("Video Flip");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="normal"]',t);n&&K(n,"art-current"),Qt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"flip",index:30})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return l(s({},t),{html:`ArtPlayer ${m}`})}({name:"version",index:50})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let s=0;s{this.show=!0,i.closed||M(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:l}=Y(n),{height:c,width:d}=Y(o);let u=e-s,p=r-l;e+d>s+a&&(u=a-d),r+c>l+i&&(p=i-c),M(t)||rt(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=D(o),a=()=>!i.closed&&!M(r);let s,l=!1,c="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?re(t):n,ee(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&oe(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||l&&e===n.ownerDocument.body,d=s;s=void 0,l=!1,c="",ee(o),i&&(d&&n.contains(d)&&oe(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&It(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),ee(o)}),Ct(i,o,"focusin",()=>{l=!0});let m=!1;return Ct(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,St(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),Ct(i,n,"keydown",n=>{var i;const s=n;if(!a()||!Mt(s)||s.defaultPrevented)return;if(("ContextMenu"===s.key||"F10"===s.key&&s.shiftKey)&&r.constructor.CONTEXTMENU&&!ne(s.target)){Pt(s),u();const r=s.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&(null==(i=p()[0])||i.focus({preventScroll:!0})))}if(!t.show||!o.contains(s.target))return;if("Escape"===s.key)return Pt(s),void(t.show=!1);if("Tab"===s.key)return void(t.show=!1);if(ne(s.target))return;const l=p(),f=l.indexOf(s.target);let h;if("ArrowDown"===s.key||"ArrowRight"===s.key)h=l[(f+1)%l.length];else if("ArrowUp"===s.key||"ArrowLeft"===s.key)h=l[(f+l.length-1)%l.length];else if("Home"===s.key)h=l[0];else if("End"===s.key)h=l[l.length-1];else{if(1!==s.key.length||" "===s.key)return;{const t=s.key.toLowerCase();c=Date.now()-d>700?t:c+t,d=Date.now();const e=[...c].every(e=>e===t)?t:c;h=[...l.slice(f+1),...l.slice(0,f+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}Pt(s),null==h||h.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||ne(t.target))&&(u(),!0)}}(this,a);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),a(t.clientX,t.clientY))}),o(e,"click",t=>{F(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const ae=new WeakMap,se=new WeakMap,le=new WeakMap;function ce(t){return le.get(t)||P(t)}function de(t){const e=ae.get(t),r=le.get(t);return()=>ae.get(t)===e&&(!e||e.active())&&le.get(t)===r&&(!r||!r.closed)}function ue(t){const e=le.get(t),r=P(t).child(),n=r.child();le.set(t,r),r.add(()=>{le.get(t)===r&&le.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!M(t)&&!n.closed&&ae.get(t)===o};return ae.set(t,o),n.add(()=>{ae.get(t)===o&&ae.delete(t),o.onAssigned=void 0,o.onError=void 0}),null==e||e.dispose(),o}function pe(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&(null==e||e())}function fe(t,e,r){se.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{se.get(t)===e&&(se.delete(t),pe(e))}}function he(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function me(t,e){const{$progress:r}=t.template,{left:n}=Y(r),o=ct((k?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:ut(i),width:o,percentage:ct(o/r.clientWidth,0,1)}}function ve(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=me(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ge=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function ye(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),l=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),Ct(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!Mt(r)||r.defaultPrevented)return;const i=ge.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;Pt(r);const c=n();if(!a(c))return void l();const d="Home"===r.key?c.min:"End"===r.key?c.max:s(c.value,c)+i*c.step;o(s(d,c)),l()}),l()),l}const be=new WeakMap;function we(t){return be.get(t)||0}function xe(t,e,r){let n,o=!1,i=!1,a=!1,s=we(t);const l=()=>a||we(t)!==s,c=()=>{var e,r;return!!(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)};return{restore(i=()=>{t.currentTime=e}){if(!r()||l())return;const d=we(t);i(),s=we(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!l()&&(o=c()))},manual(){a=!0},ready(){if(!r()||c())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!l()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!c()}}}function ke(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=D(e),{on:a}=_(t,e);let s=()=>{};const l=Rt(".art-progress-hover",e),c=Rt(".art-progress-loaded",e),d=Rt(".art-progress-played",e),u=Rt(".art-progress-highlight",e),p=Rt(".art-progress-indicator",e),f=Rt(".art-progress-tip",e);function h(r,n){const{width:o,time:i}=n||me(t,r);f.textContent=i||"00:00";const a=f.clientWidth;o<=a/2?et(f,"left",0):o>e.clientWidth-a/2?et(f,"left",e.clientWidth-a+"px"):et(f,"left",o-a/2+"px")}r.indicator?X(p,r.indicator):et(p,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const m="played"===r&&a&&k;if("loaded"===r&&et(c,"width",100*n+"%"),"hover"===r&&(et(l,"width",100*n+"%"),F(a,u)?function(r){const{width:n}=me(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;f.textContent=null!=o?o:"";const i=f.clientWidth;n<=i/2?et(f,"left",0):n>e.clientWidth-i/2?et(f,"left",e.clientWidth-i+"px"):et(f,"left",n-i/2+"px")}(a):h(a),0===n?q(o,"art-progress-hover"):j(o,"art-progress-hover")),"played"===r&&(et(d,"width",100*n+"%"),et(p,"left",100*n+"%")),m){j(o,"art-progress-hover");h(a,{width:e.clientWidth*n,time:ut(n*t.duration)}),s(),s=St(i,()=>{q(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){u.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function $e(t){return e=>l(s({},t),{html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ke(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=_(t,e),a=D(e);let s=0;const l=()=>{const e=de(t);return()=>!a.closed&&!M(t)&&e()},c=()=>{const t=++s,e=l();return()=>t===s&&e()};if(!k){let e;i(r,"click",e=>{e.target!==n&&ve(t,e,c())}),i(r,"mousemove",e=>{const r=l(),{percentage:n}=me(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?c():void 0}),o("document:mousemove",r=>{const n=e;if(null==n?void 0:n()){const{second:o,percentage:i}=me(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=D(e),{on:n}=_(t,e);let o,i=0;const a=ye(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${ut(e)} / ${ut(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;null==o||o.dispose();const s=r.child();o=s;const l=ce(t).add(()=>{s.dispose()});s.add(()=>{l()}),s.add(()=>{o===s&&(o=void 0)});const c=de(t),d=()=>n===i&&!s.closed&&!M(t)&&c(),u=xe(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function Ee(t){const{option:e}=t.art;e.isLive||t.add($e({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.play),s=Ot(t,o.pause);function l(){t.setAttribute("aria-label",i.get("Play")),et(a,"display","flex"),et(s,"display","none")}function c(){t.setAttribute("aria-label",i.get("Pause")),et(a,"display","none"),et(s,"display","flex")}zt(D(t),t,()=>(e.playing?s:a).click()),Q(a,i.get("Play")),Q(s,i.get("Pause")),n(a,"click",()=>{at(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?c():l(),r("video:playing",()=>{c()}),r("video:pause",()=>{l()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.volume),s=Ot(t,o.volumeClose);for(const e of[a,s])zt(D(t),e),e.setAttribute("aria-label",i.get("Mute"));const l=Ot(t,'
'),c=Ot(l,'
'),d=Ot(c,'
'),u=Ot(c,'
'),p=Ot(u,'
'),f=Ot(p,'
'),h=Ot(u,'
'),m=D(t);let v=0;const g=ye(m,u,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||m.closed||M(e)||(e.volume=t/100)},"vertical");function y(t){const{top:e,height:r}=Y(u);return 1-(t.clientY-e)/r}function b(){g();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)et(a,"display","none"),et(s,"display","flex"),et(h,"top","100%"),et(f,"top","100%"),d.textContent="0";else{const t=100*e.volume;et(a,"display","flex"),et(s,"display","none"),et(h,"top",100-t+"%"),et(f,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(b(),r("video:volumechange",b),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),k)et(l,"display","none");else{let t=!1;n(u,"mousedown",r=>{t=0===r.button,e.volume=y(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=y(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>l(s({},t),{style:k?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=_(e,t);function n(){const r=`${ut(e.currentTime)} / ${ut(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!P(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!k&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.screenshot),r(t,"click",()=>{at(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;Ot(t,o.setting),zt(D(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Q(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t),Ot(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Q(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenWebOn),s=Ot(t,o.fullscreenWebOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Q(t,i.get("Exit Web Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Web Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenOn),s=Ot(t,o.fullscreenOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Q(t,i.get("Exit Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rSe.get(t).option.selector}),vt(t,"$control_item",{get:()=>Se.get(t).item}),vt(t,"$control_value",{get:()=>Se.get(t).value})),Se.set(t,e)}function Le(t,e){t.innerHTML=e}function Pe(t,e,r,n,o){const{proxy:i}=t.events,a=D(n),s=r.selector;j(n,"art-control-selector");const l=document.createElement("div");j(l,"art-selector-value"),X(l,r.html),n.textContent="",X(n,l);const d=Ot(n,'
');for(let c=0;cc(null,null,function*(){var o,i;if(a.closed)return;const s=W(n),c=r.selector.find(t=>s.includes(t.$control_item));if(!c)return;const d=++u,p=()=>!a.closed&&d===u,f=a.add(function(t,e){return Ae.set(t,e),()=>{Ae.get(t)===e&&Ae.delete(t)}}(n,p));try{if(e(c),a.closed)return;if(r.onSelect){const e=yield r.onSelect.call(t,c,c.$control_item,n);if(p()){const t=l.contains(l.ownerDocument.activeElement);Le(l,e),null==(i=null==(o=Se.get(c))?void 0:o.refresh)||i.call(o,t)}}}catch(h){console.warn("ArtPlayer selector failed:",h)}finally{f()}}));o.push(p);const f=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(Ce));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,l=!1,c=!1,d="",u=0;const p=()=>i.length>0&&(l||s&&!c),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(Ce)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{l=t,c=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},v=e=>{e&&!t.closed&&((e.querySelector(Ce)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},g=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",v(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};zt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&g()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(Ce)||(b.tabIndex=-1,zt(t,b,()=>{b.click(),y()}))}return Ct(t,r,"keydown",t=>{const e=t;!Mt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(Pt(e),g("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(Pt(e),y()))}),Ct(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&g()}),Ct(t,n,"keydown",t=>{var e;const r=t;if(!Mt(r)||r.defaultPrevented)return;if("Escape"===r.key)return Pt(r),void y();const n=i.indexOf(r.target);if(n<0)return;let o;switch(1!==r.key.length&&(d=""),r.key){case"ArrowDown":o=Math.min(n+1,i.length-1);break;case"ArrowUp":o=Math.max(n-1,0);break;case"Home":o=0;break;case"End":o=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void Pt(r);default:{if(1!==r.key.length||" "===r.key)return;const t=Date.now();d=t-u<500?d+r.key.toLocaleLowerCase():r.key.toLocaleLowerCase(),u=t;const a=[...d].every(t=>t===d[0])?d[0]:d;for(let r=1;r<=i.length;r++){const t=(n+r)%i.length;if(null==(e=i[t].textContent)?void 0:e.trim().toLocaleLowerCase().startsWith(a)){o=t;break}}}}Pt(r),void 0!==o&&v(i[o])}),Ct(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),Ct(t,e,"mouseenter",()=>{s=!0,m(l)}),Ct(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),Ct(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,l,d,String(r.tooltip||r.name||l.textContent||t.i18n.get("Open")));for(const c of s)Se.get(c).refresh=f}class Me extends Zt{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},l=()=>{i=!0,s()},c=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(null==o||o.dispose(),n=e.ownerDocument,o=t.child(),Ct(o,n,"keydown",l,{capture:!0}),Ct(o,n,"mousedown",c,{capture:!0}),Ct(o,n,"touchstart",c,{capture:!0,passive:!0}))};return d(),Ct(t,e,"keydown",l,{capture:!0}),Ct(t,e,"mousedown",c,{capture:!0}),Ct(t,e,"touchstart",c,{capture:!0,passive:!0}),Ct(t,e,"focusin",()=>{d(),s()}),Ct(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}(R(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=_(t,n);a(r,"focusin",e=>{var r;t.isFocus=!0,t.isInput="INPUT"===(null==(r=e.target)?void 0:r.tagName)}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{k||(this.show=!0)}),i("click",()=>{k?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=F(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(q(r,"art-hide-cursor"),j(r,"art-hover"),this.timer=Date.now()):(j(r,"art-hide-cursor"),q(r,"art-hover"))}),this.init(),P(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=D(e),{on:i}=_(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);return t.observe(r),void o.add(()=>{t.disconnect()})}if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){Ee(this)}add(t){if(M(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:it(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){var e,r;if(!t)return;const n=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);Le(t.$control_value,t.html);for(let o=0;othis.check(t),t,e,r)}}function ze(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{var n;if(M(t))return;const o=F(r,e);t.isInput=o&&"INPUT"===(null==(n=r.target)?void 0:n.tagName),t.isFocus=o,t.emit(o?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),P(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(M(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:l}=r,c=o.filter(t=>n-t<=a);switch(c.length){case 1:if(t.emit("click",e),M(t))return;(!k||!t.isLock&&i)&&at(t.toggle()),o=c;break;case 2:if(t.emit("dblclick",e),M(t))return;k?!t.isLock&&s&&at(t.toggle()):l&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function Oe(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!M(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),P(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(M(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:de(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ve(t,i,()=>n(s))}catch(l){throw e===s&&r(),l}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,l=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,l].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const c=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===c||2===c:3===c||4===c))return;const d=ct((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=ct(i.time+t.duration*d*l,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",ct(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${ut(u)} / ${ut(t.duration)}`))},cancel:r}}const Re=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],De=["resize","scroll","orientationchange"];const Ie=new WeakMap;function Ne(t){const e=Ie.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function _e(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=_e(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ne(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(null==o?void 0:o.capture),once:Boolean(null==o?void 0:o.once),passive:null==o?void 0:o.passive,signal:null==o?void 0:o.signal},l="boolean"===typeof s?s:s.capture,c="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||(null==c?void 0:c.aborted))return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,l),null==c||c.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):(null==c?void 0:c.aborted)?p():null==c||c.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function We(t){return(e,r)=>{if(M(t))return;const n=(...e)=>{if(!M(t))return r(...e)};t.on(e,n),P(t).add(()=>{t.off(e,n)})}}function Fe(t){if(!t.constructor.USE_RAF)return;const e=P(t);let r=()=>{};const n=()=>{M(t)||(t.playing&&t.emit("raf"),M(t)||(r=function(t,e){if(t.closed)return At;let r=!0,n=At;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),We(t)("destroy",()=>r())}class Ve{constructor(t){this.destroyEvents=new Set,function(t,e){Ie.set(t,{scope:P(e),cleaning:!1})}(this,t),P(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),ze(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{M(t)||(j(r,"art-hover"),t.emit("hover",!0,e))},e=>{M(t)||(q(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{M(t)||t.emit("mousemove",e)})}(t,this),function(t,e){var r,n;const{option:o,constructor:i}=t,a=We(t);a("resize",()=>{const{aspectRatio:e,notice:r}=t;"standard"===t.state&&o.autoSize&&t.autoSize(),M(t)||(t.aspectRatio=e,M(t)||(r.show=""))});const s=P(t);let l=()=>{};const c=()=>{M(t)||(l(),l=St(s,()=>t.emit("resize"),i.RESIZE_TIME))};a("window:orientationchange",c),a("window:resize",c);const d=null==(n=null==(r=t.template.$player.ownerDocument.defaultView)?void 0:r.screen)?void 0:n.orientation;"function"===typeof(null==d?void 0:d.addEventListener)&&e.proxy(d,"change",c)}(t,this),function(t,e){if(!k||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=Oe(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=P(t),a=We(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=(null==o?void 0:o.innerHeight)||n.documentElement.clientHeight,a=(null==o?void 0:o.innerWidth)||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,l=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&l}(n,r.SCROLL_GAP)),M(t)||(s=!0,St(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;P(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){var a;if(M(t))return;const s=++n,l={disposers:[]},c=()=>s!==n||M(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,s=i.window||(null==(a=n.ownerDocument)?void 0:a.defaultView)||window,d=(n,o,i)=>{for(const a of o){if(c())return;l.disposers.push(e.proxy(n,a,e=>{r!==l||M(t)||t.emit(`${i}:${a}`,e)}))}};d(o,Re,"document"),d(s,De,"window")}catch(u){throw o(l),u}if(c())return void o(l);const d=r;r=l,o(d)}i(),e.bindGlobalEvents=i}(t,this),Fe(t)}proxy(t,e,r,n={}){return Array.isArray(e),_e(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ne(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Ye(t){if(t&&1===t.nodeType)return t}function Be(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function He(t,e){var r,n,o,i;if(function(t){return Lt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const a=function(t,e){var r;const n=t.target;return 9===(null==n?void 0:n.nodeType)?n:(null==n?void 0:n.ownerDocument)||(null==(r=t.view)?void 0:r.document)||e}(t,e);let s=Ye(a.activeElement);for(;null==(r=null==s?void 0:s.shadowRoot)?void 0:r.activeElement;)s=Ye(s.shadowRoot.activeElement);if(s&&Be(s))return!1;const l=Ye(null==(n=t.composedPath)?void 0:n.call(t)[0])||Ye(t.target),c="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(c||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(c?",a[href]":"");if((null==(o=null==l?void 0:l.closest)?void 0:o.call(l,t))||(null==(i=null==s?void 0:s.closest)?void 0:i.call(s,t)))return!1}return!l||!Be(l)}const je=new WeakMap;class qe{constructor(t){this.art=t,this.keys={},je.set(this,{subscribed:!1}),k||this.init()}init(){const t=this.art;if(M(t))return;const e=je.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{at(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!M(t)){if(t.isFocus&&He(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ue={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ue);class Xe{constructor(t){this.art=t,this.languages={"zh-cn":Ue},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=yt(this.languages,t)&&this.languages[t]||{}}get(t){return yt(this.language,t)&&this.language[t]||t}update(t){this.languages=wt(this.languages,t),this.init()}}const Ge={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class Ke{constructor(t){const e=s(s({},Ge),t.option.icons);for(const r in e)vt(this,r,{get:()=>tt(r,e[r])})}}const Ze=new WeakMap;function Je(t,e,r){const n=()=>!e.closed&&!M(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:l,$video:c}}=t,d=i(l,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!M(t),s=()=>n.classList.contains("art-info-show"),l=t.i18n.get("Close");if(!a())return;const c=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",l),o.setAttribute("role","group"),o.setAttribute("aria-label",c),zt(e,i,()=>i.click(),s),Ct(e,o,"keydown",t=>{const e=t;a()&&s()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),r())});const d=e=>{var r;if(!a())return;const s=n.ownerDocument,l=s.activeElement;if(e)o.contains(l)||(Ze.delete(t),l&&n.contains(l)&&(Ze.set(t,re(l)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Ze.get(t);if(Ze.delete(t),!o.contains(l))return;const i=e&&(null==(r=s.defaultView)?void 0:r.getComputedStyle(e).visibility);(null==e?void 0:e.isConnected)&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):It(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{var t;try{for(const e of u){if(!n())return;const r=Reflect.get(c,null!=(t=e.dataset.video)?t:"undefined");if(!n())return;const o="number"===typeof r?r.toFixed(2):r;if(!n())return;if(e.textContent!==o){const t=null==o?null:`${o}`;if(!n())return;e.textContent=t}}n()&&St(e,f,a.INFO_LOOP_TIME)}catch(r){o(r)}};n()&&f()}catch(i){o(i)}}const Qe=new WeakMap;class tr extends Zt{constructor(t){super(t),this.name="info",Qe.set(this,{revision:0}),k||this.init()}init(){var t;const e=Qe.get(this),r=++e.revision;if(null==(t=e.scope)||t.dispose(),M(this.art)||e.revision!==r)return;const n=P(this.art).child();e.scope=n,n.add(()=>{e.scope===n&&(e.scope=void 0)}),Je(this.art,n,()=>{this.show=!1})}}class er extends Zt{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{et(i,"display","none"),et(s,"display",null),M(t)&&(l=!0)};var d;t.on("destroy",c),(d=t,L(d).finalizers).add(()=>{try{l||c()}finally{t.off("destroy",c)}}),M(t)||n.proxy(e.$state,"click",()=>{M(t)||at(t.play())})}}const or=new WeakMap;function ir(t){const e=or.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class ar{constructor(t){this.art=t,this.timer=null,or.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),P(t).add(()=>{t.off("destroy",e)}),P(t).add(()=>{this.destroy()})}destroy(){ir(this)}set show(t){if(M(this.art))return;const e=or.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){ir(this);const i=e.revision,a=()=>!M(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(j(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const l={};e.pending=l;const c=setTimeout(()=>{if(M(this.art)||e.pending!==l)return;e.pending=void 0;const t=e.revision;o.textContent="",M(this.art)||e.revision!==t||q(n,"art-notice-show")},s);a()?this.timer=c:clearTimeout(c)}else q(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function sr(t,e){return function(t,e){const r=wt(e,t);return r.container=t.container,h(r,Gt)}(t,e)}function lr({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function cr(t,e){if(!lr(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return lr(r)?r:void 0}function dr(t,e,r,n=!1){const o=e=>{M(t)||r(e)};t[n?"once":"on"](e,o),P(t).add(()=>{t.off(e,o)})}function ur(t,e,r){for(const[n,o]of e){if(M(t)||r&&!r())return;t[n].show=o}}function pr(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=ce(t),l=0;return{reset(){l=0,null==a||a.dispose(),q(i,"art-error")},loadStart(){q(i,"art-error")},schedule(d){(d=>c(null,null,function*(){if(M(t))return;const c=ce(t);if(c!==s&&(s=c,l=0),a&&!a.closed)return;const u=c.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!M(t)&&!u.closed&&c===ce(t),f=l{console.warn("ArtPlayer reconnect failed:",t)})}}}const fr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],hr=(()=>{if("undefined"===typeof document)return!1;const t=fr[0],e={};for(const r of fr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),mr={change:hr.fullscreenchange,error:hr.fullscreenerror},vr={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{vr.off("change",o),r()};vr.on("change",o);const i=t[hr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!vr.isFullscreen)return void t();const r=()=>{vr.off("change",r),t()};vr.on("change",r);const n=document[hr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>vr.isFullscreen?vr.exit():vr.request(t,e),onchange(t){vr.on("change",t)},onerror(t){vr.on("error",t)},on(t,e){const r=mr[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=mr[t];r&&document.removeEventListener(r,e,!1)},raw:hr};function gr(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(vr,{isFullscreen:{get:()=>Boolean(document[hr.fullscreenElement])},element:{enumerable:!0,get:()=>document[hr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[hr.fullscreenEnabled])}});const yr=new WeakMap;function br(t){try{Promise.resolve(t()).catch(()=>{})}catch(e){}}function wr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=yr.get(t);if(!n){n=new WeakMap,yr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),br(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),br(i))}function xr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,l=!1,c=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!l){l=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{l||(l=!0,c=!0,a(),d&&!u&&r&&wr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(Ct(i,t.document,t.changeEvent,m),Ct(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){var e;null==(e=yr.get(t.document))||e.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,c&&!u&&r&&wr(t),u?Promise.resolve(e).then(()=>{c?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(v){h(!0,v)}return{promise:f,cancel:()=>i.dispose()}}function kr(t,e){const r=P(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),l=0,c=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch(t){}}return r.add(()=>{l+=1,c=!1,n.classList.remove("art-fullscreen"),f()}),Ct(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){var e,r;return null!=(r=null==(e=yr.get(t.document))?void 0:e.has(t.target))&&r}(e))return;if(r&&u)return void f();if(r===s||M(t))return;s=r;const o=l,a=()=>M(t)||i()!==r||o!==l&&c!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),Ct(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!M(t)&&t.emit("fullscreenError",r)}),{get:()=>!M(t)&&i(),set(n){if(M(t))return Promise.resolve();const o=++l;if(c=Boolean(n),c?u=!1:d&&(u=!0),null==a||a.cancel(),a=void 0,d=!1,!c&&!i())return Promise.resolve();p=!0,d=c;const s=xr(e,r,c,()=>{!M(t)&&c||f()},()=>!i());p=!1,l===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw M(t)||l!==o||(t.notice.show=e),e}).finally(()=>{l===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const $r=new WeakSet;function Er(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function Ar(t){$r.delete(t),t.removeEventListener("webkitbeginfullscreen",Cr),t.removeEventListener("webkitpresentationmodechanged",Cr)}function Cr(t){var e;if($r.has(this)&&Er(this,"webkitbeginfullscreen"===t.type)){Ar(this);try{null==(e=this.webkitExitFullscreen)||e.call(this)}catch(r){}}}function Sr(t){$r.add(t),t.addEventListener("webkitbeginfullscreen",Cr),t.addEventListener("webkitpresentationmodechanged",Cr)}function Tr(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=Er(e),i=o,a=!1,s=0;const l=()=>Er(e,n);function c(r){if(M(t)||(c=e,$r.has(c)))return;var c;"boolean"===typeof r&&(n=r);const d=l();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>M(t)||l()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{var t;s++,i=!1,a&&Sr(e),l()&&(null==(t=e.webkitExitFullscreen)||t.call(e))}),Ct(r,e,"webkitbeginfullscreen",()=>c(!0)),Ct(r,e,"webkitendfullscreen",()=>c(!1)),Ct(r,e,"webkitpresentationmodechanged",()=>c());const d=()=>c();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!M(t)&&l(),set(r){if(M(t))return;const n=++s;if(i=Boolean(r),r){if(Ar(e),t.state="fullscreen",M(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,Sr(e)),l()&&e.webkitExitFullscreen()}}}function Lr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function Pr({node:t,parent:e,next:r}){var n;if(!e)return void(null==(n=t.parentNode)||n.removeChild(t));const o=(null==r?void 0:r.parentNode)===e?r:null;t.parentNode===e&&t.nextSibling===o||e.insertBefore(t,o)}function Mr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function zr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function Or(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const l=t.icons.play,c=t.icons.pause;if(o.closed)return;i.append(l,c),s.append(e,i),zt(o,e,()=>e.click(),r),zt(o,i,()=>(t.playing?c:l).click(),r);const d=t.i18n.get("Close");if(o.closed||M(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||M(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),Ct(o,s,"keydown",t=>{const e=t;r()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),n())}),Ct(o,e,"click",n),Ct(o,l,"click",()=>{at(t.play())}),Ct(o,c,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||M(t)||(i.setAttribute("aria-label",e),l.style.display=t.playing?"none":"flex",c.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};Ct(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const l=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},c=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=Mr(i.left,i.top,zr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",l),r.add(()=>{t.off("document:mousemove",l)}),t.on("document:mouseup",c),r.add(()=>{t.off("document:mouseup",c)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(l){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,l}}function Rr(t){const{$player:e,$video:r}=t.template,n=P(t).child();let o,i,a=0,c=!1,d=!1;const u=()=>!M(t)&&e.classList.contains("art-mini"),p=function(t){const e=t.template.$player;let r;return{entering(){var n;const o=e.ownerDocument,i=o.activeElement,a=i&&e.contains(i);(null==(n=t.template.$mini)?void 0:n.contains(i))||(r=a?re(i):void 0);const s=a&&e.classList.contains("art-keyboard-focus");return e=>{!s||M(t)||o.activeElement!==i&&o.activeElement!==o.body||null==e||e()}},leaving(n){const o=e.ownerDocument,i=null==n?void 0:n.contains(o.activeElement);return()=>{var e;if(!i||M(t)||o.activeElement!==o.body&&!(null==n?void 0:n.contains(o.activeElement)))return;const a=r&&(null==(e=o.defaultView)?void 0:e.getComputedStyle(r).visibility);(null==r?void 0:r.isConnected)&&r.getClientRects().length&&"hidden"!==a&&"collapse"!==a&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):It(t)}}}}(t);function f(){if(i){const e=i,r=a;i=void 0;try{Pr(e)}catch(t){throw r!==a||i||(i=e),t}}}function h(){if(M(t))return;const r=++a;d=!1;const n=p.leaving(t.template.$mini);f(),M(t)||r!==a||(null==o||o.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),M(t)||r!==a||t.emit("mini",!1)))}function m(){if(M(t))return;const v=++a;if(c)return void(d=!0);const g=p.entering();if(t.state="mini",!M(t)&&v===a){null!=i||(i=Lr(r)),e.classList.add("art-mini");try{if(!o){c=!0;try{o=Or(t,n,u,h)}finally{c=!1}}if(d)return d=!1,void m();if(!o||M(t))return;if(v!==a)return void(u()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),M(t)||v!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:l(s({},Mr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r)),{reset:!0})}(t.storage.get("left"),e,zr(o.element));if(M(t)||v!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),M(t)||v!==a)return;t.storage.set("left",i.left)}M(t)||v!==a||g(o.focus),M(t)||v!==a||t.emit("mini",!0)}catch(y){const r=d;throw d=!1,M(t)||v!==a&&!r||(f(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),y}}}return n.add(()=>{a++;try{f()}finally{null==o||o.cancelDrag(),e.classList.remove("art-mini")}}),{get:u,set(t){t?m():h()}}}const Dr=new WeakSet,Ir=t=>"picture-in-picture"===t.webkitPresentationMode;function Nr(t){Dr.delete(t),t.removeEventListener("webkitpresentationmodechanged",_r),t.removeEventListener("enterpictureinpicture",_r)}function _r(){var t;if(Dr.has(this)&&Ir(this)){Nr(this);try{null==(t=this.webkitSetPresentationMode)||t.call(this,"inline")}catch(e){}}}function Wr(t){Dr.add(t),t.addEventListener("webkitpresentationmodechanged",_r),t.addEventListener("enterpictureinpicture",_r)}function Fr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Vr(t,e,r){return new Promise((n,o)=>{if(M(t)||e===t.url)return void n();const i=ue(t),a=i.scope.child();let s=!1;const l=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{l()});const d=()=>!s&&i.active(),u=t=>l(!0,t);i.onError=u;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!d())return;const p=a.child();let f=!1,h=!1,m=!1;const v=xe(t,r,d),g=()=>c(null,null,function*(){if(t.aspectRatio=o,d()){if(n)try{yield t.play()}catch(e){}d()&&(t.notice.show="",l())}}),y=()=>{var e,r;if(d()&&!h&&f)try{if(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)return;if(!d())return;if(m||(m=!0,t.playbackRate=s),!v.ready()||!d()||h)return;h=!0,p.dispose(),g().catch(u)}catch(n){u(n)}},b={"video:error":u,"video:loadedmetadata":()=>{if(d())try{v.restore()}catch(t){u(t)}},"video:canplay":()=>{f=!0,y()},"video:seeked":y,seek:v.manual},w=a.child(),x=[],k=Object.keys(b);for(const e of k)Fr(w,t,e,t=>{i.acceptingEvents&&x.push([e,t])},!1);if(fe(t,i,e),!d())return;if(t.notice.show="",!d())return;const $=()=>{if(w.dispose(),!e)return void l();const r={};for(const e of k)r[e]=Fr(p,t,e,b[e],"video:seeked"!==e);for(const[t,e]of x){if(!d()||p.closed)break;r[t](e)}x.length=0};i.assigned?$():i.onAssigned=$}catch(p){u(p)}})}function Yr(t){const{option:e,template:{$video:r}}=t;vt(t,"url",{get:()=>r.src,set(n){return c(this,null,function*(){if(M(t))return;const o=function(t){const e=se.get(t);return se.delete(t),e||ue(t)}(t);o.acceptingEvents=!1;try{if(!n)return void((yield Tt(o.scope))&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||st(n),s=e.customType[a];if(a&&s){if(!(yield Tt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const l=o.scope.child();let c=!1,d=!1;Fr(l,t,"video:canplay",()=>{c=!d}),Fr(l,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>he(o,t))}else{if(!o.active())return;r.src=n}}finally{l.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};c?e():d||Fr(o.scope,t,"video:canplay",e)}}catch(i){he(o,i)}finally{pe(o)}})}})}const Br=[function(t){const{template:{$video:e}}=t;vt(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;vt(t,"play",{value(){return c(this,null,function*(){const a=de(t),s=yield i.play();if(!a())return s;const l=e.get("Play");if(!a())return s;if(r.show=l,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;vt(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${ut(t.currentTime)} / ${ut(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;vt(t,"forward",{set(e){r.seek=t.currentTime+e}}),vt(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;vt(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=ct(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),vt(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;vt(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){be.set(t,we(t)+1)}(t),e.currentTime=ct(n,0,t.duration))}})},function(t){vt(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Vr(t,e,0);vt(t,"switchQuality",{value:e=>Vr(t,e,t.currentTime)}),vt(t,"switchUrl",{value:e}),vt(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;vt(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;vt(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!M(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=cr({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(M(t))return;"width"===(null==r?void 0:r.axis)?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,M(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=de(t);return new Promise((a,s)=>{const l=r=>{try{!M(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,l):a(n.toDataURL("image/png"))}catch(c){l(c)}})}vt(t,"getDataURL",{value:()=>o(!1)}),vt(t,"getBlobUrl",{value:()=>o(!0)}),vt(t,"screenshot",{value:e=>c(null,null,function*(){const n=de(t),o=yield t.getDataURL();if(!M(t)&&n()){const i=e||`artplayer_${ut(r.currentTime)}`;!M(t)&&n()&<(o,`${i}.png`),!M(t)&&n()&&t.emit("screenshot",o)}return o})})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(M(t))return;const i=function(t){const e=vr.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>gr(t,e.requestFullscreen,void 0),exit:()=>gr(r,e.exitFullscreen)}}(o);i?vt(t,"fullscreen",kr(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?vt(t,"fullscreen",Tr(t)):vt(t,"fullscreen",{get:()=>!1,set(){M(t)||(r.show=e.get("Fullscreen Not Supported"))}}),vt(t,"fullscreen",bt(t,"fullscreen"))};t.once("video:loadedmetadata",i),P(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(Pr(t.placement),r()))}return P(t).add(()=>{var t;n+=1;const i=r;if(r=void 0,i)try{o(i,()=>!0)}catch(a){try{e.parentNode!==i.placement.parent&&(null==(t=e.parentNode)||t.removeChild(e))}catch(s){throw new A([a,s])}throw a}}),i=>{if(M(t))return;const a=++n,s=()=>a===n&&!M(t),l=function(t){var e;const r=null==(e=t.ownerDocument)?void 0:e.activeElement,n=r&&t.contains(r);return()=>{n&&r.isConnected&&t.contains(r)&&r.ownerDocument.activeElement===r.ownerDocument.body&&r.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:Lr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(c){throw s()&&o(n,s)&&(r=void 0,l()),c}if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);vt(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?vt(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=P(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,l=!1,c=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch(t){}}function u(e,r,n){e.then(()=>{!r||!M(t)&&a||d()},e=>{M(t)||c!==n||(t.notice.show=e)}).finally(()=>{c===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{c++,a=!1,d()}),Ct(n,e,"enterpictureinpicture",()=>{if(l)return void d();if(!o()||i)return;const e=c;t.state="pip",!M(t)&&e===c&&o()&&(i=!0,t.emit("pip",!0))}),Ct(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!M(t)&&o()?e:null,set(n){if(M(t))return;const i=++c;if(a=Boolean(n),a?l=!1:s&&(l=!0),s=!1,a){if(t.state="pip",M(t)||c!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw c===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?vt(t,"pip",function(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(M(t)||Dr.has(e))return;const s=Ir(e);if(s&&(o=!1),s===n&&!r)return;const l=i;s&&(t.state="pip"),M(t)||i!==l||Ir(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Wr(e),Ir(e)&&e.webkitSetPresentationMode("inline")});for(const l of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])Ct(r,e,l,()=>s());return{get:()=>!M(t)&&Ir(e),set(r){var n;if(M(t))return;const l=++i,c=a;if(r){if(!1===(null==(n=e.webkitSupportsPresentationMode)?void 0:n.call(e,"picture-in-picture")))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Nr(e),t.state="pip",M(t)||i!==l)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(d){throw l===i&&(o=!1),d}}else o&&(o=!1,Wr(e)),Ir(e)&&e.webkitSetPresentationMode("inline");M(t)||l!==i||c!==a||Ir(e)!==Boolean(r)||s(!0)}}}(t)):vt(t,"pip",{get:()=>!1,set(){M(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;vt(t,"loaded",{get:()=>r.loadedTime/e.duration}),vt(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){vt(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;vt(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;vt(t,"autoSize",{value(){if(M(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!lr(o))return;const i=Y(e),a=cr(i,o.width/o.height);a&&!M(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;vt(t,"rect",{get:()=>Y(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}vt(t,"x",{get:()=>e.left+window.pageXOffset}),vt(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;vt(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){M(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(dt(o))}`,M(t)||t.emit("flip",o))}})},function(t){vt(t,"mini",Rr(t))},function(t){const{template:{$poster:e}}=t;vt(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch(t){return""}},set(t){et(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;vt(t,"autoHeight",{value(){if(M(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!lr(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||M(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;vt(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){vt(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){vt(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];vt(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;n{if(!M(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,M(t)||vt(t,"airplay",{value(){if(!M(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(M(t))return;Reflect.apply(e,o,[]),M(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");M(t)||(r.show=n)}}}))},function(t){vt(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(null==i?void 0:i.html)||"",selector:e,onSelect(e,r,i){return c(this,null,function*(){const r=function(t){return t&&Ae.get(t)||(()=>!0)}(i);if(yield t.switchQuality(e.url),!M(t)&&r()){const i=`${o.get("Switch Video")}: ${e.html}`;!M(t)&&r()&&(n.show=i)}return e.html})}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,l=P(t).child(),c=!1;function d(){const e=l;l=P(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function u(){const i=a,c=l;if(!i||!o)return;const d=()=>{var e;return!M(t)&&!c.closed&&l===c&&a===i&&i.sourceActive()&&(null==(e=t.controls)?void 0:e.thumbnails)===i.element};if(!d())return;const u=r.clientWidth*i.percentage;if(!(u>0&&ud-f/2?d-f+"px":u-f/2+"px"}}(e.thumbnails,{imageWidth:o.naturalWidth,videoWidth:n.videoWidth,videoHeight:n.videoHeight,progressWidth:r.clientWidth,position:u}));for(const[t,e]of Object.entries(p)){if(!d())return;et(i.element,t,e)}}We(t)("setBar",(r,n,s)=>{var p;const f=null==(p=t.controls)?void 0:p.thumbnails,{url:h,scale:m}=e.thumbnails;if(!M(t)&&f&&h&&("hover"===r||"played"===r&&s&&k)){if(i!==f){const t=D(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,d())})}if(a={percentage:n,element:f,sourceActive:de(t)},o)u();else if(!c){const t=l;c=!0,function(t,e,r){return nt(t,e,r)}(h,m,t).then(e=>{l!==t||t.closed||(c=!1,o=e,u())}).catch(e=>{l!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),vt(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{M(t)||!e.url||t.option.isLive||M(t)||(t.option.thumbnails=e,d())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{M(t)||t.emit(`video:${e.type}`,e)})}(t);const e=pr(t);!function(t,e){dr(t,"video:canplay",()=>{e.reset(),ur(t,[["loading",!1]])}),dr(t,"video:canplay",()=>{ur(t,[["loading",!1],["controls",!0],["mask",!0]]),M(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;dr(t,"video:ended",()=>{if(e.loop){const e=de(t);if(t.seek=0,M(t)||!e())return;at(t.play()),e()&&ur(t,[["controls",!1],["mask",!1]],e)}else ur(t,[["controls",!0],["mask",!0]])})}(t),dr(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;dr(t,"video:loadedmetadata",()=>{t.emit("resize"),k&&ur(t,[["loading",!1],["controls",!0],["mask",!0]])}),dr(t,"video:loadstart",()=>{e.loadStart(),ur(t,[["loading",!0],["mask",!1],["controls",!0]])}),dr(t,"video:pause",()=>{ur(t,[["controls",!0],["mask",!0]])}),dr(t,"video:play",()=>{ur(t,[["mask",!1]]),M(t)||et(r,"display","none")}),dr(t,"video:playing",()=>ur(t,[["mask",!1]])),dr(t,"video:progress",()=>{t.playing&&ur(t,[["loading",!1]])}),dr(t,"video:seeked",()=>ur(t,[["loading",!1],["mask",!0]])),dr(t,"video:seeking",()=>ur(t,[["loading",!0],["mask",!1]])),dr(t,"video:timeupdate",()=>ur(t,[["mask",!1]])),dr(t,"video:waiting",()=>ur(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(M(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(M(t))return;const r=e.moreVideoAttr[s];if(M(t))return;t.attr(s,r)}if(M(t))return;if(e.muted){const r=e.muted;if(M(t))return;t.muted=r}if(M(t))return;if(e.volume){const r=ct(e.volume,0,1);if(M(t))return;n.volume=r}if(M(t))return;const i=r.get("volume");if(M(t))return;if("number"===typeof i&&(n.volume=ct(i,0,1)),M(t))return;if(e.poster){const r=`url(${e.poster})`;if(M(t))return;et(o,"backgroundImage",r)}if(M(t))return;if(e.autoplay){const r=e.autoplay;if(M(t))return;n.autoplay=r}if(M(t))return;if(e.playsInline){if(M(t))return;if(n.playsInline=!0,M(t))return;n["webkit-playsinline"]=!0}if(M(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(M(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(M(t))return;const r=e.cssVar[s];if(M(t))return;t.cssVar(s,r)}if(M(t))return;const a=e.url;M(t)||(t.url=a)}];class Hr{constructor(t){if(!M(t)){Yr(t);for(const e of Br){if(M(t))return;e(t)}}}}const jr=new WeakMap,qr="art-auto-orientation-fullscreen";function Ur(t){if(jr.get(t.orientation)===t)try{t.orientation.unlock()}catch(e){}}const Xr="art-auto-orientation",Gr=["width","height","transform-origin","transform"];function Kr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return lr(t)&&lr(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=P(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(Xr);r.classList.remove(Xr),n&&(t.isRotate=!1,M(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=B();if(M(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;null!=o||(o=Gr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(Xr),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{var l;M(t)||(r?o?s(!1):e()&&(i(),i=St(n,()=>{o||s(!0)},Number(null!=(l=t.constructor.AUTO_ORIENTATION_TIME)?l:0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(qr),t&&(t.cancelled=!0,Ur(t),t.settled&&jr.get(t.orientation)===t&&jr.delete(t.orientation))}return P(t).add(o),i=>{var a,s;if(M(t))return;if(!i)return void o();if(n&&!n.cancelled&&jr.get(n.orientation)===n)return;const l=null==(s=null==(a=r.ownerDocument.defaultView)?void 0:a.screen)?void 0:s.orientation;if("function"!==typeof(null==l?void 0:l.lock)||"function"!==typeof l.unlock||!e())return;const c={orientation:l,cancelled:!1,settled:!1};n=c,jr.set(l,c);const d=()=>!M(t)&&!c.cancelled&&n===c&&jr.get(l)===c,u=e=>{c.settled=!0;const o=d();jr.get(l)===c&&jr.delete(l),n===c&&(n=void 0),o&&(r.classList.remove(qr),t.notice.show=e)};try{const t=l.lock(l.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{c.settled=!0,d()?r.classList.add(qr):(Ur(c),jr.get(l)===c&&jr.delete(l))}).catch(u)}catch(p){u(p)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),P(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Zr(t){return t.get("times")||{}}function Jr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||M(t))return()=>{};const s=Rt(".art-auto-playback-last",a),l=Rt(".art-auto-playback-jump",a),c=Rt(".art-auto-playback-close",a);Ot(c,r.close);const d=D(a);let u,p=0;const f=()=>{const r=++p;if(null==u||u.dispose(),d.closed||M(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!M(t);f.add(()=>{u===f&&(u=void 0,et(a,"display","none"))});const m=ce(t).add(()=>{f.dispose()});f.add(()=>{m()});const v=Zr(n)[t.option.id||t.option.url];if(!h())return;if(et(a,"display","none"),!h()||!v||!(v>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(et(a,"display","flex"),!h())return;const g=`${e.get("Last Seen")} ${ut(v)}`;if(!h())return;if(s.textContent=g,!h())return;const y=e.get("Jump Play");if(!h())return;if(l.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(c,()=>{et(a,"display","none")}),!h())return;if(b(l,()=>{t.seek=v,h()&&(at(t.play()),h()&&(et(i,"display","none"),h()&&et(a,"display","none")))}),!h())return;let w=()=>{},x=!1;const k=()=>{!x&&h()&&(x=!0,w(),St(f,()=>{h()&&et(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",k),w=f.add(()=>{t.off("video:timeupdate",k)}),x&&w()};return()=>{N(t,a,"ready",f),N(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;We(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Zr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;M(t)||(o.length>i&&delete n[o[0]],n[a]=s,M(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Zr(e)},clear:()=>e.del("times"),delete(t){const r=Zr(e);return delete r[t],e.set("times",r),r}}}function Qr(t){let e,r=0;return{start:n=>{const o=++r;if(null==e||e.scope.dispose(),o!==r||M(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:ce(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{(null==e?void 0:e.active)||q(t.template.$player,"art-fast-forward")}}),St(i.scope,()=>{if(e!==i||M(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||M(t))return;t.playbackRate=r,e!==i||i.scope.closed||M(t)||j(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,null==e||e.scope.dispose()}}}function tn(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Qr(t),i=We(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return U(r,"art-fast-forward")}}}function en(t,e,r,n){let o;const i=()=>!r.closed&&!M(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),zt(r,e),Ct(r,e,"keydown",t=>{const r=t;i()&&n()&&Mt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(Pt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function rn(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return U(n,"art-lock")}function i(){M(t)||(j(n,"art-lock"),M(t)||(t.isLock=!0,M(t)||t.emit("lock",!0)))}function a(){M(t)||(q(n,"art-lock"),M(t)||(t.isLock=!1,M(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=D(e);if(n.closed||M(t))return;const i=Ot(e,r.lock);if(n.closed||M(t))return;const a=Ot(e,r.unlock);if(n.closed||M(t))return;const s=en(t,e,n,o);n.closed||M(t)||(o()?(et(i,"display","inline-flex"),n.closed||M(t)||et(a,"display","none")):et(i,"display","none"),N(t,e,"lock",e=>{M(t)||(et(i,"display",e?"inline-flex":"none"),n.closed||M(t)||et(a,"display",e?"none":"inline-flex"),n.closed||M(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function nn(t){return We(t)("control",e=>{e?q(t.template.$player,"art-mini-progress-bar"):j(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class on{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){M(t.art)||!e.miniProgressBar||e.isLive||t.add(nn),!M(t.art)&&e.lock&&k&&t.add(rn),M(t.art)||!e.autoPlayback||e.isLive||t.add(Jr),!M(t.art)&&e.autoOrientation&&k&&t.add(Kr),!M(t.art)&&e.fastForward&&k&&!e.isLive&&t.add(tn)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){it(!M(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(M(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(M(t.art))return t;let o=n;const i=yt(t,o);if(M(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return M(t.art)||(it(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),M(t.art)||vt(t,o,{value:r})),t}(this,t,e)}}const an=new WeakMap;function sn(t){return!t.closed&&!an.get(t)}function ln(t){an.set(t,(an.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(an.get(t)||1)-1;r?an.set(t,r):an.delete(t)}}const cn=new WeakMap,dn=new WeakMap,un=["$parent","$parents","$option","$events","$formatted"];function pn(t){var e,r;const n=new Set;let o=t;for(;o&&!n.has(o);){n.add(o);const t=cn.get(o);if(!t||!t.owner.active||(null==(e=t.owner.scope)?void 0:e.closed)||!t.option.includes(o))return!1;if(!t.parent)return t.owner.root===t.option;if((null==(r=cn.get(t.parent))?void 0:r.owner)!==t.owner)return!1;o=t.parent}return!1}function fn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function hn(t){const e=cn.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function mn(t,e){var r;for(let n=0;n{c&&c!==r&&c.dispose()},()=>kn(t,o)])try{e()}catch(d){d instanceof A?l.push(...d.errors):l.push(d)}if(r.closed||M(t)||(o.push(...i.splice(0)),xn.set(r,o),bn.set(e,r),wn.set(e,n)),a(),l.length)throw new A(l)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function Sn(t,e,r,n,o,i){const a=i||En(e);if(!sn(a)||M(t))return;const s=t.proxy(r,n,e=>{if(sn(a)&&!M(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!sn(a)||M(t)?t.events.remove(s):(hn(e).events.push(s),i&&i!==bn.get(e)&&i.add(()=>{const r=hn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function Tn(t,e,r,n){const o=En(e);if(!sn(o)||M(t))return;const i=(...e)=>{if(sn(o)&&!M(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}const Ln='[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]';function Pn(t){var e;if(!t.isConnected||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return"hidden"!==r&&"collapse"!==r}function Mn(t){return Array.from(t.querySelectorAll(Ln)).filter(t=>"-1"!==t.getAttribute("tabindex")&&Pn(t))}function zn(t,e,r=!1){if(!t.show||M(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!sn(gn(n)))return;const o=function(t,e,r=!1){if(e&&e!==t&&t.contains(e)&&e.matches(Ln)&&"-1"!==e.getAttribute("tabindex")&&Pn(e))return e;const n=Mn(t),o=t.querySelector(".art-setting-item.art-current");return n.find(t=>null==e?void 0:e.contains(t))||(r?n[n.length-1]:n.find(t=>null==o?void 0:o.contains(t))||n.find(t=>!t.classList.contains("art-setting-item-back"))||n[0])}(n,e,r);null==o||o.focus({preventScroll:!0}),M(t.art)||null==o||o.scrollIntoView({block:"nearest",inline:"nearest"})}function On(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!M(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!(null==r?void 0:r.getClientRects().length))&&zn(t,o)}}function Rn(t){const{art:e}=t,r=P(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||M(e)||t.render()},a=i=>{r.closed||M(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&zn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!M(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&Pn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&It(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),Ct(r,e.template.$player,"keydown",r=>{var n,a;const s=r;if(!Mt(s)||s.defaultPrevented||M(e))return;const l=s.target;if(l===e.controls.setting){if("ArrowDown"===s.key||"ArrowUp"===s.key)if(Pt(s),t.show)zn(t,void 0,"ArrowUp"===s.key);else{o="ArrowUp"===s.key;try{t.show=!0}finally{o=!1}}else"Escape"===s.key&&t.show&&(Pt(s),i());return}if(!t.show||!t.$parent.contains(l))return;if("Escape"===s.key)return Pt(s),void i();if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(s.key))return;const c=l.closest(".art-setting-item");if(!c||l!==c&&!l.matches('button,a[href],[role="button"]'))return;const d=t.active&&t.cache.get(t.active);if(!d)return;const u=null==(n=t.active)?void 0:n.find(t=>t.$item===c);if(!sn(gn(d))||u&&!sn(En(u)))return void Pt(s);const p=Mn(d),f=p.indexOf(l);if(f<0)return;let h;switch(s.key){case"ArrowDown":h=Math.min(f+1,p.length-1);break;case"ArrowUp":h=Math.max(f-1,0);break;case"Home":h=0;break;case"End":h=p.length-1;break;case"ArrowLeft":{const t=d.querySelector(".art-setting-item-back");return Pt(s),void(null==t||t.click())}case"ArrowRight":return Pt(s),void((null==(a=null==u?void 0:u.selector)?void 0:a.length)&&l.click());default:return}Pt(s),void 0!==h&&zn(t,p[h])});let s=!1;Ct(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,St(r,()=>{s=!1,r.closed||M(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function Dn(t){var e,r;const{art:n,active:o}=t,{controls:i,constructor:{SETTING_WIDTH:a,SETTING_ITEM_HEIGHT:s},template:{$player:l,$setting:c,$bottom:d}}=n;if(!i.setting||!t.show||!o)return;const u=l.getBoundingClientRect(),p=i.setting.getBoundingClientRect(),f=u.width/l.offsetWidth||1,h=(p.left-u.left+p.width/2)/f-l.clientLeft,m=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:l}=t,c=Math.min(Math.max(0,l),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*c));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-c)),left:Math.max(c,Math.min(a-d/2,e-c-d))}}({containerWidth:l.clientWidth,containerHeight:l.clientHeight,requestedWidth:(null==(r=null==(e=o[0])?void 0:e.$parent)?void 0:r.width)||a,rows:o.length+(o===t.option?0:1),rowHeight:s,controlCenter:h,bottom:Number.parseFloat(getComputedStyle(c).bottom)||0,padding:Number.parseFloat(getComputedStyle(d).paddingLeft)||0});c.style.height=`${m.height}px`,c.style.width=`${m.width}px`,n.isRotate||k||(h+m.width/2>l.clientWidth?(c.style.left="",c.style.right=""):(c.style.left=`${m.left}px`,c.style.right="auto"))}const In=new WeakMap;function Nn(t){In.delete(t)}const _n=new WeakMap;function Wn(t,e){e?_n.set(t,e):_n.delete(t)}function Fn(t){var e;const r=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),n=[],o=_n.get(t),i=null==o?void 0:o();for(const a of["html","icon","tooltip"]){const t=null==(e=r.get(a))?void 0:e.value;t instanceof Node&&n.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{var e,a;for(const n of Reflect.ownKeys(t))!r.has(n)&&(null==(e=Object.getOwnPropertyDescriptor(t,n))?void 0:e.configurable)&&Reflect.deleteProperty(t,n);for(const[n,o]of r)Object.defineProperty(t,n,o);null==i||i(),Wn(t,o);for(const{node:t,parent:r,next:o}of n)r?r.insertBefore(t,(null==o?void 0:o.parentNode)===r?o:null):null==(a=t.parentNode)||a.removeChild(t)}}function Vn(t){var e,r;const n=null==(e=t.$item)?void 0:e.querySelector(".art-setting-range");n&&n.setAttribute("aria-label",(null==(r=t.$html)?void 0:r.textContent)||"")}const Yn=new WeakMap;function Bn(t,e,r,n,o,i,a,s){return c(this,null,function*(){try{const l=En(e),c=En(i),d=(Yn.get(i)||0)+1;Yn.set(i,d);const u=()=>sn(l)&&sn(c)&&!M(t.art)&&Yn.get(i)===d;if(null==s||s(),!u())return;const p=yield o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(l){console.warn("ArtPlayer setting callback failed:",l)}})}function Hn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const jn=new WeakMap;function qn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof A?e.push(...r.errors):e.push(r)}if(e.length)throw new A(e)}function Un(t){var e;null==(e=jn.get(t))||e()}function Xn(t,e){const r=t.find(e.name);if(M(t.art))return r||e;if(!r)return t.add(e);const n=On(t);Nn(r),Un(r);const o=Fn(r),i=r.$item,a=null==i?void 0:i.parentNode,s=null==i?void 0:i.nextSibling,l=i?Hn(i):void 0,c=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=Cn(t.art,e);r&&i.push(r)}for(const t of n)a.push(ln(gn(t)))}catch(l){try{qn([...i.reverse().map(t=>t.resume),...a])}catch(c){console.warn("ArtPlayer setting restore failed:",c)}throw l}let s=!0;return{items:r,resume(){s&&(s=!1,qn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,qn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>yn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);if(M(t.art))return void u.dispose();const e=r.$item;try{qn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>null==l?void 0:l(),()=>{a&&i&&a.insertBefore(i,(null==s?void 0:s.parentNode)===a?s:null)},()=>t.format(),()=>{if(f){t.active=c,c&&t.cache.has(c)&&K(t.cache.get(c),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!M(t.art)&&jn.get(r)===h;for(const y of u.items)jn.set(y,h);const v=P(t.art).add(()=>{p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!(null==o?void 0:o.enumerable)||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);return u.dispose(),n(r.$item),r}catch(g){throw m()&&h(),g}finally{v()}}const Gn=new WeakMap;function Kn(t,e,r){vt(t,`$${e}`,{configurable:!0,get:()=>r}),vt(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",X(r,n),"html"===e&&Vn(t)}})}function Zn(t,e,r=!1){var n,o;const i=function(t){const e=jn.get(t);return()=>!e||jn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const a=t.cache.get(e.$option),s=e.$item;let l="selector";yt(e,"switch")&&(l="switch"),yt(e,"range")&&(l="range"),yt(e,"onClick")&&(l="button");const{icons:c,constructor:d}=t.art;if(!i())return;const u=function(t,e,r=P(t)){const n=bn.get(e);(!n||sn(n)||n.closed)&&An(t,e);const o=r.child();return bn.set(e,o),wn.set(e,r),xn.set(o,hn(e).events),o.add(()=>{kn(t,xn.get(o))}),o}(t.art,e,gn(a)),p=()=>sn(u)&&!M(t.art)&&i();if(!p())return;const f=document.createElement("div");try{if(Wn(e),j(f,"art-setting-item"),et(f,"height",`${d.SETTING_ITEM_HEIGHT}px`),f.dataset.name=e.name||"",f.dataset.value=String(e.value||""),!p())return;const i=Ot(f,'
'),h=Ot(f,'
'),m=document.createElement("div");switch(j(m,"art-setting-item-left-icon"),l){case"button":case"switch":case"range":{const t=e.icon||c.config;if(!p())return;X(m,t);break}case"selector":if(null==(n=e.selector)?void 0:n.length){const t=e.icon||c.config;if(!p())return;X(m,t)}else X(m,c.check)}if(X(i,m),!p())return;Kn(e,"icon",m);const v=document.createElement("div");j(v,"art-setting-item-left-text");const g=e.html||"";if(!p())return;X(v,g),X(i,v),Kn(e,"html",v);const y=document.createElement("div");j(y,"art-setting-item-right-tooltip");const b=e.tooltip||"";if(!p())return;switch(X(y,b),X(h,y),Kn(e,"tooltip",y),l){case"switch":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=Ot(t,c.switchOn),n=Ot(t,c.switchOff),o=e.switch;if(!p())return;et(o?n:r,"display","none"),X(h,t),vt(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!p())return;Wn(e,()=>{const t=i;return()=>{i=t}}),vt(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,f.setAttribute("aria-checked",String(Boolean(t))),t?(et(n,"display","none"),et(r,"display",null)):(et(n,"display",null),et(r,"display","none"))}});break}case"range":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",X(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!p())return;Reflect.set(r,i,String(t))}j(r,"art-setting-range"),X(h,t),vt(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!p())return;Wn(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),vt(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(null==(o=e.selector)?void 0:o.length){const t=document.createElement("div");j(t,"art-setting-item-right-icon"),X(t,c.arrowRight),X(h,t)}}if(!p())return;if(function(t,e,r,n){const{art:o}=t,i=En(e),a=(t,r,n)=>Sn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Bn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Bn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{var o,i;if(null==(o=e.selector)?void 0:o.length)t.render(e.selector);else{if(null==(i=e.$parent)?void 0:i.onSelect)return Bn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&j(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Bn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,f,l),!p())return;vt(e,"$item",{configurable:!0,get:()=>f}),function(t,e,r,n,o){var i;"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||(null==(i=e.selector)?void 0:i.length)||r.setAttribute("aria-current",String(Boolean(e.default))),zt(o,r,()=>r.click(),()=>sn(o)&&!M(t.art))):Vn(e)}(t,e,f,l,u),r&&(null==s?void 0:s.parentNode)?s.replaceWith(f):X(a,f),e.mounted&&p()&&St(u,()=>{var r;if(!M(t.art))try{const n=null==(r=e.mounted)?void 0:r.call(t.art,f,e);Promise.resolve(n).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(n){console.warn("ArtPlayer setting mounted failed:",n)}},0)}catch(h){try{u.dispose()}catch(m){console.warn("ArtPlayer setting cleanup failed:",m)}throw f.remove(),h}}function Jn(t,e=t.option){var r,n,o,i,a,s;if(M(t.art))return;const l=On(t),c=t.cache.get(e);if(c&&!sn(gn(c)))return;const d=(Gn.get(t)||0)+1;Gn.set(t,d);const u=()=>Gn.get(t)===d&&!M(t.art),p=t.active,f=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),h=()=>{t.active=p,p&&t.cache.has(p)&&K(t.cache.get(p),"art-current");for(const[e,r,n]of f)t.$parent.style.setProperty(e,r,n)};if(t.active=e,c)try{K(c,"art-current"),t.resize()}catch(m){throw u()&&t.cache.get(e)===c&&!gn(c).closed&&h(),m}else{const a=document.createElement("div");t.cache.set(e,a);const s=function(t,e,r){const n=P(t.art).child();return vn.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,a),l=()=>!s.closed&&!M(t.art)&&t.cache.get(e)===a,c=[];try{if(!l())return;j(a,"art-setting-panel"),a.setAttribute("role","group"),a.setAttribute("aria-label",(null==(o=null==(n=null==(r=e[0])?void 0:r.$parent)?void 0:n.$html)?void 0:o.textContent)||t.art.i18n.get("Settings")),X(t.$parent,a),K(a,"art-current"),(null==(i=e[0])?void 0:i.$parent)&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=dn.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=P(e).child(),n=(t,n)=>{if(r.closed||M(e))return;const o=(...t)=>{if(!r.closed&&!M(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=F(r,e.controls.setting),o=F(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||M(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),Rn(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(dt(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{Tn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){mn(e,t)}check(t){!function(t,e){(null==e?void 0:e.$parent)&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&K(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=dn.get(t)||{active:!0},a=[],s=new Set,l=new Set(o),c=(t,e,r)=>{var n;for(let o=0;ohn(t).parent},$parents:{get:()=>hn(t).parents},$option:{get:()=>hn(t).option},$events:{get:()=>hn(t).events},$formatted:{get:()=>!0}}),cn.set(t,{parent:r,parents:n,option:o,events:(null==a?void 0:a.events)||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return mn(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){Dn(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&yn(n)}catch(i){r.push(i)}}try{An(t.art,e)}catch(i){i instanceof A?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new A(r)}(this,t)}remove(t){const e=On(this),r=this.find(t);it(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Nn(t),Un(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>null==o?void 0:o.remove(),()=>this.render()])try{s()}catch(a){a instanceof A?i.push(...a.errors):i.push(a)}if(i.length)throw new A(i);e()}update(t){return Xn(this,t)}add(t,e=this.option){var r;if(M(this.art))return t;let n=!1;this.traverse(e=>{n||(n=e===t)});const o=e.length,i=n?void 0:function(t){const e={};In.set(t,e);const r=()=>In.get(t)===e;return{current:r,finish(){r()&&In.delete(t)}}}(t);let a=!1;try{e.push(t),this.format(),a=!0,this.createItem(t),this.render()}catch(s){if(M(this.art)||i&&!i.current())throw s;if(e[o]===t&&e.splice(o,1),!n&&a){try{this.inactivate(t)}catch(l){console.warn("ArtPlayer setting cleanup failed:",l)}null==(r=t.$item)||r.remove()}throw s}finally{null==i||i.finish()}return t}createHeader(t){!function(t,e){var r;if(!t.cache.has(e.$option))return;const n=t.cache.get(e.$option),{icons:{arrowLeft:o},constructor:{SETTING_ITEM_HEIGHT:i}}=t.art,a=document.createElement("div");et(a,"height",`${i}px`),j(a,"art-setting-item"),j(a,"art-setting-item-back");const s=Ot(a,'
'),l=document.createElement("div");j(l,"art-setting-item-left-icon"),X(l,o),X(s,l),X(s,e.$parent.html),Sn(t.art,e.$parent,a,"click",()=>t.render(e.$parents),gn(n));const c=gn(n);a.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||zt(c,a,()=>a.click(),()=>sn(c)&&!M(t.art)),a.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${(null==(r=a.textContent)?void 0:r.trim())||""}`),X(n,a)}(this,t)}createItem(t,e=!1){Zn(this,t,e)}render(t=this.option){Jn(this,t)}}class eo{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch(e){return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch(r){this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch(e){delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch(t){this.settings={}}}}const ro='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class no{constructor(t){var e;this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=null==(e=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope))?void 0:e.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}run(t){return c(this,null,function*(){if(this.active)try{return yield Promise.race([t(),this.cancelled])}finally{this.cancel()}})}}const oo=new WeakMap;function io(t){return oo.get(t)}function ao(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const so=Zt;class lo extends so{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=P(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return oo.set(t,n),r.add(()=>{ao(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){var t,e;return null==(e=null==(t=this.art.template.$video)?void 0:t.textTracks)?void 0:e[0]}get activeCues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.activeCues)||[])}get cues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.cues)||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?rt(r,t):et(r,t,e)}update(){!function(t){const e=io(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?mt(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}switch(t){return c(this,arguments,function*(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i=l(s(s({},o.subtitle),e),{url:t}),a=io(this),c=a.revision+1,d=yield this.init(i);return!a.scope.closed&&a.revision===c&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),d})}createTrack(t,e){!function(t,e,r){const n=io(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,l=s.parentNode,c=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const l=t.textTrack,c=l?i.proxy(l,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(c)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=c,s.onload=null,s.onerror=null,p=!0;try{null==f||f.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&ao(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,l&&l.insertBefore(s,(null==c?void 0:c.parentNode)===l?c:null),f}}(this,t,e)}init(t){return c(this,null,function*(){const e=io(this),r=function(t){const e=t.request,r=new no(t.scope);return t.request=r,t.revision+=1,null==e||e.cancel(),r}(e),{notice:n,template:{$subtitle:o}}=this.art;return r.run(()=>c(this,null,function*(){if(!this.textTrack)return null;if(h(t,Gt.subtitle),!t.url)return;let i;this.option=t,this.style(t.style);try{if(!r.active)return;const n=yield fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const a=yield n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||st(e.url)){case"srt":return{vtt:e.onVttLoad(xt(r))};case"ass":return{vtt:e.onVttLoad($t(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(a,t);if(!r.active)return;const l=void 0===s?t.url:i=kt(s.vtt);if(!r.active)return;o.innerHTML="";const c=e.trackRevision+1;if(this.url!==l&&this.createTrack("metadata",l),!r.active||e.trackRevision>c)return;return i&&(e.ownedURL=i,i=void 0),l}catch(a){if(!r.active)return;throw o.innerHTML="",n.show=a,a}finally{i&&(e.scope.closed||this.url!==i?URL.revokeObjectURL(i):e.ownedURL=i)}}))})}}const co=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${m}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class uo{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=H(e.container),it(this.$container,`No container element found by ${e.container}`)),it(V(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();it("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),it(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=T.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=L(t);o.rollback=r,T.set(e,t),o.releaseContainer=()=>{T.get(e)===t&&T.delete(e)}}(t,this.$container,Hn(this.$container)),function(t,e,r){const n=L(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return co}query(t){return H(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=uo.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(M(this.art))return;!function(t){it(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),Z(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&j(this.$player,"art-backdrop"),k&&j(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":j(this.$player,"art-destroy")}}const po=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class fo{on(t,e,r){const n=this.e||(this.e={});let o=po(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(po(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=po(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new uo(this),P(this).closed)return;if(this.events=new Ve(this),P(this).closed)return;if(this.storage=new eo,P(this).closed)return;if(this.icons=new Ke(this),P(this).closed)return;if(this.i18n=new Xe(this),P(this).closed)return;if(this.notice=new ar(this),P(this).closed)return;if(this.player=new Hr(this),P(this).closed)return;if(this.layers=new er(this),P(this).closed)return;if(this.controls=new Me(this),P(this).closed)return;if(this.contextmenu=new ie(this),P(this).closed)return;if(this.subtitle=new lo(this),P(this).closed)return;if(this.info=new tr(this),P(this).closed)return;if(this.loading=new rr(this),P(this).closed)return;if(this.hotkey=new qe(this),P(this).closed)return;if(this.mask=new nr(this),P(this).closed)return;if(this.setting=new to(this),P(this).closed)return;if(this.plugins=new on(this),P(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),vo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${vo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=L(t);return e.rollback=void 0,!e.scope.closed})(this)&&mo.push(this)}catch(r){try{z(this,mo,!0,vo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return mo}static get version(){return m}static get config(){return E}static get utils(){return Et}static get scheme(){return Gt}static get Emitter(){return fo}static get validator(){return h}static get kindOf(){return h.kindOf}static get html(){return uo.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:b?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:null==navigator?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){z(this,mo,t,vo.REMOVE_SRC_WHEN_DESTROY)}}var go,yo;return vo.STYLE=ro,vo.DEBUG=!1,vo.CONTEXTMENU=!0,vo.NOTICE_TIME=2e3,vo.SETTING_WIDTH=250,vo.SETTING_ITEM_WIDTH=200,vo.SETTING_ITEM_HEIGHT=35,vo.RESIZE_TIME=200,vo.SCROLL_TIME=200,vo.SCROLL_GAP=50,vo.AUTO_PLAYBACK_MAX=10,vo.AUTO_PLAYBACK_MIN=5,vo.AUTO_PLAYBACK_TIMEOUT=3e3,vo.RECONNECT_TIME_MAX=5,vo.RECONNECT_SLEEP_TIME=1e3,vo.CONTROL_HIDE_TIME=3e3,vo.DBCLICK_TIME=300,vo.DBCLICK_FULLSCREEN=!0,vo.MOBILE_DBCLICK_PLAY=!0,vo.MOBILE_CLICK_PLAY=!1,vo.AUTO_ORIENTATION_TIME=200,vo.INFO_LOOP_TIME=1e3,vo.FAST_FORWARD_VALUE=3,vo.FAST_FORWARD_TIME=1e3,vo.TOUCH_MOVE_RATIO=.5,vo.VOLUME_STEP=.1,vo.SEEK_STEP=5,vo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],vo.ASPECT_RATIO=["default","4:3","16:9"],vo.FLIP=["normal","horizontal","vertical"],vo.FULLSCREEN_WEB_IN_BODY=!0,vo.LOG_VERSION=!0,vo.USE_RAF=!1,vo.REMOVE_SRC_WHEN_DESTROY=!0,go=vo,yo=ro,$&&(window.Artplayer=go,v("artplayer-style",yo),setTimeout(()=>{go.LOG_VERSION&&console.log(`%c ArtPlayer %c ${go.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),vo}); diff --git a/docs/compiled/artplayer.mjs b/docs/compiled/artplayer.mjs index 243287103..9b3aa10b1 100644 --- a/docs/compiled/artplayer.mjs +++ b/docs/compiled/artplayer.mjs @@ -2809,6 +2809,7 @@ function observeControlLayout(art) { scope.add(() => { observer.disconnect(); }); + return; } else if (typeof MutationObserver !== "undefined") { const observer = new MutationObserver(update); observer.observe($controls, { childList: true, subtree: true, attributes: true, characterData: true }); @@ -7733,12 +7734,22 @@ function flip(art) { } }; } +const focusSelector = '[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]'; function available(element) { + if (!element.isConnected || element.matches(":disabled") || element.closest("[inert]") || element.getAttribute("aria-disabled") === "true" || !element.getClientRects().length) + return false; const visibility = element.ownerDocument.defaultView?.getComputedStyle(element).visibility; - return element.isConnected && !element.matches(":disabled") && !element.closest("[inert]") && element.getAttribute("aria-disabled") !== "true" && element.getClientRects().length > 0 && visibility !== "hidden" && visibility !== "collapse"; + return visibility !== "hidden" && visibility !== "collapse"; } function settingFocusTargets(panel) { - return Array.from(panel.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter((element) => element.getAttribute("tabindex") !== "-1" && available(element)); + return Array.from(panel.querySelectorAll(focusSelector)).filter((element) => element.getAttribute("tabindex") !== "-1" && available(element)); +} +function selectSettingTarget(panel, preferred, last = false) { + if (preferred && preferred !== panel && panel.contains(preferred) && preferred.matches(focusSelector) && preferred.getAttribute("tabindex") !== "-1" && available(preferred)) + return preferred; + const targets = settingFocusTargets(panel); + const selected = panel.querySelector(".art-setting-item.art-current"); + return targets.find((element) => preferred?.contains(element)) || (last ? targets[targets.length - 1] : targets.find((element) => selected?.contains(element)) || targets.find((element) => !element.classList.contains("art-setting-item-back")) || targets[0]); } function returnSettingFocus(setting2) { const { art, $parent } = setting2; @@ -7758,9 +7769,7 @@ function focusSettingPanel(setting2, preferred, last = false) { const panel = setting2.cache.get(setting2.active); if (!panel || !settingScopeActive(settingPanelScope(panel))) return; - const targets = settingFocusTargets(panel); - const selected = panel.querySelector(".art-setting-item.art-current"); - const target = targets.find((element) => preferred === element || preferred?.contains(element)) || (last ? targets[targets.length - 1] : targets.find((element) => selected?.contains(element)) || targets.find((element) => !element.classList.contains("art-setting-item-back")) || targets[0]); + const target = selectSettingTarget(panel, preferred, last); target?.focus({ preventScroll: true }); if (!isClosing(setting2.art)) target?.scrollIntoView({ block: "nearest", inline: "nearest" }); @@ -7833,6 +7842,8 @@ function installSettingKeyboard(setting2) { close2(); return; } + if (!["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) + return; const row = target.closest(".art-setting-item"); if (!row || target !== row && !target.matches('button,a[href],[role="button"]')) return; @@ -7841,8 +7852,7 @@ function installSettingKeyboard(setting2) { return; const currentItem = setting2.active?.find((item) => item.$item === row); if (!settingScopeActive(settingPanelScope(panel)) || currentItem && !settingScopeActive(settingScope(currentItem))) { - if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) - claimKey(event); + claimKey(event); return; } const targets = settingFocusTargets(panel); diff --git a/packages/artplayer/ARCHITECTURE.md b/packages/artplayer/ARCHITECTURE.md index 4b331204c..1375acfc8 100644 --- a/packages/artplayer/ARCHITECTURE.md +++ b/packages/artplayer/ARCHITECTURE.md @@ -811,12 +811,18 @@ into HTML attributes; normal text and marker positions retain their behavior. controls.less allows groups to wrap inside narrow players. Individual control height continues to use --art-control-height; control/layout.ts observes total layout height through offsetHeight and records --art-controls-height for subtitle/panel offsets. -ResizeObserver is preferred; the fallback combines core resize and MutationObserver. +ResizeObserver is preferred; its initial notification measures after constructor +DOM writes, so observing controls does not synchronously force layout during +construction. The derived inline --art-controls-height is populated at that first +layout notification, not promised synchronously to constructor/plugin callbacks. +CSS retains its --art-control-height fallback until then. Explicit core resize +events still update immediately. Without ResizeObserver, the initial measurement +remains synchronous and subsequent updates combine core resize and MutationObserver. Both observers and subscriptions are owned by the bottom controls scope. Without ResizeObserver, unrelated parent CSS resizing is not independently detected until a core resize or control mutation occurs. The 640/320/240px tests include real 16:9 heights and verify all buttons remain visible. This does not promise arbitrary custom -minimum widths will fit. Narrow setting-tree/panel behavior remains CORE-14 work. +minimum widths will fit. Setting panel bounds are handled by setting/layout.ts. Use test/component-resources.test.js for ownership, reentry and quality settlement, test/types/components.ts for source contracts, and test/browser/components.spec.js @@ -1391,6 +1397,17 @@ task, since a microtask can observe body during the browser's focus transition. Pointer opening does not move focus into the panel. Existing click callbacks and selection/update generations remain the mutation boundaries. +Navigation reads a fresh target list for each relevant arrow/Home/End event; it +does not cache availability across events. Focus restoration first checks whether +the preferred element is still a focusable descendant of the active live panel. +When it is, only that element is revalidated instead of scanning the panel again. +An unavailable preferred element or a non-focusable wrapper still uses the normal +descendant/selected-item fallback. Eligibility checks reject detached, disabled, +inert and boxless elements before reading computed visibility. Unrelated keys +never enumerate the panel. The long-panel browser case records query/style work +and checks live hide/disable/restore/remove behavior; these operation counts are +not constructor timings or evidence that the bundle-size risk is closed. + `accessibility/moved-focus.ts` restores a connected focused node when moving the player for web fullscreen makes the browser focus body. It never overrides focus deliberately assigned elsewhere and is not used during destruction cleanup. Mode diff --git a/packages/artplayer/dist/artplayer.js b/packages/artplayer/dist/artplayer.js index 63a76aed3..e5c1e3723 100644 --- a/packages/artplayer/dist/artplayer.js +++ b/packages/artplayer/dist/artplayer.js @@ -67,4 +67,4 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var e,r={exports:{}};var n=(e||(e=1,r.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const s=globalThis.CUSTOM_USER_AGENT??("undefined"===typeof navigator?"":navigator.userAgent),c=/^(?:(?!chrome|android).)*safari/i.test(s),l=/iPad|iPhone|iPod/i.test(s)&&("undefined"===typeof window||!window.MSStream),d=l||s.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,u=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)||d,p="undefined"!==typeof window&&"undefined"!==typeof document;const f={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class h extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class m{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new m,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof h?t.push(...e.errors):t.push(e)}if(t.length)throw new h(t)}}const g=new WeakMap,v=new WeakMap;function y(t){const e=g.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function b(t){return y(t).scope}function w(t){const e=y(t);return e.destroying||e.scope.closed}function x(t,e,r,n,o=!1){const i=y(t);if(i.destroying||i.scope.closed)return;i.destroying=!0;const a=[],s=t=>{try{t()}catch(e){a.push(...e instanceof h?e.errors:[e])}};n&&t.template?.$video&&s(()=>t.reset()),s(()=>i.scope.dispose()),s(()=>(t.template||i.mountingTemplate)?.destroy(r));const c=e.indexOf(t);-1!==c&&e.splice(c,1),t.isDestroy=!0,o||(i.releaseContainer?.(),i.releaseContainer=void 0),s(()=>t.emit("destroy")),s(()=>i.finalizers.dispose()),o&&i.rollback&&s(i.rollback),i.rollback=void 0,i.releaseContainer?.(),i.releaseContainer=void 0;for(const l of a.slice(1))console.warn("Additional ArtPlayer cleanup failure:",l);if(a.length)throw a[0]}const k=new WeakMap;function $(t,e){const r=b(t).child();return k.set(e,r),r}function E(t){const e=k.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function A(t){k.get(t)?.dispose()}function C(t,e,r,n){const o=E(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function S(t,e){return{on:(r,n)=>{C(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=E(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function T(t){if(t.composedPath)return t.composedPath();const e=[];let r=t.target;for(;r;)e.push(r),r=r.parentNode??null;return"undefined"===typeof window||e.includes(window)||e.push(window),e}function L(t,e){return T(t).includes(e)}function P(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function M(t){return t.getBoundingClientRect()}function z(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function R(t,e=document){return e.querySelector(t)}function O(t,e){return t.classList.add(e)}function D(t,e){return t.classList.remove(e)}function I(t,e){return t.classList.contains(e)}function N(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function _(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function W(t,e){_(t).forEach(t=>D(t,e)),O(t,e)}function F(t,e){return e.parentNode.replaceChild(t,e),t}function V(t){return document.createElement(t)}function Y(t,e,r="top"){u||(t.setAttribute("aria-label",e),O(t,"hint--rounded"),O(t,`hint--${r}`))}function B(t="",e=""){const r=V("i");return O(r,"art-icon"),O(r,`art-icon-${t}`),N(r,e),r}function H(t,e,r){return t.style[e]=r,t}function j(t,e){for(const r in e)H(t,r,e[r]);return t}function q(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new m;let a=!1,s=()=>{};function c(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function l(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void l(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const c=new Image;d(c,()=>l(c)),i.closed||(c.src=e)}catch(e){c(e)}}))}),i.closed||(n.src=t)}catch(u){c(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){c(u)}},e.onerror=()=>c(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class U extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function X(t,e){if(!t)throw new U(e);return t}function G(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function K(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function Z(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function J(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function Q(t){return t.charAt(0).toUpperCase()+t.slice(1)}function tt(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const et={"&":"&","<":"<",">":">","'":"'",'"':"""},rt={"&":"&","<":"<",">":">","'":"'",""":'"'},nt=/(&|<|>|'|")/g;function ot(t){return t.replace(/[&<>'"]/g,t=>et[t]||t)}const it=Object.defineProperty,{hasOwnProperty:at}=Object.prototype;function st(t,e){return at.call(t,e)}function ct(t,e){return Object.getOwnPropertyDescriptor(t,e)}function lt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?lt(o,i):i,it(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function dt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function ut(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function pt(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const ft=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:U,addClass:O,append:N,assToVtt:pt,capitalize:Q,clamp:J,createElement:V,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:it,download:Z,errorHandle:X,escape:ot,get:ct,getComposedPath:T,getExt:K,getIcon:B,getRect:M,getSafeAreaInsets:z,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:st,hasClass:I,includeFromEvent:L,inverseClass:W,isBrowser:p,isIOS:l,isIOS13:d,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:u,isSafari:c,loadImg:function(t,e){return q(t,e,void 0)},mergeDeep:lt,query:R,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:D,replaceElement:F,secondToTime:tt,setStyle:H,setStyleText:a,setStyles:j,siblings:_,silencePromise:G,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:dt,supportsFlex:P,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Y,unescape:function(t){return t.replace(nt,t=>rt[t]||t)},userAgent:s,vttToBlob:ut},Symbol.toStringTag,{value:"Module"}));function ht(){}function mt(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||s?.aborted)return ht;let c=ht;function l(e){a&&c(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,l,o),c=t.add(()=>{try{e.removeEventListener(r,l,i)}finally{s?.removeEventListener("abort",c)}}),s?.addEventListener("abort",c,{once:!0}),c}function gt(t,e,r){if(t.closed)return ht;let n=!0,o=ht;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function vt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=ht;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const yt=new WeakSet;function bt(t){yt.add(t),t.preventDefault()}function wt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function xt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;mt(t,e,"keydown",t=>{const e=t;a(e)&&wt(e)&&!e.defaultPrevented&&("Enter"===e.key?(bt(e),!e.repeat&&i()&&r()):" "===e.key&&(bt(e),!e.repeat&&i()&&(o=!0)))}),mt(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&wt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(bt(n),r())}),mt(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function kt(t,e){return N(t,e)}function $t(t,e){return e.querySelector(t)}const Et=new WeakSet;function At(t){const e=t.template.$player;!w(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Et.has(e)||(Et.add(e),b(t).add(()=>{Et.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Ct=new WeakSet,St="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Tt(t){return[t,...t.querySelectorAll(St)].find(t=>{if(!t.matches(St)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t);return"hidden"!==e?.visibility&&"collapse"!==e?.visibility})}function Lt(t,e,r){const n=e?.ownerDocument,o=n?.activeElement;if(!["control","contextmenu"].includes(t.name??"")||Ct.has(t)||!e||!n||!o||!e.contains(o))return()=>{};const i=t.art.template.$player,a=Array.from(i.querySelectorAll(`.art-${t.name}`)),s=a.indexOf(e),c=[...a.slice(s+1),...a.slice(0,s).reverse()];return Ct.add(t),()=>{if(Ct.delete(t),w(t.art)||!i.isConnected||n.activeElement!==n.body)return;const e=r?t.cache.get(r)?.$ref:void 0;for(const t of[...e?[e]:[],...c]){if(!i.contains(t))continue;const e=Tt(t);if(e)return void e.focus({preventScroll:!0})}At(t.art)}}const Pt="array",Mt="boolean",zt="string",Rt="number",Ot="object",Dt="function";function It(t,e,r){return X(e===zt||e===Rt||t instanceof Element,`${r.join(".")} require '${zt}' or 'Element' type`)}const Nt={html:It,disable:`?${Mt}`,name:`?${zt}`,index:`?${Rt}`,style:`?${Ot}`,click:`?${Dt}`,mounted:`?${Dt}`,tooltip:`?${zt}|${Rt}`,width:`?${Rt}`,selector:`?${Pt}`,onSelect:`?${Dt}`,switch:`?${Mt}`,onSwitch:`?${Dt}`,range:`?${Pt}`,onRange:`?${Dt}`,onChange:`?${Dt}`},_t={id:zt,container:It,url:zt,poster:zt,type:zt,theme:zt,lang:zt,volume:Rt,isLive:Mt,muted:Mt,autoplay:Mt,autoSize:Mt,autoMini:Mt,loop:Mt,flip:Mt,playbackRate:Mt,aspectRatio:Mt,screenshot:Mt,setting:Mt,hotkey:Mt,pip:Mt,mutex:Mt,backdrop:Mt,fullscreen:Mt,fullscreenWeb:Mt,subtitleOffset:Mt,miniProgressBar:Mt,useSSR:Mt,playsInline:Mt,lock:Mt,gesture:Mt,fastForward:Mt,autoPlayback:Mt,autoOrientation:Mt,airplay:Mt,proxy:`?${Dt}`,plugins:[Dt],layers:[Nt],contextmenu:[Nt],settings:[Nt],controls:[{...Nt,position:(t,e,r)=>{const n=["top","left","right"];return X("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}}],quality:[{default:`?${Mt}`,html:zt,url:zt}],highlight:[{time:Rt,text:zt}],thumbnails:{url:zt,number:Rt,column:Rt,width:Rt,height:Rt,scale:Rt},subtitle:{url:zt,name:zt,type:zt,style:Ot,escape:Mt,encoding:zt,onVttLoad:Dt},moreVideoAttr:Ot,i18n:Ot,icons:Ot,cssVar:Ot,customType:Ot},Wt=new WeakSet;class Ft{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return I(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?O(e,r):D(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t;if(w(this.art))return;if(e.html=e.html||"",o(e,Nt),!this.$parent||!this.name||e.disable)return;const r=e.name||`${this.name}${this.id}`,n=this.cache;X(!n.has(r),`Can't add an existing [${r}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=$(this.art,i),s=[],c=Object.getOwnPropertyDescriptor(this,r);let l=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){O(t,`art-${r}`),O(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):N(e,t),i.html&&N(t,i.html),i.style&&j(t,i.style),i.tooltip&&Y(t,i.tooltip)}(i,this.$parent,this.name,r,this.id,e),a.closed)return;if(e.click){("control"===this.name&&!e.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&xt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),e.click.call(this.art,this,t))});s.push(t)}if(e.selector&&["left","right"].includes(e.position)&&this.selector(e,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,r,i),l=!0,n.set(r,{$ref:i,events:s,option:e}),e.mounted&&e.mounted.call(this.art,i),i}catch(d){try{A(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw n.get(r)?.$ref===i&&n.delete(r),l&&this[r]===i&&(c?Object.defineProperty(this,r,c):delete this[r]),i.remove(),d}}remove(t){X(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Wt.has(e))return;const r=Lt(this,e.$ref);Wt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{A(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Wt.delete(e),r()}}update(t){const e=Lt(this,this.cache.get(t.name)?.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{e()}}}function Vt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Yt(t,e){const r=E(t);if(!r.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const n of t.querySelectorAll("[data-value]"))xt(r,n),n.setAttribute("aria-label",`${e}: ${n.textContent?.trim()??""}`);Vt(t)}}const Bt=new WeakMap;function Ht(t,e){e?Bt.set(t,e):Bt.delete(t)}function jt(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=Bt.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function qt(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function Ut(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}class Xt extends Ft{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,$(t,this.$parent),u||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=S(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="1"]',t);n&&W(n,"art-current"),Yt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="default"]',t);n&&W(n,"art-current"),Yt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(Q(t))}`).join(""),i=r.get("Video Flip");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="normal"]',t);n&&W(n,"art-current"),Yt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"flip",index:30})),this.add(function(t){return e=>({...t,html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return{...t,html:`ArtPlayer ${i}`}}({name:"version",index:50})),this.add(function(t){return e=>({...t,html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let i=0;i{this.show=!0,a.closed||w(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:c}=M(n),{height:l,width:d}=M(o);let u=e-s,p=r-c;e+d>s+a&&(u=a-d),r+l>c+i&&(p=i-l),w(t)||j(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=E(o),a=()=>!i.closed&&!w(r);let s,c=!1,l="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?jt(t):n,Ht(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&Ut(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||c&&e===n.ownerDocument.body,d=s;s=void 0,c=!1,l="",Ht(o),i&&(d&&n.contains(d)&&Ut(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&At(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),Ht(o)}),mt(i,o,"focusin",()=>{c=!0});let m=!1;return mt(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,gt(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),mt(i,n,"keydown",n=>{const i=n;if(!a()||!wt(i)||i.defaultPrevented)return;if(("ContextMenu"===i.key||"F10"===i.key&&i.shiftKey)&&r.constructor.CONTEXTMENU&&!qt(i.target)){bt(i),u();const r=i.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&p()[0]?.focus({preventScroll:!0}))}if(!t.show||!o.contains(i.target))return;if("Escape"===i.key)return bt(i),void(t.show=!1);if("Tab"===i.key)return void(t.show=!1);if(qt(i.target))return;const s=p(),c=s.indexOf(i.target);let f;if("ArrowDown"===i.key||"ArrowRight"===i.key)f=s[(c+1)%s.length];else if("ArrowUp"===i.key||"ArrowLeft"===i.key)f=s[(c+s.length-1)%s.length];else if("Home"===i.key)f=s[0];else if("End"===i.key)f=s[s.length-1];else{if(1!==i.key.length||" "===i.key)return;{const t=i.key.toLowerCase();l=Date.now()-d>700?t:l+t,d=Date.now();const e=[...l].every(e=>e===t)?t:l;f=[...s.slice(c+1),...s.slice(0,c+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}bt(i),f?.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||qt(t.target))&&(u(),!0)}}(this,s);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),s(t.clientX,t.clientY))}),o(e,"click",t=>{L(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const Gt=new WeakMap,Kt=new WeakMap,Zt=new WeakMap;function Jt(t){return Zt.get(t)||b(t)}function Qt(t){const e=Gt.get(t),r=Zt.get(t);return()=>Gt.get(t)===e&&(!e||e.active())&&Zt.get(t)===r&&(!r||!r.closed)}function te(t){const e=Zt.get(t),r=b(t).child(),n=r.child();Zt.set(t,r),r.add(()=>{Zt.get(t)===r&&Zt.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!w(t)&&!n.closed&&Gt.get(t)===o};return Gt.set(t,o),n.add(()=>{Gt.get(t)===o&&Gt.delete(t),o.onAssigned=void 0,o.onError=void 0}),e?.dispose(),o}function ee(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&e?.()}function re(t,e,r){Kt.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{Kt.get(t)===e&&(Kt.delete(t),ee(e))}}function ne(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function oe(t,e){const{$progress:r}=t.template,{left:n}=M(r),o=J((u?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:tt(i),width:o,percentage:J(o/r.clientWidth,0,1)}}function ie(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=oe(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ae=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function se(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),c=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),mt(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!wt(r)||r.defaultPrevented)return;const i=ae.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;bt(r);const l=n();if(!a(l))return void c();const d="Home"===r.key?l.min:"End"===r.key?l.max:s(l.value,l)+i*l.step;o(s(d,l)),c()}),c()),c}const ce=new WeakMap;function le(t){return ce.get(t)||0}function de(t,e,r){let n,o=!1,i=!1,a=!1,s=le(t);const c=()=>a||le(t)!==s,l=()=>!!t.template?.$video?.seeking;return{restore(i=()=>{t.currentTime=e}){if(!r()||c())return;const d=le(t);i(),s=le(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!c()&&(o=l()))},manual(){a=!0},ready(){if(!r()||l())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!c()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!l()}}}function ue(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=E(e),{on:a}=S(t,e);let s=()=>{};const c=$t(".art-progress-hover",e),l=$t(".art-progress-loaded",e),d=$t(".art-progress-played",e),p=$t(".art-progress-highlight",e),f=$t(".art-progress-indicator",e),h=$t(".art-progress-tip",e);function m(r,n){const{width:o,time:i}=n||oe(t,r);h.textContent=i||"00:00";const a=h.clientWidth;o<=a/2?H(h,"left",0):o>e.clientWidth-a/2?H(h,"left",e.clientWidth-a+"px"):H(h,"left",o-a/2+"px")}r.indicator?N(f,r.indicator):H(f,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const g="played"===r&&a&&u;if("loaded"===r&&H(l,"width",100*n+"%"),"hover"===r&&(H(c,"width",100*n+"%"),L(a,p)?function(r){const{width:n}=oe(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;h.textContent=o??"";const i=h.clientWidth;n<=i/2?H(h,"left",0):n>e.clientWidth-i/2?H(h,"left",e.clientWidth-i+"px"):H(h,"left",n-i/2+"px")}(a):m(a),0===n?D(o,"art-progress-hover"):O(o,"art-progress-hover")),"played"===r&&(H(d,"width",100*n+"%"),H(f,"left",100*n+"%")),g){O(o,"art-progress-hover");m(a,{width:e.clientWidth*n,time:tt(n*t.duration)}),s(),s=gt(i,()=>{D(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){p.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function pe(t){return e=>({...t,html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ue(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=S(t,e),a=E(e);let s=0;const c=()=>{const e=Qt(t);return()=>!a.closed&&!w(t)&&e()},l=()=>{const t=++s,e=c();return()=>t===s&&e()};if(!u){let e;i(r,"click",e=>{e.target!==n&&ie(t,e,l())}),i(r,"mousemove",e=>{const r=c(),{percentage:n}=oe(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?l():void 0}),o("document:mousemove",r=>{const n=e;if(n?.()){const{second:o,percentage:i}=oe(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=E(e),{on:n}=S(t,e);let o,i=0;const a=se(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${tt(e)} / ${tt(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;o?.dispose();const s=r.child();o=s;const c=Jt(t).add(()=>{s.dispose()});s.add(()=>{c()}),s.add(()=>{o===s&&(o=void 0)});const l=Qt(t),d=()=>n===i&&!s.closed&&!w(t)&&l(),u=de(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function fe(t){const{option:e}=t.art;e.isLive||t.add(pe({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.play),s=kt(t,o.pause);function c(){t.setAttribute("aria-label",i.get("Play")),H(a,"display","flex"),H(s,"display","none")}function l(){t.setAttribute("aria-label",i.get("Pause")),H(a,"display","none"),H(s,"display","flex")}xt(E(t),t,()=>(e.playing?s:a).click()),Y(a,i.get("Play")),Y(s,i.get("Pause")),n(a,"click",()=>{G(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?l():c(),r("video:playing",()=>{l()}),r("video:pause",()=>{c()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.volume),s=kt(t,o.volumeClose);for(const e of[a,s])xt(E(t),e),e.setAttribute("aria-label",i.get("Mute"));const c=kt(t,'
'),l=kt(c,'
'),d=kt(l,'
'),p=kt(l,'
'),f=kt(p,'
'),h=kt(f,'
'),m=kt(p,'
'),g=E(t);let v=0;const y=se(g,p,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||g.closed||w(e)||(e.volume=t/100)},"vertical");function b(t){const{top:e,height:r}=M(p);return 1-(t.clientY-e)/r}function x(){y();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)H(a,"display","none"),H(s,"display","flex"),H(m,"top","100%"),H(h,"top","100%"),d.textContent="0";else{const t=100*e.volume;H(a,"display","flex"),H(s,"display","none"),H(m,"top",100-t+"%"),H(h,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(x(),r("video:volumechange",x),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),u)H(c,"display","none");else{let t=!1;n(p,"mousedown",r=>{t=0===r.button,e.volume=b(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=b(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>({...t,style:u?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=S(e,t);function n(){const r=`${tt(e.currentTime)} / ${tt(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!b(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!u&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.screenshot),r(t,"click",()=>{G(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;kt(t,o.setting),xt(E(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Y(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t),kt(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Y(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenWebOn),s=kt(t,o.fullscreenWebOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Y(t,i.get("Exit Web Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Web Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenOn),s=kt(t,o.fullscreenOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Y(t,i.get("Exit Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rge.get(t).option.selector}),it(t,"$control_item",{get:()=>ge.get(t).item}),it(t,"$control_value",{get:()=>ge.get(t).value})),ge.set(t,e)}function ye(t,e){t.innerHTML=e}function be(t,e,r,n,o){const{proxy:i}=t.events,a=E(n),s=r.selector;O(n,"art-control-selector");const c=document.createElement("div");O(c,"art-selector-value"),N(c,r.html),n.textContent="",N(n,c);const l=kt(n,'
');for(let f=0;f{if(a.closed)return;const o=T(n),i=r.selector.find(t=>o.includes(t.$control_item));if(!i)return;const s=++d,l=()=>!a.closed&&s===d,u=a.add(function(t,e){return he.set(t,e),()=>{he.get(t)===e&&he.delete(t)}}(n,l));try{if(e(i),a.closed)return;if(r.onSelect){const e=await r.onSelect.call(t,i,i.$control_item,n);if(l()){const t=c.contains(c.ownerDocument.activeElement);ye(c,e),ge.get(i)?.refresh?.(t)}}}catch(p){console.warn("ArtPlayer selector failed:",p)}finally{u()}});o.push(u);const p=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(me));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,c=!1,l=!1,d="",u=0;const p=()=>i.length>0&&(c||s&&!l),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(me)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{c=t,l=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},g=e=>{e&&!t.closed&&((e.querySelector(me)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},v=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",g(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};xt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&v()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(me)||(b.tabIndex=-1,xt(t,b,()=>{b.click(),y()}))}return mt(t,r,"keydown",t=>{const e=t;!wt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(bt(e),v("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(bt(e),y()))}),mt(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&v()}),mt(t,n,"keydown",t=>{const e=t;if(!wt(e)||e.defaultPrevented)return;if("Escape"===e.key)return bt(e),void y();const r=i.indexOf(e.target);if(r<0)return;let n;switch(1!==e.key.length&&(d=""),e.key){case"ArrowDown":n=Math.min(r+1,i.length-1);break;case"ArrowUp":n=Math.max(r-1,0);break;case"Home":n=0;break;case"End":n=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void bt(e);default:{if(1!==e.key.length||" "===e.key)return;const t=Date.now();d=t-u<500?d+e.key.toLocaleLowerCase():e.key.toLocaleLowerCase(),u=t;const o=[...d].every(t=>t===d[0])?d[0]:d;for(let e=1;e<=i.length;e++){const t=(r+e)%i.length;if(i[t].textContent?.trim().toLocaleLowerCase().startsWith(o)){n=t;break}}}}bt(e),void 0!==n&&g(i[n])}),mt(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),mt(t,e,"mouseenter",()=>{s=!0,m(c)}),mt(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),mt(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,c,l,String(r.tooltip||r.name||c.textContent||t.i18n.get("Open")));for(const f of s)ge.get(f).refresh=p}class we extends Ft{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},c=()=>{i=!0,s()},l=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(o?.dispose(),n=e.ownerDocument,o=t.child(),mt(o,n,"keydown",c,{capture:!0}),mt(o,n,"mousedown",l,{capture:!0}),mt(o,n,"touchstart",l,{capture:!0,passive:!0}))};return d(),mt(t,e,"keydown",c,{capture:!0}),mt(t,e,"mousedown",l,{capture:!0}),mt(t,e,"touchstart",l,{capture:!0,passive:!0}),mt(t,e,"focusin",()=>{d(),s()}),mt(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}($(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=S(t,n);a(r,"focusin",e=>{t.isFocus=!0,t.isInput="INPUT"===e.target?.tagName}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{u||(this.show=!0)}),i("click",()=>{u?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=L(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(D(r,"art-hide-cursor"),O(r,"art-hover"),this.timer=Date.now()):(O(r,"art-hide-cursor"),D(r,"art-hover"))}),this.init(),b(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=E(e),{on:i}=S(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);t.observe(r),o.add(()=>{t.disconnect()})}else if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){fe(this)}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:X(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){if(!t)return;const e=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);ye(t.$control_value,t.html);for(let r=0;rthis.check(t),t,e,r)}}function xe(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{if(w(t))return;const n=L(r,e);t.isInput=n&&"INPUT"===r.target?.tagName,t.isFocus=n,t.emit(n?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),b(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(w(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:c}=r,l=o.filter(t=>n-t<=a);switch(l.length){case 1:if(t.emit("click",e),w(t))return;(!u||!t.isLock&&i)&&G(t.toggle()),o=l;break;case 2:if(t.emit("dblclick",e),w(t))return;u?!t.isLock&&s&&G(t.toggle()):c&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function ke(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!w(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),b(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(w(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:Qt(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ie(t,i,()=>n(s))}catch(c){throw e===s&&r(),c}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,c=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,c].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const l=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===l||2===l:3===l||4===l))return;const d=J((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=J(i.time+t.duration*d*c,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",J(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${tt(u)} / ${tt(t.duration)}`))},cancel:r}}const $e=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],Ee=["resize","scroll","orientationchange"];const Ae=new WeakMap;function Ce(t){const e=Ae.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function Se(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=Se(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ce(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(o?.capture),once:Boolean(o?.once),passive:o?.passive,signal:o?.signal},c="boolean"===typeof s?s:s.capture,l="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||l?.aborted)return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,c),l?.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):l?.aborted?p():l?.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function Te(t){return(e,r)=>{if(w(t))return;const n=(...e)=>{if(!w(t))return r(...e)};t.on(e,n),b(t).add(()=>{t.off(e,n)})}}function Le(t){if(!t.constructor.USE_RAF)return;const e=b(t);let r=()=>{};const n=()=>{w(t)||(t.playing&&t.emit("raf"),w(t)||(r=function(t,e){if(t.closed)return ht;let r=!0,n=ht;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),Te(t)("destroy",()=>r())}class Pe{constructor(t){this.destroyEvents=new Set,function(t,e){Ae.set(t,{scope:b(e),cleaning:!1})}(this,t),b(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),xe(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{w(t)||(O(r,"art-hover"),t.emit("hover",!0,e))},e=>{w(t)||(D(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{w(t)||t.emit("mousemove",e)})}(t,this),function(t,e){const{option:r,constructor:n}=t,o=Te(t);o("resize",()=>{const{aspectRatio:e,notice:n}=t;"standard"===t.state&&r.autoSize&&t.autoSize(),w(t)||(t.aspectRatio=e,w(t)||(n.show=""))});const i=b(t);let a=()=>{};const s=()=>{w(t)||(a(),a=gt(i,()=>t.emit("resize"),n.RESIZE_TIME))};o("window:orientationchange",s),o("window:resize",s);const c=t.template.$player.ownerDocument.defaultView?.screen?.orientation;"function"===typeof c?.addEventListener&&e.proxy(c,"change",s)}(t,this),function(t,e){if(!u||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=ke(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=b(t),a=Te(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=o?.innerHeight||n.documentElement.clientHeight,a=o?.innerWidth||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,c=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&c}(n,r.SCROLL_GAP)),w(t)||(s=!0,gt(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;b(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){if(w(t))return;const a=++n,s={disposers:[]},c=()=>a!==n||w(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,a=i.window||n.ownerDocument?.defaultView||window,l=(n,o,i)=>{for(const a of o){if(c())return;s.disposers.push(e.proxy(n,a,e=>{r!==s||w(t)||t.emit(`${i}:${a}`,e)}))}};l(o,$e,"document"),l(a,Ee,"window")}catch(d){throw o(s),d}if(c())return void o(s);const l=r;r=s,o(l)}i(),e.bindGlobalEvents=i}(t,this),Le(t)}proxy(t,e,r,n={}){return Array.isArray(e),Se(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ce(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Me(t){if(t&&1===t.nodeType)return t}function ze(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function Re(t,e){if(function(t){return yt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const r=function(t,e){const r=t.target;return 9===r?.nodeType?r:r?.ownerDocument||t.view?.document||e}(t,e);let n=Me(r.activeElement);for(;n?.shadowRoot?.activeElement;)n=Me(n.shadowRoot.activeElement);if(n&&ze(n))return!1;const o=Me(t.composedPath?.()[0])||Me(t.target),i="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(i||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(i?",a[href]":"");if(o?.closest?.(t)||n?.closest?.(t))return!1}return!o||!ze(o)}const Oe=new WeakMap;class De{constructor(t){this.art=t,this.keys={},Oe.set(this,{subscribed:!1}),u||this.init()}init(){const t=this.art;if(w(t))return;const e=Oe.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{G(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!w(t)){if(t.isFocus&&Re(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ie={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ie);class Ne{constructor(t){this.art=t,this.languages={"zh-cn":Ie},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=st(this.languages,t)&&this.languages[t]||{}}get(t){return st(this.language,t)&&this.language[t]||t}update(t){this.languages=lt(this.languages,t),this.init()}}const _e={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class We{constructor(t){const e={..._e,...t.option.icons};for(const r in e)it(this,r,{get:()=>B(r,e[r])})}}const Fe=new WeakMap;function Ve(t,e,r){const n=()=>!e.closed&&!w(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:c,$video:l}}=t,d=i(c,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!w(t),s=()=>n.classList.contains("art-info-show"),c=t.i18n.get("Close");if(!a())return;const l=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",c),o.setAttribute("role","group"),o.setAttribute("aria-label",l),xt(e,i,()=>i.click(),s),mt(e,o,"keydown",t=>{const e=t;a()&&s()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),r())});const d=e=>{if(!a())return;const r=n.ownerDocument,s=r.activeElement;if(e)o.contains(s)||(Fe.delete(t),s&&n.contains(s)&&(Fe.set(t,jt(s)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Fe.get(t);if(Fe.delete(t),!o.contains(s))return;const i=e&&r.defaultView?.getComputedStyle(e).visibility;e?.isConnected&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):At(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{try{for(const t of u){if(!n())return;const e=Reflect.get(l,t.dataset.video??"undefined");if(!n())return;const r="number"===typeof e?e.toFixed(2):e;if(!n())return;if(t.textContent!==r){const e=null==r?null:`${r}`;if(!n())return;t.textContent=e}}n()&>(e,f,a.INFO_LOOP_TIME)}catch(t){o(t)}};n()&&f()}catch(i){o(i)}}const Ye=new WeakMap;class Be extends Ft{constructor(t){super(t),this.name="info",Ye.set(this,{revision:0}),u||this.init()}init(){const t=Ye.get(this),e=++t.revision;if(t.scope?.dispose(),w(this.art)||t.revision!==e)return;const r=b(this.art).child();t.scope=r,r.add(()=>{t.scope===r&&(t.scope=void 0)}),Ve(this.art,r,()=>{this.show=!1})}}class He extends Ft{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{H(i,"display","none"),H(s,"display",null),w(t)&&(c=!0)};var d;t.on("destroy",l),(d=t,y(d).finalizers).add(()=>{try{c||l()}finally{t.off("destroy",l)}}),w(t)||n.proxy(e.$state,"click",()=>{w(t)||G(t.play())})}}const Ue=new WeakMap;function Xe(t){const e=Ue.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class Ge{constructor(t){this.art=t,this.timer=null,Ue.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),b(t).add(()=>{t.off("destroy",e)}),b(t).add(()=>{this.destroy()})}destroy(){Xe(this)}set show(t){if(w(this.art))return;const e=Ue.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){Xe(this);const i=e.revision,a=()=>!w(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(O(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const c={};e.pending=c;const l=setTimeout(()=>{if(w(this.art)||e.pending!==c)return;e.pending=void 0;const t=e.revision;o.textContent="",w(this.art)||e.revision!==t||D(n,"art-notice-show")},s);a()?this.timer=l:clearTimeout(l)}else D(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function Ke(t,e){return function(t,e){const r=lt(e,t);return r.container=t.container,o(r,_t)}(t,e)}function Ze({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function Je(t,e){if(!Ze(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return Ze(r)?r:void 0}function Qe(t,e,r,n=!1){const o=e=>{w(t)||r(e)};t[n?"once":"on"](e,o),b(t).add(()=>{t.off(e,o)})}function tr(t,e,r){for(const[n,o]of e){if(w(t)||r&&!r())return;t[n].show=o}}function er(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=Jt(t),c=0;return{reset(){c=0,a?.dispose(),D(i,"art-error")},loadStart(){D(i,"art-error")},schedule(l){(async l=>{if(w(t))return;const d=Jt(t);if(d!==s&&(s=d,c=0),a&&!a.closed)return;const u=d.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!w(t)&&!u.closed&&d===Jt(t),f=c{console.warn("ArtPlayer reconnect failed:",t)})}}}const rr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],nr=(()=>{if("undefined"===typeof document)return!1;const t=rr[0],e={};for(const r of rr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),or={change:nr.fullscreenchange,error:nr.fullscreenerror},ir={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{ir.off("change",o),r()};ir.on("change",o);const i=t[nr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!ir.isFullscreen)return void t();const r=()=>{ir.off("change",r),t()};ir.on("change",r);const n=document[nr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>ir.isFullscreen?ir.exit():ir.request(t,e),onchange(t){ir.on("change",t)},onerror(t){ir.on("error",t)},on(t,e){const r=or[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=or[t];r&&document.removeEventListener(r,e,!1)},raw:nr};function ar(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(ir,{isFullscreen:{get:()=>Boolean(document[nr.fullscreenElement])},element:{enumerable:!0,get:()=>document[nr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[nr.fullscreenEnabled])}});const sr=new WeakMap;function cr(t){try{Promise.resolve(t()).catch(()=>{})}catch{}}function lr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=sr.get(t);if(!n){n=new WeakMap,sr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),cr(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),cr(i))}function dr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,c=!1,l=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!c){c=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{c||(c=!0,l=!0,a(),d&&!u&&r&&lr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(mt(i,t.document,t.changeEvent,m),mt(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){sr.get(t.document)?.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,l&&!u&&r&&lr(t),u?Promise.resolve(e).then(()=>{l?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(g){h(!0,g)}return{promise:f,cancel:()=>i.dispose()}}function ur(t,e){const r=b(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),c=0,l=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch{}}return r.add(()=>{c+=1,l=!1,n.classList.remove("art-fullscreen"),f()}),mt(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){return sr.get(t.document)?.has(t.target)??!1}(e))return;if(r&&u)return void f();if(r===s||w(t))return;s=r;const o=c,a=()=>w(t)||i()!==r||o!==c&&l!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),mt(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!w(t)&&t.emit("fullscreenError",r)}),{get:()=>!w(t)&&i(),set(n){if(w(t))return Promise.resolve();const o=++c;if(l=Boolean(n),l?u=!1:d&&(u=!0),a?.cancel(),a=void 0,d=!1,!l&&!i())return Promise.resolve();p=!0,d=l;const s=dr(e,r,l,()=>{!w(t)&&l||f()},()=>!i());p=!1,c===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw w(t)||c!==o||(t.notice.show=e),e}).finally(()=>{c===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const pr=new WeakSet;function fr(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function hr(t){pr.delete(t),t.removeEventListener("webkitbeginfullscreen",mr),t.removeEventListener("webkitpresentationmodechanged",mr)}function mr(t){if(pr.has(this)&&fr(this,"webkitbeginfullscreen"===t.type)){hr(this);try{this.webkitExitFullscreen?.()}catch{}}}function gr(t){pr.add(t),t.addEventListener("webkitbeginfullscreen",mr),t.addEventListener("webkitpresentationmodechanged",mr)}function vr(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=fr(e),i=o,a=!1,s=0;const c=()=>fr(e,n);function l(r){if(w(t)||(l=e,pr.has(l)))return;var l;"boolean"===typeof r&&(n=r);const d=c();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>w(t)||c()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{s++,i=!1,a&&gr(e),c()&&e.webkitExitFullscreen?.()}),mt(r,e,"webkitbeginfullscreen",()=>l(!0)),mt(r,e,"webkitendfullscreen",()=>l(!1)),mt(r,e,"webkitpresentationmodechanged",()=>l());const d=()=>l();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!w(t)&&c(),set(r){if(w(t))return;const n=++s;if(i=Boolean(r),r){if(hr(e),t.state="fullscreen",w(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,gr(e)),c()&&e.webkitExitFullscreen()}}}function yr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function br({node:t,parent:e,next:r}){if(!e)return void t.parentNode?.removeChild(t);const n=r?.parentNode===e?r:null;t.parentNode===e&&t.nextSibling===n||e.insertBefore(t,n)}function wr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function xr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function kr(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const c=t.icons.play,l=t.icons.pause;if(o.closed)return;i.append(c,l),s.append(e,i),xt(o,e,()=>e.click(),r),xt(o,i,()=>(t.playing?l:c).click(),r);const d=t.i18n.get("Close");if(o.closed||w(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||w(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),mt(o,s,"keydown",t=>{const e=t;r()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),n())}),mt(o,e,"click",n),mt(o,c,"click",()=>{G(t.play())}),mt(o,l,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||w(t)||(i.setAttribute("aria-label",e),c.style.display=t.playing?"none":"flex",l.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};mt(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const c=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},l=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=wr(i.left,i.top,xr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",c),r.add(()=>{t.off("document:mousemove",c)}),t.on("document:mouseup",l),r.add(()=>{t.off("document:mouseup",l)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(c){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,c}}function $r(t){const{$player:e,$video:r}=t.template,n=b(t).child();let o,i,a=0,s=!1,c=!1;const l=()=>!w(t)&&e.classList.contains("art-mini"),d=function(t){const e=t.template.$player;let r;return{entering(){const n=e.ownerDocument,o=n.activeElement,i=o&&e.contains(o);t.template.$mini?.contains(o)||(r=i?jt(o):void 0);const a=i&&e.classList.contains("art-keyboard-focus");return e=>{!a||w(t)||n.activeElement!==o&&n.activeElement!==n.body||e?.()}},leaving(n){const o=e.ownerDocument,i=n?.contains(o.activeElement);return()=>{if(!i||w(t)||o.activeElement!==o.body&&!n?.contains(o.activeElement))return;const e=r&&o.defaultView?.getComputedStyle(r).visibility;r?.isConnected&&r.getClientRects().length&&"hidden"!==e&&"collapse"!==e&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):At(t)}}}}(t);function u(){if(i){const e=i,r=a;i=void 0;try{br(e)}catch(t){throw r!==a||i||(i=e),t}}}function p(){if(w(t))return;const r=++a;c=!1;const n=d.leaving(t.template.$mini);u(),w(t)||r!==a||(o?.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),w(t)||r!==a||t.emit("mini",!1)))}function f(){if(w(t))return;const h=++a;if(s)return void(c=!0);const m=d.entering();if(t.state="mini",!w(t)&&h===a){i??(i=yr(r)),e.classList.add("art-mini");try{if(!o){s=!0;try{o=kr(t,n,l,p)}finally{s=!1}}if(c)return c=!1,void f();if(!o||w(t))return;if(h!==a)return void(l()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),w(t)||h!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:{...wr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r),reset:!0}}(t.storage.get("left"),e,xr(o.element));if(w(t)||h!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),w(t)||h!==a)return;t.storage.set("left",i.left)}w(t)||h!==a||m(o.focus),w(t)||h!==a||t.emit("mini",!0)}catch(g){const r=c;throw c=!1,w(t)||h!==a&&!r||(u(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),g}}}return n.add(()=>{a++;try{u()}finally{o?.cancelDrag(),e.classList.remove("art-mini")}}),{get:l,set(t){t?f():p()}}}const Er=new WeakSet,Ar=t=>"picture-in-picture"===t.webkitPresentationMode;function Cr(t){Er.delete(t),t.removeEventListener("webkitpresentationmodechanged",Sr),t.removeEventListener("enterpictureinpicture",Sr)}function Sr(){if(Er.has(this)&&Ar(this)){Cr(this);try{this.webkitSetPresentationMode?.("inline")}catch{}}}function Tr(t){Er.add(t),t.addEventListener("webkitpresentationmodechanged",Sr),t.addEventListener("enterpictureinpicture",Sr)}function Lr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Pr(t,e,r){return new Promise((n,o)=>{if(w(t)||e===t.url)return void n();const i=te(t),a=i.scope.child();let s=!1;const c=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{c()});const l=()=>!s&&i.active(),d=t=>c(!0,t);i.onError=d;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!l())return;const u=a.child();let p=!1,f=!1,h=!1;const m=de(t,r,l),g=async()=>{if(t.aspectRatio=o,l()){if(n)try{await t.play()}catch{}l()&&(t.notice.show="",c())}},v=()=>{if(l()&&!f&&p)try{if(t.template?.$video?.seeking)return;if(!l())return;if(h||(h=!0,t.playbackRate=s),!m.ready()||!l()||f)return;f=!0,u.dispose(),g().catch(d)}catch(e){d(e)}},y={"video:error":d,"video:loadedmetadata":()=>{if(l())try{m.restore()}catch(t){d(t)}},"video:canplay":()=>{p=!0,v()},"video:seeked":v,seek:m.manual},b=a.child(),w=[],x=Object.keys(y);for(const e of x)Lr(b,t,e,t=>{i.acceptingEvents&&w.push([e,t])},!1);if(re(t,i,e),!l())return;if(t.notice.show="",!l())return;const k=()=>{if(b.dispose(),!e)return void c();const r={};for(const e of x)r[e]=Lr(u,t,e,y[e],"video:seeked"!==e);for(const[t,e]of w){if(!l()||u.closed)break;r[t](e)}w.length=0};i.assigned?k():i.onAssigned=k}catch(u){d(u)}})}function Mr(t,e){const{number:r,column:n,width:o,height:i,scale:a}=t,{imageWidth:s,videoWidth:c,videoHeight:l,progressWidth:d,position:u}=e,p=Number(n),f=Number(o)*Number(a)||s/p,h=Number(i)*Number(a)||f/(c/l),m=Math.floor(u/(d/Number(r)));return{height:`${h}px`,width:`${f}px`,backgroundPosition:`-${m%p*f}px -${Math.floor(m/p)*h}px`,left:u<=f/2?0:u>d-f/2?d-f+"px":u-f/2+"px"}}function zr(t){const{option:e,template:{$video:r}}=t;it(t,"url",{get:()=>r.src,async set(n){if(w(t))return;const o=function(t){const e=Kt.get(t);return Kt.delete(t),e||te(t)}(t);o.acceptingEvents=!1;try{if(!n)return void(await vt(o.scope)&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||K(n),s=e.customType[a];if(a&&s){if(!(await vt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const c=o.scope.child();let l=!1,d=!1;Lr(c,t,"video:canplay",()=>{l=!d}),Lr(c,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>ne(o,t))}else{if(!o.active())return;r.src=n}}finally{c.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};l?e():d||Lr(o.scope,t,"video:canplay",e)}}catch(i){ne(o,i)}finally{ee(o)}}})}const Rr=[function(t){const{template:{$video:e}}=t;it(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;it(t,"play",{async value(){const a=Qt(t),s=await i.play();if(!a())return s;const c=e.get("Play");if(!a())return s;if(r.show=c,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;it(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${tt(t.currentTime)} / ${tt(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;it(t,"forward",{set(e){r.seek=t.currentTime+e}}),it(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;it(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=J(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),it(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;it(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){ce.set(t,le(t)+1)}(t),e.currentTime=J(n,0,t.duration))}})},function(t){it(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Pr(t,e,0);it(t,"switchQuality",{value:e=>Pr(t,e,t.currentTime)}),it(t,"switchUrl",{value:e}),it(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;it(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;it(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!w(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=Je({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(w(t))return;"width"===r?.axis?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,w(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=Qt(t);return new Promise((a,s)=>{const c=r=>{try{!w(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,c):a(n.toDataURL("image/png"))}catch(l){c(l)}})}it(t,"getDataURL",{value:()=>o(!1)}),it(t,"getBlobUrl",{value:()=>o(!0)}),it(t,"screenshot",{value:async e=>{const n=Qt(t),o=await t.getDataURL();if(!w(t)&&n()){const i=e||`artplayer_${tt(r.currentTime)}`;!w(t)&&n()&&Z(o,`${i}.png`),!w(t)&&n()&&t.emit("screenshot",o)}return o}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(w(t))return;const i=function(t){const e=ir.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>ar(t,e.requestFullscreen,void 0),exit:()=>ar(r,e.exitFullscreen)}}(o);i?it(t,"fullscreen",ur(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?it(t,"fullscreen",vr(t)):it(t,"fullscreen",{get:()=>!1,set(){w(t)||(r.show=e.get("Fullscreen Not Supported"))}}),it(t,"fullscreen",ct(t,"fullscreen"))};t.once("video:loadedmetadata",i),b(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(br(t.placement),r()))}return b(t).add(()=>{n+=1;const t=r;if(r=void 0,t)try{o(t,()=>!0)}catch(i){try{e.parentNode!==t.placement.parent&&e.parentNode?.removeChild(e)}catch(a){throw new h([i,a])}throw i}}),i=>{if(w(t))return;const a=++n,s=()=>a===n&&!w(t),c=function(t){const e=t.ownerDocument?.activeElement,r=e&&t.contains(e);return()=>{r&&e.isConnected&&t.contains(e)&&e.ownerDocument.activeElement===e.ownerDocument.body&&e.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:yr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(l){throw s()&&o(n,s)&&(r=void 0,c()),l}if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);it(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?it(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=b(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,c=!1,l=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch{}}function u(e,r,n){e.then(()=>{!r||!w(t)&&a||d()},e=>{w(t)||l!==n||(t.notice.show=e)}).finally(()=>{l===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{l++,a=!1,d()}),mt(n,e,"enterpictureinpicture",()=>{if(c)return void d();if(!o()||i)return;const e=l;t.state="pip",!w(t)&&e===l&&o()&&(i=!0,t.emit("pip",!0))}),mt(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!w(t)&&o()?e:null,set(n){if(w(t))return;const i=++l;if(a=Boolean(n),a?c=!1:s&&(c=!0),s=!1,a){if(t.state="pip",w(t)||l!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw l===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?it(t,"pip",function(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(w(t)||Er.has(e))return;const s=Ar(e);if(s&&(o=!1),s===n&&!r)return;const c=i;s&&(t.state="pip"),w(t)||i!==c||Ar(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Tr(e),Ar(e)&&e.webkitSetPresentationMode("inline")});for(const c of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])mt(r,e,c,()=>s());return{get:()=>!w(t)&&Ar(e),set(r){if(w(t))return;const n=++i,c=a;if(r){if(!1===e.webkitSupportsPresentationMode?.("picture-in-picture"))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Cr(e),t.state="pip",w(t)||i!==n)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(l){throw n===i&&(o=!1),l}}else o&&(o=!1,Tr(e)),Ar(e)&&e.webkitSetPresentationMode("inline");w(t)||n!==i||c!==a||Ar(e)!==Boolean(r)||s(!0)}}}(t)):it(t,"pip",{get:()=>!1,set(){w(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;it(t,"loaded",{get:()=>r.loadedTime/e.duration}),it(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){it(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;it(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;it(t,"autoSize",{value(){if(w(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!Ze(o))return;const i=M(e),a=Je(i,o.width/o.height);a&&!w(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;it(t,"rect",{get:()=>M(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}it(t,"x",{get:()=>e.left+window.pageXOffset}),it(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;it(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){w(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(Q(o))}`,w(t)||t.emit("flip",o))}})},function(t){it(t,"mini",$r(t))},function(t){const{template:{$poster:e}}=t;it(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(t){H(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;it(t,"autoHeight",{value(){if(w(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!Ze(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||w(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;it(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){it(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){it(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];it(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;nn.$track?.offset||0,set(o){const{cues:i}=t.subtitle;if(!n.$track||0===i.length)return;const a=J(o,-10,10);n.$track.offset=a;for(let e=0;e{if(!w(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,w(t)||it(t,"airplay",{value(){if(!w(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(w(t))return;Reflect.apply(e,o,[]),w(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");w(t)||(r.show=n)}}}))},function(t){it(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:i?.html||"",selector:e,async onSelect(e,r,i){const a=function(t){return t&&he.get(t)||(()=>!0)}(i);if(await t.switchQuality(e.url),!w(t)&&a()){const r=`${o.get("Switch Video")}: ${e.html}`;!w(t)&&a()&&(n.show=r)}return e.html}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,s=b(t).child(),c=!1;function l(){const e=s;s=b(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function d(){const i=a,c=s;if(!i||!o)return;const l=()=>!w(t)&&!c.closed&&s===c&&a===i&&i.sourceActive()&&t.controls?.thumbnails===i.element;if(!l())return;const d=r.clientWidth*i.percentage;if(!(d>0&&d{const f=t.controls?.thumbnails,{url:h,scale:m}=e.thumbnails;if(!w(t)&&f&&h&&("hover"===r||"played"===r&&p&&u)){if(i!==f){const t=E(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,l())})}if(a={percentage:n,element:f,sourceActive:Qt(t)},o)d();else if(!c){const t=s;c=!0,function(t,e,r){return q(t,e,r)}(h,m,t).then(e=>{s!==t||t.closed||(c=!1,o=e,d())}).catch(e=>{s!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),it(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{w(t)||!e.url||t.option.isLive||w(t)||(t.option.thumbnails=e,l())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{w(t)||t.emit(`video:${e.type}`,e)})}(t);const e=er(t);!function(t,e){Qe(t,"video:canplay",()=>{e.reset(),tr(t,[["loading",!1]])}),Qe(t,"video:canplay",()=>{tr(t,[["loading",!1],["controls",!0],["mask",!0]]),w(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;Qe(t,"video:ended",()=>{if(e.loop){const e=Qt(t);if(t.seek=0,w(t)||!e())return;G(t.play()),e()&&tr(t,[["controls",!1],["mask",!1]],e)}else tr(t,[["controls",!0],["mask",!0]])})}(t),Qe(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;Qe(t,"video:loadedmetadata",()=>{t.emit("resize"),u&&tr(t,[["loading",!1],["controls",!0],["mask",!0]])}),Qe(t,"video:loadstart",()=>{e.loadStart(),tr(t,[["loading",!0],["mask",!1],["controls",!0]])}),Qe(t,"video:pause",()=>{tr(t,[["controls",!0],["mask",!0]])}),Qe(t,"video:play",()=>{tr(t,[["mask",!1]]),w(t)||H(r,"display","none")}),Qe(t,"video:playing",()=>tr(t,[["mask",!1]])),Qe(t,"video:progress",()=>{t.playing&&tr(t,[["loading",!1]])}),Qe(t,"video:seeked",()=>tr(t,[["loading",!1],["mask",!0]])),Qe(t,"video:seeking",()=>tr(t,[["loading",!0],["mask",!1]])),Qe(t,"video:timeupdate",()=>tr(t,[["mask",!1]])),Qe(t,"video:waiting",()=>tr(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(w(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(w(t))return;const r=e.moreVideoAttr[s];if(w(t))return;t.attr(s,r)}if(w(t))return;if(e.muted){const r=e.muted;if(w(t))return;t.muted=r}if(w(t))return;if(e.volume){const r=J(e.volume,0,1);if(w(t))return;n.volume=r}if(w(t))return;const i=r.get("volume");if(w(t))return;if("number"===typeof i&&(n.volume=J(i,0,1)),w(t))return;if(e.poster){const r=`url(${e.poster})`;if(w(t))return;H(o,"backgroundImage",r)}if(w(t))return;if(e.autoplay){const r=e.autoplay;if(w(t))return;n.autoplay=r}if(w(t))return;if(e.playsInline){if(w(t))return;if(n.playsInline=!0,w(t))return;n["webkit-playsinline"]=!0}if(w(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(w(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(w(t))return;const r=e.cssVar[s];if(w(t))return;t.cssVar(s,r)}if(w(t))return;const a=e.url;w(t)||(t.url=a)}];class Or{constructor(t){if(!w(t)){zr(t);for(const e of Rr){if(w(t))return;e(t)}}}}const Dr=new WeakMap,Ir="art-auto-orientation-fullscreen";function Nr(t){if(Dr.get(t.orientation)===t)try{t.orientation.unlock()}catch{}}const _r="art-auto-orientation",Wr=["width","height","transform-origin","transform"];function Fr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return Ze(t)&&Ze(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=b(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(_r);r.classList.remove(_r),n&&(t.isRotate=!1,w(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=z();if(w(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;o??(o=Wr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(_r),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{w(t)||(r?o?s(!1):e()&&(i(),i=gt(n,()=>{o||s(!0)},Number(t.constructor.AUTO_ORIENTATION_TIME??0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(Ir),t&&(t.cancelled=!0,Nr(t),t.settled&&Dr.get(t.orientation)===t&&Dr.delete(t.orientation))}return b(t).add(o),i=>{if(w(t))return;if(!i)return void o();if(n&&!n.cancelled&&Dr.get(n.orientation)===n)return;const a=r.ownerDocument.defaultView?.screen?.orientation;if("function"!==typeof a?.lock||"function"!==typeof a.unlock||!e())return;const s={orientation:a,cancelled:!1,settled:!1};n=s,Dr.set(a,s);const c=()=>!w(t)&&!s.cancelled&&n===s&&Dr.get(a)===s,l=e=>{s.settled=!0;const o=c();Dr.get(a)===s&&Dr.delete(a),n===s&&(n=void 0),o&&(r.classList.remove(Ir),t.notice.show=e)};try{const t=a.lock(a.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{s.settled=!0,c()?r.classList.add(Ir):(Nr(s),Dr.get(a)===s&&Dr.delete(a))}).catch(l)}catch(d){l(d)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),b(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Vr(t){return t.get("times")||{}}function Yr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||w(t))return()=>{};const s=$t(".art-auto-playback-last",a),c=$t(".art-auto-playback-jump",a),l=$t(".art-auto-playback-close",a);kt(l,r.close);const d=E(a);let u,p=0;const f=()=>{const r=++p;if(u?.dispose(),d.closed||w(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!w(t);f.add(()=>{u===f&&(u=void 0,H(a,"display","none"))});const m=Jt(t).add(()=>{f.dispose()});f.add(()=>{m()});const g=Vr(n)[t.option.id||t.option.url];if(!h())return;if(H(a,"display","none"),!h()||!g||!(g>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(H(a,"display","flex"),!h())return;const v=`${e.get("Last Seen")} ${tt(g)}`;if(!h())return;if(s.textContent=v,!h())return;const y=e.get("Jump Play");if(!h())return;if(c.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(l,()=>{H(a,"display","none")}),!h())return;if(b(c,()=>{t.seek=g,h()&&(G(t.play()),h()&&(H(i,"display","none"),h()&&H(a,"display","none")))}),!h())return;let x=()=>{},k=!1;const $=()=>{!k&&h()&&(k=!0,x(),gt(f,()=>{h()&&H(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",$),x=f.add(()=>{t.off("video:timeupdate",$)}),k&&x()};return()=>{C(t,a,"ready",f),C(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;Te(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Vr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;w(t)||(o.length>i&&delete n[o[0]],n[a]=s,w(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Vr(e)},clear:()=>e.del("times"),delete(t){const r=Vr(e);return delete r[t],e.set("times",r),r}}}function Br(t){let e,r=0;return{start:n=>{const o=++r;if(e?.scope.dispose(),o!==r||w(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:Jt(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{e?.active||D(t.template.$player,"art-fast-forward")}}),gt(i.scope,()=>{if(e!==i||w(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||w(t))return;t.playbackRate=r,e!==i||i.scope.closed||w(t)||O(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,e?.scope.dispose()}}}function Hr(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Br(t),i=Te(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return I(r,"art-fast-forward")}}}function jr(t,e,r,n){let o;const i=()=>!r.closed&&!w(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),xt(r,e),mt(r,e,"keydown",t=>{const r=t;i()&&n()&&wt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(bt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function qr(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return I(n,"art-lock")}function i(){w(t)||(O(n,"art-lock"),w(t)||(t.isLock=!0,w(t)||t.emit("lock",!0)))}function a(){w(t)||(D(n,"art-lock"),w(t)||(t.isLock=!1,w(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=E(e);if(n.closed||w(t))return;const i=kt(e,r.lock);if(n.closed||w(t))return;const a=kt(e,r.unlock);if(n.closed||w(t))return;const s=jr(t,e,n,o);n.closed||w(t)||(o()?(H(i,"display","inline-flex"),n.closed||w(t)||H(a,"display","none")):H(i,"display","none"),C(t,e,"lock",e=>{w(t)||(H(i,"display",e?"inline-flex":"none"),n.closed||w(t)||H(a,"display",e?"none":"inline-flex"),n.closed||w(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function Ur(t){return Te(t)("control",e=>{e?D(t.template.$player,"art-mini-progress-bar"):O(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class Xr{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){w(t.art)||!e.miniProgressBar||e.isLive||t.add(Ur),!w(t.art)&&e.lock&&u&&t.add(qr),w(t.art)||!e.autoPlayback||e.isLive||t.add(Yr),!w(t.art)&&e.autoOrientation&&u&&t.add(Fr),!w(t.art)&&e.fastForward&&u&&!e.isLive&&t.add(Hr)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){X(!w(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(w(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(w(t.art))return t;let o=n;const i=st(t,o);if(w(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return w(t.art)||(X(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),w(t.art)||it(t,o,{value:r})),t}(this,t,e)}}const Gr=new WeakMap;function Kr(t){return!t.closed&&!Gr.get(t)}function Zr(t){Gr.set(t,(Gr.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(Gr.get(t)||1)-1;r?Gr.set(t,r):Gr.delete(t)}}const Jr=new WeakMap,Qr=new WeakMap,tn=["$parent","$parents","$option","$events","$formatted"];function en(t){const e=new Set;let r=t;for(;r&&!e.has(r);){e.add(r);const t=Jr.get(r);if(!t||!t.owner.active||t.owner.scope?.closed||!t.option.includes(r))return!1;if(!t.parent)return t.owner.root===t.option;if(Jr.get(t.parent)?.owner!==t.owner)return!1;r=t.parent}return!1}function rn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function nn(t){const e=Jr.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function on(t,e){for(let r=0;r{l&&l!==r&&l.dispose()},()=>pn(t,o)])try{e()}catch(d){d instanceof h?c.push(...d.errors):c.push(d)}if(r.closed||w(t)||(o.push(...i.splice(0)),un.set(r,o),ln.set(e,r),dn.set(e,n)),a(),c.length)throw new h(c)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function vn(t,e,r,n,o,i){const a=i||hn(e);if(!Kr(a)||w(t))return;const s=t.proxy(r,n,e=>{if(Kr(a)&&!w(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!Kr(a)||w(t)?t.events.remove(s):(nn(e).events.push(s),i&&i!==ln.get(e)&&i.add(()=>{const r=nn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function yn(t,e,r,n){const o=hn(e);if(!Kr(o)||w(t))return;const i=(...e)=>{if(Kr(o)&&!w(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}function bn(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}function wn(t){return Array.from(t.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter(t=>"-1"!==t.getAttribute("tabindex")&&bn(t))}function xn(t,e,r=!1){if(!t.show||w(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!Kr(sn(n)))return;const o=wn(n),i=n.querySelector(".art-setting-item.art-current"),a=o.find(t=>e===t||e?.contains(t))||(r?o[o.length-1]:o.find(t=>i?.contains(t))||o.find(t=>!t.classList.contains("art-setting-item-back"))||o[0]);a?.focus({preventScroll:!0}),w(t.art)||a?.scrollIntoView({block:"nearest",inline:"nearest"})}function kn(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!w(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!r?.getClientRects().length)&&xn(t,o)}}function $n(t){const{art:e}=t,r=b(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||w(e)||t.render()},a=i=>{r.closed||w(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&xn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!w(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&bn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&At(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),mt(r,e.template.$player,"keydown",r=>{const n=r;if(!wt(n)||n.defaultPrevented||w(e))return;const a=n.target;if(a===e.controls.setting){if("ArrowDown"===n.key||"ArrowUp"===n.key)if(bt(n),t.show)xn(t,void 0,"ArrowUp"===n.key);else{o="ArrowUp"===n.key;try{t.show=!0}finally{o=!1}}else"Escape"===n.key&&t.show&&(bt(n),i());return}if(!t.show||!t.$parent.contains(a))return;if("Escape"===n.key)return bt(n),void i();const s=a.closest(".art-setting-item");if(!s||a!==s&&!a.matches('button,a[href],[role="button"]'))return;const c=t.active&&t.cache.get(t.active);if(!c)return;const l=t.active?.find(t=>t.$item===s);if(!Kr(sn(c))||l&&!Kr(hn(l)))return void(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(n.key)&&bt(n));const d=wn(c),u=d.indexOf(a);if(u<0)return;let p;switch(n.key){case"ArrowDown":p=Math.min(u+1,d.length-1);break;case"ArrowUp":p=Math.max(u-1,0);break;case"Home":p=0;break;case"End":p=d.length-1;break;case"ArrowLeft":{const t=c.querySelector(".art-setting-item-back");return bt(n),void t?.click()}case"ArrowRight":return bt(n),void(l?.selector?.length&&a.click());default:return}bt(n),void 0!==p&&xn(t,d[p])});let s=!1;mt(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,gt(r,()=>{s=!1,r.closed||w(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function En(t){const{art:e,active:r}=t,{controls:n,constructor:{SETTING_WIDTH:o,SETTING_ITEM_HEIGHT:i},template:{$player:a,$setting:s,$bottom:c}}=e;if(!n.setting||!t.show||!r)return;const l=a.getBoundingClientRect(),d=n.setting.getBoundingClientRect(),p=l.width/a.offsetWidth||1,f=(d.left-l.left+d.width/2)/p-a.clientLeft,h=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:c}=t,l=Math.min(Math.max(0,c),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*l));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-l)),left:Math.max(l,Math.min(a-d/2,e-l-d))}}({containerWidth:a.clientWidth,containerHeight:a.clientHeight,requestedWidth:r[0]?.$parent?.width||o,rows:r.length+(r===t.option?0:1),rowHeight:i,controlCenter:f,bottom:Number.parseFloat(getComputedStyle(s).bottom)||0,padding:Number.parseFloat(getComputedStyle(c).paddingLeft)||0});s.style.height=`${h.height}px`,s.style.width=`${h.width}px`,e.isRotate||u||(f+h.width/2>a.clientWidth?(s.style.left="",s.style.right=""):(s.style.left=`${h.left}px`,s.style.right="auto"))}const An=new WeakMap;function Cn(t){An.delete(t)}const Sn=new WeakMap;function Tn(t,e){e?Sn.set(t,e):Sn.delete(t)}function Ln(t){const e=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),r=[],n=Sn.get(t),o=n?.();for(const i of["html","icon","tooltip"]){const t=e.get(i)?.value;t instanceof Node&&r.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{for(const r of Reflect.ownKeys(t))!e.has(r)&&Object.getOwnPropertyDescriptor(t,r)?.configurable&&Reflect.deleteProperty(t,r);for(const[r,n]of e)Object.defineProperty(t,r,n);o?.(),Tn(t,n);for(const{node:t,parent:e,next:n}of r)e?e.insertBefore(t,n?.parentNode===e?n:null):t.parentNode?.removeChild(t)}}function Pn(t){const e=t.$item?.querySelector(".art-setting-range");e&&e.setAttribute("aria-label",t.$html?.textContent||"")}const Mn=new WeakMap;async function zn(t,e,r,n,o,i,a,s){try{const c=hn(e),l=hn(i),d=(Mn.get(i)||0)+1;Mn.set(i,d);const u=()=>Kr(c)&&Kr(l)&&!w(t.art)&&Mn.get(i)===d;if(s?.(),!u())return;const p=await o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(c){console.warn("ArtPlayer setting callback failed:",c)}}function Rn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const On=new WeakMap;function Dn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof h?e.push(...r.errors):e.push(r)}if(e.length)throw new h(e)}function In(t){On.get(t)?.()}function Nn(t,e){const r=t.find(e.name);if(w(t.art))return r||e;if(!r)return t.add(e);const n=kn(t);Cn(r),In(r);const o=Ln(r),i=r.$item,a=i?.parentNode,s=i?.nextSibling,c=i?Rn(i):void 0,l=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=gn(t.art,e);r&&i.push(r)}for(const t of n)a.push(Zr(sn(t)))}catch(c){try{Dn([...i.reverse().map(t=>t.resume),...a])}catch(l){console.warn("ArtPlayer setting restore failed:",l)}throw c}let s=!0;return{items:r,resume(){s&&(s=!1,Dn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,Dn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>cn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);if(w(t.art))return void u.dispose();const e=r.$item;try{Dn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>c?.(),()=>{a&&i&&a.insertBefore(i,s?.parentNode===a?s:null)},()=>t.format(),()=>{if(f){t.active=l,l&&t.cache.has(l)&&W(t.cache.get(l),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!w(t.art)&&On.get(r)===h;for(const y of u.items)On.set(y,h);const g=b(t.art).add(()=>{p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!o?.enumerable||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)On.get(t)===h&&On.delete(t);return u.dispose(),n(r.$item),r}catch(v){throw m()&&h(),v}finally{g()}}const _n=new WeakMap;function Wn(t,e,r){it(t,`$${e}`,{configurable:!0,get:()=>r}),it(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",N(r,n),"html"===e&&Pn(t)}})}function Fn(t,e,r=!1){const n=function(t){const e=On.get(t);return()=>!e||On.get(t)===e}(e);if(!t.cache.has(e.$option))return;const o=t.cache.get(e.$option),i=e.$item;let a="selector";st(e,"switch")&&(a="switch"),st(e,"range")&&(a="range"),st(e,"onClick")&&(a="button");const{icons:s,constructor:c}=t.art;if(!n())return;const l=function(t,e,r=b(t)){const n=ln.get(e);(!n||Kr(n)||n.closed)&&mn(t,e);const o=r.child();return ln.set(e,o),dn.set(e,r),un.set(o,nn(e).events),o.add(()=>{pn(t,un.get(o))}),o}(t.art,e,sn(o)),d=()=>Kr(l)&&!w(t.art)&&n();if(!d())return;const u=document.createElement("div");try{if(Tn(e),O(u,"art-setting-item"),H(u,"height",`${c.SETTING_ITEM_HEIGHT}px`),u.dataset.name=e.name||"",u.dataset.value=String(e.value||""),!d())return;const n=kt(u,'
'),p=kt(u,'
'),f=document.createElement("div");switch(O(f,"art-setting-item-left-icon"),a){case"button":case"switch":case"range":{const t=e.icon||s.config;if(!d())return;N(f,t);break}case"selector":if(e.selector?.length){const t=e.icon||s.config;if(!d())return;N(f,t)}else N(f,s.check)}if(N(n,f),!d())return;Wn(e,"icon",f);const h=document.createElement("div");O(h,"art-setting-item-left-text");const m=e.html||"";if(!d())return;N(h,m),N(n,h),Wn(e,"html",h);const g=document.createElement("div");O(g,"art-setting-item-right-tooltip");const v=e.tooltip||"";if(!d())return;switch(N(g,v),N(p,g),Wn(e,"tooltip",g),a){case"switch":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=kt(t,s.switchOn),n=kt(t,s.switchOff),o=e.switch;if(!d())return;H(o?n:r,"display","none"),N(p,t),it(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!d())return;Tn(e,()=>{const t=i;return()=>{i=t}}),it(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,u.setAttribute("aria-checked",String(Boolean(t))),t?(H(n,"display","none"),H(r,"display",null)):(H(n,"display",null),H(r,"display","none"))}});break}case"range":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",N(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!d())return;Reflect.set(r,i,String(t))}O(r,"art-setting-range"),N(p,t),it(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!d())return;Tn(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),it(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(e.selector?.length){const t=document.createElement("div");O(t,"art-setting-item-right-icon"),N(t,s.arrowRight),N(p,t)}}if(!d())return;if(function(t,e,r,n){const{art:o}=t,i=hn(e),a=(t,r,n)=>vn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>zn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>zn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{if(e.selector?.length)t.render(e.selector);else{if(e.$parent?.onSelect)return zn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&O(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>zn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,u,a),!d())return;it(e,"$item",{configurable:!0,get:()=>u}),function(t,e,r,n,o){"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||e.selector?.length||r.setAttribute("aria-current",String(Boolean(e.default))),xt(o,r,()=>r.click(),()=>Kr(o)&&!w(t.art))):Pn(e)}(t,e,u,a,l),r&&i?.parentNode?i.replaceWith(u):N(o,u),e.mounted&&d()&>(l,()=>{if(!w(t.art))try{const r=e.mounted?.call(t.art,u,e);Promise.resolve(r).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(r){console.warn("ArtPlayer setting mounted failed:",r)}},0)}catch(p){try{l.dispose()}catch(f){console.warn("ArtPlayer setting cleanup failed:",f)}throw u.remove(),p}}function Vn(t,e=t.option){if(w(t.art))return;const r=kn(t),n=t.cache.get(e);if(n&&!Kr(sn(n)))return;const o=(_n.get(t)||0)+1;_n.set(t,o);const i=()=>_n.get(t)===o&&!w(t.art),a=t.active,s=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),c=()=>{t.active=a,a&&t.cache.has(a)&&W(t.cache.get(a),"art-current");for(const[e,r,n]of s)t.$parent.style.setProperty(e,r,n)};if(t.active=e,n)try{W(n,"art-current"),t.resize()}catch(l){throw i()&&t.cache.get(e)===n&&!sn(n).closed&&c(),l}else{const r=document.createElement("div");t.cache.set(e,r);const n=function(t,e,r){const n=b(t.art).child();return an.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,r),o=()=>!n.closed&&!w(t.art)&&t.cache.get(e)===r,a=[];try{if(!o())return;O(r,"art-setting-panel"),r.setAttribute("role","group"),r.setAttribute("aria-label",e[0]?.$parent?.$html?.textContent||t.art.i18n.get("Settings")),N(t.$parent,r),W(r,"art-current"),e[0]?.$parent&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=Qr.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=b(e).child(),n=(t,n)=>{if(r.closed||w(e))return;const o=(...t)=>{if(!r.closed&&!w(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=L(r,e.controls.setting),o=L(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||w(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),$n(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(Q(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{yn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){on(e,t)}check(t){!function(t,e){e?.$parent&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&W(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=Qr.get(t)||{active:!0},a=[],s=new Set,c=new Set(o),l=(t,e,r)=>{for(let n=0;nnn(t).parent},$parents:{get:()=>nn(t).parents},$option:{get:()=>nn(t).option},$events:{get:()=>nn(t).events},$formatted:{get:()=>!0}}),Jr.set(t,{parent:r,parents:n,option:o,events:a?.events||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return on(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){En(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&cn(n)}catch(i){r.push(i)}}try{mn(t.art,e)}catch(i){i instanceof h?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new h(r)}(this,t)}remove(t){const e=kn(this),r=this.find(t);X(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Cn(t),In(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>o?.remove(),()=>this.render()])try{s()}catch(a){a instanceof h?i.push(...a.errors):i.push(a)}if(i.length)throw new h(i);e()}update(t){return Nn(this,t)}add(t,e=this.option){if(w(this.art))return t;let r=!1;this.traverse(e=>{r||(r=e===t)});const n=e.length,o=r?void 0:function(t){const e={};An.set(t,e);const r=()=>An.get(t)===e;return{current:r,finish(){r()&&An.delete(t)}}}(t);let i=!1;try{e.push(t),this.format(),i=!0,this.createItem(t),this.render()}catch(a){if(w(this.art)||o&&!o.current())throw a;if(e[n]===t&&e.splice(n,1),!r&&i){try{this.inactivate(t)}catch(s){console.warn("ArtPlayer setting cleanup failed:",s)}t.$item?.remove()}throw a}finally{o?.finish()}return t}createHeader(t){!function(t,e){if(!t.cache.has(e.$option))return;const r=t.cache.get(e.$option),{icons:{arrowLeft:n},constructor:{SETTING_ITEM_HEIGHT:o}}=t.art,i=document.createElement("div");H(i,"height",`${o}px`),O(i,"art-setting-item"),O(i,"art-setting-item-back");const a=kt(i,'
'),s=document.createElement("div");O(s,"art-setting-item-left-icon"),N(s,n),N(a,s),N(a,e.$parent.html),vn(t.art,e.$parent,i,"click",()=>t.render(e.$parents),sn(r));const c=sn(r);i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||xt(c,i,()=>i.click(),()=>Kr(c)&&!w(t.art)),i.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${i.textContent?.trim()||""}`),N(r,i)}(this,t)}createItem(t,e=!1){Fn(this,t,e)}render(t=this.option){Vn(this,t)}}class Hn{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch{return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch{this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch{delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}const jn='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class qn{constructor(t){this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope)?.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}async run(t){if(this.active)try{return await Promise.race([t(),this.cancelled])}finally{this.cancel()}}}const Un=new WeakMap;function Xn(t){return Un.get(t)}function Gn(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const Kn=Ft;class Zn extends Kn{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=b(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return Un.set(t,n),r.add(()=>{Gn(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){return this.art.template.$video?.textTracks?.[0]}get activeCues(){return Array.from(this.textTrack?.activeCues||[])}get cues(){return Array.from(this.textTrack?.cues||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?j(r,t):H(r,t,e)}update(){!function(t){const e=Xn(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?ot(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}async switch(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i={...o.subtitle,...e,url:t},a=Xn(this),s=a.revision+1,c=await this.init(i);return!a.scope.closed&&a.revision===s&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),c}createTrack(t,e){!function(t,e,r){const n=Xn(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,c=s.parentNode,l=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const c=t.textTrack,l=c?i.proxy(c,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(l)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=l,s.onload=null,s.onerror=null,p=!0;try{f?.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&Gn(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,c&&c.insertBefore(s,l?.parentNode===c?l:null),f}}(this,t,e)}async init(t){const e=Xn(this),r=function(t){const e=t.request,r=new qn(t.scope);return t.request=r,t.revision+=1,e?.cancel(),r}(e),{notice:n,template:{$subtitle:i}}=this.art;return r.run(async()=>{if(!this.textTrack)return null;if(o(t,_t.subtitle),!t.url)return;let a;this.option=t,this.style(t.style);try{if(!r.active)return;const n=await fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const o=await n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||K(e.url)){case"srt":return{vtt:e.onVttLoad(dt(r))};case"ass":return{vtt:e.onVttLoad(pt(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(o,t);if(!r.active)return;const c=void 0===s?t.url:a=ut(s.vtt);if(!r.active)return;i.innerHTML="";const l=e.trackRevision+1;if(this.url!==c&&this.createTrack("metadata",c),!r.active||e.trackRevision>l)return;return a&&(e.ownedURL=a,a=void 0),c}catch(s){if(!r.active)return;throw i.innerHTML="",n.show=s,s}finally{a&&(e.scope.closed||this.url!==a?URL.revokeObjectURL(a):e.ownedURL=a)}})}}const Jn=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${i}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class Qn{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=R(e.container),X(this.$container,`No container element found by ${e.container}`)),X(P(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();X("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),X(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=v.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=y(t);o.rollback=r,v.set(e,t),o.releaseContainer=()=>{v.get(e)===t&&v.delete(e)}}(t,this.$container,Rn(this.$container)),function(t,e,r){const n=y(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return Jn}query(t){return R(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=Qn.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(w(this.art))return;!function(t){X(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),F(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&O(this.$player,"art-backdrop"),u&&O(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":O(this.$player,"art-destroy")}}const to=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class eo{on(t,e,r){const n=this.e||(this.e={});let o=to(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(to(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=to(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new Qn(this),b(this).closed)return;if(this.events=new Pe(this),b(this).closed)return;if(this.storage=new Hn,b(this).closed)return;if(this.icons=new We(this),b(this).closed)return;if(this.i18n=new Ne(this),b(this).closed)return;if(this.notice=new Ge(this),b(this).closed)return;if(this.player=new Or(this),b(this).closed)return;if(this.layers=new He(this),b(this).closed)return;if(this.controls=new we(this),b(this).closed)return;if(this.contextmenu=new Xt(this),b(this).closed)return;if(this.subtitle=new Zn(this),b(this).closed)return;if(this.info=new Be(this),b(this).closed)return;if(this.loading=new je(this),b(this).closed)return;if(this.hotkey=new De(this),b(this).closed)return;if(this.mask=new qe(this),b(this).closed)return;if(this.setting=new Bn(this),b(this).closed)return;if(this.plugins=new Xr(this),b(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),oo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${oo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=y(t);return e.rollback=void 0,!e.scope.closed})(this)&&no.push(this)}catch(r){try{x(this,no,!0,oo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return no}static get version(){return i}static get config(){return f}static get utils(){return ft}static get scheme(){return _t}static get Emitter(){return eo}static get validator(){return o}static get kindOf(){return o.kindOf}static get html(){return Qn.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:c?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator?.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){x(this,no,t,oo.REMOVE_SRC_WHEN_DESTROY)}}var io,ao;return oo.STYLE=jn,oo.DEBUG=!1,oo.CONTEXTMENU=!0,oo.NOTICE_TIME=2e3,oo.SETTING_WIDTH=250,oo.SETTING_ITEM_WIDTH=200,oo.SETTING_ITEM_HEIGHT=35,oo.RESIZE_TIME=200,oo.SCROLL_TIME=200,oo.SCROLL_GAP=50,oo.AUTO_PLAYBACK_MAX=10,oo.AUTO_PLAYBACK_MIN=5,oo.AUTO_PLAYBACK_TIMEOUT=3e3,oo.RECONNECT_TIME_MAX=5,oo.RECONNECT_SLEEP_TIME=1e3,oo.CONTROL_HIDE_TIME=3e3,oo.DBCLICK_TIME=300,oo.DBCLICK_FULLSCREEN=!0,oo.MOBILE_DBCLICK_PLAY=!0,oo.MOBILE_CLICK_PLAY=!1,oo.AUTO_ORIENTATION_TIME=200,oo.INFO_LOOP_TIME=1e3,oo.FAST_FORWARD_VALUE=3,oo.FAST_FORWARD_TIME=1e3,oo.TOUCH_MOVE_RATIO=.5,oo.VOLUME_STEP=.1,oo.SEEK_STEP=5,oo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],oo.ASPECT_RATIO=["default","4:3","16:9"],oo.FLIP=["normal","horizontal","vertical"],oo.FULLSCREEN_WEB_IN_BODY=!0,oo.LOG_VERSION=!0,oo.USE_RAF=!1,oo.REMOVE_SRC_WHEN_DESTROY=!0,io=oo,ao=jn,p&&(window.Artplayer=io,a("artplayer-style",ao),setTimeout(()=>{io.LOG_VERSION&&console.log(`%c ArtPlayer %c ${io.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),oo}); +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var e,r={exports:{}};var n=(e||(e=1,r.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const s=globalThis.CUSTOM_USER_AGENT??("undefined"===typeof navigator?"":navigator.userAgent),c=/^(?:(?!chrome|android).)*safari/i.test(s),l=/iPad|iPhone|iPod/i.test(s)&&("undefined"===typeof window||!window.MSStream),d=l||s.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,u=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)||d,p="undefined"!==typeof window&&"undefined"!==typeof document;const f={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class h extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class m{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new m,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof h?t.push(...e.errors):t.push(e)}if(t.length)throw new h(t)}}const g=new WeakMap,v=new WeakMap;function y(t){const e=g.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function b(t){return y(t).scope}function w(t){const e=y(t);return e.destroying||e.scope.closed}function x(t,e,r,n,o=!1){const i=y(t);if(i.destroying||i.scope.closed)return;i.destroying=!0;const a=[],s=t=>{try{t()}catch(e){a.push(...e instanceof h?e.errors:[e])}};n&&t.template?.$video&&s(()=>t.reset()),s(()=>i.scope.dispose()),s(()=>(t.template||i.mountingTemplate)?.destroy(r));const c=e.indexOf(t);-1!==c&&e.splice(c,1),t.isDestroy=!0,o||(i.releaseContainer?.(),i.releaseContainer=void 0),s(()=>t.emit("destroy")),s(()=>i.finalizers.dispose()),o&&i.rollback&&s(i.rollback),i.rollback=void 0,i.releaseContainer?.(),i.releaseContainer=void 0;for(const l of a.slice(1))console.warn("Additional ArtPlayer cleanup failure:",l);if(a.length)throw a[0]}const k=new WeakMap;function $(t,e){const r=b(t).child();return k.set(e,r),r}function E(t){const e=k.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function A(t){k.get(t)?.dispose()}function C(t,e,r,n){const o=E(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function S(t,e){return{on:(r,n)=>{C(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=E(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function T(t){if(t.composedPath)return t.composedPath();const e=[];let r=t.target;for(;r;)e.push(r),r=r.parentNode??null;return"undefined"===typeof window||e.includes(window)||e.push(window),e}function L(t,e){return T(t).includes(e)}function P(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function M(t){return t.getBoundingClientRect()}function z(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function R(t,e=document){return e.querySelector(t)}function O(t,e){return t.classList.add(e)}function D(t,e){return t.classList.remove(e)}function I(t,e){return t.classList.contains(e)}function N(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function _(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function W(t,e){_(t).forEach(t=>D(t,e)),O(t,e)}function F(t,e){return e.parentNode.replaceChild(t,e),t}function V(t){return document.createElement(t)}function Y(t,e,r="top"){u||(t.setAttribute("aria-label",e),O(t,"hint--rounded"),O(t,`hint--${r}`))}function B(t="",e=""){const r=V("i");return O(r,"art-icon"),O(r,`art-icon-${t}`),N(r,e),r}function H(t,e,r){return t.style[e]=r,t}function j(t,e){for(const r in e)H(t,r,e[r]);return t}function q(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new m;let a=!1,s=()=>{};function c(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function l(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void l(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const c=new Image;d(c,()=>l(c)),i.closed||(c.src=e)}catch(e){c(e)}}))}),i.closed||(n.src=t)}catch(u){c(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){c(u)}},e.onerror=()=>c(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class U extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function X(t,e){if(!t)throw new U(e);return t}function G(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function K(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function Z(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function J(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function Q(t){return t.charAt(0).toUpperCase()+t.slice(1)}function tt(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const et={"&":"&","<":"<",">":">","'":"'",'"':"""},rt={"&":"&","<":"<",">":">","'":"'",""":'"'},nt=/(&|<|>|'|")/g;function ot(t){return t.replace(/[&<>'"]/g,t=>et[t]||t)}const it=Object.defineProperty,{hasOwnProperty:at}=Object.prototype;function st(t,e){return at.call(t,e)}function ct(t,e){return Object.getOwnPropertyDescriptor(t,e)}function lt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?lt(o,i):i,it(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function dt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function ut(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function pt(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const ft=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:U,addClass:O,append:N,assToVtt:pt,capitalize:Q,clamp:J,createElement:V,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:it,download:Z,errorHandle:X,escape:ot,get:ct,getComposedPath:T,getExt:K,getIcon:B,getRect:M,getSafeAreaInsets:z,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:st,hasClass:I,includeFromEvent:L,inverseClass:W,isBrowser:p,isIOS:l,isIOS13:d,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:u,isSafari:c,loadImg:function(t,e){return q(t,e,void 0)},mergeDeep:lt,query:R,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:D,replaceElement:F,secondToTime:tt,setStyle:H,setStyleText:a,setStyles:j,siblings:_,silencePromise:G,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:dt,supportsFlex:P,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Y,unescape:function(t){return t.replace(nt,t=>rt[t]||t)},userAgent:s,vttToBlob:ut},Symbol.toStringTag,{value:"Module"}));function ht(){}function mt(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||s?.aborted)return ht;let c=ht;function l(e){a&&c(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,l,o),c=t.add(()=>{try{e.removeEventListener(r,l,i)}finally{s?.removeEventListener("abort",c)}}),s?.addEventListener("abort",c,{once:!0}),c}function gt(t,e,r){if(t.closed)return ht;let n=!0,o=ht;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function vt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=ht;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const yt=new WeakSet;function bt(t){yt.add(t),t.preventDefault()}function wt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function xt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;mt(t,e,"keydown",t=>{const e=t;a(e)&&wt(e)&&!e.defaultPrevented&&("Enter"===e.key?(bt(e),!e.repeat&&i()&&r()):" "===e.key&&(bt(e),!e.repeat&&i()&&(o=!0)))}),mt(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&wt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(bt(n),r())}),mt(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function kt(t,e){return N(t,e)}function $t(t,e){return e.querySelector(t)}const Et=new WeakSet;function At(t){const e=t.template.$player;!w(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Et.has(e)||(Et.add(e),b(t).add(()=>{Et.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Ct=new WeakSet,St="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Tt(t){return[t,...t.querySelectorAll(St)].find(t=>{if(!t.matches(St)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t);return"hidden"!==e?.visibility&&"collapse"!==e?.visibility})}function Lt(t,e,r){const n=e?.ownerDocument,o=n?.activeElement;if(!["control","contextmenu"].includes(t.name??"")||Ct.has(t)||!e||!n||!o||!e.contains(o))return()=>{};const i=t.art.template.$player,a=Array.from(i.querySelectorAll(`.art-${t.name}`)),s=a.indexOf(e),c=[...a.slice(s+1),...a.slice(0,s).reverse()];return Ct.add(t),()=>{if(Ct.delete(t),w(t.art)||!i.isConnected||n.activeElement!==n.body)return;const e=r?t.cache.get(r)?.$ref:void 0;for(const t of[...e?[e]:[],...c]){if(!i.contains(t))continue;const e=Tt(t);if(e)return void e.focus({preventScroll:!0})}At(t.art)}}const Pt="array",Mt="boolean",zt="string",Rt="number",Ot="object",Dt="function";function It(t,e,r){return X(e===zt||e===Rt||t instanceof Element,`${r.join(".")} require '${zt}' or 'Element' type`)}const Nt={html:It,disable:`?${Mt}`,name:`?${zt}`,index:`?${Rt}`,style:`?${Ot}`,click:`?${Dt}`,mounted:`?${Dt}`,tooltip:`?${zt}|${Rt}`,width:`?${Rt}`,selector:`?${Pt}`,onSelect:`?${Dt}`,switch:`?${Mt}`,onSwitch:`?${Dt}`,range:`?${Pt}`,onRange:`?${Dt}`,onChange:`?${Dt}`},_t={id:zt,container:It,url:zt,poster:zt,type:zt,theme:zt,lang:zt,volume:Rt,isLive:Mt,muted:Mt,autoplay:Mt,autoSize:Mt,autoMini:Mt,loop:Mt,flip:Mt,playbackRate:Mt,aspectRatio:Mt,screenshot:Mt,setting:Mt,hotkey:Mt,pip:Mt,mutex:Mt,backdrop:Mt,fullscreen:Mt,fullscreenWeb:Mt,subtitleOffset:Mt,miniProgressBar:Mt,useSSR:Mt,playsInline:Mt,lock:Mt,gesture:Mt,fastForward:Mt,autoPlayback:Mt,autoOrientation:Mt,airplay:Mt,proxy:`?${Dt}`,plugins:[Dt],layers:[Nt],contextmenu:[Nt],settings:[Nt],controls:[{...Nt,position:(t,e,r)=>{const n=["top","left","right"];return X("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}}],quality:[{default:`?${Mt}`,html:zt,url:zt}],highlight:[{time:Rt,text:zt}],thumbnails:{url:zt,number:Rt,column:Rt,width:Rt,height:Rt,scale:Rt},subtitle:{url:zt,name:zt,type:zt,style:Ot,escape:Mt,encoding:zt,onVttLoad:Dt},moreVideoAttr:Ot,i18n:Ot,icons:Ot,cssVar:Ot,customType:Ot},Wt=new WeakSet;class Ft{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return I(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?O(e,r):D(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t;if(w(this.art))return;if(e.html=e.html||"",o(e,Nt),!this.$parent||!this.name||e.disable)return;const r=e.name||`${this.name}${this.id}`,n=this.cache;X(!n.has(r),`Can't add an existing [${r}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=$(this.art,i),s=[],c=Object.getOwnPropertyDescriptor(this,r);let l=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){O(t,`art-${r}`),O(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):N(e,t),i.html&&N(t,i.html),i.style&&j(t,i.style),i.tooltip&&Y(t,i.tooltip)}(i,this.$parent,this.name,r,this.id,e),a.closed)return;if(e.click){("control"===this.name&&!e.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&xt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),e.click.call(this.art,this,t))});s.push(t)}if(e.selector&&["left","right"].includes(e.position)&&this.selector(e,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,r,i),l=!0,n.set(r,{$ref:i,events:s,option:e}),e.mounted&&e.mounted.call(this.art,i),i}catch(d){try{A(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw n.get(r)?.$ref===i&&n.delete(r),l&&this[r]===i&&(c?Object.defineProperty(this,r,c):delete this[r]),i.remove(),d}}remove(t){X(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Wt.has(e))return;const r=Lt(this,e.$ref);Wt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{A(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Wt.delete(e),r()}}update(t){const e=Lt(this,this.cache.get(t.name)?.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{e()}}}function Vt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Yt(t,e){const r=E(t);if(!r.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const n of t.querySelectorAll("[data-value]"))xt(r,n),n.setAttribute("aria-label",`${e}: ${n.textContent?.trim()??""}`);Vt(t)}}const Bt=new WeakMap;function Ht(t,e){e?Bt.set(t,e):Bt.delete(t)}function jt(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=Bt.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function qt(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function Ut(t){const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==e&&"collapse"!==e}class Xt extends Ft{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,$(t,this.$parent),u||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=S(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="1"]',t);n&&W(n,"art-current"),Yt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="default"]',t);n&&W(n,"art-current"),Yt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(Q(t))}`).join(""),i=r.get("Video Flip");return{...t,html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=S(e,t),n=R('[data-value="normal"]',t);n&&W(n,"art-current"),Yt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(W(r,"art-current"),Vt(t))})}}}}({name:"flip",index:30})),this.add(function(t){return e=>({...t,html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return{...t,html:`ArtPlayer ${i}`}}({name:"version",index:50})),this.add(function(t){return e=>({...t,html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let i=0;i{this.show=!0,a.closed||w(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:c}=M(n),{height:l,width:d}=M(o);let u=e-s,p=r-c;e+d>s+a&&(u=a-d),r+l>c+i&&(p=i-l),w(t)||j(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=E(o),a=()=>!i.closed&&!w(r);let s,c=!1,l="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?jt(t):n,Ht(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&Ut(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||c&&e===n.ownerDocument.body,d=s;s=void 0,c=!1,l="",Ht(o),i&&(d&&n.contains(d)&&Ut(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&At(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),Ht(o)}),mt(i,o,"focusin",()=>{c=!0});let m=!1;return mt(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,gt(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),mt(i,n,"keydown",n=>{const i=n;if(!a()||!wt(i)||i.defaultPrevented)return;if(("ContextMenu"===i.key||"F10"===i.key&&i.shiftKey)&&r.constructor.CONTEXTMENU&&!qt(i.target)){bt(i),u();const r=i.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&p()[0]?.focus({preventScroll:!0}))}if(!t.show||!o.contains(i.target))return;if("Escape"===i.key)return bt(i),void(t.show=!1);if("Tab"===i.key)return void(t.show=!1);if(qt(i.target))return;const s=p(),c=s.indexOf(i.target);let f;if("ArrowDown"===i.key||"ArrowRight"===i.key)f=s[(c+1)%s.length];else if("ArrowUp"===i.key||"ArrowLeft"===i.key)f=s[(c+s.length-1)%s.length];else if("Home"===i.key)f=s[0];else if("End"===i.key)f=s[s.length-1];else{if(1!==i.key.length||" "===i.key)return;{const t=i.key.toLowerCase();l=Date.now()-d>700?t:l+t,d=Date.now();const e=[...l].every(e=>e===t)?t:l;f=[...s.slice(c+1),...s.slice(0,c+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}bt(i),f?.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||qt(t.target))&&(u(),!0)}}(this,s);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),s(t.clientX,t.clientY))}),o(e,"click",t=>{L(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const Gt=new WeakMap,Kt=new WeakMap,Zt=new WeakMap;function Jt(t){return Zt.get(t)||b(t)}function Qt(t){const e=Gt.get(t),r=Zt.get(t);return()=>Gt.get(t)===e&&(!e||e.active())&&Zt.get(t)===r&&(!r||!r.closed)}function te(t){const e=Zt.get(t),r=b(t).child(),n=r.child();Zt.set(t,r),r.add(()=>{Zt.get(t)===r&&Zt.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!w(t)&&!n.closed&&Gt.get(t)===o};return Gt.set(t,o),n.add(()=>{Gt.get(t)===o&&Gt.delete(t),o.onAssigned=void 0,o.onError=void 0}),e?.dispose(),o}function ee(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&e?.()}function re(t,e,r){Kt.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{Kt.get(t)===e&&(Kt.delete(t),ee(e))}}function ne(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function oe(t,e){const{$progress:r}=t.template,{left:n}=M(r),o=J((u?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:tt(i),width:o,percentage:J(o/r.clientWidth,0,1)}}function ie(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=oe(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ae=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function se(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),c=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),mt(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!wt(r)||r.defaultPrevented)return;const i=ae.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;bt(r);const l=n();if(!a(l))return void c();const d="Home"===r.key?l.min:"End"===r.key?l.max:s(l.value,l)+i*l.step;o(s(d,l)),c()}),c()),c}const ce=new WeakMap;function le(t){return ce.get(t)||0}function de(t,e,r){let n,o=!1,i=!1,a=!1,s=le(t);const c=()=>a||le(t)!==s,l=()=>!!t.template?.$video?.seeking;return{restore(i=()=>{t.currentTime=e}){if(!r()||c())return;const d=le(t);i(),s=le(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!c()&&(o=l()))},manual(){a=!0},ready(){if(!r()||l())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!c()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!l()}}}function ue(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=E(e),{on:a}=S(t,e);let s=()=>{};const c=$t(".art-progress-hover",e),l=$t(".art-progress-loaded",e),d=$t(".art-progress-played",e),p=$t(".art-progress-highlight",e),f=$t(".art-progress-indicator",e),h=$t(".art-progress-tip",e);function m(r,n){const{width:o,time:i}=n||oe(t,r);h.textContent=i||"00:00";const a=h.clientWidth;o<=a/2?H(h,"left",0):o>e.clientWidth-a/2?H(h,"left",e.clientWidth-a+"px"):H(h,"left",o-a/2+"px")}r.indicator?N(f,r.indicator):H(f,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const g="played"===r&&a&&u;if("loaded"===r&&H(l,"width",100*n+"%"),"hover"===r&&(H(c,"width",100*n+"%"),L(a,p)?function(r){const{width:n}=oe(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;h.textContent=o??"";const i=h.clientWidth;n<=i/2?H(h,"left",0):n>e.clientWidth-i/2?H(h,"left",e.clientWidth-i+"px"):H(h,"left",n-i/2+"px")}(a):m(a),0===n?D(o,"art-progress-hover"):O(o,"art-progress-hover")),"played"===r&&(H(d,"width",100*n+"%"),H(f,"left",100*n+"%")),g){O(o,"art-progress-hover");m(a,{width:e.clientWidth*n,time:tt(n*t.duration)}),s(),s=gt(i,()=>{D(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){p.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function pe(t){return e=>({...t,html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ue(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=S(t,e),a=E(e);let s=0;const c=()=>{const e=Qt(t);return()=>!a.closed&&!w(t)&&e()},l=()=>{const t=++s,e=c();return()=>t===s&&e()};if(!u){let e;i(r,"click",e=>{e.target!==n&&ie(t,e,l())}),i(r,"mousemove",e=>{const r=c(),{percentage:n}=oe(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?l():void 0}),o("document:mousemove",r=>{const n=e;if(n?.()){const{second:o,percentage:i}=oe(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=E(e),{on:n}=S(t,e);let o,i=0;const a=se(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${tt(e)} / ${tt(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;o?.dispose();const s=r.child();o=s;const c=Jt(t).add(()=>{s.dispose()});s.add(()=>{c()}),s.add(()=>{o===s&&(o=void 0)});const l=Qt(t),d=()=>n===i&&!s.closed&&!w(t)&&l(),u=de(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function fe(t){const{option:e}=t.art;e.isLive||t.add(pe({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.play),s=kt(t,o.pause);function c(){t.setAttribute("aria-label",i.get("Play")),H(a,"display","flex"),H(s,"display","none")}function l(){t.setAttribute("aria-label",i.get("Pause")),H(a,"display","none"),H(s,"display","flex")}xt(E(t),t,()=>(e.playing?s:a).click()),Y(a,i.get("Play")),Y(s,i.get("Pause")),n(a,"click",()=>{G(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?l():c(),r("video:playing",()=>{l()}),r("video:pause",()=>{c()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>({...t,mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e,a=kt(t,o.volume),s=kt(t,o.volumeClose);for(const e of[a,s])xt(E(t),e),e.setAttribute("aria-label",i.get("Mute"));const c=kt(t,'
'),l=kt(c,'
'),d=kt(l,'
'),p=kt(l,'
'),f=kt(p,'
'),h=kt(f,'
'),m=kt(p,'
'),g=E(t);let v=0;const y=se(g,p,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||g.closed||w(e)||(e.volume=t/100)},"vertical");function b(t){const{top:e,height:r}=M(p);return 1-(t.clientY-e)/r}function x(){y();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)H(a,"display","none"),H(s,"display","flex"),H(m,"top","100%"),H(h,"top","100%"),d.textContent="0";else{const t=100*e.volume;H(a,"display","flex"),H(s,"display","none"),H(m,"top",100-t+"%"),H(h,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(x(),r("video:volumechange",x),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),u)H(c,"display","none");else{let t=!1;n(p,"mousedown",r=>{t=0===r.button,e.volume=b(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=b(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>({...t,style:u?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=S(e,t);function n(){const r=`${tt(e.currentTime)} / ${tt(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!b(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!u&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.screenshot),r(t,"click",()=>{G(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;kt(t,o.setting),xt(E(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Y(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t),kt(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Y(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=S(e,t),{icons:n}=e;xt(E(t),t),kt(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenWebOn),s=kt(t,o.fullscreenWebOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Y(t,i.get("Exit Web Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Web Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>({...t,tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=S(e,t),{icons:o,i18n:i}=e;xt(E(t),t);const a=kt(t,o.fullscreenOn),s=kt(t,o.fullscreenOff);H(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Y(t,i.get("Exit Fullscreen")),H(a,"display","none"),H(s,"display","inline-flex")):(Y(t,i.get("Fullscreen")),H(a,"display","inline-flex"),H(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rge.get(t).option.selector}),it(t,"$control_item",{get:()=>ge.get(t).item}),it(t,"$control_value",{get:()=>ge.get(t).value})),ge.set(t,e)}function ye(t,e){t.innerHTML=e}function be(t,e,r,n,o){const{proxy:i}=t.events,a=E(n),s=r.selector;O(n,"art-control-selector");const c=document.createElement("div");O(c,"art-selector-value"),N(c,r.html),n.textContent="",N(n,c);const l=kt(n,'
');for(let f=0;f{if(a.closed)return;const o=T(n),i=r.selector.find(t=>o.includes(t.$control_item));if(!i)return;const s=++d,l=()=>!a.closed&&s===d,u=a.add(function(t,e){return he.set(t,e),()=>{he.get(t)===e&&he.delete(t)}}(n,l));try{if(e(i),a.closed)return;if(r.onSelect){const e=await r.onSelect.call(t,i,i.$control_item,n);if(l()){const t=c.contains(c.ownerDocument.activeElement);ye(c,e),ge.get(i)?.refresh?.(t)}}}catch(p){console.warn("ArtPlayer selector failed:",p)}finally{u()}});o.push(u);const p=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(me));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,c=!1,l=!1,d="",u=0;const p=()=>i.length>0&&(c||s&&!l),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(me)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{c=t,l=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},g=e=>{e&&!t.closed&&((e.querySelector(me)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},v=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",g(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};xt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&v()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(me)||(b.tabIndex=-1,xt(t,b,()=>{b.click(),y()}))}return mt(t,r,"keydown",t=>{const e=t;!wt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(bt(e),v("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(bt(e),y()))}),mt(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&v()}),mt(t,n,"keydown",t=>{const e=t;if(!wt(e)||e.defaultPrevented)return;if("Escape"===e.key)return bt(e),void y();const r=i.indexOf(e.target);if(r<0)return;let n;switch(1!==e.key.length&&(d=""),e.key){case"ArrowDown":n=Math.min(r+1,i.length-1);break;case"ArrowUp":n=Math.max(r-1,0);break;case"Home":n=0;break;case"End":n=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void bt(e);default:{if(1!==e.key.length||" "===e.key)return;const t=Date.now();d=t-u<500?d+e.key.toLocaleLowerCase():e.key.toLocaleLowerCase(),u=t;const o=[...d].every(t=>t===d[0])?d[0]:d;for(let e=1;e<=i.length;e++){const t=(r+e)%i.length;if(i[t].textContent?.trim().toLocaleLowerCase().startsWith(o)){n=t;break}}}}bt(e),void 0!==n&&g(i[n])}),mt(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),mt(t,e,"mouseenter",()=>{s=!0,m(c)}),mt(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),mt(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,c,l,String(r.tooltip||r.name||c.textContent||t.i18n.get("Open")));for(const f of s)ge.get(f).refresh=p}class we extends Ft{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},c=()=>{i=!0,s()},l=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(o?.dispose(),n=e.ownerDocument,o=t.child(),mt(o,n,"keydown",c,{capture:!0}),mt(o,n,"mousedown",l,{capture:!0}),mt(o,n,"touchstart",l,{capture:!0,passive:!0}))};return d(),mt(t,e,"keydown",c,{capture:!0}),mt(t,e,"mousedown",l,{capture:!0}),mt(t,e,"touchstart",l,{capture:!0,passive:!0}),mt(t,e,"focusin",()=>{d(),s()}),mt(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}($(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=S(t,n);a(r,"focusin",e=>{t.isFocus=!0,t.isInput="INPUT"===e.target?.tagName}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{u||(this.show=!0)}),i("click",()=>{u?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=L(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(D(r,"art-hide-cursor"),O(r,"art-hover"),this.timer=Date.now()):(O(r,"art-hide-cursor"),D(r,"art-hover"))}),this.init(),b(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=E(e),{on:i}=S(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);return t.observe(r),void o.add(()=>{t.disconnect()})}if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){fe(this)}add(t){if(w(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:X(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){if(!t)return;const e=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);ye(t.$control_value,t.html);for(let r=0;rthis.check(t),t,e,r)}}function xe(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{if(w(t))return;const n=L(r,e);t.isInput=n&&"INPUT"===r.target?.tagName,t.isFocus=n,t.emit(n?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),b(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(w(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:c}=r,l=o.filter(t=>n-t<=a);switch(l.length){case 1:if(t.emit("click",e),w(t))return;(!u||!t.isLock&&i)&&G(t.toggle()),o=l;break;case 2:if(t.emit("dblclick",e),w(t))return;u?!t.isLock&&s&&G(t.toggle()):c&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function ke(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!w(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),b(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(w(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:Qt(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ie(t,i,()=>n(s))}catch(c){throw e===s&&r(),c}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,c=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,c].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const l=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===l||2===l:3===l||4===l))return;const d=J((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=J(i.time+t.duration*d*c,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",J(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${tt(u)} / ${tt(t.duration)}`))},cancel:r}}const $e=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],Ee=["resize","scroll","orientationchange"];const Ae=new WeakMap;function Ce(t){const e=Ae.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function Se(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=Se(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ce(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(o?.capture),once:Boolean(o?.once),passive:o?.passive,signal:o?.signal},c="boolean"===typeof s?s:s.capture,l="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||l?.aborted)return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,c),l?.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):l?.aborted?p():l?.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function Te(t){return(e,r)=>{if(w(t))return;const n=(...e)=>{if(!w(t))return r(...e)};t.on(e,n),b(t).add(()=>{t.off(e,n)})}}function Le(t){if(!t.constructor.USE_RAF)return;const e=b(t);let r=()=>{};const n=()=>{w(t)||(t.playing&&t.emit("raf"),w(t)||(r=function(t,e){if(t.closed)return ht;let r=!0,n=ht;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),Te(t)("destroy",()=>r())}class Pe{constructor(t){this.destroyEvents=new Set,function(t,e){Ae.set(t,{scope:b(e),cleaning:!1})}(this,t),b(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),xe(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{w(t)||(O(r,"art-hover"),t.emit("hover",!0,e))},e=>{w(t)||(D(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{w(t)||t.emit("mousemove",e)})}(t,this),function(t,e){const{option:r,constructor:n}=t,o=Te(t);o("resize",()=>{const{aspectRatio:e,notice:n}=t;"standard"===t.state&&r.autoSize&&t.autoSize(),w(t)||(t.aspectRatio=e,w(t)||(n.show=""))});const i=b(t);let a=()=>{};const s=()=>{w(t)||(a(),a=gt(i,()=>t.emit("resize"),n.RESIZE_TIME))};o("window:orientationchange",s),o("window:resize",s);const c=t.template.$player.ownerDocument.defaultView?.screen?.orientation;"function"===typeof c?.addEventListener&&e.proxy(c,"change",s)}(t,this),function(t,e){if(!u||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=ke(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=b(t),a=Te(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=o?.innerHeight||n.documentElement.clientHeight,a=o?.innerWidth||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,c=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&c}(n,r.SCROLL_GAP)),w(t)||(s=!0,gt(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;b(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){if(w(t))return;const a=++n,s={disposers:[]},c=()=>a!==n||w(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,a=i.window||n.ownerDocument?.defaultView||window,l=(n,o,i)=>{for(const a of o){if(c())return;s.disposers.push(e.proxy(n,a,e=>{r!==s||w(t)||t.emit(`${i}:${a}`,e)}))}};l(o,$e,"document"),l(a,Ee,"window")}catch(d){throw o(s),d}if(c())return void o(s);const l=r;r=s,o(l)}i(),e.bindGlobalEvents=i}(t,this),Le(t)}proxy(t,e,r,n={}){return Array.isArray(e),Se(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ce(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Me(t){if(t&&1===t.nodeType)return t}function ze(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function Re(t,e){if(function(t){return yt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const r=function(t,e){const r=t.target;return 9===r?.nodeType?r:r?.ownerDocument||t.view?.document||e}(t,e);let n=Me(r.activeElement);for(;n?.shadowRoot?.activeElement;)n=Me(n.shadowRoot.activeElement);if(n&&ze(n))return!1;const o=Me(t.composedPath?.()[0])||Me(t.target),i="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(i||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(i?",a[href]":"");if(o?.closest?.(t)||n?.closest?.(t))return!1}return!o||!ze(o)}const Oe=new WeakMap;class De{constructor(t){this.art=t,this.keys={},Oe.set(this,{subscribed:!1}),u||this.init()}init(){const t=this.art;if(w(t))return;const e=Oe.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{G(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!w(t)){if(t.isFocus&&Re(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ie={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ie);class Ne{constructor(t){this.art=t,this.languages={"zh-cn":Ie},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=st(this.languages,t)&&this.languages[t]||{}}get(t){return st(this.language,t)&&this.language[t]||t}update(t){this.languages=lt(this.languages,t),this.init()}}const _e={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class We{constructor(t){const e={..._e,...t.option.icons};for(const r in e)it(this,r,{get:()=>B(r,e[r])})}}const Fe=new WeakMap;function Ve(t,e,r){const n=()=>!e.closed&&!w(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:c,$video:l}}=t,d=i(c,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!w(t),s=()=>n.classList.contains("art-info-show"),c=t.i18n.get("Close");if(!a())return;const l=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",c),o.setAttribute("role","group"),o.setAttribute("aria-label",l),xt(e,i,()=>i.click(),s),mt(e,o,"keydown",t=>{const e=t;a()&&s()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),r())});const d=e=>{if(!a())return;const r=n.ownerDocument,s=r.activeElement;if(e)o.contains(s)||(Fe.delete(t),s&&n.contains(s)&&(Fe.set(t,jt(s)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Fe.get(t);if(Fe.delete(t),!o.contains(s))return;const i=e&&r.defaultView?.getComputedStyle(e).visibility;e?.isConnected&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):At(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{try{for(const t of u){if(!n())return;const e=Reflect.get(l,t.dataset.video??"undefined");if(!n())return;const r="number"===typeof e?e.toFixed(2):e;if(!n())return;if(t.textContent!==r){const e=null==r?null:`${r}`;if(!n())return;t.textContent=e}}n()&>(e,f,a.INFO_LOOP_TIME)}catch(t){o(t)}};n()&&f()}catch(i){o(i)}}const Ye=new WeakMap;class Be extends Ft{constructor(t){super(t),this.name="info",Ye.set(this,{revision:0}),u||this.init()}init(){const t=Ye.get(this),e=++t.revision;if(t.scope?.dispose(),w(this.art)||t.revision!==e)return;const r=b(this.art).child();t.scope=r,r.add(()=>{t.scope===r&&(t.scope=void 0)}),Ve(this.art,r,()=>{this.show=!1})}}class He extends Ft{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{H(i,"display","none"),H(s,"display",null),w(t)&&(c=!0)};var d;t.on("destroy",l),(d=t,y(d).finalizers).add(()=>{try{c||l()}finally{t.off("destroy",l)}}),w(t)||n.proxy(e.$state,"click",()=>{w(t)||G(t.play())})}}const Ue=new WeakMap;function Xe(t){const e=Ue.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class Ge{constructor(t){this.art=t,this.timer=null,Ue.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),b(t).add(()=>{t.off("destroy",e)}),b(t).add(()=>{this.destroy()})}destroy(){Xe(this)}set show(t){if(w(this.art))return;const e=Ue.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){Xe(this);const i=e.revision,a=()=>!w(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(O(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const c={};e.pending=c;const l=setTimeout(()=>{if(w(this.art)||e.pending!==c)return;e.pending=void 0;const t=e.revision;o.textContent="",w(this.art)||e.revision!==t||D(n,"art-notice-show")},s);a()?this.timer=l:clearTimeout(l)}else D(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function Ke(t,e){return function(t,e){const r=lt(e,t);return r.container=t.container,o(r,_t)}(t,e)}function Ze({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function Je(t,e){if(!Ze(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return Ze(r)?r:void 0}function Qe(t,e,r,n=!1){const o=e=>{w(t)||r(e)};t[n?"once":"on"](e,o),b(t).add(()=>{t.off(e,o)})}function tr(t,e,r){for(const[n,o]of e){if(w(t)||r&&!r())return;t[n].show=o}}function er(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=Jt(t),c=0;return{reset(){c=0,a?.dispose(),D(i,"art-error")},loadStart(){D(i,"art-error")},schedule(l){(async l=>{if(w(t))return;const d=Jt(t);if(d!==s&&(s=d,c=0),a&&!a.closed)return;const u=d.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!w(t)&&!u.closed&&d===Jt(t),f=c{console.warn("ArtPlayer reconnect failed:",t)})}}}const rr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],nr=(()=>{if("undefined"===typeof document)return!1;const t=rr[0],e={};for(const r of rr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),or={change:nr.fullscreenchange,error:nr.fullscreenerror},ir={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{ir.off("change",o),r()};ir.on("change",o);const i=t[nr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!ir.isFullscreen)return void t();const r=()=>{ir.off("change",r),t()};ir.on("change",r);const n=document[nr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>ir.isFullscreen?ir.exit():ir.request(t,e),onchange(t){ir.on("change",t)},onerror(t){ir.on("error",t)},on(t,e){const r=or[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=or[t];r&&document.removeEventListener(r,e,!1)},raw:nr};function ar(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(ir,{isFullscreen:{get:()=>Boolean(document[nr.fullscreenElement])},element:{enumerable:!0,get:()=>document[nr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[nr.fullscreenEnabled])}});const sr=new WeakMap;function cr(t){try{Promise.resolve(t()).catch(()=>{})}catch{}}function lr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=sr.get(t);if(!n){n=new WeakMap,sr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),cr(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),cr(i))}function dr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,c=!1,l=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!c){c=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{c||(c=!0,l=!0,a(),d&&!u&&r&&lr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(mt(i,t.document,t.changeEvent,m),mt(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){sr.get(t.document)?.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,l&&!u&&r&&lr(t),u?Promise.resolve(e).then(()=>{l?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(g){h(!0,g)}return{promise:f,cancel:()=>i.dispose()}}function ur(t,e){const r=b(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),c=0,l=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch{}}return r.add(()=>{c+=1,l=!1,n.classList.remove("art-fullscreen"),f()}),mt(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){return sr.get(t.document)?.has(t.target)??!1}(e))return;if(r&&u)return void f();if(r===s||w(t))return;s=r;const o=c,a=()=>w(t)||i()!==r||o!==c&&l!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),mt(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!w(t)&&t.emit("fullscreenError",r)}),{get:()=>!w(t)&&i(),set(n){if(w(t))return Promise.resolve();const o=++c;if(l=Boolean(n),l?u=!1:d&&(u=!0),a?.cancel(),a=void 0,d=!1,!l&&!i())return Promise.resolve();p=!0,d=l;const s=dr(e,r,l,()=>{!w(t)&&l||f()},()=>!i());p=!1,c===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw w(t)||c!==o||(t.notice.show=e),e}).finally(()=>{c===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const pr=new WeakSet;function fr(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function hr(t){pr.delete(t),t.removeEventListener("webkitbeginfullscreen",mr),t.removeEventListener("webkitpresentationmodechanged",mr)}function mr(t){if(pr.has(this)&&fr(this,"webkitbeginfullscreen"===t.type)){hr(this);try{this.webkitExitFullscreen?.()}catch{}}}function gr(t){pr.add(t),t.addEventListener("webkitbeginfullscreen",mr),t.addEventListener("webkitpresentationmodechanged",mr)}function vr(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=fr(e),i=o,a=!1,s=0;const c=()=>fr(e,n);function l(r){if(w(t)||(l=e,pr.has(l)))return;var l;"boolean"===typeof r&&(n=r);const d=c();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>w(t)||c()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{s++,i=!1,a&&gr(e),c()&&e.webkitExitFullscreen?.()}),mt(r,e,"webkitbeginfullscreen",()=>l(!0)),mt(r,e,"webkitendfullscreen",()=>l(!1)),mt(r,e,"webkitpresentationmodechanged",()=>l());const d=()=>l();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!w(t)&&c(),set(r){if(w(t))return;const n=++s;if(i=Boolean(r),r){if(hr(e),t.state="fullscreen",w(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,gr(e)),c()&&e.webkitExitFullscreen()}}}function yr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function br({node:t,parent:e,next:r}){if(!e)return void t.parentNode?.removeChild(t);const n=r?.parentNode===e?r:null;t.parentNode===e&&t.nextSibling===n||e.insertBefore(t,n)}function wr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function xr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function kr(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const c=t.icons.play,l=t.icons.pause;if(o.closed)return;i.append(c,l),s.append(e,i),xt(o,e,()=>e.click(),r),xt(o,i,()=>(t.playing?l:c).click(),r);const d=t.i18n.get("Close");if(o.closed||w(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||w(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),mt(o,s,"keydown",t=>{const e=t;r()&&wt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(bt(e),n())}),mt(o,e,"click",n),mt(o,c,"click",()=>{G(t.play())}),mt(o,l,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||w(t)||(i.setAttribute("aria-label",e),c.style.display=t.playing?"none":"flex",l.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};mt(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const c=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},l=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=wr(i.left,i.top,xr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",c),r.add(()=>{t.off("document:mousemove",c)}),t.on("document:mouseup",l),r.add(()=>{t.off("document:mouseup",l)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(c){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,c}}function $r(t){const{$player:e,$video:r}=t.template,n=b(t).child();let o,i,a=0,s=!1,c=!1;const l=()=>!w(t)&&e.classList.contains("art-mini"),d=function(t){const e=t.template.$player;let r;return{entering(){const n=e.ownerDocument,o=n.activeElement,i=o&&e.contains(o);t.template.$mini?.contains(o)||(r=i?jt(o):void 0);const a=i&&e.classList.contains("art-keyboard-focus");return e=>{!a||w(t)||n.activeElement!==o&&n.activeElement!==n.body||e?.()}},leaving(n){const o=e.ownerDocument,i=n?.contains(o.activeElement);return()=>{if(!i||w(t)||o.activeElement!==o.body&&!n?.contains(o.activeElement))return;const e=r&&o.defaultView?.getComputedStyle(r).visibility;r?.isConnected&&r.getClientRects().length&&"hidden"!==e&&"collapse"!==e&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):At(t)}}}}(t);function u(){if(i){const e=i,r=a;i=void 0;try{br(e)}catch(t){throw r!==a||i||(i=e),t}}}function p(){if(w(t))return;const r=++a;c=!1;const n=d.leaving(t.template.$mini);u(),w(t)||r!==a||(o?.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),w(t)||r!==a||t.emit("mini",!1)))}function f(){if(w(t))return;const h=++a;if(s)return void(c=!0);const m=d.entering();if(t.state="mini",!w(t)&&h===a){i??(i=yr(r)),e.classList.add("art-mini");try{if(!o){s=!0;try{o=kr(t,n,l,p)}finally{s=!1}}if(c)return c=!1,void f();if(!o||w(t))return;if(h!==a)return void(l()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),w(t)||h!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:{...wr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r),reset:!0}}(t.storage.get("left"),e,xr(o.element));if(w(t)||h!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),w(t)||h!==a)return;t.storage.set("left",i.left)}w(t)||h!==a||m(o.focus),w(t)||h!==a||t.emit("mini",!0)}catch(g){const r=c;throw c=!1,w(t)||h!==a&&!r||(u(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),g}}}return n.add(()=>{a++;try{u()}finally{o?.cancelDrag(),e.classList.remove("art-mini")}}),{get:l,set(t){t?f():p()}}}const Er=new WeakSet,Ar=t=>"picture-in-picture"===t.webkitPresentationMode;function Cr(t){Er.delete(t),t.removeEventListener("webkitpresentationmodechanged",Sr),t.removeEventListener("enterpictureinpicture",Sr)}function Sr(){if(Er.has(this)&&Ar(this)){Cr(this);try{this.webkitSetPresentationMode?.("inline")}catch{}}}function Tr(t){Er.add(t),t.addEventListener("webkitpresentationmodechanged",Sr),t.addEventListener("enterpictureinpicture",Sr)}function Lr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Pr(t,e,r){return new Promise((n,o)=>{if(w(t)||e===t.url)return void n();const i=te(t),a=i.scope.child();let s=!1;const c=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{c()});const l=()=>!s&&i.active(),d=t=>c(!0,t);i.onError=d;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!l())return;const u=a.child();let p=!1,f=!1,h=!1;const m=de(t,r,l),g=async()=>{if(t.aspectRatio=o,l()){if(n)try{await t.play()}catch{}l()&&(t.notice.show="",c())}},v=()=>{if(l()&&!f&&p)try{if(t.template?.$video?.seeking)return;if(!l())return;if(h||(h=!0,t.playbackRate=s),!m.ready()||!l()||f)return;f=!0,u.dispose(),g().catch(d)}catch(e){d(e)}},y={"video:error":d,"video:loadedmetadata":()=>{if(l())try{m.restore()}catch(t){d(t)}},"video:canplay":()=>{p=!0,v()},"video:seeked":v,seek:m.manual},b=a.child(),w=[],x=Object.keys(y);for(const e of x)Lr(b,t,e,t=>{i.acceptingEvents&&w.push([e,t])},!1);if(re(t,i,e),!l())return;if(t.notice.show="",!l())return;const k=()=>{if(b.dispose(),!e)return void c();const r={};for(const e of x)r[e]=Lr(u,t,e,y[e],"video:seeked"!==e);for(const[t,e]of w){if(!l()||u.closed)break;r[t](e)}w.length=0};i.assigned?k():i.onAssigned=k}catch(u){d(u)}})}function Mr(t,e){const{number:r,column:n,width:o,height:i,scale:a}=t,{imageWidth:s,videoWidth:c,videoHeight:l,progressWidth:d,position:u}=e,p=Number(n),f=Number(o)*Number(a)||s/p,h=Number(i)*Number(a)||f/(c/l),m=Math.floor(u/(d/Number(r)));return{height:`${h}px`,width:`${f}px`,backgroundPosition:`-${m%p*f}px -${Math.floor(m/p)*h}px`,left:u<=f/2?0:u>d-f/2?d-f+"px":u-f/2+"px"}}function zr(t){const{option:e,template:{$video:r}}=t;it(t,"url",{get:()=>r.src,async set(n){if(w(t))return;const o=function(t){const e=Kt.get(t);return Kt.delete(t),e||te(t)}(t);o.acceptingEvents=!1;try{if(!n)return void(await vt(o.scope)&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||K(n),s=e.customType[a];if(a&&s){if(!(await vt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const c=o.scope.child();let l=!1,d=!1;Lr(c,t,"video:canplay",()=>{l=!d}),Lr(c,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>ne(o,t))}else{if(!o.active())return;r.src=n}}finally{c.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};l?e():d||Lr(o.scope,t,"video:canplay",e)}}catch(i){ne(o,i)}finally{ee(o)}}})}const Rr=[function(t){const{template:{$video:e}}=t;it(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;it(t,"play",{async value(){const a=Qt(t),s=await i.play();if(!a())return s;const c=e.get("Play");if(!a())return s;if(r.show=c,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;it(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${tt(t.currentTime)} / ${tt(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;it(t,"forward",{set(e){r.seek=t.currentTime+e}}),it(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;it(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=J(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),it(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;it(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){ce.set(t,le(t)+1)}(t),e.currentTime=J(n,0,t.duration))}})},function(t){it(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Pr(t,e,0);it(t,"switchQuality",{value:e=>Pr(t,e,t.currentTime)}),it(t,"switchUrl",{value:e}),it(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;it(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;it(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!w(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=Je({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(w(t))return;"width"===r?.axis?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,w(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=Qt(t);return new Promise((a,s)=>{const c=r=>{try{!w(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,c):a(n.toDataURL("image/png"))}catch(l){c(l)}})}it(t,"getDataURL",{value:()=>o(!1)}),it(t,"getBlobUrl",{value:()=>o(!0)}),it(t,"screenshot",{value:async e=>{const n=Qt(t),o=await t.getDataURL();if(!w(t)&&n()){const i=e||`artplayer_${tt(r.currentTime)}`;!w(t)&&n()&&Z(o,`${i}.png`),!w(t)&&n()&&t.emit("screenshot",o)}return o}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(w(t))return;const i=function(t){const e=ir.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>ar(t,e.requestFullscreen,void 0),exit:()=>ar(r,e.exitFullscreen)}}(o);i?it(t,"fullscreen",ur(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?it(t,"fullscreen",vr(t)):it(t,"fullscreen",{get:()=>!1,set(){w(t)||(r.show=e.get("Fullscreen Not Supported"))}}),it(t,"fullscreen",ct(t,"fullscreen"))};t.once("video:loadedmetadata",i),b(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(br(t.placement),r()))}return b(t).add(()=>{n+=1;const t=r;if(r=void 0,t)try{o(t,()=>!0)}catch(i){try{e.parentNode!==t.placement.parent&&e.parentNode?.removeChild(e)}catch(a){throw new h([i,a])}throw i}}),i=>{if(w(t))return;const a=++n,s=()=>a===n&&!w(t),c=function(t){const e=t.ownerDocument?.activeElement,r=e&&t.contains(e);return()=>{r&&e.isConnected&&t.contains(e)&&e.ownerDocument.activeElement===e.ownerDocument.body&&e.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:yr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(l){throw s()&&o(n,s)&&(r=void 0,c()),l}if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(c(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);it(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?it(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=b(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,c=!1,l=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch{}}function u(e,r,n){e.then(()=>{!r||!w(t)&&a||d()},e=>{w(t)||l!==n||(t.notice.show=e)}).finally(()=>{l===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{l++,a=!1,d()}),mt(n,e,"enterpictureinpicture",()=>{if(c)return void d();if(!o()||i)return;const e=l;t.state="pip",!w(t)&&e===l&&o()&&(i=!0,t.emit("pip",!0))}),mt(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!w(t)&&o()?e:null,set(n){if(w(t))return;const i=++l;if(a=Boolean(n),a?c=!1:s&&(c=!0),s=!1,a){if(t.state="pip",w(t)||l!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw l===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?it(t,"pip",function(t){const{$video:e}=t.template,r=b(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(w(t)||Er.has(e))return;const s=Ar(e);if(s&&(o=!1),s===n&&!r)return;const c=i;s&&(t.state="pip"),w(t)||i!==c||Ar(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Tr(e),Ar(e)&&e.webkitSetPresentationMode("inline")});for(const c of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])mt(r,e,c,()=>s());return{get:()=>!w(t)&&Ar(e),set(r){if(w(t))return;const n=++i,c=a;if(r){if(!1===e.webkitSupportsPresentationMode?.("picture-in-picture"))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Cr(e),t.state="pip",w(t)||i!==n)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(l){throw n===i&&(o=!1),l}}else o&&(o=!1,Tr(e)),Ar(e)&&e.webkitSetPresentationMode("inline");w(t)||n!==i||c!==a||Ar(e)!==Boolean(r)||s(!0)}}}(t)):it(t,"pip",{get:()=>!1,set(){w(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;it(t,"loaded",{get:()=>r.loadedTime/e.duration}),it(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){it(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;it(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;it(t,"autoSize",{value(){if(w(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!Ze(o))return;const i=M(e),a=Je(i,o.width/o.height);a&&!w(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;it(t,"rect",{get:()=>M(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}it(t,"x",{get:()=>e.left+window.pageXOffset}),it(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;it(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){w(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(Q(o))}`,w(t)||t.emit("flip",o))}})},function(t){it(t,"mini",$r(t))},function(t){const{template:{$poster:e}}=t;it(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(t){H(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;it(t,"autoHeight",{value(){if(w(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!Ze(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||w(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;it(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){it(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){it(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];it(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;nn.$track?.offset||0,set(o){const{cues:i}=t.subtitle;if(!n.$track||0===i.length)return;const a=J(o,-10,10);n.$track.offset=a;for(let e=0;e{if(!w(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,w(t)||it(t,"airplay",{value(){if(!w(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(w(t))return;Reflect.apply(e,o,[]),w(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");w(t)||(r.show=n)}}}))},function(t){it(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:i?.html||"",selector:e,async onSelect(e,r,i){const a=function(t){return t&&he.get(t)||(()=>!0)}(i);if(await t.switchQuality(e.url),!w(t)&&a()){const r=`${o.get("Switch Video")}: ${e.html}`;!w(t)&&a()&&(n.show=r)}return e.html}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,s=b(t).child(),c=!1;function l(){const e=s;s=b(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function d(){const i=a,c=s;if(!i||!o)return;const l=()=>!w(t)&&!c.closed&&s===c&&a===i&&i.sourceActive()&&t.controls?.thumbnails===i.element;if(!l())return;const d=r.clientWidth*i.percentage;if(!(d>0&&d{const f=t.controls?.thumbnails,{url:h,scale:m}=e.thumbnails;if(!w(t)&&f&&h&&("hover"===r||"played"===r&&p&&u)){if(i!==f){const t=E(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,l())})}if(a={percentage:n,element:f,sourceActive:Qt(t)},o)d();else if(!c){const t=s;c=!0,function(t,e,r){return q(t,e,r)}(h,m,t).then(e=>{s!==t||t.closed||(c=!1,o=e,d())}).catch(e=>{s!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),it(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{w(t)||!e.url||t.option.isLive||w(t)||(t.option.thumbnails=e,l())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{w(t)||t.emit(`video:${e.type}`,e)})}(t);const e=er(t);!function(t,e){Qe(t,"video:canplay",()=>{e.reset(),tr(t,[["loading",!1]])}),Qe(t,"video:canplay",()=>{tr(t,[["loading",!1],["controls",!0],["mask",!0]]),w(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;Qe(t,"video:ended",()=>{if(e.loop){const e=Qt(t);if(t.seek=0,w(t)||!e())return;G(t.play()),e()&&tr(t,[["controls",!1],["mask",!1]],e)}else tr(t,[["controls",!0],["mask",!0]])})}(t),Qe(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;Qe(t,"video:loadedmetadata",()=>{t.emit("resize"),u&&tr(t,[["loading",!1],["controls",!0],["mask",!0]])}),Qe(t,"video:loadstart",()=>{e.loadStart(),tr(t,[["loading",!0],["mask",!1],["controls",!0]])}),Qe(t,"video:pause",()=>{tr(t,[["controls",!0],["mask",!0]])}),Qe(t,"video:play",()=>{tr(t,[["mask",!1]]),w(t)||H(r,"display","none")}),Qe(t,"video:playing",()=>tr(t,[["mask",!1]])),Qe(t,"video:progress",()=>{t.playing&&tr(t,[["loading",!1]])}),Qe(t,"video:seeked",()=>tr(t,[["loading",!1],["mask",!0]])),Qe(t,"video:seeking",()=>tr(t,[["loading",!0],["mask",!1]])),Qe(t,"video:timeupdate",()=>tr(t,[["mask",!1]])),Qe(t,"video:waiting",()=>tr(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(w(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(w(t))return;const r=e.moreVideoAttr[s];if(w(t))return;t.attr(s,r)}if(w(t))return;if(e.muted){const r=e.muted;if(w(t))return;t.muted=r}if(w(t))return;if(e.volume){const r=J(e.volume,0,1);if(w(t))return;n.volume=r}if(w(t))return;const i=r.get("volume");if(w(t))return;if("number"===typeof i&&(n.volume=J(i,0,1)),w(t))return;if(e.poster){const r=`url(${e.poster})`;if(w(t))return;H(o,"backgroundImage",r)}if(w(t))return;if(e.autoplay){const r=e.autoplay;if(w(t))return;n.autoplay=r}if(w(t))return;if(e.playsInline){if(w(t))return;if(n.playsInline=!0,w(t))return;n["webkit-playsinline"]=!0}if(w(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(w(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(w(t))return;const r=e.cssVar[s];if(w(t))return;t.cssVar(s,r)}if(w(t))return;const a=e.url;w(t)||(t.url=a)}];class Or{constructor(t){if(!w(t)){zr(t);for(const e of Rr){if(w(t))return;e(t)}}}}const Dr=new WeakMap,Ir="art-auto-orientation-fullscreen";function Nr(t){if(Dr.get(t.orientation)===t)try{t.orientation.unlock()}catch{}}const _r="art-auto-orientation",Wr=["width","height","transform-origin","transform"];function Fr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return Ze(t)&&Ze(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=b(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(_r);r.classList.remove(_r),n&&(t.isRotate=!1,w(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=z();if(w(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;o??(o=Wr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(_r),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{w(t)||(r?o?s(!1):e()&&(i(),i=gt(n,()=>{o||s(!0)},Number(t.constructor.AUTO_ORIENTATION_TIME??0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(Ir),t&&(t.cancelled=!0,Nr(t),t.settled&&Dr.get(t.orientation)===t&&Dr.delete(t.orientation))}return b(t).add(o),i=>{if(w(t))return;if(!i)return void o();if(n&&!n.cancelled&&Dr.get(n.orientation)===n)return;const a=r.ownerDocument.defaultView?.screen?.orientation;if("function"!==typeof a?.lock||"function"!==typeof a.unlock||!e())return;const s={orientation:a,cancelled:!1,settled:!1};n=s,Dr.set(a,s);const c=()=>!w(t)&&!s.cancelled&&n===s&&Dr.get(a)===s,l=e=>{s.settled=!0;const o=c();Dr.get(a)===s&&Dr.delete(a),n===s&&(n=void 0),o&&(r.classList.remove(Ir),t.notice.show=e)};try{const t=a.lock(a.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{s.settled=!0,c()?r.classList.add(Ir):(Nr(s),Dr.get(a)===s&&Dr.delete(a))}).catch(l)}catch(d){l(d)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),b(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Vr(t){return t.get("times")||{}}function Yr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||w(t))return()=>{};const s=$t(".art-auto-playback-last",a),c=$t(".art-auto-playback-jump",a),l=$t(".art-auto-playback-close",a);kt(l,r.close);const d=E(a);let u,p=0;const f=()=>{const r=++p;if(u?.dispose(),d.closed||w(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!w(t);f.add(()=>{u===f&&(u=void 0,H(a,"display","none"))});const m=Jt(t).add(()=>{f.dispose()});f.add(()=>{m()});const g=Vr(n)[t.option.id||t.option.url];if(!h())return;if(H(a,"display","none"),!h()||!g||!(g>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(H(a,"display","flex"),!h())return;const v=`${e.get("Last Seen")} ${tt(g)}`;if(!h())return;if(s.textContent=v,!h())return;const y=e.get("Jump Play");if(!h())return;if(c.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(l,()=>{H(a,"display","none")}),!h())return;if(b(c,()=>{t.seek=g,h()&&(G(t.play()),h()&&(H(i,"display","none"),h()&&H(a,"display","none")))}),!h())return;let x=()=>{},k=!1;const $=()=>{!k&&h()&&(k=!0,x(),gt(f,()=>{h()&&H(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",$),x=f.add(()=>{t.off("video:timeupdate",$)}),k&&x()};return()=>{C(t,a,"ready",f),C(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;Te(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Vr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;w(t)||(o.length>i&&delete n[o[0]],n[a]=s,w(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Vr(e)},clear:()=>e.del("times"),delete(t){const r=Vr(e);return delete r[t],e.set("times",r),r}}}function Br(t){let e,r=0;return{start:n=>{const o=++r;if(e?.scope.dispose(),o!==r||w(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:Jt(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{e?.active||D(t.template.$player,"art-fast-forward")}}),gt(i.scope,()=>{if(e!==i||w(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||w(t))return;t.playbackRate=r,e!==i||i.scope.closed||w(t)||O(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,e?.scope.dispose()}}}function Hr(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Br(t),i=Te(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return I(r,"art-fast-forward")}}}function jr(t,e,r,n){let o;const i=()=>!r.closed&&!w(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),xt(r,e),mt(r,e,"keydown",t=>{const r=t;i()&&n()&&wt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(bt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function qr(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return I(n,"art-lock")}function i(){w(t)||(O(n,"art-lock"),w(t)||(t.isLock=!0,w(t)||t.emit("lock",!0)))}function a(){w(t)||(D(n,"art-lock"),w(t)||(t.isLock=!1,w(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=E(e);if(n.closed||w(t))return;const i=kt(e,r.lock);if(n.closed||w(t))return;const a=kt(e,r.unlock);if(n.closed||w(t))return;const s=jr(t,e,n,o);n.closed||w(t)||(o()?(H(i,"display","inline-flex"),n.closed||w(t)||H(a,"display","none")):H(i,"display","none"),C(t,e,"lock",e=>{w(t)||(H(i,"display",e?"inline-flex":"none"),n.closed||w(t)||H(a,"display",e?"none":"inline-flex"),n.closed||w(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function Ur(t){return Te(t)("control",e=>{e?D(t.template.$player,"art-mini-progress-bar"):O(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class Xr{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){w(t.art)||!e.miniProgressBar||e.isLive||t.add(Ur),!w(t.art)&&e.lock&&u&&t.add(qr),w(t.art)||!e.autoPlayback||e.isLive||t.add(Yr),!w(t.art)&&e.autoOrientation&&u&&t.add(Fr),!w(t.art)&&e.fastForward&&u&&!e.isLive&&t.add(Hr)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){X(!w(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(w(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(w(t.art))return t;let o=n;const i=st(t,o);if(w(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return w(t.art)||(X(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),w(t.art)||it(t,o,{value:r})),t}(this,t,e)}}const Gr=new WeakMap;function Kr(t){return!t.closed&&!Gr.get(t)}function Zr(t){Gr.set(t,(Gr.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(Gr.get(t)||1)-1;r?Gr.set(t,r):Gr.delete(t)}}const Jr=new WeakMap,Qr=new WeakMap,tn=["$parent","$parents","$option","$events","$formatted"];function en(t){const e=new Set;let r=t;for(;r&&!e.has(r);){e.add(r);const t=Jr.get(r);if(!t||!t.owner.active||t.owner.scope?.closed||!t.option.includes(r))return!1;if(!t.parent)return t.owner.root===t.option;if(Jr.get(t.parent)?.owner!==t.owner)return!1;r=t.parent}return!1}function rn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function nn(t){const e=Jr.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function on(t,e){for(let r=0;r{l&&l!==r&&l.dispose()},()=>pn(t,o)])try{e()}catch(d){d instanceof h?c.push(...d.errors):c.push(d)}if(r.closed||w(t)||(o.push(...i.splice(0)),un.set(r,o),ln.set(e,r),dn.set(e,n)),a(),c.length)throw new h(c)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function vn(t,e,r,n,o,i){const a=i||hn(e);if(!Kr(a)||w(t))return;const s=t.proxy(r,n,e=>{if(Kr(a)&&!w(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!Kr(a)||w(t)?t.events.remove(s):(nn(e).events.push(s),i&&i!==ln.get(e)&&i.add(()=>{const r=nn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function yn(t,e,r,n){const o=hn(e);if(!Kr(o)||w(t))return;const i=(...e)=>{if(Kr(o)&&!w(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}const bn='[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]';function wn(t){if(!t.isConnected||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const e=t.ownerDocument.defaultView?.getComputedStyle(t).visibility;return"hidden"!==e&&"collapse"!==e}function xn(t){return Array.from(t.querySelectorAll(bn)).filter(t=>"-1"!==t.getAttribute("tabindex")&&wn(t))}function kn(t,e,r=!1){if(!t.show||w(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!Kr(sn(n)))return;const o=function(t,e,r=!1){if(e&&e!==t&&t.contains(e)&&e.matches(bn)&&"-1"!==e.getAttribute("tabindex")&&wn(e))return e;const n=xn(t),o=t.querySelector(".art-setting-item.art-current");return n.find(t=>e?.contains(t))||(r?n[n.length-1]:n.find(t=>o?.contains(t))||n.find(t=>!t.classList.contains("art-setting-item-back"))||n[0])}(n,e,r);o?.focus({preventScroll:!0}),w(t.art)||o?.scrollIntoView({block:"nearest",inline:"nearest"})}function $n(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!w(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!r?.getClientRects().length)&&kn(t,o)}}function En(t){const{art:e}=t,r=b(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||w(e)||t.render()},a=i=>{r.closed||w(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&kn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!w(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&wn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&At(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),mt(r,e.template.$player,"keydown",r=>{const n=r;if(!wt(n)||n.defaultPrevented||w(e))return;const a=n.target;if(a===e.controls.setting){if("ArrowDown"===n.key||"ArrowUp"===n.key)if(bt(n),t.show)kn(t,void 0,"ArrowUp"===n.key);else{o="ArrowUp"===n.key;try{t.show=!0}finally{o=!1}}else"Escape"===n.key&&t.show&&(bt(n),i());return}if(!t.show||!t.$parent.contains(a))return;if("Escape"===n.key)return bt(n),void i();if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(n.key))return;const s=a.closest(".art-setting-item");if(!s||a!==s&&!a.matches('button,a[href],[role="button"]'))return;const c=t.active&&t.cache.get(t.active);if(!c)return;const l=t.active?.find(t=>t.$item===s);if(!Kr(sn(c))||l&&!Kr(hn(l)))return void bt(n);const d=xn(c),u=d.indexOf(a);if(u<0)return;let p;switch(n.key){case"ArrowDown":p=Math.min(u+1,d.length-1);break;case"ArrowUp":p=Math.max(u-1,0);break;case"Home":p=0;break;case"End":p=d.length-1;break;case"ArrowLeft":{const t=c.querySelector(".art-setting-item-back");return bt(n),void t?.click()}case"ArrowRight":return bt(n),void(l?.selector?.length&&a.click());default:return}bt(n),void 0!==p&&kn(t,d[p])});let s=!1;mt(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,gt(r,()=>{s=!1,r.closed||w(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function An(t){const{art:e,active:r}=t,{controls:n,constructor:{SETTING_WIDTH:o,SETTING_ITEM_HEIGHT:i},template:{$player:a,$setting:s,$bottom:c}}=e;if(!n.setting||!t.show||!r)return;const l=a.getBoundingClientRect(),d=n.setting.getBoundingClientRect(),p=l.width/a.offsetWidth||1,f=(d.left-l.left+d.width/2)/p-a.clientLeft,h=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:c}=t,l=Math.min(Math.max(0,c),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*l));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-l)),left:Math.max(l,Math.min(a-d/2,e-l-d))}}({containerWidth:a.clientWidth,containerHeight:a.clientHeight,requestedWidth:r[0]?.$parent?.width||o,rows:r.length+(r===t.option?0:1),rowHeight:i,controlCenter:f,bottom:Number.parseFloat(getComputedStyle(s).bottom)||0,padding:Number.parseFloat(getComputedStyle(c).paddingLeft)||0});s.style.height=`${h.height}px`,s.style.width=`${h.width}px`,e.isRotate||u||(f+h.width/2>a.clientWidth?(s.style.left="",s.style.right=""):(s.style.left=`${h.left}px`,s.style.right="auto"))}const Cn=new WeakMap;function Sn(t){Cn.delete(t)}const Tn=new WeakMap;function Ln(t,e){e?Tn.set(t,e):Tn.delete(t)}function Pn(t){const e=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),r=[],n=Tn.get(t),o=n?.();for(const i of["html","icon","tooltip"]){const t=e.get(i)?.value;t instanceof Node&&r.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{for(const r of Reflect.ownKeys(t))!e.has(r)&&Object.getOwnPropertyDescriptor(t,r)?.configurable&&Reflect.deleteProperty(t,r);for(const[r,n]of e)Object.defineProperty(t,r,n);o?.(),Ln(t,n);for(const{node:t,parent:e,next:n}of r)e?e.insertBefore(t,n?.parentNode===e?n:null):t.parentNode?.removeChild(t)}}function Mn(t){const e=t.$item?.querySelector(".art-setting-range");e&&e.setAttribute("aria-label",t.$html?.textContent||"")}const zn=new WeakMap;async function Rn(t,e,r,n,o,i,a,s){try{const c=hn(e),l=hn(i),d=(zn.get(i)||0)+1;zn.set(i,d);const u=()=>Kr(c)&&Kr(l)&&!w(t.art)&&zn.get(i)===d;if(s?.(),!u())return;const p=await o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(c){console.warn("ArtPlayer setting callback failed:",c)}}function On(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const Dn=new WeakMap;function In(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof h?e.push(...r.errors):e.push(r)}if(e.length)throw new h(e)}function Nn(t){Dn.get(t)?.()}function _n(t,e){const r=t.find(e.name);if(w(t.art))return r||e;if(!r)return t.add(e);const n=$n(t);Sn(r),Nn(r);const o=Pn(r),i=r.$item,a=i?.parentNode,s=i?.nextSibling,c=i?On(i):void 0,l=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=gn(t.art,e);r&&i.push(r)}for(const t of n)a.push(Zr(sn(t)))}catch(c){try{In([...i.reverse().map(t=>t.resume),...a])}catch(l){console.warn("ArtPlayer setting restore failed:",l)}throw c}let s=!0;return{items:r,resume(){s&&(s=!1,In([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,In([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>cn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);if(w(t.art))return void u.dispose();const e=r.$item;try{In([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>c?.(),()=>{a&&i&&a.insertBefore(i,s?.parentNode===a?s:null)},()=>t.format(),()=>{if(f){t.active=l,l&&t.cache.has(l)&&W(t.cache.get(l),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!w(t.art)&&Dn.get(r)===h;for(const y of u.items)Dn.set(y,h);const g=b(t.art).add(()=>{p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!o?.enumerable||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)Dn.get(t)===h&&Dn.delete(t);return u.dispose(),n(r.$item),r}catch(v){throw m()&&h(),v}finally{g()}}const Wn=new WeakMap;function Fn(t,e,r){it(t,`$${e}`,{configurable:!0,get:()=>r}),it(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",N(r,n),"html"===e&&Mn(t)}})}function Vn(t,e,r=!1){const n=function(t){const e=Dn.get(t);return()=>!e||Dn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const o=t.cache.get(e.$option),i=e.$item;let a="selector";st(e,"switch")&&(a="switch"),st(e,"range")&&(a="range"),st(e,"onClick")&&(a="button");const{icons:s,constructor:c}=t.art;if(!n())return;const l=function(t,e,r=b(t)){const n=ln.get(e);(!n||Kr(n)||n.closed)&&mn(t,e);const o=r.child();return ln.set(e,o),dn.set(e,r),un.set(o,nn(e).events),o.add(()=>{pn(t,un.get(o))}),o}(t.art,e,sn(o)),d=()=>Kr(l)&&!w(t.art)&&n();if(!d())return;const u=document.createElement("div");try{if(Ln(e),O(u,"art-setting-item"),H(u,"height",`${c.SETTING_ITEM_HEIGHT}px`),u.dataset.name=e.name||"",u.dataset.value=String(e.value||""),!d())return;const n=kt(u,'
'),p=kt(u,'
'),f=document.createElement("div");switch(O(f,"art-setting-item-left-icon"),a){case"button":case"switch":case"range":{const t=e.icon||s.config;if(!d())return;N(f,t);break}case"selector":if(e.selector?.length){const t=e.icon||s.config;if(!d())return;N(f,t)}else N(f,s.check)}if(N(n,f),!d())return;Fn(e,"icon",f);const h=document.createElement("div");O(h,"art-setting-item-left-text");const m=e.html||"";if(!d())return;N(h,m),N(n,h),Fn(e,"html",h);const g=document.createElement("div");O(g,"art-setting-item-right-tooltip");const v=e.tooltip||"";if(!d())return;switch(N(g,v),N(p,g),Fn(e,"tooltip",g),a){case"switch":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=kt(t,s.switchOn),n=kt(t,s.switchOff),o=e.switch;if(!d())return;H(o?n:r,"display","none"),N(p,t),it(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!d())return;Ln(e,()=>{const t=i;return()=>{i=t}}),it(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,u.setAttribute("aria-checked",String(Boolean(t))),t?(H(n,"display","none"),H(r,"display",null)):(H(n,"display",null),H(r,"display","none"))}});break}case"range":{const t=document.createElement("div");O(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",N(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!d())return;Reflect.set(r,i,String(t))}O(r,"art-setting-range"),N(p,t),it(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!d())return;Ln(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),it(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(e.selector?.length){const t=document.createElement("div");O(t,"art-setting-item-right-icon"),N(t,s.arrowRight),N(p,t)}}if(!d())return;if(function(t,e,r,n){const{art:o}=t,i=hn(e),a=(t,r,n)=>vn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Rn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Rn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{if(e.selector?.length)t.render(e.selector);else{if(e.$parent?.onSelect)return Rn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&O(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Rn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,u,a),!d())return;it(e,"$item",{configurable:!0,get:()=>u}),function(t,e,r,n,o){"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||e.selector?.length||r.setAttribute("aria-current",String(Boolean(e.default))),xt(o,r,()=>r.click(),()=>Kr(o)&&!w(t.art))):Mn(e)}(t,e,u,a,l),r&&i?.parentNode?i.replaceWith(u):N(o,u),e.mounted&&d()&>(l,()=>{if(!w(t.art))try{const r=e.mounted?.call(t.art,u,e);Promise.resolve(r).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(r){console.warn("ArtPlayer setting mounted failed:",r)}},0)}catch(p){try{l.dispose()}catch(f){console.warn("ArtPlayer setting cleanup failed:",f)}throw u.remove(),p}}function Yn(t,e=t.option){if(w(t.art))return;const r=$n(t),n=t.cache.get(e);if(n&&!Kr(sn(n)))return;const o=(Wn.get(t)||0)+1;Wn.set(t,o);const i=()=>Wn.get(t)===o&&!w(t.art),a=t.active,s=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),c=()=>{t.active=a,a&&t.cache.has(a)&&W(t.cache.get(a),"art-current");for(const[e,r,n]of s)t.$parent.style.setProperty(e,r,n)};if(t.active=e,n)try{W(n,"art-current"),t.resize()}catch(l){throw i()&&t.cache.get(e)===n&&!sn(n).closed&&c(),l}else{const r=document.createElement("div");t.cache.set(e,r);const n=function(t,e,r){const n=b(t.art).child();return an.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,r),o=()=>!n.closed&&!w(t.art)&&t.cache.get(e)===r,a=[];try{if(!o())return;O(r,"art-setting-panel"),r.setAttribute("role","group"),r.setAttribute("aria-label",e[0]?.$parent?.$html?.textContent||t.art.i18n.get("Settings")),N(t.$parent,r),W(r,"art-current"),e[0]?.$parent&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=Qr.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=b(e).child(),n=(t,n)=>{if(r.closed||w(e))return;const o=(...t)=>{if(!r.closed&&!w(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=L(r,e.controls.setting),o=L(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||w(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),En(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(Q(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),yn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{yn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){on(e,t)}check(t){!function(t,e){e?.$parent&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&W(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=Qr.get(t)||{active:!0},a=[],s=new Set,c=new Set(o),l=(t,e,r)=>{for(let n=0;nnn(t).parent},$parents:{get:()=>nn(t).parents},$option:{get:()=>nn(t).option},$events:{get:()=>nn(t).events},$formatted:{get:()=>!0}}),Jr.set(t,{parent:r,parents:n,option:o,events:a?.events||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return on(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){An(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&cn(n)}catch(i){r.push(i)}}try{mn(t.art,e)}catch(i){i instanceof h?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new h(r)}(this,t)}remove(t){const e=$n(this),r=this.find(t);X(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Sn(t),Nn(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>o?.remove(),()=>this.render()])try{s()}catch(a){a instanceof h?i.push(...a.errors):i.push(a)}if(i.length)throw new h(i);e()}update(t){return _n(this,t)}add(t,e=this.option){if(w(this.art))return t;let r=!1;this.traverse(e=>{r||(r=e===t)});const n=e.length,o=r?void 0:function(t){const e={};Cn.set(t,e);const r=()=>Cn.get(t)===e;return{current:r,finish(){r()&&Cn.delete(t)}}}(t);let i=!1;try{e.push(t),this.format(),i=!0,this.createItem(t),this.render()}catch(a){if(w(this.art)||o&&!o.current())throw a;if(e[n]===t&&e.splice(n,1),!r&&i){try{this.inactivate(t)}catch(s){console.warn("ArtPlayer setting cleanup failed:",s)}t.$item?.remove()}throw a}finally{o?.finish()}return t}createHeader(t){!function(t,e){if(!t.cache.has(e.$option))return;const r=t.cache.get(e.$option),{icons:{arrowLeft:n},constructor:{SETTING_ITEM_HEIGHT:o}}=t.art,i=document.createElement("div");H(i,"height",`${o}px`),O(i,"art-setting-item"),O(i,"art-setting-item-back");const a=kt(i,'
'),s=document.createElement("div");O(s,"art-setting-item-left-icon"),N(s,n),N(a,s),N(a,e.$parent.html),vn(t.art,e.$parent,i,"click",()=>t.render(e.$parents),sn(r));const c=sn(r);i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||xt(c,i,()=>i.click(),()=>Kr(c)&&!w(t.art)),i.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${i.textContent?.trim()||""}`),N(r,i)}(this,t)}createItem(t,e=!1){Vn(this,t,e)}render(t=this.option){Yn(this,t)}}class jn{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch{return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch{this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch{delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}const qn='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class Un{constructor(t){this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope)?.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}async run(t){if(this.active)try{return await Promise.race([t(),this.cancelled])}finally{this.cancel()}}}const Xn=new WeakMap;function Gn(t){return Xn.get(t)}function Kn(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const Zn=Ft;class Jn extends Zn{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=b(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return Xn.set(t,n),r.add(()=>{Kn(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){return this.art.template.$video?.textTracks?.[0]}get activeCues(){return Array.from(this.textTrack?.activeCues||[])}get cues(){return Array.from(this.textTrack?.cues||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?j(r,t):H(r,t,e)}update(){!function(t){const e=Gn(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?ot(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}async switch(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i={...o.subtitle,...e,url:t},a=Gn(this),s=a.revision+1,c=await this.init(i);return!a.scope.closed&&a.revision===s&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),c}createTrack(t,e){!function(t,e,r){const n=Gn(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,c=s.parentNode,l=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const c=t.textTrack,l=c?i.proxy(c,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(l)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=l,s.onload=null,s.onerror=null,p=!0;try{f?.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&Kn(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,c&&c.insertBefore(s,l?.parentNode===c?l:null),f}}(this,t,e)}async init(t){const e=Gn(this),r=function(t){const e=t.request,r=new Un(t.scope);return t.request=r,t.revision+=1,e?.cancel(),r}(e),{notice:n,template:{$subtitle:i}}=this.art;return r.run(async()=>{if(!this.textTrack)return null;if(o(t,_t.subtitle),!t.url)return;let a;this.option=t,this.style(t.style);try{if(!r.active)return;const n=await fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const o=await n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||K(e.url)){case"srt":return{vtt:e.onVttLoad(dt(r))};case"ass":return{vtt:e.onVttLoad(pt(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(o,t);if(!r.active)return;const c=void 0===s?t.url:a=ut(s.vtt);if(!r.active)return;i.innerHTML="";const l=e.trackRevision+1;if(this.url!==c&&this.createTrack("metadata",c),!r.active||e.trackRevision>l)return;return a&&(e.ownedURL=a,a=void 0),c}catch(s){if(!r.active)return;throw i.innerHTML="",n.show=s,s}finally{a&&(e.scope.closed||this.url!==a?URL.revokeObjectURL(a):e.ownedURL=a)}})}}const Qn=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${i}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class to{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=R(e.container),X(this.$container,`No container element found by ${e.container}`)),X(P(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();X("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),X(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=v.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=y(t);o.rollback=r,v.set(e,t),o.releaseContainer=()=>{v.get(e)===t&&v.delete(e)}}(t,this.$container,On(this.$container)),function(t,e,r){const n=y(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return Qn}query(t){return R(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=to.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(w(this.art))return;!function(t){X(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),F(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&O(this.$player,"art-backdrop"),u&&O(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":O(this.$player,"art-destroy")}}const eo=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class ro{on(t,e,r){const n=this.e||(this.e={});let o=eo(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(eo(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=eo(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new to(this),b(this).closed)return;if(this.events=new Pe(this),b(this).closed)return;if(this.storage=new jn,b(this).closed)return;if(this.icons=new We(this),b(this).closed)return;if(this.i18n=new Ne(this),b(this).closed)return;if(this.notice=new Ge(this),b(this).closed)return;if(this.player=new Or(this),b(this).closed)return;if(this.layers=new He(this),b(this).closed)return;if(this.controls=new we(this),b(this).closed)return;if(this.contextmenu=new Xt(this),b(this).closed)return;if(this.subtitle=new Jn(this),b(this).closed)return;if(this.info=new Be(this),b(this).closed)return;if(this.loading=new je(this),b(this).closed)return;if(this.hotkey=new De(this),b(this).closed)return;if(this.mask=new qe(this),b(this).closed)return;if(this.setting=new Hn(this),b(this).closed)return;if(this.plugins=new Xr(this),b(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),io.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${io.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=y(t);return e.rollback=void 0,!e.scope.closed})(this)&&oo.push(this)}catch(r){try{x(this,oo,!0,io.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return oo}static get version(){return i}static get config(){return f}static get utils(){return ft}static get scheme(){return _t}static get Emitter(){return ro}static get validator(){return o}static get kindOf(){return o.kindOf}static get html(){return to.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:c?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator?.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){x(this,oo,t,io.REMOVE_SRC_WHEN_DESTROY)}}var ao,so;return io.STYLE=qn,io.DEBUG=!1,io.CONTEXTMENU=!0,io.NOTICE_TIME=2e3,io.SETTING_WIDTH=250,io.SETTING_ITEM_WIDTH=200,io.SETTING_ITEM_HEIGHT=35,io.RESIZE_TIME=200,io.SCROLL_TIME=200,io.SCROLL_GAP=50,io.AUTO_PLAYBACK_MAX=10,io.AUTO_PLAYBACK_MIN=5,io.AUTO_PLAYBACK_TIMEOUT=3e3,io.RECONNECT_TIME_MAX=5,io.RECONNECT_SLEEP_TIME=1e3,io.CONTROL_HIDE_TIME=3e3,io.DBCLICK_TIME=300,io.DBCLICK_FULLSCREEN=!0,io.MOBILE_DBCLICK_PLAY=!0,io.MOBILE_CLICK_PLAY=!1,io.AUTO_ORIENTATION_TIME=200,io.INFO_LOOP_TIME=1e3,io.FAST_FORWARD_VALUE=3,io.FAST_FORWARD_TIME=1e3,io.TOUCH_MOVE_RATIO=.5,io.VOLUME_STEP=.1,io.SEEK_STEP=5,io.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],io.ASPECT_RATIO=["default","4:3","16:9"],io.FLIP=["normal","horizontal","vertical"],io.FULLSCREEN_WEB_IN_BODY=!0,io.LOG_VERSION=!0,io.USE_RAF=!1,io.REMOVE_SRC_WHEN_DESTROY=!0,ao=io,so=qn,p&&(window.Artplayer=ao,a("artplayer-style",so),setTimeout(()=>{ao.LOG_VERSION&&console.log(`%c ArtPlayer %c ${ao.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),io}); diff --git a/packages/artplayer/dist/artplayer.legacy.js b/packages/artplayer/dist/artplayer.legacy.js index bda28836c..f49664937 100644 --- a/packages/artplayer/dist/artplayer.legacy.js +++ b/packages/artplayer/dist/artplayer.legacy.js @@ -67,4 +67,4 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";var t=Object.defineProperty,e=Object.defineProperties,r=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(e,r,n)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,s=(t,e)=>{for(var r in e||(e={}))o.call(e,r)&&a(t,r,e[r]);if(n)for(var r of n(e))i.call(e,r)&&a(t,r,e[r]);return t},l=(t,n)=>e(t,r(n)),c=(t,e,r)=>new Promise((n,o)=>{var i=t=>{try{s(r.next(t))}catch(e){o(e)}},a=t=>{try{s(r.throw(t))}catch(e){o(e)}},s=t=>t.done?n(t.value):Promise.resolve(t.value).then(i,a);s((r=r.apply(t,e)).next())});function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var u,p={exports:{}};var f=(u||(u=1,p.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const g=globalThis.CUSTOM_USER_AGENT,y=null!=g?g:"undefined"===typeof navigator?"":navigator.userAgent,b=/^(?:(?!chrome|android).)*safari/i.test(y),w=/iPad|iPhone|iPod/i.test(y)&&("undefined"===typeof window||!window.MSStream),x=w||y.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,k=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(y)||x,$="undefined"!==typeof window&&"undefined"!==typeof document;const E={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class A extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class C{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new C,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof A?t.push(...e.errors):t.push(e)}if(t.length)throw new A(t)}}const S=new WeakMap,T=new WeakMap;function L(t){const e=S.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function P(t){return L(t).scope}function M(t){const e=L(t);return e.destroying||e.scope.closed}function z(t,e,r,n,o=!1){var i,a,s;const l=L(t);if(l.destroying||l.scope.closed)return;l.destroying=!0;const c=[],d=t=>{try{t()}catch(e){c.push(...e instanceof A?e.errors:[e])}};n&&(null==(i=t.template)?void 0:i.$video)&&d(()=>t.reset()),d(()=>l.scope.dispose()),d(()=>{var e;return null==(e=t.template||l.mountingTemplate)?void 0:e.destroy(r)});const u=e.indexOf(t);-1!==u&&e.splice(u,1),t.isDestroy=!0,o||(null==(a=l.releaseContainer)||a.call(l),l.releaseContainer=void 0),d(()=>t.emit("destroy")),d(()=>l.finalizers.dispose()),o&&l.rollback&&d(l.rollback),l.rollback=void 0,null==(s=l.releaseContainer)||s.call(l),l.releaseContainer=void 0;for(const p of c.slice(1))console.warn("Additional ArtPlayer cleanup failure:",p);if(c.length)throw c[0]}const O=new WeakMap;function R(t,e){const r=P(t).child();return O.set(e,r),r}function D(t){const e=O.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function I(t){var e;null==(e=O.get(t))||e.dispose()}function N(t,e,r,n){const o=D(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function _(t,e){return{on:(r,n)=>{N(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=D(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function W(t){var e;if(t.composedPath)return t.composedPath();const r=[];let n=t.target;for(;n;)r.push(n),n=null!=(e=n.parentNode)?e:null;return"undefined"===typeof window||r.includes(window)||r.push(window),r}function F(t,e){return W(t).includes(e)}function V(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function Y(t){return t.getBoundingClientRect()}function B(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function H(t,e=document){return e.querySelector(t)}function j(t,e){return t.classList.add(e)}function q(t,e){return t.classList.remove(e)}function U(t,e){return t.classList.contains(e)}function X(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function G(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function K(t,e){G(t).forEach(t=>q(t,e)),j(t,e)}function Z(t,e){return e.parentNode.replaceChild(t,e),t}function J(t){return document.createElement(t)}function Q(t,e,r="top"){k||(t.setAttribute("aria-label",e),j(t,"hint--rounded"),j(t,`hint--${r}`))}function tt(t="",e=""){const r=J("i");return j(r,"art-icon"),j(r,`art-icon-${t}`),X(r,e),r}function et(t,e,r){return t.style[e]=r,t}function rt(t,e){for(const r in e)et(t,r,e[r]);return t}function nt(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new C;let a=!1,s=()=>{};function l(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function c(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void c(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const l=new Image;d(l,()=>c(l)),i.closed||(l.src=e)}catch(e){l(e)}}))}),i.closed||(n.src=t)}catch(u){l(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){l(u)}},e.onerror=()=>l(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class ot extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function it(t,e){if(!t)throw new ot(e);return t}function at(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function st(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function lt(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function ct(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ut(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const pt={"&":"&","<":"<",">":">","'":"'",'"':"""},ft={"&":"&","<":"<",">":">","'":"'",""":'"'},ht=/(&|<|>|'|")/g;function mt(t){return t.replace(/[&<>'"]/g,t=>pt[t]||t)}const vt=Object.defineProperty,{hasOwnProperty:gt}=Object.prototype;function yt(t,e){return gt.call(t,e)}function bt(t,e){return Object.getOwnPropertyDescriptor(t,e)}function wt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?wt(o,i):i,vt(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function xt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function kt(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function $t(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const Et=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:ot,addClass:j,append:X,assToVtt:$t,capitalize:dt,clamp:ct,createElement:J,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:vt,download:lt,errorHandle:it,escape:mt,get:bt,getComposedPath:W,getExt:st,getIcon:tt,getRect:Y,getSafeAreaInsets:B,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:yt,hasClass:U,includeFromEvent:F,inverseClass:K,isBrowser:$,isIOS:w,isIOS13:x,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:k,isSafari:b,loadImg:function(t,e){return nt(t,e,void 0)},mergeDeep:wt,query:H,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:q,replaceElement:Z,secondToTime:ut,setStyle:et,setStyleText:v,setStyles:rt,siblings:G,silencePromise:at,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:xt,supportsFlex:V,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Q,unescape:function(t){return t.replace(ht,t=>ft[t]||t)},userAgent:y,vttToBlob:kt},Symbol.toStringTag,{value:"Module"}));function At(){}function Ct(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||(null==s?void 0:s.aborted))return At;let l=At;function c(e){a&&l(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,c,o),l=t.add(()=>{try{e.removeEventListener(r,c,i)}finally{null==s||s.removeEventListener("abort",l)}}),null==s||s.addEventListener("abort",l,{once:!0}),l}function St(t,e,r){if(t.closed)return At;let n=!0,o=At;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function Tt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=At;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const Lt=new WeakSet;function Pt(t){Lt.add(t),t.preventDefault()}function Mt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function zt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;Ct(t,e,"keydown",t=>{const e=t;a(e)&&Mt(e)&&!e.defaultPrevented&&("Enter"===e.key?(Pt(e),!e.repeat&&i()&&r()):" "===e.key&&(Pt(e),!e.repeat&&i()&&(o=!0)))}),Ct(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&Mt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(Pt(n),r())}),Ct(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function Ot(t,e){return X(t,e)}function Rt(t,e){return e.querySelector(t)}const Dt=new WeakSet;function It(t){const e=t.template.$player;!M(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Dt.has(e)||(Dt.add(e),P(t).add(()=>{Dt.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Nt=new WeakSet,_t="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Wt(t){return[t,...t.querySelectorAll(_t)].find(t=>{var e;if(!t.matches(_t)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t);return"hidden"!==(null==r?void 0:r.visibility)&&"collapse"!==(null==r?void 0:r.visibility)})}function Ft(t,e,r){var n;const o=null==e?void 0:e.ownerDocument,i=null==o?void 0:o.activeElement;if(!["control","contextmenu"].includes(null!=(n=t.name)?n:"")||Nt.has(t)||!e||!o||!i||!e.contains(i))return()=>{};const a=t.art.template.$player,s=Array.from(a.querySelectorAll(`.art-${t.name}`)),l=s.indexOf(e),c=[...s.slice(l+1),...s.slice(0,l).reverse()];return Nt.add(t),()=>{var e;if(Nt.delete(t),M(t.art)||!a.isConnected||o.activeElement!==o.body)return;const n=r?null==(e=t.cache.get(r))?void 0:e.$ref:void 0;for(const t of[...n?[n]:[],...c]){if(!a.contains(t))continue;const e=Wt(t);if(e)return void e.focus({preventScroll:!0})}It(t.art)}}const Vt="array",Yt="boolean",Bt="string",Ht="number",jt="object",qt="function";function Ut(t,e,r){return it(e===Bt||e===Ht||t instanceof Element,`${r.join(".")} require '${Bt}' or 'Element' type`)}const Xt={html:Ut,disable:`?${Yt}`,name:`?${Bt}`,index:`?${Ht}`,style:`?${jt}`,click:`?${qt}`,mounted:`?${qt}`,tooltip:`?${Bt}|${Ht}`,width:`?${Ht}`,selector:`?${Vt}`,onSelect:`?${qt}`,switch:`?${Yt}`,onSwitch:`?${qt}`,range:`?${Vt}`,onRange:`?${qt}`,onChange:`?${qt}`},Gt={id:Bt,container:Ut,url:Bt,poster:Bt,type:Bt,theme:Bt,lang:Bt,volume:Ht,isLive:Yt,muted:Yt,autoplay:Yt,autoSize:Yt,autoMini:Yt,loop:Yt,flip:Yt,playbackRate:Yt,aspectRatio:Yt,screenshot:Yt,setting:Yt,hotkey:Yt,pip:Yt,mutex:Yt,backdrop:Yt,fullscreen:Yt,fullscreenWeb:Yt,subtitleOffset:Yt,miniProgressBar:Yt,useSSR:Yt,playsInline:Yt,lock:Yt,gesture:Yt,fastForward:Yt,autoPlayback:Yt,autoOrientation:Yt,airplay:Yt,proxy:`?${qt}`,plugins:[qt],layers:[Xt],contextmenu:[Xt],settings:[Xt],controls:[l(s({},Xt),{position:(t,e,r)=>{const n=["top","left","right"];return it("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}})],quality:[{default:`?${Yt}`,html:Bt,url:Bt}],highlight:[{time:Ht,text:Bt}],thumbnails:{url:Bt,number:Ht,column:Ht,width:Ht,height:Ht,scale:Ht},subtitle:{url:Bt,name:Bt,type:Bt,style:jt,escape:Yt,encoding:Bt,onVttLoad:qt},moreVideoAttr:jt,i18n:jt,icons:jt,cssVar:jt,customType:jt},Kt=new WeakSet;class Zt{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return U(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?j(e,r):q(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){var e;if(M(this.art))return;const r="function"===typeof t?t(this.art):t;if(M(this.art))return;if(r.html=r.html||"",h(r,Xt),!this.$parent||!this.name||r.disable)return;const n=r.name||`${this.name}${this.id}`,o=this.cache;it(!o.has(n),`Can't add an existing [${n}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=R(this.art,i),s=[],l=Object.getOwnPropertyDescriptor(this,n);let c=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){j(t,`art-${r}`),j(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):X(e,t),i.html&&X(t,i.html),i.style&&rt(t,i.style),i.tooltip&&Q(t,i.tooltip)}(i,this.$parent,this.name,n,this.id,r),a.closed)return;if(r.click){("control"===this.name&&!r.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&zt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),r.click.call(this.art,this,t))});s.push(t)}if(r.selector&&["left","right"].includes(r.position)&&this.selector(r,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,n,i),c=!0,o.set(n,{$ref:i,events:s,option:r}),r.mounted&&r.mounted.call(this.art,i),i}catch(d){try{I(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw(null==(e=o.get(n))?void 0:e.$ref)===i&&o.delete(n),c&&this[n]===i&&(l?Object.defineProperty(this,n,l):delete this[n]),i.remove(),d}}remove(t){it(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Kt.has(e))return;const r=Ft(this,e.$ref);Kt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{I(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Kt.delete(e),r()}}update(t){var e;const r=Ft(this,null==(e=this.cache.get(t.name))?void 0:e.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{r()}}}function Jt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Qt(t,e){var r,n;const o=D(t);if(!o.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const i of t.querySelectorAll("[data-value]"))zt(o,i),i.setAttribute("aria-label",`${e}: ${null!=(n=null==(r=i.textContent)?void 0:r.trim())?n:""}`);Jt(t)}}const te=new WeakMap;function ee(t,e){e?te.set(t,e):te.delete(t)}function re(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=te.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function ne(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function oe(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}class ie extends Zt{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,R(t,this.$parent),k||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=_(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="1"]',t);n&&K(n,"art-current"),Qt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="default"]',t);n&&K(n,"art-current"),Qt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(dt(t))}`).join(""),i=r.get("Video Flip");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="normal"]',t);n&&K(n,"art-current"),Qt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"flip",index:30})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return l(s({},t),{html:`ArtPlayer ${m}`})}({name:"version",index:50})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let s=0;s{this.show=!0,i.closed||M(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:l}=Y(n),{height:c,width:d}=Y(o);let u=e-s,p=r-l;e+d>s+a&&(u=a-d),r+c>l+i&&(p=i-c),M(t)||rt(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=D(o),a=()=>!i.closed&&!M(r);let s,l=!1,c="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?re(t):n,ee(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&oe(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||l&&e===n.ownerDocument.body,d=s;s=void 0,l=!1,c="",ee(o),i&&(d&&n.contains(d)&&oe(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&It(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),ee(o)}),Ct(i,o,"focusin",()=>{l=!0});let m=!1;return Ct(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,St(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),Ct(i,n,"keydown",n=>{var i;const s=n;if(!a()||!Mt(s)||s.defaultPrevented)return;if(("ContextMenu"===s.key||"F10"===s.key&&s.shiftKey)&&r.constructor.CONTEXTMENU&&!ne(s.target)){Pt(s),u();const r=s.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&(null==(i=p()[0])||i.focus({preventScroll:!0})))}if(!t.show||!o.contains(s.target))return;if("Escape"===s.key)return Pt(s),void(t.show=!1);if("Tab"===s.key)return void(t.show=!1);if(ne(s.target))return;const l=p(),f=l.indexOf(s.target);let h;if("ArrowDown"===s.key||"ArrowRight"===s.key)h=l[(f+1)%l.length];else if("ArrowUp"===s.key||"ArrowLeft"===s.key)h=l[(f+l.length-1)%l.length];else if("Home"===s.key)h=l[0];else if("End"===s.key)h=l[l.length-1];else{if(1!==s.key.length||" "===s.key)return;{const t=s.key.toLowerCase();c=Date.now()-d>700?t:c+t,d=Date.now();const e=[...c].every(e=>e===t)?t:c;h=[...l.slice(f+1),...l.slice(0,f+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}Pt(s),null==h||h.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||ne(t.target))&&(u(),!0)}}(this,a);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),a(t.clientX,t.clientY))}),o(e,"click",t=>{F(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const ae=new WeakMap,se=new WeakMap,le=new WeakMap;function ce(t){return le.get(t)||P(t)}function de(t){const e=ae.get(t),r=le.get(t);return()=>ae.get(t)===e&&(!e||e.active())&&le.get(t)===r&&(!r||!r.closed)}function ue(t){const e=le.get(t),r=P(t).child(),n=r.child();le.set(t,r),r.add(()=>{le.get(t)===r&&le.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!M(t)&&!n.closed&&ae.get(t)===o};return ae.set(t,o),n.add(()=>{ae.get(t)===o&&ae.delete(t),o.onAssigned=void 0,o.onError=void 0}),null==e||e.dispose(),o}function pe(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&(null==e||e())}function fe(t,e,r){se.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{se.get(t)===e&&(se.delete(t),pe(e))}}function he(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function me(t,e){const{$progress:r}=t.template,{left:n}=Y(r),o=ct((k?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:ut(i),width:o,percentage:ct(o/r.clientWidth,0,1)}}function ve(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=me(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ge=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function ye(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),l=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),Ct(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!Mt(r)||r.defaultPrevented)return;const i=ge.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;Pt(r);const c=n();if(!a(c))return void l();const d="Home"===r.key?c.min:"End"===r.key?c.max:s(c.value,c)+i*c.step;o(s(d,c)),l()}),l()),l}const be=new WeakMap;function we(t){return be.get(t)||0}function xe(t,e,r){let n,o=!1,i=!1,a=!1,s=we(t);const l=()=>a||we(t)!==s,c=()=>{var e,r;return!!(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)};return{restore(i=()=>{t.currentTime=e}){if(!r()||l())return;const d=we(t);i(),s=we(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!l()&&(o=c()))},manual(){a=!0},ready(){if(!r()||c())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!l()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!c()}}}function ke(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=D(e),{on:a}=_(t,e);let s=()=>{};const l=Rt(".art-progress-hover",e),c=Rt(".art-progress-loaded",e),d=Rt(".art-progress-played",e),u=Rt(".art-progress-highlight",e),p=Rt(".art-progress-indicator",e),f=Rt(".art-progress-tip",e);function h(r,n){const{width:o,time:i}=n||me(t,r);f.textContent=i||"00:00";const a=f.clientWidth;o<=a/2?et(f,"left",0):o>e.clientWidth-a/2?et(f,"left",e.clientWidth-a+"px"):et(f,"left",o-a/2+"px")}r.indicator?X(p,r.indicator):et(p,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const m="played"===r&&a&&k;if("loaded"===r&&et(c,"width",100*n+"%"),"hover"===r&&(et(l,"width",100*n+"%"),F(a,u)?function(r){const{width:n}=me(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;f.textContent=null!=o?o:"";const i=f.clientWidth;n<=i/2?et(f,"left",0):n>e.clientWidth-i/2?et(f,"left",e.clientWidth-i+"px"):et(f,"left",n-i/2+"px")}(a):h(a),0===n?q(o,"art-progress-hover"):j(o,"art-progress-hover")),"played"===r&&(et(d,"width",100*n+"%"),et(p,"left",100*n+"%")),m){j(o,"art-progress-hover");h(a,{width:e.clientWidth*n,time:ut(n*t.duration)}),s(),s=St(i,()=>{q(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){u.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function $e(t){return e=>l(s({},t),{html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ke(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=_(t,e),a=D(e);let s=0;const l=()=>{const e=de(t);return()=>!a.closed&&!M(t)&&e()},c=()=>{const t=++s,e=l();return()=>t===s&&e()};if(!k){let e;i(r,"click",e=>{e.target!==n&&ve(t,e,c())}),i(r,"mousemove",e=>{const r=l(),{percentage:n}=me(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?c():void 0}),o("document:mousemove",r=>{const n=e;if(null==n?void 0:n()){const{second:o,percentage:i}=me(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=D(e),{on:n}=_(t,e);let o,i=0;const a=ye(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${ut(e)} / ${ut(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;null==o||o.dispose();const s=r.child();o=s;const l=ce(t).add(()=>{s.dispose()});s.add(()=>{l()}),s.add(()=>{o===s&&(o=void 0)});const c=de(t),d=()=>n===i&&!s.closed&&!M(t)&&c(),u=xe(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function Ee(t){const{option:e}=t.art;e.isLive||t.add($e({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.play),s=Ot(t,o.pause);function l(){t.setAttribute("aria-label",i.get("Play")),et(a,"display","flex"),et(s,"display","none")}function c(){t.setAttribute("aria-label",i.get("Pause")),et(a,"display","none"),et(s,"display","flex")}zt(D(t),t,()=>(e.playing?s:a).click()),Q(a,i.get("Play")),Q(s,i.get("Pause")),n(a,"click",()=>{at(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?c():l(),r("video:playing",()=>{c()}),r("video:pause",()=>{l()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.volume),s=Ot(t,o.volumeClose);for(const e of[a,s])zt(D(t),e),e.setAttribute("aria-label",i.get("Mute"));const l=Ot(t,'
'),c=Ot(l,'
'),d=Ot(c,'
'),u=Ot(c,'
'),p=Ot(u,'
'),f=Ot(p,'
'),h=Ot(u,'
'),m=D(t);let v=0;const g=ye(m,u,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||m.closed||M(e)||(e.volume=t/100)},"vertical");function y(t){const{top:e,height:r}=Y(u);return 1-(t.clientY-e)/r}function b(){g();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)et(a,"display","none"),et(s,"display","flex"),et(h,"top","100%"),et(f,"top","100%"),d.textContent="0";else{const t=100*e.volume;et(a,"display","flex"),et(s,"display","none"),et(h,"top",100-t+"%"),et(f,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(b(),r("video:volumechange",b),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),k)et(l,"display","none");else{let t=!1;n(u,"mousedown",r=>{t=0===r.button,e.volume=y(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=y(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>l(s({},t),{style:k?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=_(e,t);function n(){const r=`${ut(e.currentTime)} / ${ut(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!P(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!k&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.screenshot),r(t,"click",()=>{at(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;Ot(t,o.setting),zt(D(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Q(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t),Ot(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Q(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenWebOn),s=Ot(t,o.fullscreenWebOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Q(t,i.get("Exit Web Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Web Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenOn),s=Ot(t,o.fullscreenOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Q(t,i.get("Exit Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rSe.get(t).option.selector}),vt(t,"$control_item",{get:()=>Se.get(t).item}),vt(t,"$control_value",{get:()=>Se.get(t).value})),Se.set(t,e)}function Le(t,e){t.innerHTML=e}function Pe(t,e,r,n,o){const{proxy:i}=t.events,a=D(n),s=r.selector;j(n,"art-control-selector");const l=document.createElement("div");j(l,"art-selector-value"),X(l,r.html),n.textContent="",X(n,l);const d=Ot(n,'
');for(let c=0;cc(null,null,function*(){var o,i;if(a.closed)return;const s=W(n),c=r.selector.find(t=>s.includes(t.$control_item));if(!c)return;const d=++u,p=()=>!a.closed&&d===u,f=a.add(function(t,e){return Ae.set(t,e),()=>{Ae.get(t)===e&&Ae.delete(t)}}(n,p));try{if(e(c),a.closed)return;if(r.onSelect){const e=yield r.onSelect.call(t,c,c.$control_item,n);if(p()){const t=l.contains(l.ownerDocument.activeElement);Le(l,e),null==(i=null==(o=Se.get(c))?void 0:o.refresh)||i.call(o,t)}}}catch(h){console.warn("ArtPlayer selector failed:",h)}finally{f()}}));o.push(p);const f=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(Ce));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,l=!1,c=!1,d="",u=0;const p=()=>i.length>0&&(l||s&&!c),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(Ce)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{l=t,c=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},v=e=>{e&&!t.closed&&((e.querySelector(Ce)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},g=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",v(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};zt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&g()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(Ce)||(b.tabIndex=-1,zt(t,b,()=>{b.click(),y()}))}return Ct(t,r,"keydown",t=>{const e=t;!Mt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(Pt(e),g("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(Pt(e),y()))}),Ct(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&g()}),Ct(t,n,"keydown",t=>{var e;const r=t;if(!Mt(r)||r.defaultPrevented)return;if("Escape"===r.key)return Pt(r),void y();const n=i.indexOf(r.target);if(n<0)return;let o;switch(1!==r.key.length&&(d=""),r.key){case"ArrowDown":o=Math.min(n+1,i.length-1);break;case"ArrowUp":o=Math.max(n-1,0);break;case"Home":o=0;break;case"End":o=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void Pt(r);default:{if(1!==r.key.length||" "===r.key)return;const t=Date.now();d=t-u<500?d+r.key.toLocaleLowerCase():r.key.toLocaleLowerCase(),u=t;const a=[...d].every(t=>t===d[0])?d[0]:d;for(let r=1;r<=i.length;r++){const t=(n+r)%i.length;if(null==(e=i[t].textContent)?void 0:e.trim().toLocaleLowerCase().startsWith(a)){o=t;break}}}}Pt(r),void 0!==o&&v(i[o])}),Ct(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),Ct(t,e,"mouseenter",()=>{s=!0,m(l)}),Ct(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),Ct(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,l,d,String(r.tooltip||r.name||l.textContent||t.i18n.get("Open")));for(const c of s)Se.get(c).refresh=f}class Me extends Zt{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},l=()=>{i=!0,s()},c=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(null==o||o.dispose(),n=e.ownerDocument,o=t.child(),Ct(o,n,"keydown",l,{capture:!0}),Ct(o,n,"mousedown",c,{capture:!0}),Ct(o,n,"touchstart",c,{capture:!0,passive:!0}))};return d(),Ct(t,e,"keydown",l,{capture:!0}),Ct(t,e,"mousedown",c,{capture:!0}),Ct(t,e,"touchstart",c,{capture:!0,passive:!0}),Ct(t,e,"focusin",()=>{d(),s()}),Ct(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}(R(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=_(t,n);a(r,"focusin",e=>{var r;t.isFocus=!0,t.isInput="INPUT"===(null==(r=e.target)?void 0:r.tagName)}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{k||(this.show=!0)}),i("click",()=>{k?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=F(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(q(r,"art-hide-cursor"),j(r,"art-hover"),this.timer=Date.now()):(j(r,"art-hide-cursor"),q(r,"art-hover"))}),this.init(),P(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=D(e),{on:i}=_(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);t.observe(r),o.add(()=>{t.disconnect()})}else if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){Ee(this)}add(t){if(M(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:it(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){var e,r;if(!t)return;const n=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);Le(t.$control_value,t.html);for(let o=0;othis.check(t),t,e,r)}}function ze(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{var n;if(M(t))return;const o=F(r,e);t.isInput=o&&"INPUT"===(null==(n=r.target)?void 0:n.tagName),t.isFocus=o,t.emit(o?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),P(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(M(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:l}=r,c=o.filter(t=>n-t<=a);switch(c.length){case 1:if(t.emit("click",e),M(t))return;(!k||!t.isLock&&i)&&at(t.toggle()),o=c;break;case 2:if(t.emit("dblclick",e),M(t))return;k?!t.isLock&&s&&at(t.toggle()):l&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function Oe(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!M(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),P(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(M(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:de(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ve(t,i,()=>n(s))}catch(l){throw e===s&&r(),l}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,l=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,l].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const c=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===c||2===c:3===c||4===c))return;const d=ct((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=ct(i.time+t.duration*d*l,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",ct(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${ut(u)} / ${ut(t.duration)}`))},cancel:r}}const Re=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],De=["resize","scroll","orientationchange"];const Ie=new WeakMap;function Ne(t){const e=Ie.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function _e(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=_e(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ne(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(null==o?void 0:o.capture),once:Boolean(null==o?void 0:o.once),passive:null==o?void 0:o.passive,signal:null==o?void 0:o.signal},l="boolean"===typeof s?s:s.capture,c="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||(null==c?void 0:c.aborted))return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,l),null==c||c.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):(null==c?void 0:c.aborted)?p():null==c||c.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function We(t){return(e,r)=>{if(M(t))return;const n=(...e)=>{if(!M(t))return r(...e)};t.on(e,n),P(t).add(()=>{t.off(e,n)})}}function Fe(t){if(!t.constructor.USE_RAF)return;const e=P(t);let r=()=>{};const n=()=>{M(t)||(t.playing&&t.emit("raf"),M(t)||(r=function(t,e){if(t.closed)return At;let r=!0,n=At;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),We(t)("destroy",()=>r())}class Ve{constructor(t){this.destroyEvents=new Set,function(t,e){Ie.set(t,{scope:P(e),cleaning:!1})}(this,t),P(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),ze(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{M(t)||(j(r,"art-hover"),t.emit("hover",!0,e))},e=>{M(t)||(q(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{M(t)||t.emit("mousemove",e)})}(t,this),function(t,e){var r,n;const{option:o,constructor:i}=t,a=We(t);a("resize",()=>{const{aspectRatio:e,notice:r}=t;"standard"===t.state&&o.autoSize&&t.autoSize(),M(t)||(t.aspectRatio=e,M(t)||(r.show=""))});const s=P(t);let l=()=>{};const c=()=>{M(t)||(l(),l=St(s,()=>t.emit("resize"),i.RESIZE_TIME))};a("window:orientationchange",c),a("window:resize",c);const d=null==(n=null==(r=t.template.$player.ownerDocument.defaultView)?void 0:r.screen)?void 0:n.orientation;"function"===typeof(null==d?void 0:d.addEventListener)&&e.proxy(d,"change",c)}(t,this),function(t,e){if(!k||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=Oe(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=P(t),a=We(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=(null==o?void 0:o.innerHeight)||n.documentElement.clientHeight,a=(null==o?void 0:o.innerWidth)||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,l=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&l}(n,r.SCROLL_GAP)),M(t)||(s=!0,St(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;P(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){var a;if(M(t))return;const s=++n,l={disposers:[]},c=()=>s!==n||M(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,s=i.window||(null==(a=n.ownerDocument)?void 0:a.defaultView)||window,d=(n,o,i)=>{for(const a of o){if(c())return;l.disposers.push(e.proxy(n,a,e=>{r!==l||M(t)||t.emit(`${i}:${a}`,e)}))}};d(o,Re,"document"),d(s,De,"window")}catch(u){throw o(l),u}if(c())return void o(l);const d=r;r=l,o(d)}i(),e.bindGlobalEvents=i}(t,this),Fe(t)}proxy(t,e,r,n={}){return Array.isArray(e),_e(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ne(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Ye(t){if(t&&1===t.nodeType)return t}function Be(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function He(t,e){var r,n,o,i;if(function(t){return Lt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const a=function(t,e){var r;const n=t.target;return 9===(null==n?void 0:n.nodeType)?n:(null==n?void 0:n.ownerDocument)||(null==(r=t.view)?void 0:r.document)||e}(t,e);let s=Ye(a.activeElement);for(;null==(r=null==s?void 0:s.shadowRoot)?void 0:r.activeElement;)s=Ye(s.shadowRoot.activeElement);if(s&&Be(s))return!1;const l=Ye(null==(n=t.composedPath)?void 0:n.call(t)[0])||Ye(t.target),c="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(c||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(c?",a[href]":"");if((null==(o=null==l?void 0:l.closest)?void 0:o.call(l,t))||(null==(i=null==s?void 0:s.closest)?void 0:i.call(s,t)))return!1}return!l||!Be(l)}const je=new WeakMap;class qe{constructor(t){this.art=t,this.keys={},je.set(this,{subscribed:!1}),k||this.init()}init(){const t=this.art;if(M(t))return;const e=je.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{at(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!M(t)){if(t.isFocus&&He(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ue={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ue);class Xe{constructor(t){this.art=t,this.languages={"zh-cn":Ue},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=yt(this.languages,t)&&this.languages[t]||{}}get(t){return yt(this.language,t)&&this.language[t]||t}update(t){this.languages=wt(this.languages,t),this.init()}}const Ge={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class Ke{constructor(t){const e=s(s({},Ge),t.option.icons);for(const r in e)vt(this,r,{get:()=>tt(r,e[r])})}}const Ze=new WeakMap;function Je(t,e,r){const n=()=>!e.closed&&!M(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:l,$video:c}}=t,d=i(l,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!M(t),s=()=>n.classList.contains("art-info-show"),l=t.i18n.get("Close");if(!a())return;const c=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",l),o.setAttribute("role","group"),o.setAttribute("aria-label",c),zt(e,i,()=>i.click(),s),Ct(e,o,"keydown",t=>{const e=t;a()&&s()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),r())});const d=e=>{var r;if(!a())return;const s=n.ownerDocument,l=s.activeElement;if(e)o.contains(l)||(Ze.delete(t),l&&n.contains(l)&&(Ze.set(t,re(l)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Ze.get(t);if(Ze.delete(t),!o.contains(l))return;const i=e&&(null==(r=s.defaultView)?void 0:r.getComputedStyle(e).visibility);(null==e?void 0:e.isConnected)&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):It(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{var t;try{for(const e of u){if(!n())return;const r=Reflect.get(c,null!=(t=e.dataset.video)?t:"undefined");if(!n())return;const o="number"===typeof r?r.toFixed(2):r;if(!n())return;if(e.textContent!==o){const t=null==o?null:`${o}`;if(!n())return;e.textContent=t}}n()&&St(e,f,a.INFO_LOOP_TIME)}catch(r){o(r)}};n()&&f()}catch(i){o(i)}}const Qe=new WeakMap;class tr extends Zt{constructor(t){super(t),this.name="info",Qe.set(this,{revision:0}),k||this.init()}init(){var t;const e=Qe.get(this),r=++e.revision;if(null==(t=e.scope)||t.dispose(),M(this.art)||e.revision!==r)return;const n=P(this.art).child();e.scope=n,n.add(()=>{e.scope===n&&(e.scope=void 0)}),Je(this.art,n,()=>{this.show=!1})}}class er extends Zt{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{et(i,"display","none"),et(s,"display",null),M(t)&&(l=!0)};var d;t.on("destroy",c),(d=t,L(d).finalizers).add(()=>{try{l||c()}finally{t.off("destroy",c)}}),M(t)||n.proxy(e.$state,"click",()=>{M(t)||at(t.play())})}}const or=new WeakMap;function ir(t){const e=or.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class ar{constructor(t){this.art=t,this.timer=null,or.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),P(t).add(()=>{t.off("destroy",e)}),P(t).add(()=>{this.destroy()})}destroy(){ir(this)}set show(t){if(M(this.art))return;const e=or.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){ir(this);const i=e.revision,a=()=>!M(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(j(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const l={};e.pending=l;const c=setTimeout(()=>{if(M(this.art)||e.pending!==l)return;e.pending=void 0;const t=e.revision;o.textContent="",M(this.art)||e.revision!==t||q(n,"art-notice-show")},s);a()?this.timer=c:clearTimeout(c)}else q(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function sr(t,e){return function(t,e){const r=wt(e,t);return r.container=t.container,h(r,Gt)}(t,e)}function lr({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function cr(t,e){if(!lr(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return lr(r)?r:void 0}function dr(t,e,r,n=!1){const o=e=>{M(t)||r(e)};t[n?"once":"on"](e,o),P(t).add(()=>{t.off(e,o)})}function ur(t,e,r){for(const[n,o]of e){if(M(t)||r&&!r())return;t[n].show=o}}function pr(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=ce(t),l=0;return{reset(){l=0,null==a||a.dispose(),q(i,"art-error")},loadStart(){q(i,"art-error")},schedule(d){(d=>c(null,null,function*(){if(M(t))return;const c=ce(t);if(c!==s&&(s=c,l=0),a&&!a.closed)return;const u=c.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!M(t)&&!u.closed&&c===ce(t),f=l{console.warn("ArtPlayer reconnect failed:",t)})}}}const fr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],hr=(()=>{if("undefined"===typeof document)return!1;const t=fr[0],e={};for(const r of fr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),mr={change:hr.fullscreenchange,error:hr.fullscreenerror},vr={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{vr.off("change",o),r()};vr.on("change",o);const i=t[hr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!vr.isFullscreen)return void t();const r=()=>{vr.off("change",r),t()};vr.on("change",r);const n=document[hr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>vr.isFullscreen?vr.exit():vr.request(t,e),onchange(t){vr.on("change",t)},onerror(t){vr.on("error",t)},on(t,e){const r=mr[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=mr[t];r&&document.removeEventListener(r,e,!1)},raw:hr};function gr(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(vr,{isFullscreen:{get:()=>Boolean(document[hr.fullscreenElement])},element:{enumerable:!0,get:()=>document[hr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[hr.fullscreenEnabled])}});const yr=new WeakMap;function br(t){try{Promise.resolve(t()).catch(()=>{})}catch(e){}}function wr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=yr.get(t);if(!n){n=new WeakMap,yr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),br(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),br(i))}function xr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,l=!1,c=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!l){l=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{l||(l=!0,c=!0,a(),d&&!u&&r&&wr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(Ct(i,t.document,t.changeEvent,m),Ct(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){var e;null==(e=yr.get(t.document))||e.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,c&&!u&&r&&wr(t),u?Promise.resolve(e).then(()=>{c?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(v){h(!0,v)}return{promise:f,cancel:()=>i.dispose()}}function kr(t,e){const r=P(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),l=0,c=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch(t){}}return r.add(()=>{l+=1,c=!1,n.classList.remove("art-fullscreen"),f()}),Ct(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){var e,r;return null!=(r=null==(e=yr.get(t.document))?void 0:e.has(t.target))&&r}(e))return;if(r&&u)return void f();if(r===s||M(t))return;s=r;const o=l,a=()=>M(t)||i()!==r||o!==l&&c!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),Ct(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!M(t)&&t.emit("fullscreenError",r)}),{get:()=>!M(t)&&i(),set(n){if(M(t))return Promise.resolve();const o=++l;if(c=Boolean(n),c?u=!1:d&&(u=!0),null==a||a.cancel(),a=void 0,d=!1,!c&&!i())return Promise.resolve();p=!0,d=c;const s=xr(e,r,c,()=>{!M(t)&&c||f()},()=>!i());p=!1,l===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw M(t)||l!==o||(t.notice.show=e),e}).finally(()=>{l===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const $r=new WeakSet;function Er(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function Ar(t){$r.delete(t),t.removeEventListener("webkitbeginfullscreen",Cr),t.removeEventListener("webkitpresentationmodechanged",Cr)}function Cr(t){var e;if($r.has(this)&&Er(this,"webkitbeginfullscreen"===t.type)){Ar(this);try{null==(e=this.webkitExitFullscreen)||e.call(this)}catch(r){}}}function Sr(t){$r.add(t),t.addEventListener("webkitbeginfullscreen",Cr),t.addEventListener("webkitpresentationmodechanged",Cr)}function Tr(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=Er(e),i=o,a=!1,s=0;const l=()=>Er(e,n);function c(r){if(M(t)||(c=e,$r.has(c)))return;var c;"boolean"===typeof r&&(n=r);const d=l();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>M(t)||l()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{var t;s++,i=!1,a&&Sr(e),l()&&(null==(t=e.webkitExitFullscreen)||t.call(e))}),Ct(r,e,"webkitbeginfullscreen",()=>c(!0)),Ct(r,e,"webkitendfullscreen",()=>c(!1)),Ct(r,e,"webkitpresentationmodechanged",()=>c());const d=()=>c();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!M(t)&&l(),set(r){if(M(t))return;const n=++s;if(i=Boolean(r),r){if(Ar(e),t.state="fullscreen",M(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,Sr(e)),l()&&e.webkitExitFullscreen()}}}function Lr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function Pr({node:t,parent:e,next:r}){var n;if(!e)return void(null==(n=t.parentNode)||n.removeChild(t));const o=(null==r?void 0:r.parentNode)===e?r:null;t.parentNode===e&&t.nextSibling===o||e.insertBefore(t,o)}function Mr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function zr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function Or(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const l=t.icons.play,c=t.icons.pause;if(o.closed)return;i.append(l,c),s.append(e,i),zt(o,e,()=>e.click(),r),zt(o,i,()=>(t.playing?c:l).click(),r);const d=t.i18n.get("Close");if(o.closed||M(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||M(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),Ct(o,s,"keydown",t=>{const e=t;r()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),n())}),Ct(o,e,"click",n),Ct(o,l,"click",()=>{at(t.play())}),Ct(o,c,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||M(t)||(i.setAttribute("aria-label",e),l.style.display=t.playing?"none":"flex",c.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};Ct(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const l=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},c=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=Mr(i.left,i.top,zr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",l),r.add(()=>{t.off("document:mousemove",l)}),t.on("document:mouseup",c),r.add(()=>{t.off("document:mouseup",c)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(l){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,l}}function Rr(t){const{$player:e,$video:r}=t.template,n=P(t).child();let o,i,a=0,c=!1,d=!1;const u=()=>!M(t)&&e.classList.contains("art-mini"),p=function(t){const e=t.template.$player;let r;return{entering(){var n;const o=e.ownerDocument,i=o.activeElement,a=i&&e.contains(i);(null==(n=t.template.$mini)?void 0:n.contains(i))||(r=a?re(i):void 0);const s=a&&e.classList.contains("art-keyboard-focus");return e=>{!s||M(t)||o.activeElement!==i&&o.activeElement!==o.body||null==e||e()}},leaving(n){const o=e.ownerDocument,i=null==n?void 0:n.contains(o.activeElement);return()=>{var e;if(!i||M(t)||o.activeElement!==o.body&&!(null==n?void 0:n.contains(o.activeElement)))return;const a=r&&(null==(e=o.defaultView)?void 0:e.getComputedStyle(r).visibility);(null==r?void 0:r.isConnected)&&r.getClientRects().length&&"hidden"!==a&&"collapse"!==a&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):It(t)}}}}(t);function f(){if(i){const e=i,r=a;i=void 0;try{Pr(e)}catch(t){throw r!==a||i||(i=e),t}}}function h(){if(M(t))return;const r=++a;d=!1;const n=p.leaving(t.template.$mini);f(),M(t)||r!==a||(null==o||o.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),M(t)||r!==a||t.emit("mini",!1)))}function m(){if(M(t))return;const v=++a;if(c)return void(d=!0);const g=p.entering();if(t.state="mini",!M(t)&&v===a){null!=i||(i=Lr(r)),e.classList.add("art-mini");try{if(!o){c=!0;try{o=Or(t,n,u,h)}finally{c=!1}}if(d)return d=!1,void m();if(!o||M(t))return;if(v!==a)return void(u()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),M(t)||v!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:l(s({},Mr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r)),{reset:!0})}(t.storage.get("left"),e,zr(o.element));if(M(t)||v!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),M(t)||v!==a)return;t.storage.set("left",i.left)}M(t)||v!==a||g(o.focus),M(t)||v!==a||t.emit("mini",!0)}catch(y){const r=d;throw d=!1,M(t)||v!==a&&!r||(f(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),y}}}return n.add(()=>{a++;try{f()}finally{null==o||o.cancelDrag(),e.classList.remove("art-mini")}}),{get:u,set(t){t?m():h()}}}const Dr=new WeakSet,Ir=t=>"picture-in-picture"===t.webkitPresentationMode;function Nr(t){Dr.delete(t),t.removeEventListener("webkitpresentationmodechanged",_r),t.removeEventListener("enterpictureinpicture",_r)}function _r(){var t;if(Dr.has(this)&&Ir(this)){Nr(this);try{null==(t=this.webkitSetPresentationMode)||t.call(this,"inline")}catch(e){}}}function Wr(t){Dr.add(t),t.addEventListener("webkitpresentationmodechanged",_r),t.addEventListener("enterpictureinpicture",_r)}function Fr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Vr(t,e,r){return new Promise((n,o)=>{if(M(t)||e===t.url)return void n();const i=ue(t),a=i.scope.child();let s=!1;const l=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{l()});const d=()=>!s&&i.active(),u=t=>l(!0,t);i.onError=u;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!d())return;const p=a.child();let f=!1,h=!1,m=!1;const v=xe(t,r,d),g=()=>c(null,null,function*(){if(t.aspectRatio=o,d()){if(n)try{yield t.play()}catch(e){}d()&&(t.notice.show="",l())}}),y=()=>{var e,r;if(d()&&!h&&f)try{if(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)return;if(!d())return;if(m||(m=!0,t.playbackRate=s),!v.ready()||!d()||h)return;h=!0,p.dispose(),g().catch(u)}catch(n){u(n)}},b={"video:error":u,"video:loadedmetadata":()=>{if(d())try{v.restore()}catch(t){u(t)}},"video:canplay":()=>{f=!0,y()},"video:seeked":y,seek:v.manual},w=a.child(),x=[],k=Object.keys(b);for(const e of k)Fr(w,t,e,t=>{i.acceptingEvents&&x.push([e,t])},!1);if(fe(t,i,e),!d())return;if(t.notice.show="",!d())return;const $=()=>{if(w.dispose(),!e)return void l();const r={};for(const e of k)r[e]=Fr(p,t,e,b[e],"video:seeked"!==e);for(const[t,e]of x){if(!d()||p.closed)break;r[t](e)}x.length=0};i.assigned?$():i.onAssigned=$}catch(p){u(p)}})}function Yr(t){const{option:e,template:{$video:r}}=t;vt(t,"url",{get:()=>r.src,set(n){return c(this,null,function*(){if(M(t))return;const o=function(t){const e=se.get(t);return se.delete(t),e||ue(t)}(t);o.acceptingEvents=!1;try{if(!n)return void((yield Tt(o.scope))&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||st(n),s=e.customType[a];if(a&&s){if(!(yield Tt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const l=o.scope.child();let c=!1,d=!1;Fr(l,t,"video:canplay",()=>{c=!d}),Fr(l,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>he(o,t))}else{if(!o.active())return;r.src=n}}finally{l.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};c?e():d||Fr(o.scope,t,"video:canplay",e)}}catch(i){he(o,i)}finally{pe(o)}})}})}const Br=[function(t){const{template:{$video:e}}=t;vt(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;vt(t,"play",{value(){return c(this,null,function*(){const a=de(t),s=yield i.play();if(!a())return s;const l=e.get("Play");if(!a())return s;if(r.show=l,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;vt(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${ut(t.currentTime)} / ${ut(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;vt(t,"forward",{set(e){r.seek=t.currentTime+e}}),vt(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;vt(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=ct(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),vt(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;vt(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){be.set(t,we(t)+1)}(t),e.currentTime=ct(n,0,t.duration))}})},function(t){vt(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Vr(t,e,0);vt(t,"switchQuality",{value:e=>Vr(t,e,t.currentTime)}),vt(t,"switchUrl",{value:e}),vt(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;vt(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;vt(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!M(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=cr({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(M(t))return;"width"===(null==r?void 0:r.axis)?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,M(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=de(t);return new Promise((a,s)=>{const l=r=>{try{!M(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,l):a(n.toDataURL("image/png"))}catch(c){l(c)}})}vt(t,"getDataURL",{value:()=>o(!1)}),vt(t,"getBlobUrl",{value:()=>o(!0)}),vt(t,"screenshot",{value:e=>c(null,null,function*(){const n=de(t),o=yield t.getDataURL();if(!M(t)&&n()){const i=e||`artplayer_${ut(r.currentTime)}`;!M(t)&&n()&<(o,`${i}.png`),!M(t)&&n()&&t.emit("screenshot",o)}return o})})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(M(t))return;const i=function(t){const e=vr.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>gr(t,e.requestFullscreen,void 0),exit:()=>gr(r,e.exitFullscreen)}}(o);i?vt(t,"fullscreen",kr(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?vt(t,"fullscreen",Tr(t)):vt(t,"fullscreen",{get:()=>!1,set(){M(t)||(r.show=e.get("Fullscreen Not Supported"))}}),vt(t,"fullscreen",bt(t,"fullscreen"))};t.once("video:loadedmetadata",i),P(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(Pr(t.placement),r()))}return P(t).add(()=>{var t;n+=1;const i=r;if(r=void 0,i)try{o(i,()=>!0)}catch(a){try{e.parentNode!==i.placement.parent&&(null==(t=e.parentNode)||t.removeChild(e))}catch(s){throw new A([a,s])}throw a}}),i=>{if(M(t))return;const a=++n,s=()=>a===n&&!M(t),l=function(t){var e;const r=null==(e=t.ownerDocument)?void 0:e.activeElement,n=r&&t.contains(r);return()=>{n&&r.isConnected&&t.contains(r)&&r.ownerDocument.activeElement===r.ownerDocument.body&&r.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:Lr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(c){throw s()&&o(n,s)&&(r=void 0,l()),c}if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);vt(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?vt(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=P(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,l=!1,c=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch(t){}}function u(e,r,n){e.then(()=>{!r||!M(t)&&a||d()},e=>{M(t)||c!==n||(t.notice.show=e)}).finally(()=>{c===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{c++,a=!1,d()}),Ct(n,e,"enterpictureinpicture",()=>{if(l)return void d();if(!o()||i)return;const e=c;t.state="pip",!M(t)&&e===c&&o()&&(i=!0,t.emit("pip",!0))}),Ct(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!M(t)&&o()?e:null,set(n){if(M(t))return;const i=++c;if(a=Boolean(n),a?l=!1:s&&(l=!0),s=!1,a){if(t.state="pip",M(t)||c!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw c===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?vt(t,"pip",function(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(M(t)||Dr.has(e))return;const s=Ir(e);if(s&&(o=!1),s===n&&!r)return;const l=i;s&&(t.state="pip"),M(t)||i!==l||Ir(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Wr(e),Ir(e)&&e.webkitSetPresentationMode("inline")});for(const l of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])Ct(r,e,l,()=>s());return{get:()=>!M(t)&&Ir(e),set(r){var n;if(M(t))return;const l=++i,c=a;if(r){if(!1===(null==(n=e.webkitSupportsPresentationMode)?void 0:n.call(e,"picture-in-picture")))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Nr(e),t.state="pip",M(t)||i!==l)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(d){throw l===i&&(o=!1),d}}else o&&(o=!1,Wr(e)),Ir(e)&&e.webkitSetPresentationMode("inline");M(t)||l!==i||c!==a||Ir(e)!==Boolean(r)||s(!0)}}}(t)):vt(t,"pip",{get:()=>!1,set(){M(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;vt(t,"loaded",{get:()=>r.loadedTime/e.duration}),vt(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){vt(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;vt(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;vt(t,"autoSize",{value(){if(M(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!lr(o))return;const i=Y(e),a=cr(i,o.width/o.height);a&&!M(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;vt(t,"rect",{get:()=>Y(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}vt(t,"x",{get:()=>e.left+window.pageXOffset}),vt(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;vt(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){M(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(dt(o))}`,M(t)||t.emit("flip",o))}})},function(t){vt(t,"mini",Rr(t))},function(t){const{template:{$poster:e}}=t;vt(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch(t){return""}},set(t){et(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;vt(t,"autoHeight",{value(){if(M(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!lr(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||M(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;vt(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){vt(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){vt(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];vt(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;n{if(!M(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,M(t)||vt(t,"airplay",{value(){if(!M(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(M(t))return;Reflect.apply(e,o,[]),M(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");M(t)||(r.show=n)}}}))},function(t){vt(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(null==i?void 0:i.html)||"",selector:e,onSelect(e,r,i){return c(this,null,function*(){const r=function(t){return t&&Ae.get(t)||(()=>!0)}(i);if(yield t.switchQuality(e.url),!M(t)&&r()){const i=`${o.get("Switch Video")}: ${e.html}`;!M(t)&&r()&&(n.show=i)}return e.html})}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,l=P(t).child(),c=!1;function d(){const e=l;l=P(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function u(){const i=a,c=l;if(!i||!o)return;const d=()=>{var e;return!M(t)&&!c.closed&&l===c&&a===i&&i.sourceActive()&&(null==(e=t.controls)?void 0:e.thumbnails)===i.element};if(!d())return;const u=r.clientWidth*i.percentage;if(!(u>0&&ud-f/2?d-f+"px":u-f/2+"px"}}(e.thumbnails,{imageWidth:o.naturalWidth,videoWidth:n.videoWidth,videoHeight:n.videoHeight,progressWidth:r.clientWidth,position:u}));for(const[t,e]of Object.entries(p)){if(!d())return;et(i.element,t,e)}}We(t)("setBar",(r,n,s)=>{var p;const f=null==(p=t.controls)?void 0:p.thumbnails,{url:h,scale:m}=e.thumbnails;if(!M(t)&&f&&h&&("hover"===r||"played"===r&&s&&k)){if(i!==f){const t=D(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,d())})}if(a={percentage:n,element:f,sourceActive:de(t)},o)u();else if(!c){const t=l;c=!0,function(t,e,r){return nt(t,e,r)}(h,m,t).then(e=>{l!==t||t.closed||(c=!1,o=e,u())}).catch(e=>{l!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),vt(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{M(t)||!e.url||t.option.isLive||M(t)||(t.option.thumbnails=e,d())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{M(t)||t.emit(`video:${e.type}`,e)})}(t);const e=pr(t);!function(t,e){dr(t,"video:canplay",()=>{e.reset(),ur(t,[["loading",!1]])}),dr(t,"video:canplay",()=>{ur(t,[["loading",!1],["controls",!0],["mask",!0]]),M(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;dr(t,"video:ended",()=>{if(e.loop){const e=de(t);if(t.seek=0,M(t)||!e())return;at(t.play()),e()&&ur(t,[["controls",!1],["mask",!1]],e)}else ur(t,[["controls",!0],["mask",!0]])})}(t),dr(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;dr(t,"video:loadedmetadata",()=>{t.emit("resize"),k&&ur(t,[["loading",!1],["controls",!0],["mask",!0]])}),dr(t,"video:loadstart",()=>{e.loadStart(),ur(t,[["loading",!0],["mask",!1],["controls",!0]])}),dr(t,"video:pause",()=>{ur(t,[["controls",!0],["mask",!0]])}),dr(t,"video:play",()=>{ur(t,[["mask",!1]]),M(t)||et(r,"display","none")}),dr(t,"video:playing",()=>ur(t,[["mask",!1]])),dr(t,"video:progress",()=>{t.playing&&ur(t,[["loading",!1]])}),dr(t,"video:seeked",()=>ur(t,[["loading",!1],["mask",!0]])),dr(t,"video:seeking",()=>ur(t,[["loading",!0],["mask",!1]])),dr(t,"video:timeupdate",()=>ur(t,[["mask",!1]])),dr(t,"video:waiting",()=>ur(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(M(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(M(t))return;const r=e.moreVideoAttr[s];if(M(t))return;t.attr(s,r)}if(M(t))return;if(e.muted){const r=e.muted;if(M(t))return;t.muted=r}if(M(t))return;if(e.volume){const r=ct(e.volume,0,1);if(M(t))return;n.volume=r}if(M(t))return;const i=r.get("volume");if(M(t))return;if("number"===typeof i&&(n.volume=ct(i,0,1)),M(t))return;if(e.poster){const r=`url(${e.poster})`;if(M(t))return;et(o,"backgroundImage",r)}if(M(t))return;if(e.autoplay){const r=e.autoplay;if(M(t))return;n.autoplay=r}if(M(t))return;if(e.playsInline){if(M(t))return;if(n.playsInline=!0,M(t))return;n["webkit-playsinline"]=!0}if(M(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(M(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(M(t))return;const r=e.cssVar[s];if(M(t))return;t.cssVar(s,r)}if(M(t))return;const a=e.url;M(t)||(t.url=a)}];class Hr{constructor(t){if(!M(t)){Yr(t);for(const e of Br){if(M(t))return;e(t)}}}}const jr=new WeakMap,qr="art-auto-orientation-fullscreen";function Ur(t){if(jr.get(t.orientation)===t)try{t.orientation.unlock()}catch(e){}}const Xr="art-auto-orientation",Gr=["width","height","transform-origin","transform"];function Kr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return lr(t)&&lr(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=P(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(Xr);r.classList.remove(Xr),n&&(t.isRotate=!1,M(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=B();if(M(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;null!=o||(o=Gr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(Xr),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{var l;M(t)||(r?o?s(!1):e()&&(i(),i=St(n,()=>{o||s(!0)},Number(null!=(l=t.constructor.AUTO_ORIENTATION_TIME)?l:0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(qr),t&&(t.cancelled=!0,Ur(t),t.settled&&jr.get(t.orientation)===t&&jr.delete(t.orientation))}return P(t).add(o),i=>{var a,s;if(M(t))return;if(!i)return void o();if(n&&!n.cancelled&&jr.get(n.orientation)===n)return;const l=null==(s=null==(a=r.ownerDocument.defaultView)?void 0:a.screen)?void 0:s.orientation;if("function"!==typeof(null==l?void 0:l.lock)||"function"!==typeof l.unlock||!e())return;const c={orientation:l,cancelled:!1,settled:!1};n=c,jr.set(l,c);const d=()=>!M(t)&&!c.cancelled&&n===c&&jr.get(l)===c,u=e=>{c.settled=!0;const o=d();jr.get(l)===c&&jr.delete(l),n===c&&(n=void 0),o&&(r.classList.remove(qr),t.notice.show=e)};try{const t=l.lock(l.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{c.settled=!0,d()?r.classList.add(qr):(Ur(c),jr.get(l)===c&&jr.delete(l))}).catch(u)}catch(p){u(p)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),P(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Zr(t){return t.get("times")||{}}function Jr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||M(t))return()=>{};const s=Rt(".art-auto-playback-last",a),l=Rt(".art-auto-playback-jump",a),c=Rt(".art-auto-playback-close",a);Ot(c,r.close);const d=D(a);let u,p=0;const f=()=>{const r=++p;if(null==u||u.dispose(),d.closed||M(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!M(t);f.add(()=>{u===f&&(u=void 0,et(a,"display","none"))});const m=ce(t).add(()=>{f.dispose()});f.add(()=>{m()});const v=Zr(n)[t.option.id||t.option.url];if(!h())return;if(et(a,"display","none"),!h()||!v||!(v>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(et(a,"display","flex"),!h())return;const g=`${e.get("Last Seen")} ${ut(v)}`;if(!h())return;if(s.textContent=g,!h())return;const y=e.get("Jump Play");if(!h())return;if(l.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(c,()=>{et(a,"display","none")}),!h())return;if(b(l,()=>{t.seek=v,h()&&(at(t.play()),h()&&(et(i,"display","none"),h()&&et(a,"display","none")))}),!h())return;let w=()=>{},x=!1;const k=()=>{!x&&h()&&(x=!0,w(),St(f,()=>{h()&&et(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",k),w=f.add(()=>{t.off("video:timeupdate",k)}),x&&w()};return()=>{N(t,a,"ready",f),N(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;We(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Zr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;M(t)||(o.length>i&&delete n[o[0]],n[a]=s,M(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Zr(e)},clear:()=>e.del("times"),delete(t){const r=Zr(e);return delete r[t],e.set("times",r),r}}}function Qr(t){let e,r=0;return{start:n=>{const o=++r;if(null==e||e.scope.dispose(),o!==r||M(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:ce(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{(null==e?void 0:e.active)||q(t.template.$player,"art-fast-forward")}}),St(i.scope,()=>{if(e!==i||M(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||M(t))return;t.playbackRate=r,e!==i||i.scope.closed||M(t)||j(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,null==e||e.scope.dispose()}}}function tn(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Qr(t),i=We(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return U(r,"art-fast-forward")}}}function en(t,e,r,n){let o;const i=()=>!r.closed&&!M(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),zt(r,e),Ct(r,e,"keydown",t=>{const r=t;i()&&n()&&Mt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(Pt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function rn(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return U(n,"art-lock")}function i(){M(t)||(j(n,"art-lock"),M(t)||(t.isLock=!0,M(t)||t.emit("lock",!0)))}function a(){M(t)||(q(n,"art-lock"),M(t)||(t.isLock=!1,M(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=D(e);if(n.closed||M(t))return;const i=Ot(e,r.lock);if(n.closed||M(t))return;const a=Ot(e,r.unlock);if(n.closed||M(t))return;const s=en(t,e,n,o);n.closed||M(t)||(o()?(et(i,"display","inline-flex"),n.closed||M(t)||et(a,"display","none")):et(i,"display","none"),N(t,e,"lock",e=>{M(t)||(et(i,"display",e?"inline-flex":"none"),n.closed||M(t)||et(a,"display",e?"none":"inline-flex"),n.closed||M(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function nn(t){return We(t)("control",e=>{e?q(t.template.$player,"art-mini-progress-bar"):j(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class on{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){M(t.art)||!e.miniProgressBar||e.isLive||t.add(nn),!M(t.art)&&e.lock&&k&&t.add(rn),M(t.art)||!e.autoPlayback||e.isLive||t.add(Jr),!M(t.art)&&e.autoOrientation&&k&&t.add(Kr),!M(t.art)&&e.fastForward&&k&&!e.isLive&&t.add(tn)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){it(!M(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(M(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(M(t.art))return t;let o=n;const i=yt(t,o);if(M(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return M(t.art)||(it(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),M(t.art)||vt(t,o,{value:r})),t}(this,t,e)}}const an=new WeakMap;function sn(t){return!t.closed&&!an.get(t)}function ln(t){an.set(t,(an.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(an.get(t)||1)-1;r?an.set(t,r):an.delete(t)}}const cn=new WeakMap,dn=new WeakMap,un=["$parent","$parents","$option","$events","$formatted"];function pn(t){var e,r;const n=new Set;let o=t;for(;o&&!n.has(o);){n.add(o);const t=cn.get(o);if(!t||!t.owner.active||(null==(e=t.owner.scope)?void 0:e.closed)||!t.option.includes(o))return!1;if(!t.parent)return t.owner.root===t.option;if((null==(r=cn.get(t.parent))?void 0:r.owner)!==t.owner)return!1;o=t.parent}return!1}function fn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function hn(t){const e=cn.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function mn(t,e){var r;for(let n=0;n{c&&c!==r&&c.dispose()},()=>kn(t,o)])try{e()}catch(d){d instanceof A?l.push(...d.errors):l.push(d)}if(r.closed||M(t)||(o.push(...i.splice(0)),xn.set(r,o),bn.set(e,r),wn.set(e,n)),a(),l.length)throw new A(l)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function Sn(t,e,r,n,o,i){const a=i||En(e);if(!sn(a)||M(t))return;const s=t.proxy(r,n,e=>{if(sn(a)&&!M(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!sn(a)||M(t)?t.events.remove(s):(hn(e).events.push(s),i&&i!==bn.get(e)&&i.add(()=>{const r=hn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function Tn(t,e,r,n){const o=En(e);if(!sn(o)||M(t))return;const i=(...e)=>{if(sn(o)&&!M(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}function Ln(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}function Pn(t){return Array.from(t.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter(t=>"-1"!==t.getAttribute("tabindex")&&Ln(t))}function Mn(t,e,r=!1){if(!t.show||M(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!sn(gn(n)))return;const o=Pn(n),i=n.querySelector(".art-setting-item.art-current"),a=o.find(t=>e===t||(null==e?void 0:e.contains(t)))||(r?o[o.length-1]:o.find(t=>null==i?void 0:i.contains(t))||o.find(t=>!t.classList.contains("art-setting-item-back"))||o[0]);null==a||a.focus({preventScroll:!0}),M(t.art)||null==a||a.scrollIntoView({block:"nearest",inline:"nearest"})}function zn(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!M(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!(null==r?void 0:r.getClientRects().length))&&Mn(t,o)}}function On(t){const{art:e}=t,r=P(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||M(e)||t.render()},a=i=>{r.closed||M(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&Mn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!M(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&Ln(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&It(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),Ct(r,e.template.$player,"keydown",r=>{var n,a;const s=r;if(!Mt(s)||s.defaultPrevented||M(e))return;const l=s.target;if(l===e.controls.setting){if("ArrowDown"===s.key||"ArrowUp"===s.key)if(Pt(s),t.show)Mn(t,void 0,"ArrowUp"===s.key);else{o="ArrowUp"===s.key;try{t.show=!0}finally{o=!1}}else"Escape"===s.key&&t.show&&(Pt(s),i());return}if(!t.show||!t.$parent.contains(l))return;if("Escape"===s.key)return Pt(s),void i();const c=l.closest(".art-setting-item");if(!c||l!==c&&!l.matches('button,a[href],[role="button"]'))return;const d=t.active&&t.cache.get(t.active);if(!d)return;const u=null==(n=t.active)?void 0:n.find(t=>t.$item===c);if(!sn(gn(d))||u&&!sn(En(u)))return void(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(s.key)&&Pt(s));const p=Pn(d),f=p.indexOf(l);if(f<0)return;let h;switch(s.key){case"ArrowDown":h=Math.min(f+1,p.length-1);break;case"ArrowUp":h=Math.max(f-1,0);break;case"Home":h=0;break;case"End":h=p.length-1;break;case"ArrowLeft":{const t=d.querySelector(".art-setting-item-back");return Pt(s),void(null==t||t.click())}case"ArrowRight":return Pt(s),void((null==(a=null==u?void 0:u.selector)?void 0:a.length)&&l.click());default:return}Pt(s),void 0!==h&&Mn(t,p[h])});let s=!1;Ct(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,St(r,()=>{s=!1,r.closed||M(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function Rn(t){var e,r;const{art:n,active:o}=t,{controls:i,constructor:{SETTING_WIDTH:a,SETTING_ITEM_HEIGHT:s},template:{$player:l,$setting:c,$bottom:d}}=n;if(!i.setting||!t.show||!o)return;const u=l.getBoundingClientRect(),p=i.setting.getBoundingClientRect(),f=u.width/l.offsetWidth||1,h=(p.left-u.left+p.width/2)/f-l.clientLeft,m=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:l}=t,c=Math.min(Math.max(0,l),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*c));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-c)),left:Math.max(c,Math.min(a-d/2,e-c-d))}}({containerWidth:l.clientWidth,containerHeight:l.clientHeight,requestedWidth:(null==(r=null==(e=o[0])?void 0:e.$parent)?void 0:r.width)||a,rows:o.length+(o===t.option?0:1),rowHeight:s,controlCenter:h,bottom:Number.parseFloat(getComputedStyle(c).bottom)||0,padding:Number.parseFloat(getComputedStyle(d).paddingLeft)||0});c.style.height=`${m.height}px`,c.style.width=`${m.width}px`,n.isRotate||k||(h+m.width/2>l.clientWidth?(c.style.left="",c.style.right=""):(c.style.left=`${m.left}px`,c.style.right="auto"))}const Dn=new WeakMap;function In(t){Dn.delete(t)}const Nn=new WeakMap;function _n(t,e){e?Nn.set(t,e):Nn.delete(t)}function Wn(t){var e;const r=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),n=[],o=Nn.get(t),i=null==o?void 0:o();for(const a of["html","icon","tooltip"]){const t=null==(e=r.get(a))?void 0:e.value;t instanceof Node&&n.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{var e,a;for(const n of Reflect.ownKeys(t))!r.has(n)&&(null==(e=Object.getOwnPropertyDescriptor(t,n))?void 0:e.configurable)&&Reflect.deleteProperty(t,n);for(const[n,o]of r)Object.defineProperty(t,n,o);null==i||i(),_n(t,o);for(const{node:t,parent:r,next:o}of n)r?r.insertBefore(t,(null==o?void 0:o.parentNode)===r?o:null):null==(a=t.parentNode)||a.removeChild(t)}}function Fn(t){var e,r;const n=null==(e=t.$item)?void 0:e.querySelector(".art-setting-range");n&&n.setAttribute("aria-label",(null==(r=t.$html)?void 0:r.textContent)||"")}const Vn=new WeakMap;function Yn(t,e,r,n,o,i,a,s){return c(this,null,function*(){try{const l=En(e),c=En(i),d=(Vn.get(i)||0)+1;Vn.set(i,d);const u=()=>sn(l)&&sn(c)&&!M(t.art)&&Vn.get(i)===d;if(null==s||s(),!u())return;const p=yield o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(l){console.warn("ArtPlayer setting callback failed:",l)}})}function Bn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const Hn=new WeakMap;function jn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof A?e.push(...r.errors):e.push(r)}if(e.length)throw new A(e)}function qn(t){var e;null==(e=Hn.get(t))||e()}function Un(t,e){const r=t.find(e.name);if(M(t.art))return r||e;if(!r)return t.add(e);const n=zn(t);In(r),qn(r);const o=Wn(r),i=r.$item,a=null==i?void 0:i.parentNode,s=null==i?void 0:i.nextSibling,l=i?Bn(i):void 0,c=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=Cn(t.art,e);r&&i.push(r)}for(const t of n)a.push(ln(gn(t)))}catch(l){try{jn([...i.reverse().map(t=>t.resume),...a])}catch(c){console.warn("ArtPlayer setting restore failed:",c)}throw l}let s=!0;return{items:r,resume(){s&&(s=!1,jn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,jn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>yn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);if(M(t.art))return void u.dispose();const e=r.$item;try{jn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>null==l?void 0:l(),()=>{a&&i&&a.insertBefore(i,(null==s?void 0:s.parentNode)===a?s:null)},()=>t.format(),()=>{if(f){t.active=c,c&&t.cache.has(c)&&K(t.cache.get(c),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!M(t.art)&&Hn.get(r)===h;for(const y of u.items)Hn.set(y,h);const v=P(t.art).add(()=>{p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!(null==o?void 0:o.enumerable)||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)Hn.get(t)===h&&Hn.delete(t);return u.dispose(),n(r.$item),r}catch(g){throw m()&&h(),g}finally{v()}}const Xn=new WeakMap;function Gn(t,e,r){vt(t,`$${e}`,{configurable:!0,get:()=>r}),vt(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",X(r,n),"html"===e&&Fn(t)}})}function Kn(t,e,r=!1){var n,o;const i=function(t){const e=Hn.get(t);return()=>!e||Hn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const a=t.cache.get(e.$option),s=e.$item;let l="selector";yt(e,"switch")&&(l="switch"),yt(e,"range")&&(l="range"),yt(e,"onClick")&&(l="button");const{icons:c,constructor:d}=t.art;if(!i())return;const u=function(t,e,r=P(t)){const n=bn.get(e);(!n||sn(n)||n.closed)&&An(t,e);const o=r.child();return bn.set(e,o),wn.set(e,r),xn.set(o,hn(e).events),o.add(()=>{kn(t,xn.get(o))}),o}(t.art,e,gn(a)),p=()=>sn(u)&&!M(t.art)&&i();if(!p())return;const f=document.createElement("div");try{if(_n(e),j(f,"art-setting-item"),et(f,"height",`${d.SETTING_ITEM_HEIGHT}px`),f.dataset.name=e.name||"",f.dataset.value=String(e.value||""),!p())return;const i=Ot(f,'
'),h=Ot(f,'
'),m=document.createElement("div");switch(j(m,"art-setting-item-left-icon"),l){case"button":case"switch":case"range":{const t=e.icon||c.config;if(!p())return;X(m,t);break}case"selector":if(null==(n=e.selector)?void 0:n.length){const t=e.icon||c.config;if(!p())return;X(m,t)}else X(m,c.check)}if(X(i,m),!p())return;Gn(e,"icon",m);const v=document.createElement("div");j(v,"art-setting-item-left-text");const g=e.html||"";if(!p())return;X(v,g),X(i,v),Gn(e,"html",v);const y=document.createElement("div");j(y,"art-setting-item-right-tooltip");const b=e.tooltip||"";if(!p())return;switch(X(y,b),X(h,y),Gn(e,"tooltip",y),l){case"switch":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=Ot(t,c.switchOn),n=Ot(t,c.switchOff),o=e.switch;if(!p())return;et(o?n:r,"display","none"),X(h,t),vt(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!p())return;_n(e,()=>{const t=i;return()=>{i=t}}),vt(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,f.setAttribute("aria-checked",String(Boolean(t))),t?(et(n,"display","none"),et(r,"display",null)):(et(n,"display",null),et(r,"display","none"))}});break}case"range":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",X(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!p())return;Reflect.set(r,i,String(t))}j(r,"art-setting-range"),X(h,t),vt(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!p())return;_n(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),vt(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(null==(o=e.selector)?void 0:o.length){const t=document.createElement("div");j(t,"art-setting-item-right-icon"),X(t,c.arrowRight),X(h,t)}}if(!p())return;if(function(t,e,r,n){const{art:o}=t,i=En(e),a=(t,r,n)=>Sn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Yn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Yn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{var o,i;if(null==(o=e.selector)?void 0:o.length)t.render(e.selector);else{if(null==(i=e.$parent)?void 0:i.onSelect)return Yn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&j(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Yn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,f,l),!p())return;vt(e,"$item",{configurable:!0,get:()=>f}),function(t,e,r,n,o){var i;"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||(null==(i=e.selector)?void 0:i.length)||r.setAttribute("aria-current",String(Boolean(e.default))),zt(o,r,()=>r.click(),()=>sn(o)&&!M(t.art))):Fn(e)}(t,e,f,l,u),r&&(null==s?void 0:s.parentNode)?s.replaceWith(f):X(a,f),e.mounted&&p()&&St(u,()=>{var r;if(!M(t.art))try{const n=null==(r=e.mounted)?void 0:r.call(t.art,f,e);Promise.resolve(n).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(n){console.warn("ArtPlayer setting mounted failed:",n)}},0)}catch(h){try{u.dispose()}catch(m){console.warn("ArtPlayer setting cleanup failed:",m)}throw f.remove(),h}}function Zn(t,e=t.option){var r,n,o,i,a,s;if(M(t.art))return;const l=zn(t),c=t.cache.get(e);if(c&&!sn(gn(c)))return;const d=(Xn.get(t)||0)+1;Xn.set(t,d);const u=()=>Xn.get(t)===d&&!M(t.art),p=t.active,f=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),h=()=>{t.active=p,p&&t.cache.has(p)&&K(t.cache.get(p),"art-current");for(const[e,r,n]of f)t.$parent.style.setProperty(e,r,n)};if(t.active=e,c)try{K(c,"art-current"),t.resize()}catch(m){throw u()&&t.cache.get(e)===c&&!gn(c).closed&&h(),m}else{const a=document.createElement("div");t.cache.set(e,a);const s=function(t,e,r){const n=P(t.art).child();return vn.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,a),l=()=>!s.closed&&!M(t.art)&&t.cache.get(e)===a,c=[];try{if(!l())return;j(a,"art-setting-panel"),a.setAttribute("role","group"),a.setAttribute("aria-label",(null==(o=null==(n=null==(r=e[0])?void 0:r.$parent)?void 0:n.$html)?void 0:o.textContent)||t.art.i18n.get("Settings")),X(t.$parent,a),K(a,"art-current"),(null==(i=e[0])?void 0:i.$parent)&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=dn.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=P(e).child(),n=(t,n)=>{if(r.closed||M(e))return;const o=(...t)=>{if(!r.closed&&!M(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=F(r,e.controls.setting),o=F(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||M(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),On(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(dt(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{Tn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){mn(e,t)}check(t){!function(t,e){(null==e?void 0:e.$parent)&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&K(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=dn.get(t)||{active:!0},a=[],s=new Set,l=new Set(o),c=(t,e,r)=>{var n;for(let o=0;ohn(t).parent},$parents:{get:()=>hn(t).parents},$option:{get:()=>hn(t).option},$events:{get:()=>hn(t).events},$formatted:{get:()=>!0}}),cn.set(t,{parent:r,parents:n,option:o,events:(null==a?void 0:a.events)||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return mn(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){Rn(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&yn(n)}catch(i){r.push(i)}}try{An(t.art,e)}catch(i){i instanceof A?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new A(r)}(this,t)}remove(t){const e=zn(this),r=this.find(t);it(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{In(t),qn(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>null==o?void 0:o.remove(),()=>this.render()])try{s()}catch(a){a instanceof A?i.push(...a.errors):i.push(a)}if(i.length)throw new A(i);e()}update(t){return Un(this,t)}add(t,e=this.option){var r;if(M(this.art))return t;let n=!1;this.traverse(e=>{n||(n=e===t)});const o=e.length,i=n?void 0:function(t){const e={};Dn.set(t,e);const r=()=>Dn.get(t)===e;return{current:r,finish(){r()&&Dn.delete(t)}}}(t);let a=!1;try{e.push(t),this.format(),a=!0,this.createItem(t),this.render()}catch(s){if(M(this.art)||i&&!i.current())throw s;if(e[o]===t&&e.splice(o,1),!n&&a){try{this.inactivate(t)}catch(l){console.warn("ArtPlayer setting cleanup failed:",l)}null==(r=t.$item)||r.remove()}throw s}finally{null==i||i.finish()}return t}createHeader(t){!function(t,e){var r;if(!t.cache.has(e.$option))return;const n=t.cache.get(e.$option),{icons:{arrowLeft:o},constructor:{SETTING_ITEM_HEIGHT:i}}=t.art,a=document.createElement("div");et(a,"height",`${i}px`),j(a,"art-setting-item"),j(a,"art-setting-item-back");const s=Ot(a,'
'),l=document.createElement("div");j(l,"art-setting-item-left-icon"),X(l,o),X(s,l),X(s,e.$parent.html),Sn(t.art,e.$parent,a,"click",()=>t.render(e.$parents),gn(n));const c=gn(n);a.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||zt(c,a,()=>a.click(),()=>sn(c)&&!M(t.art)),a.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${(null==(r=a.textContent)?void 0:r.trim())||""}`),X(n,a)}(this,t)}createItem(t,e=!1){Kn(this,t,e)}render(t=this.option){Zn(this,t)}}class to{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch(e){return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch(r){this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch(e){delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch(t){this.settings={}}}}const eo='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class ro{constructor(t){var e;this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=null==(e=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope))?void 0:e.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}run(t){return c(this,null,function*(){if(this.active)try{return yield Promise.race([t(),this.cancelled])}finally{this.cancel()}})}}const no=new WeakMap;function oo(t){return no.get(t)}function io(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const ao=Zt;class so extends ao{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=P(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return no.set(t,n),r.add(()=>{io(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){var t,e;return null==(e=null==(t=this.art.template.$video)?void 0:t.textTracks)?void 0:e[0]}get activeCues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.activeCues)||[])}get cues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.cues)||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?rt(r,t):et(r,t,e)}update(){!function(t){const e=oo(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?mt(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}switch(t){return c(this,arguments,function*(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i=l(s(s({},o.subtitle),e),{url:t}),a=oo(this),c=a.revision+1,d=yield this.init(i);return!a.scope.closed&&a.revision===c&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),d})}createTrack(t,e){!function(t,e,r){const n=oo(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,l=s.parentNode,c=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const l=t.textTrack,c=l?i.proxy(l,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(c)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=c,s.onload=null,s.onerror=null,p=!0;try{null==f||f.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&io(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,l&&l.insertBefore(s,(null==c?void 0:c.parentNode)===l?c:null),f}}(this,t,e)}init(t){return c(this,null,function*(){const e=oo(this),r=function(t){const e=t.request,r=new ro(t.scope);return t.request=r,t.revision+=1,null==e||e.cancel(),r}(e),{notice:n,template:{$subtitle:o}}=this.art;return r.run(()=>c(this,null,function*(){if(!this.textTrack)return null;if(h(t,Gt.subtitle),!t.url)return;let i;this.option=t,this.style(t.style);try{if(!r.active)return;const n=yield fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const a=yield n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||st(e.url)){case"srt":return{vtt:e.onVttLoad(xt(r))};case"ass":return{vtt:e.onVttLoad($t(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(a,t);if(!r.active)return;const l=void 0===s?t.url:i=kt(s.vtt);if(!r.active)return;o.innerHTML="";const c=e.trackRevision+1;if(this.url!==l&&this.createTrack("metadata",l),!r.active||e.trackRevision>c)return;return i&&(e.ownedURL=i,i=void 0),l}catch(a){if(!r.active)return;throw o.innerHTML="",n.show=a,a}finally{i&&(e.scope.closed||this.url!==i?URL.revokeObjectURL(i):e.ownedURL=i)}}))})}}const lo=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${m}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class co{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=H(e.container),it(this.$container,`No container element found by ${e.container}`)),it(V(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();it("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),it(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=T.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=L(t);o.rollback=r,T.set(e,t),o.releaseContainer=()=>{T.get(e)===t&&T.delete(e)}}(t,this.$container,Bn(this.$container)),function(t,e,r){const n=L(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return lo}query(t){return H(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=co.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(M(this.art))return;!function(t){it(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),Z(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&j(this.$player,"art-backdrop"),k&&j(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":j(this.$player,"art-destroy")}}const uo=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class po{on(t,e,r){const n=this.e||(this.e={});let o=uo(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(uo(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=uo(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new co(this),P(this).closed)return;if(this.events=new Ve(this),P(this).closed)return;if(this.storage=new to,P(this).closed)return;if(this.icons=new Ke(this),P(this).closed)return;if(this.i18n=new Xe(this),P(this).closed)return;if(this.notice=new ar(this),P(this).closed)return;if(this.player=new Hr(this),P(this).closed)return;if(this.layers=new er(this),P(this).closed)return;if(this.controls=new Me(this),P(this).closed)return;if(this.contextmenu=new ie(this),P(this).closed)return;if(this.subtitle=new so(this),P(this).closed)return;if(this.info=new tr(this),P(this).closed)return;if(this.loading=new rr(this),P(this).closed)return;if(this.hotkey=new qe(this),P(this).closed)return;if(this.mask=new nr(this),P(this).closed)return;if(this.setting=new Qn(this),P(this).closed)return;if(this.plugins=new on(this),P(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),mo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${mo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=L(t);return e.rollback=void 0,!e.scope.closed})(this)&&ho.push(this)}catch(r){try{z(this,ho,!0,mo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return ho}static get version(){return m}static get config(){return E}static get utils(){return Et}static get scheme(){return Gt}static get Emitter(){return po}static get validator(){return h}static get kindOf(){return h.kindOf}static get html(){return co.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:b?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:null==navigator?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){z(this,ho,t,mo.REMOVE_SRC_WHEN_DESTROY)}}var vo,go;return mo.STYLE=eo,mo.DEBUG=!1,mo.CONTEXTMENU=!0,mo.NOTICE_TIME=2e3,mo.SETTING_WIDTH=250,mo.SETTING_ITEM_WIDTH=200,mo.SETTING_ITEM_HEIGHT=35,mo.RESIZE_TIME=200,mo.SCROLL_TIME=200,mo.SCROLL_GAP=50,mo.AUTO_PLAYBACK_MAX=10,mo.AUTO_PLAYBACK_MIN=5,mo.AUTO_PLAYBACK_TIMEOUT=3e3,mo.RECONNECT_TIME_MAX=5,mo.RECONNECT_SLEEP_TIME=1e3,mo.CONTROL_HIDE_TIME=3e3,mo.DBCLICK_TIME=300,mo.DBCLICK_FULLSCREEN=!0,mo.MOBILE_DBCLICK_PLAY=!0,mo.MOBILE_CLICK_PLAY=!1,mo.AUTO_ORIENTATION_TIME=200,mo.INFO_LOOP_TIME=1e3,mo.FAST_FORWARD_VALUE=3,mo.FAST_FORWARD_TIME=1e3,mo.TOUCH_MOVE_RATIO=.5,mo.VOLUME_STEP=.1,mo.SEEK_STEP=5,mo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],mo.ASPECT_RATIO=["default","4:3","16:9"],mo.FLIP=["normal","horizontal","vertical"],mo.FULLSCREEN_WEB_IN_BODY=!0,mo.LOG_VERSION=!0,mo.USE_RAF=!1,mo.REMOVE_SRC_WHEN_DESTROY=!0,vo=mo,go=eo,$&&(window.Artplayer=vo,v("artplayer-style",go),setTimeout(()=>{vo.LOG_VERSION&&console.log(`%c ArtPlayer %c ${vo.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),mo}); +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.Artplayer=e(),define(function(){return t.Artplayer})):(t="undefined"!==typeof globalThis?globalThis:t||self).Artplayer=e()}(this,function(){"use strict";var t=Object.defineProperty,e=Object.defineProperties,r=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(e,r,n)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,s=(t,e)=>{for(var r in e||(e={}))o.call(e,r)&&a(t,r,e[r]);if(n)for(var r of n(e))i.call(e,r)&&a(t,r,e[r]);return t},l=(t,n)=>e(t,r(n)),c=(t,e,r)=>new Promise((n,o)=>{var i=t=>{try{s(r.next(t))}catch(e){o(e)}},a=t=>{try{s(r.throw(t))}catch(e){o(e)}},s=t=>t.done?n(t.value):Promise.resolve(t.value).then(i,a);s((r=r.apply(t,e)).next())});function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var u,p={exports:{}};var f=(u||(u=1,p.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e=Object.prototype.toString,r=function(r){if(void 0===r)return"undefined";if(null===r)return"null";var o=t(r);if("boolean"===o)return"boolean";if("string"===o)return"string";if("number"===o)return"number";if("symbol"===o)return"symbol";if("function"===o)return"GeneratorFunction"===n(r)?"generatorfunction":"function";if(function(t){return Array.isArray?Array.isArray(t):t instanceof Array}(r))return"array";if(function(t){return!(!t.constructor||"function"!=typeof t.constructor.isBuffer)&&t.constructor.isBuffer(t)}(r))return"buffer";if(function(t){try{if("number"==typeof t.length&&"function"==typeof t.callee)return!0}catch(e){if(-1!==e.message.indexOf("callee"))return!0}return!1}(r))return"arguments";if(function(t){return t instanceof Date||"function"==typeof t.toDateString&&"function"==typeof t.getDate&&"function"==typeof t.setDate}(r))return"date";if(function(t){return t instanceof Error||"string"==typeof t.message&&t.constructor&&"number"==typeof t.constructor.stackTraceLimit}(r))return"error";if(function(t){return t instanceof RegExp||"string"==typeof t.flags&&"boolean"==typeof t.ignoreCase&&"boolean"==typeof t.multiline&&"boolean"==typeof t.global}(r))return"regexp";switch(n(r)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(t){return"function"==typeof t.throw&&"function"==typeof t.return&&"function"==typeof t.next}(r))return"generator";switch(o=e.call(r)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return o.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(t){return t.constructor?t.constructor.name:null}function o(t,e){var n=2{document.head.appendChild(r)}):(document.head||document.documentElement).appendChild(r)),r.textContent=e}const g=globalThis.CUSTOM_USER_AGENT,y=null!=g?g:"undefined"===typeof navigator?"":navigator.userAgent,b=/^(?:(?!chrome|android).)*safari/i.test(y),w=/iPad|iPhone|iPod/i.test(y)&&("undefined"===typeof window||!window.MSStream),x=w||y.includes("Macintosh")&&"undefined"!==typeof navigator&&navigator.maxTouchPoints>=1,k=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(y)||x,$="undefined"!==typeof window&&"undefined"!==typeof document;const E={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]};class A extends Error{constructor(t){super("Failed to release ArtPlayer resources"),this.errors=t,this.name="ResourceCleanupError"}}class C{constructor(){this.cleanups=new Set,this.disposed=!1}get closed(){return this.disposed}add(t){let e=!0;const r=()=>{e&&(e=!1,this.cleanups.delete(r),t())};return this.closed?r():this.cleanups.add(r),r}child(){const t=new C,e=this.add(()=>{t.dispose()});return t.add(()=>{e()}),t}dispose(){if(this.closed)return;this.disposed=!0;const t=[];for(const r of Array.from(this.cleanups).reverse())try{r()}catch(e){e instanceof A?t.push(...e.errors):t.push(e)}if(t.length)throw new A(t)}}const S=new WeakMap,T=new WeakMap;function L(t){const e=S.get(t);if(!e)throw new Error("ArtPlayer lifecycle has not been initialized");return e}function P(t){return L(t).scope}function M(t){const e=L(t);return e.destroying||e.scope.closed}function z(t,e,r,n,o=!1){var i,a,s;const l=L(t);if(l.destroying||l.scope.closed)return;l.destroying=!0;const c=[],d=t=>{try{t()}catch(e){c.push(...e instanceof A?e.errors:[e])}};n&&(null==(i=t.template)?void 0:i.$video)&&d(()=>t.reset()),d(()=>l.scope.dispose()),d(()=>{var e;return null==(e=t.template||l.mountingTemplate)?void 0:e.destroy(r)});const u=e.indexOf(t);-1!==u&&e.splice(u,1),t.isDestroy=!0,o||(null==(a=l.releaseContainer)||a.call(l),l.releaseContainer=void 0),d(()=>t.emit("destroy")),d(()=>l.finalizers.dispose()),o&&l.rollback&&d(l.rollback),l.rollback=void 0,null==(s=l.releaseContainer)||s.call(l),l.releaseContainer=void 0;for(const p of c.slice(1))console.warn("Additional ArtPlayer cleanup failure:",p);if(c.length)throw c[0]}const O=new WeakMap;function R(t,e){const r=P(t).child();return O.set(e,r),r}function D(t){const e=O.get(t);if(!e)throw new Error("ArtPlayer component has not been registered");return e}function I(t){var e;null==(e=O.get(t))||e.dispose()}function N(t,e,r,n){const o=D(e);if(o.closed)return;const i=(...t)=>{if(!o.closed)return n(...t)};t.on(r,i),o.add(()=>{t.off(r,i)})}function _(t,e){return{on:(r,n)=>{N(t,e,r,n)},proxy:(r,n,o)=>function(t,e,r,n,o){const i=D(e);if(i.closed)return()=>{};const a=t.events.proxy(r,n,t=>{if(!i.closed)return o(t)});return i.add(()=>{t.events.remove(a)})}(t,e,r,n,o)}}function W(t){var e;if(t.composedPath)return t.composedPath();const r=[];let n=t.target;for(;n;)r.push(n),n=null!=(e=n.parentNode)?e:null;return"undefined"===typeof window||r.includes(window)||r.push(window),r}function F(t,e){return W(t).includes(e)}function V(){const t=document.createElement("div");return t.style.display="flex","flex"===t.style.display}function Y(t){return t.getBoundingClientRect()}function B(){const t=document.createElement("div");t.style.cssText="position:fixed;top:env(safe-area-inset-top,0px);right:env(safe-area-inset-right,0px);bottom:env(safe-area-inset-bottom,0px);left:env(safe-area-inset-left,0px);pointer-events:none;visibility:hidden;";try{document.body.appendChild(t);const e=getComputedStyle(t);return{top:Number.parseFloat(e.top)||0,right:Number.parseFloat(e.right)||0,bottom:Number.parseFloat(e.bottom)||0,left:Number.parseFloat(e.left)||0}}finally{t.remove()}}function H(t,e=document){return e.querySelector(t)}function j(t,e){return t.classList.add(e)}function q(t,e){return t.classList.remove(e)}function U(t,e){return t.classList.contains(e)}function X(t,e){return e instanceof Element?t.appendChild(e):t.insertAdjacentHTML("beforeend",String(e)),t.lastElementChild||t.lastChild}function G(t){return Array.from(t.parentElement.children).filter(e=>e!==t)}function K(t,e){G(t).forEach(t=>q(t,e)),j(t,e)}function Z(t,e){return e.parentNode.replaceChild(t,e),t}function J(t){return document.createElement(t)}function Q(t,e,r="top"){k||(t.setAttribute("aria-label",e),j(t,"hint--rounded"),j(t,`hint--${r}`))}function tt(t="",e=""){const r=J("i");return j(r,"art-icon"),j(r,`art-icon-${t}`),X(r,e),r}function et(t,e,r){return t.style[e]=r,t}function rt(t,e){for(const r in e)et(t,r,e[r]);return t}function nt(t,e,r){return new Promise((n,o)=>{const i=r?r.child():new C;let a=!1,s=()=>{};function l(t){if(!a){a=!0;try{i.dispose()}catch(e){console.warn("Additional image cleanup failure:",e)}try{s()}catch(e){console.warn("Additional image cleanup failure:",e)}o(t)}}function c(t){if(!a&&!i.closed){a=!0;try{i.dispose(),n(t)}catch(e){try{s()}finally{o(e)}}}}if(i.add(()=>{if(!a){a=!0;try{s()}finally{n(void 0)}}}),!i.closed)try{const n=new Image;d(n,()=>{if(!e||1===e)return void c(n);const t=document.createElement("canvas"),o=t.getContext("2d");if(t.width=n.width*e,t.height=n.height*e,!o)throw new TypeError("Canvas 2D context is unavailable");a||i.closed||(o.drawImage(n,0,0,t.width,t.height),a||i.closed||t.toBlob(t=>{if(!a&&!i.closed)try{if(!t)throw new Error("Unable to encode thumbnail image");const e=URL.createObjectURL(t);let n=!1;const o=()=>{n||(n=!0,URL.revokeObjectURL(e))};if(s=r?r.add(o):o,a||i.closed)return void s();const l=new Image;d(l,()=>c(l)),i.closed||(l.src=e)}catch(e){l(e)}}))}),i.closed||(n.src=t)}catch(u){l(u)}function d(e,r){e.onload=()=>{if(!a&&!i.closed)try{r()}catch(u){l(u)}},e.onerror=()=>l(new Error(`Image load failed: ${t}`)),i.add(()=>{e.onload=null,e.onerror=null,a||e.removeAttribute("src")})}})}class ot extends Error{constructor(t,e){super(t),"captureStackTrace"in Error&&"function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,e||this.constructor),this.name="ArtPlayerError"}}function it(t,e){if(!t)throw new ot(e);return t}function at(t){const e=t;return e&&"function"===typeof e.catch?e.catch(()=>{}):t}function st(t){const e=t.search(/[?#]/),r=(e<0?t:t.slice(0,e)).trim().toLowerCase();return r.slice(r.lastIndexOf(".")+1)}function lt(t,e){const r=document.createElement("a");r.style.display="none",r.href=t,r.download=e,document.body.appendChild(r);try{r.click()}finally{r.remove()}}function ct(t,e,r){return Math.max(Math.min(t,Math.max(e,r)),Math.min(e,r))}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ut(t){if(!t)return"00:00";const e=Math.floor(t/3600),r=Math.floor((t-3600*e)/60),n=Math.floor(t-3600*e-60*r);return(e>0?[e,r,n]:[r,n]).map(t=>t<10?`0${t}`:String(t)).join(":")}const pt={"&":"&","<":"<",">":">","'":"'",'"':"""},ft={"&":"&","<":"<",">":">","'":"'",""":'"'},ht=/(&|<|>|'|")/g;function mt(t){return t.replace(/[&<>'"]/g,t=>pt[t]||t)}const vt=Object.defineProperty,{hasOwnProperty:gt}=Object.prototype;function yt(t,e){return gt.call(t,e)}function bt(t,e){return Object.getOwnPropertyDescriptor(t,e)}function wt(...t){const e=t=>!!t&&"object"===typeof t&&!Array.isArray(t);return t.reduce((t,r)=>(Object.keys(r).forEach(n=>{const o=t[n],i=r[n];let a;a=Array.isArray(o)&&Array.isArray(i)?o.concat(...i):e(o)&&e(i)?wt(o,i):i,vt(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0})}),t),{})}function xt(t){return"WEBVTT \r\n\r\n".concat((e=t,e.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(t,e,r)=>{let n=r.slice(0,3);return 1===r.length&&(n=`${r}00`),2===r.length&&(n=`${r}0`),`${e},${n}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat("\r\n\r\n"));var e}function kt(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function $t(t){const e=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t=""){return t.split(/[:.]/).map((t,e,r)=>{if(e===r.length-1){if(1===t.length)return`.${t}00`;if(2===t.length)return`.${t}0`}else if(1===t.length)return(0===e?"0":":0")+t;return 0===e?t:e===r.length-1?`.${t}`:`:${t}`}).join("")}return`WEBVTT\n\n${t.split(/\r?\n/).map(t=>{const n=t.match(e);if(!n)return null;const[,o="",i="",,,a=""]=n;return{start:r(o.trim()),end:r(i.trim()),text:a.replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,"\n").trim().split(/\r?\n/).map(t=>t.trim()).join("\n")}}).filter(t=>t).map((t,e)=>t?`${e+1}\n${t.start} --\x3e ${t.end}\n${t.text}`:"").filter(t=>t.trim()).join("\n\n")}`}const Et=Object.freeze(Object.defineProperty({__proto__:null,ArtPlayerError:ot,addClass:j,append:X,assToVtt:$t,capitalize:dt,clamp:ct,createElement:J,debounce:function(t,e){let r;return function(...n){clearTimeout(r),r=setTimeout(()=>(r=void 0,t.apply(this,n)),e)}},def:vt,download:lt,errorHandle:it,escape:mt,get:bt,getComposedPath:W,getExt:st,getIcon:tt,getRect:Y,getSafeAreaInsets:B,getStyle:function(t,e,r=!0){const n=window.getComputedStyle(t,null).getPropertyValue(e);return r?Number.parseFloat(n):n},has:yt,hasClass:U,includeFromEvent:F,inverseClass:K,isBrowser:$,isIOS:w,isIOS13:x,isInViewport:function(t,e=0){const r=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,i=r.top-e<=n&&r.top+r.height+e>=0,a=r.left-e<=o+e&&r.left+r.width+e>=0;return i&&a},isMobile:k,isSafari:b,loadImg:function(t,e){return nt(t,e,void 0)},mergeDeep:wt,query:H,queryAll:function(t,e=document){return Array.from(e.querySelectorAll(t))},remove:function(t){return t.parentNode.removeChild(t)},removeClass:q,replaceElement:Z,secondToTime:ut,setStyle:et,setStyleText:v,setStyles:rt,siblings:G,silencePromise:at,sleep:function(t=0){return new Promise(e=>setTimeout(e,t))},srtToVtt:xt,supportsFlex:V,throttle:function(t,e){let r=!1;return function(...n){r||(t.apply(this,n),r=!0,setTimeout(()=>{r=!1},e))}},tooltip:Q,unescape:function(t){return t.replace(ht,t=>ft[t]||t)},userAgent:y,vttToBlob:kt},Symbol.toStringTag,{value:"Module"}));function At(){}function Ct(t,e,r,n,o={}){const{capture:i=!1,once:a=!1,signal:s}=o;if(t.closed||(null==s?void 0:s.aborted))return At;let l=At;function c(e){a&&l(),t.closed||("function"===typeof n?n.call(this,e):n.handleEvent(e))}return e.addEventListener(r,c,o),l=t.add(()=>{try{e.removeEventListener(r,c,i)}finally{null==s||s.removeEventListener("abort",l)}}),null==s||s.addEventListener("abort",l,{once:!0}),l}function St(t,e,r){if(t.closed)return At;let n=!0,o=At;const i=setTimeout(()=>{n&&(o(),t.closed||e())},r);return o=t.add(()=>{n=!1,clearTimeout(i)}),o}function Tt(t,e=0){return t.closed?Promise.resolve(!1):new Promise(r=>{let n=!1,o=At;const i=setTimeout(()=>{n=!0,o(),r(!0)},e);o=t.add(()=>{clearTimeout(i),n||r(!1)})})}const Lt=new WeakSet;function Pt(t){Lt.add(t),t.preventDefault()}function Mt(t){return!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.isComposing&&229!==t.keyCode}function zt(t,e,r=()=>e.click(),n=()=>!0){if(t.closed)return;e.hasAttribute("role")||e.setAttribute("role","button"),e.hasAttribute("tabindex")||(e.tabIndex=0);let o=!1;const i=()=>n()&&"true"!==e.getAttribute("aria-disabled")&&!e.hasAttribute("disabled"),a=t=>(t.composedPath()[0]||t.target)===e;Ct(t,e,"keydown",t=>{const e=t;a(e)&&Mt(e)&&!e.defaultPrevented&&("Enter"===e.key?(Pt(e),!e.repeat&&i()&&r()):" "===e.key&&(Pt(e),!e.repeat&&i()&&(o=!0)))}),Ct(t,e,"keyup",t=>{const n=t;if(" "!==n.key)return;const s=o;o=!1,s&&a(n)&&Mt(n)&&!n.defaultPrevented&&i()&&e.ownerDocument.activeElement===e&&(Pt(n),r())}),Ct(t,e,"blur",()=>{o=!1}),t.add(()=>{o=!1})}function Ot(t,e){return X(t,e)}function Rt(t,e){return e.querySelector(t)}const Dt=new WeakSet;function It(t){const e=t.template.$player;!M(t)&&e.isConnected&&(e.hasAttribute("tabindex")||(e.setAttribute("tabindex","-1"),Dt.has(e)||(Dt.add(e),P(t).add(()=>{Dt.delete(e),"-1"===e.getAttribute("tabindex")&&e.removeAttribute("tabindex")}))),e.focus({preventScroll:!0}))}const Nt=new WeakSet,_t="[tabindex],button,input,select,textarea,a[href],[contenteditable]";function Wt(t){return[t,...t.querySelectorAll(_t)].find(t=>{var e;if(!t.matches(_t)||t.tabIndex<0||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t);return"hidden"!==(null==r?void 0:r.visibility)&&"collapse"!==(null==r?void 0:r.visibility)})}function Ft(t,e,r){var n;const o=null==e?void 0:e.ownerDocument,i=null==o?void 0:o.activeElement;if(!["control","contextmenu"].includes(null!=(n=t.name)?n:"")||Nt.has(t)||!e||!o||!i||!e.contains(i))return()=>{};const a=t.art.template.$player,s=Array.from(a.querySelectorAll(`.art-${t.name}`)),l=s.indexOf(e),c=[...s.slice(l+1),...s.slice(0,l).reverse()];return Nt.add(t),()=>{var e;if(Nt.delete(t),M(t.art)||!a.isConnected||o.activeElement!==o.body)return;const n=r?null==(e=t.cache.get(r))?void 0:e.$ref:void 0;for(const t of[...n?[n]:[],...c]){if(!a.contains(t))continue;const e=Wt(t);if(e)return void e.focus({preventScroll:!0})}It(t.art)}}const Vt="array",Yt="boolean",Bt="string",Ht="number",jt="object",qt="function";function Ut(t,e,r){return it(e===Bt||e===Ht||t instanceof Element,`${r.join(".")} require '${Bt}' or 'Element' type`)}const Xt={html:Ut,disable:`?${Yt}`,name:`?${Bt}`,index:`?${Ht}`,style:`?${jt}`,click:`?${qt}`,mounted:`?${qt}`,tooltip:`?${Bt}|${Ht}`,width:`?${Ht}`,selector:`?${Vt}`,onSelect:`?${qt}`,switch:`?${Yt}`,onSwitch:`?${qt}`,range:`?${Vt}`,onRange:`?${qt}`,onChange:`?${qt}`},Gt={id:Bt,container:Ut,url:Bt,poster:Bt,type:Bt,theme:Bt,lang:Bt,volume:Ht,isLive:Yt,muted:Yt,autoplay:Yt,autoSize:Yt,autoMini:Yt,loop:Yt,flip:Yt,playbackRate:Yt,aspectRatio:Yt,screenshot:Yt,setting:Yt,hotkey:Yt,pip:Yt,mutex:Yt,backdrop:Yt,fullscreen:Yt,fullscreenWeb:Yt,subtitleOffset:Yt,miniProgressBar:Yt,useSSR:Yt,playsInline:Yt,lock:Yt,gesture:Yt,fastForward:Yt,autoPlayback:Yt,autoOrientation:Yt,airplay:Yt,proxy:`?${qt}`,plugins:[qt],layers:[Xt],contextmenu:[Xt],settings:[Xt],controls:[l(s({},Xt),{position:(t,e,r)=>{const n=["top","left","right"];return it("string"===typeof t&&n.includes(t),`${r.join(".")} only accept ${n.toString()} as parameters`)}})],quality:[{default:`?${Yt}`,html:Bt,url:Bt}],highlight:[{time:Ht,text:Bt}],thumbnails:{url:Bt,number:Ht,column:Ht,width:Ht,height:Ht,scale:Ht},subtitle:{url:Bt,name:Bt,type:Bt,style:jt,escape:Yt,encoding:Bt,onVttLoad:qt},moreVideoAttr:jt,i18n:jt,icons:jt,cssVar:jt,customType:jt},Kt=new WeakSet;class Zt{constructor(t){this.id=0,this.art=t,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return U(this.art.template.$player,`art-${this.name}-show`)}set show(t){const{$player:e}=this.art.template,r=`art-${this.name}-show`;t?j(e,r):q(e,r),this.art.emit(this.name,t)}toggle(){this.show=!this.show}add(t){var e;if(M(this.art))return;const r="function"===typeof t?t(this.art):t;if(M(this.art))return;if(r.html=r.html||"",h(r,Xt),!this.$parent||!this.name||r.disable)return;const n=r.name||`${this.name}${this.id}`,o=this.cache;it(!o.has(n),`Can't add an existing [${n}] to the [${this.name}]`),this.id+=1;const i=document.createElement("div"),a=R(this.art,i),s=[],l=Object.getOwnPropertyDescriptor(this,n);let c=!1;a.add(()=>{for(const t of s)this.art.events.remove(t)});try{if(a.closed)return;if(function(t,e,r,n,o,i){j(t,`art-${r}`),j(t,`art-${r}-${n}`);const a=Array.from(e.children);t.dataset.index=String(i.index||o);const s=a.find(e=>Number(e.dataset.index)>=Number(t.dataset.index));s?s.insertAdjacentElement("beforebegin",t):X(e,t),i.html&&X(t,i.html),i.style&&rt(t,i.style),i.tooltip&&Q(t,i.tooltip)}(i,this.$parent,this.name,n,this.id,r),a.closed)return;if(r.click){("control"===this.name&&!r.selector||"contextmenu"===this.name&&!i.querySelector("[data-value]"))&&!i.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")&&zt(a,i);const t=this.art.events.proxy(i,"click",t=>{a.closed||(t.preventDefault(),r.click.call(this.art,this,t))});s.push(t)}if(r.selector&&["left","right"].includes(r.position)&&this.selector(r,i,s),a.closed)return;return function(t,e,r){const n=t;"__proto__"===e?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r}(this,n,i),c=!0,o.set(n,{$ref:i,events:s,option:r}),r.mounted&&r.mounted.call(this.art,i),i}catch(d){try{I(i)}catch(u){console.warn("ArtPlayer component cleanup failed:",u)}throw(null==(e=o.get(n))?void 0:e.$ref)===i&&o.delete(n),c&&this[n]===i&&(l?Object.defineProperty(this,n,l):delete this[n]),i.remove(),d}}remove(t){it(this.cache.has(t),`Can't find [${t}] from the [${this.name}]`);const e=this.cache.get(t);if(Kt.has(e))return;const r=Ft(this,e.$ref);Kt.add(e);try{e.option.beforeUnmount&&e.option.beforeUnmount.call(this.art,e.$ref);try{I(e.$ref)}finally{this.cache.get(t)===e&&(this.cache.delete(t),delete this[t]),e.$ref.remove()}}finally{Kt.delete(e),r()}}update(t){var e;const r=Ft(this,null==(e=this.cache.get(t.name))?void 0:e.$ref,t.name);try{if(this.cache.has(t.name)){const e=this.cache.get(t.name);t=Object.assign(e.option,t),this.remove(t.name)}return this.add(t)}finally{r()}}}function Jt(t){for(const e of t.querySelectorAll("[data-value]"))e.setAttribute("aria-pressed",String(e.classList.contains("art-current")))}function Qt(t,e){var r,n;const o=D(t);if(!o.closed){t.setAttribute("role","group"),t.setAttribute("aria-label",e);for(const i of t.querySelectorAll("[data-value]"))zt(o,i),i.setAttribute("aria-label",`${e}: ${null!=(n=null==(r=i.textContent)?void 0:r.trim())?n:""}`);Jt(t)}}const te=new WeakMap;function ee(t,e){e?te.set(t,e):te.delete(t)}function re(t){const e=new Set;let r=t;for(;!e.has(r);){e.add(r);let t,n=r;for(;n&&!t;)t=te.get(n),n=n.parentElement;if(!t)return r;r=t}return t}function ne(t){const e=t;return!!e&&(["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable)}function oe(t){var e;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return t.isConnected&&!t.matches(":disabled")&&!t.closest("[inert]")&&"true"!==t.getAttribute("aria-disabled")&&t.getClientRects().length>0&&"hidden"!==r&&"collapse"!==r}class ie extends Zt{constructor(t){super(t),this.name="contextmenu",this.$parent=t.template.$contextmenu,R(t,this.$parent),k||this.init()}init(){const{option:t,template:{$player:e,$contextmenu:r}}=this.art,{on:n,proxy:o}=_(this.art,r);t.playbackRate&&this.add(function(t){return e=>{const{i18n:r,constructor:{PLAYBACK_RATE:n}}=e,o=n.map(t=>`${1===t?r.get("Normal"):t.toFixed(1)}`).join(""),i=r.get("Play Speed");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.playbackRate=Number(n),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="1"]',t);n&&K(n,"art-current"),Qt(t,i),r("video:ratechange",()=>{const r=Array.from(t.querySelectorAll("span")).find(t=>Number(t.dataset.value)===e.playbackRate);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"playbackRate",index:10})),t.aspectRatio&&this.add(function(t){return e=>{const{i18n:r,constructor:{ASPECT_RATIO:n}}=e,o=n.map(t=>`${"default"===t?r.get("Default"):t}`).join(""),i=r.get("Aspect Ratio");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.aspectRatio=n,t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="default"]',t);n&&K(n,"art-current"),Qt(t,i),r("aspectRatio",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"aspectRatio",index:20})),t.flip&&this.add(function(t){return e=>{const{i18n:r,constructor:{FLIP:n}}=e,o=n.map(t=>`${r.get(dt(t))}`).join(""),i=r.get("Video Flip");return l(s({},t),{html:`${i}: ${o}`,click:(t,r)=>{const n=r.target instanceof HTMLElement?r.target.dataset.value:void 0;n&&(e.flip=n.toLowerCase(),t.show=!1)},mounted:t=>{const{on:r}=_(e,t),n=H('[data-value="normal"]',t);n&&K(n,"art-current"),Qt(t,i),r("flip",e=>{const r=Array.from(t.querySelectorAll("span")).find(t=>t.dataset.value===e);r&&(K(r,"art-current"),Jt(t))})}})}}({name:"flip",index:30})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Video Info"),click:t=>{e.info.show=!0,t.show=!1}})}({name:"info",index:40})),this.add(function(t){return l(s({},t),{html:`ArtPlayer ${m}`})}({name:"version",index:50})),this.add(function(t){return e=>l(s({},t),{html:e.i18n.get("Close"),click:t=>{t.show=!1}})}({name:"close",index:60}));for(let s=0;s{this.show=!0,i.closed||M(this.art)||!this.show||function(t,e,r){const{$player:n,$contextmenu:o}=t.template,{height:i,width:a,left:s,top:l}=Y(n),{height:c,width:d}=Y(o);let u=e-s,p=r-l;e+d>s+a&&(u=a-d),r+c>l+i&&(p=i-c),M(t)||rt(o,{top:`${p}px`,left:`${u}px`})}(this.art,t,e)},c=function(t,e){const{art:r}=t,{$player:n,$contextmenu:o}=r.template,i=D(o),a=()=>!i.closed&&!M(r);let s,l=!1,c="",d=0;const u=()=>{const t=n.ownerDocument.activeElement;s=t&&n.contains(t)?re(t):n,ee(o,s)},p=()=>Array.from(o.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]")).filter(t=>t.tabIndex>=0&&oe(t)),f=r.i18n.get("Context Menu");if(!a())return{pointer:()=>!1};o.setAttribute("role","group"),o.setAttribute("aria-label",f);const h=t=>{if(!a())return;if(t)return void(o.contains(n.ownerDocument.activeElement)||u());const e=n.ownerDocument.activeElement,i=o.contains(e)||l&&e===n.ownerDocument.body,d=s;s=void 0,l=!1,c="",ee(o),i&&(d&&n.contains(d)&&oe(d)&&d.focus({preventScroll:!0}),(n.ownerDocument.activeElement===n.ownerDocument.body||o.contains(n.ownerDocument.activeElement))&&It(r))};r.on("contextmenu",h),i.add(()=>{r.off("contextmenu",h),ee(o)}),Ct(i,o,"focusin",()=>{l=!0});let m=!1;return Ct(i,o,"focusout",e=>{o.contains(e.relatedTarget)||m||(m=!0,St(i,()=>{m=!1,a()&&t.show&&!o.contains(n.ownerDocument.activeElement)&&(t.show=!1)},0))}),Ct(i,n,"keydown",n=>{var i;const s=n;if(!a()||!Mt(s)||s.defaultPrevented)return;if(("ContextMenu"===s.key||"F10"===s.key&&s.shiftKey)&&r.constructor.CONTEXTMENU&&!ne(s.target)){Pt(s),u();const r=s.target.getBoundingClientRect();return e(r.left,r.bottom),void(a()&&t.show&&(null==(i=p()[0])||i.focus({preventScroll:!0})))}if(!t.show||!o.contains(s.target))return;if("Escape"===s.key)return Pt(s),void(t.show=!1);if("Tab"===s.key)return void(t.show=!1);if(ne(s.target))return;const l=p(),f=l.indexOf(s.target);let h;if("ArrowDown"===s.key||"ArrowRight"===s.key)h=l[(f+1)%l.length];else if("ArrowUp"===s.key||"ArrowLeft"===s.key)h=l[(f+l.length-1)%l.length];else if("Home"===s.key)h=l[0];else if("End"===s.key)h=l[l.length-1];else{if(1!==s.key.length||" "===s.key)return;{const t=s.key.toLowerCase();c=Date.now()-d>700?t:c+t,d=Date.now();const e=[...c].every(e=>e===t)?t:c;h=[...l.slice(f+1),...l.slice(0,f+1)].find(t=>(t.getAttribute("aria-label")||t.textContent||"").trim().toLowerCase().startsWith(e))}}Pt(s),null==h||h.focus({preventScroll:!0})}),{pointer:t=>!(!a()||!r.constructor.CONTEXTMENU||ne(t.target))&&(u(),!0)}}(this,a);o(e,"contextmenu",t=>{c.pointer(t)&&(t.preventDefault(),a(t.clientX,t.clientY))}),o(e,"click",t=>{F(t,r)||(this.show=!1)}),n("blur",()=>{this.show=!1})}}const ae=new WeakMap,se=new WeakMap,le=new WeakMap;function ce(t){return le.get(t)||P(t)}function de(t){const e=ae.get(t),r=le.get(t);return()=>ae.get(t)===e&&(!e||e.active())&&le.get(t)===r&&(!r||!r.closed)}function ue(t){const e=le.get(t),r=P(t).child(),n=r.child();le.set(t,r),r.add(()=>{le.get(t)===r&&le.delete(t)});const o={scope:n,assigned:!1,acceptingEvents:!1,active:()=>!M(t)&&!n.closed&&ae.get(t)===o};return ae.set(t,o),n.add(()=>{ae.get(t)===o&&ae.delete(t),o.onAssigned=void 0,o.onError=void 0}),null==e||e.dispose(),o}function pe(t){t.assigned=!0;const e=t.onAssigned;t.onAssigned=void 0,t.active()&&(null==e||e())}function fe(t,e,r){se.set(t,e),e.acceptingEvents=!0;try{t.url=r}finally{se.get(t)===e&&(se.delete(t),pe(e))}}function he(t,e){t.active()&&(t.onError?t.onError(e):console.warn("Failed to initialize ArtPlayer source:",e),t.scope.dispose())}function me(t,e){const{$progress:r}=t.template,{left:n}=Y(r),o=ct((k?e.touches[0].clientX:e.clientX)-n,0,r.clientWidth),i=o/r.clientWidth*t.duration;return{second:i,time:ut(i),width:o,percentage:ct(o/r.clientWidth,0,1)}}function ve(t,e,r=()=>!0){if(r())if(t.isRotate){const n=(e.touches[0].clientY-t.top)/t.height,o=n*t.duration;if(!r())return;t.emit("setBar","played",n,e),r()&&(t.seek=o)}else{const{second:n,percentage:o}=me(t,e);if(!r())return;t.emit("setBar","played",o,e),r()&&(t.seek=n)}}const ge=new Map([["ArrowRight",1],["ArrowUp",1],["ArrowLeft",-1],["ArrowDown",-1],["PageUp",10],["PageDown",-10]]);function ye(t,e,r,n,o,i="horizontal"){const a=t=>[t.min,t.max,t.value,t.step].every(Number.isFinite)&&t.max>t.min&&t.step>0,s=(t,e)=>Math.min(e.max,Math.max(e.min,t)),l=()=>{if(t.closed)return;const r=n(),o=a(r),i=o?s(r.value,r):0;e.setAttribute("aria-disabled",String(!o)),e.setAttribute("aria-valuemin",String(o?r.min:0)),e.setAttribute("aria-valuemax",String(o?r.max:0)),e.setAttribute("aria-valuenow",String(i)),e.setAttribute("aria-valuetext",r.text(i))};return t.closed||(e.setAttribute("role","slider"),e.tabIndex=0,e.setAttribute("aria-label",r),e.setAttribute("aria-orientation",i),Ct(t,e,"keydown",t=>{const r=t;if((r.composedPath()[0]||r.target)!==e||!Mt(r)||r.defaultPrevented)return;const i=ge.get(r.key);if(void 0===i&&"Home"!==r.key&&"End"!==r.key)return;Pt(r);const c=n();if(!a(c))return void l();const d="Home"===r.key?c.min:"End"===r.key?c.max:s(c.value,c)+i*c.step;o(s(d,c)),l()}),l()),l}const be=new WeakMap;function we(t){return be.get(t)||0}function xe(t,e,r){let n,o=!1,i=!1,a=!1,s=we(t);const l=()=>a||we(t)!==s,c=()=>{var e,r;return!!(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)};return{restore(i=()=>{t.currentTime=e}){if(!r()||l())return;const d=we(t);i(),s=we(t),s>d+1&&(a=!0),r()&&(n=t.currentTime,r()&&!l()&&(o=c()))},manual(){a=!0},ready(){if(!r()||c())return!1;const e=void 0!==n&&Math.abs(t.currentTime-n)>.05;if(!l()&&o&&!i&&void 0!==n&&e){if(i=!0,!r())return!1;t.currentTime=n}return r()&&!c()}}}function ke(t,e){const{icons:r,option:n}=t,{$player:o}=t.template,i=D(e),{on:a}=_(t,e);let s=()=>{};const l=Rt(".art-progress-hover",e),c=Rt(".art-progress-loaded",e),d=Rt(".art-progress-played",e),u=Rt(".art-progress-highlight",e),p=Rt(".art-progress-indicator",e),f=Rt(".art-progress-tip",e);function h(r,n){const{width:o,time:i}=n||me(t,r);f.textContent=i||"00:00";const a=f.clientWidth;o<=a/2?et(f,"left",0):o>e.clientWidth-a/2?et(f,"left",e.clientWidth-a+"px"):et(f,"left",o-a/2+"px")}r.indicator?X(p,r.indicator):et(p,"backgroundColor","var(--art-theme)"),a("setBar",function(r,n,a){const m="played"===r&&a&&k;if("loaded"===r&&et(c,"width",100*n+"%"),"hover"===r&&(et(l,"width",100*n+"%"),F(a,u)?function(r){const{width:n}=me(t,r),o=r.target instanceof HTMLElement?r.target.dataset.text:void 0;f.textContent=null!=o?o:"";const i=f.clientWidth;n<=i/2?et(f,"left",0):n>e.clientWidth-i/2?et(f,"left",e.clientWidth-i+"px"):et(f,"left",n-i/2+"px")}(a):h(a),0===n?q(o,"art-progress-hover"):j(o,"art-progress-hover")),"played"===r&&(et(d,"width",100*n+"%"),et(p,"left",100*n+"%")),m){j(o,"art-progress-hover");h(a,{width:e.clientWidth*n,time:ut(n*t.duration)}),s(),s=St(i,()=>{q(o,"art-progress-hover")},500)}}),a("video:loadedmetadata",function(){u.textContent="";for(let e=0;e{t.emit("setBar","played",t.played),t.emit("setBar","loaded",t.loaded)}):(a("video:timeupdate",()=>{t.emit("setBar","played",t.played)}),a("video:progress",()=>{t.emit("setBar","loaded",t.loaded)}),a("video:ended",()=>{t.emit("setBar","played",1)})),t.emit("setBar","loaded",t.loaded||0)}function $e(t){return e=>l(s({},t),{html:'\n
\n
\n
\n
\n
\n
\n
00:00
\n
\n ',mounted:t=>{ke(e,t),function(t,e){const{$progress:r}=t.template,n=e.querySelector(".art-progress-indicator"),{on:o,proxy:i}=_(t,e),a=D(e);let s=0;const l=()=>{const e=de(t);return()=>!a.closed&&!M(t)&&e()},c=()=>{const t=++s,e=l();return()=>t===s&&e()};if(!k){let e;i(r,"click",e=>{e.target!==n&&ve(t,e,c())}),i(r,"mousemove",e=>{const r=l(),{percentage:n}=me(t,e);r()&&t.emit("setBar","hover",n,e)}),i(r,"mouseleave",e=>{t.emit("setBar","hover",0,e)}),i(r,"mousedown",t=>{e=0===t.button?c():void 0}),o("document:mousemove",r=>{const n=e;if(null==n?void 0:n()){const{second:o,percentage:i}=me(t,r);if(!n()||e!==n)return;t.emit("setBar","played",i,r),n()&&e===n&&(t.seek=o)}else e=void 0}),o("document:mouseup",()=>{e=void 0})}}(e,t),function(t,e){const r=D(e),{on:n}=_(t,e);let o,i=0;const a=ye(r,e,t.i18n.get("Progress"),()=>({min:0,max:t.duration,value:t.currentTime,step:t.constructor.SEEK_STEP,text:e=>`${ut(e)} / ${ut(Number.isFinite(t.duration)&&t.duration>0?t.duration:0)}`}),e=>{const n=++i;null==o||o.dispose();const s=r.child();o=s;const l=ce(t).add(()=>{s.dispose()});s.add(()=>{l()}),s.add(()=>{o===s&&(o=void 0)});const c=de(t),d=()=>n===i&&!s.closed&&!M(t)&&c(),u=xe(t,e,d),p=()=>{d()?u.ready()&&(s.dispose(),a()):s.dispose()};for(const r of["video:seeked","video:ended"])t.on(r,p),s.add(()=>{t.off(r,p)});try{t.emit("setBar","played",e/t.duration),d()&&u.restore(()=>{t.seek=e}),p()}catch(f){throw s.dispose(),f}});n("video:loadedmetadata",a),n("video:durationchange",a),n("video:emptied",a),n("video:timeupdate",a),n("video:seeking",a),n("video:seeked",a),n("video:ended",a)}(e,t)}})}function Ee(t){const{option:e}=t.art;e.isLive||t.add($e({name:"progress",position:"top",index:10})),t.add({name:"thumbnails",position:"top",index:20}),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.play),s=Ot(t,o.pause);function l(){t.setAttribute("aria-label",i.get("Play")),et(a,"display","flex"),et(s,"display","none")}function c(){t.setAttribute("aria-label",i.get("Pause")),et(a,"display","none"),et(s,"display","flex")}zt(D(t),t,()=>(e.playing?s:a).click()),Q(a,i.get("Play")),Q(s,i.get("Pause")),n(a,"click",()=>{at(e.play())}),n(s,"click",()=>{e.pause()}),e.playing?c():l(),r("video:playing",()=>{c()}),r("video:pause",()=>{l()})}})}({name:"playAndPause",position:"left",index:10})),t.add(function(t){return e=>l(s({},t),{mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e,a=Ot(t,o.volume),s=Ot(t,o.volumeClose);for(const e of[a,s])zt(D(t),e),e.setAttribute("aria-label",i.get("Mute"));const l=Ot(t,'
'),c=Ot(l,'
'),d=Ot(c,'
'),u=Ot(c,'
'),p=Ot(u,'
'),f=Ot(p,'
'),h=Ot(u,'
'),m=D(t);let v=0;const g=ye(m,u,i.get("Volume"),()=>({min:0,max:100,value:e.muted?0:100*e.volume,step:100*e.constructor.VOLUME_STEP,text:t=>`${Math.round(t)}%`}),t=>{const r=++v;e.muted=!1,r!==v||m.closed||M(e)||(e.volume=t/100)},"vertical");function y(t){const{top:e,height:r}=Y(u);return 1-(t.clientY-e)/r}function b(){g();const r=t.ownerDocument.activeElement,n=e.muted||0===e.volume,o=n?s:a;if(a.setAttribute("aria-pressed",String(e.muted)),s.setAttribute("aria-pressed",String(e.muted)),n)et(a,"display","none"),et(s,"display","flex"),et(h,"top","100%"),et(f,"top","100%"),d.textContent="0";else{const t=100*e.volume;et(a,"display","flex"),et(s,"display","none"),et(h,"top",100-t+"%"),et(f,"top",100-t+"%"),d.textContent=String(Math.floor(t))}r!==a&&r!==s||r===o||o.focus({preventScroll:!0})}if(b(),r("video:volumechange",b),n(a,"click",()=>{e.muted=!0}),n(s,"click",()=>{e.muted=!1}),k)et(l,"display","none");else{let t=!1;n(u,"mousedown",r=>{t=0===r.button,e.volume=y(r)}),r("document:mousemove",r=>{t&&(e.muted=!1,e.volume=y(r))}),r("document:mouseup",()=>{t&&(t=!1)})}}})}({name:"volume",position:"left",index:20})),e.isLive||t.add(function(t){return e=>l(s({},t),{style:k?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:t=>{const{on:r}=_(e,t);function n(){const r=`${ut(e.currentTime)} / ${ut(e.duration)}`;r!==t.textContent&&(t.textContent=r)}n();const o=["video:loadedmetadata","video:timeupdate","video:progress"];for(let e=0;e{r&&!P(t.art).closed&&(t.art.quality=e.quality)}).catch(t=>{console.warn("ArtPlayer quality initialization failed:",t)}),e.screenshot&&!k&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Screenshot"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.screenshot),r(t,"click",()=>{at(e.screenshot())})}})}({name:"screenshot",position:"right",index:20})),e.setting&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Show Setting"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;Ot(t,o.setting),zt(D(t),t),t.setAttribute("aria-expanded","false"),n(t,"click",()=>{e.setting.toggle(),e.setting.resize()}),r("setting",e=>{t.setAttribute("aria-expanded",String(e)),Q(t,i.get(e?"Hide Setting":"Show Setting"))})}})}({name:"setting",position:"right",index:30})),e.pip&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("PIP Mode"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t),Ot(t,o.pip),n(t,"click",()=>{e.pip=!e.pip}),r("pip",e=>{Q(t,i.get(e?"Exit PIP Mode":"PIP Mode"))})}})}({name:"pip",position:"right",index:40})),e.airplay&&"WebKitPlaybackTargetAvailabilityEvent"in window&&window.WebKitPlaybackTargetAvailabilityEvent&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("AirPlay"),mounted:t=>{const{proxy:r}=_(e,t),{icons:n}=e;zt(D(t),t),Ot(t,n.airplay),r(t,"click",()=>e.airplay())}})}({name:"airplay",position:"right",index:50})),e.fullscreenWeb&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Web Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenWebOn),s=Ot(t,o.fullscreenWebOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreenWeb=!e.fullscreenWeb}),r("fullscreenWeb",e=>{e?(Q(t,i.get("Exit Web Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Web Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreenWeb",position:"right",index:60})),e.fullscreen&&t.add(function(t){return e=>l(s({},t),{tooltip:e.i18n.get("Fullscreen"),mounted:t=>{const{on:r,proxy:n}=_(e,t),{icons:o,i18n:i}=e;zt(D(t),t);const a=Ot(t,o.fullscreenOn),s=Ot(t,o.fullscreenOff);et(s,"display","none"),n(t,"click",()=>{e.fullscreen=!e.fullscreen}),r("fullscreen",e=>{e?(Q(t,i.get("Exit Fullscreen")),et(a,"display","none"),et(s,"display","inline-flex")):(Q(t,i.get("Fullscreen")),et(a,"display","inline-flex"),et(s,"display","none"))})}})}({name:"fullscreen",position:"right",index:70}));for(let r=0;rSe.get(t).option.selector}),vt(t,"$control_item",{get:()=>Se.get(t).item}),vt(t,"$control_value",{get:()=>Se.get(t).value})),Se.set(t,e)}function Le(t,e){t.innerHTML=e}function Pe(t,e,r,n,o){const{proxy:i}=t.events,a=D(n),s=r.selector;j(n,"art-control-selector");const l=document.createElement("div");j(l,"art-selector-value"),X(l,r.html),n.textContent="",X(n,l);const d=Ot(n,'
');for(let c=0;cc(null,null,function*(){var o,i;if(a.closed)return;const s=W(n),c=r.selector.find(t=>s.includes(t.$control_item));if(!c)return;const d=++u,p=()=>!a.closed&&d===u,f=a.add(function(t,e){return Ae.set(t,e),()=>{Ae.get(t)===e&&Ae.delete(t)}}(n,p));try{if(e(c),a.closed)return;if(r.onSelect){const e=yield r.onSelect.call(t,c,c.$control_item,n);if(p()){const t=l.contains(l.ownerDocument.activeElement);Le(l,e),null==(i=null==(o=Se.get(c))?void 0:o.refresh)||i.call(o,t)}}}catch(h){console.warn("ArtPlayer selector failed:",h)}finally{f()}}));o.push(p);const f=function(t,e,r,n,o){if(t.closed)return()=>{};const i=Array.from(n.children),a=i.some(t=>t.querySelector(Ce));n.setAttribute("role",a?"group":"listbox"),n.setAttribute("aria-label",o);let s=!1,l=!1,c=!1,d="",u=0;const p=()=>i.length>0&&(l||s&&!c),f=()=>r.querySelector('button,a[href],[role="button"]')||r,h=(e=!1)=>{if(t.closed)return;const n=f();r.querySelector(Ce)?(r.removeAttribute("role"),r.removeAttribute("tabindex")):(r.setAttribute("role","button"),r.tabIndex=0),n!==r&&(r.removeAttribute("aria-haspopup"),r.removeAttribute("aria-expanded"),r.removeAttribute("aria-disabled")),a?n.removeAttribute("aria-haspopup"):n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded",String(p())),n.setAttribute("aria-disabled",String(0===i.length)),e&&r.isConnected&&r.ownerDocument.activeElement===r.ownerDocument.body&&n.focus({preventScroll:!0})},m=(t,r=!1)=>{l=t,c=r,e.classList.toggle("art-selector-open",t),e.classList.toggle("art-selector-dismissed",r),h()},v=e=>{e&&!t.closed&&((e.querySelector(Ce)||e).focus({preventScroll:!0}),t.closed||e.scrollIntoView({block:"nearest",inline:"nearest"}))},g=(e=!1)=>{!t.closed&&i.length&&(m(!0),d="",v(i.find(t=>t.classList.contains("art-current"))||i[e?i.length-1:0]))},y=()=>{if(t.closed)return;const o=n.contains(e.ownerDocument.activeElement);m(!1,!0),d="",o&&r.isConnected&&f().focus({preventScroll:!0})};zt(t,r,()=>{r.click(),e.ownerDocument.activeElement===r&&g()}),h();for(const b of i){const e=b.classList.contains("art-current");a?b.setAttribute("aria-current",String(e)):(b.setAttribute("role","option"),b.setAttribute("aria-selected",String(e))),b.querySelector(Ce)||(b.tabIndex=-1,zt(t,b,()=>{b.click(),y()}))}return Ct(t,r,"keydown",t=>{const e=t;!Mt(e)||e.defaultPrevented||e.target!==r&&e.target!==f()||("ArrowDown"===e.key||"ArrowUp"===e.key?(Pt(e),g("ArrowUp"===e.key)):"Escape"===e.key&&p()&&(Pt(e),y()))}),Ct(t,r,"click",t=>{t.isTrusted&&0===t.detail&&f()!==r&&g()}),Ct(t,n,"keydown",t=>{var e;const r=t;if(!Mt(r)||r.defaultPrevented)return;if("Escape"===r.key)return Pt(r),void y();const n=i.indexOf(r.target);if(n<0)return;let o;switch(1!==r.key.length&&(d=""),r.key){case"ArrowDown":o=Math.min(n+1,i.length-1);break;case"ArrowUp":o=Math.max(n-1,0);break;case"Home":o=0;break;case"End":o=i.length-1;break;case"ArrowLeft":case"ArrowRight":return void Pt(r);default:{if(1!==r.key.length||" "===r.key)return;const t=Date.now();d=t-u<500?d+r.key.toLocaleLowerCase():r.key.toLocaleLowerCase(),u=t;const a=[...d].every(t=>t===d[0])?d[0]:d;for(let r=1;r<=i.length;r++){const t=(n+r)%i.length;if(null==(e=i[t].textContent)?void 0:e.trim().toLocaleLowerCase().startsWith(a)){o=t;break}}}}Pt(r),void 0!==o&&v(i[o])}),Ct(t,n,"click",t=>{t.isTrusted&&0===t.detail&&y()}),Ct(t,e,"mouseenter",()=>{s=!0,m(l)}),Ct(t,e,"mouseleave",()=>{s=!1,m(n.contains(e.ownerDocument.activeElement))}),Ct(t,e,"focusout",t=>{e.contains(t.relatedTarget)||m(!1,!0)}),t.add(()=>{e.classList.remove("art-selector-open","art-selector-dismissed")}),h}(a,n,l,d,String(r.tooltip||r.name||l.textContent||t.i18n.get("Open")));for(const c of s)Se.get(c).refresh=f}class Me extends Zt{constructor(t){super(t),this.isHover=!1,this.name="control",this.timer=Date.now();const{constructor:e}=t,{$player:r,$bottom:n}=this.art.template,o=function(t,e,r){let n,o,i=!0;const a=()=>!t.closed&&i&&e.contains(e.ownerDocument.activeElement),s=()=>{const t=a(),n=e.classList.contains("art-keyboard-focus");e.classList.toggle("art-keyboard-focus",t),t&&!n&&r()},l=()=>{i=!0,s()},c=()=>{i=!1,s()},d=()=>{n!==e.ownerDocument&&(null==o||o.dispose(),n=e.ownerDocument,o=t.child(),Ct(o,n,"keydown",l,{capture:!0}),Ct(o,n,"mousedown",c,{capture:!0}),Ct(o,n,"touchstart",c,{capture:!0,passive:!0}))};return d(),Ct(t,e,"keydown",l,{capture:!0}),Ct(t,e,"mousedown",c,{capture:!0}),Ct(t,e,"touchstart",c,{capture:!0,passive:!0}),Ct(t,e,"focusin",()=>{d(),s()}),Ct(t,e,"focusout",()=>{e.classList.remove("art-keyboard-focus")}),t.add(()=>{e.classList.remove("art-keyboard-focus")}),a}(R(t,n),r,()=>{this.show=!0}),{on:i,proxy:a}=_(t,n);a(r,"focusin",e=>{var r;t.isFocus=!0,t.isInput="INPUT"===(null==(r=e.target)?void 0:r.tagName)}),a(r,"focusout",e=>{r.contains(e.relatedTarget)||(t.isFocus=!1,t.isInput=!1)}),i("mousemove",()=>{k||(this.show=!0)}),i("click",()=>{k?this.toggle():this.show=!0}),i("document:mousemove",t=>{this.isHover=F(t,n)}),i("video:timeupdate",()=>{!t.setting.show&&!this.isHover&&!t.isInput&&!o()&&t.playing&&this.show&&Date.now()-this.timer>=e.CONTROL_HIDE_TIME&&(this.show=!1)}),i("control",t=>{t?(q(r,"art-hide-cursor"),j(r,"art-hover"),this.timer=Date.now()):(j(r,"art-hide-cursor"),q(r,"art-hover"))}),this.init(),P(t).closed||function(t){const{$bottom:e,$controls:r,$player:n}=t.template,o=D(e),{on:i}=_(t,e),a=()=>{if(o.closed)return;const t=r.offsetHeight;t>0&&n.style.getPropertyValue("--art-controls-height")!==`${t}px`&&n.style.setProperty("--art-controls-height",`${t}px`)};if(i("resize",a),"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(a);return t.observe(r),void o.add(()=>{t.disconnect()})}if("undefined"!==typeof MutationObserver){const t=new MutationObserver(a);t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),o.add(()=>{t.disconnect()})}a()}(t)}init(){Ee(this)}add(t){if(M(this.art))return;const e="function"===typeof t?t(this.art):t,{$progress:r,$controlsLeft:n,$controlsRight:o}=this.art.template;switch(e.position){case"top":this.$parent=r;break;case"left":this.$parent=n;break;case"right":this.$parent=o;break;default:it(!1,"Control option.position must one of 'top', 'left', 'right'")}super.add(e)}check(t){!function(t){var e,r;if(!t)return;const n=t.$control_value.contains(t.$control_value.ownerDocument.activeElement);Le(t.$control_value,t.html);for(let o=0;othis.check(t),t,e,r)}}function ze(t,e){const{constructor:r,template:{$video:n}}=t;!function(t){const{$player:e}=t.template,r=r=>{var n;if(M(t))return;const o=F(r,e);t.isInput=o&&"INPUT"===(null==(n=r.target)?void 0:n.tagName),t.isFocus=o,t.emit(o?"focus":"blur",r)};t.on("document:click",r),t.on("document:contextmenu",r),P(t).add(()=>{t.off("document:click",r),t.off("document:contextmenu",r)})}(t);let o=[];e.proxy(n,"click",e=>{if(M(t))return;const n=Date.now();o.push(n);const{MOBILE_CLICK_PLAY:i,DBCLICK_TIME:a,MOBILE_DBCLICK_PLAY:s,DBCLICK_FULLSCREEN:l}=r,c=o.filter(t=>n-t<=a);switch(c.length){case 1:if(t.emit("click",e),M(t))return;(!k||!t.isLock&&i)&&at(t.toggle()),o=c;break;case 2:if(t.emit("dblclick",e),M(t))return;k?!t.isLock&&s&&at(t.toggle()):l&&(t.fullscreen=!t.fullscreen),o=[];break;default:o=[]}})}function Oe(t){let e;const r=()=>{e=void 0},n=r=>e===r&&!M(t)&&!t.isLock&&!t.option.isLive&&t.isRotate===r.rotated&&r.sourceActive(),o=t=>{t&&r()};t.on("document:touchend",r),t.on("document:touchcancel",r),t.on("lock",o),P(t).add(()=>{r(),t.off("document:touchend",r),t.off("document:touchcancel",r),t.off("lock",o)});return{start:(o,i)=>{r();const a=i.touches[0];if(M(t)||t.isLock||t.option.isLive||1!==i.touches.length||!a)return;if(![a.pageX,a.pageY,a.clientX,a.clientY,t.currentTime].every(Number.isFinite))return;const s={target:o,identifier:a.identifier,x:a.pageX,y:a.pageY,time:t.currentTime,rotated:t.isRotate,sourceActive:de(t)};if(e=s,o===t.template.$progress){const o=t.isRotate?t.height:t.template.$progress.clientWidth;if(!Number.isFinite(o)||o<=0||!Number.isFinite(t.duration)||t.duration<=0)return void r();try{ve(t,i,()=>n(s))}catch(l){throw e===s&&r(),l}n(s)&&(s.time=t.currentTime)}},move:o=>{const i=e,a=o.touches[0];if(!i)return;if(!n(i)||1!==o.touches.length||!a||a.identifier!==i.identifier)return void r();const s=i.rotated?t.height:t.width,l=i.target===t.template.$video?t.constructor.TOUCH_MOVE_RATIO:1;if(![a.pageX,a.pageY,s,t.duration,l].every(Number.isFinite)||s<=0||t.duration<=0)return void r();const c=function(t,e,r,n){const o=e-n,i=r-t;if(Math.abs(i)<2&&Math.abs(o)<2)return 0;const a=180*Math.atan2(o,i)/Math.PI;return a>=-45&&a<45?4:a>=45&&a<135?1:a>=-135&&a<-45?2:a>=135&&a<=180||a>=-180&&a<-135?3:0}(i.x,i.y,a.pageX,a.pageY);if(!(i.rotated?1===c||2===c:3===c||4===c))return;const d=ct((i.rotated?a.pageY-i.y:a.pageX-i.x)/s,-1,1),u=ct(i.time+t.duration*d*l,0,t.duration);t.seek=u,n(i)&&(t.emit("setBar","played",ct(u/t.duration,0,1),o),n(i)&&(t.notice.show=`${ut(u)} / ${ut(t.duration)}`))},cancel:r}}const Re=["click","mouseup","keydown","touchend","touchcancel","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],De=["resize","scroll","orientationchange"];const Ie=new WeakMap;function Ne(t){const e=Ie.get(t);if(!e)throw new Error("ArtPlayer event registry has not been initialized");return e}function _e(t,e,r,n,o={}){if(Array.isArray(r)){const i=[];try{return r.map(r=>{const a=_e(t,e,r,n,o);return i.push(a),a})}catch(f){for(const t of i.reverse())try{t()}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}}const i=r,a=Ne(t);if(a.scope.closed||a.cleaning)return()=>{};const s="boolean"===typeof o?o:{capture:Boolean(null==o?void 0:o.capture),once:Boolean(null==o?void 0:o.once),passive:null==o?void 0:o.passive,signal:null==o?void 0:o.signal},l="boolean"===typeof s?s:s.capture,c="boolean"===typeof s?void 0:s.signal;if(a.scope.closed||a.cleaning||(null==c?void 0:c.aborted))return()=>{};let d=!0;function u(r=!1){(d||r)&&(e.removeEventListener(i,n,l),null==c||c.removeEventListener("abort",p),d=!1,t.destroyEvents.delete(p))}function p(){u()}t.destroyEvents.add(p);try{e.addEventListener(i,n,s),!d||a.scope.closed||a.cleaning?u(!0):(null==c?void 0:c.aborted)?p():null==c||c.addEventListener("abort",p,{once:!0})}catch(f){try{u(!0)}catch(h){console.warn("Failed to roll back event listener:",h)}throw f}return p}function We(t){return(e,r)=>{if(M(t))return;const n=(...e)=>{if(!M(t))return r(...e)};t.on(e,n),P(t).add(()=>{t.off(e,n)})}}function Fe(t){if(!t.constructor.USE_RAF)return;const e=P(t);let r=()=>{};const n=()=>{M(t)||(t.playing&&t.emit("raf"),M(t)||(r=function(t,e){if(t.closed)return At;let r=!0,n=At;const o=requestAnimationFrame(o=>{r&&(n(),t.closed||e(o))});return n=t.add(()=>{r=!1,cancelAnimationFrame(o)}),n}(e,n)))};n(),We(t)("destroy",()=>r())}class Ve{constructor(t){this.destroyEvents=new Set,function(t,e){Ie.set(t,{scope:P(e),cleaning:!1})}(this,t),P(t).add(()=>{this.destroy()}),this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),ze(t,this),function(t,e){const{$player:r}=t.template;e.hover(r,e=>{M(t)||(j(r,"art-hover"),t.emit("hover",!0,e))},e=>{M(t)||(q(r,"art-hover"),t.emit("hover",!1,e))})}(t,this),function(t,e){const{$player:r}=t.template;e.proxy(r,"mousemove",e=>{M(t)||t.emit("mousemove",e)})}(t,this),function(t,e){var r,n;const{option:o,constructor:i}=t,a=We(t);a("resize",()=>{const{aspectRatio:e,notice:r}=t;"standard"===t.state&&o.autoSize&&t.autoSize(),M(t)||(t.aspectRatio=e,M(t)||(r.show=""))});const s=P(t);let l=()=>{};const c=()=>{M(t)||(l(),l=St(s,()=>t.emit("resize"),i.RESIZE_TIME))};a("window:orientationchange",c),a("window:resize",c);const d=null==(n=null==(r=t.template.$player.ownerDocument.defaultView)?void 0:r.screen)?void 0:n.orientation;"function"===typeof(null==d?void 0:d.addEventListener)&&e.proxy(d,"change",c)}(t,this),function(t,e){if(!k||t.option.isLive)return;const{$video:r,$progress:n}=t.template,o=Oe(t),i=t=>{e.proxy(t,"touchstart",e=>o.start(t,e)),e.proxy(t,"touchmove",t=>o.move(t)),e.proxy(t,"touchcancel",o.cancel)};t.option.gesture&&i(r),i(n)}(t,this),function(t){const{option:e,constructor:r,template:{$container:n}}=t,o=r.SCROLL_TIME,i=P(t),a=We(t);let s=!1;a("window:scroll",()=>{s||(t.emit("view",function(t,e){const r=t.getBoundingClientRect(),n=t.ownerDocument,o=n.defaultView,i=(null==o?void 0:o.innerHeight)||n.documentElement.clientHeight,a=(null==o?void 0:o.innerWidth)||n.documentElement.clientWidth,s=r.top-e<=i&&r.top+r.height+e>=0,l=r.left-e<=a+e&&r.left+r.width+e>=0;return s&&l}(n,r.SCROLL_GAP)),M(t)||(s=!0,St(i,()=>{s=!1},o)))}),a("view",r=>{e.autoMini&&(t.mini=!r)})}(t),function(t,e){let r,n=0;P(t).add(()=>{r=void 0,n++});const o=t=>{if(t){for(const r of t.disposers)e.remove(r);t.disposers.length=0}};function i(i={}){var a;if(M(t))return;const s=++n,l={disposers:[]},c=()=>s!==n||M(t);try{const{$player:n}=t.template,o=i.document||n.ownerDocument||document,s=i.window||(null==(a=n.ownerDocument)?void 0:a.defaultView)||window,d=(n,o,i)=>{for(const a of o){if(c())return;l.disposers.push(e.proxy(n,a,e=>{r!==l||M(t)||t.emit(`${i}:${a}`,e)}))}};d(o,Re,"document"),d(s,De,"window")}catch(u){throw o(l),u}if(c())return void o(l);const d=r;r=l,o(d)}i(),e.bindGlobalEvents=i}(t,this),Fe(t)}proxy(t,e,r,n={}){return Array.isArray(e),_e(this,t,e,r,n)}hover(t,e,r){e&&this.proxy(t,"mouseenter",e),r&&this.proxy(t,"mouseleave",r)}remove(t){!function(t,e){if(t.destroyEvents.has(e))try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to remove event listener:",r)}}(this,t)}destroy(){!function(t){const e=Ne(t);if(!e.cleaning){e.cleaning=!0;try{for(const e of t.destroyEvents)try{e(),t.destroyEvents.delete(e)}catch(r){console.warn("Failed to destroy event listener:",r)}}finally{e.cleaning=!1}}}(this)}}function Ye(t){if(t&&1===t.nodeType)return t}function Be(t){const e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e||t.isContentEditable}function He(t,e){var r,n,o,i;if(function(t){return Lt.has(t)}(t)||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.isComposing||229===t.keyCode)return!1;const a=function(t,e){var r;const n=t.target;return 9===(null==n?void 0:n.nodeType)?n:(null==n?void 0:n.ownerDocument)||(null==(r=t.view)?void 0:r.document)||e}(t,e);let s=Ye(a.activeElement);for(;null==(r=null==s?void 0:s.shadowRoot)?void 0:r.activeElement;)s=Ye(s.shadowRoot.activeElement);if(s&&Be(s))return!1;const l=Ye(null==(n=t.composedPath)?void 0:n.call(t)[0])||Ye(t.target),c="Enter"===t.key||"Enter"===t.code||"NumpadEnter"===t.code;if(c||" "===t.key||"Space"===t.code){const t='button,summary,[role="button"],[role="switch"]'+(c?",a[href]":"");if((null==(o=null==l?void 0:l.closest)?void 0:o.call(l,t))||(null==(i=null==s?void 0:s.closest)?void 0:i.call(s,t)))return!1}return!l||!Be(l)}const je=new WeakMap;class qe{constructor(t){this.art=t,this.keys={},je.set(this,{subscribed:!1}),k||this.init()}init(){const t=this.art;if(M(t))return;const e=je.get(this);if(t.option.hotkey){if(!e.defaults){const r=function(t){const{constructor:e}=t;return{Escape:()=>{t.fullscreenWeb&&(t.fullscreenWeb=!1)},Space:()=>{at(t.toggle())},ArrowLeft:()=>{t.backward=e.SEEK_STEP},ArrowUp:()=>{t.volume+=e.VOLUME_STEP},ArrowRight:()=>{t.forward=e.SEEK_STEP},ArrowDown:()=>{t.volume-=e.VOLUME_STEP}}}(t);e.defaults=()=>{for(const t of Object.keys(r))this.add(t,r[t])}}e.defaults()}if(e.subscribed)return;e.subscribed=!0;const r=e=>{if(!M(t)){if(t.isFocus&&He(e,t.template.$player.ownerDocument)){const r=Object.prototype.hasOwnProperty.call(this.keys,e.code)?this.keys[e.code]:void 0;if(r){e.preventDefault();for(let n=0;n{e.subscribed=!1,t.off("document:keydown",r)})}add(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;return r?r.includes(e)||r.push(e):Object.defineProperty(this.keys,t,{value:[e],enumerable:!0,configurable:!0,writable:!0}),this}remove(t,e){const r=Object.prototype.hasOwnProperty.call(this.keys,t)?this.keys[t]:void 0;if(r){const n=r.indexOf(e);-1!==n&&r.splice(n,1),0===r.length&&delete this.keys[t]}return this}}const Ue={"Context Menu":"\u5feb\u6377\u83dc\u5355",Lock:"\u9501\u5b9a",Back:"\u8fd4\u56de",Settings:"\u8bbe\u7f6e",Progress:"\u64ad\u653e\u8fdb\u5ea6","Video Info":"\u7edf\u8ba1\u4fe1\u606f",Close:"\u5173\u95ed","Video Load Failed":"\u52a0\u8f7d\u5931\u8d25",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Rate:"\u901f\u5ea6",Mute:"\u9759\u97f3","Video Flip":"\u753b\u9762\u7ffb\u8f6c",Horizontal:"\u6c34\u5e73",Vertical:"\u5782\u76f4",Reconnect:"\u91cd\u65b0\u8fde\u63a5","Show Setting":"\u663e\u793a\u8bbe\u7f6e","Hide Setting":"\u9690\u85cf\u8bbe\u7f6e",Screenshot:"\u622a\u56fe","Play Speed":"\u64ad\u653e\u901f\u5ea6","Aspect Ratio":"\u753b\u9762\u6bd4\u4f8b",Default:"\u9ed8\u8ba4",Normal:"\u6b63\u5e38",Open:"\u6253\u5f00","Switch Video":"\u5207\u6362","Switch Subtitle":"\u5207\u6362\u5b57\u5e55",Fullscreen:"\u5168\u5c4f","Exit Fullscreen":"\u9000\u51fa\u5168\u5c4f","Web Fullscreen":"\u7f51\u9875\u5168\u5c4f","Exit Web Fullscreen":"\u9000\u51fa\u7f51\u9875\u5168\u5c4f","Mini Player":"\u8ff7\u4f60\u64ad\u653e\u5668","PIP Mode":"\u5f00\u542f\u753b\u4e2d\u753b","Exit PIP Mode":"\u9000\u51fa\u753b\u4e2d\u753b","PIP Not Supported":"\u4e0d\u652f\u6301\u753b\u4e2d\u753b","Fullscreen Not Supported":"\u4e0d\u652f\u6301\u5168\u5c4f","Subtitle Offset":"\u5b57\u5e55\u504f\u79fb","Last Seen":"\u4e0a\u6b21\u770b\u5230","Jump Play":"\u8df3\u8f6c\u64ad\u653e",AirPlay:"\u9694\u7a7a\u64ad\u653e","AirPlay Not Available":"\u9694\u7a7a\u64ad\u653e\u4e0d\u53ef\u7528"};!function(t,e){if("undefined"!==typeof window){window[t]=e}}("artplayer-i18n-zh-cn",Ue);class Xe{constructor(t){this.art=t,this.languages={"zh-cn":Ue},this.language={},this.update(t.option.i18n)}init(){const t=this.art.option.lang.toLowerCase();this.language=yt(this.languages,t)&&this.languages[t]||{}}get(t){return yt(this.language,t)&&this.language[t]||t}update(t){this.languages=wt(this.languages,t),this.init()}}const Ge={loading:'\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n',state:'\r\n\r\n\r\n',play:'\r\n \r\n',pause:'\r\n \r\n',check:'\r\n\r\n',volume:'\r\n \r\n \r\n',volumeClose:'\r\n \r\n \r\n',screenshot:'\r\n\t\r\n\r\n',setting:'\r\n \r\n \r\n',pip:'\r\n\r\n',arrowLeft:'\r\n \r\n',arrowRight:'\r\n \r\n',playbackRate:'',aspectRatio:'',config:'',lock:'\r\n\r\n\r\n\r\n\r\n',flip:'\r\n\r\n\r\n\r\n\r\n\r\n',unlock:'\r\n\r\n\r\n',fullscreenOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenOn:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOff:'\r\n\r\n\r\n\r\n\r\n',fullscreenWebOn:'\r\n\r\n\r\n\r\n\r\n',switchOn:'\r\n\r\n\r\n \r\n',switchOff:'\r\n\r\n\r\n \r\n\r\n',error:'\r\n\r\n\r\n\r\n\r\n',close:'\r\n\r\n\r\n\r\n\r\n',airplay:'\r\n \r\n \r\n \r\n \r\n\r\n'};class Ke{constructor(t){const e=s(s({},Ge),t.option.icons);for(const r in e)vt(this,r,{get:()=>tt(r,e[r])})}}const Ze=new WeakMap;function Je(t,e,r){const n=()=>!e.closed&&!M(t),o=t=>{try{e.dispose()}catch(r){console.warn("Failed to release info polling resources:",r)}throw t};try{const{proxy:i,constructor:a,template:{$infoPanel:s,$infoClose:l,$video:c}}=t,d=i(l,"click",()=>{n()&&r()});e.add(()=>{t.events.remove(d)});const u=Array.from(s.querySelectorAll("[data-video]")),p=()=>e.dispose();t.on("destroy",p),e.add(()=>{t.off("destroy",p)}),function(t,e,r){const{$player:n,$info:o,$infoClose:i}=t.template;if(!o)return;const a=()=>!e.closed&&!M(t),s=()=>n.classList.contains("art-info-show"),l=t.i18n.get("Close");if(!a())return;const c=t.i18n.get("Video Info");if(!a())return;i.setAttribute("aria-label",l),o.setAttribute("role","group"),o.setAttribute("aria-label",c),zt(e,i,()=>i.click(),s),Ct(e,o,"keydown",t=>{const e=t;a()&&s()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),r())});const d=e=>{var r;if(!a())return;const s=n.ownerDocument,l=s.activeElement;if(e)o.contains(l)||(Ze.delete(t),l&&n.contains(l)&&(Ze.set(t,re(l)),n.classList.contains("art-keyboard-focus")&&i.focus({preventScroll:!0})));else{const e=Ze.get(t);if(Ze.delete(t),!o.contains(l))return;const i=e&&(null==(r=s.defaultView)?void 0:r.getComputedStyle(e).visibility);(null==e?void 0:e.isConnected)&&n.contains(e)&&e.getClientRects().length&&"hidden"!==i&&"collapse"!==i&&!e.matches(":disabled")&&!e.closest("[inert]")&&"true"!==e.getAttribute("aria-disabled")?e.focus({preventScroll:!0}):It(t)}};t.on("info",d),e.add(()=>{t.off("info",d)})}(t,e,r);const f=()=>{var t;try{for(const e of u){if(!n())return;const r=Reflect.get(c,null!=(t=e.dataset.video)?t:"undefined");if(!n())return;const o="number"===typeof r?r.toFixed(2):r;if(!n())return;if(e.textContent!==o){const t=null==o?null:`${o}`;if(!n())return;e.textContent=t}}n()&&St(e,f,a.INFO_LOOP_TIME)}catch(r){o(r)}};n()&&f()}catch(i){o(i)}}const Qe=new WeakMap;class tr extends Zt{constructor(t){super(t),this.name="info",Qe.set(this,{revision:0}),k||this.init()}init(){var t;const e=Qe.get(this),r=++e.revision;if(null==(t=e.scope)||t.dispose(),M(this.art)||e.revision!==r)return;const n=P(this.art).child();e.scope=n,n.add(()=>{e.scope===n&&(e.scope=void 0)}),Je(this.art,n,()=>{this.show=!1})}}class er extends Zt{constructor(t){super(t);const{option:e,template:{$layer:r}}=t;this.name="layer",this.$parent=r;for(let n=0;n{et(i,"display","none"),et(s,"display",null),M(t)&&(l=!0)};var d;t.on("destroy",c),(d=t,L(d).finalizers).add(()=>{try{l||c()}finally{t.off("destroy",c)}}),M(t)||n.proxy(e.$state,"click",()=>{M(t)||at(t.play())})}}const or=new WeakMap;function ir(t){const e=or.get(t);e.revision++,e.pending=void 0,null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}class ar{constructor(t){this.art=t,this.timer=null,or.set(this,{revision:0});const e=()=>this.destroy();t.on("destroy",e),P(t).add(()=>{t.off("destroy",e)}),P(t).add(()=>{this.destroy()})}destroy(){ir(this)}set show(t){if(M(this.art))return;const e=or.get(this);e.revision++;const{constructor:r,template:{$player:n,$noticeInner:o}}=this.art;if(t){ir(this);const i=e.revision,a=()=>!M(this.art)&&e.revision===i;if(o.textContent=t instanceof Error?t.message.trim():t,!a())return;if(j(n,"art-notice-show"),!a())return;const s=r.NOTICE_TIME;if(!a())return;const l={};e.pending=l;const c=setTimeout(()=>{if(M(this.art)||e.pending!==l)return;e.pending=void 0;const t=e.revision;o.textContent="",M(this.art)||e.revision!==t||q(n,"art-notice-show")},s);a()?this.timer=c:clearTimeout(c)}else q(n,"art-notice-show")}get show(){const{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}function sr(t,e){return function(t,e){const r=wt(e,t);return r.container=t.container,h(r,Gt)}(t,e)}function lr({width:t,height:e}){return Number.isFinite(t)&&t>0&&Number.isFinite(e)&&e>0}function cr(t,e){if(!lr(t)||!Number.isFinite(e)||e<=0)return;const r=t.width/t.height>e?{width:e*t.height,height:t.height,axis:"width"}:{width:t.width,height:t.width/e,axis:"height"};return lr(r)?r:void 0}function dr(t,e,r,n=!1){const o=e=>{M(t)||r(e)};t[n?"once":"on"](e,o),P(t).add(()=>{t.off(e,o)})}function ur(t,e,r){for(const[n,o]of e){if(M(t)||r&&!r())return;t[n].show=o}}function pr(t){const{option:e,constructor:r,i18n:n,notice:o,template:{$player:i}}=t;let a,s=ce(t),l=0;return{reset(){l=0,null==a||a.dispose(),q(i,"art-error")},loadStart(){q(i,"art-error")},schedule(d){(d=>c(null,null,function*(){if(M(t))return;const c=ce(t);if(c!==s&&(s=c,l=0),a&&!a.closed)return;const u=c.child();a=u,u.add(()=>{a===u&&(a=void 0)});const p=()=>!M(t)&&!u.closed&&c===ce(t),f=l{console.warn("ArtPlayer reconnect failed:",t)})}}}const fr=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],hr=(()=>{if("undefined"===typeof document)return!1;const t=fr[0],e={};for(const r of fr){if(r[1]in document){for(const[n,o]of r.entries())e[t[n]]=o;return e}}return!1})(),mr={change:hr.fullscreenchange,error:hr.fullscreenerror},vr={request:(t=document.documentElement,e)=>new Promise((r,n)=>{const o=()=>{vr.off("change",o),r()};vr.on("change",o);const i=t[hr.requestFullscreen](e);i instanceof Promise&&i.then(o).catch(n)}),exit:()=>new Promise((t,e)=>{if(!vr.isFullscreen)return void t();const r=()=>{vr.off("change",r),t()};vr.on("change",r);const n=document[hr.exitFullscreen]();n instanceof Promise&&n.then(r).catch(e)}),toggle:(t,e)=>vr.isFullscreen?vr.exit():vr.request(t,e),onchange(t){vr.on("change",t)},onerror(t){vr.on("error",t)},on(t,e){const r=mr[t];r&&document.addEventListener(r,e,!1)},off(t,e){const r=mr[t];r&&document.removeEventListener(r,e,!1)},raw:hr};function gr(t,e,...r){const n=Reflect.get(t,e);if("function"!==typeof n)throw new TypeError(`Fullscreen method ${e} is not available`);return n.apply(t,r)}Object.defineProperties(vr,{isFullscreen:{get:()=>Boolean(document[hr.fullscreenElement])},element:{enumerable:!0,get:()=>document[hr.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>Boolean(document[hr.fullscreenEnabled])}});const yr=new WeakMap;function br(t){try{Promise.resolve(t()).catch(()=>{})}catch(e){}}function wr(t){const{document:e,elementProperty:r,changeEvent:n,target:o,exit:i}=t,a=function(t,e,r){let n=yr.get(t);if(!n){n=new WeakMap,yr.set(t,n);const o=n;t.addEventListener(r,()=>{const r=Reflect.get(t,e),n=r&&o.get(r);n&&(o.delete(r),br(n))})}return n}(e,r,n);a.set(o,i),t.element===o&&(a.delete(o),br(i))}function xr(t,e,r,n,o=()=>t.element!==t.target){const i=e.child();let a,s,l=!1,c=!1,d=!1,u=!1,p=!1;const f=new Promise((t,e)=>{a=t,s=e});function h(t=!1,e){if(!l){l=!0;try{i.dispose()}catch(r){t||(t=!0,e=r)}t?s(e):a()}}i.add(()=>{l||(l=!0,c=!0,a(),d&&!u&&r&&wr(t))});const m=()=>{d&&!u&&(r?t.element===t.target:o())&&h()};if(Ct(i,t.document,t.changeEvent,m),Ct(i,t.document,t.errorEvent,e=>{e.target!==t.target&&e.target!==t.document||(p=!0,d&&!u&&h(!0,new Error("Fullscreen request failed")))}),!i.closed)try{r&&function(t){var e;null==(e=yr.get(t.document))||e.delete(t.target)}(t);const e=r?t.request():t.exit();u=Boolean(e&&"function"===typeof e.then),d=!0,c&&!u&&r&&wr(t),u?Promise.resolve(e).then(()=>{c?n():h()},t=>h(!0,t)).catch(()=>{}):p?h(!0,new Error("Fullscreen request failed")):m()}catch(v){h(!0,v)}return{promise:f,cancel:()=>i.dispose()}}function kr(t,e){const r=P(t).child(),{$player:n,$video:o}=t.template,i=()=>e.element===n||e.element===o;let a,s=i(),l=0,c=s,d=!1,u=!1,p=!1;function f(){if(i())try{Promise.resolve(e.exit()).catch(()=>{})}catch(t){}}return r.add(()=>{l+=1,c=!1,n.classList.remove("art-fullscreen"),f()}),Ct(r,e.document,e.changeEvent,()=>{const r=i();if(r&&function(t){var e,r;return null!=(r=null==(e=yr.get(t.document))?void 0:e.has(t.target))&&r}(e))return;if(r&&u)return void f();if(r===s||M(t))return;s=r;const o=l,a=()=>M(t)||i()!==r||o!==l&&c!==r;t.emit("fullscreen",r),a()||(r&&(t.state="fullscreen"),a()||(n.classList.toggle("art-fullscreen",r),t.emit("resize")))}),Ct(r,e.document,e.errorEvent,r=>{(r.target===n||r.target===o||r.target===e.document&&(p||void 0!==a||i()))&&!M(t)&&t.emit("fullscreenError",r)}),{get:()=>!M(t)&&i(),set(n){if(M(t))return Promise.resolve();const o=++l;if(c=Boolean(n),c?u=!1:d&&(u=!0),null==a||a.cancel(),a=void 0,d=!1,!c&&!i())return Promise.resolve();p=!0,d=c;const s=xr(e,r,c,()=>{!M(t)&&c||f()},()=>!i());p=!1,l===o?a=s:s.cancel();const h=s.promise.catch(e=>{throw M(t)||l!==o||(t.notice.show=e),e}).finally(()=>{l===o&&(a=void 0,d=!1)});return h.catch(()=>{}),h}}}const $r=new WeakSet;function Er(t,e=!1){return"string"===typeof t.webkitPresentationMode?"fullscreen"===t.webkitPresentationMode:"boolean"===typeof t.webkitDisplayingFullscreen?t.webkitDisplayingFullscreen:t.ownerDocument.fullscreenElement===t||e}function Ar(t){$r.delete(t),t.removeEventListener("webkitbeginfullscreen",Cr),t.removeEventListener("webkitpresentationmodechanged",Cr)}function Cr(t){var e;if($r.has(this)&&Er(this,"webkitbeginfullscreen"===t.type)){Ar(this);try{null==(e=this.webkitExitFullscreen)||e.call(this)}catch(r){}}}function Sr(t){$r.add(t),t.addEventListener("webkitbeginfullscreen",Cr),t.addEventListener("webkitpresentationmodechanged",Cr)}function Tr(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=Er(e),i=o,a=!1,s=0;const l=()=>Er(e,n);function c(r){if(M(t)||(c=e,$r.has(c)))return;var c;"boolean"===typeof r&&(n=r);const d=l();if(d&&(a=!1),d===o)return;o=d;const u=s,p=()=>M(t)||l()!==d||u!==s&&i!==d;t.emit("fullscreen",d),p()||(d&&(t.state="fullscreen"),p()||t.emit("resize"))}r.add(()=>{var t;s++,i=!1,a&&Sr(e),l()&&(null==(t=e.webkitExitFullscreen)||t.call(e))}),Ct(r,e,"webkitbeginfullscreen",()=>c(!0)),Ct(r,e,"webkitendfullscreen",()=>c(!1)),Ct(r,e,"webkitpresentationmodechanged",()=>c());const d=()=>c();return t.on("document:webkitfullscreenchange",d),r.add(()=>{t.off("document:webkitfullscreenchange",d)}),{get:()=>!M(t)&&l(),set(r){if(M(t))return;const n=++s;if(i=Boolean(r),r){if(Ar(e),t.state="fullscreen",M(t)||n!==s)return;a=!0;try{e.webkitEnterFullscreen()}catch(o){throw n===s&&(a=!1),o}}else a&&(a=!1,Sr(e)),l()&&e.webkitExitFullscreen()}}}function Lr(t){return{node:t,parent:t.parentNode,next:t.nextSibling}}function Pr({node:t,parent:e,next:r}){var n;if(!e)return void(null==(n=t.parentNode)||n.removeChild(t));const o=(null==r?void 0:r.parentNode)===e?r:null;t.parentNode===e&&t.nextSibling===o||e.insertBefore(t,o)}function Mr(t,e,r){const n=Math.max(0,r.viewportWidth-r.width),o=Math.max(0,r.viewportHeight-r.height);return{left:Math.max(0,Math.min(t,n)),top:Math.max(0,Math.min(e,o))}}function zr(t){const{width:e,height:r}=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;return{width:e,height:r,viewportWidth:n.innerWidth,viewportHeight:n.innerHeight}}function Or(t,e,r,n){const o=e.child();if(o.closed)return;const i=t.template.$mini;if(i){const t=i.style.display;return o.add(()=>{i.style.display=t}),{element:i,cancelDrag:()=>{},fresh:!1}}const a=t.template.$player.ownerDocument,s=a.createElement("div");s.className="art-mini-popup",o.add(()=>{s.remove()});try{const e=a.createElement("div");if(e.className="art-mini-close",e.append(t.icons.close),o.closed)return;const i=a.createElement("div");i.className="art-mini-state";const l=t.icons.play,c=t.icons.pause;if(o.closed)return;i.append(l,c),s.append(e,i),zt(o,e,()=>e.click(),r),zt(o,i,()=>(t.playing?c:l).click(),r);const d=t.i18n.get("Close");if(o.closed||M(t))return;e.setAttribute("aria-label",d);const u=t.i18n.get("Mini Player");if(o.closed||M(t))return;s.setAttribute("role","group"),s.setAttribute("aria-label",u),Ct(o,s,"keydown",t=>{const e=t;r()&&Mt(e)&&!e.defaultPrevented&&"Escape"===e.key&&(Pt(e),n())}),Ct(o,e,"click",n),Ct(o,l,"click",()=>{at(t.play())}),Ct(o,c,"click",()=>{t.pause()});const p=()=>{if(o.closed)return;const e=t.i18n.get(t.playing?"Pause":"Play");o.closed||M(t)||(i.setAttribute("aria-label",e),l.style.display=t.playing?"none":"flex",c.style.display=t.playing?"flex":"none")};p();for(const r of["video:playing","video:pause","video:timeupdate"])t.on(r,p),o.add(()=>{t.off(r,p)});const f=function(t,e,r,n){let o=!1,i=0,a=0;const s=()=>{o=!1,e.classList.remove("art-mini-dragging"),e.style.transform=""};Ct(r,e,"mousedown",t=>{const e=t;0===e.button&&n()&&(o=!0,i=e.clientX,a=e.clientY)});const l=t=>{!r.closed&&o&&n()&&(e.classList.add("art-mini-dragging"),e.style.transform=`translate(${t.clientX-i}px, ${t.clientY-a}px)`)},c=()=>{if(r.closed||!o||!n())return;const i=e.getBoundingClientRect(),a=Mr(i.left,i.top,zr(e));s(),e.style.left=`${a.left}px`,e.style.top=`${a.top}px`,t.storage.set("left",a.left),r.closed||t.storage.set("top",a.top)};return t.on("document:mousemove",l),r.add(()=>{t.off("document:mousemove",l)}),t.on("document:mouseup",c),r.add(()=>{t.off("document:mouseup",c)}),r.add(s),s}(t,s,o,r);if(o.closed)return;if(t.template.$mini=s,a.body.append(s),!o.closed)return{element:s,cancelDrag:f,fresh:!0,focus:()=>e.focus({preventScroll:!0})}}catch(l){throw o.dispose(),t.template.$mini===s&&delete t.template.$mini,l}}function Rr(t){const{$player:e,$video:r}=t.template,n=P(t).child();let o,i,a=0,c=!1,d=!1;const u=()=>!M(t)&&e.classList.contains("art-mini"),p=function(t){const e=t.template.$player;let r;return{entering(){var n;const o=e.ownerDocument,i=o.activeElement,a=i&&e.contains(i);(null==(n=t.template.$mini)?void 0:n.contains(i))||(r=a?re(i):void 0);const s=a&&e.classList.contains("art-keyboard-focus");return e=>{!s||M(t)||o.activeElement!==i&&o.activeElement!==o.body||null==e||e()}},leaving(n){const o=e.ownerDocument,i=null==n?void 0:n.contains(o.activeElement);return()=>{var e;if(!i||M(t)||o.activeElement!==o.body&&!(null==n?void 0:n.contains(o.activeElement)))return;const a=r&&(null==(e=o.defaultView)?void 0:e.getComputedStyle(r).visibility);(null==r?void 0:r.isConnected)&&r.getClientRects().length&&"hidden"!==a&&"collapse"!==a&&"true"!==r.getAttribute("aria-disabled")&&!r.matches(":disabled")&&!r.closest("[inert]")?r.focus({preventScroll:!0}):It(t)}}}}(t);function f(){if(i){const e=i,r=a;i=void 0;try{Pr(e)}catch(t){throw r!==a||i||(i=e),t}}}function h(){if(M(t))return;const r=++a;d=!1;const n=p.leaving(t.template.$mini);f(),M(t)||r!==a||(null==o||o.cancelDrag(),e.classList.remove("art-mini"),t.template.$mini&&(t.template.$mini.style.display="none",n(),M(t)||r!==a||t.emit("mini",!1)))}function m(){if(M(t))return;const v=++a;if(c)return void(d=!0);const g=p.entering();if(t.state="mini",!M(t)&&v===a){null!=i||(i=Lr(r)),e.classList.add("art-mini");try{if(!o){c=!0;try{o=Or(t,n,u,h)}finally{c=!1}}if(d)return d=!1,void m();if(!o||M(t))return;if(v!==a)return void(u()||(o.element.style.display="none"));if(o.fresh?o.element.prepend(r):o.element.append(r),M(t)||v!==a)return;o.element.style.display=o.fresh?"":"flex",o.fresh=!1;const e=t.storage.get("top"),i=function(t,e,r){return"number"===typeof t&&Number.isFinite(t)&&"number"===typeof e&&Number.isFinite(e)&&t>=0&&e>=0&&t+r.width<=r.viewportWidth&&e+r.height<=r.viewportHeight?{left:t,top:e,reset:!1}:l(s({},Mr(r.viewportWidth-r.width-50,r.viewportHeight-r.height-50,r)),{reset:!0})}(t.storage.get("left"),e,zr(o.element));if(M(t)||v!==a)return;if(o.element.style.left=`${i.left}px`,o.element.style.top=`${i.top}px`,i.reset){if(t.storage.set("top",i.top),M(t)||v!==a)return;t.storage.set("left",i.left)}M(t)||v!==a||g(o.focus),M(t)||v!==a||t.emit("mini",!0)}catch(y){const r=d;throw d=!1,M(t)||v!==a&&!r||(f(),e.classList.remove("art-mini"),o&&(o.element.style.display="none")),y}}}return n.add(()=>{a++;try{f()}finally{null==o||o.cancelDrag(),e.classList.remove("art-mini")}}),{get:u,set(t){t?m():h()}}}const Dr=new WeakSet,Ir=t=>"picture-in-picture"===t.webkitPresentationMode;function Nr(t){Dr.delete(t),t.removeEventListener("webkitpresentationmodechanged",_r),t.removeEventListener("enterpictureinpicture",_r)}function _r(){var t;if(Dr.has(this)&&Ir(this)){Nr(this);try{null==(t=this.webkitSetPresentationMode)||t.call(this,"inline")}catch(e){}}}function Wr(t){Dr.add(t),t.addEventListener("webkitpresentationmodechanged",_r),t.addEventListener("enterpictureinpicture",_r)}function Fr(t,e,r,n,o=!0){let i,a=!1;const s=e=>{t.closed||a||(o&&(a=!0,i()),n(e))};return e[o?"once":"on"](r,s),i=t.add(()=>{e.off(r,s)}),s}function Vr(t,e,r){return new Promise((n,o)=>{if(M(t)||e===t.url)return void n();const i=ue(t),a=i.scope.child();let s=!1;const l=(t=!1,e)=>{s||(s=!0,i.onError=void 0,i.onAssigned=void 0,a.dispose(),t?o(e):n(),t&&i.scope.dispose())};a.add(()=>{l()});const d=()=>!s&&i.active(),u=t=>l(!0,t);i.onError=u;try{const{playing:n,aspectRatio:o,playbackRate:s}=t;if(t.pause(),!d())return;const p=a.child();let f=!1,h=!1,m=!1;const v=xe(t,r,d),g=()=>c(null,null,function*(){if(t.aspectRatio=o,d()){if(n)try{yield t.play()}catch(e){}d()&&(t.notice.show="",l())}}),y=()=>{var e,r;if(d()&&!h&&f)try{if(null==(r=null==(e=t.template)?void 0:e.$video)?void 0:r.seeking)return;if(!d())return;if(m||(m=!0,t.playbackRate=s),!v.ready()||!d()||h)return;h=!0,p.dispose(),g().catch(u)}catch(n){u(n)}},b={"video:error":u,"video:loadedmetadata":()=>{if(d())try{v.restore()}catch(t){u(t)}},"video:canplay":()=>{f=!0,y()},"video:seeked":y,seek:v.manual},w=a.child(),x=[],k=Object.keys(b);for(const e of k)Fr(w,t,e,t=>{i.acceptingEvents&&x.push([e,t])},!1);if(fe(t,i,e),!d())return;if(t.notice.show="",!d())return;const $=()=>{if(w.dispose(),!e)return void l();const r={};for(const e of k)r[e]=Fr(p,t,e,b[e],"video:seeked"!==e);for(const[t,e]of x){if(!d()||p.closed)break;r[t](e)}x.length=0};i.assigned?$():i.onAssigned=$}catch(p){u(p)}})}function Yr(t){const{option:e,template:{$video:r}}=t;vt(t,"url",{get:()=>r.src,set(n){return c(this,null,function*(){if(M(t))return;const o=function(t){const e=se.get(t);return se.delete(t),e||ue(t)}(t);o.acceptingEvents=!1;try{if(!n)return void((yield Tt(o.scope))&&o.active()&&(t.loading.show=!0));const i=t.url,a=e.type||st(n),s=e.customType[a];if(a&&s){if(!(yield Tt(o.scope))||!o.active())return;t.loading.show=!0}if(!o.active())return;const l=o.scope.child();let c=!1,d=!1;Fr(l,t,"video:canplay",()=>{c=!d}),Fr(l,t,"video:error",()=>{d=!0});try{if(o.acceptingEvents=!0,a&&s){const e=s.call(t,r,n,t);Promise.resolve(e).catch(t=>he(o,t))}else{if(!o.active())return;r.src=n}}finally{l.dispose()}if(!o.active())return;if(i!==t.url&&(t.option.url=n,o.active()&&t.isReady&&i)){const e=()=>{o.active()&&t.emit("restart",n)};c?e():d||Fr(o.scope,t,"video:canplay",e)}}catch(i){he(o,i)}finally{pe(o)}})}})}const Br=[function(t){const{template:{$video:e}}=t;vt(t,"attr",{value(t,r){const n=e;if(void 0===r)return n[t];n[t]=r}})},function(t){const{i18n:e,notice:r,option:n,constructor:{instances:o},template:{$video:i}}=t;vt(t,"play",{value(){return c(this,null,function*(){const a=de(t),s=yield i.play();if(!a())return s;const l=e.get("Play");if(!a())return s;if(r.show=l,!a())return s;if(t.emit("play"),n.mutex)for(let e=0;et.playing?t.pause():t.play()})},function(t){const{notice:e}=t;vt(t,"seek",{set(r){t.currentTime=r,t.duration&&(e.show=`${ut(t.currentTime)} / ${ut(t.duration)}`),t.emit("seek",t.currentTime,r)}});const r=t;vt(t,"forward",{set(e){r.seek=t.currentTime+e}}),vt(t,"backward",{set(e){r.seek=t.currentTime-e}})},function(t){const{template:{$video:e},i18n:r,notice:n,storage:o}=t;vt(t,"volume",{get:()=>e.volume||0,set:t=>{e.volume=ct(t,0,1),n.show=`${r.get("Volume")}: ${Number.parseInt(String(100*e.volume),10)}`,0!==e.volume&&o.set("volume",e.volume)}}),vt(t,"muted",{get:()=>e.muted,set:r=>{e.muted=r,t.emit("muted",r)}})},function(t){const{$video:e}=t.template;vt(t,"currentTime",{get:()=>e.currentTime||0,set:r=>{const n=Number.parseFloat(r);Number.isNaN(n)||(!function(t){be.set(t,we(t)+1)}(t),e.currentTime=ct(n,0,t.duration))}})},function(t){vt(t,"duration",{get:()=>{const{duration:e}=t.template.$video;return e===1/0?0:e||0}})},function(t){const e=e=>Vr(t,e,0);vt(t,"switchQuality",{value:e=>Vr(t,e,t.currentTime)}),vt(t,"switchUrl",{value:e}),vt(t,"switch",{set:e})},function(t){const{template:{$video:e},i18n:r,notice:n}=t,o=t;vt(t,"playbackRate",{get:()=>e.playbackRate,set(t){if(t){if(t===e.playbackRate)return;e.playbackRate=t,n.show=`${r.get("Rate")}: ${1===t?r.get("Normal"):`${t}x`}`}else o.playbackRate=1}})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t;vt(t,"aspectRatio",{get:()=>o.dataset.aspectRatio||"default",set(i){if(!M(t)){if(i||(i="default"),"default"===i)n.style.width="",n.style.height="",n.style.margin="",delete o.dataset.aspectRatio;else{const e=i.split(":").map(Number),r=cr({width:o.clientWidth,height:o.clientHeight},e[0]/e[1]);if(M(t))return;"width"===(null==r?void 0:r.axis)?(n.style.width=`${r.width}px`,n.style.height="100%",n.style.margin="0 auto"):r&&(n.style.width="100%",n.style.height=`${r.height}px`,n.style.margin="auto 0"),o.dataset.aspectRatio=i}r.show=`${e.get("Aspect Ratio")}: ${"default"===i?e.get("Default"):i}`,M(t)||t.emit("aspectRatio",i)}}})},function(t){const{notice:e,template:{$video:r}}=t,n=document.createElement("canvas");function o(o){const i=de(t);return new Promise((a,s)=>{const l=r=>{try{!M(t)&&i()&&(e.show=r)}catch(n){return void s(n)}s(r)};try{!function(t,e){t.width=e.videoWidth,t.height=e.videoHeight;const r=t.getContext("2d");if(!r)throw new TypeError("Canvas 2D context is unavailable");r.drawImage(e,0,0)}(n,r),o?function(t,e,r){t.toBlob(t=>{try{if(!t)throw new Error("Unable to encode screenshot blob");e(URL.createObjectURL(t))}catch(n){r(n)}})}(n,a,l):a(n.toDataURL("image/png"))}catch(c){l(c)}})}vt(t,"getDataURL",{value:()=>o(!1)}),vt(t,"getBlobUrl",{value:()=>o(!0)}),vt(t,"screenshot",{value:e=>c(null,null,function*(){const n=de(t),o=yield t.getDataURL();if(!M(t)&&n()){const i=e||`artplayer_${ut(r.currentTime)}`;!M(t)&&n()&<(o,`${i}.png`),!M(t)&&n()&&t.emit("screenshot",o)}return o})})},function(t){const{i18n:e,notice:r,template:{$video:n,$player:o}}=t,i=()=>{if(M(t))return;const i=function(t){const e=vr.raw,r=t.ownerDocument;if(e&&Reflect.get(r,e.fullscreenEnabled))return{document:r,target:t,get element(){return Reflect.get(r,e.fullscreenElement)},elementProperty:e.fullscreenElement,changeEvent:e.fullscreenchange,errorEvent:e.fullscreenerror,request:()=>gr(t,e.requestFullscreen,void 0),exit:()=>gr(r,e.exitFullscreen)}}(o);i?vt(t,"fullscreen",kr(t,i)):n.webkitSupportsFullscreen&&"function"===typeof n.webkitEnterFullscreen&&"function"===typeof n.webkitExitFullscreen?vt(t,"fullscreen",Tr(t)):vt(t,"fullscreen",{get:()=>!1,set(){M(t)||(r.show=e.get("Fullscreen Not Supported"))}}),vt(t,"fullscreen",bt(t,"fullscreen"))};t.once("video:loadedmetadata",i),P(t).add(()=>{t.off("video:loadedmetadata",i)})},function(t){const e=function(t){const{$player:e}=t.template;let r,n=0;function o(t,r){return null===t.style?e.removeAttribute("style"):e.setAttribute("style",t.style),!!r()&&(e.classList.remove("art-fullscreen-web"),!!r()&&(Pr(t.placement),r()))}return P(t).add(()=>{var t;n+=1;const i=r;if(r=void 0,i)try{o(i,()=>!0)}catch(a){try{e.parentNode!==i.placement.parent&&(null==(t=e.parentNode)||t.removeChild(e))}catch(s){throw new A([a,s])}throw a}}),i=>{if(M(t))return;const a=++n,s=()=>a===n&&!M(t),l=function(t){var e;const r=null==(e=t.ownerDocument)?void 0:e.activeElement,n=r&&t.contains(r);return()=>{n&&r.isConnected&&t.contains(r)&&r.ownerDocument.activeElement===r.ownerDocument.body&&r.focus({preventScroll:!0})}}(e);if(i){r||(r={placement:Lr(e),style:e.getAttribute("style")});const n=r;try{if(t.constructor.FULLSCREEN_WEB_IN_BODY&&e.parentNode!==document.body&&document.body.appendChild(e),!s())return;if(t.state="fullscreenWeb",!s())return;e.style.width="100%",e.style.height="100%",e.classList.add("art-fullscreen-web")}catch(c){throw s()&&o(n,s)&&(r=void 0,l()),c}if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!0)}else{if(r){if(!o(r,s))return;r=void 0}else e.classList.remove("art-fullscreen-web");if(!s())return;if(l(),!s())return;t.emit("fullscreenWeb",!1)}s()&&t.emit("resize")}}(t);vt(t,"fullscreenWeb",{get:()=>t.template.$player.classList.contains("art-fullscreen-web"),set:e})},function(t){const{i18n:e,notice:r,template:{$video:n}}=t,o=n.ownerDocument;o.pictureInPictureEnabled&&"function"===typeof n.requestPictureInPicture&&"function"===typeof o.exitPictureInPicture?vt(t,"pip",function(t){const{$video:e}=t.template,r=e.ownerDocument,n=P(t).child(),o=()=>r.pictureInPictureElement===e;let i=o(),a=i,s=!1,l=!1,c=0;function d(){if(o())try{r.exitPictureInPicture().catch(()=>{})}catch(t){}}function u(e,r,n){e.then(()=>{!r||!M(t)&&a||d()},e=>{M(t)||c!==n||(t.notice.show=e)}).finally(()=>{c===n&&(s=!1)}).catch(()=>{})}return e.disablePictureInPicture=!1,n.add(()=>{c++,a=!1,d()}),Ct(n,e,"enterpictureinpicture",()=>{if(l)return void d();if(!o()||i)return;const e=c;t.state="pip",!M(t)&&e===c&&o()&&(i=!0,t.emit("pip",!0))}),Ct(n,e,"leavepictureinpicture",()=>{i&&!o()&&(i=!1,t.emit("pip",!1))}),{get:()=>!M(t)&&o()?e:null,set(n){if(M(t))return;const i=++c;if(a=Boolean(n),a?l=!1:s&&(l=!0),s=!1,a){if(t.state="pip",M(t)||c!==i)return;s=!0;try{u(e.requestPictureInPicture(),!0,i)}catch(d){throw c===i&&(s=!1),d}}else o()&&u(r.exitPictureInPicture(),!1,i)}}}(t)):"function"===typeof n.webkitSupportsPresentationMode&&"function"===typeof n.webkitSetPresentationMode?vt(t,"pip",function(t){const{$video:e}=t.template,r=P(t).child();let n=!1,o=!1,i=0,a=0;function s(r=!1){if(M(t)||Dr.has(e))return;const s=Ir(e);if(s&&(o=!1),s===n&&!r)return;const l=i;s&&(t.state="pip"),M(t)||i!==l||Ir(e)!==s||(n=s,a++,t.emit("pip",s))}e.webkitSetPresentationMode("inline"),r.add(()=>{i++,o&&Wr(e),Ir(e)&&e.webkitSetPresentationMode("inline")});for(const l of["webkitpresentationmodechanged","enterpictureinpicture","leavepictureinpicture"])Ct(r,e,l,()=>s());return{get:()=>!M(t)&&Ir(e),set(r){var n;if(M(t))return;const l=++i,c=a;if(r){if(!1===(null==(n=e.webkitSupportsPresentationMode)?void 0:n.call(e,"picture-in-picture")))return void(t.notice.show=t.i18n.get("PIP Not Supported"));if(Nr(e),t.state="pip",M(t)||i!==l)return;o=!0;try{e.webkitSetPresentationMode("picture-in-picture")}catch(d){throw l===i&&(o=!1),d}}else o&&(o=!1,Wr(e)),Ir(e)&&e.webkitSetPresentationMode("inline");M(t)||l!==i||c!==a||Ir(e)!==Boolean(r)||s(!0)}}}(t)):vt(t,"pip",{get:()=>!1,set(){M(t)||(r.show=e.get("PIP Not Supported"))}})},function(t){const{$video:e}=t.template,r=t;vt(t,"loaded",{get:()=>r.loadedTime/e.duration}),vt(t,"loadedTime",{get:()=>e.buffered.length?e.buffered.end(e.buffered.length-1):0})},function(t){vt(t,"played",{get:()=>t.currentTime/t.duration})},function(t){const{$video:e}=t.template;vt(t,"playing",{get:()=>"boolean"===typeof e.playing?e.playing:!!(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>2)})},function(t){const{$container:e,$player:r,$video:n}=t.template;vt(t,"autoSize",{value(){if(M(t))return;const o={width:n.videoWidth,height:n.videoHeight};if(!lr(o))return;const i=Y(e),a=cr(i,o.width/o.height);a&&!M(t)&&("width"===a.axis?(r.style.width=a.width/i.width*100+"%",r.style.height="100%"):(r.style.width="100%",r.style.height=a.height/i.height*100+"%"),t.emit("autoSize",{width:t.width,height:t.height}))}})},function(t){const e=t;vt(t,"rect",{get:()=>Y(t.template.$player)});const r=["bottom","height","left","right","top","width"];for(let n=0;ne.rect[o]})}vt(t,"x",{get:()=>e.left+window.pageXOffset}),vt(t,"y",{get:()=>e.top+window.pageYOffset})},function(t){const{template:{$player:e},i18n:r,notice:n}=t;vt(t,"flip",{get:()=>e.dataset.flip||"normal",set(o){M(t)||(o||(o="normal"),"normal"===o?delete e.dataset.flip:e.dataset.flip=o,n.show=`${r.get("Video Flip")}: ${r.get(dt(o))}`,M(t)||t.emit("flip",o))}})},function(t){vt(t,"mini",Rr(t))},function(t){const{template:{$poster:e}}=t;vt(t,"poster",{get:()=>{try{return e.style.backgroundImage.match(/"(.*)"/)[1]}catch(t){return""}},set(t){et(e,"backgroundImage",`url(${t})`)}})},function(t){const{$container:e,$video:r}=t.template;vt(t,"autoHeight",{value(){if(M(t))return;const n=function(t,e){if(!Number.isFinite(t)||t<=0||!lr(e))return;const r=e.height*(t/e.width);return Number.isFinite(r)&&r>0?r:void 0}(e.clientWidth,{width:r.videoWidth,height:r.videoHeight});void 0===n||M(t)||(e.style.height=`${n}px`,t.emit("autoHeight",n))}})},function(t){const{$player:e}=t.template;vt(t,"cssVar",{value:(t,r)=>r?e.style.setProperty(t,r):getComputedStyle(e).getPropertyValue(t)})},function(t){vt(t,"theme",{get:()=>t.cssVar("--art-theme"),set(e){t.cssVar("--art-theme",e)}})},function(t){vt(t,"type",{get:()=>t.option.type,set(e){t.option.type=e}})},function(t){const e=["mini","pip","fullscreen","fullscreenWeb"];vt(t,"state",{get:()=>e.find(e=>t[e])||"standard",set(r){for(let n=0;n{if(!M(t))switch(e.availability){case"available":i=!0;break;case"not-available":i=!1}}):i=!1,M(t)||vt(t,"airplay",{value(){if(!M(t))if(i){const e=o.webkitShowPlaybackTargetPicker;if(M(t))return;Reflect.apply(e,o,[]),M(t)||t.emit("airplay")}else{const n=e.get("AirPlay Not Available");M(t)||(r.show=n)}}}))},function(t){vt(t,"quality",{set(e){const{controls:r,notice:n,i18n:o}=t,i=e.find(t=>t.default)||e[0];r.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(null==i?void 0:i.html)||"",selector:e,onSelect(e,r,i){return c(this,null,function*(){const r=function(t){return t&&Ae.get(t)||(()=>!0)}(i);if(yield t.switchQuality(e.url),!M(t)&&r()){const i=`${o.get("Switch Video")}: ${e.html}`;!M(t)&&r()&&(n.show=i)}return e.html})}})}})},function(t){const{option:e,template:{$progress:r,$video:n}}=t;let o,i,a,l=P(t).child(),c=!1;function d(){const e=l;l=P(t).child(),o=void 0,c=!1,a=void 0,e.dispose()}function u(){const i=a,c=l;if(!i||!o)return;const d=()=>{var e;return!M(t)&&!c.closed&&l===c&&a===i&&i.sourceActive()&&(null==(e=t.controls)?void 0:e.thumbnails)===i.element};if(!d())return;const u=r.clientWidth*i.percentage;if(!(u>0&&ud-f/2?d-f+"px":u-f/2+"px"}}(e.thumbnails,{imageWidth:o.naturalWidth,videoWidth:n.videoWidth,videoHeight:n.videoHeight,progressWidth:r.clientWidth,position:u}));for(const[t,e]of Object.entries(p)){if(!d())return;et(i.element,t,e)}}We(t)("setBar",(r,n,s)=>{var p;const f=null==(p=t.controls)?void 0:p.thumbnails,{url:h,scale:m}=e.thumbnails;if(!M(t)&&f&&h&&("hover"===r||"played"===r&&s&&k)){if(i!==f){const t=D(f);if(t.closed)return;i=f,t.add(()=>{i===f&&(i=void 0,d())})}if(a={percentage:n,element:f,sourceActive:de(t)},o)u();else if(!c){const t=l;c=!0,function(t,e,r){return nt(t,e,r)}(h,m,t).then(e=>{l!==t||t.closed||(c=!1,o=e,u())}).catch(e=>{l!==t||t.closed||(c=!1,console.warn("ArtPlayer thumbnail load failed:",e))})}}}),vt(t,"thumbnails",{get:()=>t.option.thumbnails,set:e=>{M(t)||!e.url||t.option.isLive||M(t)||(t.option.thumbnails=e,d())}})},function(t){!function(t){const{proxy:e,template:{$video:r}}=t;for(let n=0;n{M(t)||t.emit(`video:${e.type}`,e)})}(t);const e=pr(t);!function(t,e){dr(t,"video:canplay",()=>{e.reset(),ur(t,[["loading",!1]])}),dr(t,"video:canplay",()=>{ur(t,[["loading",!1],["controls",!0],["mask",!0]]),M(t)||(t.isReady=!0,t.emit("ready"))},!0)}(t,e),function(t){const{option:e}=t;dr(t,"video:ended",()=>{if(e.loop){const e=de(t);if(t.seek=0,M(t)||!e())return;at(t.play()),e()&&ur(t,[["controls",!1],["mask",!1]],e)}else ur(t,[["controls",!0],["mask",!0]])})}(t),dr(t,"video:error",e.schedule),function(t,e){const{template:{$poster:r}}=t;dr(t,"video:loadedmetadata",()=>{t.emit("resize"),k&&ur(t,[["loading",!1],["controls",!0],["mask",!0]])}),dr(t,"video:loadstart",()=>{e.loadStart(),ur(t,[["loading",!0],["mask",!1],["controls",!0]])}),dr(t,"video:pause",()=>{ur(t,[["controls",!0],["mask",!0]])}),dr(t,"video:play",()=>{ur(t,[["mask",!1]]),M(t)||et(r,"display","none")}),dr(t,"video:playing",()=>ur(t,[["mask",!1]])),dr(t,"video:progress",()=>{t.playing&&ur(t,[["loading",!1]])}),dr(t,"video:seeked",()=>ur(t,[["loading",!1],["mask",!0]])),dr(t,"video:seeking",()=>ur(t,[["loading",!0],["mask",!1]])),dr(t,"video:timeupdate",()=>ur(t,[["mask",!1]])),dr(t,"video:waiting",()=>ur(t,[["loading",!0],["mask",!1]]))}(t,e)},function(t){if(M(t))return;const{option:e,storage:r,template:{$video:n,$poster:o}}=t;for(const s in e.moreVideoAttr){if(M(t))return;const r=e.moreVideoAttr[s];if(M(t))return;t.attr(s,r)}if(M(t))return;if(e.muted){const r=e.muted;if(M(t))return;t.muted=r}if(M(t))return;if(e.volume){const r=ct(e.volume,0,1);if(M(t))return;n.volume=r}if(M(t))return;const i=r.get("volume");if(M(t))return;if("number"===typeof i&&(n.volume=ct(i,0,1)),M(t))return;if(e.poster){const r=`url(${e.poster})`;if(M(t))return;et(o,"backgroundImage",r)}if(M(t))return;if(e.autoplay){const r=e.autoplay;if(M(t))return;n.autoplay=r}if(M(t))return;if(e.playsInline){if(M(t))return;if(n.playsInline=!0,M(t))return;n["webkit-playsinline"]=!0}if(M(t))return;if(e.theme){const r=e.cssVar,n=e.theme;if(M(t))return;r["--art-theme"]=n}for(const s in e.cssVar){if(M(t))return;const r=e.cssVar[s];if(M(t))return;t.cssVar(s,r)}if(M(t))return;const a=e.url;M(t)||(t.url=a)}];class Hr{constructor(t){if(!M(t)){Yr(t);for(const e of Br){if(M(t))return;e(t)}}}}const jr=new WeakMap,qr="art-auto-orientation-fullscreen";function Ur(t){if(jr.get(t.orientation)===t)try{t.orientation.unlock()}catch(e){}}const Xr="art-auto-orientation",Gr=["width","height","transform-origin","transform"];function Kr(t){const{$player:e,$video:r}=t.template,n=()=>{const t={width:r.videoWidth,height:r.videoHeight},n=e.ownerDocument.documentElement,o={width:n.clientWidth,height:n.clientHeight};return lr(t)&&lr(o)&&(t.width>t.height&&o.widtho.height)},o=function(t,e){const{$player:r}=t.template,n=P(t);let o,i=()=>{};function a(){i(),i=()=>{};const e=o;if(o=void 0,e&&t.fullscreenWeb)for(const{name:t,value:o,priority:i}of e)r.style.setProperty(t,o,i);const n=r.classList.contains(Xr);r.classList.remove(Xr),n&&(t.isRotate=!1,M(t)||t.emit("resize"))}function s(n){if(!t.fullscreenWeb||!e())return;const i=B();if(M(t)||!t.fullscreenWeb)return;const a=r.ownerDocument.documentElement;null!=o||(o=Gr.map(t=>({name:t,value:r.style.getPropertyValue(t),priority:r.style.getPropertyPriority(t)}))),r.style.width=a.clientHeight-i.top-i.bottom+"px",r.style.height=a.clientWidth-i.left-i.right+"px",r.style.transformOrigin="0 0",r.style.transform=`rotate(90deg) translate(${i.top}px, -${a.clientWidth-i.right}px)`,r.classList.add(Xr),t.isRotate=!0,n&&t.emit("resize")}return n.add(a),r=>{var l;M(t)||(r?o?s(!1):e()&&(i(),i=St(n,()=>{o||s(!0)},Number(null!=(l=t.constructor.AUTO_ORIENTATION_TIME)?l:0))):a())}}(t,n),i=function(t,e){const{$player:r}=t.template;let n;function o(){const t=n;n=void 0,r.classList.remove(qr),t&&(t.cancelled=!0,Ur(t),t.settled&&jr.get(t.orientation)===t&&jr.delete(t.orientation))}return P(t).add(o),i=>{var a,s;if(M(t))return;if(!i)return void o();if(n&&!n.cancelled&&jr.get(n.orientation)===n)return;const l=null==(s=null==(a=r.ownerDocument.defaultView)?void 0:a.screen)?void 0:s.orientation;if("function"!==typeof(null==l?void 0:l.lock)||"function"!==typeof l.unlock||!e())return;const c={orientation:l,cancelled:!1,settled:!1};n=c,jr.set(l,c);const d=()=>!M(t)&&!c.cancelled&&n===c&&jr.get(l)===c,u=e=>{c.settled=!0;const o=d();jr.get(l)===c&&jr.delete(l),n===c&&(n=void 0),o&&(r.classList.remove(qr),t.notice.show=e)};try{const t=l.lock(l.type.startsWith("portrait")?"landscape":"portrait");Promise.resolve(t).then(()=>{c.settled=!0,d()?r.classList.add(qr):(Ur(c),jr.get(l)===c&&jr.delete(l))}).catch(u)}catch(p){u(p)}}}(t,n);return t.on("fullscreenWeb",o),t.on("fullscreen",i),P(t).add(()=>{t.off("fullscreenWeb",o),t.off("fullscreen",i)}),{name:"autoOrientation",get state(){return e.classList.contains("art-auto-orientation")}}}function Zr(t){return t.get("times")||{}}function Jr(t){const{storage:e}=t,r=function(t){const{i18n:e,icons:r,storage:n,constructor:o,template:{$poster:i}}=t,a=t.layers.add({name:"auto-playback",html:'\n
\n
\n
\n '});if(!a||M(t))return()=>{};const s=Rt(".art-auto-playback-last",a),l=Rt(".art-auto-playback-jump",a),c=Rt(".art-auto-playback-close",a);Ot(c,r.close);const d=D(a);let u,p=0;const f=()=>{const r=++p;if(null==u||u.dispose(),d.closed||M(t)||p!==r)return;const f=d.child();u=f;const h=()=>u===f&&!f.closed&&!M(t);f.add(()=>{u===f&&(u=void 0,et(a,"display","none"))});const m=ce(t).add(()=>{f.dispose()});f.add(()=>{m()});const v=Zr(n)[t.option.id||t.option.url];if(!h())return;if(et(a,"display","none"),!h()||!v||!(v>=o.AUTO_PLAYBACK_MIN))return;if(!h())return;if(et(a,"display","flex"),!h())return;const g=`${e.get("Last Seen")} ${ut(v)}`;if(!h())return;if(s.textContent=g,!h())return;const y=e.get("Jump Play");if(!h())return;if(l.textContent=y,!h())return;const b=(e,r)=>{const n=t.events.proxy(e,"click",()=>{h()&&r()});f.add(()=>{t.events.remove(n)})};if(b(c,()=>{et(a,"display","none")}),!h())return;if(b(l,()=>{t.seek=v,h()&&(at(t.play()),h()&&(et(i,"display","none"),h()&&et(a,"display","none")))}),!h())return;let w=()=>{},x=!1;const k=()=>{!x&&h()&&(x=!0,w(),St(f,()=>{h()&&et(a,"display","none")},o.AUTO_PLAYBACK_TIMEOUT))};t.on("video:timeupdate",k),w=f.add(()=>{t.off("video:timeupdate",k)}),x&&w()};return()=>{N(t,a,"ready",f),N(t,a,"restart",f)}}(t);return function(t){const{storage:e,constructor:r}=t;We(t)("video:timeupdate",()=>{if(!t.playing)return;const n=Zr(e),o=Object.keys(n),i=r.AUTO_PLAYBACK_MAX,a=t.option.id||t.option.url,s=t.currentTime;M(t)||(o.length>i&&delete n[o[0]],n[a]=s,M(t)||e.set("times",n))})}(t),r(),{name:"auto-playback",get times(){return Zr(e)},clear:()=>e.del("times"),delete(t){const r=Zr(e);return delete r[t],e.set("times",r),r}}}function Qr(t){let e,r=0;return{start:n=>{const o=++r;if(null==e||e.scope.dispose(),o!==r||M(t)||1!==n.touches.length||!t.playing||t.isLock)return;const i={scope:ce(t).child(),active:!1,previousRate:1};e=i,i.scope.add(()=>{if(e===i&&(e=void 0,i.active))try{t.playbackRate=i.previousRate}finally{(null==e?void 0:e.active)||q(t.template.$player,"art-fast-forward")}}),St(i.scope,()=>{if(e!==i||M(t)||!t.playing||t.isLock)i.scope.dispose();else try{if(i.previousRate=t.playbackRate,e!==i||i.scope.closed)return;i.active=!0;const r=t.constructor.FAST_FORWARD_VALUE;if(e!==i||i.scope.closed||M(t))return;t.playbackRate=r,e!==i||i.scope.closed||M(t)||j(t.template.$player,"art-fast-forward")}catch(r){try{i.scope.dispose()}catch(n){console.warn("Failed to restore fast-forward playback rate:",n)}throw r}},t.constructor.FAST_FORWARD_TIME)},stop:()=>{r++,null==e||e.scope.dispose()}}}function tn(t){const{proxy:e,template:{$player:r,$video:n}}=t,o=Qr(t),i=We(t);return e(n,"touchstart",t=>o.start(t)),e(n,"touchcancel",o.stop),i("document:touchmove",o.stop),i("document:touchend",o.stop),i("document:touchcancel",o.stop),i("video:pause",o.stop),i("destroy",o.stop),i("lock",t=>{t&&o.stop()}),{name:"fastForward",get state(){return U(r,"art-fast-forward")}}}function en(t,e,r,n){let o;const i=()=>!r.closed&&!M(t),a=t.i18n.get("Lock");if(!i())return()=>{};e.setAttribute("aria-label",a),zt(r,e),Ct(r,e,"keydown",t=>{const r=t;i()&&n()&&Mt(r)&&!r.defaultPrevented&&"Escape"===r.key&&(Pt(r),e.click())});const s=n=>{if(i())if(e.setAttribute("aria-pressed",String(n)),n&&!o){const{$player:n,$bottom:a}=t.template,s=a.contains(a.ownerDocument.activeElement)&&n.classList.contains("art-keyboard-focus");o=r.child(),function(t,e){const r=new Map,n=e.hasAttribute("inert"),o=e.getAttribute("aria-hidden"),i=(t,e)=>{"-1"===t.getAttribute("tabindex")&&(null===e?t.removeAttribute("tabindex"):t.setAttribute("tabindex",e))};if(t.add(()=>{for(const[t,e]of r)i(t,e);r.clear(),n||""!==e.getAttribute("inert")||e.removeAttribute("inert"),"true"===e.getAttribute("aria-hidden")&&(null===o?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",o))}),t.closed)return;n||e.setAttribute("inert",""),e.setAttribute("aria-hidden","true");const a=()=>{if(!t.closed){for(const[t,n]of r)e.contains(t)||(i(t,n),r.delete(t));for(const t of e.querySelectorAll("[tabindex],button,input,select,textarea,a[href],[contenteditable]"))r.has(t)||(r.set(t,t.getAttribute("tabindex")),t.setAttribute("tabindex","-1"))}};if(a(),"undefined"!==typeof MutationObserver){const r=new MutationObserver(a);r.observe(e,{childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})}}(o,a),i()&&s&&e.focus({preventScroll:!0})}else if(!n&&o){const t=o;o=void 0,t.dispose()}};return s(n()),s}function rn(t){const{layers:e,icons:r,template:{$player:n}}=t;function o(){return U(n,"art-lock")}function i(){M(t)||(j(n,"art-lock"),M(t)||(t.isLock=!0,M(t)||t.emit("lock",!0)))}function a(){M(t)||(q(n,"art-lock"),M(t)||(t.isLock=!1,M(t)||t.emit("lock",!1)))}return e.add({name:"lock",mounted(e){const n=D(e);if(n.closed||M(t))return;const i=Ot(e,r.lock);if(n.closed||M(t))return;const a=Ot(e,r.unlock);if(n.closed||M(t))return;const s=en(t,e,n,o);n.closed||M(t)||(o()?(et(i,"display","inline-flex"),n.closed||M(t)||et(a,"display","none")):et(i,"display","none"),N(t,e,"lock",e=>{M(t)||(et(i,"display",e?"inline-flex":"none"),n.closed||M(t)||et(a,"display",e?"none":"inline-flex"),n.closed||M(t)||s(e))}))},click(){o()?a():i()}}),{name:"lock",get state(){return o()},set state(t){t?i():a()}}}function nn(t){return We(t)("control",e=>{e?q(t.template.$player,"art-mini-progress-bar"):j(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}class on{constructor(t){this.art=t,this.id=0;const{option:e}=t;!function(t,e){M(t.art)||!e.miniProgressBar||e.isLive||t.add(nn),!M(t.art)&&e.lock&&k&&t.add(rn),M(t.art)||!e.autoPlayback||e.isLive||t.add(Jr),!M(t.art)&&e.autoOrientation&&k&&t.add(Kr),!M(t.art)&&e.fastForward&&k&&!e.isLive&&t.add(tn)}(this,e);for(let r=0;rconsole.warn("Failed to initialize ArtPlayer plugin:",t))}}add(t){it(!M(this.art),"Cannot add a plugin after ArtPlayer is destroyed"),this.id+=1;const e=t.call(this.art,this.art);return e instanceof Promise?e.then(e=>this.next(t,e)):this.next(t,e)}next(t,e){return function(t,e,r){if(M(t.art))return t;const n=r&&r.name||e.name||`plugin${t.id}`;if(M(t.art))return t;let o=n;const i=yt(t,o);if(M(t.art))return t;const a=`Cannot add a plugin that already has the same name: ${n}`;return M(t.art)||(it(!i,a),("object"===typeof n&&null!==n||"function"===typeof n)&&(o=Reflect.ownKeys({[o]:void 0})[0]),M(t.art)||vt(t,o,{value:r})),t}(this,t,e)}}const an=new WeakMap;function sn(t){return!t.closed&&!an.get(t)}function ln(t){an.set(t,(an.get(t)||0)+1);let e=!0;return()=>{if(!e)return;e=!1;const r=(an.get(t)||1)-1;r?an.set(t,r):an.delete(t)}}const cn=new WeakMap,dn=new WeakMap,un=["$parent","$parents","$option","$events","$formatted"];function pn(t){var e,r;const n=new Set;let o=t;for(;o&&!n.has(o);){n.add(o);const t=cn.get(o);if(!t||!t.owner.active||(null==(e=t.owner.scope)?void 0:e.closed)||!t.option.includes(o))return!1;if(!t.parent)return t.owner.root===t.option;if((null==(r=cn.get(t.parent))?void 0:r.owner)!==t.owner)return!1;o=t.parent}return!1}function fn(t){let e=t;for(;e;){const r=Object.getOwnPropertyDescriptor(e,"name");if(r)return"set"in r?"function"===typeof r.set:Boolean(r.writable&&(e===t||Object.isExtensible(t)));e=Object.getPrototypeOf(e)}return Object.isExtensible(t)}function hn(t){const e=cn.get(t);if(!e)throw new Error("Setting item has not been formatted");return e}function mn(t,e){var r;for(let n=0;n{c&&c!==r&&c.dispose()},()=>kn(t,o)])try{e()}catch(d){d instanceof A?l.push(...d.errors):l.push(d)}if(r.closed||M(t)||(o.push(...i.splice(0)),xn.set(r,o),bn.set(e,r),wn.set(e,n)),a(),l.length)throw new A(l)},dispose(){if(s){s=!1;try{r.dispose()}finally{a()}}}}}function Sn(t,e,r,n,o,i){const a=i||En(e);if(!sn(a)||M(t))return;const s=t.proxy(r,n,e=>{if(sn(a)&&!M(t))try{return o(e)}catch(r){console.warn("ArtPlayer setting callback failed:",r)}});!sn(a)||M(t)?t.events.remove(s):(hn(e).events.push(s),i&&i!==bn.get(e)&&i.add(()=>{const r=hn(e).events,n=r.indexOf(s);n>=0&&(r.splice(n,1),t.events.remove(s))}))}function Tn(t,e,r,n){const o=En(e);if(!sn(o)||M(t))return;const i=(...e)=>{if(sn(o)&&!M(t))return n(...e)};t.on(r,i),o.add(()=>{t.off(r,i)})}const Ln='[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]';function Pn(t){var e;if(!t.isConnected||t.matches(":disabled")||t.closest("[inert]")||"true"===t.getAttribute("aria-disabled")||!t.getClientRects().length)return!1;const r=null==(e=t.ownerDocument.defaultView)?void 0:e.getComputedStyle(t).visibility;return"hidden"!==r&&"collapse"!==r}function Mn(t){return Array.from(t.querySelectorAll(Ln)).filter(t=>"-1"!==t.getAttribute("tabindex")&&Pn(t))}function zn(t,e,r=!1){if(!t.show||M(t.art)||!t.active)return;const n=t.cache.get(t.active);if(!n||!sn(gn(n)))return;const o=function(t,e,r=!1){if(e&&e!==t&&t.contains(e)&&e.matches(Ln)&&"-1"!==e.getAttribute("tabindex")&&Pn(e))return e;const n=Mn(t),o=t.querySelector(".art-setting-item.art-current");return n.find(t=>null==e?void 0:e.contains(t))||(r?n[n.length-1]:n.find(t=>null==o?void 0:o.contains(t))||n.find(t=>!t.classList.contains("art-setting-item-back"))||n[0])}(n,e,r);null==o||o.focus({preventScroll:!0}),M(t.art)||null==o||o.scrollIntoView({block:"nearest",inline:"nearest"})}function On(t){const e=t.$parent.ownerDocument,r=e.activeElement,n=t.$parent.contains(r);return o=>{n&&!M(t.art)&&(e.activeElement===e.body||e.activeElement===r&&!(null==r?void 0:r.getClientRects().length))&&zn(t,o)}}function Rn(t){const{art:e}=t,r=P(e).child();if(r.closed)return;const n=()=>t.$parent.ownerDocument;let o=!1;const i=()=>{t.show=!1,r.closed||M(e)||t.render()},a=i=>{r.closed||M(e)||(i?n().activeElement===e.controls.setting&&e.template.$player.classList.contains("art-keyboard-focus")&&zn(t,void 0,o):t.$parent.contains(n().activeElement)&&function(t){const{art:e,$parent:r}=t,n=e.template.$player,o=r.ownerDocument,i=e.controls.setting;!M(e)&&r.contains(o.activeElement)&&(i&&n.contains(i)&&Pn(i)&&i.focus({preventScroll:!0}),(o.activeElement===o.body||r.contains(o.activeElement))&&It(e))}(t))};e.on("setting",a),r.add(()=>{e.off("setting",a)}),Ct(r,e.template.$player,"keydown",r=>{var n,a;const s=r;if(!Mt(s)||s.defaultPrevented||M(e))return;const l=s.target;if(l===e.controls.setting){if("ArrowDown"===s.key||"ArrowUp"===s.key)if(Pt(s),t.show)zn(t,void 0,"ArrowUp"===s.key);else{o="ArrowUp"===s.key;try{t.show=!0}finally{o=!1}}else"Escape"===s.key&&t.show&&(Pt(s),i());return}if(!t.show||!t.$parent.contains(l))return;if("Escape"===s.key)return Pt(s),void i();if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(s.key))return;const c=l.closest(".art-setting-item");if(!c||l!==c&&!l.matches('button,a[href],[role="button"]'))return;const d=t.active&&t.cache.get(t.active);if(!d)return;const u=null==(n=t.active)?void 0:n.find(t=>t.$item===c);if(!sn(gn(d))||u&&!sn(En(u)))return void Pt(s);const p=Mn(d),f=p.indexOf(l);if(f<0)return;let h;switch(s.key){case"ArrowDown":h=Math.min(f+1,p.length-1);break;case"ArrowUp":h=Math.max(f-1,0);break;case"Home":h=0;break;case"End":h=p.length-1;break;case"ArrowLeft":{const t=d.querySelector(".art-setting-item-back");return Pt(s),void(null==t||t.click())}case"ArrowRight":return Pt(s),void((null==(a=null==u?void 0:u.selector)?void 0:a.length)&&l.click());default:return}Pt(s),void 0!==h&&zn(t,p[h])});let s=!1;Ct(r,t.$parent,"focusout",o=>{const a=o.relatedTarget;a&&(t.$parent.contains(a)||a===e.controls.setting)||s||(s=!0,St(r,()=>{s=!1,r.closed||M(e)||!t.show||t.$parent.contains(n().activeElement)||n().activeElement===e.controls.setting||i()},0))})}function Dn(t){var e,r;const{art:n,active:o}=t,{controls:i,constructor:{SETTING_WIDTH:a,SETTING_ITEM_HEIGHT:s},template:{$player:l,$setting:c,$bottom:d}}=n;if(!i.setting||!t.show||!o)return;const u=l.getBoundingClientRect(),p=i.setting.getBoundingClientRect(),f=u.width/l.offsetWidth||1,h=(p.left-u.left+p.width/2)/f-l.clientLeft,m=function(t){const{containerWidth:e,containerHeight:r,requestedWidth:n,rows:o,rowHeight:i,controlCenter:a,bottom:s,padding:l}=t,c=Math.min(Math.max(0,l),Math.max(0,e/2)),d=Math.min(Math.max(0,n),Math.max(0,e-2*c));return{width:d,height:Math.min(Math.max(0,o*i),Math.max(0,r-s-c)),left:Math.max(c,Math.min(a-d/2,e-c-d))}}({containerWidth:l.clientWidth,containerHeight:l.clientHeight,requestedWidth:(null==(r=null==(e=o[0])?void 0:e.$parent)?void 0:r.width)||a,rows:o.length+(o===t.option?0:1),rowHeight:s,controlCenter:h,bottom:Number.parseFloat(getComputedStyle(c).bottom)||0,padding:Number.parseFloat(getComputedStyle(d).paddingLeft)||0});c.style.height=`${m.height}px`,c.style.width=`${m.width}px`,n.isRotate||k||(h+m.width/2>l.clientWidth?(c.style.left="",c.style.right=""):(c.style.left=`${m.left}px`,c.style.right="auto"))}const In=new WeakMap;function Nn(t){In.delete(t)}const _n=new WeakMap;function Wn(t,e){e?_n.set(t,e):_n.delete(t)}function Fn(t){var e;const r=new Map(Reflect.ownKeys(t).map(e=>[e,Object.getOwnPropertyDescriptor(t,e)])),n=[],o=_n.get(t),i=null==o?void 0:o();for(const a of["html","icon","tooltip"]){const t=null==(e=r.get(a))?void 0:e.value;t instanceof Node&&n.push({node:t,parent:t.parentNode,next:t.nextSibling})}return()=>{var e,a;for(const n of Reflect.ownKeys(t))!r.has(n)&&(null==(e=Object.getOwnPropertyDescriptor(t,n))?void 0:e.configurable)&&Reflect.deleteProperty(t,n);for(const[n,o]of r)Object.defineProperty(t,n,o);null==i||i(),Wn(t,o);for(const{node:t,parent:r,next:o}of n)r?r.insertBefore(t,(null==o?void 0:o.parentNode)===r?o:null):null==(a=t.parentNode)||a.removeChild(t)}}function Vn(t){var e,r;const n=null==(e=t.$item)?void 0:e.querySelector(".art-setting-range");n&&n.setAttribute("aria-label",(null==(r=t.$html)?void 0:r.textContent)||"")}const Yn=new WeakMap;function Bn(t,e,r,n,o,i,a,s){return c(this,null,function*(){try{const l=En(e),c=En(i),d=(Yn.get(i)||0)+1;Yn.set(i,d);const u=()=>sn(l)&&sn(c)&&!M(t.art)&&Yn.get(i)===d;if(null==s||s(),!u())return;const p=yield o.call(t.art,e,r,n);u()&&Reflect.set(i,a,p)}catch(l){console.warn("ArtPlayer setting callback failed:",l)}})}function Hn(t){const e=[];return function t(r){const n=Array.from(r.childNodes);e.push({node:r,children:n,attributes:1===r.nodeType?Array.from(r.attributes,t=>[t.name,t.value]):void 0,value:r.nodeValue}),n.forEach(t)}(t),()=>{for(const{node:t,children:r,attributes:n,value:o}of e){for(;t.firstChild;)t.removeChild(t.firstChild);for(const e of r)t.appendChild(e);if(n){const e=t;for(const t of Array.from(e.attributes))e.removeAttribute(t.name);for(const[t,r]of n)e.setAttribute(t,r)}else t.nodeValue=o}}}const jn=new WeakMap;function qn(t){const e=[];for(const n of t)try{n()}catch(r){r instanceof A?e.push(...r.errors):e.push(r)}if(e.length)throw new A(e)}function Un(t){var e;null==(e=jn.get(t))||e()}function Xn(t,e){const r=t.find(e.name);if(M(t.art))return r||e;if(!r)return t.add(e);const n=On(t);Nn(r),Un(r);const o=Fn(r),i=r.$item,a=null==i?void 0:i.parentNode,s=null==i?void 0:i.nextSibling,l=i?Hn(i):void 0,c=t.active,d=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),u=function(t,e){const r=new Set,n=new Set,o=e=>{if(!r.has(e)&&(r.add(e),e.selector)){const r=t.cache.get(e.selector);r&&n.add(r),e.selector.forEach(o)}};o(e);const i=[],a=[];try{for(const e of r){const r=Cn(t.art,e);r&&i.push(r)}for(const t of n)a.push(ln(gn(t)))}catch(l){try{qn([...i.reverse().map(t=>t.resume),...a])}catch(c){console.warn("ArtPlayer setting restore failed:",c)}throw l}let s=!0;return{items:r,resume(){s&&(s=!1,qn([...i.reverse().map(t=>t.resume),...a]))},dispose(){s&&(s=!1,qn([...i.reverse().map(t=>t.dispose),...Array.from(n).reverse().map(t=>()=>yn(t)),...a]))}}}(t,r);let p=!0,f=!1;const h=()=>{if(!p)return;p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);if(M(t.art))return void u.dispose();const e=r.$item;try{qn([u.resume,()=>{e&&e!==i&&e.remove()},o,()=>null==l?void 0:l(),()=>{a&&i&&a.insertBefore(i,(null==s?void 0:s.parentNode)===a?s:null)},()=>t.format(),()=>{if(f){t.active=c,c&&t.cache.has(c)&&K(t.cache.get(c),"art-current");for(const[e,r,n]of d)t.$parent.style.setProperty(e,r,n)}}]),n(i)}catch(m){console.warn("ArtPlayer setting restore failed:",m)}},m=()=>p&&!M(t.art)&&jn.get(r)===h;for(const y of u.items)jn.set(y,h);const v=P(t.art).add(()=>{p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);u.dispose()});try{if(function(t,e,r){for(const n of Reflect.ownKeys(e)){if(!r())return;const o=Object.getOwnPropertyDescriptor(e,n);if(!(null==o?void 0:o.enumerable)||!r())continue;const i=Reflect.get(e,n);if(!r())return;if(!Reflect.set(t,n,i))throw new TypeError(`Cannot assign setting item property [${String(n)}]`)}}(r,e,m),!m())return r;if(t.format(),!m())return r;if(t.createItem(r,!0),!m())return r;if(f=!0,t.render(),!m())return r;p=!1;for(const t of u.items)jn.get(t)===h&&jn.delete(t);return u.dispose(),n(r.$item),r}catch(g){throw m()&&h(),g}finally{v()}}const Gn=new WeakMap;function Kn(t,e,r){vt(t,`$${e}`,{configurable:!0,get:()=>r}),vt(t,e,{configurable:!0,get:()=>r.innerHTML,set(n){r.innerHTML="",X(r,n),"html"===e&&Vn(t)}})}function Zn(t,e,r=!1){var n,o;const i=function(t){const e=jn.get(t);return()=>!e||jn.get(t)===e}(e);if(!t.cache.has(e.$option))return;const a=t.cache.get(e.$option),s=e.$item;let l="selector";yt(e,"switch")&&(l="switch"),yt(e,"range")&&(l="range"),yt(e,"onClick")&&(l="button");const{icons:c,constructor:d}=t.art;if(!i())return;const u=function(t,e,r=P(t)){const n=bn.get(e);(!n||sn(n)||n.closed)&&An(t,e);const o=r.child();return bn.set(e,o),wn.set(e,r),xn.set(o,hn(e).events),o.add(()=>{kn(t,xn.get(o))}),o}(t.art,e,gn(a)),p=()=>sn(u)&&!M(t.art)&&i();if(!p())return;const f=document.createElement("div");try{if(Wn(e),j(f,"art-setting-item"),et(f,"height",`${d.SETTING_ITEM_HEIGHT}px`),f.dataset.name=e.name||"",f.dataset.value=String(e.value||""),!p())return;const i=Ot(f,'
'),h=Ot(f,'
'),m=document.createElement("div");switch(j(m,"art-setting-item-left-icon"),l){case"button":case"switch":case"range":{const t=e.icon||c.config;if(!p())return;X(m,t);break}case"selector":if(null==(n=e.selector)?void 0:n.length){const t=e.icon||c.config;if(!p())return;X(m,t)}else X(m,c.check)}if(X(i,m),!p())return;Kn(e,"icon",m);const v=document.createElement("div");j(v,"art-setting-item-left-text");const g=e.html||"";if(!p())return;X(v,g),X(i,v),Kn(e,"html",v);const y=document.createElement("div");j(y,"art-setting-item-right-tooltip");const b=e.tooltip||"";if(!p())return;switch(X(y,b),X(h,y),Kn(e,"tooltip",y),l){case"switch":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=Ot(t,c.switchOn),n=Ot(t,c.switchOff),o=e.switch;if(!p())return;et(o?n:r,"display","none"),X(h,t),vt(e,"$switch",{configurable:!0,get:()=>t});let i=e.switch;if(!p())return;Wn(e,()=>{const t=i;return()=>{i=t}}),vt(e,"switch",{configurable:!0,get:()=>i,set(t){i=t,f.setAttribute("aria-checked",String(Boolean(t))),t?(et(n,"display","none"),et(r,"display",null)):(et(n,"display",null),et(r,"display","none"))}});break}case"range":{const t=document.createElement("div");j(t,"art-setting-item-right-icon");const r=document.createElement("input");r.type="range",X(t,r);for(const[o,i]of["value","min","max","step"].entries()){const t=e.range[o];if(!p())return;Reflect.set(r,i,String(t))}j(r,"art-setting-range"),X(h,t),vt(e,"$range",{configurable:!0,get:()=>r});let n=[...e.range];if(!p())return;Wn(e,()=>{const t=n,e=[...t],o={min:r.min,max:r.max,step:r.step,value:r.value};return()=>{t.splice(0,t.length,...e),n=t,Object.assign(r,o)}}),vt(e,"range",{configurable:!0,get:()=>n,set(t){n=[...t],r.value=String(t[0]),r.min=String(t[1]),r.max=String(t[2]),r.step=String(t[3])}})}break;case"selector":if(null==(o=e.selector)?void 0:o.length){const t=document.createElement("div");j(t,"art-setting-item-right-icon"),X(t,c.arrowRight),X(h,t)}}if(!p())return;if(function(t,e,r,n){const{art:o}=t,i=En(e),a=(t,r,n)=>Sn(o,e,t,r,n,i);switch(n){case"switch":e.onSwitch&&a(r,"click",n=>Bn(t,e,r,n,e.onSwitch,e,"switch"));break;case"range":{const n=e.$range;if(n)for(const[o,i]of[["change","onRange"],["input","onChange"]])e[i]&&a(n,o,o=>Bn(t,e,r,o,e[i],e,"tooltip",()=>{e.range[0]=n.valueAsNumber}));break}case"selector":a(r,"click",n=>{var o,i;if(null==(o=e.selector)?void 0:o.length)t.render(e.selector);else{if(null==(i=e.$parent)?void 0:i.onSelect)return Bn(t,e,r,n,e.$parent.onSelect,e.$parent,"tooltip",()=>t.check(e));t.check(e)}}),e.default&&j(r,"art-current");break;case"button":e.onClick&&a(r,"click",n=>Bn(t,e,r,n,e.onClick,e,"tooltip"))}}(t,e,f,l),!p())return;vt(e,"$item",{configurable:!0,get:()=>f}),function(t,e,r,n,o){var i;"range"!==n?r.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||("switch"===n?(r.setAttribute("role","switch"),r.setAttribute("aria-checked",String(Boolean(e.switch))),r.setAttribute("aria-disabled",String(!e.onSwitch))):"selector"!==n||(null==(i=e.selector)?void 0:i.length)||r.setAttribute("aria-current",String(Boolean(e.default))),zt(o,r,()=>r.click(),()=>sn(o)&&!M(t.art))):Vn(e)}(t,e,f,l,u),r&&(null==s?void 0:s.parentNode)?s.replaceWith(f):X(a,f),e.mounted&&p()&&St(u,()=>{var r;if(!M(t.art))try{const n=null==(r=e.mounted)?void 0:r.call(t.art,f,e);Promise.resolve(n).catch(t=>console.warn("ArtPlayer setting mounted failed:",t))}catch(n){console.warn("ArtPlayer setting mounted failed:",n)}},0)}catch(h){try{u.dispose()}catch(m){console.warn("ArtPlayer setting cleanup failed:",m)}throw f.remove(),h}}function Jn(t,e=t.option){var r,n,o,i,a,s;if(M(t.art))return;const l=On(t),c=t.cache.get(e);if(c&&!sn(gn(c)))return;const d=(Gn.get(t)||0)+1;Gn.set(t,d);const u=()=>Gn.get(t)===d&&!M(t.art),p=t.active,f=["height","width","left","right"].map(e=>[e,t.$parent.style.getPropertyValue(e),t.$parent.style.getPropertyPriority(e)]),h=()=>{t.active=p,p&&t.cache.has(p)&&K(t.cache.get(p),"art-current");for(const[e,r,n]of f)t.$parent.style.setProperty(e,r,n)};if(t.active=e,c)try{K(c,"art-current"),t.resize()}catch(m){throw u()&&t.cache.get(e)===c&&!gn(c).closed&&h(),m}else{const a=document.createElement("div");t.cache.set(e,a);const s=function(t,e,r){const n=P(t.art).child();return vn.set(r,n),n.add(()=>{t.cache.get(e)===r&&t.cache.delete(e),r.remove()}),n}(t,e,a),l=()=>!s.closed&&!M(t.art)&&t.cache.get(e)===a,c=[];try{if(!l())return;j(a,"art-setting-panel"),a.setAttribute("role","group"),a.setAttribute("aria-label",(null==(o=null==(n=null==(r=e[0])?void 0:r.$parent)?void 0:n.$html)?void 0:o.textContent)||t.art.i18n.get("Settings")),X(t.$parent,a),K(a,"art-current"),(null==(i=e[0])?void 0:i.$parent)&&t.createHeader(e[0]);for(let r=0;r{!function(t){const e=dn.get(t);e&&(e.active=!1,e.root=void 0,e.scope=void 0)}(this)}),e.setting&&(this.format(),this.render(),function(t){const{art:e}=t,r=P(e).child(),n=(t,n)=>{if(r.closed||M(e))return;const o=(...t)=>{if(!r.closed&&!M(e))return n(...t)};e.on(t,o),r.add(()=>{e.off(t,o)})};n("blur",()=>{t.show&&(t.show=!1,t.render())}),n("focus",r=>{const n=F(r,e.controls.setting),o=F(r,t.$parent);!t.show||n||o||(t.show=!1,t.render())}),n("resize",()=>t.resize());const o=()=>{r.closed||M(e)||t.resize()},i=e.proxy(t.$parent,"transitionend",e=>{e.target===t.$parent&&"bottom"===e.propertyName&&o()});r.add(()=>{e.events.remove(i)});const{$player:a,$controls:s}=e.template;if(!r.closed&&"undefined"!==typeof ResizeObserver){const t=new ResizeObserver(o);t.observe(a),t.observe(s),r.add(()=>{t.disconnect()})}if(!r.closed&&"undefined"!==typeof MutationObserver){const t=new MutationObserver(o);"undefined"===typeof ResizeObserver&&t.observe(s,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),t.observe(a,{attributes:!0,attributeFilter:["class","style"]}),r.add(()=>{t.disconnect()})}}(this)),Rn(this)}get builtin(){const t=[],{option:e}=this.art;return e.playbackRate&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:o}}=t;function i(t){return 1===t?e.get("Normal"):t.toFixed(1)}function a(){const e=t.setting.find(`playback-rate-${t.playbackRate}`);t.setting.check(e)}return{width:n,name:"playback-rate",html:e.get("Play Speed"),tooltip:i(t.playbackRate),icon:r.playbackRate,selector:o.map(e=>({value:e,name:`playback-rate-${e}`,default:e===t.playbackRate,html:i(e)})),onSelect:e=>(t.playbackRate=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"video:ratechange",()=>a())}}}(this.art)),e.aspectRatio&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,ASPECT_RATIO:o}}=t;function i(t){return"default"===t?e.get("Default"):t}function a(){const e=t.setting.find(`aspect-ratio-${t.aspectRatio}`);t.setting.check(e)}return{width:n,name:"aspect-ratio",html:e.get("Aspect Ratio"),icon:r.aspectRatio,tooltip:i(t.aspectRatio),selector:o.map(e=>({value:e,name:`aspect-ratio-${e}`,default:e===t.aspectRatio,html:i(e)})),onSelect:e=>(t.aspectRatio=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"aspectRatio",()=>a())}}}(this.art)),e.flip&&t.push(function(t){const{i18n:e,icons:r,constructor:{SETTING_ITEM_WIDTH:n,FLIP:o}}=t;function i(t){return e.get(dt(t))}function a(){const e=t.setting.find(`flip-${t.flip}`);t.setting.check(e)}return{width:n,name:"flip",html:e.get("Video Flip"),tooltip:i(t.flip),icon:r.flip,selector:o.map(e=>({value:e,name:`flip-${e}`,default:e===t.flip,html:i(e)})),onSelect:e=>(t.flip=e.value,e.html),mounted:(e,r)=>{a(),Tn(t,r,"flip",()=>a())}}}(this.art)),e.subtitleOffset&&t.push(function(t){const{i18n:e,icons:r,constructor:n}=t;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:e.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:e=>(t.subtitleOffset=e.range[0],`${e.range[0]}s`),mounted:(e,r)=>{Tn(t,r,"subtitleOffset",t=>{r.$range.value=String(t),r.tooltip=`${t}s`})}}}(this.art)),t}traverse(t,e=this.option){mn(e,t)}check(t){!function(t,e){(null==e?void 0:e.$parent)&&(e.$parent.tooltip=e.html,t.traverse(t=>{t.default=t===e,t.$item&&t.$item.setAttribute("aria-current",String(t.default)),t.default&&t.$item&&K(t.$item,"art-current")},e.$option),t.render(e.$parents))}(this,t)}format(t=this.option,e,r,n=[]){this.option=function(t,e,r,n,o=[]){const i=dn.get(t)||{active:!0},a=[],s=new Set,l=new Set(o),c=(t,e,r)=>{var n;for(let o=0;ohn(t).parent},$parents:{get:()=>hn(t).parents},$option:{get:()=>hn(t).option},$events:{get:()=>hn(t).events},$formatted:{get:()=>!0}}),cn.set(t,{parent:r,parents:n,option:o,events:(null==a?void 0:a.events)||[],owner:i}),u.generated&&(t.name=e)}for(const u of a)u.generated||o.push(u.name);return t.id=d,e}(this,t,e,r,n)}find(t=""){return function(t,e=""){let r=null;return mn(t,t=>{t.name===e&&(r=t)}),r}(this.option,t)}resize(){Dn(this)}inactivate(t){!function(t,e){const r=[],n=new Set,o=e=>{if(!n.has(e)){n.add(e);for(const t of e.selector||[])o(t);if(e.selector){const n=t.cache.get(e.selector);t.cache.delete(e.selector);try{n&&yn(n)}catch(i){r.push(i)}}try{An(t.art,e)}catch(i){i instanceof A?r.push(...i.errors):r.push(i)}}};if(o(e),r.length)throw new A(r)}(this,t)}remove(t){const e=On(this),r=this.find(t);it(r,`Can't find [${t}] in the [setting]`),this.traverse(t=>{Nn(t),Un(t)},[r]);const n=r.$option.indexOf(r);r.$option.splice(n,1);const o=r.$item,i=[];for(const s of[()=>this.inactivate(r),()=>null==o?void 0:o.remove(),()=>this.render()])try{s()}catch(a){a instanceof A?i.push(...a.errors):i.push(a)}if(i.length)throw new A(i);e()}update(t){return Xn(this,t)}add(t,e=this.option){var r;if(M(this.art))return t;let n=!1;this.traverse(e=>{n||(n=e===t)});const o=e.length,i=n?void 0:function(t){const e={};In.set(t,e);const r=()=>In.get(t)===e;return{current:r,finish(){r()&&In.delete(t)}}}(t);let a=!1;try{e.push(t),this.format(),a=!0,this.createItem(t),this.render()}catch(s){if(M(this.art)||i&&!i.current())throw s;if(e[o]===t&&e.splice(o,1),!n&&a){try{this.inactivate(t)}catch(l){console.warn("ArtPlayer setting cleanup failed:",l)}null==(r=t.$item)||r.remove()}throw s}finally{null==i||i.finish()}return t}createHeader(t){!function(t,e){var r;if(!t.cache.has(e.$option))return;const n=t.cache.get(e.$option),{icons:{arrowLeft:o},constructor:{SETTING_ITEM_HEIGHT:i}}=t.art,a=document.createElement("div");et(a,"height",`${i}px`),j(a,"art-setting-item"),j(a,"art-setting-item-back");const s=Ot(a,'
'),l=document.createElement("div");j(l,"art-setting-item-left-icon"),X(l,o),X(s,l),X(s,e.$parent.html),Sn(t.art,e.$parent,a,"click",()=>t.render(e.$parents),gn(n));const c=gn(n);a.querySelector("button,input,select,textarea,a[href],[tabindex],[contenteditable]")||zt(c,a,()=>a.click(),()=>sn(c)&&!M(t.art)),a.setAttribute("aria-label",`${t.art.i18n.get("Back")}: ${(null==(r=a.textContent)?void 0:r.trim())||""}`),X(n,a)}(this,t)}createItem(t,e=!1){Zn(this,t,e)}render(t=this.option){Jn(this,t)}}class eo{constructor(){this.name="artplayer_settings",this.settings={}}get(t){try{const e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:e}catch(e){return t?this.settings[t]:this.settings}}set(t,e){try{const r=Object.assign({},this.get(),{[t]:e});window.localStorage.setItem(this.name,JSON.stringify(r))}catch(r){this.settings[t]=e}}del(t){try{const e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}catch(e){delete this.settings[t]}}clear(){try{window.localStorage.removeItem(this.name)}catch(t){this.settings={}}}}const ro='.art-video-player{--art-theme: #f00;--art-font-color: #fff;--art-background-color: #000;--art-text-shadow-color: rgba(0, 0, 0, .5);--art-transition-duration: .2s;--art-padding: 10px;--art-border-radius: 3px;--art-progress-height: 6px;--art-progress-color: rgba(255, 255, 255, .25);--art-progress-top-gap: 10px;--art-hover-color: rgba(255, 255, 255, .25);--art-loaded-color: rgba(255, 255, 255, .25);--art-state-size: 80px;--art-state-opacity: .8;--art-bottom-height: 100px;--art-bottom-offset: 20px;--art-bottom-gap: 5px;--art-highlight-width: 8px;--art-highlight-color: rgba(255, 255, 255, .5);--art-control-height: 46px;--art-control-opacity: .75;--art-control-icon-size: 36px;--art-control-icon-scale: 1.1;--art-volume-height: 120px;--art-volume-handle-size: 14px;--art-lock-size: 36px;--art-indicator-scale: 0;--art-indicator-size: 16px;--art-fullscreen-web-index: 9999;--art-settings-icon-size: 24px;--art-settings-max-height: 300px;--art-selector-max-height: 300px;--art-contextmenus-min-width: 250px;--art-subtitle-font-size: 20px;--art-subtitle-gap: 5px;--art-subtitle-bottom: 15px;--art-subtitle-border: #000;--art-widget-background: rgba(0, 0, 0, .85);--art-tip-background: rgba(0, 0, 0, .7);--art-scrollbar-size: 4px;--art-scrollbar-background: rgba(255, 255, 255, .25);--art-scrollbar-background-hover: rgba(255, 255, 255, .5);--art-mini-progress-height: 2px}.art-bg-cover{background-position:center center;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player{position:relative;margin:0 auto;width:100%;height:100%;outline:0;zoom:1;padding:0;text-align:left;direction:ltr;font-size:14px;line-height:1.3;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *,.art-video-player *:before,.art-video-player *:after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{line-height:1;display:flex;justify-content:center;align-items:center}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:#000000bf!important}.art-video{position:absolute;inset:0;z-index:10;width:100%;height:100%}.art-poster{position:absolute;inset:0;z-index:11;width:100%;height:100%;background-position:center center;background-repeat:no-repeat;background-size:cover;pointer-events:none}.art-video-player .art-subtitle{display:none;justify-content:center;align-items:center;flex-direction:column;position:absolute;z-index:20;width:100%;padding:0 5%;text-align:center;pointer-events:none;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-subtitle-bottom))}.art-danmuku{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none;overflow:hidden}.art-video-player .art-layers{position:absolute;inset:0;z-index:40;width:100%;height:100%;display:none;pointer-events:none}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{display:flex;justify-content:center;align-items:center;position:absolute;inset:0;z-index:50;width:100%;height:100%;pointer-events:none}.art-video-player .art-mask .art-state{display:flex;justify-content:center;align-items:center;opacity:0;transform:scale(2);width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration) ease}.art-video-player.art-mask-show .art-state{pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{display:none;justify-content:center;align-items:center;position:absolute;inset:0;z-index:70;width:100%;height:100%;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player.art-loading-show .art-mask{display:none}.art-video-player .art-bottom{position:absolute;inset:0;z-index:60;width:100%;height:100%;display:flex;flex-direction:column;justify-content:flex-end;opacity:0;overflow:hidden;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration) ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(to top,#000,rgba(0,0,0,.4),transparent);background-repeat:repeat-x;background-position:center bottom}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration) ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{position:relative;z-index:0;cursor:pointer;pointer-events:auto;padding-top:var(--art-progress-top-gap);padding-bottom:var(--art-bottom-gap)}.art-bottom .art-progress .art-control-progress{position:relative;display:flex;justify-content:center;align-items:center;height:var(--art-progress-height)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{display:flex;align-items:center;position:relative;height:50%;width:100%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{position:absolute;inset:0;z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;inset:0;z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;inset:0;z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;inset:0;z-index:30;width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{position:absolute;inset:0 auto 0 0;z-index:0;width:100%;height:100%;pointer-events:auto;width:var(--art-highlight-width)!important;transform:translate(calc(var(--art-highlight-width) / -2));background-color:var(--art-highlight-color)}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:flex;justify-content:center;align-items:center;position:absolute;z-index:40;left:0;border-radius:50%;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size) / -2);transition:transform var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:50;top:-25px;left:0;padding:3px 5px;line-height:1;font-size:12px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.art-bottom .art-progress .art-control-thumbnails{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;bottom:calc(var(--art-bottom-gap) + 10px);left:0;border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom .art-progress:hover .art-control-progress .art-control-progress-inner{height:100%}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,.art-progress-hover .art-bottom .art-progress .art-control-thumbnails{transform:scale(1);opacity:1}.art-video-player .art-controls{position:relative;z-index:10;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;flex-shrink:0;height:auto;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-left,.art-video-player .art-controls .art-controls-right{display:flex;flex-wrap:wrap;max-width:100%;min-height:var(--art-control-height)}.art-video-player .art-controls .art-controls-center{display:none;justify-content:center;align-items:center;flex:1;height:100%;padding:0 10px}.art-video-player .art-controls .art-controls-right{justify-content:flex-end;margin-left:auto}.art-video-player .art-controls .art-control{display:flex;justify-content:center;align-items:center;flex-shrink:0;max-width:100%;cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration) ease}.art-video-player .art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale) * .8))}.art-video-player .art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;padding:0 5px;font-size:12px;text-align:center;cursor:default;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner{display:flex;flex-direction:column;align-items:center;gap:10px;height:100%;width:100%;padding:10px 0 12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{flex:1;width:100%;display:flex;cursor:pointer;position:relative;justify-content:center}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{position:relative;display:flex;justify-content:center;width:2px;border-radius:var(--art-border-radius);overflow:hidden;background-color:#ffffff40}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{position:absolute;inset:0;z-index:0;width:100%;height:100%;background-color:var(--art-theme)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{position:absolute;width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size) / -2);flex-shrink:0;transform:scale(1);border-radius:100%;background-color:var(--art-theme);transition:transform var(--art-transition-duration) ease}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel,.art-control-volume:focus-within .art-volume-panel{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player .art-notice{display:none;position:absolute;inset:0 0 auto;z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none}.art-video-player .art-notice .art-notice-inner{display:inline-flex;padding:5px;line-height:1;border-radius:var(--art-border-radius);background-color:var(--art-tip-background)}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{display:none;flex-direction:column;position:absolute;z-index:120;padding:5px 0;border-radius:var(--art-border-radius);font-size:12px;background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width)}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;display:flex;padding:10px 15px;border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{display:none;flex-direction:column;position:absolute;z-index:90;left:auto;overflow-y:auto;overflow-x:hidden;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);right:var(--art-padding);bottom:var(--art-controls-height, var(--art-control-height));transition:all var(--art-transition-duration) ease;background-color:var(--art-widget-background)}.art-video-player .art-settings .art-setting-panel{display:none;flex-direction:column}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{display:flex;justify-content:space-between;align-items:center;gap:5px;padding:0 5px;cursor:pointer;overflow:hidden;transition:background-color var(--art-transition-duration) ease}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{display:flex;justify-content:center;align-items:center;flex-shrink:1;min-width:0;overflow:hidden;gap:5px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;height:var(--art-settings-icon-size);width:var(--art-settings-icon-size)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:0;max-width:55%;gap:5px;font-size:12px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0;min-width:32px;height:24px}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;outline:none;appearance:none;background-color:#fff3}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid rgba(255,255,255,.1)}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{display:none;position:absolute;left:var(--art-padding);top:var(--art-padding);z-index:100;padding:10px;font-size:12px;border-radius:var(--art-border-radius);background-color:var(--art-widget-background)}.art-video-player .art-info .art-info-panel{display:flex;flex-direction:column;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item{display:flex;align-items:center;gap:5px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.art-video-player .art-info .art-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3}.art-fullscreen-web{--art-progress-height: 8px;--art-indicator-size: 20px;--art-control-height: 60px;--art-control-icon-scale: 1.3;position:fixed;inset:0;z-index:var(--art-fullscreen-web-index);width:100%;height:100%}.art-mini-popup{position:fixed;z-index:9999;width:320px;height:180px;max-width:100vw;max-height:100vh;background:#000;border-radius:var(--art-border-radius);cursor:move;user-select:none;overflow:hidden;transition:opacity .2s ease;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{position:absolute;z-index:20;right:10px;top:10px;cursor:pointer;opacity:0;transition:opacity .2s ease}.art-mini-popup .art-mini-state{position:absolute;inset:0;z-index:30;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transition:opacity .2s ease;background-color:#00000040}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;transform:scale(3);pointer-events:auto;transition:transform .2s ease}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:focus-within .art-mini-close,.art-mini-popup:hover .art-mini-state,.art-mini-popup:focus-within .art-mini-state{opacity:1}.art-mini-popup [role=button]:focus-visible{outline:2px solid #fff;outline-offset:-2px}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{display:none;justify-content:center;align-items:center;position:absolute;top:50%;border-radius:50%;transform:translateY(-50%);height:var(--art-lock-size);width:var(--art-lock-size);left:var(--art-padding);background-color:var(--art-tip-background)}.art-video-player .art-layer-auto-playback{display:none;gap:10px;align-items:center;position:absolute;border-radius:var(--art-border-radius);padding:10px;line-height:1;left:var(--art-padding);bottom:calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background)}.art-video-player .art-layer-auto-playback .art-auto-playback-close{display:flex;justify-content:center;align-items:center;cursor:pointer}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-layer-lock{display:flex}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock{opacity:0;pointer-events:none}.art-video-player.art-lock:not(.art-control-show) .art-layer-lock:focus-within{opacity:1;pointer-events:auto}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;padding:0;background-image:none}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-controls-height, var(--art-control-height)) + var(--art-bottom-gap) + var(--art-progress-height) / 4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative;display:flex;justify-content:center}.art-control-selector .art-selector-list{display:flex;flex-direction:column;align-items:center;text-align:center;position:absolute;border-radius:var(--art-border-radius);overflow-y:auto;overflow-x:hidden;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:opacity var(--art-transition-duration) ease,transform var(--art-transition-duration) ease}.art-control-selector .art-selector-list .art-selector-item{display:flex;justify-content:center;align-items:center;width:100%;padding:10px 15px;flex-shrink:0;line-height:1}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover:not(.art-selector-dismissed) .art-selector-list,.art-control-selector.art-selector-open .art-selector-list{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.art-video-player [class*=hint--]{position:relative;display:inline-block;font-style:normal}.art-video-player [class*=hint--]:before,.art-video-player [class*=hint--]:after{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{visibility:visible;opacity:1}.art-video-player [class*=hint--]:hover:before,.art-video-player [class*=hint--]:hover:after{-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.art-video-player [class*=hint--]:before{content:"";position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}.art-video-player [class*=hint--]:after{background:#000;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}.art-video-player [class*=hint--][aria-label]:after{content:attr(aria-label)}.art-video-player [class*=hint--][data-hint]:after{content:attr(data-hint)}.art-video-player [aria-label=""]:before,.art-video-player [aria-label=""]:after,.art-video-player [data-hint=""]:before,.art-video-player [data-hint=""]:after{display:none!important}.art-video-player .hint--top-left:before{border-top-color:#000}.art-video-player .hint--top-right:before{border-top-color:#000}.art-video-player .hint--top:before{border-top-color:#000}.art-video-player .hint--bottom-left:before{border-bottom-color:#000}.art-video-player .hint--bottom-right:before{border-bottom-color:#000}.art-video-player .hint--bottom:before{border-bottom-color:#000}.art-video-player .hint--left:before{border-left-color:#000}.art-video-player .hint--right:before{border-right-color:#000}.art-video-player .hint--top:before{margin-bottom:-11px}.art-video-player .hint--top:before,.art-video-player .hint--top:after{bottom:100%;left:50%}.art-video-player .hint--top:before{left:calc(50% - 6px)}.art-video-player .hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--bottom:before{margin-top:-11px}.art-video-player .hint--bottom:before,.art-video-player .hint--bottom:after{top:100%;left:50%}.art-video-player .hint--bottom:before{left:calc(50% - 6px)}.art-video-player .hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translate(-50%)}.art-video-player .hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--right:before{margin-left:-11px;margin-bottom:-6px}.art-video-player .hint--right:after{margin-bottom:-14px}.art-video-player .hint--right:before,.art-video-player .hint--right:after{left:100%;bottom:50%}.art-video-player .hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--right:hover:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--left:before{margin-right:-11px;margin-bottom:-6px}.art-video-player .hint--left:after{margin-bottom:-14px}.art-video-player .hint--left:before,.art-video-player .hint--left:after{right:100%;bottom:50%}.art-video-player .hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--left:hover:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--top-left:before{margin-bottom:-11px}.art-video-player .hint--top-left:before,.art-video-player .hint--top-left:after{bottom:100%;left:50%}.art-video-player .hint--top-left:before{left:calc(50% - 6px)}.art-video-player .hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--top-left:after{margin-left:12px}.art-video-player .hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--top-right:before{margin-bottom:-11px}.art-video-player .hint--top-right:before,.art-video-player .hint--top-right:after{bottom:100%;left:50%}.art-video-player .hint--top-right:before{left:calc(50% - 6px)}.art-video-player .hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--top-right:after{margin-left:-12px}.art-video-player .hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--top-right:hover:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--bottom-left:before{margin-top:-11px}.art-video-player .hint--bottom-left:before,.art-video-player .hint--bottom-left:after{top:100%;left:50%}.art-video-player .hint--bottom-left:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translate(-100%)}.art-video-player .hint--bottom-left:after{margin-left:12px}.art-video-player .hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--bottom-right:before{margin-top:-11px}.art-video-player .hint--bottom-right:before,.art-video-player .hint--bottom-right:after{top:100%;left:50%}.art-video-player .hint--bottom-right:before{left:calc(50% - 6px)}.art-video-player .hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translate(0)}.art-video-player .hint--bottom-right:after{margin-left:-12px}.art-video-player .hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--bottom-right:hover:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--small:after,.art-video-player .hint--medium:after,.art-video-player .hint--large:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.art-video-player .hint--small:after{width:80px}.art-video-player .hint--medium:after{width:150px}.art-video-player .hint--large:after{width:300px}.art-video-player [class*=hint--]:after{text-shadow:0 -1px 0px black;box-shadow:4px 4px 8px #0000004d}.art-video-player .hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0px #592726}.art-video-player .hint--error.hint--top-left:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top-right:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--top:before{border-top-color:#b34e4d}.art-video-player .hint--error.hint--bottom-left:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom-right:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.art-video-player .hint--error.hint--left:before{border-left-color:#b34e4d}.art-video-player .hint--error.hint--right:before{border-right-color:#b34e4d}.art-video-player .hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0px #6c5328}.art-video-player .hint--warning.hint--top-left:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top-right:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--top:before{border-top-color:#c09854}.art-video-player .hint--warning.hint--bottom-left:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom-right:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--bottom:before{border-bottom-color:#c09854}.art-video-player .hint--warning.hint--left:before{border-left-color:#c09854}.art-video-player .hint--warning.hint--right:before{border-right-color:#c09854}.art-video-player .hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0px #1a3c4d}.art-video-player .hint--info.hint--top-left:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top-right:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--top:before{border-top-color:#3986ac}.art-video-player .hint--info.hint--bottom-left:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom-right:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--bottom:before{border-bottom-color:#3986ac}.art-video-player .hint--info.hint--left:before{border-left-color:#3986ac}.art-video-player .hint--info.hint--right:before{border-right-color:#3986ac}.art-video-player .hint--success:after{background-color:#458746;text-shadow:0 -1px 0px #1a321a}.art-video-player .hint--success.hint--top-left:before{border-top-color:#458746}.art-video-player .hint--success.hint--top-right:before{border-top-color:#458746}.art-video-player .hint--success.hint--top:before{border-top-color:#458746}.art-video-player .hint--success.hint--bottom-left:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom-right:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--bottom:before{border-bottom-color:#458746}.art-video-player .hint--success.hint--left:before{border-left-color:#458746}.art-video-player .hint--success.hint--right:before{border-right-color:#458746}.art-video-player .hint--always:after,.art-video-player .hint--always:before{opacity:1;visibility:visible}.art-video-player .hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translate(-50%) translateY(-8px)}.art-video-player .hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translate(-100%) translateY(-8px)}.art-video-player .hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--top-right:after{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.art-video-player .hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translate(-50%) translateY(8px)}.art-video-player .hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translate(-100%) translateY(8px)}.art-video-player .hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--bottom-right:after{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.art-video-player .hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--left:after{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translate(-8px)}.art-video-player .hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--always.hint--right:after{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translate(8px)}.art-video-player .hint--rounded:after{border-radius:4px}.art-video-player .hint--no-animate:before,.art-video-player .hint--no-animate:after{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.art-video-player .hint--bounce:before,.art-video-player .hint--bounce:after{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.art-video-player .hint--no-shadow:before,.art-video-player .hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.art-video-player .hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap: 10px;--art-control-height: 38px;--art-control-icon-scale: 1;--art-state-size: 60px;--art-settings-max-height: 180px;--art-selector-max-height: 180px;--art-indicator-scale: 1;--art-control-opacity: 1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding) / -1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding) / -1)}.art-video-player [tabindex]:focus-visible,.art-video-player input:focus-visible,.art-video-player button:focus-visible,.art-video-player a:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus :focus{outline:2px solid currentColor;outline-offset:-2px}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom{opacity:1}.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-controls,.art-video-player.art-keyboard-focus:not(.art-lock) .art-bottom .art-progress{transform:translateY(0)}';class no{constructor(t){var e;this.scope=t.child(),this.cancelled=new Promise(t=>{this.scope.add(()=>{t(void 0)})}),this.signal=null==(e=function(t){if("undefined"===typeof AbortController)return;const e=new AbortController;return t.add(()=>{e.abort()}),e}(this.scope))?void 0:e.signal}get active(){return!this.scope.closed}cancel(){this.scope.dispose()}run(t){return c(this,null,function*(){if(this.active)try{return yield Promise.race([t(),this.cancelled])}finally{this.cancel()}})}}const oo=new WeakMap;function io(t){return oo.get(t)}function ao(t){const e=t.ownedURL;t.ownedURL=void 0,e&&URL.revokeObjectURL(e)}const so=Zt;class lo extends so{constructor(t){super(t),this.name="subtitle",this.option=null,this.destroyEvent=()=>null;const e=function(t,e){const r=P(e).child(),n={scope:r,revision:0,render:0,trackRevision:0};return oo.set(t,n),r.add(()=>{ao(n)}),n}(this,t);this.init(t.option.subtitle).catch(()=>{});let r=!1;const n=()=>{if(e.scope.closed||!this.url)return;const n=t.template.$video.webkitDisplayingFullscreen;"boolean"===typeof n&&n!==r&&(r=n,this.createTrack(n?"subtitles":"metadata",this.url))};t.on("video:timeupdate",n),e.scope.add(()=>{t.off("video:timeupdate",n)})}get url(){return this.art.template.$track.src}set url(t){this.switch(t).catch(()=>{})}get textTrack(){var t,e;return null==(e=null==(t=this.art.template.$video)?void 0:t.textTracks)?void 0:e[0]}get activeCues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.activeCues)||[])}get cues(){var t;return Array.from((null==(t=this.textTrack)?void 0:t.cues)||[])}style(t,e){const{$subtitle:r}=this.art.template;return"object"===typeof t?rt(r,t):et(r,t,e)}update(){!function(t){const e=io(t);if(e.scope.closed)return;const r=e.revision,n=++e.render,o=()=>!e.scope.closed&&e.revision===r&&e.render===n,{art:i}=t,{$subtitle:a}=i.template;if(a.innerHTML="",!t.activeCues.length)return;if(i.emit("subtitleBeforeUpdate",t.activeCues),!o())return;const s=t.activeCues.map((t,e)=>t.text.split(/\r?\n/).filter(t=>t.trim()).map(t=>`
\n ${i.option.subtitle.escape?mt(t):t}\n
`).join("")).join("");o()&&(a.innerHTML=s,i.emit("subtitleAfterUpdate",t.activeCues))}(this)}switch(t){return c(this,arguments,function*(t,e={}){const{i18n:r,notice:n,option:o}=this.art,i=l(s(s({},o.subtitle),e),{url:t}),a=io(this),c=a.revision+1,d=yield this.init(i);return!a.scope.closed&&a.revision===c&&e.name&&(n.show=`${r.get("Switch Subtitle")}: ${e.name}`),d})}createTrack(t,e){!function(t,e,r){const n=io(t);if(n.scope.closed)return;const o=++n.trackRevision,{art:i}=t,{template:a}=i,s=a.$track,l=s.parentNode,c=s.nextSibling,d=document.createElement("track"),u=n.scope.child();u.add(()=>{d.onload=null,d.onerror=null});let p=!1;try{if(d.default=!0,d.kind=e,d.src=r,d.label=i.option.subtitle.name||"Artplayer",d.track.mode="hidden",d.onload=()=>{u.closed||a.$track!==d||i.emit("subtitleLoad",t.cues,t.option)},d.onerror=()=>{u.closed||a.$track!==d||(i.notice.show=new Error("Failed to load subtitle track"))},u.closed||n.trackRevision!==o)return void u.dispose();s.remove(),a.$video.appendChild(d),a.$track=d;const l=t.textTrack,c=l?i.proxy(l,"cuechange",()=>{u.closed||a.$track!==d||t.update()}):()=>{};if(u.add(()=>{i.events.remove(c)}),u.closed||n.trackRevision!==o)return u.dispose(),void d.remove();const f=n.track;n.track=u,t.destroyEvent=c,s.onload=null,s.onerror=null,p=!0;try{null==f||f.dispose()}finally{n.ownedURL&&n.ownedURL!==r&&ao(n)}}catch(f){if(p)throw f;if(u.dispose(),d.remove(),n.scope.closed||n.trackRevision!==o)throw f;throw a.$track=s,l&&l.insertBefore(s,(null==c?void 0:c.parentNode)===l?c:null),f}}(this,t,e)}init(t){return c(this,null,function*(){const e=io(this),r=function(t){const e=t.request,r=new no(t.scope);return t.request=r,t.revision+=1,null==e||e.cancel(),r}(e),{notice:n,template:{$subtitle:o}}=this.art;return r.run(()=>c(this,null,function*(){if(!this.textTrack)return null;if(h(t,Gt.subtitle),!t.url)return;let i;this.option=t,this.style(t.style);try{if(!r.active)return;const n=yield fetch(t.url,{signal:r.signal});if(!r.active)return;if(!n.ok)throw new Error(`Failed to load subtitle: ${n.status} ${n.statusText}`);const a=yield n.arrayBuffer();if(!r.active)return;const s=function(t,e){const r=new TextDecoder(e.encoding).decode(t);switch(e.type||st(e.url)){case"srt":return{vtt:e.onVttLoad(xt(r))};case"ass":return{vtt:e.onVttLoad($t(r))};case"vtt":return{vtt:e.onVttLoad(r)};default:return}}(a,t);if(!r.active)return;const l=void 0===s?t.url:i=kt(s.vtt);if(!r.active)return;o.innerHTML="";const c=e.trackRevision+1;if(this.url!==l&&this.createTrack("metadata",l),!r.active||e.trackRevision>c)return;return i&&(e.ownedURL=i,i=void 0),l}catch(a){if(!r.active)return;throw o.innerHTML="",n.show=a,a}finally{i&&(e.scope.closed||this.url!==i?URL.revokeObjectURL(i):e.ownedURL=i)}}))})}}const co=`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${m}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `;class uo{constructor(t){this.art=t;const{option:e,constructor:r}=t;e.container instanceof Element?this.$container=e.container:(this.$container=H(e.container),it(this.$container,`No container element found by ${e.container}`)),it(V(),"The current browser does not support flex layout");const n=this.$container.tagName.toLowerCase();it("div"===n,`Unsupported container element type, only support 'div' but got '${n}'`),it(r.instances.every(t=>t.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),function(t,e,r){const n=T.get(e);if(n&&n!==t)throw new Error("Cannot mount multiple instances on the same dom element");const o=L(t);o.rollback=r,T.set(e,t),o.releaseContainer=()=>{T.get(e)===t&&T.delete(e)}}(t,this.$container,Hn(this.$container)),function(t,e,r){const n=L(t),o=n.mountingTemplate;n.mountingTemplate=e;try{r()}finally{n.mountingTemplate=o}}(t,this,()=>{this.$container.dataset.artId=String(t.id),this.init()})}static get html(){return co}query(t){return H(t,this.$container)}init(){const{option:t}=this.art;var e;if(t.useSSR||(this.$container.innerHTML=uo.html),(e=this).$player=e.query(".art-video-player"),e.$video=e.query(".art-video"),e.$track=e.query("track"),e.$poster=e.query(".art-poster"),e.$subtitle=e.query(".art-subtitle"),e.$danmuku=e.query(".art-danmuku"),e.$bottom=e.query(".art-bottom"),e.$progress=e.query(".art-progress"),e.$controls=e.query(".art-controls"),e.$controlsLeft=e.query(".art-controls-left"),e.$controlsCenter=e.query(".art-controls-center"),e.$controlsRight=e.query(".art-controls-right"),e.$layer=e.query(".art-layers"),e.$loading=e.query(".art-loading"),e.$notice=e.query(".art-notice"),e.$noticeInner=e.query(".art-notice-inner"),e.$mask=e.query(".art-mask"),e.$state=e.query(".art-state"),e.$setting=e.query(".art-settings"),e.$info=e.query(".art-info"),e.$infoPanel=e.query(".art-info-panel"),e.$infoClose=e.query(".art-info-close"),e.$contextmenu=e.query(".art-contextmenus"),t.proxy){const e=t.proxy.call(this.art,this.art);if(M(this.art))return;!function(t){it(t instanceof HTMLVideoElement||t instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'")}(e),Z(e,this.$video),e.className="art-video",this.$video=e}t.backdrop&&j(this.$player,"art-backdrop"),k&&j(this.$player,"art-mobile")}destroy(t){t?this.$container.innerHTML="":j(this.$player,"art-destroy")}}const po=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class fo{on(t,e,r){const n=this.e||(this.e={});let o=po(n,t)?n[t]:void 0;return o||(o=[],Object.defineProperty(n,t,{value:o,enumerable:!0,configurable:!0,writable:!0})),o.push({fn:e,ctx:r}),this}once(t,e,r){const n=this,o=e;let i=!1;function a(...e){i||(i=!0,n.off(t,a),o.apply(r,e))}return a._=e,this.on(t,a,r)}emit(t,...e){const r=this.e||(this.e={}),n=(po(r,t)&&r[t]||[]).slice();for(const o of n)o.fn.apply(o.ctx,e);return this}off(t,e){const r=this.e||(this.e={}),n=po(r,t)?r[t]:void 0,o=[];if(n&&e)for(let i=0,a=n.length;i{e.destroying||e.finalizers.dispose()})}(this);try{if(this.template=new uo(this),P(this).closed)return;if(this.events=new Ve(this),P(this).closed)return;if(this.storage=new eo,P(this).closed)return;if(this.icons=new Ke(this),P(this).closed)return;if(this.i18n=new Xe(this),P(this).closed)return;if(this.notice=new ar(this),P(this).closed)return;if(this.player=new Hr(this),P(this).closed)return;if(this.layers=new er(this),P(this).closed)return;if(this.controls=new Me(this),P(this).closed)return;if(this.contextmenu=new ie(this),P(this).closed)return;if(this.subtitle=new lo(this),P(this).closed)return;if(this.info=new tr(this),P(this).closed)return;if(this.loading=new rr(this),P(this).closed)return;if(this.hotkey=new qe(this),P(this).closed)return;if(this.mask=new nr(this),P(this).closed)return;if(this.setting=new to(this),P(this).closed)return;if(this.plugins=new on(this),P(this).closed)return;if("function"===typeof e&&this.on("ready",()=>e.call(this,this)),vo.DEBUG){const t=t=>console.log(`[ART.${this.id}] -> ${t}`);t(`Version@${vo.version}`);for(let e=0;et(`Event@${e.type}`))}(function(t){const e=L(t);return e.rollback=void 0,!e.scope.closed})(this)&&mo.push(this)}catch(r){try{z(this,mo,!0,vo.REMOVE_SRC_WHEN_DESTROY,!0)}catch(n){console.warn("Failed to clean up ArtPlayer initialization:",n)}throw r}}static get instances(){return mo}static get version(){return m}static get config(){return E}static get utils(){return Et}static get scheme(){return Gt}static get Emitter(){return fo}static get validator(){return h}static get kindOf(){return h.kindOf}static get html(){return uo.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:t=>t},moreVideoAttr:{controls:!1,preload:b?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:null==navigator?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}reset(){this.video.removeAttribute("src"),this.video.load()}destroy(t=!0){z(this,mo,t,vo.REMOVE_SRC_WHEN_DESTROY)}}var go,yo;return vo.STYLE=ro,vo.DEBUG=!1,vo.CONTEXTMENU=!0,vo.NOTICE_TIME=2e3,vo.SETTING_WIDTH=250,vo.SETTING_ITEM_WIDTH=200,vo.SETTING_ITEM_HEIGHT=35,vo.RESIZE_TIME=200,vo.SCROLL_TIME=200,vo.SCROLL_GAP=50,vo.AUTO_PLAYBACK_MAX=10,vo.AUTO_PLAYBACK_MIN=5,vo.AUTO_PLAYBACK_TIMEOUT=3e3,vo.RECONNECT_TIME_MAX=5,vo.RECONNECT_SLEEP_TIME=1e3,vo.CONTROL_HIDE_TIME=3e3,vo.DBCLICK_TIME=300,vo.DBCLICK_FULLSCREEN=!0,vo.MOBILE_DBCLICK_PLAY=!0,vo.MOBILE_CLICK_PLAY=!1,vo.AUTO_ORIENTATION_TIME=200,vo.INFO_LOOP_TIME=1e3,vo.FAST_FORWARD_VALUE=3,vo.FAST_FORWARD_TIME=1e3,vo.TOUCH_MOVE_RATIO=.5,vo.VOLUME_STEP=.1,vo.SEEK_STEP=5,vo.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],vo.ASPECT_RATIO=["default","4:3","16:9"],vo.FLIP=["normal","horizontal","vertical"],vo.FULLSCREEN_WEB_IN_BODY=!0,vo.LOG_VERSION=!0,vo.USE_RAF=!1,vo.REMOVE_SRC_WHEN_DESTROY=!0,go=vo,yo=ro,$&&(window.Artplayer=go,v("artplayer-style",yo),setTimeout(()=>{go.LOG_VERSION&&console.log(`%c ArtPlayer %c ${go.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100)),vo}); diff --git a/packages/artplayer/dist/artplayer.mjs b/packages/artplayer/dist/artplayer.mjs index 243287103..9b3aa10b1 100644 --- a/packages/artplayer/dist/artplayer.mjs +++ b/packages/artplayer/dist/artplayer.mjs @@ -2809,6 +2809,7 @@ function observeControlLayout(art) { scope.add(() => { observer.disconnect(); }); + return; } else if (typeof MutationObserver !== "undefined") { const observer = new MutationObserver(update); observer.observe($controls, { childList: true, subtree: true, attributes: true, characterData: true }); @@ -7733,12 +7734,22 @@ function flip(art) { } }; } +const focusSelector = '[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]'; function available(element) { + if (!element.isConnected || element.matches(":disabled") || element.closest("[inert]") || element.getAttribute("aria-disabled") === "true" || !element.getClientRects().length) + return false; const visibility = element.ownerDocument.defaultView?.getComputedStyle(element).visibility; - return element.isConnected && !element.matches(":disabled") && !element.closest("[inert]") && element.getAttribute("aria-disabled") !== "true" && element.getClientRects().length > 0 && visibility !== "hidden" && visibility !== "collapse"; + return visibility !== "hidden" && visibility !== "collapse"; } function settingFocusTargets(panel) { - return Array.from(panel.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')).filter((element) => element.getAttribute("tabindex") !== "-1" && available(element)); + return Array.from(panel.querySelectorAll(focusSelector)).filter((element) => element.getAttribute("tabindex") !== "-1" && available(element)); +} +function selectSettingTarget(panel, preferred, last = false) { + if (preferred && preferred !== panel && panel.contains(preferred) && preferred.matches(focusSelector) && preferred.getAttribute("tabindex") !== "-1" && available(preferred)) + return preferred; + const targets = settingFocusTargets(panel); + const selected = panel.querySelector(".art-setting-item.art-current"); + return targets.find((element) => preferred?.contains(element)) || (last ? targets[targets.length - 1] : targets.find((element) => selected?.contains(element)) || targets.find((element) => !element.classList.contains("art-setting-item-back")) || targets[0]); } function returnSettingFocus(setting2) { const { art, $parent } = setting2; @@ -7758,9 +7769,7 @@ function focusSettingPanel(setting2, preferred, last = false) { const panel = setting2.cache.get(setting2.active); if (!panel || !settingScopeActive(settingPanelScope(panel))) return; - const targets = settingFocusTargets(panel); - const selected = panel.querySelector(".art-setting-item.art-current"); - const target = targets.find((element) => preferred === element || preferred?.contains(element)) || (last ? targets[targets.length - 1] : targets.find((element) => selected?.contains(element)) || targets.find((element) => !element.classList.contains("art-setting-item-back")) || targets[0]); + const target = selectSettingTarget(panel, preferred, last); target?.focus({ preventScroll: true }); if (!isClosing(setting2.art)) target?.scrollIntoView({ block: "nearest", inline: "nearest" }); @@ -7833,6 +7842,8 @@ function installSettingKeyboard(setting2) { close2(); return; } + if (!["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) + return; const row = target.closest(".art-setting-item"); if (!row || target !== row && !target.matches('button,a[href],[role="button"]')) return; @@ -7841,8 +7852,7 @@ function installSettingKeyboard(setting2) { return; const currentItem = setting2.active?.find((item) => item.$item === row); if (!settingScopeActive(settingPanelScope(panel)) || currentItem && !settingScopeActive(settingScope(currentItem))) { - if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) - claimKey(event); + claimKey(event); return; } const targets = settingFocusTargets(panel); diff --git a/packages/artplayer/src/control/layout.ts b/packages/artplayer/src/control/layout.ts index 5608d5138..23d105c0a 100644 --- a/packages/artplayer/src/control/layout.ts +++ b/packages/artplayer/src/control/layout.ts @@ -21,6 +21,8 @@ export function observeControlLayout(art: ControlHost): void { scope.add(() => { observer.disconnect() }) + // Its initial delivery measures after the remaining constructor DOM writes. + return } else if (typeof MutationObserver !== 'undefined') { const observer = new MutationObserver(update) diff --git a/packages/artplayer/src/setting/keyboard-focus.ts b/packages/artplayer/src/setting/keyboard-focus.ts index 3f7d82fd8..2a0bba26a 100644 --- a/packages/artplayer/src/setting/keyboard-focus.ts +++ b/packages/artplayer/src/setting/keyboard-focus.ts @@ -4,16 +4,29 @@ import { isClosing } from '../lifecycle/instance' import { settingScopeActive } from './activity' import { settingPanelScope } from './panels' +const focusSelector = '[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]' + function available(element: HTMLElement): boolean { + if (!element.isConnected || element.matches(':disabled') || element.closest('[inert]') || element.getAttribute('aria-disabled') === 'true' || !element.getClientRects().length) + return false const visibility = element.ownerDocument.defaultView?.getComputedStyle(element).visibility - return element.isConnected && !element.matches(':disabled') && !element.closest('[inert]') && element.getAttribute('aria-disabled') !== 'true' && element.getClientRects().length > 0 && visibility !== 'hidden' && visibility !== 'collapse' + return visibility !== 'hidden' && visibility !== 'collapse' } export function settingFocusTargets(panel: HTMLElement): HTMLElement[] { - return Array.from(panel.querySelectorAll('[tabindex="0"],button,input,select,textarea,a[href],[contenteditable]')) + return Array.from(panel.querySelectorAll(focusSelector)) .filter(element => element.getAttribute('tabindex') !== '-1' && available(element)) } +function selectSettingTarget(panel: HTMLElement, preferred?: HTMLElement, last = false): HTMLElement | undefined { + if (preferred && preferred !== panel && panel.contains(preferred) && preferred.matches(focusSelector) && preferred.getAttribute('tabindex') !== '-1' && available(preferred)) + return preferred + const targets = settingFocusTargets(panel) + const selected = panel.querySelector('.art-setting-item.art-current') + return targets.find(element => preferred?.contains(element)) + || (last ? targets[targets.length - 1] : targets.find(element => selected?.contains(element)) || targets.find(element => !element.classList.contains('art-setting-item-back')) || targets[0]) +} + export function returnSettingFocus(setting: SettingManager): void { const { art, $parent } = setting const player = art.template.$player @@ -33,10 +46,7 @@ export function focusSettingPanel(setting: SettingManager, preferred?: HTMLEleme const panel = setting.cache.get(setting.active) if (!panel || !settingScopeActive(settingPanelScope(panel))) return - const targets = settingFocusTargets(panel) - const selected = panel.querySelector('.art-setting-item.art-current') - const target = targets.find(element => preferred === element || preferred?.contains(element)) - || (last ? targets[targets.length - 1] : targets.find(element => selected?.contains(element)) || targets.find(element => !element.classList.contains('art-setting-item-back')) || targets[0]) + const target = selectSettingTarget(panel, preferred, last) target?.focus({ preventScroll: true }) if (!isClosing(setting.art)) target?.scrollIntoView({ block: 'nearest', inline: 'nearest' }) diff --git a/packages/artplayer/src/setting/keyboard.ts b/packages/artplayer/src/setting/keyboard.ts index 03615e2b4..029570e42 100644 --- a/packages/artplayer/src/setting/keyboard.ts +++ b/packages/artplayer/src/setting/keyboard.ts @@ -68,6 +68,8 @@ export function installSettingKeyboard(setting: SettingManager): void { close() return } + if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) + return const row = target.closest('.art-setting-item') if (!row || (target !== row && !target.matches('button,a[href],[role="button"]'))) return @@ -76,8 +78,7 @@ export function installSettingKeyboard(setting: SettingManager): void { return const currentItem = setting.active?.find(item => item.$item === row) if (!settingScopeActive(settingPanelScope(panel)) || (currentItem && !settingScopeActive(settingScope(currentItem)))) { - if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) - claimKey(event) + claimKey(event) return } const targets = settingFocusTargets(panel) diff --git a/refactor/README.md b/refactor/README.md index 526b3f421..b07c8bbe6 100644 --- a/refactor/README.md +++ b/refactor/README.md @@ -21,6 +21,7 @@ | [执行门槛与分批交付](execution-gates.md) | 最小启动基线、早期试点、历史失败、设备门槛和分包准入 | | [兼容性契约](compatibility.md) | 不可静默改变的接口、行为、类型、样式与包分发约定 | | [核心设计](core-design.md) | 核心各模块的目标职责、迁移方式和生命周期设计 | +| [核心阶段验收范围](core-acceptance.md) | 核心契约、已处置差异、性能风险与后续生态/发布门槛 | | [包迁移规范](packages.md) | 全生态统一流程、组合矩阵及包特有风险 | | [测试与验收](testing.md) | 测试层次、浏览器/消费者矩阵、证据和回归门槛 | | [已落实的测试可靠性规则](test-reliability.md) | 历史失败、候选回归、设备缺口、精确异常及等待/重试的执行规则 | diff --git a/refactor/baselines/core-acceptance-validation.json b/refactor/baselines/core-acceptance-validation.json new file mode 100644 index 000000000..64174642a --- /dev/null +++ b/refactor/baselines/core-acceptance-validation.json @@ -0,0 +1,58403 @@ +{ + "schemaVersion": 1, + "task": "CORE-22", + "stage": "core-automation", + "capturedAt": "2026-09-11T15:11:38.958Z", + "baseCommit": "5efc7f7699e16ec21ec8d4cdc20ff360b26cadd7", + "previousStage": { + "file": "refactor/baselines/core-setting-navigation-partial.json", + "sha256": "80bea18c24bee000171a9958986ca426bcb8ce27d6c87426e9ee883e0782581c" + }, + "layoutBefore": { + "file": "refactor/.cache/core22-layout-before.json", + "sha256": "7d52b566a02da7b33bf5361b698d6c261047b4877e4eedc7e0de705f5e7f62f7", + "stats": { + "startTime": "2026-09-11T14:48:20.335Z", + "duration": 3154.955, + "expected": 1, + "skipped": 0, + "unexpected": 1, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "chromium", + "status": "failed", + "durationMs": 311, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [ + { + "location": { + "file": "D:\\github\\ArtPlayer\\test\\browser\\components.spec.js", + "column": 19, + "line": 29 + }, + "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m0\u001b[39m\nReceived: \u001b[31m1\u001b[39m\n\n 27 | })\n 28 | await testInfo.attach('constructor-control-layout-reads', { contentType: 'application/json', body: JSON.stringify({ fallback, reads }) })\n> 29 | expect(reads).toBe(fallback ? 1 : 0)\n | ^\n 30 | const measured = await page.evaluate(async () => {\n 31 | await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)))\n 32 | const { $controls, $player } = window.art.template\n at D:\\github\\ArtPlayer\\test\\browser\\components.spec.js:29:19" + } + ], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + } + ] + }, + "layoutAfter": { + "file": "refactor/.cache/core22-layout-after.json", + "sha256": "c1e992c3160f646317b993441925c77bced7ca593510ec768e49084b23092975", + "stats": { + "startTime": "2026-09-11T14:48:40.416Z", + "duration": 9230.696000000002, + "expected": 15, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 488, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "chromium", + "status": "passed", + "durationMs": 286, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 334, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 585, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 1355, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 1861, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "firefox", + "status": "passed", + "durationMs": 1487, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 755, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 836, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 737, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 715, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "webkit", + "status": "passed", + "durationMs": 603, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 939, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 1133, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + } + ] + }, + "modern": { + "file": "refactor/.cache/core22-layout-modern-full.json", + "sha256": "215ac03e4f40a1d239177da4a7cbaac0533b15a8d7b7c269e86fdac141d650ed", + "stats": { + "startTime": "2026-09-11T14:51:57.181Z", + "duration": 426204.065, + "expected": 1761, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "chromium", + "status": "passed", + "durationMs": 426, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "chromium", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "chromium", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "chromium", + "status": "passed", + "durationMs": 316, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "chromium", + "status": "passed", + "durationMs": 231, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "chromium", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "chromium", + "status": "passed", + "durationMs": 291, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "chromium", + "status": "passed", + "durationMs": 294, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "chromium", + "status": "passed", + "durationMs": 285, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "chromium", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "chromium", + "status": "passed", + "durationMs": 275, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "chromium", + "status": "passed", + "durationMs": 310, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "firefox", + "status": "passed", + "durationMs": 1799, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "firefox", + "status": "passed", + "durationMs": 1995, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "firefox", + "status": "passed", + "durationMs": 1859, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "firefox", + "status": "passed", + "durationMs": 566, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "firefox", + "status": "passed", + "durationMs": 584, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "firefox", + "status": "passed", + "durationMs": 461, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "firefox", + "status": "passed", + "durationMs": 667, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "firefox", + "status": "passed", + "durationMs": 548, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "firefox", + "status": "passed", + "durationMs": 670, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "firefox", + "status": "passed", + "durationMs": 949, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "firefox", + "status": "passed", + "durationMs": 640, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "firefox", + "status": "passed", + "durationMs": 632, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "webkit", + "status": "passed", + "durationMs": 1380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "webkit", + "status": "passed", + "durationMs": 1492, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "webkit", + "status": "passed", + "durationMs": 1395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "webkit", + "status": "passed", + "durationMs": 1529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "webkit", + "status": "passed", + "durationMs": 1369, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1007, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "webkit", + "status": "passed", + "durationMs": 1735, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "webkit", + "status": "passed", + "durationMs": 1463, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "webkit", + "status": "passed", + "durationMs": 1619, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "webkit", + "status": "passed", + "durationMs": 1226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "webkit", + "status": "passed", + "durationMs": 1658, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "webkit", + "status": "passed", + "durationMs": 1293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "webkit", + "status": "passed", + "durationMs": 1747, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "chromium", + "status": "passed", + "durationMs": 253, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "chromium", + "status": "passed", + "durationMs": 228, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "chromium", + "status": "passed", + "durationMs": 266, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "chromium", + "status": "passed", + "durationMs": 256, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "chromium", + "status": "passed", + "durationMs": 240, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "chromium", + "status": "passed", + "durationMs": 291, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "chromium", + "status": "passed", + "durationMs": 270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "chromium", + "status": "passed", + "durationMs": 239, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "firefox", + "status": "passed", + "durationMs": 501, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "firefox", + "status": "passed", + "durationMs": 592, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "firefox", + "status": "passed", + "durationMs": 621, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "firefox", + "status": "passed", + "durationMs": 445, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "firefox", + "status": "passed", + "durationMs": 707, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "firefox", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "firefox", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "firefox", + "status": "passed", + "durationMs": 631, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "webkit", + "status": "passed", + "durationMs": 1094, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "webkit", + "status": "passed", + "durationMs": 1282, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "webkit", + "status": "passed", + "durationMs": 1287, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "webkit", + "status": "passed", + "durationMs": 1240, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "webkit", + "status": "passed", + "durationMs": 1114, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "webkit", + "status": "passed", + "durationMs": 1139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "webkit", + "status": "passed", + "durationMs": 1455, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "webkit", + "status": "passed", + "durationMs": 1476, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "webkit", + "status": "passed", + "durationMs": 1243, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "chromium", + "status": "passed", + "durationMs": 325, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "chromium", + "status": "passed", + "durationMs": 266, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "chromium", + "status": "passed", + "durationMs": 253, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "chromium", + "status": "passed", + "durationMs": 231, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "chromium", + "status": "passed", + "durationMs": 252, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "firefox", + "status": "passed", + "durationMs": 603, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "firefox", + "status": "passed", + "durationMs": 672, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "firefox", + "status": "passed", + "durationMs": 523, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "firefox", + "status": "passed", + "durationMs": 697, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "firefox", + "status": "passed", + "durationMs": 1267, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "firefox", + "status": "passed", + "durationMs": 1172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "webkit", + "status": "passed", + "durationMs": 1456, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "webkit", + "status": "passed", + "durationMs": 1488, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "webkit", + "status": "passed", + "durationMs": 1373, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "webkit", + "status": "passed", + "durationMs": 1385, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "webkit", + "status": "passed", + "durationMs": 421, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "webkit", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "webkit", + "status": "passed", + "durationMs": 1317, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "chromium", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "chromium", + "status": "passed", + "durationMs": 364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 464, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 1230, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "firefox", + "status": "passed", + "durationMs": 647, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "firefox", + "status": "passed", + "durationMs": 800, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 684, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 1660, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "webkit", + "status": "passed", + "durationMs": 1207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "webkit", + "status": "passed", + "durationMs": 1159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "chromium", + "status": "passed", + "durationMs": 299, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "chromium", + "status": "passed", + "durationMs": 257, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "chromium", + "status": "passed", + "durationMs": 248, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "chromium", + "status": "passed", + "durationMs": 274, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "chromium", + "status": "passed", + "durationMs": 253, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "chromium", + "status": "passed", + "durationMs": 319, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "firefox", + "status": "passed", + "durationMs": 718, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "firefox", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "firefox", + "status": "passed", + "durationMs": 457, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "firefox", + "status": "passed", + "durationMs": 520, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "firefox", + "status": "passed", + "durationMs": 456, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "firefox", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "webkit", + "status": "passed", + "durationMs": 1484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "webkit", + "status": "passed", + "durationMs": 1143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "webkit", + "status": "passed", + "durationMs": 1246, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "webkit", + "status": "passed", + "durationMs": 1307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "webkit", + "status": "passed", + "durationMs": 1216, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "webkit", + "status": "passed", + "durationMs": 1329, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "chromium", + "status": "passed", + "durationMs": 415, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "chromium", + "status": "passed", + "durationMs": 316, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "chromium", + "status": "passed", + "durationMs": 288, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "chromium", + "status": "passed", + "durationMs": 244, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "chromium", + "status": "passed", + "durationMs": 268, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "firefox", + "status": "passed", + "durationMs": 824, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "firefox", + "status": "passed", + "durationMs": 640, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "firefox", + "status": "passed", + "durationMs": 606, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "firefox", + "status": "passed", + "durationMs": 568, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "firefox", + "status": "passed", + "durationMs": 668, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "firefox", + "status": "passed", + "durationMs": 605, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "webkit", + "status": "passed", + "durationMs": 2059, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "webkit", + "status": "passed", + "durationMs": 1668, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "webkit", + "status": "passed", + "durationMs": 1452, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "webkit", + "status": "passed", + "durationMs": 1293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "webkit", + "status": "passed", + "durationMs": 1366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "webkit", + "status": "passed", + "durationMs": 1262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "chromium", + "status": "passed", + "durationMs": 544, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "chromium", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "chromium", + "status": "passed", + "durationMs": 309, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "chromium", + "status": "passed", + "durationMs": 689, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "chromium", + "status": "passed", + "durationMs": 338, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "chromium", + "status": "passed", + "durationMs": 317, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "chromium", + "status": "passed", + "durationMs": 277, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "chromium", + "status": "passed", + "durationMs": 275, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "firefox", + "status": "passed", + "durationMs": 872, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "firefox", + "status": "passed", + "durationMs": 756, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "firefox", + "status": "passed", + "durationMs": 668, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1069, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "firefox", + "status": "passed", + "durationMs": 614, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "firefox", + "status": "passed", + "durationMs": 762, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "firefox", + "status": "passed", + "durationMs": 676, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "firefox", + "status": "passed", + "durationMs": 638, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 555, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "firefox", + "status": "passed", + "durationMs": 542, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "webkit", + "status": "passed", + "durationMs": 2403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "webkit", + "status": "passed", + "durationMs": 1546, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "webkit", + "status": "passed", + "durationMs": 1318, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "webkit", + "status": "passed", + "durationMs": 3237, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "webkit", + "status": "passed", + "durationMs": 1583, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "webkit", + "status": "passed", + "durationMs": 2210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "webkit", + "status": "passed", + "durationMs": 1553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "webkit", + "status": "passed", + "durationMs": 1371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2106, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "webkit", + "status": "passed", + "durationMs": 1472, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "chromium", + "status": "passed", + "durationMs": 253, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "chromium", + "status": "passed", + "durationMs": 257, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "chromium", + "status": "passed", + "durationMs": 263, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "chromium", + "status": "passed", + "durationMs": 262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "chromium", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "chromium", + "status": "passed", + "durationMs": 549, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 335, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "chromium", + "status": "passed", + "durationMs": 476, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "chromium", + "status": "passed", + "durationMs": 302, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "chromium", + "status": "passed", + "durationMs": 265, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "chromium", + "status": "passed", + "durationMs": 277, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "chromium", + "status": "passed", + "durationMs": 226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "firefox", + "status": "passed", + "durationMs": 541, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "firefox", + "status": "passed", + "durationMs": 1459, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "firefox", + "status": "passed", + "durationMs": 1364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "firefox", + "status": "passed", + "durationMs": 579, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "firefox", + "status": "passed", + "durationMs": 1520, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "firefox", + "status": "passed", + "durationMs": 810, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 737, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "firefox", + "status": "passed", + "durationMs": 629, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "firefox", + "status": "passed", + "durationMs": 649, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "firefox", + "status": "passed", + "durationMs": 582, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "webkit", + "status": "passed", + "durationMs": 1176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "webkit", + "status": "passed", + "durationMs": 1270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "webkit", + "status": "passed", + "durationMs": 1334, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "webkit", + "status": "passed", + "durationMs": 1292, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "webkit", + "status": "passed", + "durationMs": 1932, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "webkit", + "status": "passed", + "durationMs": 2717, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "webkit", + "status": "passed", + "durationMs": 1806, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "webkit", + "status": "passed", + "durationMs": 1293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "webkit", + "status": "passed", + "durationMs": 1226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "webkit", + "status": "passed", + "durationMs": 1427, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "webkit", + "status": "passed", + "durationMs": 1168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "chromium", + "status": "passed", + "durationMs": 392, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "chromium", + "status": "passed", + "durationMs": 788, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "chromium", + "status": "passed", + "durationMs": 337, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "chromium", + "status": "passed", + "durationMs": 270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "firefox", + "status": "passed", + "durationMs": 776, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "firefox", + "status": "passed", + "durationMs": 1152, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "firefox", + "status": "passed", + "durationMs": 786, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "firefox", + "status": "passed", + "durationMs": 631, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "webkit", + "status": "passed", + "durationMs": 2042, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "webkit", + "status": "passed", + "durationMs": 2047, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "webkit", + "status": "passed", + "durationMs": 1553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "webkit", + "status": "passed", + "durationMs": 1416, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "chromium", + "status": "passed", + "durationMs": 230, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "chromium", + "status": "passed", + "durationMs": 433, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "chromium", + "status": "passed", + "durationMs": 1391, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "chromium", + "status": "passed", + "durationMs": 279, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "chromium", + "status": "passed", + "durationMs": 254, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "chromium", + "status": "passed", + "durationMs": 767, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "firefox", + "status": "passed", + "durationMs": 444, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "firefox", + "status": "passed", + "durationMs": 1106, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "firefox", + "status": "passed", + "durationMs": 1628, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "firefox", + "status": "passed", + "durationMs": 644, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "firefox", + "status": "passed", + "durationMs": 439, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "firefox", + "status": "passed", + "durationMs": 1023, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "webkit", + "status": "passed", + "durationMs": 1257, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "webkit", + "status": "passed", + "durationMs": 1641, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "webkit", + "status": "passed", + "durationMs": 2208, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "webkit", + "status": "passed", + "durationMs": 1521, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "webkit", + "status": "passed", + "durationMs": 1122, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "webkit", + "status": "passed", + "durationMs": 2156, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "chromium", + "status": "passed", + "durationMs": 283, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "chromium", + "status": "passed", + "durationMs": 342, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "chromium", + "status": "passed", + "durationMs": 295, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "chromium", + "status": "passed", + "durationMs": 196, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "chromium", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 211, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "firefox", + "status": "passed", + "durationMs": 1017, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "firefox", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "firefox", + "status": "passed", + "durationMs": 381, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "firefox", + "status": "passed", + "durationMs": 641, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "firefox", + "status": "passed", + "durationMs": 1744, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "firefox", + "status": "passed", + "durationMs": 472, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "firefox", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 1188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 1297, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "webkit", + "status": "passed", + "durationMs": 2189, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "webkit", + "status": "passed", + "durationMs": 985, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "webkit", + "status": "passed", + "durationMs": 1656, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "webkit", + "status": "passed", + "durationMs": 997, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "webkit", + "status": "passed", + "durationMs": 1181, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "webkit", + "status": "passed", + "durationMs": 2300, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "webkit", + "status": "passed", + "durationMs": 1145, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "webkit", + "status": "passed", + "durationMs": 1944, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "webkit", + "status": "passed", + "durationMs": 1095, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "webkit", + "status": "passed", + "durationMs": 1373, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1326, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1256, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1329, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1283, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "webkit", + "status": "passed", + "durationMs": 1211, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 530, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "firefox", + "status": "passed", + "durationMs": 392, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "firefox", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 397, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "firefox", + "status": "passed", + "durationMs": 517, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "firefox", + "status": "passed", + "durationMs": 508, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1090, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1152, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1061, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1070, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "webkit", + "status": "passed", + "durationMs": 1155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "webkit", + "status": "passed", + "durationMs": 1038, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "webkit", + "status": "passed", + "durationMs": 1078, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1087, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1088, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1064, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "webkit", + "status": "passed", + "durationMs": 1031, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "webkit", + "status": "passed", + "durationMs": 1480, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "webkit", + "status": "passed", + "durationMs": 1197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "webkit", + "status": "passed", + "durationMs": 1194, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "chromium", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "chromium", + "status": "passed", + "durationMs": 456, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "chromium", + "status": "passed", + "durationMs": 283, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "chromium", + "status": "passed", + "durationMs": 126, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "firefox", + "status": "passed", + "durationMs": 1418, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "firefox", + "status": "passed", + "durationMs": 1599, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "firefox", + "status": "passed", + "durationMs": 546, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "firefox", + "status": "passed", + "durationMs": 551, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "firefox", + "status": "passed", + "durationMs": 1178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "firefox", + "status": "passed", + "durationMs": 354, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "webkit", + "status": "passed", + "durationMs": 1911, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "webkit", + "status": "passed", + "durationMs": 1872, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "webkit", + "status": "passed", + "durationMs": 1332, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "webkit", + "status": "passed", + "durationMs": 445, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "webkit", + "status": "passed", + "durationMs": 422, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "chromium", + "status": "passed", + "durationMs": 279, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "chromium", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "chromium", + "status": "passed", + "durationMs": 297, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "chromium", + "status": "passed", + "durationMs": 241, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "firefox", + "status": "passed", + "durationMs": 622, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "firefox", + "status": "passed", + "durationMs": 665, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "firefox", + "status": "passed", + "durationMs": 561, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "webkit", + "status": "passed", + "durationMs": 1897, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "webkit", + "status": "passed", + "durationMs": 1863, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "webkit", + "status": "passed", + "durationMs": 1355, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1880, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "chromium", + "status": "passed", + "durationMs": 285, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "chromium", + "status": "passed", + "durationMs": 392, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "chromium", + "status": "passed", + "durationMs": 292, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "chromium", + "status": "passed", + "durationMs": 267, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "firefox", + "status": "passed", + "durationMs": 663, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "firefox", + "status": "passed", + "durationMs": 858, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "firefox", + "status": "passed", + "durationMs": 662, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "firefox", + "status": "passed", + "durationMs": 584, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "webkit", + "status": "passed", + "durationMs": 1922, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "webkit", + "status": "passed", + "durationMs": 1999, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "webkit", + "status": "passed", + "durationMs": 1492, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1993, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 283, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 292, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 575, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "chromium", + "status": "passed", + "durationMs": 557, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "chromium", + "status": "passed", + "durationMs": 131, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "chromium", + "status": "passed", + "durationMs": 253, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "chromium", + "status": "passed", + "durationMs": 147, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "chromium", + "status": "passed", + "durationMs": 541, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "chromium", + "status": "passed", + "durationMs": 135, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "chromium", + "status": "passed", + "durationMs": 250, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 556, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 538, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 650, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 864, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "firefox", + "status": "passed", + "durationMs": 347, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "firefox", + "status": "passed", + "durationMs": 343, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "firefox", + "status": "passed", + "durationMs": 965, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "firefox", + "status": "passed", + "durationMs": 359, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "firefox", + "status": "passed", + "durationMs": 355, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "firefox", + "status": "passed", + "durationMs": 347, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "firefox", + "status": "passed", + "durationMs": 342, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "firefox", + "status": "passed", + "durationMs": 348, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "firefox", + "status": "passed", + "durationMs": 442, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "firefox", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "firefox", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "firefox", + "status": "passed", + "durationMs": 906, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "firefox", + "status": "passed", + "durationMs": 1222, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "firefox", + "status": "passed", + "durationMs": 1075, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "firefox", + "status": "passed", + "durationMs": 335, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "firefox", + "status": "passed", + "durationMs": 334, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "firefox", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "firefox", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "firefox", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 568, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 649, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "webkit", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 966, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 1045, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 563, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "webkit", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "webkit", + "status": "passed", + "durationMs": 461, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "webkit", + "status": "passed", + "durationMs": 3235, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "webkit", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "webkit", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "webkit", + "status": "passed", + "durationMs": 436, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "webkit", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "webkit", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "webkit", + "status": "passed", + "durationMs": 397, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "webkit", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "webkit", + "status": "passed", + "durationMs": 909, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "webkit", + "status": "passed", + "durationMs": 1109, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 606, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "webkit", + "status": "passed", + "durationMs": 554, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "webkit", + "status": "passed", + "durationMs": 568, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "webkit", + "status": "passed", + "durationMs": 3146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "webkit", + "status": "passed", + "durationMs": 444, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "webkit", + "status": "passed", + "durationMs": 502, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "webkit", + "status": "passed", + "durationMs": 482, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "webkit", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "webkit", + "status": "passed", + "durationMs": 462, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "webkit", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "webkit", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "webkit", + "status": "passed", + "durationMs": 911, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "webkit", + "status": "passed", + "durationMs": 974, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "chromium", + "status": "passed", + "durationMs": 212, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "chromium", + "status": "passed", + "durationMs": 201, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "firefox", + "status": "passed", + "durationMs": 463, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "firefox", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "firefox", + "status": "passed", + "durationMs": 1448, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1243, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "webkit", + "status": "passed", + "durationMs": 1437, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "webkit", + "status": "passed", + "durationMs": 1463, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "chromium", + "status": "passed", + "durationMs": 209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "chromium", + "status": "passed", + "durationMs": 408, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 204, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "firefox", + "status": "passed", + "durationMs": 346, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "firefox", + "status": "passed", + "durationMs": 483, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "firefox", + "status": "passed", + "durationMs": 499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "firefox", + "status": "passed", + "durationMs": 436, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "firefox", + "status": "passed", + "durationMs": 705, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "firefox", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "firefox", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 407, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "firefox", + "status": "passed", + "durationMs": 1190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "firefox", + "status": "passed", + "durationMs": 1211, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "webkit", + "status": "passed", + "durationMs": 1149, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "webkit", + "status": "passed", + "durationMs": 1195, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1152, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1191, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "webkit", + "status": "passed", + "durationMs": 1040, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "webkit", + "status": "passed", + "durationMs": 1093, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1166, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1266, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "webkit", + "status": "passed", + "durationMs": 1080, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "webkit", + "status": "passed", + "durationMs": 1002, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "webkit", + "status": "passed", + "durationMs": 2351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "webkit", + "status": "passed", + "durationMs": 1135, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "webkit", + "status": "passed", + "durationMs": 986, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 1218, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 1328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 1050, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1033, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1099, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "webkit", + "status": "passed", + "durationMs": 1003, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1090, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "chromium", + "status": "passed", + "durationMs": 216, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "chromium", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "chromium", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "chromium", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "chromium", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "chromium", + "status": "passed", + "durationMs": 183, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "chromium", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 360, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "chromium", + "status": "passed", + "durationMs": 505, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "firefox", + "status": "passed", + "durationMs": 380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "firefox", + "status": "passed", + "durationMs": 694, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "firefox", + "status": "passed", + "durationMs": 656, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "firefox", + "status": "passed", + "durationMs": 544, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "firefox", + "status": "passed", + "durationMs": 640, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "firefox", + "status": "passed", + "durationMs": 627, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "firefox", + "status": "passed", + "durationMs": 512, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 1198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 410, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "firefox", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "webkit", + "status": "passed", + "durationMs": 1216, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "webkit", + "status": "passed", + "durationMs": 1660, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "webkit", + "status": "passed", + "durationMs": 1848, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "webkit", + "status": "passed", + "durationMs": 1172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "webkit", + "status": "passed", + "durationMs": 1791, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "webkit", + "status": "passed", + "durationMs": 1855, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "webkit", + "status": "passed", + "durationMs": 1189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 1200, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1736, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1153, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1179, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1312, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 1652, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "webkit", + "status": "passed", + "durationMs": 1817, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "chromium", + "status": "passed", + "durationMs": 215, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "chromium", + "status": "passed", + "durationMs": 277, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "chromium", + "status": "passed", + "durationMs": 284, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "chromium", + "status": "passed", + "durationMs": 184, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "chromium", + "status": "passed", + "durationMs": 289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "chromium", + "status": "passed", + "durationMs": 269, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "chromium", + "status": "passed", + "durationMs": 293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "firefox", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "firefox", + "status": "passed", + "durationMs": 774, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "firefox", + "status": "passed", + "durationMs": 536, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "firefox", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "firefox", + "status": "passed", + "durationMs": 682, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "webkit", + "status": "passed", + "durationMs": 1121, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "webkit", + "status": "passed", + "durationMs": 1041, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "webkit", + "status": "passed", + "durationMs": 1130, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "webkit", + "status": "passed", + "durationMs": 1169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "webkit", + "status": "passed", + "durationMs": 1188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "webkit", + "status": "passed", + "durationMs": 1148, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "webkit", + "status": "passed", + "durationMs": 1152, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "webkit", + "status": "passed", + "durationMs": 1007, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "webkit", + "status": "passed", + "durationMs": 1219, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "webkit", + "status": "passed", + "durationMs": 1035, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "chromium", + "status": "passed", + "durationMs": 181, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "firefox", + "status": "passed", + "durationMs": 1225, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "firefox", + "status": "passed", + "durationMs": 398, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "firefox", + "status": "passed", + "durationMs": 1310, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "firefox", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "webkit", + "status": "passed", + "durationMs": 1144, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "webkit", + "status": "passed", + "durationMs": 1200, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "webkit", + "status": "passed", + "durationMs": 1240, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "webkit", + "status": "passed", + "durationMs": 1157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "webkit", + "status": "passed", + "durationMs": 1107, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "webkit", + "status": "passed", + "durationMs": 1027, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1012, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 223, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "chromium", + "status": "passed", + "durationMs": 804, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "firefox", + "status": "passed", + "durationMs": 1253, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "firefox", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "firefox", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "firefox", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "firefox", + "status": "passed", + "durationMs": 894, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "webkit", + "status": "passed", + "durationMs": 1184, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "webkit", + "status": "passed", + "durationMs": 1030, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "webkit", + "status": "passed", + "durationMs": 1138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "webkit", + "status": "passed", + "durationMs": 1230, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "webkit", + "status": "passed", + "durationMs": 1137, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "webkit", + "status": "passed", + "durationMs": 1215, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "webkit", + "status": "passed", + "durationMs": 1182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "webkit", + "status": "passed", + "durationMs": 999, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 1107, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "webkit", + "status": "passed", + "durationMs": 1015, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "chromium", + "status": "passed", + "durationMs": 153, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "chromium", + "status": "passed", + "durationMs": 259, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "firefox", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "firefox", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "firefox", + "status": "passed", + "durationMs": 380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "firefox", + "status": "passed", + "durationMs": 484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "firefox", + "status": "passed", + "durationMs": 360, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "firefox", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "firefox", + "status": "passed", + "durationMs": 380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "firefox", + "status": "passed", + "durationMs": 502, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "webkit", + "status": "passed", + "durationMs": 956, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "webkit", + "status": "passed", + "durationMs": 1115, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "webkit", + "status": "passed", + "durationMs": 1239, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "webkit", + "status": "passed", + "durationMs": 1317, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 992, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "webkit", + "status": "passed", + "durationMs": 1030, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "webkit", + "status": "passed", + "durationMs": 997, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "webkit", + "status": "passed", + "durationMs": 1172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "webkit", + "status": "passed", + "durationMs": 970, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1005, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "webkit", + "status": "passed", + "durationMs": 1070, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "chromium", + "status": "passed", + "durationMs": 164, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "chromium", + "status": "passed", + "durationMs": 181, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "firefox", + "status": "passed", + "durationMs": 447, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "firefox", + "status": "passed", + "durationMs": 1300, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "firefox", + "status": "passed", + "durationMs": 535, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "firefox", + "status": "passed", + "durationMs": 505, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "webkit", + "status": "passed", + "durationMs": 1218, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "webkit", + "status": "passed", + "durationMs": 1308, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "webkit", + "status": "passed", + "durationMs": 1130, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "webkit", + "status": "passed", + "durationMs": 1093, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "webkit", + "status": "passed", + "durationMs": 983, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "webkit", + "status": "passed", + "durationMs": 1173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "chromium", + "status": "passed", + "durationMs": 226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "chromium", + "status": "passed", + "durationMs": 180, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "chromium", + "status": "passed", + "durationMs": 163, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "firefox", + "status": "passed", + "durationMs": 1258, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "firefox", + "status": "passed", + "durationMs": 444, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "firefox", + "status": "passed", + "durationMs": 557, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "firefox", + "status": "passed", + "durationMs": 557, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "firefox", + "status": "passed", + "durationMs": 380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "firefox", + "status": "passed", + "durationMs": 1283, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "firefox", + "status": "passed", + "durationMs": 474, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "firefox", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "firefox", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "firefox", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 484, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 491, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "firefox", + "status": "passed", + "durationMs": 550, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "firefox", + "status": "passed", + "durationMs": 501, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "firefox", + "status": "passed", + "durationMs": 499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "firefox", + "status": "passed", + "durationMs": 516, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 531, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "webkit", + "status": "passed", + "durationMs": 1094, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "webkit", + "status": "passed", + "durationMs": 1107, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "webkit", + "status": "passed", + "durationMs": 941, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "webkit", + "status": "passed", + "durationMs": 999, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "webkit", + "status": "passed", + "durationMs": 1120, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "webkit", + "status": "passed", + "durationMs": 1194, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "webkit", + "status": "passed", + "durationMs": 988, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "webkit", + "status": "passed", + "durationMs": 1167, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "webkit", + "status": "passed", + "durationMs": 1197, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "webkit", + "status": "passed", + "durationMs": 1168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "webkit", + "status": "passed", + "durationMs": 1157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "webkit", + "status": "passed", + "durationMs": 1117, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 999, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "webkit", + "status": "passed", + "durationMs": 1096, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "webkit", + "status": "passed", + "durationMs": 1089, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "webkit", + "status": "passed", + "durationMs": 1021, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "webkit", + "status": "passed", + "durationMs": 1092, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1167, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "firefox", + "status": "passed", + "durationMs": 355, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "firefox", + "status": "passed", + "durationMs": 368, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "firefox", + "status": "passed", + "durationMs": 353, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "webkit", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "webkit", + "status": "passed", + "durationMs": 418, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "chromium", + "status": "passed", + "durationMs": 967, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "firefox", + "status": "passed", + "durationMs": 1263, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "webkit", + "status": "passed", + "durationMs": 1940, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "chromium", + "status": "passed", + "durationMs": 128, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "chromium", + "status": "passed", + "durationMs": 135, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "firefox", + "status": "passed", + "durationMs": 1385, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "firefox", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "webkit", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "webkit", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "chromium", + "status": "passed", + "durationMs": 474, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "chromium", + "status": "passed", + "durationMs": 213, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "chromium", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "chromium", + "status": "passed", + "durationMs": 180, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "chromium", + "status": "passed", + "durationMs": 212, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "chromium", + "status": "passed", + "durationMs": 167, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "firefox", + "status": "passed", + "durationMs": 722, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "firefox", + "status": "passed", + "durationMs": 1350, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "firefox", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "firefox", + "status": "passed", + "durationMs": 518, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "firefox", + "status": "passed", + "durationMs": 695, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "firefox", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "firefox", + "status": "passed", + "durationMs": 558, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "webkit", + "status": "passed", + "durationMs": 1440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "webkit", + "status": "passed", + "durationMs": 1201, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "webkit", + "status": "passed", + "durationMs": 1063, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "webkit", + "status": "passed", + "durationMs": 1194, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "webkit", + "status": "passed", + "durationMs": 1195, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "webkit", + "status": "passed", + "durationMs": 1417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "webkit", + "status": "passed", + "durationMs": 1020, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "webkit", + "status": "passed", + "durationMs": 1049, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "webkit", + "status": "passed", + "durationMs": 1025, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "webkit", + "status": "passed", + "durationMs": 1134, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "chromium", + "status": "passed", + "durationMs": 310, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "chromium", + "status": "passed", + "durationMs": 431, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "chromium", + "status": "passed", + "durationMs": 424, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "chromium", + "status": "passed", + "durationMs": 322, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "chromium", + "status": "passed", + "durationMs": 424, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "chromium", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 426, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "firefox", + "status": "passed", + "durationMs": 790, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "firefox", + "status": "passed", + "durationMs": 949, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "firefox", + "status": "passed", + "durationMs": 928, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "firefox", + "status": "passed", + "durationMs": 666, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "firefox", + "status": "passed", + "durationMs": 1875, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "firefox", + "status": "passed", + "durationMs": 1274, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 910, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 737, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 1054, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 901, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "firefox", + "status": "passed", + "durationMs": 816, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1780, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "webkit", + "status": "passed", + "durationMs": 1693, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "webkit", + "status": "passed", + "durationMs": 1539, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1771, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "webkit", + "status": "passed", + "durationMs": 1460, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "webkit", + "status": "passed", + "durationMs": 1626, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1601, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1509, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1872, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1505, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "webkit", + "status": "passed", + "durationMs": 1197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "chromium", + "status": "passed", + "durationMs": 415, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "chromium", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "chromium", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 300, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 442, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "chromium", + "status": "passed", + "durationMs": 457, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "chromium", + "status": "passed", + "durationMs": 210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "chromium", + "status": "passed", + "durationMs": 465, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "chromium", + "status": "passed", + "durationMs": 451, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "chromium", + "status": "passed", + "durationMs": 520, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 454, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 436, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "chromium", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "firefox", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "firefox", + "status": "passed", + "durationMs": 804, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "firefox", + "status": "passed", + "durationMs": 769, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "firefox", + "status": "passed", + "durationMs": 1057, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 1031, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 919, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 1850, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 975, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "firefox", + "status": "passed", + "durationMs": 1020, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "firefox", + "status": "passed", + "durationMs": 433, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "firefox", + "status": "passed", + "durationMs": 972, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "firefox", + "status": "passed", + "durationMs": 1114, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "firefox", + "status": "passed", + "durationMs": 2045, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 646, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 680, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 685, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 678, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "firefox", + "status": "passed", + "durationMs": 939, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "webkit", + "status": "passed", + "durationMs": 1123, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1900, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "webkit", + "status": "passed", + "durationMs": 1868, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "webkit", + "status": "passed", + "durationMs": 1711, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1937, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1836, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1524, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1785, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "webkit", + "status": "passed", + "durationMs": 1931, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "webkit", + "status": "passed", + "durationMs": 1216, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1699, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "webkit", + "status": "passed", + "durationMs": 1591, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "webkit", + "status": "passed", + "durationMs": 1646, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1602, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1544, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1560, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1830, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "webkit", + "status": "passed", + "durationMs": 1778, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "chromium", + "status": "passed", + "durationMs": 164, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "firefox", + "status": "passed", + "durationMs": 576, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "firefox", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "firefox", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "firefox", + "status": "passed", + "durationMs": 555, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "webkit", + "status": "passed", + "durationMs": 1132, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "webkit", + "status": "passed", + "durationMs": 1027, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "webkit", + "status": "passed", + "durationMs": 1022, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "webkit", + "status": "passed", + "durationMs": 1031, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "webkit", + "status": "passed", + "durationMs": 1133, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "webkit", + "status": "passed", + "durationMs": 1164, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "chromium", + "status": "passed", + "durationMs": 247, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "chromium", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 245, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 331, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 250, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 278, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 235, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 278, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 224, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "firefox", + "status": "passed", + "durationMs": 528, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "firefox", + "status": "passed", + "durationMs": 1524, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "firefox", + "status": "passed", + "durationMs": 413, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "firefox", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1049, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 589, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 556, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "firefox", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "firefox", + "status": "passed", + "durationMs": 1375, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 571, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 610, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 592, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "firefox", + "status": "passed", + "durationMs": 542, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "webkit", + "status": "passed", + "durationMs": 1169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "webkit", + "status": "passed", + "durationMs": 1195, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "webkit", + "status": "passed", + "durationMs": 1381, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "webkit", + "status": "passed", + "durationMs": 1087, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1840, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1061, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1121, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "webkit", + "status": "passed", + "durationMs": 1008, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "webkit", + "status": "passed", + "durationMs": 995, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1552, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1229, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "webkit", + "status": "passed", + "durationMs": 948, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1100, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1220, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "webkit", + "status": "passed", + "durationMs": 1030, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "chromium", + "status": "passed", + "durationMs": 198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "chromium", + "status": "passed", + "durationMs": 137, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "firefox", + "status": "passed", + "durationMs": 1421, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "firefox", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "firefox", + "status": "passed", + "durationMs": 356, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "firefox", + "status": "passed", + "durationMs": 361, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "firefox", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "firefox", + "status": "passed", + "durationMs": 362, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "firefox", + "status": "passed", + "durationMs": 361, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "webkit", + "status": "passed", + "durationMs": 463, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "webkit", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "webkit", + "status": "passed", + "durationMs": 548, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "webkit", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "webkit", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "webkit", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "webkit", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "webkit", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "webkit", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "webkit", + "status": "passed", + "durationMs": 479, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "webkit", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "webkit", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "firefox", + "status": "passed", + "durationMs": 1511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "firefox", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "firefox", + "status": "passed", + "durationMs": 558, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1040, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "webkit", + "status": "passed", + "durationMs": 1113, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "webkit", + "status": "passed", + "durationMs": 1288, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "webkit", + "status": "passed", + "durationMs": 1097, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 1214, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 1027, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "webkit", + "status": "passed", + "durationMs": 1132, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "chromium", + "status": "passed", + "durationMs": 152, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "chromium", + "status": "passed", + "durationMs": 163, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "firefox", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "firefox", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "firefox", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "firefox", + "status": "passed", + "durationMs": 1258, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "firefox", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "firefox", + "status": "passed", + "durationMs": 342, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "firefox", + "status": "passed", + "durationMs": 355, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "webkit", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "webkit", + "status": "passed", + "durationMs": 546, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "webkit", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "webkit", + "status": "passed", + "durationMs": 454, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 472, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "webkit", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "webkit", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "webkit", + "status": "passed", + "durationMs": 450, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "webkit", + "status": "passed", + "durationMs": 1053, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "webkit", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "firefox", + "status": "passed", + "durationMs": 490, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "firefox", + "status": "passed", + "durationMs": 1290, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "firefox", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "firefox", + "status": "passed", + "durationMs": 370, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "firefox", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "firefox", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "firefox", + "status": "passed", + "durationMs": 552, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "firefox", + "status": "passed", + "durationMs": 552, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "firefox", + "status": "passed", + "durationMs": 550, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "webkit", + "status": "passed", + "durationMs": 1021, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "webkit", + "status": "passed", + "durationMs": 1076, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "webkit", + "status": "passed", + "durationMs": 1058, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "webkit", + "status": "passed", + "durationMs": 1050, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "webkit", + "status": "passed", + "durationMs": 1046, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "webkit", + "status": "passed", + "durationMs": 1186, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "webkit", + "status": "passed", + "durationMs": 1102, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "webkit", + "status": "passed", + "durationMs": 1101, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "webkit", + "status": "passed", + "durationMs": 1152, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "webkit", + "status": "passed", + "durationMs": 1358, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "webkit", + "status": "passed", + "durationMs": 1015, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "webkit", + "status": "passed", + "durationMs": 1217, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "chromium", + "status": "passed", + "durationMs": 274, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "chromium", + "status": "passed", + "durationMs": 278, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "chromium", + "status": "passed", + "durationMs": 298, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "chromium", + "status": "passed", + "durationMs": 293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "firefox", + "status": "passed", + "durationMs": 1412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "firefox", + "status": "passed", + "durationMs": 530, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "firefox", + "status": "passed", + "durationMs": 571, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "firefox", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "webkit", + "status": "passed", + "durationMs": 1239, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "webkit", + "status": "passed", + "durationMs": 1257, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "webkit", + "status": "passed", + "durationMs": 1288, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "webkit", + "status": "passed", + "durationMs": 1199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "webkit", + "status": "passed", + "durationMs": 1863, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "webkit", + "status": "passed", + "durationMs": 505, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "webkit", + "status": "passed", + "durationMs": 486, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "webkit", + "status": "passed", + "durationMs": 446, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "webkit", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "chromium", + "status": "passed", + "durationMs": 332, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "chromium", + "status": "passed", + "durationMs": 352, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "firefox", + "status": "passed", + "durationMs": 958, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "firefox", + "status": "passed", + "durationMs": 1638, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "webkit", + "status": "passed", + "durationMs": 2130, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "webkit", + "status": "passed", + "durationMs": 1897, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "chromium", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "chromium", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "firefox", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "firefox", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "firefox", + "status": "passed", + "durationMs": 900, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "firefox", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "firefox", + "status": "passed", + "durationMs": 493, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "firefox", + "status": "passed", + "durationMs": 1415, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "firefox", + "status": "passed", + "durationMs": 646, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "firefox", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "firefox", + "status": "passed", + "durationMs": 492, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "firefox", + "status": "passed", + "durationMs": 490, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1051, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "webkit", + "status": "passed", + "durationMs": 1205, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1547, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "webkit", + "status": "passed", + "durationMs": 1049, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "webkit", + "status": "passed", + "durationMs": 1069, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "webkit", + "status": "passed", + "durationMs": 999, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1120, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "webkit", + "status": "passed", + "durationMs": 1240, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "webkit", + "status": "passed", + "durationMs": 1078, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "webkit", + "status": "passed", + "durationMs": 1269, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "webkit", + "status": "passed", + "durationMs": 1106, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "webkit", + "status": "passed", + "durationMs": 1097, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "firefox", + "status": "passed", + "durationMs": 421, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 408, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "firefox", + "status": "passed", + "durationMs": 357, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "webkit", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "webkit", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1002, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "webkit", + "status": "passed", + "durationMs": 457, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "webkit", + "status": "passed", + "durationMs": 502, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1119, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "firefox", + "status": "passed", + "durationMs": 516, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "firefox", + "status": "passed", + "durationMs": 517, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "firefox", + "status": "passed", + "durationMs": 1174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "firefox", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "webkit", + "status": "passed", + "durationMs": 1106, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1029, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "webkit", + "status": "passed", + "durationMs": 1038, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1045, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "chromium", + "status": "passed", + "durationMs": 1536, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "chromium", + "status": "passed", + "durationMs": 1571, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "chromium", + "status": "passed", + "durationMs": 232, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "chromium", + "status": "passed", + "durationMs": 257, + "url": "about:blank", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "firefox", + "status": "passed", + "durationMs": 2039, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "firefox", + "status": "passed", + "durationMs": 2393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "firefox", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "firefox", + "status": "passed", + "durationMs": 451, + "url": "about:blank", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "webkit", + "status": "passed", + "durationMs": 4792, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "webkit", + "status": "passed", + "durationMs": 4985, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "webkit", + "status": "passed", + "durationMs": 770, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "webkit", + "status": "passed", + "durationMs": 508, + "url": "about:blank", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "chromium", + "status": "passed", + "durationMs": 132, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "firefox", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "firefox", + "status": "passed", + "durationMs": 447, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "firefox", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 416, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "webkit", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "webkit", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "webkit", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "chromium", + "status": "passed", + "durationMs": 137, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "firefox", + "status": "passed", + "durationMs": 377, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "firefox", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "webkit", + "status": "passed", + "durationMs": 478, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "webkit", + "status": "passed", + "durationMs": 413, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "chromium", + "status": "passed", + "durationMs": 297, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "chromium", + "status": "passed", + "durationMs": 324, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "firefox", + "status": "passed", + "durationMs": 664, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 1005, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 491, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "firefox", + "status": "passed", + "durationMs": 560, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "firefox", + "status": "passed", + "durationMs": 590, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "firefox", + "status": "passed", + "durationMs": 1381, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "webkit", + "status": "passed", + "durationMs": 1913, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1133, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1133, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1011, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "webkit", + "status": "passed", + "durationMs": 1050, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "webkit", + "status": "passed", + "durationMs": 2070, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1126, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1155, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1282, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "webkit", + "status": "passed", + "durationMs": 1197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 361, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "chromium", + "status": "passed", + "durationMs": 505, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "chromium", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "chromium", + "status": "passed", + "durationMs": 857, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "chromium", + "status": "passed", + "durationMs": 542, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "chromium", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "chromium", + "status": "passed", + "durationMs": 859, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 767, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 1729, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 998, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "firefox", + "status": "passed", + "durationMs": 1089, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "firefox", + "status": "passed", + "durationMs": 1139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "firefox", + "status": "passed", + "durationMs": 462, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1697, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 914, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 1024, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 1115, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "firefox", + "status": "passed", + "durationMs": 1183, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "firefox", + "status": "passed", + "durationMs": 1290, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "firefox", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 2070, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 2255, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 2238, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "webkit", + "status": "passed", + "durationMs": 2565, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "webkit", + "status": "passed", + "durationMs": 2927, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "webkit", + "status": "passed", + "durationMs": 1753, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "webkit", + "status": "passed", + "durationMs": 9468, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 2438, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 2178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1887, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "webkit", + "status": "passed", + "durationMs": 2484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "webkit", + "status": "passed", + "durationMs": 2328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "webkit", + "status": "passed", + "durationMs": 1469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "webkit", + "status": "passed", + "durationMs": 4074, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "chromium", + "status": "passed", + "durationMs": 156, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "chromium", + "status": "passed", + "durationMs": 291, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "chromium", + "status": "passed", + "durationMs": 156, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "firefox", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "firefox", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "firefox", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "firefox", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "firefox", + "status": "passed", + "durationMs": 385, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "firefox", + "status": "passed", + "durationMs": 1380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "firefox", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "firefox", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "firefox", + "status": "passed", + "durationMs": 959, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "firefox", + "status": "passed", + "durationMs": 559, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "firefox", + "status": "passed", + "durationMs": 574, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "firefox", + "status": "passed", + "durationMs": 1415, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "webkit", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "webkit", + "status": "passed", + "durationMs": 1149, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "webkit", + "status": "passed", + "durationMs": 1086, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "webkit", + "status": "passed", + "durationMs": 951, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "webkit", + "status": "passed", + "durationMs": 945, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "webkit", + "status": "passed", + "durationMs": 1393, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "webkit", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "webkit", + "status": "passed", + "durationMs": 1235, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "webkit", + "status": "passed", + "durationMs": 1170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "webkit", + "status": "passed", + "durationMs": 1144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "webkit", + "status": "passed", + "durationMs": 1277, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "webkit", + "status": "passed", + "durationMs": 1333, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "webkit", + "status": "passed", + "durationMs": 1182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "webkit", + "status": "passed", + "durationMs": 486, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "firefox", + "status": "passed", + "durationMs": 532, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "webkit", + "status": "passed", + "durationMs": 543, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "firefox", + "status": "passed", + "durationMs": 476, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "firefox", + "status": "passed", + "durationMs": 1318, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "firefox", + "status": "passed", + "durationMs": 327, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "firefox", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "webkit", + "status": "passed", + "durationMs": 988, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "webkit", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "webkit", + "status": "passed", + "durationMs": 1029, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "webkit", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "webkit", + "status": "passed", + "durationMs": 957, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "chromium", + "status": "passed", + "durationMs": 597, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "chromium", + "status": "passed", + "durationMs": 300, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "chromium", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "chromium", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "chromium", + "status": "passed", + "durationMs": 305, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "chromium", + "status": "passed", + "durationMs": 287, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "chromium", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "chromium", + "status": "passed", + "durationMs": 293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "chromium", + "status": "passed", + "durationMs": 369, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "firefox", + "status": "passed", + "durationMs": 777, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "firefox", + "status": "passed", + "durationMs": 723, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "firefox", + "status": "passed", + "durationMs": 748, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "firefox", + "status": "passed", + "durationMs": 591, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "firefox", + "status": "passed", + "durationMs": 1090, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "firefox", + "status": "passed", + "durationMs": 988, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "firefox", + "status": "passed", + "durationMs": 958, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "firefox", + "status": "passed", + "durationMs": 969, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "firefox", + "status": "passed", + "durationMs": 974, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "firefox", + "status": "passed", + "durationMs": 1043, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "firefox", + "status": "passed", + "durationMs": 547, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "firefox", + "status": "passed", + "durationMs": 659, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "firefox", + "status": "passed", + "durationMs": 747, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "webkit", + "status": "passed", + "durationMs": 1431, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "webkit", + "status": "passed", + "durationMs": 1348, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "webkit", + "status": "passed", + "durationMs": 3890, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "webkit", + "status": "passed", + "durationMs": 1201, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "webkit", + "status": "passed", + "durationMs": 1601, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "webkit", + "status": "passed", + "durationMs": 1511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "webkit", + "status": "passed", + "durationMs": 1268, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "webkit", + "status": "passed", + "durationMs": 3825, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "webkit", + "status": "passed", + "durationMs": 1454, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "webkit", + "status": "passed", + "durationMs": 1959, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "webkit", + "status": "passed", + "durationMs": 1198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "webkit", + "status": "passed", + "durationMs": 1187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "webkit", + "status": "passed", + "durationMs": 4140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 271, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "chromium", + "status": "passed", + "durationMs": 281, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "chromium", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 581, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "firefox", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 578, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "firefox", + "status": "passed", + "durationMs": 1623, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "webkit", + "status": "passed", + "durationMs": 878, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1068, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "webkit", + "status": "passed", + "durationMs": 1435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "chromium", + "status": "passed", + "durationMs": 596, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "chromium", + "status": "passed", + "durationMs": 614, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "firefox", + "status": "passed", + "durationMs": 878, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "firefox", + "status": "passed", + "durationMs": 884, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "webkit", + "status": "passed", + "durationMs": 1700, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "webkit", + "status": "passed", + "durationMs": 1801, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "chromium", + "status": "passed", + "durationMs": 148, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "chromium", + "status": "passed", + "durationMs": 152, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "firefox", + "status": "passed", + "durationMs": 364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "firefox", + "status": "passed", + "durationMs": 455, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "firefox", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "firefox", + "status": "passed", + "durationMs": 1281, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "firefox", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 1407, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "webkit", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "webkit", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "webkit", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "webkit", + "status": "passed", + "durationMs": 517, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "webkit", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "webkit", + "status": "passed", + "durationMs": 474, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 459, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "chromium", + "status": "passed", + "durationMs": 150, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "chromium", + "status": "passed", + "durationMs": 147, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "chromium", + "status": "passed", + "durationMs": 156, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "firefox", + "status": "passed", + "durationMs": 359, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "firefox", + "status": "passed", + "durationMs": 332, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "firefox", + "status": "passed", + "durationMs": 361, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 377, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "firefox", + "status": "passed", + "durationMs": 360, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "firefox", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "firefox", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "webkit", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "webkit", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "webkit", + "status": "passed", + "durationMs": 492, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "webkit", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "webkit", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 508, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 500, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "webkit", + "status": "passed", + "durationMs": 484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "webkit", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "webkit", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "webkit", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "webkit", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "webkit", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "webkit", + "status": "passed", + "durationMs": 488, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "chromium", + "status": "passed", + "durationMs": 132, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "chromium", + "status": "passed", + "durationMs": 742, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "chromium", + "status": "passed", + "durationMs": 225, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "chromium", + "status": "passed", + "durationMs": 806, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "chromium", + "status": "passed", + "durationMs": 239, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 1127, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 1129, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "firefox", + "status": "passed", + "durationMs": 343, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "firefox", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "firefox", + "status": "passed", + "durationMs": 1352, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "firefox", + "status": "passed", + "durationMs": 355, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "firefox", + "status": "passed", + "durationMs": 356, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "firefox", + "status": "passed", + "durationMs": 1036, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "firefox", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "firefox", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "firefox", + "status": "passed", + "durationMs": 463, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "firefox", + "status": "passed", + "durationMs": 1417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "firefox", + "status": "passed", + "durationMs": 1176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "firefox", + "status": "passed", + "durationMs": 364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "firefox", + "status": "passed", + "durationMs": 381, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "firefox", + "status": "passed", + "durationMs": 1089, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "firefox", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 1456, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 1452, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "firefox", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "firefox", + "status": "passed", + "durationMs": 347, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 377, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 448, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "firefox", + "status": "passed", + "durationMs": 389, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "firefox", + "status": "passed", + "durationMs": 1298, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "webkit", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "webkit", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "webkit", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "webkit", + "status": "passed", + "durationMs": 462, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "webkit", + "status": "passed", + "durationMs": 570, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "webkit", + "status": "passed", + "durationMs": 1717, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "webkit", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "webkit", + "status": "passed", + "durationMs": 856, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "webkit", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "webkit", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "webkit", + "status": "passed", + "durationMs": 448, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "webkit", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "webkit", + "status": "passed", + "durationMs": 620, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "webkit", + "status": "passed", + "durationMs": 2054, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "webkit", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "webkit", + "status": "passed", + "durationMs": 870, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "webkit", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 1560, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 1659, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "webkit", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "webkit", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 576, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 582, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "webkit", + "status": "passed", + "durationMs": 496, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "webkit", + "status": "passed", + "durationMs": 521, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "chromium", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "chromium", + "status": "passed", + "durationMs": 416, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "chromium", + "status": "passed", + "durationMs": 530, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "chromium", + "status": "passed", + "durationMs": 518, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "chromium", + "status": "passed", + "durationMs": 237, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "chromium", + "status": "passed", + "durationMs": 243, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "firefox", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "firefox", + "status": "passed", + "durationMs": 749, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "firefox", + "status": "passed", + "durationMs": 754, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "firefox", + "status": "passed", + "durationMs": 843, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "firefox", + "status": "passed", + "durationMs": 1314, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "firefox", + "status": "passed", + "durationMs": 583, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "firefox", + "status": "passed", + "durationMs": 604, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "webkit", + "status": "passed", + "durationMs": 1543, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "webkit", + "status": "passed", + "durationMs": 1572, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "webkit", + "status": "passed", + "durationMs": 1466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "webkit", + "status": "passed", + "durationMs": 1265, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "webkit", + "status": "passed", + "durationMs": 2906, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "webkit", + "status": "passed", + "durationMs": 2969, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "webkit", + "status": "passed", + "durationMs": 1702, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "webkit", + "status": "passed", + "durationMs": 1989, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 518, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "chromium", + "status": "passed", + "durationMs": 199, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "chromium", + "status": "passed", + "durationMs": 163, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 619, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "chromium", + "status": "passed", + "durationMs": 220, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "chromium", + "status": "passed", + "durationMs": 209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 445, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 655, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "firefox", + "status": "passed", + "durationMs": 609, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "firefox", + "status": "passed", + "durationMs": 1425, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 503, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "firefox", + "status": "passed", + "durationMs": 1362, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 487, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 718, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "firefox", + "status": "passed", + "durationMs": 677, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "firefox", + "status": "passed", + "durationMs": 454, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "firefox", + "status": "passed", + "durationMs": 533, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "firefox", + "status": "passed", + "durationMs": 582, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "firefox", + "status": "passed", + "durationMs": 488, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "firefox", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "firefox", + "status": "passed", + "durationMs": 503, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "firefox", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "firefox", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "firefox", + "status": "passed", + "durationMs": 407, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "firefox", + "status": "passed", + "durationMs": 1495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "firefox", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1216, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1277, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "webkit", + "status": "passed", + "durationMs": 1095, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 1729, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1415, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "webkit", + "status": "passed", + "durationMs": 1146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1202, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "webkit", + "status": "passed", + "durationMs": 1249, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1348, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1269, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "webkit", + "status": "passed", + "durationMs": 964, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2225, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1467, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "webkit", + "status": "passed", + "durationMs": 1098, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 983, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "webkit", + "status": "passed", + "durationMs": 1199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "webkit", + "status": "passed", + "durationMs": 1198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "webkit", + "status": "passed", + "durationMs": 916, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "webkit", + "status": "passed", + "durationMs": 988, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "webkit", + "status": "passed", + "durationMs": 981, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "webkit", + "status": "passed", + "durationMs": 985, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "webkit", + "status": "passed", + "durationMs": 1116, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "webkit", + "status": "passed", + "durationMs": 1362, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "webkit", + "status": "passed", + "durationMs": 1028, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "webkit", + "status": "passed", + "durationMs": 967, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "webkit", + "status": "passed", + "durationMs": 1020, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "webkit", + "status": "passed", + "durationMs": 1180, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "chromium", + "status": "passed", + "durationMs": 446, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 137, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "chromium", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "chromium", + "status": "passed", + "durationMs": 160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "firefox", + "status": "passed", + "durationMs": 508, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "firefox", + "status": "passed", + "durationMs": 368, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "firefox", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 424, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "firefox", + "status": "passed", + "durationMs": 776, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "firefox", + "status": "passed", + "durationMs": 1459, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "firefox", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "firefox", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 1295, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "webkit", + "status": "passed", + "durationMs": 1977, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "webkit", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "webkit", + "status": "passed", + "durationMs": 518, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "webkit", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 415, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "webkit", + "status": "passed", + "durationMs": 1955, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "webkit", + "status": "passed", + "durationMs": 535, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "webkit", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "webkit", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 486, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "chromium", + "status": "passed", + "durationMs": 309, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "chromium", + "status": "passed", + "durationMs": 194, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "chromium", + "status": "passed", + "durationMs": 306, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "chromium", + "status": "passed", + "durationMs": 321, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "chromium", + "status": "passed", + "durationMs": 210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "chromium", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "chromium", + "status": "passed", + "durationMs": 209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "firefox", + "status": "passed", + "durationMs": 655, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "firefox", + "status": "passed", + "durationMs": 549, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "firefox", + "status": "passed", + "durationMs": 687, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "firefox", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "firefox", + "status": "passed", + "durationMs": 656, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "firefox", + "status": "passed", + "durationMs": 521, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "firefox", + "status": "passed", + "durationMs": 543, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "firefox", + "status": "passed", + "durationMs": 542, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "webkit", + "status": "passed", + "durationMs": 1665, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "webkit", + "status": "passed", + "durationMs": 1444, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "webkit", + "status": "passed", + "durationMs": 1072, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "webkit", + "status": "passed", + "durationMs": 1667, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "webkit", + "status": "passed", + "durationMs": 1218, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "webkit", + "status": "passed", + "durationMs": 1262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "webkit", + "status": "passed", + "durationMs": 1281, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "webkit", + "status": "passed", + "durationMs": 1090, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "chromium", + "status": "passed", + "durationMs": 257, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "chromium", + "status": "passed", + "durationMs": 128, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "chromium", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "chromium", + "status": "passed", + "durationMs": 148, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "firefox", + "status": "passed", + "durationMs": 331, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "firefox", + "status": "passed", + "durationMs": 346, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "firefox", + "status": "passed", + "durationMs": 325, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "firefox", + "status": "passed", + "durationMs": 323, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "webkit", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "webkit", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "webkit", + "status": "passed", + "durationMs": 416, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "webkit", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + } + ] + }, + "legacy": { + "file": "refactor/.cache/core22-layout-legacy-full.json", + "sha256": "df52e7da667135cd3d4818189fff06cb943a48d205a8dd146e294e0f2aba5d0c", + "stats": { + "startTime": "2026-09-11T14:59:36.680Z", + "duration": 435731.54199999996, + "expected": 1761, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "bytes": 212218, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "chromium", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "chromium", + "status": "passed", + "durationMs": 503, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "chromium", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "chromium", + "status": "passed", + "durationMs": 331, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "chromium", + "status": "passed", + "durationMs": 315, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "chromium", + "status": "passed", + "durationMs": 236, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "chromium", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "chromium", + "status": "passed", + "durationMs": 288, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "chromium", + "status": "passed", + "durationMs": 270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "chromium", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "chromium", + "status": "passed", + "durationMs": 282, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "firefox", + "status": "passed", + "durationMs": 2018, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "firefox", + "status": "passed", + "durationMs": 2293, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "firefox", + "status": "passed", + "durationMs": 2074, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "firefox", + "status": "passed", + "durationMs": 599, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "firefox", + "status": "passed", + "durationMs": 716, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "firefox", + "status": "passed", + "durationMs": 462, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "firefox", + "status": "passed", + "durationMs": 793, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "firefox", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "firefox", + "status": "passed", + "durationMs": 658, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "firefox", + "status": "passed", + "durationMs": 654, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "firefox", + "status": "passed", + "durationMs": 851, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "firefox", + "status": "passed", + "durationMs": 523, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "firefox", + "status": "passed", + "durationMs": 595, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: Shift F10 opens the default info action and closing info returns to the original control", + "project": "webkit", + "status": "passed", + "durationMs": 1351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context menu Escape closes before fullscreen and Tab continues from its origin", + "project": "webkit", + "status": "passed", + "durationMs": 1722, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard choice navigation waits for activation and retains existing selection events", + "project": "webkit", + "status": "passed", + "durationMs": 1369, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom context actions retain callbacks, typeahead and focus across replacement", + "project": "webkit", + "status": "passed", + "durationMs": 1491, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native context content retains input editing and button activation without nested roles", + "project": "webkit", + "status": "passed", + "durationMs": 1364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: disabled context menus do not claim the keyboard opening gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1214, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: a hidden or disabled origin falls back to the player and outside focus is preserved", + "project": "webkit", + "status": "passed", + "durationMs": 1840, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu reinitialization replaces listeners and a rejected duplicate initialization keeps them", + "project": "webkit", + "status": "passed", + "durationMs": 1434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: menu activation preserves callback focus transfers and destruction leaves detached controls inert", + "project": "webkit", + "status": "passed", + "durationMs": 1347, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: native editable context gestures remain native while pointer opening preserves external focus", + "project": "webkit", + "status": "passed", + "durationMs": 1336, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: keyboard menu remains inside the player and ignores a canceled opening", + "project": "webkit", + "status": "passed", + "durationMs": 1813, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: custom menu handoff to mini returns to the control that opened the menu", + "project": "webkit", + "status": "passed", + "durationMs": 1196, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-contextmenu.spec.js", + "title": "candidate: context keyboard and focus ownership stay local to each player", + "project": "webkit", + "status": "passed", + "durationMs": 1664, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "chromium", + "status": "passed", + "durationMs": 241, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "chromium", + "status": "passed", + "durationMs": 262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "chromium", + "status": "passed", + "durationMs": 237, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "chromium", + "status": "passed", + "durationMs": 248, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "chromium", + "status": "passed", + "durationMs": 241, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "chromium", + "status": "passed", + "durationMs": 232, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "chromium", + "status": "passed", + "durationMs": 261, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "chromium", + "status": "passed", + "durationMs": 286, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "chromium", + "status": "passed", + "durationMs": 277, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "firefox", + "status": "passed", + "durationMs": 499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "firefox", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "firefox", + "status": "passed", + "durationMs": 461, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "firefox", + "status": "passed", + "durationMs": 499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "firefox", + "status": "passed", + "durationMs": 619, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "firefox", + "status": "passed", + "durationMs": 671, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "firefox", + "status": "passed", + "durationMs": 658, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "firefox", + "status": "passed", + "durationMs": 660, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused control restores its new entry without intermediate focus", + "project": "webkit", + "status": "passed", + "durationMs": 1297, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing a focused control chooses a surviving neighbor and preserves external focus", + "project": "webkit", + "status": "passed", + "durationMs": 1252, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: failed control replacement recovers focus but a veto keeps the original focused entry", + "project": "webkit", + "status": "passed", + "durationMs": 1234, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: callbacks can transfer focus outside without an intermediate or final control focus", + "project": "webkit", + "status": "passed", + "durationMs": 1227, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: replacing a focused selector option transfers focus to the new control", + "project": "webkit", + "status": "passed", + "durationMs": 1356, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: removing the last focusable control leaves focus on the player without an extra sequential Tab stop", + "project": "webkit", + "status": "passed", + "durationMs": 1255, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: focus recovery skips unavailable controls and uses a replacement native button", + "project": "webkit", + "status": "passed", + "durationMs": 1227, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: an unrelated instance update cannot take focus from another player", + "project": "webkit", + "status": "passed", + "durationMs": 1449, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-controls.spec.js", + "title": "candidate: a disabled native replacement falls back and focus callbacks can destroy the player", + "project": "webkit", + "status": "passed", + "durationMs": 1167, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "chromium", + "status": "passed", + "durationMs": 311, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "chromium", + "status": "passed", + "durationMs": 285, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "chromium", + "status": "passed", + "durationMs": 241, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "chromium", + "status": "passed", + "durationMs": 248, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "chromium", + "status": "passed", + "durationMs": 236, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "firefox", + "status": "passed", + "durationMs": 787, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "firefox", + "status": "passed", + "durationMs": 857, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "firefox", + "status": "passed", + "durationMs": 721, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "firefox", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "firefox", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "firefox", + "status": "passed", + "durationMs": 1042, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "firefox", + "status": "passed", + "durationMs": 1250, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info keyboard entry, Space close and Escape preserve the opening control", + "project": "webkit", + "status": "passed", + "durationMs": 1568, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info pointer and programmatic visibility preserve unrelated focus", + "project": "webkit", + "status": "passed", + "durationMs": 1452, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: repeated info init replaces keyboard bindings and retains the current return target", + "project": "webkit", + "status": "passed", + "durationMs": 1068, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: info with a removed origin returns to the player and destruction disables retained controls", + "project": "webkit", + "status": "passed", + "durationMs": 1245, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "published: optional SSR info wrapper may be absent without preventing polling and close", + "project": "webkit", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: optional SSR info wrapper may be absent without preventing polling and close", + "project": "webkit", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-info.spec.js", + "title": "candidate: failed info name initialization releases its handlers and permits a clean retry", + "project": "webkit", + "status": "passed", + "durationMs": 1215, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "chromium", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "chromium", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 1494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "firefox", + "status": "passed", + "durationMs": 538, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "firefox", + "status": "passed", + "durationMs": 801, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 684, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen keyboard activation retains focus through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 1401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: native fullscreen external exit preserves the current in-player focus", + "project": "webkit", + "status": "passed", + "durationMs": 1393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: PiP keyboard control follows real native capability without a second playback action", + "project": "webkit", + "status": "passed", + "durationMs": 1151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-integration.spec.js", + "title": "candidate: SSR retains native nodes while keyboard controls toggle real subtitle cues and survive fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2314, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "chromium", + "status": "passed", + "durationMs": 274, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "chromium", + "status": "passed", + "durationMs": 261, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "chromium", + "status": "passed", + "durationMs": 296, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "chromium", + "status": "passed", + "durationMs": 237, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "chromium", + "status": "passed", + "durationMs": 284, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "firefox", + "status": "passed", + "durationMs": 708, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "firefox", + "status": "passed", + "durationMs": 516, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "firefox", + "status": "passed", + "durationMs": 447, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "firefox", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "firefox", + "status": "passed", + "durationMs": 453, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "firefox", + "status": "passed", + "durationMs": 518, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock uses one stable keyboard button, Escape unlocks and hidden controls leave Tab order", + "project": "webkit", + "status": "passed", + "durationMs": 1332, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: programmatic lock moves hidden control focus to unlock and caller tabindex survives", + "project": "webkit", + "status": "passed", + "durationMs": 1166, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: locked additions stay out of Tab order and removal or destruction releases focus attributes", + "project": "webkit", + "status": "passed", + "durationMs": 1213, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: lock Tab fallback works without native inert and preserves caller focus attributes", + "project": "webkit", + "status": "passed", + "durationMs": 1224, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: moving a control outside a locked region restores its tabindex and cleanup preserves later caller edits", + "project": "webkit", + "status": "passed", + "durationMs": 1139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-lock.spec.js", + "title": "candidate: remounting an already locked layer reflects actual state and replaces its keyboard scope", + "project": "webkit", + "status": "passed", + "durationMs": 1303, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "chromium", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "chromium", + "status": "passed", + "durationMs": 294, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "chromium", + "status": "passed", + "durationMs": 262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "chromium", + "status": "passed", + "durationMs": 225, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "chromium", + "status": "passed", + "durationMs": 262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "firefox", + "status": "passed", + "durationMs": 616, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "firefox", + "status": "passed", + "durationMs": 661, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "firefox", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "firefox", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "firefox", + "status": "passed", + "durationMs": 561, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "firefox", + "status": "passed", + "durationMs": 617, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini keyboard entry reaches close and stable playback controls and Escape returns focus", + "project": "webkit", + "status": "passed", + "durationMs": 1853, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini pointer entry preserves focus and Space closes after keyboard navigation", + "project": "webkit", + "status": "passed", + "durationMs": 1647, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: programmatic mini exit preserves external focus and removed return targets use the player", + "project": "webkit", + "status": "passed", + "durationMs": 1453, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: destroying from mini return focus cancels late notifications and retained controls", + "project": "webkit", + "status": "passed", + "durationMs": 1271, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini reuse keeps keyboard entry and never returns to a stale or hidden origin", + "project": "webkit", + "status": "passed", + "durationMs": 1654, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-mini.spec.js", + "title": "candidate: mini names use existing i18n keys and hidden controls cannot reactivate the mode", + "project": "webkit", + "status": "passed", + "durationMs": 1408, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "chromium", + "status": "passed", + "durationMs": 666, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "chromium", + "status": "passed", + "durationMs": 362, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "chromium", + "status": "passed", + "durationMs": 304, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "chromium", + "status": "passed", + "durationMs": 712, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "chromium", + "status": "passed", + "durationMs": 328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "chromium", + "status": "passed", + "durationMs": 344, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "chromium", + "status": "passed", + "durationMs": 313, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "chromium", + "status": "passed", + "durationMs": 280, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 316, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "chromium", + "status": "passed", + "durationMs": 283, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "firefox", + "status": "passed", + "durationMs": 951, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "firefox", + "status": "passed", + "durationMs": 623, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "firefox", + "status": "passed", + "durationMs": 533, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1041, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "firefox", + "status": "passed", + "durationMs": 724, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "firefox", + "status": "passed", + "durationMs": 661, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "firefox", + "status": "passed", + "durationMs": 653, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 834, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "firefox", + "status": "passed", + "durationMs": 647, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Tab entry, focus navigation and typeahead do not commit before Enter", + "project": "webkit", + "status": "passed", + "durationMs": 2286, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: selector Space commits once and Escape closes before web fullscreen exits", + "project": "webkit", + "status": "passed", + "durationMs": 1627, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: keyboard selector retains asynchronous choice ownership and disposal", + "project": "webkit", + "status": "passed", + "durationMs": 1371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: pointer hover and selector selection retain their existing click behavior", + "project": "webkit", + "status": "passed", + "durationMs": 2776, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: custom native controls retain their semantics and typing inside selector content", + "project": "webkit", + "status": "passed", + "durationMs": 1510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: empty selectors are disabled and selection callbacks keep explicitly moved focus", + "project": "webkit", + "status": "passed", + "durationMs": 1941, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: typeahead accepts prefixes, resets after navigation and leaves modified input alone", + "project": "webkit", + "status": "passed", + "durationMs": 1346, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: native trigger markup remains a single button and can open the existing popup", + "project": "webkit", + "status": "passed", + "durationMs": 1250, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: a dismissed hovered selector releases the next Escape to fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 1714, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-selector.spec.js", + "title": "candidate: hovering an empty selector does not announce an expanded popup", + "project": "webkit", + "status": "passed", + "durationMs": 1378, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "chromium", + "status": "passed", + "durationMs": 252, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "chromium", + "status": "passed", + "durationMs": 265, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "chromium", + "status": "passed", + "durationMs": 249, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "chromium", + "status": "passed", + "durationMs": 263, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "chromium", + "status": "passed", + "durationMs": 497, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "chromium", + "status": "passed", + "durationMs": 576, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 333, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "chromium", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "chromium", + "status": "passed", + "durationMs": 294, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "chromium", + "status": "passed", + "durationMs": 263, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "chromium", + "status": "passed", + "durationMs": 271, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "chromium", + "status": "passed", + "durationMs": 226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "firefox", + "status": "passed", + "durationMs": 505, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "firefox", + "status": "passed", + "durationMs": 657, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "firefox", + "status": "passed", + "durationMs": 1343, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "firefox", + "status": "passed", + "durationMs": 1379, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "firefox", + "status": "passed", + "durationMs": 1563, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "firefox", + "status": "passed", + "durationMs": 930, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 717, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "firefox", + "status": "passed", + "durationMs": 637, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "firefox", + "status": "passed", + "durationMs": 690, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "firefox", + "status": "passed", + "durationMs": 482, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "firefox", + "status": "passed", + "durationMs": 601, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is removed", + "project": "webkit", + "status": "passed", + "durationMs": 1124, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "project": "webkit", + "status": "passed", + "durationMs": 1202, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "project": "webkit", + "status": "passed", + "durationMs": 1312, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "project": "webkit", + "status": "passed", + "durationMs": 1201, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: long setting panels observe live button availability on every navigation", + "project": "webkit", + "status": "passed", + "durationMs": 2083, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "setting-navigation-work", + "data": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "project": "webkit", + "status": "passed", + "durationMs": 2776, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1599, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "project": "webkit", + "status": "passed", + "durationMs": 1948, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "project": "webkit", + "status": "passed", + "durationMs": 1380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "project": "webkit", + "status": "passed", + "durationMs": 1182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "project": "webkit", + "status": "passed", + "durationMs": 1380, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-setting.spec.js", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "project": "webkit", + "status": "passed", + "durationMs": 1062, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "chromium", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "chromium", + "status": "passed", + "durationMs": 766, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "chromium", + "status": "passed", + "durationMs": 304, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "chromium", + "status": "passed", + "durationMs": 257, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "firefox", + "status": "passed", + "durationMs": 969, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "firefox", + "status": "passed", + "durationMs": 1085, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "firefox", + "status": "passed", + "durationMs": 857, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "firefox", + "status": "passed", + "durationMs": 627, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress is the first control, seeks with owned keys and follows actual media time", + "project": "webkit", + "status": "passed", + "durationMs": 1796, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: volume panel opens from keyboard focus and the slider unmutes without seeking", + "project": "webkit", + "status": "passed", + "durationMs": 1992, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: unknown duration disables progress until metadata returns and labels use i18n", + "project": "webkit", + "status": "passed", + "durationMs": 1319, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility-slider.spec.js", + "title": "candidate: progress removal and volume destruction inside callbacks cancel pending writes", + "project": "webkit", + "status": "passed", + "durationMs": 1346, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "chromium", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "chromium", + "status": "passed", + "durationMs": 1346, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "chromium", + "status": "passed", + "durationMs": 262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "chromium", + "status": "passed", + "durationMs": 243, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "chromium", + "status": "passed", + "durationMs": 791, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "firefox", + "status": "passed", + "durationMs": 465, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "firefox", + "status": "passed", + "durationMs": 965, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "firefox", + "status": "passed", + "durationMs": 1896, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "firefox", + "status": "passed", + "durationMs": 644, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "firefox", + "status": "passed", + "durationMs": 584, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "firefox", + "status": "passed", + "durationMs": 1040, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "published: Tab skips the non-interactive main controls", + "project": "webkit", + "status": "passed", + "durationMs": 1175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: keyboard reaches stable play control and toggles once with focus retained", + "project": "webkit", + "status": "passed", + "durationMs": 1617, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: mute state, focus visibility and automatic hiding follow keyboard focus", + "project": "webkit", + "status": "passed", + "durationMs": 2010, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: custom control keyboard clicks retain the callback and release on replacement", + "project": "webkit", + "status": "passed", + "durationMs": 1317, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: native buttons inside custom controls retain activation without player hotkeys", + "project": "webkit", + "status": "passed", + "durationMs": 1226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "accessibility.spec.js", + "title": "candidate: pointer focus does not prevent the existing automatic control hiding", + "project": "webkit", + "status": "passed", + "durationMs": 1937, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "chromium", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "chromium", + "status": "passed", + "durationMs": 353, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "chromium", + "status": "passed", + "durationMs": 290, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "chromium", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "firefox", + "status": "passed", + "durationMs": 634, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "firefox", + "status": "passed", + "durationMs": 758, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "firefox", + "status": "passed", + "durationMs": 450, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "firefox", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "firefox", + "status": "passed", + "durationMs": 794, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "firefox", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "firefox", + "status": "passed", + "durationMs": 1098, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "firefox", + "status": "passed", + "durationMs": 1245, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "firefox", + "status": "passed", + "durationMs": 1484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "firefox", + "status": "passed", + "durationMs": 1474, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume close and playback rejection preserve the UI contract", + "project": "webkit", + "status": "passed", + "durationMs": 2208, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume API retains storage envelope, ID lookup and deletion", + "project": "webkit", + "status": "passed", + "durationMs": 1141, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: resume button seeks and plays actual video", + "project": "webkit", + "status": "passed", + "durationMs": 1759, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: repeated restart leaves one effective click for the current resume target", + "project": "webkit", + "status": "passed", + "durationMs": 1168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "published: restart below threshold invalidates the old prompt click", + "project": "webkit", + "status": "passed", + "durationMs": 967, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume close and playback rejection preserve the UI contract", + "project": "webkit", + "status": "passed", + "durationMs": 2077, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume API retains storage envelope, ID lookup and deletion", + "project": "webkit", + "status": "passed", + "durationMs": 1282, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: resume button seeks and plays actual video", + "project": "webkit", + "status": "passed", + "durationMs": 1694, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: repeated restart leaves one effective click for the current resume target", + "project": "webkit", + "status": "passed", + "durationMs": 924, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart below threshold invalidates the old prompt click", + "project": "webkit", + "status": "passed", + "durationMs": 1033, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: restart cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1181, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: source cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1006, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: remove cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1106, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destroy cancels obsolete resume timers and subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1037, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "auto-playback.spec.js", + "title": "candidate: destruction inside seek prevents resume playback continuation", + "project": "webkit", + "status": "passed", + "durationMs": 999, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 496, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 477, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "firefox", + "status": "passed", + "durationMs": 370, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 592, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 508, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "firefox", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "firefox", + "status": "passed", + "durationMs": 526, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "firefox", + "status": "passed", + "durationMs": 502, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "firefox", + "status": "passed", + "durationMs": 523, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1230, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=true live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1079, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1047, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: builtin availability keeps mobile=false live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "webkit", + "status": "passed", + "durationMs": 1005, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: removed lock icons stop observing the still-usable plugin state API", + "project": "webkit", + "status": "passed", + "durationMs": 1127, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "published: miniature progress follows the control event without adding public state", + "project": "webkit", + "status": "passed", + "durationMs": 1150, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1160, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=true live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1055, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=true conditions", + "project": "webkit", + "status": "passed", + "durationMs": 1098, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: builtin availability keeps mobile=false live=false conditions", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: lock keeps public state, repeated events, DOM classes and icon switching", + "project": "webkit", + "status": "passed", + "durationMs": 1147, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: removed lock icons stop observing the still-usable plugin state API", + "project": "webkit", + "status": "passed", + "durationMs": 1205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: miniature progress follows the control event without adding public state", + "project": "webkit", + "status": "passed", + "durationMs": 1089, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "builtin-layers.spec.js", + "title": "candidate: retained builtin setters and events do not mutate a destroyed player", + "project": "webkit", + "status": "passed", + "durationMs": 974, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "chromium", + "status": "passed", + "durationMs": 329, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "chromium", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "chromium", + "status": "passed", + "durationMs": 249, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "chromium", + "status": "passed", + "durationMs": 129, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "chromium", + "status": "passed", + "durationMs": 122, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "firefox", + "status": "passed", + "durationMs": 1616, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "firefox", + "status": "passed", + "durationMs": 670, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "firefox", + "status": "passed", + "durationMs": 623, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "firefox", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "firefox", + "status": "passed", + "durationMs": 488, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "firefox", + "status": "passed", + "durationMs": 291, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "published-only observations: blank title, NaN and once-only metadata are historical defects", + "project": "webkit", + "status": "passed", + "durationMs": 1702, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate clears titles on blank chapters, zero hover and replacement", + "project": "webkit", + "status": "passed", + "durationMs": 2001, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate rejects NaN and can recover after an invalid update", + "project": "webkit", + "status": "passed", + "durationMs": 1193, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate releases only its listeners and DOM across multiple instances and early destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1236, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate ignores pending metadata initialization after immediate destroy", + "project": "webkit", + "status": "passed", + "durationMs": 442, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "candidate deduplicates stylesheet injection while the document is loading", + "project": "webkit", + "status": "passed", + "durationMs": 406, + "url": "about:blank", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "chromium", + "status": "passed", + "durationMs": 282, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "chromium", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "chromium", + "status": "passed", + "durationMs": 289, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "chromium", + "status": "passed", + "durationMs": 242, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "firefox", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "firefox", + "status": "passed", + "durationMs": 706, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "firefox", + "status": "passed", + "durationMs": 616, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "firefox", + "status": "passed", + "durationMs": 765, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "webkit", + "status": "passed", + "durationMs": 1796, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "webkit", + "status": "passed", + "durationMs": 2100, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "webkit", + "status": "passed", + "durationMs": 1536, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1855, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "chromium", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "chromium", + "status": "passed", + "durationMs": 286, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "chromium", + "status": "passed", + "durationMs": 244, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "firefox", + "status": "passed", + "durationMs": 677, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "firefox", + "status": "passed", + "durationMs": 839, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "firefox", + "status": "passed", + "durationMs": 1412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "firefox", + "status": "passed", + "durationMs": 567, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "factory, registration, input normalization and safe title text", + "project": "webkit", + "status": "passed", + "durationMs": 1641, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "progress bars, real hover, title edges and boundary seek", + "project": "webkit", + "status": "passed", + "durationMs": 1748, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "sync update, Infinity, object identity, empty lists and invalid data", + "project": "webkit", + "status": "passed", + "durationMs": 1348, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "chapter.spec.js", + "title": "explicit source update and core-owned destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1899, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=candidate", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 339, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 341, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 591, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "chromium", + "status": "passed", + "durationMs": 595, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "chromium", + "status": "passed", + "durationMs": 198, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 220, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "chromium", + "status": "passed", + "durationMs": 624, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "chromium", + "status": "passed", + "durationMs": 167, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "chromium", + "status": "passed", + "durationMs": 289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 569, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "firefox", + "status": "passed", + "durationMs": 1178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 547, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 799, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 378, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "firefox", + "status": "passed", + "durationMs": 355, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "firefox", + "status": "passed", + "durationMs": 352, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "firefox", + "status": "passed", + "durationMs": 868, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "firefox", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "firefox", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "firefox", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "firefox", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "firefox", + "status": "passed", + "durationMs": 1697, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "firefox", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "firefox", + "status": "passed", + "durationMs": 1346, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "firefox", + "status": "passed", + "durationMs": 345, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "firefox", + "status": "passed", + "durationMs": 398, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "firefox", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "firefox", + "status": "passed", + "durationMs": 491, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "firefox", + "status": "passed", + "durationMs": 1536, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 642, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": false, + "reads": 0 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: initial control measurement uses the browser layout phase with fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 631, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [], + "work": [ + { + "name": "constructor-control-layout-reads", + "data": { + "fallback": true, + "reads": 1 + } + } + ] + }, + { + "file": "components.spec.js", + "title": "candidate: destroying before initial control observation leaves no late layout write", + "project": "webkit", + "status": "passed", + "durationMs": 504, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 816, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: control layout follows resize and removal with observer fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 940, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector background clicks and rejection ownership are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 580, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "webkit", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: failed mounted reentry preserves its successful replacement", + "project": "webkit", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: context menu builtin selection and owned updates preserve state", + "project": "webkit", + "status": "passed", + "durationMs": 3049, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a prototype-named component keeps the registry prototype intact", + "project": "webkit", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: component factories, ordering, bound methods and update hooks retain contracts", + "project": "webkit", + "status": "passed", + "durationMs": 423, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: removed builtin time and volume controls stop owned effects", + "project": "webkit", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: selector items can be reused by an update without changing getter flags", + "project": "webkit", + "status": "passed", + "durationMs": 432, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: async selector results cannot overwrite a newer choice or removed entry", + "project": "webkit", + "status": "passed", + "durationMs": 408, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: a failed mounted hook rolls back its DOM alias and listeners", + "project": "webkit", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: reentrant beforeUnmount removes only once", + "project": "webkit", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: narrow controls stay inside the player without hiding buttons", + "project": "webkit", + "status": "passed", + "durationMs": 843, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "published: progress markers treat text as data and removed drags cannot seek", + "project": "webkit", + "status": "passed", + "durationMs": 1070, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector background clicks and rejection ownership are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 526, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: beforeUnmount errors remain retryable and detached nodes can be removed", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: failed mounted reentry preserves its successful replacement", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: context menu builtin selection and owned updates preserve state", + "project": "webkit", + "status": "passed", + "durationMs": 3101, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a prototype-named component keeps the registry prototype intact", + "project": "webkit", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: component factories, ordering, bound methods and update hooks retain contracts", + "project": "webkit", + "status": "passed", + "durationMs": 439, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: removed builtin time and volume controls stop owned effects", + "project": "webkit", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: selector items can be reused by an update without changing getter flags", + "project": "webkit", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: async selector results cannot overwrite a newer choice or removed entry", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: a failed mounted hook rolls back its DOM alias and listeners", + "project": "webkit", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: reentrant beforeUnmount removes only once", + "project": "webkit", + "status": "passed", + "durationMs": 408, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: narrow controls stay inside the player without hiding buttons", + "project": "webkit", + "status": "passed", + "durationMs": 871, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "components.spec.js", + "title": "candidate: progress markers treat text as data and removed drags cannot seek", + "project": "webkit", + "status": "passed", + "durationMs": 1092, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "chromium", + "status": "passed", + "durationMs": 202, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "chromium", + "status": "passed", + "durationMs": 225, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "chromium", + "status": "passed", + "durationMs": 201, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "firefox", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "firefox", + "status": "passed", + "durationMs": 536, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "firefox", + "status": "passed", + "durationMs": 532, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "firefox", + "status": "passed", + "durationMs": 536, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: plugin, toggle, setting and static runtime return contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1220, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "published: native subtitle update events carry cue arrays", + "project": "webkit", + "status": "passed", + "durationMs": 1491, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: plugin, toggle, setting and static runtime return contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "declarations.spec.js", + "title": "candidate: native subtitle update events carry cue arrays", + "project": "webkit", + "status": "passed", + "durationMs": 1434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "chromium", + "status": "passed", + "durationMs": 184, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 214, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "chromium", + "status": "passed", + "durationMs": 226, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "chromium", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 194, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 204, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "chromium", + "status": "passed", + "durationMs": 200, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "firefox", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "firefox", + "status": "passed", + "durationMs": 382, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "firefox", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 410, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "firefox", + "status": "passed", + "durationMs": 545, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "firefox", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "firefox", + "status": "passed", + "durationMs": 781, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "firefox", + "status": "passed", + "durationMs": 550, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "firefox", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 401, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "firefox", + "status": "passed", + "durationMs": 551, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "firefox", + "status": "passed", + "durationMs": 1367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "firefox", + "status": "passed", + "durationMs": 555, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "firefox", + "status": "passed", + "durationMs": 398, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini retains first-entry and reuse DOM order and display", + "project": "webkit", + "status": "passed", + "durationMs": 963, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: mini restores the original video parent and sibling after repeated entry", + "project": "webkit", + "status": "passed", + "durationMs": 1001, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=false removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1153, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "published: destroying active mini removeHtml=true removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1147, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini retains first-entry and reuse DOM order and display", + "project": "webkit", + "status": "passed", + "durationMs": 1035, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini restores the original video parent and sibling after repeated entry", + "project": "webkit", + "status": "passed", + "durationMs": 1034, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=false removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1039, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying active mini removeHtml=true removes the owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 1001, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: hiding mini cancels drag and later document events cannot persist a hidden popup", + "project": "webkit", + "status": "passed", + "durationMs": 1098, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini remains in the viewport on small screens", + "project": "webkit", + "status": "passed", + "durationMs": 1029, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini drag stores the actual position and playback buttons remain usable", + "project": "webkit", + "status": "passed", + "durationMs": 2404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini exit failure keeps the active video and can restore on retry", + "project": "webkit", + "status": "passed", + "durationMs": 1036, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini reentry during restoration retains the new placement snapshot", + "project": "webkit", + "status": "passed", + "durationMs": 1078, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction hide releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 1103, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction destroy releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 947, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini construction fail releases incomplete UI and restores the video", + "project": "webkit", + "status": "passed", + "durationMs": 1012, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini preserves a caller-owned popup on destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1029, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: reentrant mini creation allocates only one owned popup", + "project": "webkit", + "status": "passed", + "durationMs": 985, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: mini switches to body web fullscreen and restores the original video placement", + "project": "webkit", + "status": "passed", + "durationMs": 1087, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-mini.spec.js", + "title": "candidate: destroying a mini drag removes its document subscriptions", + "project": "webkit", + "status": "passed", + "durationMs": 1070, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "chromium", + "status": "passed", + "durationMs": 322, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "chromium", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "chromium", + "status": "passed", + "durationMs": 385, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "chromium", + "status": "passed", + "durationMs": 407, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "chromium", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "chromium", + "status": "passed", + "durationMs": 392, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "chromium", + "status": "passed", + "durationMs": 209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "chromium", + "status": "passed", + "durationMs": 492, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "firefox", + "status": "passed", + "durationMs": 1304, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "firefox", + "status": "passed", + "durationMs": 662, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "firefox", + "status": "passed", + "durationMs": 687, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "firefox", + "status": "passed", + "durationMs": 456, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "firefox", + "status": "passed", + "durationMs": 1410, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "firefox", + "status": "passed", + "durationMs": 677, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "firefox", + "status": "passed", + "durationMs": 580, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 555, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "firefox", + "status": "passed", + "durationMs": 621, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 415, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 536, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 567, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "firefox", + "status": "passed", + "durationMs": 530, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 658, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "firefox", + "status": "passed", + "durationMs": 652, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: void exit waits for the owned video to leave and accepts another owner as completion", + "project": "webkit", + "status": "passed", + "durationMs": 1128, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: native fullscreen belongs to its player and other players cannot exit it", + "project": "webkit", + "status": "passed", + "durationMs": 1709, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: destroyed players stop receiving later native fullscreen events", + "project": "webkit", + "status": "passed", + "durationMs": 1591, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "published: rejected native fullscreen request removes its temporary change listener", + "project": "webkit", + "status": "passed", + "durationMs": 1302, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: native fullscreen belongs to its player and other players cannot exit it", + "project": "webkit", + "status": "passed", + "durationMs": 1560, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: destroyed players stop receiving later native fullscreen events", + "project": "webkit", + "status": "passed", + "durationMs": 1841, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected native fullscreen request removes its temporary change listener", + "project": "webkit", + "status": "passed", + "durationMs": 1151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: fullscreen assignment rejection shows notice without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 1316, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: reentrant entry preserves real fullscreen UI and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1630, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-exit releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1204, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry promise-destroy releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1294, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-exit releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1150, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: pending native entry void-destroy releases a late own entry", + "project": "webkit", + "status": "passed", + "durationMs": 1210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: cancelling an actual native request in the initiating click releases fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 1708, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-native.spec.js", + "title": "candidate: rejected exit retains actual fullscreen state and can be retried", + "project": "webkit", + "status": "passed", + "durationMs": 1989, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "chromium", + "status": "passed", + "durationMs": 216, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "chromium", + "status": "passed", + "durationMs": 297, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "chromium", + "status": "passed", + "durationMs": 315, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "chromium", + "status": "passed", + "durationMs": 212, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "chromium", + "status": "passed", + "durationMs": 304, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "chromium", + "status": "passed", + "durationMs": 298, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "chromium", + "status": "passed", + "durationMs": 273, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "chromium", + "status": "passed", + "durationMs": 289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "firefox", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "firefox", + "status": "passed", + "durationMs": 638, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "firefox", + "status": "passed", + "durationMs": 541, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "firefox", + "status": "passed", + "durationMs": 549, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "firefox", + "status": "passed", + "durationMs": 816, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "firefox", + "status": "passed", + "durationMs": 591, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "firefox", + "status": "passed", + "durationMs": 544, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "firefox", + "status": "passed", + "durationMs": 561, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "firefox", + "status": "passed", + "durationMs": 424, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: a cancelled rotation timer cannot rotate a later fullscreen session early", + "project": "webkit", + "status": "passed", + "durationMs": 1125, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=false", + "project": "webkit", + "status": "passed", + "durationMs": 1151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotation destruction restores styles and cancels subscriptions removeHtml=true", + "project": "webkit", + "status": "passed", + "durationMs": 966, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: destroying a pending rotation removes its timer and produces no late resize", + "project": "webkit", + "status": "passed", + "durationMs": 1077, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated playback supports ratio and flip changes before restoring normal layout", + "project": "webkit", + "status": "passed", + "durationMs": 1189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: repeated web fullscreen retains rotated dimensions and final styles", + "project": "webkit", + "status": "passed", + "durationMs": 1176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: rotated web fullscreen restores original inline geometry", + "project": "webkit", + "status": "passed", + "durationMs": 1150, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "published: late orientation lock after fullscreen exit does not reactivate the player", + "project": "webkit", + "status": "passed", + "durationMs": 1010, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: rotated web fullscreen restores original inline geometry", + "project": "webkit", + "status": "passed", + "durationMs": 1026, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-orientation.spec.js", + "title": "candidate: late orientation lock after fullscreen exit does not reactivate the player", + "project": "webkit", + "status": "passed", + "durationMs": 1027, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "firefox", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "firefox", + "status": "passed", + "durationMs": 446, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "firefox", + "status": "passed", + "durationMs": 1517, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "firefox", + "status": "passed", + "durationMs": 1301, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "firefox", + "status": "passed", + "durationMs": 531, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "webkit", + "status": "passed", + "durationMs": 1073, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: WebKit PiP follows native UI transitions", + "project": "webkit", + "status": "passed", + "durationMs": 1190, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "published: destroying WebKit PiP returns presentation to inline", + "project": "webkit", + "status": "passed", + "durationMs": 997, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP keeps boolean state and repeated synchronous setter events", + "project": "webkit", + "status": "passed", + "durationMs": 1046, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP follows native UI transitions", + "project": "webkit", + "status": "passed", + "durationMs": 1136, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: destroying WebKit PiP returns presentation to inline", + "project": "webkit", + "status": "passed", + "durationMs": 1040, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip-webkit.spec.js", + "title": "candidate: WebKit PiP pending entry is cleaned up after destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1019, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 210, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "chromium", + "status": "passed", + "durationMs": 759, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "firefox", + "status": "passed", + "durationMs": 533, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "firefox", + "status": "passed", + "durationMs": 1316, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "firefox", + "status": "passed", + "durationMs": 452, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "firefox", + "status": "passed", + "durationMs": 497, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "firefox", + "status": "passed", + "durationMs": 490, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "firefox", + "status": "passed", + "durationMs": 531, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "firefox", + "status": "passed", + "durationMs": 1047, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: native PiP preserves element/null getter, void setter and boolean events", + "project": "webkit", + "status": "passed", + "durationMs": 976, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: a player cannot report or exit another video's PiP", + "project": "webkit", + "status": "passed", + "durationMs": 983, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "published: destroy releases active PiP without a late player event", + "project": "webkit", + "status": "passed", + "durationMs": 966, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: native PiP preserves element/null getter, void setter and boolean events", + "project": "webkit", + "status": "passed", + "durationMs": 1112, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: a player cannot report or exit another video's PiP", + "project": "webkit", + "status": "passed", + "durationMs": 1031, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: destroy releases active PiP without a late player event", + "project": "webkit", + "status": "passed", + "durationMs": 1079, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP cancel releases late native entry", + "project": "webkit", + "status": "passed", + "durationMs": 1168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: pending PiP destroy releases late native entry", + "project": "webkit", + "status": "passed", + "durationMs": 1058, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: rejected PiP assignment shows notice without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 1370, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-pip.spec.js", + "title": "candidate: actual native PiP gesture and playback or explicit unsupported capability", + "project": "webkit", + "status": "passed", + "durationMs": 1434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "chromium", + "status": "passed", + "durationMs": 205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "chromium", + "status": "passed", + "durationMs": 164, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "chromium", + "status": "passed", + "durationMs": 204, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "firefox", + "status": "passed", + "durationMs": 512, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "firefox", + "status": "passed", + "durationMs": 529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "firefox", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "firefox", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 389, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "firefox", + "status": "passed", + "durationMs": 493, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "firefox", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "firefox", + "status": "passed", + "durationMs": 392, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "firefox", + "status": "passed", + "durationMs": 514, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "firefox", + "status": "passed", + "durationMs": 425, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "webkit", + "status": "passed", + "durationMs": 1118, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing methods remain detachable own properties and ratio parsing retains legacy coercion", + "project": "webkit", + "status": "passed", + "durationMs": 1058, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: hidden containers defer sizing and recover after becoming visible", + "project": "webkit", + "status": "passed", + "durationMs": 1151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: malformed ratios preserve layout while retaining notices, datasets and events", + "project": "webkit", + "status": "passed", + "durationMs": 1032, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: retained display setters and sizing methods do not write or emit after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1125, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: sizing preserves valid geometry, return values and emitted measurements", + "project": "webkit", + "status": "passed", + "durationMs": 1471, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: aspect ratio and flip preserve dataset, notices and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1685, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "published: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "webkit", + "status": "passed", + "durationMs": 2765, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: sizing preserves valid geometry, return values and emitted measurements", + "project": "webkit", + "status": "passed", + "durationMs": 2225, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: aspect ratio and flip preserve dataset, notices and event order", + "project": "webkit", + "status": "passed", + "durationMs": 2618, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-sizing.spec.js", + "title": "candidate: unresolved media dimensions do not partially change layout or emit NaN height", + "project": "webkit", + "status": "passed", + "durationMs": 2343, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "chromium", + "status": "passed", + "durationMs": 199, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "chromium", + "status": "passed", + "durationMs": 212, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "chromium", + "status": "passed", + "durationMs": 232, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "chromium", + "status": "passed", + "durationMs": 222, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "chromium", + "status": "passed", + "durationMs": 247, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "firefox", + "status": "passed", + "durationMs": 454, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "firefox", + "status": "passed", + "durationMs": 416, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "firefox", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "firefox", + "status": "passed", + "durationMs": 1259, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "firefox", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: video-only fullscreen reads its native video state and deduplicates signals", + "project": "webkit", + "status": "passed", + "durationMs": 2365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "published: destroying video-only fullscreen releases native presentation", + "project": "webkit", + "status": "passed", + "durationMs": 2430, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen reads its native video state and deduplicates signals", + "project": "webkit", + "status": "passed", + "durationMs": 2195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: destroying video-only fullscreen releases native presentation", + "project": "webkit", + "status": "passed", + "durationMs": 2479, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: cancelled video-only entry after destroy is released without late player events", + "project": "webkit", + "status": "passed", + "durationMs": 2183, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-video-fullscreen.spec.js", + "title": "candidate: video-only fullscreen preserves synchronous errors and supports exit retry", + "project": "webkit", + "status": "passed", + "durationMs": 1690, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "chromium", + "status": "passed", + "durationMs": 198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "chromium", + "status": "passed", + "durationMs": 205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "chromium", + "status": "passed", + "durationMs": 219, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "firefox", + "status": "passed", + "durationMs": 1464, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "firefox", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "firefox", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "firefox", + "status": "passed", + "durationMs": 548, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "firefox", + "status": "passed", + "durationMs": 503, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "firefox", + "status": "passed", + "durationMs": 545, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "firefox", + "status": "passed", + "durationMs": 1284, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "firefox", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "firefox", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "firefox", + "status": "passed", + "durationMs": 364, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "firefox", + "status": "passed", + "durationMs": 478, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "firefox", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 398, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "firefox", + "status": "passed", + "durationMs": 561, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "firefox", + "status": "passed", + "durationMs": 397, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "firefox", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 501, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "firefox", + "status": "passed", + "durationMs": 535, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "project": "webkit", + "status": "passed", + "durationMs": 1351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "project": "webkit", + "status": "passed", + "durationMs": 1575, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "project": "webkit", + "status": "passed", + "durationMs": 1262, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "project": "webkit", + "status": "passed", + "durationMs": 1270, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "project": "webkit", + "status": "passed", + "durationMs": 1500, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "project": "webkit", + "status": "passed", + "durationMs": 1311, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed body move restores style and keeps its original error", + "project": "webkit", + "status": "passed", + "durationMs": 1165, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "project": "webkit", + "status": "passed", + "durationMs": 1288, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "project": "webkit", + "status": "passed", + "durationMs": 1321, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "project": "webkit", + "status": "passed", + "durationMs": 1267, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "webkit", + "status": "passed", + "durationMs": 1178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "project": "webkit", + "status": "passed", + "durationMs": 1076, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "project": "webkit", + "status": "passed", + "durationMs": 1253, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1057, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 991, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "project": "webkit", + "status": "passed", + "durationMs": 971, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "project": "webkit", + "status": "passed", + "durationMs": 1284, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "project": "webkit", + "status": "passed", + "durationMs": 1077, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "project": "webkit", + "status": "passed", + "durationMs": 1158, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "display-web.spec.js", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "project": "webkit", + "status": "passed", + "durationMs": 1191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "chromium", + "status": "passed", + "durationMs": 131, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "firefox", + "status": "passed", + "durationMs": 337, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "firefox", + "status": "passed", + "durationMs": 324, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "firefox", + "status": "passed", + "durationMs": 345, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "published: DOM utilities preserve native tree, style and event-path behavior", + "project": "webkit", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: DOM utilities preserve native tree, style and event-path behavior", + "project": "webkit", + "status": "passed", + "durationMs": 487, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "dom-boundaries.spec.js", + "title": "candidate: safe-area measurement releases the native probe after failure unlike the previous workspace implementation", + "project": "webkit", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "chromium", + "status": "passed", + "durationMs": 989, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "firefox", + "status": "passed", + "durationMs": 1338, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "editor-types.spec.js", + "title": "docs Monaco worker consumes generated core types and runs a typed player example", + "project": "webkit", + "status": "passed", + "durationMs": 1846, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "chromium", + "status": "passed", + "durationMs": 129, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "firefox", + "status": "passed", + "durationMs": 356, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "firefox", + "status": "passed", + "durationMs": 360, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "published: emitter event names and once across nested dispatch", + "project": "webkit", + "status": "passed", + "durationMs": 381, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "emitter.spec.js", + "title": "candidate: emitter event names and once across nested dispatch", + "project": "webkit", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "chromium", + "status": "passed", + "durationMs": 479, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "chromium", + "status": "passed", + "durationMs": 164, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "chromium", + "status": "passed", + "durationMs": 194, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "chromium", + "status": "passed", + "durationMs": 180, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "chromium", + "status": "passed", + "durationMs": 489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "chromium", + "status": "passed", + "durationMs": 217, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "chromium", + "status": "passed", + "durationMs": 183, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "firefox", + "status": "passed", + "durationMs": 763, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "firefox", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "firefox", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "firefox", + "status": "passed", + "durationMs": 1268, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "firefox", + "status": "passed", + "durationMs": 1173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "firefox", + "status": "passed", + "durationMs": 744, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "firefox", + "status": "passed", + "durationMs": 704, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "firefox", + "status": "passed", + "durationMs": 558, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "firefox", + "status": "passed", + "durationMs": 1379, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: actual animation frames follow playback and stop after destruction inside raf", + "project": "webkit", + "status": "passed", + "durationMs": 1595, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: Events keeps its public fields, prototype and detached native methods", + "project": "webkit", + "status": "passed", + "durationMs": 963, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: screen orientation dispatch works when onchange has no assigned handler", + "project": "webkit", + "status": "passed", + "durationMs": 1205, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: destruction releases the scroll throttle reset timer", + "project": "webkit", + "status": "passed", + "durationMs": 962, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "published: view visibility uses the container's current iframe viewport", + "project": "webkit", + "status": "passed", + "durationMs": 1002, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: actual animation frames follow playback and stop after destruction inside raf", + "project": "webkit", + "status": "passed", + "durationMs": 1489, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: Events keeps its public fields, prototype and detached native methods", + "project": "webkit", + "status": "passed", + "durationMs": 942, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: screen orientation dispatch works when onchange has no assigned handler", + "project": "webkit", + "status": "passed", + "durationMs": 1005, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: destruction releases the scroll throttle reset timer", + "project": "webkit", + "status": "passed", + "durationMs": 1169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "event-scheduling.spec.js", + "title": "candidate: view visibility uses the container's current iframe viewport", + "project": "webkit", + "status": "passed", + "durationMs": 1205, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "chromium", + "status": "passed", + "durationMs": 316, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "chromium", + "status": "passed", + "durationMs": 444, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "chromium", + "status": "passed", + "durationMs": 416, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "chromium", + "status": "passed", + "durationMs": 309, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "chromium", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "chromium", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "chromium", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "chromium", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "firefox", + "status": "passed", + "durationMs": 788, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "firefox", + "status": "passed", + "durationMs": 1032, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "firefox", + "status": "passed", + "durationMs": 1013, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "firefox", + "status": "passed", + "durationMs": 912, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "firefox", + "status": "passed", + "durationMs": 814, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "firefox", + "status": "passed", + "durationMs": 913, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 926, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 948, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 948, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "firefox", + "status": "passed", + "durationMs": 959, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "firefox", + "status": "passed", + "durationMs": 934, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: native source reset retains its default playback rate behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1698, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: long press accelerates real playback and restores its prior rate", + "project": "webkit", + "status": "passed", + "durationMs": 1400, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "published: touchcancel releases an active long press", + "project": "webkit", + "status": "passed", + "durationMs": 1460, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: native source reset retains its default playback rate behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1677, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: long press accelerates real playback and restores its prior rate", + "project": "webkit", + "status": "passed", + "durationMs": 1499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: touchcancel releases an active long press", + "project": "webkit", + "status": "passed", + "durationMs": 1328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: lock restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1356, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: pause restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1470, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: source restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 2018, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: destroy restores the active long-press rate", + "project": "webkit", + "status": "passed", + "durationMs": 1397, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "fast-forward.spec.js", + "title": "candidate: repeated pending touches own a single timer which destruction cancels", + "project": "webkit", + "status": "passed", + "durationMs": 1231, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "chromium", + "status": "passed", + "durationMs": 216, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "chromium", + "status": "passed", + "durationMs": 464, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "chromium", + "status": "passed", + "durationMs": 311, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "chromium", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 297, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 306, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "chromium", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "chromium", + "status": "passed", + "durationMs": 350, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "chromium", + "status": "passed", + "durationMs": 436, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "chromium", + "status": "passed", + "durationMs": 459, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 421, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 436, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "chromium", + "status": "passed", + "durationMs": 311, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "chromium", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "firefox", + "status": "passed", + "durationMs": 664, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "firefox", + "status": "passed", + "durationMs": 906, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "firefox", + "status": "passed", + "durationMs": 1031, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 917, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 691, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 899, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 1037, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "firefox", + "status": "passed", + "durationMs": 696, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "firefox", + "status": "passed", + "durationMs": 431, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "firefox", + "status": "passed", + "durationMs": 695, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "firefox", + "status": "passed", + "durationMs": 926, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "firefox", + "status": "passed", + "durationMs": 1499, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 1780, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 909, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 1034, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "firefox", + "status": "passed", + "durationMs": 908, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "firefox", + "status": "passed", + "durationMs": 1062, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: a gesture before first play still issues the requested seek", + "project": "webkit", + "status": "passed", + "durationMs": 966, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: progress touch keeps absolute position and bar-before-seek ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1561, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy during absolute progress touch stops the following seek", + "project": "webkit", + "status": "passed", + "durationMs": 1619, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "webkit", + "status": "passed", + "durationMs": 1721, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: cancel invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1732, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: lock invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1713, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: multitouch invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1663, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: identifier invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1502, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "published: destroy from a touch seek callback prevents the later progress notification", + "project": "webkit", + "status": "passed", + "durationMs": 1571, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: a gesture before first play still issues the requested seek", + "project": "webkit", + "status": "passed", + "durationMs": 1104, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: progress touch keeps absolute position and bar-before-seek ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1722, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy during absolute progress touch stops the following seek", + "project": "webkit", + "status": "passed", + "durationMs": 1589, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: normal touch drag keeps seek/bar ordering and original touch identity", + "project": "webkit", + "status": "passed", + "durationMs": 1741, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: cancel invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1521, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: lock invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1602, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: multitouch invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1602, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: identifier invalidates an in-progress gesture", + "project": "webkit", + "status": "passed", + "durationMs": 1859, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "gesture.spec.js", + "title": "candidate: destroy from a touch seek callback prevents the later progress notification", + "project": "webkit", + "status": "passed", + "durationMs": 1587, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "chromium", + "status": "passed", + "durationMs": 199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "firefox", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "firefox", + "status": "passed", + "durationMs": 1392, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "firefox", + "status": "passed", + "durationMs": 482, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "firefox", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "firefox", + "status": "passed", + "durationMs": 389, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: rebind during native global registration cancels the interrupted binding", + "project": "webkit", + "status": "passed", + "durationMs": 1123, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: destroy during native global registration cancels the interrupted binding", + "project": "webkit", + "status": "passed", + "durationMs": 1092, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: global rebinding forwards original events once and releases the previous document", + "project": "webkit", + "status": "passed", + "durationMs": 1120, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "published: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "webkit", + "status": "passed", + "durationMs": 1196, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: global rebinding forwards original events once and releases the previous document", + "project": "webkit", + "status": "passed", + "durationMs": 1014, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "global-events.spec.js", + "title": "candidate: failed global rebinding keeps the previous document and removes partial new listeners", + "project": "webkit", + "status": "passed", + "durationMs": 1048, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "chromium", + "status": "passed", + "durationMs": 183, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "chromium", + "status": "passed", + "durationMs": 180, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "chromium", + "status": "passed", + "durationMs": 422, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "chromium", + "status": "passed", + "durationMs": 199, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "chromium", + "status": "passed", + "durationMs": 222, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 274, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 242, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "chromium", + "status": "passed", + "durationMs": 181, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 254, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "chromium", + "status": "passed", + "durationMs": 240, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "firefox", + "status": "passed", + "durationMs": 476, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "firefox", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "firefox", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1104, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 488, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 497, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "firefox", + "status": "passed", + "durationMs": 564, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "firefox", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 621, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 490, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "firefox", + "status": "passed", + "durationMs": 408, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "firefox", + "status": "passed", + "durationMs": 524, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 1397, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "firefox", + "status": "passed", + "durationMs": 590, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "webkit", + "status": "passed", + "durationMs": 1008, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "webkit", + "status": "passed", + "durationMs": 947, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "project": "webkit", + "status": "passed", + "durationMs": 1149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "project": "webkit", + "status": "passed", + "durationMs": 988, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "project": "webkit", + "status": "passed", + "durationMs": 2018, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1082, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 982, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "project": "webkit", + "status": "passed", + "durationMs": 1372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "project": "webkit", + "status": "passed", + "durationMs": 1068, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1130, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1281, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1207, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "project": "webkit", + "status": "passed", + "durationMs": 1007, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "project": "webkit", + "status": "passed", + "durationMs": 1018, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1394, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "project": "webkit", + "status": "passed", + "durationMs": 1208, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "hotkey.spec.js", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "project": "webkit", + "status": "passed", + "durationMs": 1218, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "chromium", + "status": "passed", + "durationMs": 137, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "chromium", + "status": "passed", + "durationMs": 153, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "chromium", + "status": "passed", + "durationMs": 156, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "firefox", + "status": "passed", + "durationMs": 344, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "firefox", + "status": "passed", + "durationMs": 1272, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "firefox", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "firefox", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "firefox", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "firefox", + "status": "passed", + "durationMs": 1348, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "firefox", + "status": "passed", + "durationMs": 349, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "firefox", + "status": "passed", + "durationMs": 402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "firefox", + "status": "passed", + "durationMs": 344, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "firefox", + "status": "passed", + "durationMs": 346, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=true", + "project": "webkit", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy cleans the mounting template with removeHtml=false", + "project": "webkit", + "status": "passed", + "durationMs": 501, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: player descriptor order and constructor/static surfaces match the published core", + "project": "webkit", + "status": "passed", + "durationMs": 566, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: proxy-time destroy listener can mount a replacement without the old constructor overwriting it", + "project": "webkit", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "webkit", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "webkit", + "status": "passed", + "durationMs": 437, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: teardown during capability detection stops remaining player installers", + "project": "webkit", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "published: destroy during initial native volume assignment stops later construction", + "project": "webkit", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: subclasses retain receiver identity, initialization timing and static inheritance", + "project": "webkit", + "status": "passed", + "durationMs": 432, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: omitted unused SSR nodes stay nullable without an eager template rejection", + "project": "webkit", + "status": "passed", + "durationMs": 491, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: teardown during capability detection stops remaining player installers", + "project": "webkit", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "initialization.spec.js", + "title": "candidate: destroy during initial native volume assignment stops later construction", + "project": "webkit", + "status": "passed", + "durationMs": 433, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "chromium", + "status": "passed", + "durationMs": 197, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "chromium", + "status": "passed", + "durationMs": 196, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "chromium", + "status": "passed", + "durationMs": 239, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 208, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 195, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "chromium", + "status": "passed", + "durationMs": 214, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "chromium", + "status": "passed", + "durationMs": 254, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "firefox", + "status": "passed", + "durationMs": 510, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "firefox", + "status": "passed", + "durationMs": 519, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "firefox", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "firefox", + "status": "passed", + "durationMs": 526, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 515, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "firefox", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "firefox", + "status": "passed", + "durationMs": 546, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: restoring a removed default hotkey keeps identity and real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1284, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: a failed native removal remains retryable and releases its record", + "project": "webkit", + "status": "passed", + "durationMs": 1157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: destruction before native add returns cannot leave a late listener", + "project": "webkit", + "status": "passed", + "durationMs": 1055, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: window registration failure restores the previous global binding", + "project": "webkit", + "status": "passed", + "durationMs": 1005, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: source changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 1001, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: rotation changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 1042, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: geometry changes cancel the old gesture in the installed player", + "project": "webkit", + "status": "passed", + "durationMs": 1301, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "input-closeout.spec.js", + "title": "candidate closeout: adopted viewport retains exact gap boundaries", + "project": "webkit", + "status": "passed", + "durationMs": 1054, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "chromium", + "status": "passed", + "durationMs": 156, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "chromium", + "status": "passed", + "durationMs": 198, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "chromium", + "status": "passed", + "durationMs": 152, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "firefox", + "status": "passed", + "durationMs": 380, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "firefox", + "status": "passed", + "durationMs": 359, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "firefox", + "status": "passed", + "durationMs": 378, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "firefox", + "status": "passed", + "durationMs": 357, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "firefox", + "status": "passed", + "durationMs": 1431, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "firefox", + "status": "passed", + "durationMs": 497, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "published: repeated destroy preserves other live instances", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: repeated destroy preserves other live instances", + "project": "webkit", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor plugin failure restores original DOM and clears resources", + "project": "webkit", + "status": "passed", + "durationMs": 471, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: early proxy failure restores SSR nodes, attributes and text", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: reentrant destroy keeps sequence and does not repeat callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 459, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: destroying cancels queued resize, notice, RAF, reconnect and mounted work", + "project": "webkit", + "status": "passed", + "durationMs": 432, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: constructor can synchronously destroy without entering the registry", + "project": "webkit", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: partial Events initialization releases listeners before its property is assigned", + "project": "webkit", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: live resize still coalesces and destroy cancels the next burst", + "project": "webkit", + "status": "passed", + "durationMs": 1102, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "lifecycle.spec.js", + "title": "candidate: a container is reserved during reentrant initialization", + "project": "webkit", + "status": "passed", + "durationMs": 434, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "chromium", + "status": "passed", + "durationMs": 182, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "chromium", + "status": "passed", + "durationMs": 186, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "chromium", + "status": "passed", + "durationMs": 183, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "firefox", + "status": "passed", + "durationMs": 410, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "firefox", + "status": "passed", + "durationMs": 390, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "firefox", + "status": "passed", + "durationMs": 1401, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "firefox", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "firefox", + "status": "passed", + "durationMs": 412, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "firefox", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "firefox", + "status": "passed", + "durationMs": 483, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "firefox", + "status": "passed", + "durationMs": 1460, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "firefox", + "status": "passed", + "durationMs": 533, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "firefox", + "status": "passed", + "durationMs": 478, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "firefox", + "status": "passed", + "durationMs": 478, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: null options preserve the native default and callbacks can be removed directly", + "project": "webkit", + "status": "passed", + "durationMs": 1225, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: once and abort use native event identity and permit subsequent registration", + "project": "webkit", + "status": "passed", + "durationMs": 1131, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "webkit", + "status": "passed", + "durationMs": 994, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: changing capture options after registration cannot prevent cleanup", + "project": "webkit", + "status": "passed", + "durationMs": 1069, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: partially failing array registration rolls back the listeners it created", + "project": "webkit", + "status": "passed", + "durationMs": 1075, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "published: registration throwing after native add does not leave an untracked listener", + "project": "webkit", + "status": "passed", + "durationMs": 1098, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: null options preserve the native default and callbacks can be removed directly", + "project": "webkit", + "status": "passed", + "durationMs": 997, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: once and abort use native event identity and permit subsequent registration", + "project": "webkit", + "status": "passed", + "durationMs": 986, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: direct event disposer preserves native callback identity and releases bookkeeping", + "project": "webkit", + "status": "passed", + "durationMs": 1062, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: changing capture options after registration cannot prevent cleanup", + "project": "webkit", + "status": "passed", + "durationMs": 1104, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: partially failing array registration rolls back the listeners it created", + "project": "webkit", + "status": "passed", + "durationMs": 1177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "listener-registry.spec.js", + "title": "candidate: registration throwing after native add does not leave an untracked listener", + "project": "webkit", + "status": "passed", + "durationMs": 1107, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "chromium", + "status": "passed", + "durationMs": 301, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "chromium", + "status": "passed", + "durationMs": 267, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "chromium", + "status": "passed", + "durationMs": 317, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "firefox", + "status": "passed", + "durationMs": 570, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "firefox", + "status": "passed", + "durationMs": 534, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "firefox", + "status": "passed", + "durationMs": 530, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "firefox", + "status": "passed", + "durationMs": 674, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "firefox", + "status": "passed", + "durationMs": 378, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: HTTP failure retries the updated option URL with the original event and one ready", + "project": "webkit", + "status": "passed", + "durationMs": 1244, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: replacing a failed source cancels candidate retries", + "project": "webkit", + "status": "passed", + "durationMs": 1210, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: HTTP failure retries the updated option URL with the original event and one ready", + "project": "webkit", + "status": "passed", + "durationMs": 1289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: replacing a failed source cancels candidate retries", + "project": "webkit", + "status": "passed", + "durationMs": 1256, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: rejected real-media switch still allows current-source reconnect", + "project": "webkit", + "status": "passed", + "durationMs": 1917, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "webkit", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: destroying from first-ready controls prevents a candidate ghost ready event", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "firefox", + "status": "passed", + "durationMs": 353, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "firefox", + "status": "passed", + "durationMs": 368, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "published: metadata emits resize before mobile visibility changes", + "project": "webkit", + "status": "passed", + "durationMs": 462, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-events.spec.js", + "title": "candidate: metadata emits resize before mobile visibility changes", + "project": "webkit", + "status": "passed", + "durationMs": 481, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "chromium", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "chromium", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "firefox", + "status": "passed", + "durationMs": 980, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "firefox", + "status": "passed", + "durationMs": 714, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "published: existing canvas proxy keeps media identity, playback and layout", + "project": "webkit", + "status": "passed", + "durationMs": 1869, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "media-hosts.spec.js", + "title": "candidate: existing canvas proxy keeps media identity, playback and layout", + "project": "webkit", + "status": "passed", + "durationMs": 2038, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "chromium", + "status": "passed", + "durationMs": 236, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "chromium", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "chromium", + "status": "passed", + "durationMs": 191, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "chromium", + "status": "passed", + "durationMs": 220, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "chromium", + "status": "passed", + "durationMs": 202, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "chromium", + "status": "passed", + "durationMs": 471, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "chromium", + "status": "passed", + "durationMs": 172, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "firefox", + "status": "passed", + "durationMs": 479, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "firefox", + "status": "passed", + "durationMs": 910, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "firefox", + "status": "passed", + "durationMs": 397, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "firefox", + "status": "passed", + "durationMs": 520, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "firefox", + "status": "passed", + "durationMs": 1318, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "firefox", + "status": "passed", + "durationMs": 497, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "firefox", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "firefox", + "status": "passed", + "durationMs": 903, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "firefox", + "status": "passed", + "durationMs": 1447, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "firefox", + "status": "passed", + "durationMs": 527, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "firefox", + "status": "passed", + "durationMs": 389, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice updates do not call a consumer override of destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1052, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice preserves public shape, Error text and false hide semantics", + "project": "webkit", + "status": "passed", + "durationMs": 1159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: notice expires naturally during real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1671, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: manual notice destroy permits reuse and does not hide its DOM", + "project": "webkit", + "status": "passed", + "durationMs": 1222, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: destruction during notice text assignment cannot schedule a late timer", + "project": "webkit", + "status": "passed", + "durationMs": 1225, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "published: expiry does not hide a notice installed during the clearing write", + "project": "webkit", + "status": "passed", + "durationMs": 1165, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice updates do not call a consumer override of destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1079, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice preserves public shape, Error text and false hide semantics", + "project": "webkit", + "status": "passed", + "durationMs": 1313, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: notice expires naturally during real playback", + "project": "webkit", + "status": "passed", + "durationMs": 1372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: manual notice destroy permits reuse and does not hide its DOM", + "project": "webkit", + "status": "passed", + "durationMs": 1070, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: destruction during notice text assignment cannot schedule a late timer", + "project": "webkit", + "status": "passed", + "durationMs": 1016, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: expiry does not hide a notice installed during the clearing write", + "project": "webkit", + "status": "passed", + "durationMs": 1022, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "notice.spec.js", + "title": "candidate: retained callbacks and assignments cannot revive destroyed notice resources", + "project": "webkit", + "status": "passed", + "durationMs": 1053, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "chromium", + "status": "passed", + "durationMs": 150, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 179, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "chromium", + "status": "passed", + "durationMs": 150, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "firefox", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "firefox", + "status": "passed", + "durationMs": 345, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 410, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "firefox", + "status": "passed", + "durationMs": 1460, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "firefox", + "status": "passed", + "durationMs": 409, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 420, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: expanded option input preserves historical JS forms", + "project": "webkit", + "status": "passed", + "durationMs": 421, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: configuration errors occur before mounting and preserve allocation timing", + "project": "webkit", + "status": "passed", + "durationMs": 474, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "published: container identity, partial defaults, custom fields and normal callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1050, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: expanded option input preserves historical JS forms", + "project": "webkit", + "status": "passed", + "durationMs": 475, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: configuration errors occur before mounting and preserve allocation timing", + "project": "webkit", + "status": "passed", + "durationMs": 429, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "options.spec.js", + "title": "candidate: container identity, partial defaults, custom fields and normal callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1071, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "chromium", + "status": "passed", + "durationMs": 198, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "firefox", + "status": "passed", + "durationMs": 499, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "firefox", + "status": "passed", + "durationMs": 500, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "firefox", + "status": "passed", + "durationMs": 375, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: real media preserves timeline, volume, rate and property descriptors", + "project": "webkit", + "status": "passed", + "durationMs": 1101, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "published: invalid time inputs and rate no-op retain native behavior", + "project": "webkit", + "status": "passed", + "durationMs": 965, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: real media preserves timeline, volume, rate and property descriptors", + "project": "webkit", + "status": "passed", + "durationMs": 1064, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback-properties.spec.js", + "title": "candidate: invalid time inputs and rate no-op retain native behavior", + "project": "webkit", + "status": "passed", + "durationMs": 1020, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "chromium", + "status": "passed", + "durationMs": 1509, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "chromium", + "status": "passed", + "durationMs": 1525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "chromium", + "status": "passed", + "durationMs": 203, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "chromium", + "status": "passed", + "durationMs": 295, + "url": "about:blank", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "firefox", + "status": "passed", + "durationMs": 1968, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "firefox", + "status": "passed", + "durationMs": 2083, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "firefox", + "status": "passed", + "durationMs": 432, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "firefox", + "status": "passed", + "durationMs": 485, + "url": "about:blank", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "published: real playback, pause, seek, switch and destroy", + "project": "webkit", + "status": "passed", + "durationMs": 4842, + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "candidate: real playback, pause, seek, switch and destroy", + "project": "webkit", + "status": "passed", + "durationMs": 4930, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "controlled HTTP media failure emits a real video error", + "project": "webkit", + "status": "passed", + "durationMs": 803, + "url": "http://127.0.0.1:8084/test/player.html", + "errors": [] + }, + { + "file": "playback.spec.js", + "title": "Range, media identity and docs candidate routes", + "project": "webkit", + "status": "passed", + "durationMs": 457, + "url": "about:blank", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "chromium", + "status": "passed", + "durationMs": 129, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "chromium", + "status": "passed", + "durationMs": 213, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "firefox", + "status": "passed", + "durationMs": 323, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "firefox", + "status": "passed", + "durationMs": 1302, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "firefox", + "status": "passed", + "durationMs": 341, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "webkit", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: late plugin registration preserves fulfillment without reviving a closed candidate", + "project": "webkit", + "status": "passed", + "durationMs": 435, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: a plugin that closes construction prevents subsequent factories", + "project": "webkit", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: constructor-owned rejection is reported once without an unhandled rejection", + "project": "webkit", + "status": "passed", + "durationMs": 472, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "published: builtin order and live exclusions precede user plugins", + "project": "webkit", + "status": "passed", + "durationMs": 381, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "plugins.spec.js", + "title": "candidate: builtin order and live exclusions precede user plugins", + "project": "webkit", + "status": "passed", + "durationMs": 396, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "chromium", + "status": "passed", + "durationMs": 294, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "chromium", + "status": "passed", + "durationMs": 325, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "firefox", + "status": "passed", + "durationMs": 674, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "firefox", + "status": "passed", + "durationMs": 431, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 553, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "firefox", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "firefox", + "status": "passed", + "durationMs": 698, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "firefox", + "status": "passed", + "durationMs": 502, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 450, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "firefox", + "status": "passed", + "durationMs": 413, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "firefox", + "status": "passed", + "durationMs": 1405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: real mouse input focuses the player, hovers and toggles actual playback", + "project": "webkit", + "status": "passed", + "durationMs": 1815, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: click pairs preserve callback identity and playback ordering", + "project": "webkit", + "status": "passed", + "durationMs": 1103, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in click stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1007, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: destruction in dblclick stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "published: focus, hover and move preserve flags, classes and original events", + "project": "webkit", + "status": "passed", + "durationMs": 979, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: real mouse input focuses the player, hovers and toggles actual playback", + "project": "webkit", + "status": "passed", + "durationMs": 1960, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: click pairs preserve callback identity and playback ordering", + "project": "webkit", + "status": "passed", + "durationMs": 978, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in click stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1097, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: destruction in dblclick stops its subsequent default action", + "project": "webkit", + "status": "passed", + "durationMs": 1095, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "pointer-events.spec.js", + "title": "candidate: focus, hover and move preserve flags, classes and original events", + "project": "webkit", + "status": "passed", + "durationMs": 990, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 384, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "chromium", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "chromium", + "status": "passed", + "durationMs": 373, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "chromium", + "status": "passed", + "durationMs": 848, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 378, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "chromium", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "chromium", + "status": "passed", + "durationMs": 521, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "chromium", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "chromium", + "status": "passed", + "durationMs": 203, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "chromium", + "status": "passed", + "durationMs": 858, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 942, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 993, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 886, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "firefox", + "status": "passed", + "durationMs": 1126, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "firefox", + "status": "passed", + "durationMs": 898, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "firefox", + "status": "passed", + "durationMs": 377, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "firefox", + "status": "passed", + "durationMs": 2322, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 808, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 907, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "firefox", + "status": "passed", + "durationMs": 868, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "firefox", + "status": "passed", + "durationMs": 847, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "firefox", + "status": "passed", + "durationMs": 810, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "firefox", + "status": "passed", + "durationMs": 417, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "firefox", + "status": "passed", + "durationMs": 1709, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through remove cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1955, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through destroy cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1845, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: progress click reentry through source cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1753, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: real progress click keeps setBar before seek and clamps the edges", + "project": "webkit", + "status": "passed", + "durationMs": 2487, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a progress drag ends when its source is replaced and can restart on the new source", + "project": "webkit", + "status": "passed", + "durationMs": 2153, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "webkit", + "status": "passed", + "durationMs": 1545, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "published: quality selectors retain default labels, source position and empty-array behavior", + "project": "webkit", + "status": "passed", + "durationMs": 3803, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through remove cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1917, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through destroy cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1847, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: progress click reentry through source cannot continue an obsolete seek", + "project": "webkit", + "status": "passed", + "durationMs": 1836, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: real progress click keeps setBar before seek and clamps the edges", + "project": "webkit", + "status": "passed", + "durationMs": 2350, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a progress drag ends when its source is replaced and can restart on the new source", + "project": "webkit", + "status": "passed", + "durationMs": 2291, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: a caller-owned media Blob URL remains readable after switching and destroying the player", + "project": "webkit", + "status": "passed", + "durationMs": 1548, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "progress-quality.spec.js", + "title": "candidate: quality selectors retain default labels, source position and empty-array behavior", + "project": "webkit", + "status": "passed", + "durationMs": 4150, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "chromium", + "status": "passed", + "durationMs": 180, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "chromium", + "status": "passed", + "durationMs": 153, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "chromium", + "status": "passed", + "durationMs": 281, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "chromium", + "status": "passed", + "durationMs": 158, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "chromium", + "status": "passed", + "durationMs": 168, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "chromium", + "status": "passed", + "durationMs": 327, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "chromium", + "status": "passed", + "durationMs": 189, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "chromium", + "status": "passed", + "durationMs": 164, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "firefox", + "status": "passed", + "durationMs": 1309, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "firefox", + "status": "passed", + "durationMs": 399, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "firefox", + "status": "passed", + "durationMs": 455, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "firefox", + "status": "passed", + "durationMs": 471, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "firefox", + "status": "passed", + "durationMs": 512, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "firefox", + "status": "passed", + "durationMs": 656, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "firefox", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "firefox", + "status": "passed", + "durationMs": 503, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "firefox", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "firefox", + "status": "passed", + "durationMs": 453, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "firefox", + "status": "passed", + "durationMs": 410, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "firefox", + "status": "passed", + "durationMs": 788, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "firefox", + "status": "passed", + "durationMs": 1354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "firefox", + "status": "passed", + "durationMs": 388, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "firefox", + "status": "passed", + "durationMs": 364, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask preserves observations before and after its destroy handler", + "project": "webkit", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info preserves fields, native media text and close visibility", + "project": "webkit", + "status": "passed", + "durationMs": 986, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info retains native nullable string conversion for custom media fields", + "project": "webkit", + "status": "passed", + "durationMs": 1139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: repeated info init owns only one new timer and close handler", + "project": "webkit", + "status": "passed", + "durationMs": 986, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: info mobile construction waits for an explicit init", + "project": "webkit", + "status": "passed", + "durationMs": 1138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "published: mask click plays native video and destruction displays the terminal icon", + "project": "webkit", + "status": "passed", + "durationMs": 1286, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask preserves observations before and after its destroy handler", + "project": "webkit", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info preserves fields, native media text and close visibility", + "project": "webkit", + "status": "passed", + "durationMs": 1103, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info retains native nullable string conversion for custom media fields", + "project": "webkit", + "status": "passed", + "durationMs": 1128, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: repeated info init owns only one new timer and close handler", + "project": "webkit", + "status": "passed", + "durationMs": 1058, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info mobile construction waits for an explicit init", + "project": "webkit", + "status": "passed", + "durationMs": 982, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask click plays native video and destruction displays the terminal icon", + "project": "webkit", + "status": "passed", + "durationMs": 1354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: info destruction during a media getter prevents text writes and late init", + "project": "webkit", + "status": "passed", + "durationMs": 1042, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: reentrant info text conversion cannot write after player destruction", + "project": "webkit", + "status": "passed", + "durationMs": 1024, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "prompt-components.spec.js", + "title": "candidate: mask finalization follows an earlier throwing observer without replacing its error", + "project": "webkit", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "chromium", + "status": "passed", + "durationMs": 192, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "firefox", + "status": "passed", + "durationMs": 376, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "resource-scope.spec.js", + "title": "internal resource scope: native DOM, RAF, timer, fetch abort and URL release", + "project": "webkit", + "status": "passed", + "durationMs": 574, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "chromium", + "status": "passed", + "durationMs": 139, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "firefox", + "status": "passed", + "durationMs": 370, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "firefox", + "status": "passed", + "durationMs": 318, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "firefox", + "status": "passed", + "durationMs": 391, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "firefox", + "status": "passed", + "durationMs": 335, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "firefox", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: constructor callback hosts expose only initialized components", + "project": "webkit", + "status": "passed", + "durationMs": 1030, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "published: container validation rejects non-div elements", + "project": "webkit", + "status": "passed", + "durationMs": 341, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: constructor callback hosts expose only initialized components", + "project": "webkit", + "status": "passed", + "durationMs": 1014, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "candidate: container validation rejects non-div elements", + "project": "webkit", + "status": "passed", + "durationMs": 394, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "runtime-types.spec.js", + "title": "precise declarations: actual return values and callback receivers agree with the installed view", + "project": "webkit", + "status": "passed", + "durationMs": 973, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "chromium", + "status": "passed", + "durationMs": 334, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "chromium", + "status": "passed", + "durationMs": 568, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "chromium", + "status": "passed", + "durationMs": 291, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "chromium", + "status": "passed", + "durationMs": 305, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "chromium", + "status": "passed", + "durationMs": 353, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "chromium", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "chromium", + "status": "passed", + "durationMs": 573, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "chromium", + "status": "passed", + "durationMs": 292, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "chromium", + "status": "passed", + "durationMs": 287, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "chromium", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "chromium", + "status": "passed", + "durationMs": 306, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "chromium", + "status": "passed", + "durationMs": 359, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "firefox", + "status": "passed", + "durationMs": 897, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "firefox", + "status": "passed", + "durationMs": 578, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "firefox", + "status": "passed", + "durationMs": 882, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "firefox", + "status": "passed", + "durationMs": 885, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "firefox", + "status": "passed", + "durationMs": 596, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "firefox", + "status": "passed", + "durationMs": 896, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "firefox", + "status": "passed", + "durationMs": 1591, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "firefox", + "status": "passed", + "durationMs": 1776, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "firefox", + "status": "passed", + "durationMs": 903, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "firefox", + "status": "passed", + "durationMs": 847, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "firefox", + "status": "passed", + "durationMs": 919, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "firefox", + "status": "passed", + "durationMs": 930, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "firefox", + "status": "passed", + "durationMs": 953, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "webkit", + "status": "passed", + "durationMs": 1409, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot preserves download filename, event data and Promise result", + "project": "webkit", + "status": "passed", + "durationMs": 1329, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: actual cross-origin video rejects capture with SecurityError and notice", + "project": "webkit", + "status": "passed", + "durationMs": 3891, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: source replacement does not download a stale captured frame", + "project": "webkit", + "status": "passed", + "durationMs": 1317, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "published: screenshot toolbar rejection has exact historical error accounting", + "project": "webkit", + "status": "passed", + "durationMs": 1668, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: captures decoded PNG pixels and consumer-owned Blob URLs", + "project": "webkit", + "status": "passed", + "durationMs": 1407, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot preserves download filename, event data and Promise result", + "project": "webkit", + "status": "passed", + "durationMs": 1175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: actual cross-origin video rejects capture with SecurityError and notice", + "project": "webkit", + "status": "passed", + "durationMs": 3727, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: source replacement does not download a stale captured frame", + "project": "webkit", + "status": "passed", + "durationMs": 1232, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: screenshot toolbar rejection has exact historical error accounting", + "project": "webkit", + "status": "passed", + "durationMs": 1468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: null toBlob callback rejects and reports without a page error", + "project": "webkit", + "status": "passed", + "durationMs": 1402, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: destroy during screenshot await suppresses the queued download and event", + "project": "webkit", + "status": "passed", + "durationMs": 1309, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "screenshot.spec.js", + "title": "candidate: cross-origin screenshot toolbar handles its internal rejected Promise", + "project": "webkit", + "status": "passed", + "durationMs": 4275, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 277, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "chromium", + "status": "passed", + "durationMs": 265, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "chromium", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "firefox", + "status": "passed", + "durationMs": 418, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "firefox", + "status": "passed", + "durationMs": 537, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "firefox", + "status": "passed", + "durationMs": 602, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 948, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "published: long setting labels leave native controls inside the row", + "project": "webkit", + "status": "passed", + "durationMs": 861, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "project": "webkit", + "status": "passed", + "durationMs": 1008, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: long setting labels leave native controls inside the row", + "project": "webkit", + "status": "passed", + "durationMs": 1321, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "chromium", + "status": "passed", + "durationMs": 616, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "chromium", + "status": "passed", + "durationMs": 650, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "firefox", + "status": "passed", + "durationMs": 848, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "firefox", + "status": "passed", + "durationMs": 831, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "project": "webkit", + "status": "passed", + "durationMs": 1514, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-interaction.spec.js", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "project": "webkit", + "status": "passed", + "durationMs": 1877, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "chromium", + "status": "passed", + "durationMs": 152, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 159, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "chromium", + "status": "passed", + "durationMs": 151, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "chromium", + "status": "passed", + "durationMs": 188, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 155, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "firefox", + "status": "passed", + "durationMs": 413, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "firefox", + "status": "passed", + "durationMs": 397, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "firefox", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 398, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "firefox", + "status": "passed", + "durationMs": 371, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "firefox", + "status": "passed", + "durationMs": 1246, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "firefox", + "status": "passed", + "durationMs": 393, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after failure", + "project": "webkit", + "status": "passed", + "durationMs": 447, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after navigate", + "project": "webkit", + "status": "passed", + "durationMs": 447, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after remove", + "project": "webkit", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: cached panel failure preserves navigation after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 461, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "published: sharing an active setting has an explicit ownership baseline", + "project": "webkit", + "status": "passed", + "durationMs": 438, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "project": "webkit", + "status": "passed", + "durationMs": 476, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after remove", + "project": "webkit", + "status": "passed", + "durationMs": 473, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-ownership.spec.js", + "title": "candidate: a setting subtree can move to another instance after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 458, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "chromium", + "status": "passed", + "durationMs": 165, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "chromium", + "status": "passed", + "durationMs": 204, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "chromium", + "status": "passed", + "durationMs": 203, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "chromium", + "status": "passed", + "durationMs": 203, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "chromium", + "status": "passed", + "durationMs": 161, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 162, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "firefox", + "status": "passed", + "durationMs": 351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "firefox", + "status": "passed", + "durationMs": 353, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "firefox", + "status": "passed", + "durationMs": 378, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "firefox", + "status": "passed", + "durationMs": 372, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 428, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 370, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "firefox", + "status": "passed", + "durationMs": 1353, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "firefox", + "status": "passed", + "durationMs": 1357, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "firefox", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "firefox", + "status": "passed", + "durationMs": 345, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "firefox", + "status": "passed", + "durationMs": 343, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "firefox", + "status": "passed", + "durationMs": 403, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after assign failure", + "project": "webkit", + "status": "passed", + "durationMs": 483, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after format failure", + "project": "webkit", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after item failure", + "project": "webkit", + "status": "passed", + "durationMs": 495, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: setting update restores the original range row after render failure", + "project": "webkit", + "status": "passed", + "durationMs": 484, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "project": "webkit", + "status": "passed", + "durationMs": 487, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 487, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 491, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 490, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "project": "webkit", + "status": "passed", + "durationMs": 485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "project": "webkit", + "status": "passed", + "durationMs": 469, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "project": "webkit", + "status": "passed", + "durationMs": 463, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "project": "webkit", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "project": "webkit", + "status": "passed", + "durationMs": 480, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "project": "webkit", + "status": "passed", + "durationMs": 500, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "project": "webkit", + "status": "passed", + "durationMs": 443, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting-update.spec.js", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "project": "webkit", + "status": "passed", + "durationMs": 432, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "chromium", + "status": "passed", + "durationMs": 149, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "chromium", + "status": "passed", + "durationMs": 741, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "chromium", + "status": "passed", + "durationMs": 128, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "chromium", + "status": "passed", + "durationMs": 240, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "chromium", + "status": "passed", + "durationMs": 136, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "chromium", + "status": "passed", + "durationMs": 138, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "chromium", + "status": "passed", + "durationMs": 142, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "chromium", + "status": "passed", + "durationMs": 209, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "chromium", + "status": "passed", + "durationMs": 772, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "chromium", + "status": "passed", + "durationMs": 141, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "chromium", + "status": "passed", + "durationMs": 223, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "chromium", + "status": "passed", + "durationMs": 1144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "chromium", + "status": "passed", + "durationMs": 1146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 154, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "firefox", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "firefox", + "status": "passed", + "durationMs": 345, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "firefox", + "status": "passed", + "durationMs": 442, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "firefox", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "firefox", + "status": "passed", + "durationMs": 1039, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "firefox", + "status": "passed", + "durationMs": 427, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "firefox", + "status": "passed", + "durationMs": 484, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "firefox", + "status": "passed", + "durationMs": 1366, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "firefox", + "status": "passed", + "durationMs": 368, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "firefox", + "status": "passed", + "durationMs": 357, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "firefox", + "status": "passed", + "durationMs": 354, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "firefox", + "status": "passed", + "durationMs": 343, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "firefox", + "status": "passed", + "durationMs": 351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "firefox", + "status": "passed", + "durationMs": 411, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "firefox", + "status": "passed", + "durationMs": 1117, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "firefox", + "status": "passed", + "durationMs": 405, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "firefox", + "status": "passed", + "durationMs": 509, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "firefox", + "status": "passed", + "durationMs": 385, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "firefox", + "status": "passed", + "durationMs": 1582, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "firefox", + "status": "passed", + "durationMs": 1329, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "firefox", + "status": "passed", + "durationMs": 387, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "firefox", + "status": "passed", + "durationMs": 365, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 1374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 357, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "firefox", + "status": "passed", + "durationMs": 404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "firefox", + "status": "passed", + "durationMs": 351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "firefox", + "status": "passed", + "durationMs": 351, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "project": "webkit", + "status": "passed", + "durationMs": 492, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: deferred setting mounts belong to the rendered item generation", + "project": "webkit", + "status": "passed", + "durationMs": 470, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: removed setting subtrees release child listeners and cached panels", + "project": "webkit", + "status": "passed", + "durationMs": 414, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting button results cannot overwrite an updated or newer item", + "project": "webkit", + "status": "passed", + "durationMs": 465, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: sibling setting selections share the parent result generation", + "project": "webkit", + "status": "passed", + "durationMs": 479, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting callback rejection retains its original failure identity", + "project": "webkit", + "status": "passed", + "durationMs": 656, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "project": "webkit", + "status": "passed", + "durationMs": 2698, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: setting registry retains item returns and hidden tree bindings", + "project": "webkit", + "status": "passed", + "durationMs": 543, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: moved setting items bind to their current parent and panel", + "project": "webkit", + "status": "passed", + "durationMs": 1235, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "project": "webkit", + "status": "passed", + "durationMs": 572, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "project": "webkit", + "status": "passed", + "durationMs": 770, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "project": "webkit", + "status": "passed", + "durationMs": 667, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "project": "webkit", + "status": "passed", + "durationMs": 705, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "project": "webkit", + "status": "passed", + "durationMs": 1128, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: sibling setting selections share the parent result generation", + "project": "webkit", + "status": "passed", + "durationMs": 923, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting callback rejection retains its original failure identity", + "project": "webkit", + "status": "passed", + "durationMs": 1023, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "project": "webkit", + "status": "passed", + "durationMs": 2749, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "project": "webkit", + "status": "passed", + "durationMs": 468, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: moved setting items bind to their current parent and panel", + "project": "webkit", + "status": "passed", + "durationMs": 919, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "project": "webkit", + "status": "passed", + "durationMs": 539, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "project": "webkit", + "status": "passed", + "durationMs": 1647, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "project": "webkit", + "status": "passed", + "durationMs": 2101, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "project": "webkit", + "status": "passed", + "durationMs": 544, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "project": "webkit", + "status": "passed", + "durationMs": 593, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 639, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 649, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "project": "webkit", + "status": "passed", + "durationMs": 711, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant remove", + "project": "webkit", + "status": "passed", + "durationMs": 899, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "setting.spec.js", + "title": "candidate: panel creation stops after reentrant destroy", + "project": "webkit", + "status": "passed", + "durationMs": 781, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "chromium", + "status": "passed", + "durationMs": 200, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "chromium", + "status": "passed", + "durationMs": 421, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "chromium", + "status": "passed", + "durationMs": 430, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "chromium", + "status": "passed", + "durationMs": 512, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "chromium", + "status": "passed", + "durationMs": 415, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "chromium", + "status": "passed", + "durationMs": 249, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "chromium", + "status": "passed", + "durationMs": 240, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "firefox", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "firefox", + "status": "passed", + "durationMs": 654, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "firefox", + "status": "passed", + "durationMs": 575, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "firefox", + "status": "passed", + "durationMs": 763, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "firefox", + "status": "passed", + "durationMs": 958, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "firefox", + "status": "passed", + "durationMs": 1225, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "firefox", + "status": "passed", + "durationMs": 482, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "firefox", + "status": "passed", + "durationMs": 648, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: rapid real-media switches identify the last restart and settle superseded work", + "project": "webkit", + "status": "passed", + "durationMs": 1943, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "published: destroy settles the candidate switch without waiting for detached media", + "project": "webkit", + "status": "passed", + "durationMs": 1770, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: rapid real-media switches identify the last restart and settle superseded work", + "project": "webkit", + "status": "passed", + "durationMs": 1982, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: destroy settles the candidate switch without waiting for detached media", + "project": "webkit", + "status": "passed", + "durationMs": 1596, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: quality switch restores position/rate and preserves real customType identities", + "project": "webkit", + "status": "passed", + "durationMs": 3597, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: direct currentTime during a native quality seek is not overwritten by automatic restoration", + "project": "webkit", + "status": "passed", + "durationMs": 3568, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: real switch settles when the controlled native resume rejects", + "project": "webkit", + "status": "passed", + "durationMs": 2040, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "source.spec.js", + "title": "candidate: late native play completion cannot publish stale player effects", + "project": "webkit", + "status": "passed", + "durationMs": 2328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 185, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 169, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 623, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "chromium", + "status": "passed", + "durationMs": 222, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "chromium", + "status": "passed", + "durationMs": 166, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 178, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "chromium", + "status": "passed", + "durationMs": 623, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "chromium", + "status": "passed", + "durationMs": 328, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "chromium", + "status": "passed", + "durationMs": 157, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "chromium", + "status": "passed", + "durationMs": 170, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "chromium", + "status": "passed", + "durationMs": 190, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "chromium", + "status": "passed", + "durationMs": 175, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "chromium", + "status": "passed", + "durationMs": 177, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "chromium", + "status": "passed", + "durationMs": 207, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "chromium", + "status": "passed", + "durationMs": 174, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "chromium", + "status": "passed", + "durationMs": 171, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "chromium", + "status": "passed", + "durationMs": 173, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "chromium", + "status": "passed", + "durationMs": 176, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 400, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 508, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "firefox", + "status": "passed", + "durationMs": 385, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 1536, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "firefox", + "status": "passed", + "durationMs": 546, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "firefox", + "status": "passed", + "durationMs": 513, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 379, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "firefox", + "status": "passed", + "durationMs": 511, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 395, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "firefox", + "status": "passed", + "durationMs": 579, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "firefox", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "firefox", + "status": "passed", + "durationMs": 810, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "firefox", + "status": "passed", + "durationMs": 1520, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "firefox", + "status": "passed", + "durationMs": 532, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "firefox", + "status": "passed", + "durationMs": 466, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "firefox", + "status": "passed", + "durationMs": 441, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "firefox", + "status": "passed", + "durationMs": 603, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "firefox", + "status": "passed", + "durationMs": 406, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "firefox", + "status": "passed", + "durationMs": 498, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "firefox", + "status": "passed", + "durationMs": 1386, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "firefox", + "status": "passed", + "durationMs": 456, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "firefox", + "status": "passed", + "durationMs": 517, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "firefox", + "status": "passed", + "durationMs": 525, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "firefox", + "status": "passed", + "durationMs": 516, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "firefox", + "status": "passed", + "durationMs": 522, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "firefox", + "status": "passed", + "durationMs": 532, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "firefox", + "status": "passed", + "durationMs": 494, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: srt conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1408, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: ass conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1440, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "webkit", + "status": "passed", + "durationMs": 1597, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle remains visible through real native fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2511, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: native subtitle cues, offset, styles and show contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1815, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle latest request wins and cancelled calls settle", + "project": "webkit", + "status": "passed", + "durationMs": 1214, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle pending completion cannot replace track after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1137, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "published: subtitle owns generated URLs and leaves caller URLs alive", + "project": "webkit", + "status": "passed", + "durationMs": 1286, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: srt conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1327, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: ass conversion reaches native cues with original callback binding", + "project": "webkit", + "status": "passed", + "durationMs": 1485, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: video fullscreen signal rebuilds track kind while retaining its URL", + "project": "webkit", + "status": "passed", + "durationMs": 1268, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle remains visible through real native fullscreen", + "project": "webkit", + "status": "passed", + "durationMs": 2450, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle cues, offset, styles and show contracts", + "project": "webkit", + "status": "passed", + "durationMs": 1731, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle latest request wins and cancelled calls settle", + "project": "webkit", + "status": "passed", + "durationMs": 1300, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle pending completion cannot replace track after destroy", + "project": "webkit", + "status": "passed", + "durationMs": 1456, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle owns generated URLs and leaves caller URLs alive", + "project": "webkit", + "status": "passed", + "durationMs": 1652, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle cancellation settles before an ignored request or body finishes", + "project": "webkit", + "status": "passed", + "durationMs": 1427, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle conversion reentry preserves the newer operation and notice", + "project": "webkit", + "status": "passed", + "durationMs": 1556, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: active subtitle errors reject, preserve track and allow a later retry", + "project": "webkit", + "status": "passed", + "durationMs": 1289, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: subtitle HTTP failures do not become usable tracks", + "project": "webkit", + "status": "passed", + "durationMs": 1241, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: disabled native tracks expose empty cue arrays without throwing", + "project": "webkit", + "status": "passed", + "durationMs": 1641, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: native subtitle track failure is reported and obsolete callbacks are removed", + "project": "webkit", + "status": "passed", + "durationMs": 1461, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: constructor and URL setter failures notify without unhandled promises", + "project": "webkit", + "status": "passed", + "durationMs": 1820, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=false", + "project": "webkit", + "status": "passed", + "durationMs": 1404, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: reentrant track replacement keeps the winner when outer throws=true", + "project": "webkit", + "status": "passed", + "durationMs": 1359, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: failed track insertion restores the old live track and releases the attempted URL", + "project": "webkit", + "status": "passed", + "durationMs": 1376, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "subtitle-lifecycle.spec.js", + "title": "candidate: cleanup failure after track commit does not revoke the committed URL", + "project": "webkit", + "status": "passed", + "durationMs": 1445, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "chromium", + "status": "passed", + "durationMs": 472, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "chromium", + "status": "passed", + "durationMs": 145, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "chromium", + "status": "passed", + "durationMs": 143, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 135, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "chromium", + "status": "passed", + "durationMs": 454, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "chromium", + "status": "passed", + "durationMs": 153, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "chromium", + "status": "passed", + "durationMs": 144, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "chromium", + "status": "passed", + "durationMs": 134, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "chromium", + "status": "passed", + "durationMs": 187, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "firefox", + "status": "passed", + "durationMs": 638, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "firefox", + "status": "passed", + "durationMs": 357, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "firefox", + "status": "passed", + "durationMs": 349, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "firefox", + "status": "passed", + "durationMs": 377, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 363, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 359, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "firefox", + "status": "passed", + "durationMs": 1529, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "firefox", + "status": "passed", + "durationMs": 386, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "firefox", + "status": "passed", + "durationMs": 366, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "firefox", + "status": "passed", + "durationMs": 358, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "firefox", + "status": "passed", + "durationMs": 383, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "firefox", + "status": "passed", + "durationMs": 374, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: native fullscreen uses a real gesture when the engine supports it", + "project": "webkit", + "status": "passed", + "durationMs": 2076, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "webkit", + "status": "passed", + "durationMs": 706, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: proxy replacement preserves callback and node identity", + "project": "webkit", + "status": "passed", + "durationMs": 598, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "webkit", + "status": "passed", + "durationMs": 587, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: i18n prototype fallback difference and custom keys are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 667, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "published: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 751, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: native fullscreen uses a real gesture when the engine supports it", + "project": "webkit", + "status": "passed", + "durationMs": 2532, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: SSR mounting preserves nodes, listeners, selectors and style ownership", + "project": "webkit", + "status": "passed", + "durationMs": 718, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: proxy replacement preserves callback and node identity", + "project": "webkit", + "status": "passed", + "durationMs": 701, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: icon access preserves descriptors and moves custom DOM into fresh wrappers", + "project": "webkit", + "status": "passed", + "durationMs": 682, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: i18n prototype fallback difference and custom keys are explicit", + "project": "webkit", + "status": "passed", + "durationMs": 580, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "template-resources.spec.js", + "title": "candidate: fullscreen web retains DOM and CSS hooks through entry and exit", + "project": "webkit", + "status": "passed", + "durationMs": 556, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "chromium", + "status": "passed", + "durationMs": 311, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "chromium", + "status": "passed", + "durationMs": 314, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "chromium", + "status": "passed", + "durationMs": 306, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "chromium", + "status": "passed", + "durationMs": 308, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "chromium", + "status": "passed", + "durationMs": 307, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "chromium", + "status": "passed", + "durationMs": 203, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "chromium", + "status": "passed", + "durationMs": 440, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "chromium", + "status": "passed", + "durationMs": 206, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "firefox", + "status": "passed", + "durationMs": 507, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "firefox", + "status": "passed", + "durationMs": 618, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "firefox", + "status": "passed", + "durationMs": 1754, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "firefox", + "status": "passed", + "durationMs": 666, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "firefox", + "status": "passed", + "durationMs": 580, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "firefox", + "status": "passed", + "durationMs": 657, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "firefox", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "firefox", + "status": "passed", + "durationMs": 546, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "webkit", + "status": "passed", + "durationMs": 2019, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "webkit", + "status": "passed", + "durationMs": 1469, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "published: a delayed image follows the latest hover rather than the first request position", + "project": "webkit", + "status": "passed", + "durationMs": 1416, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: thumbnail cells follow the generated grid at row boundaries and on returning to the first cell", + "project": "webkit", + "status": "passed", + "durationMs": 2296, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: scaled internal thumbnails and public image results have distinct Blob URL owners", + "project": "webkit", + "status": "passed", + "durationMs": 1477, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: a delayed image follows the latest hover rather than the first request position", + "project": "webkit", + "status": "passed", + "durationMs": 1603, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: removing thumbnails revokes the scaled image and a replacement control can reload", + "project": "webkit", + "status": "passed", + "durationMs": 1993, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "thumbnails.spec.js", + "title": "candidate: image failure permits a retry through the same thumbnail configuration", + "project": "webkit", + "status": "passed", + "durationMs": 1642, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "chromium", + "status": "passed", + "durationMs": 146, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "chromium", + "status": "passed", + "durationMs": 445, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "chromium", + "status": "passed", + "durationMs": 140, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "chromium", + "status": "passed", + "durationMs": 283, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "chromium", + "status": "passed", + "durationMs": 193, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "firefox", + "status": "passed", + "durationMs": 1191, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "firefox", + "status": "passed", + "durationMs": 419, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "firefox", + "status": "passed", + "durationMs": 327, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "firefox", + "status": "passed", + "durationMs": 367, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "firefox", + "status": "passed", + "durationMs": 337, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: subtitle object URL contains real VTT data", + "project": "webkit", + "status": "passed", + "durationMs": 571, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "published: download starts and removes its temporary anchor", + "project": "webkit", + "status": "passed", + "durationMs": 555, + "url": "http://127.0.0.1:8084/test/player.html?core=published&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: subtitle object URL contains real VTT data", + "project": "webkit", + "status": "passed", + "durationMs": 506, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate: download starts and removes its temporary anchor", + "project": "webkit", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + }, + { + "file": "utils.spec.js", + "title": "candidate download releases the anchor even when click fails", + "project": "webkit", + "status": "passed", + "durationMs": 588, + "url": "http://127.0.0.1:8084/test/player.html?core=candidate&chapter=published", + "errors": [] + } + ] + }, + "sizes": [ + { + "name": "artplayer.js", + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "raw": 208037, + "gzip9": 58434, + "brotli6": 53372 + }, + { + "name": "artplayer.legacy.js", + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "raw": 212218, + "gzip9": 59686, + "brotli6": 54412 + }, + { + "name": "artplayer.mjs", + "sha256": "c2f738b3f3abdbd66e3e2bba2be6058a75fd7abcef6131bb12af3be3722c5a13", + "raw": 361496, + "gzip9": 77141, + "brotli6": 70030 + } + ], + "performance": [ + { + "file": "refactor/.cache/performance/run-chromium-EzIboW/report.json", + "sha256": "385f47b197fab02b66646f65a37671583591059e9303a5c0e03eb90a1ed9e6de", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T15:08:35.522Z", + "environment": { + "browser": "chromium", + "version": "153.0.8010.12", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "archiveSha256": "f5800c61985d732740a446196195dfde8cae5b69d644c8c4a63fce0f1a3aa0bd", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "72e0b95bc632561e97569d789b76d16f36edd94eac8c62ba9e1918c9a222d328", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "9447f64a04e0218619d66e294905f45b8948bdfd8f93b6313f3ea5f4224d57be", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "raw": 208037, + "gzip9": 58434, + "brotli6": 53372 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 74000, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22948, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20839, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "raw": 212218, + "gzip9": 59686, + "brotli6": 54412 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76470, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23665, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21367, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "c2f738b3f3abdbd66e3e2bba2be6058a75fd7abcef6131bb12af3be3722c5a13", + "raw": 361496, + "gzip9": 77141, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152670, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33273, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 9.099999994039536, + "readyMs": 93.39999997615814, + "playResolvedMs": 4.9000000059604645, + "playbackObservedMs": 250.2000000178814, + "mediaProgress": 0.157027, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2.5, + "readyMs": 14.199999988079071, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.164871, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 1.5999999940395355, + "readyMs": 15.900000005960464, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.69999998807907, + "mediaProgress": 0.162897, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1.5999999940395355, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.5, + "mediaProgress": 0.161985, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.300000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.5, + "readyMs": 15.800000011920929, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 217.5, + "mediaProgress": 0.164013, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.9000000059604645, + "readyMs": 14.300000011920929, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.164668, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1.9000000059604645, + "readyMs": 16, + "playResolvedMs": 1, + "playbackObservedMs": 216, + "mediaProgress": 0.160594, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.5, + "readyMs": 16.80000001192093, + "playResolvedMs": 0.8999999761581421, + "playbackObservedMs": 216.5, + "mediaProgress": 0.162056, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2.199999988079071, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.5, + "mediaProgress": 0.163564, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2.399999976158142, + "readyMs": 16.899999976158142, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 214.60000002384186, + "mediaProgress": 0.158345, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.5, + "readyMs": 16.19999998807907, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.09999999403954, + "mediaProgress": 0.160573, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 2.5, + "readyMs": 15.400000005960464, + "playResolvedMs": 1, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.16086, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359.40000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364.5, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357.2999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 363.80000001192093, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 358.40000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 363.59999999403954, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 11.5, + "readyMs": 30.400000005960464, + "playResolvedMs": 7.299999982118607, + "playbackObservedMs": 228.5, + "mediaProgress": 0.167669, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2.9000000059604645, + "readyMs": 15, + "playResolvedMs": 1.800000011920929, + "playbackObservedMs": 215.10000002384186, + "mediaProgress": 0.156581, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2.399999976158142, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4.200000017881393, + "readyMs": 15.800000011920929, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 215.40000000596046, + "mediaProgress": 0.160608, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3.199999988079071, + "readyMs": 15.299999982118607, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 215.80000001192093, + "mediaProgress": 0.157375, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3.7000000178813934, + "readyMs": 14.599999994039536, + "playResolvedMs": 2.100000023841858, + "playbackObservedMs": 216.60000002384186, + "mediaProgress": 0.157403, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2.5, + "readyMs": 14.900000005960464, + "playResolvedMs": 2, + "playbackObservedMs": 216.19999998807907, + "mediaProgress": 0.156447, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3.100000023841858, + "readyMs": 16.200000017881393, + "playResolvedMs": 1.5999999940395355, + "playbackObservedMs": 216, + "mediaProgress": 0.160272, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3.199999988079071, + "readyMs": 16.69999998807907, + "playResolvedMs": 1.7000000178813934, + "playbackObservedMs": 216.2000000178814, + "mediaProgress": 0.157074, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2.800000011920929, + "readyMs": 14.800000011920929, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.90000000596046, + "mediaProgress": 0.16043, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 18, + "playResolvedMs": 1.4000000059604645, + "playbackObservedMs": 213.30000001192093, + "mediaProgress": 0.156633, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2.800000011920929, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 218.5, + "mediaProgress": 0.160685, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 4.5999999940395355, + "readyMs": 15.400000005960464, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 216.19999998807907, + "mediaProgress": 0.160505, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362.7000000178814, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 354, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350.30000001192093, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360.5, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364.2999999821186, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 5.700000017881393, + "readyMs": 45, + "playResolvedMs": 5.100000023841858, + "playbackObservedMs": 216.2000000178814, + "mediaProgress": 0.156325, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 1.9000000059604645, + "readyMs": 15.300000011920929, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 217.69999998807907, + "mediaProgress": 0.16042, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 1.4000000059604645, + "readyMs": 15.799999982118607, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.5, + "mediaProgress": 0.160262, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1.7000000178813934, + "readyMs": 14.300000011920929, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.160344, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.9000000059604645, + "readyMs": 15.200000017881393, + "playResolvedMs": 1.2999999821186066, + "playbackObservedMs": 216.89999997615814, + "mediaProgress": 0.162263, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.5, + "readyMs": 16.600000023841858, + "playResolvedMs": 0.8999999761581421, + "playbackObservedMs": 216.2999999821186, + "mediaProgress": 0.160349, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1.7999999821186066, + "readyMs": 14.199999988079071, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.156834, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.2999999821186066, + "readyMs": 15.699999988079071, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 215.90000000596046, + "mediaProgress": 0.160566, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 15.300000011920929, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.19999998807907, + "mediaProgress": 0.155329, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.2999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.5, + "readyMs": 16.200000017881393, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 215.89999997615814, + "mediaProgress": 0.160612, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0.8999999761581421, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.600000023841858, + "readyMs": 16.900000005960464, + "playResolvedMs": 1.2000000178813934, + "playbackObservedMs": 217, + "mediaProgress": 0.160467, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1.7000000178813934, + "readyMs": 16.599999994039536, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 232.30000001192093, + "mediaProgress": 0.170614, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 356.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360.59999999403954, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351.7999999821186, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358.7999999821186, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 44.70000001788139, + "playResolvedMs": 1.2999999821186066, + "playbackObservedMs": 200.59999999403954, + "mediaProgress": 0.159049, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 1.699999988079071, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 218, + "mediaProgress": 0.160487, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 1.7999999821186066, + "readyMs": 13.599999994039536, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.7999999821186, + "mediaProgress": 0.160272, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1.9000000059604645, + "readyMs": 16.900000005960464, + "playResolvedMs": 1, + "playbackObservedMs": 215.59999999403954, + "mediaProgress": 0.156916, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.300000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.699999988079071, + "readyMs": 16.30000001192093, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 215.59999999403954, + "mediaProgress": 0.160265, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.2000000178813934, + "readyMs": 15, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.5, + "mediaProgress": 0.160496, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2.0999999940395355, + "readyMs": 16.30000001192093, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.2999999821186, + "mediaProgress": 0.160326, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.4000000059604645, + "readyMs": 15.400000005960464, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.160374, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.2999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1.4000000059604645, + "readyMs": 14.700000017881393, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.2999999821186, + "mediaProgress": 0.163236, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.4000000059604645, + "readyMs": 16.100000023841858, + "playResolvedMs": 0.8999999761581421, + "playbackObservedMs": 216.2999999821186, + "mediaProgress": 0.160468, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2.5, + "readyMs": 15.199999988079071, + "playResolvedMs": 1.199999988079071, + "playbackObservedMs": 216.19999998807907, + "mediaProgress": 0.160306, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.8999999761581421, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1.4000000059604645, + "readyMs": 16.5, + "playResolvedMs": 1, + "playbackObservedMs": 216, + "mediaProgress": 0.160314, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.8999999761581421, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360.5, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 365.2999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359.60000002384186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356.90000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 2.9000000059604645, + "readyMs": 44.70000001788139, + "playResolvedMs": 4.5, + "playbackObservedMs": 216.2999999821186, + "mediaProgress": 0.155976, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.399999976158142, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 15.900000005960464, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 216.09999999403954, + "mediaProgress": 0.157821, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2.899999976158142, + "readyMs": 14.799999982118607, + "playResolvedMs": 1.2000000178813934, + "playbackObservedMs": 217.80000001192093, + "mediaProgress": 0.160613, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1.899999976158142, + "readyMs": 13.699999988079071, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.160915, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.4000000059604645, + "readyMs": 15.200000017881393, + "playResolvedMs": 1.9000000059604645, + "playbackObservedMs": 216.5, + "mediaProgress": 0.16076, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2.199999988079071, + "readyMs": 15.900000005960464, + "playResolvedMs": 1, + "playbackObservedMs": 216.5, + "mediaProgress": 0.161584, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 15.699999988079071, + "playResolvedMs": 1.9000000059604645, + "playbackObservedMs": 216.09999999403954, + "mediaProgress": 0.157113, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2.300000011920929, + "readyMs": 16.700000017881393, + "playResolvedMs": 2.0999999940395355, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.161049, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1.699999988079071, + "readyMs": 15.699999988079071, + "playResolvedMs": 2.0999999940395355, + "playbackObservedMs": 216.2000000178814, + "mediaProgress": 0.160812, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.4000000059604645, + "readyMs": 15.599999994039536, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 216.60000002384186, + "mediaProgress": 0.160893, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.5999999940395355, + "readyMs": 14.199999988079071, + "playResolvedMs": 1.100000023841858, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.156391, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1.199999988079071, + "readyMs": 15.900000005960464, + "playResolvedMs": 1.2999999821186066, + "playbackObservedMs": 217, + "mediaProgress": 0.156739, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.30000001192093, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357.19999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.7999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355.59999999403954, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7.5, + "readyMs": 31.900000005960464, + "playResolvedMs": 5.5999999940395355, + "playbackObservedMs": 228.7999999821186, + "mediaProgress": 0.161351, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2.800000011920929, + "readyMs": 14.400000005960464, + "playResolvedMs": 1.699999988079071, + "playbackObservedMs": 216.69999998807907, + "mediaProgress": 0.16077, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.600000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4.799999982118607, + "readyMs": 14.5, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.156306, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3.4000000059604645, + "readyMs": 17.599999994039536, + "playResolvedMs": 1.100000023841858, + "playbackObservedMs": 213.7000000178814, + "mediaProgress": 0.160573, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2.0999999940395355, + "readyMs": 17.69999998807907, + "playResolvedMs": 1.800000011920929, + "playbackObservedMs": 214.80000001192093, + "mediaProgress": 0.157035, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.5, + "readyMs": 15.800000011920929, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.19999998807907, + "mediaProgress": 0.156738, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2.4000000059604645, + "readyMs": 15.800000011920929, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 215.2999999821186, + "mediaProgress": 0.160447, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.5, + "readyMs": 16.599999994039536, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 215.90000000596046, + "mediaProgress": 0.157582, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 16.69999998807907, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 215.09999999403954, + "mediaProgress": 0.156432, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2.2000000178813934, + "readyMs": 17.5, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 215.80000001192093, + "mediaProgress": 0.160533, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 3.199999988079071, + "readyMs": 16, + "playResolvedMs": 1.199999988079071, + "playbackObservedMs": 215.5, + "mediaProgress": 0.160464, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1.699999988079071, + "readyMs": 16.099999994039536, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 215.7000000178814, + "mediaProgress": 0.156511, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0.8999999761581421, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352.40000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 356.30000001192093, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 353.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358.40000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2.800000011920929, + "median": 3.100000023841858, + "max": 4.200000017881393 + }, + "readyMs": { + "count": 5, + "min": 14.599999994039536, + "median": 15.099999994039536, + "max": 16.200000017881393 + }, + "playResolvedMs": { + "count": 5, + "min": 0.699999988079071, + "median": 1.300000011920929, + "max": 2.100000023841858 + }, + "destroyMs": { + "count": 5, + "min": 1.0999999940395355, + "median": 1.4000000059604645, + "max": 2 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 3.199999988079071, + "max": 4.5999999940395355 + }, + "readyMs": { + "count": 5, + "min": 14.900000005960464, + "median": 15.400000005960464, + "max": 18 + }, + "playResolvedMs": { + "count": 5, + "min": 1.0999999940395355, + "median": 1.4000000059604645, + "max": 2 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 1.199999988079071, + "max": 1.9000000059604645 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 1.4000000059604645, + "median": 1.7999999821186066, + "max": 2 + }, + "readyMs": { + "count": 5, + "min": 14.199999988079071, + "median": 15.300000011920929, + "max": 16.900000005960464 + }, + "playResolvedMs": { + "count": 5, + "min": 0.7000000178813934, + "median": 0.800000011920929, + "max": 1.2999999821186066 + }, + "destroyMs": { + "count": 5, + "min": 0.7999999821186066, + "median": 1.199999988079071, + "max": 1.5999999940395355 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 1.2999999821186066, + "median": 1.5, + "max": 1.7000000178813934 + }, + "readyMs": { + "count": 5, + "min": 14.300000011920929, + "median": 16.200000017881393, + "max": 16.600000023841858 + }, + "playResolvedMs": { + "count": 5, + "min": 0.699999988079071, + "median": 0.800000011920929, + "max": 0.9000000059604645 + }, + "destroyMs": { + "count": 5, + "min": 0.8999999761581421, + "median": 1.0999999940395355, + "max": 1.2000000178813934 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2.0999999940395355, + "median": 3, + "max": 4.799999982118607 + }, + "readyMs": { + "count": 5, + "min": 14.5, + "median": 16, + "max": 17.69999998807907 + }, + "playResolvedMs": { + "count": 5, + "min": 0.800000011920929, + "median": 1.0999999940395355, + "max": 1.800000011920929 + }, + "destroyMs": { + "count": 5, + "min": 0.800000011920929, + "median": 0.800000011920929, + "max": 1.199999988079071 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 1.5, + "median": 1.699999988079071, + "max": 3.4000000059604645 + }, + "readyMs": { + "count": 5, + "min": 15.800000011920929, + "median": 16.599999994039536, + "max": 17.599999994039536 + }, + "playResolvedMs": { + "count": 5, + "min": 0.699999988079071, + "median": 0.800000011920929, + "max": 1.100000023841858 + }, + "destroyMs": { + "count": 5, + "min": 0.800000011920929, + "median": 1.199999988079071, + "max": 1.4000000059604645 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + }, + { + "file": "refactor/.cache/performance/run-firefox-GRJveD/report.json", + "sha256": "a6ef41a7d98e83a14a3ef424e5a40bf97651897bb6241b8ef6f4352916378f5c", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T15:09:10.103Z", + "environment": { + "browser": "firefox", + "version": "155.0", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "archiveSha256": "f5800c61985d732740a446196195dfde8cae5b69d644c8c4a63fce0f1a3aa0bd", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "72e0b95bc632561e97569d789b76d16f36edd94eac8c62ba9e1918c9a222d328", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "9447f64a04e0218619d66e294905f45b8948bdfd8f93b6313f3ea5f4224d57be", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "raw": 208037, + "gzip9": 58434, + "brotli6": 53372 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 74000, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22948, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20839, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "raw": 212218, + "gzip9": 59686, + "brotli6": 54412 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76470, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23665, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21367, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "c2f738b3f3abdbd66e3e2bba2be6058a75fd7abcef6131bb12af3be3722c5a13", + "raw": 361496, + "gzip9": 77141, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152670, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33273, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 38, + "readyMs": 168, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174018, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173334, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.173161, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 7, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.17324, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.175919, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.174582, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 33, + "playResolvedMs": 1, + "playbackObservedMs": 182, + "mediaProgress": 0.175981, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.17668, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 7, + "readyMs": 49, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.175397, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 49, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.174905, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 49, + "playResolvedMs": 2, + "playbackObservedMs": 182, + "mediaProgress": 0.178926, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 34, + "playResolvedMs": 2, + "playbackObservedMs": 182, + "mediaProgress": 0.174447, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 365, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 352, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 10, + "readyMs": 69, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.17377, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 6, + "readyMs": 32, + "playResolvedMs": 4, + "playbackObservedMs": 183, + "mediaProgress": 0.178085, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 6, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.176017, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.178214, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.17659, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173808, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.172053, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 47, + "playResolvedMs": 4, + "playbackObservedMs": 184, + "mediaProgress": 0.177781, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175224, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 5, + "playbackObservedMs": 200, + "mediaProgress": 0.184343, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.173991, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.176936, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 356, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 353, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 359, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 8, + "readyMs": 44, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.176321, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 5, + "playbackObservedMs": 183, + "mediaProgress": 0.177584, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174251, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 30, + "playResolvedMs": 3, + "playbackObservedMs": 201, + "mediaProgress": 0.18445, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174216, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 6, + "readyMs": 45, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173499, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 8, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173439, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 6, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.171677, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 6, + "readyMs": 49, + "playResolvedMs": 1, + "playbackObservedMs": 184, + "mediaProgress": 0.175567, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173532, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 1, + "playbackObservedMs": 184, + "mediaProgress": 0.176589, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.176808, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 354, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 354, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.176124, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.176892, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.176592, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 35, + "playResolvedMs": 3, + "playbackObservedMs": 180, + "mediaProgress": 0.177448, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 49, + "playResolvedMs": 3, + "playbackObservedMs": 182, + "mediaProgress": 0.174454, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 49, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.175457, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 7, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173917, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.175624, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.175241, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.178601, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.175169, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 48, + "playResolvedMs": 1, + "playbackObservedMs": 184, + "mediaProgress": 0.177108, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 354, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 365, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7, + "readyMs": 61, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.177632, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 6, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.178445, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 8, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174798, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.174077, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 33, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.176593, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 29, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174945, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174811, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.17518, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 7, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.172977, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 7, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.17451, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 7, + "readyMs": 49, + "playResolvedMs": 6, + "playbackObservedMs": 184, + "mediaProgress": 0.172177, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.176323, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 352, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7, + "readyMs": 44, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.174103, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 8, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173572, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.17147, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 4, + "playbackObservedMs": 183, + "mediaProgress": 0.173841, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 48, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.176046, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 49, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174759, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175172, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 4, + "playbackObservedMs": 184, + "mediaProgress": 0.177002, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.174432, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 30, + "playResolvedMs": 4, + "playbackObservedMs": 184, + "mediaProgress": 0.171813, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.179803, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173626, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 385, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 354, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 4, + "median": 5, + "max": 6 + }, + "readyMs": { + "count": 5, + "min": 31, + "median": 32, + "max": 48 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 2 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 4, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 31, + "median": 31, + "max": 47 + }, + "playResolvedMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 5 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 3 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 5, + "max": 8 + }, + "readyMs": { + "count": 5, + "min": 31, + "median": 47, + "max": 49 + }, + "playResolvedMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 3 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 5, + "max": 6 + }, + "readyMs": { + "count": 5, + "min": 30, + "median": 46, + "max": 46 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 2, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 0, + "median": 2, + "max": 3 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 4, + "median": 4, + "max": 5 + }, + "readyMs": { + "count": 5, + "min": 32, + "median": 47, + "max": 48 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 2, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 3 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 4, + "max": 5 + }, + "readyMs": { + "count": 5, + "min": 30, + "median": 31, + "max": 49 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 4, + "max": 4 + }, + "destroyMs": { + "count": 5, + "min": 0, + "median": 1, + "max": 2 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + }, + { + "file": "refactor/.cache/performance/run-webkit-9OZ2sY/report.json", + "sha256": "c4cf6a280c0d415470f08124c2f4a4e9293ae2cf03e94221ff12376ec5c2b60a", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T15:09:44.499Z", + "environment": { + "browser": "webkit", + "version": "26.6", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "archiveSha256": "f5800c61985d732740a446196195dfde8cae5b69d644c8c4a63fce0f1a3aa0bd", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "72e0b95bc632561e97569d789b76d16f36edd94eac8c62ba9e1918c9a222d328", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "9447f64a04e0218619d66e294905f45b8948bdfd8f93b6313f3ea5f4224d57be", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "bytes": 208037, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-vynq7l\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623", + "raw": 208037, + "gzip9": 58434, + "brotli6": 53372 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 74000, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22948, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20839, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda", + "raw": 212218, + "gzip9": 59686, + "brotli6": 54412 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76470, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23665, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21367, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "c2f738b3f3abdbd66e3e2bba2be6058a75fd7abcef6131bb12af3be3722c5a13", + "raw": 361496, + "gzip9": 77141, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152670, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33273, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 14, + "readyMs": 569, + "playResolvedMs": 14, + "playbackObservedMs": 214, + "mediaProgress": 0.1666458, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 73, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2, + "readyMs": 365, + "playResolvedMs": 14, + "playbackObservedMs": 227, + "mediaProgress": 0.1881874, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 132, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 365, + "playResolvedMs": 18, + "playbackObservedMs": 199, + "mediaProgress": 0.1659791, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 87, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 321, + "playResolvedMs": 15, + "playbackObservedMs": 228, + "mediaProgress": 0.1752291, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 412, + "playResolvedMs": 19, + "playbackObservedMs": 201, + "mediaProgress": 0.1790833, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 347, + "playResolvedMs": 17, + "playbackObservedMs": 231, + "mediaProgress": 0.1921666, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 337, + "playResolvedMs": 17, + "playbackObservedMs": 231, + "mediaProgress": 0.1941458, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 350, + "playResolvedMs": 16, + "playbackObservedMs": 203, + "mediaProgress": 0.17375, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 134, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 367, + "playResolvedMs": 18, + "playbackObservedMs": 216, + "mediaProgress": 0.17866659999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 133, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 369, + "playResolvedMs": 19, + "playbackObservedMs": 184, + "mediaProgress": 0.15412499999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 73, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 382, + "playResolvedMs": 19, + "playbackObservedMs": 214, + "mediaProgress": 0.18291659999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 135, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 351, + "playResolvedMs": 16, + "playbackObservedMs": 230, + "mediaProgress": 0.1762083, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 354, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 358, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 13, + "readyMs": 385, + "playResolvedMs": 10, + "playbackObservedMs": 206, + "mediaProgress": 0.1689583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 70, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 384, + "playResolvedMs": 19, + "playbackObservedMs": 200, + "mediaProgress": 0.1578124, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 135, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 368, + "playResolvedMs": 13, + "playbackObservedMs": 229, + "mediaProgress": 0.1874583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 380, + "playResolvedMs": 18, + "playbackObservedMs": 247, + "mediaProgress": 0.2105833, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 94, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 402, + "playResolvedMs": 15, + "playbackObservedMs": 227, + "mediaProgress": 0.19368739999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 120, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 360, + "playResolvedMs": 18, + "playbackObservedMs": 231, + "mediaProgress": 0.1977083, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 117, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 354, + "playResolvedMs": 17, + "playbackObservedMs": 170, + "mediaProgress": 0.15302079999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 88, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 349, + "playResolvedMs": 17, + "playbackObservedMs": 230, + "mediaProgress": 0.1930833, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 348, + "playResolvedMs": 16, + "playbackObservedMs": 245, + "mediaProgress": 0.1951874, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 126, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 354, + "playResolvedMs": 20, + "playbackObservedMs": 228, + "mediaProgress": 0.1907499, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 348, + "playResolvedMs": 18, + "playbackObservedMs": 216, + "mediaProgress": 0.179, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 71, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 381, + "playResolvedMs": 20, + "playbackObservedMs": 220, + "mediaProgress": 0.18637489999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 121, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 365, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 362, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 14, + "readyMs": 392, + "playResolvedMs": 19, + "playbackObservedMs": 186, + "mediaProgress": 0.1602083, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 89, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 363, + "playResolvedMs": 16, + "playbackObservedMs": 217, + "mediaProgress": 0.1932499, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 146, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 384, + "playResolvedMs": 17, + "playbackObservedMs": 172, + "mediaProgress": 0.1529583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 97, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 356, + "playResolvedMs": 15, + "playbackObservedMs": 181, + "mediaProgress": 0.1555, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 86, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 349, + "playResolvedMs": 15, + "playbackObservedMs": 229, + "mediaProgress": 0.1890624, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 339, + "playResolvedMs": 13, + "playbackObservedMs": 226, + "mediaProgress": 0.1881666, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 349, + "playResolvedMs": 17, + "playbackObservedMs": 201, + "mediaProgress": 0.1623333, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 68, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 339, + "playResolvedMs": 16, + "playbackObservedMs": 231, + "mediaProgress": 0.1875624, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 120, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 378, + "playResolvedMs": 20, + "playbackObservedMs": 217, + "mediaProgress": 0.18477079999999999, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 115, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 341, + "playResolvedMs": 17, + "playbackObservedMs": 202, + "mediaProgress": 0.16275, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 86, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 348, + "playResolvedMs": 19, + "playbackObservedMs": 233, + "mediaProgress": 0.1929791, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 119, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 367, + "playResolvedMs": 16, + "playbackObservedMs": 216, + "mediaProgress": 0.1817083, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 361, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 361, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 10, + "readyMs": 351, + "playResolvedMs": 17, + "playbackObservedMs": 221, + "mediaProgress": 0.1902083, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 367, + "playResolvedMs": 17, + "playbackObservedMs": 171, + "mediaProgress": 0.1512083, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 94, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 347, + "playResolvedMs": 14, + "playbackObservedMs": 182, + "mediaProgress": 0.1519166, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 86, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 341, + "playResolvedMs": 11, + "playbackObservedMs": 230, + "mediaProgress": 0.1939374, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 134, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 319, + "playResolvedMs": 17, + "playbackObservedMs": 213, + "mediaProgress": 0.1730416, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 84, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 352, + "playResolvedMs": 17, + "playbackObservedMs": 185, + "mediaProgress": 0.15166659999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 84, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 337, + "playResolvedMs": 18, + "playbackObservedMs": 188, + "mediaProgress": 0.1574374, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 85, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 355, + "playResolvedMs": 17, + "playbackObservedMs": 201, + "mediaProgress": 0.1611249, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 338, + "playResolvedMs": 19, + "playbackObservedMs": 202, + "mediaProgress": 0.1643541, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 365, + "playResolvedMs": 19, + "playbackObservedMs": 229, + "mediaProgress": 0.1952291, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 135, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 14, + "readyMs": 364, + "playResolvedMs": 16, + "playbackObservedMs": 215, + "mediaProgress": 0.1773333, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 132, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 355, + "playResolvedMs": 17, + "playbackObservedMs": 218, + "mediaProgress": 0.18947909999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 70, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 9, + "readyMs": 359, + "playResolvedMs": 16, + "playbackObservedMs": 216, + "mediaProgress": 0.1874583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 134, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 381, + "playResolvedMs": 18, + "playbackObservedMs": 169, + "mediaProgress": 0.15108329999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 86, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 339, + "playResolvedMs": 15, + "playbackObservedMs": 217, + "mediaProgress": 0.1639583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 87, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 362, + "playResolvedMs": 23, + "playbackObservedMs": 234, + "mediaProgress": 0.19539579999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 115, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 339, + "playResolvedMs": 14, + "playbackObservedMs": 230, + "mediaProgress": 0.1949791, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 121, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 390, + "playResolvedMs": 17, + "playbackObservedMs": 218, + "mediaProgress": 0.1967708, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 103, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1, + "readyMs": 339, + "playResolvedMs": 15, + "playbackObservedMs": 214, + "mediaProgress": 0.17756239999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 75, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 348, + "playResolvedMs": 13, + "playbackObservedMs": 232, + "mediaProgress": 0.1934583, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 115, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 322, + "playResolvedMs": 15, + "playbackObservedMs": 199, + "mediaProgress": 0.1508541, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 100, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 350, + "playResolvedMs": 19, + "playbackObservedMs": 186, + "mediaProgress": 0.1538124, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 88, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 365, + "playResolvedMs": 17, + "playbackObservedMs": 220, + "mediaProgress": 0.1740625, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 125, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 351, + "playResolvedMs": 17, + "playbackObservedMs": 201, + "mediaProgress": 0.1633333, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 87, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 358, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 358, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 12, + "readyMs": 407, + "playResolvedMs": 20, + "playbackObservedMs": 185, + "mediaProgress": 0.15797909999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 338, + "playResolvedMs": 18, + "playbackObservedMs": 228, + "mediaProgress": 0.1870833, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 70, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 336, + "playResolvedMs": 18, + "playbackObservedMs": 200, + "mediaProgress": 0.1645625, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 96, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 344, + "playResolvedMs": 15, + "playbackObservedMs": 227, + "mediaProgress": 0.1904791, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 130, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 383, + "playResolvedMs": 16, + "playbackObservedMs": 169, + "mediaProgress": 0.15247909999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 379, + "playResolvedMs": 17, + "playbackObservedMs": 220, + "mediaProgress": 0.18822909999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 132, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 365, + "playResolvedMs": 17, + "playbackObservedMs": 188, + "mediaProgress": 0.1565208, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 104, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 13, + "readyMs": 391, + "playResolvedMs": 16, + "playbackObservedMs": 215, + "mediaProgress": 0.1960208, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 117, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 332, + "playResolvedMs": 15, + "playbackObservedMs": 244, + "mediaProgress": 0.1914166, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 116, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 338, + "playResolvedMs": 14, + "playbackObservedMs": 199, + "mediaProgress": 0.1603958, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 86, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 365, + "playResolvedMs": 20, + "playbackObservedMs": 171, + "mediaProgress": 0.1509583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 85, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 338, + "playResolvedMs": 14, + "playbackObservedMs": 213, + "mediaProgress": 0.1591041, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 369, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 359, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 2, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 348, + "median": 354, + "max": 402 + }, + "playResolvedMs": { + "count": 5, + "min": 13, + "median": 16, + "max": 18 + }, + "destroyMs": { + "count": 5, + "min": 71, + "median": 88, + "max": 126 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 3 + }, + "readyMs": { + "count": 5, + "min": 349, + "median": 360, + "max": 381 + }, + "playResolvedMs": { + "count": 5, + "min": 17, + "median": 18, + "max": 20 + }, + "destroyMs": { + "count": 5, + "min": 72, + "median": 117, + "max": 121 + } + } + }, + "reviewSignals": [ + { + "configuration": "chapter", + "metric": "destroyMs", + "deltaMs": 44, + "allowanceMs": 18.25 + } + ], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 5 + }, + "readyMs": { + "count": 5, + "min": 348, + "median": 349, + "max": 384 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 17, + "max": 20 + }, + "destroyMs": { + "count": 5, + "min": 68, + "median": 115, + "max": 119 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 339, + "median": 341, + "max": 367 + }, + "playResolvedMs": { + "count": 5, + "min": 13, + "median": 16, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 69, + "median": 86, + "max": 120 + } + } + }, + "reviewSignals": [ + { + "configuration": "core", + "metric": "destroyMs", + "deltaMs": 30, + "allowanceMs": 21.25 + } + ], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 2, + "max": 3 + }, + "readyMs": { + "count": 5, + "min": 332, + "median": 365, + "max": 383 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 17, + "max": 20 + }, + "destroyMs": { + "count": 5, + "min": 72, + "median": 96, + "max": 116 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 13 + }, + "readyMs": { + "count": 5, + "min": 338, + "median": 344, + "max": 391 + }, + "playResolvedMs": { + "count": 5, + "min": 14, + "median": 15, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 72, + "median": 117, + "max": 132 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + } + ], + "ci": { + "file": "refactor/.cache/core22-layout-ci.log", + "sha256": "ff3b0fb1cf3edee2248e1c5752e8a099d7c0378c714a2e0ae6f072638d1d6b19", + "unit": 440, + "engineering": 11, + "baseline": 25, + "total": 476, + "productionTS": 249 + }, + "package": { + "directory": "refactor/.cache/packages/run-vynq7l", + "reportSHA256": "06955f85d6ee9e1cf3cbccec01c840ee0e405d29169620fb356b485a16b0e666", + "runtime": 34, + "legacyTypes": 5, + "preciseTypes": 8, + "knownTypeBlockers": 0, + "verified": [ + { + "file": "packages/artplayer/dist/artplayer.cts", + "sha256": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7" + }, + { + "file": "packages/artplayer/dist/artplayer.js", + "sha256": "9741da1b0bb4e1ed6999a6089c62e5c3b8b2df280445631da7155c1c6da5e623" + }, + { + "file": "packages/artplayer/dist/artplayer.legacy.js", + "sha256": "d1f1bb14f067681e4786c12fc29fdc9ba9af80632bbb33e3b5bad8b270e26cda" + }, + { + "file": "packages/artplayer/dist/artplayer.mjs", + "sha256": "c2f738b3f3abdbd66e3e2bba2be6058a75fd7abcef6131bb12af3be3722c5a13" + }, + { + "file": "packages/artplayer/dist/artplayer.mts", + "sha256": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313" + }, + { + "file": "packages/artplayer/dist/artplayer.ts", + "sha256": "26a42ac66811e70f68a8ebe62cbf304eb1993451b3e658961be98e7106162527" + }, + { + "file": "packages/artplayer/dist/component.ts", + "sha256": "aa1c43be67322781b4b355b143bc69d9f29d22e578e4974d6a13e957a7c0334f" + }, + { + "file": "packages/artplayer/dist/config.ts", + "sha256": "c4fd8681bf32b10c743e3e561c532520c8f32e43fd765524850b15e55cb91c72" + }, + { + "file": "packages/artplayer/dist/cssVar.ts", + "sha256": "e027d82fb4f01c9ce7559cf679b2d5ee1962d3f7e5b4dd64ca21f472b933efb6" + }, + { + "file": "packages/artplayer/dist/emitter.ts", + "sha256": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537" + }, + { + "file": "packages/artplayer/dist/events.ts", + "sha256": "af191f862af4ec8933b09113b8c074603ae254a8b70460d0f3006646cd74ae42" + }, + { + "file": "packages/artplayer/dist/i18n.ts", + "sha256": "34b0c684668044f7600c80b9d3979f8fb730138007b7cb4e7034326b340156fb" + }, + { + "file": "packages/artplayer/dist/i18n/ar.js", + "sha256": "bd0bef65f4f7dc3f8ed562904cc6fa9071ff4537fb64c1e0fc3d554141bcd3cb" + }, + { + "file": "packages/artplayer/dist/i18n/ar.mjs", + "sha256": "59310b7bbeea83bbb7d73aadc5ca82a6ec269c3530d19aa741c94d5c64fc5da8" + }, + { + "file": "packages/artplayer/dist/i18n/cs.js", + "sha256": "6e2c93daba24c2e48dfa206bcf4f2f2a8a02713b856e404d2e4e4ecd8309ca2f" + }, + { + "file": "packages/artplayer/dist/i18n/cs.mjs", + "sha256": "c73fba18797d62d7b2581e67fe7340c35fe84510b2250ff1ecaad253d9cabbac" + }, + { + "file": "packages/artplayer/dist/i18n/es.js", + "sha256": "f4133ac6ea06b69a474b33c4a1809a4066e2376bb9464a3f3aa8330f01f1944a" + }, + { + "file": "packages/artplayer/dist/i18n/es.mjs", + "sha256": "1390bca3def2be115e811de337df0a0c3f63998e51359f283023246245c552a7" + }, + { + "file": "packages/artplayer/dist/i18n/fa.js", + "sha256": "8d3ef2e0f0cc0ea480c2167b6fcb87cdf444e90759c3519e8daa139fec576da4" + }, + { + "file": "packages/artplayer/dist/i18n/fa.mjs", + "sha256": "ab441e8a2d79043b29ceca87c783bf06874bb9d3a149c1604bc167eb481be2a9" + }, + { + "file": "packages/artplayer/dist/i18n/fr.js", + "sha256": "89dc4194a6c0a962b9ce756b52c90401c1acf3b159f265f3bc0d7d6d7d987f03" + }, + { + "file": "packages/artplayer/dist/i18n/fr.mjs", + "sha256": "99491878430fb7b6f2b7bf93da0588a831704b412e01116f23ba1d9d45863816" + }, + { + "file": "packages/artplayer/dist/i18n/id.js", + "sha256": "4c6dc86db741bcc2857df55a9d037e82e91d375fa6fd22e0562809ff621b92db" + }, + { + "file": "packages/artplayer/dist/i18n/id.mjs", + "sha256": "383e5803a6b6686c6de4e867770241de75b6f517dcca2bdedc6f2004bf6e1fb3" + }, + { + "file": "packages/artplayer/dist/i18n/pl.js", + "sha256": "3a38828b1c3d719c0aca9906cf6a46c23555a8411f8d57645f0e0ce8147dc664" + }, + { + "file": "packages/artplayer/dist/i18n/pl.mjs", + "sha256": "079ed96732979035297af387c64a7b99519b5a43107fb86735a654ea4fe8e9b5" + }, + { + "file": "packages/artplayer/dist/i18n/ru.js", + "sha256": "62fac9dddb302eb16382e6e9301fc4b2c66f5f69d4a358a26b67026a5fa4e787" + }, + { + "file": "packages/artplayer/dist/i18n/ru.mjs", + "sha256": "a893aeaee1d79409db72e324fbff200e3864f33ed168f04d91d25f7cf2efa765" + }, + { + "file": "packages/artplayer/dist/i18n/tr.js", + "sha256": "1492c36b069a7d73db4f3913bd18085faff7afd8b3c158138fe264e31600e38c" + }, + { + "file": "packages/artplayer/dist/i18n/tr.mjs", + "sha256": "a90478cac078836b76c2a98261907610fee07f3e4b28671b8e7dbf533778f918" + }, + { + "file": "packages/artplayer/dist/i18n/vi.js", + "sha256": "c7216ef7e608a79b7e2c479a07bf310d4ab79577947ac4a62d676faaced0e9cf" + }, + { + "file": "packages/artplayer/dist/i18n/vi.mjs", + "sha256": "66270fdfa0b5da396322d1769169b7df37a030ba15ac18eb30bd87b3af8074ec" + }, + { + "file": "packages/artplayer/dist/i18n/zh-tw.js", + "sha256": "11c49857d6d40a5ffd224ffa59c9026e71621b345f63c5a086326db80a22371a" + }, + { + "file": "packages/artplayer/dist/i18n/zh-tw.mjs", + "sha256": "a38e630cb96de96c15d824686aec750e25cf6c8ada01285a292442a81566314f" + }, + { + "file": "packages/artplayer/dist/icons.ts", + "sha256": "0d8e8e52e52130dd4a29bab551dd7a2a954797e42e92a6e068c85d583e23e6a4" + }, + { + "file": "packages/artplayer/dist/language.cts", + "sha256": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120" + }, + { + "file": "packages/artplayer/dist/language.mts", + "sha256": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f" + }, + { + "file": "packages/artplayer/dist/legacy/language.ts", + "sha256": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3" + }, + { + "file": "packages/artplayer/dist/option.ts", + "sha256": "850e5264219b8b438c80694402225b690b131786677a5da0d22739ec2352d263" + }, + { + "file": "packages/artplayer/dist/playback.ts", + "sha256": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5" + }, + { + "file": "packages/artplayer/dist/player.ts", + "sha256": "f1e50257df2ea592d0a0e1f36078dda77eaf2cf3b3d795307501396562d99f28" + }, + { + "file": "packages/artplayer/dist/plugin.ts", + "sha256": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35" + }, + { + "file": "packages/artplayer/dist/quality.ts", + "sha256": "7ed6ed78cea52991b2f6ddd2bd3b7bd8c5146fdfff7486fe8b814c3e632f1567" + }, + { + "file": "packages/artplayer/dist/runtime.cts", + "sha256": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652" + }, + { + "file": "packages/artplayer/dist/runtime.mts", + "sha256": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03" + }, + { + "file": "packages/artplayer/dist/runtime.ts", + "sha256": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b" + }, + { + "file": "packages/artplayer/dist/runtime/component.ts", + "sha256": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39" + }, + { + "file": "packages/artplayer/dist/runtime/construction.ts", + "sha256": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee" + }, + { + "file": "packages/artplayer/dist/runtime/events.ts", + "sha256": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe" + }, + { + "file": "packages/artplayer/dist/runtime/media.ts", + "sha256": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3" + }, + { + "file": "packages/artplayer/dist/runtime/option.ts", + "sha256": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce" + }, + { + "file": "packages/artplayer/dist/runtime/player.ts", + "sha256": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb" + }, + { + "file": "packages/artplayer/dist/runtime/plugin.ts", + "sha256": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9" + }, + { + "file": "packages/artplayer/dist/runtime/services.ts", + "sha256": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254" + }, + { + "file": "packages/artplayer/dist/runtime/setting.ts", + "sha256": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218" + }, + { + "file": "packages/artplayer/dist/runtime/subtitle.ts", + "sha256": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e" + }, + { + "file": "packages/artplayer/dist/runtime/template.ts", + "sha256": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1" + }, + { + "file": "packages/artplayer/dist/runtime/utils.ts", + "sha256": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916" + }, + { + "file": "packages/artplayer/dist/setting.ts", + "sha256": "d12a75b656fff70cbb30be4bffec46d9c4273636e8722bce971a4d2b188712a1" + }, + { + "file": "packages/artplayer/dist/subtitle.ts", + "sha256": "d25b470e47d6a9bd696d9c1ad8adb58e56a208f05695186d513bc8c43c2e8acf" + }, + { + "file": "packages/artplayer/dist/template.ts", + "sha256": "68aed9e97d006d6be4fabb8504ca84dafab770b0925f4d6e7319e67c82f21b0d" + }, + { + "file": "packages/artplayer/dist/utils.ts", + "sha256": "494ec447ab467a07ddd7a2c2abf778b3fce69fd28a09aaa8ced9759f8de2e3f6" + }, + { + "file": "packages/artplayer/types/COMPATIBILITY.md", + "sha256": "a7da9e102a116104b513df4f7451247b7759bc502d3375f30bd5b14a541826e0" + }, + { + "file": "packages/artplayer/types/README.md", + "sha256": "1bd9868e773610e6312fd48a1c5aa20772d29df0af40c3db66e75b7ab4a1aee0" + }, + { + "file": "packages/artplayer/types/artplayer.d.cts", + "sha256": "3685065e4263abcfd9d953176e461d5b3eb990b0363b54689a7f55deba770fef" + }, + { + "file": "packages/artplayer/types/artplayer.d.mts", + "sha256": "b664fec51ee5c5381f2ceab25d99d52aee56feab04a2ee7b4ea5b2145ea5fa0e" + }, + { + "file": "packages/artplayer/types/artplayer.d.ts", + "sha256": "5d0162adf7ac6d0f2bb9b5cfe361f28657c4d9c540cadbf36eba3cc954ce50f8" + }, + { + "file": "packages/artplayer/types/component.d.ts", + "sha256": "ae5bc1ddeaa1ee1ebbc62573e32423993727079205c64751a5a314170e588a32" + }, + { + "file": "packages/artplayer/types/config.d.ts", + "sha256": "36f9a84cd436f17701a0d11d3417fc1fe0414e0c52c80083b94a85dfc329e37e" + }, + { + "file": "packages/artplayer/types/cssVar.d.ts", + "sha256": "93217860fff2ebf750f606d95ddd22220a58837119e63bdf2f5f78fd7488458b" + }, + { + "file": "packages/artplayer/types/emitter.d.ts", + "sha256": "7e1f9a2a8ce65feb95734f1ed52d1334e57aa388bbef2a43d8bc53a9b6f6623c" + }, + { + "file": "packages/artplayer/types/events.d.ts", + "sha256": "f83624c9268a284477e8bd793fe3562a2363b72f2a44d5c64fe8c6a6cede8830" + }, + { + "file": "packages/artplayer/types/i18n.d.ts", + "sha256": "f4f2f05bdfda73c74fef34767cb18ee8e11b743120b1c4598e9714d7846018e5" + }, + { + "file": "packages/artplayer/types/icons.d.ts", + "sha256": "326a67ba7bdcf52862c5b2a269e540140aff98d05c7b96196485a77f84fe5960" + }, + { + "file": "packages/artplayer/types/language.d.cts", + "sha256": "f7928e108cf7b7814c2d75cb0a525333e95873fca6cd6d89a740450656b9c1cd" + }, + { + "file": "packages/artplayer/types/language.d.mts", + "sha256": "6619a26d604b7cccbe2f596243d87ae37cfaae33b8b52874ec071d9787446f9e" + }, + { + "file": "packages/artplayer/types/legacy/language.d.ts", + "sha256": "c7abda4d506fd933c350e9030290bf9e64347a921d683a66115da1995ebe0a81" + }, + { + "file": "packages/artplayer/types/option.d.ts", + "sha256": "ccf2c8ddc537dc65c9682d39f044726e23bff18f476b622512d7e6a4b949b5f6" + }, + { + "file": "packages/artplayer/types/playback.d.ts", + "sha256": "58705c273df6e76a77a6575e769a9ec6c013785c25080f2551aa22415788d870" + }, + { + "file": "packages/artplayer/types/player.d.ts", + "sha256": "92b00211b70ac71336e495899df972a0519dd138111846044fe4e0f967966177" + }, + { + "file": "packages/artplayer/types/plugin.d.ts", + "sha256": "fc3594a41c51d8248713e33c486fb1f6a518ac5c7ce31be6988a6cd8d052c5f3" + }, + { + "file": "packages/artplayer/types/quality.d.ts", + "sha256": "1ac1a48b4f74ff9ba1ce60443e1463d50d1c6a2e5d87d63dc7d2a8eb7f4c2c34" + }, + { + "file": "packages/artplayer/types/runtime.d.cts", + "sha256": "7ee988dfea9a0ac71a34a656f96f7b74e78aa92547cfdfab7ff7e1139a77d4a3" + }, + { + "file": "packages/artplayer/types/runtime.d.mts", + "sha256": "dcb85f59a8b7714918ced0c1d18c2bb24e8b80b56d8c594e019dcbdb5ad88b08" + }, + { + "file": "packages/artplayer/types/runtime.d.ts", + "sha256": "9c6ccd39a1be293f17ae46dae8ea077053e12635ee79d73a5e3b3a559230fcff" + }, + { + "file": "packages/artplayer/types/runtime/component.d.ts", + "sha256": "1b4c0cee44568649e80140fe778febfcae88af0ac85515f1cbeff78ab0c6d14f" + }, + { + "file": "packages/artplayer/types/runtime/construction.d.ts", + "sha256": "7a87bedf6f7ffff0c46078aa5f1551e0077d35574e286516121f5f935e2d9ce4" + }, + { + "file": "packages/artplayer/types/runtime/events.d.ts", + "sha256": "a1e2f9d387475453eaf95c2a5ee79e228636c0bb859bda3fcc46da46574a0c31" + }, + { + "file": "packages/artplayer/types/runtime/media.d.ts", + "sha256": "8fc89401be7fe25542c169d07dd5675f10916ed20be8493e19695966cf3864a8" + }, + { + "file": "packages/artplayer/types/runtime/option.d.ts", + "sha256": "6e334e1a76fdcc40b4665c02523bd31c3994d96078fadeb40e23422aa54c1a1d" + }, + { + "file": "packages/artplayer/types/runtime/player.d.ts", + "sha256": "8ac6383502e4872e83659838844856903031a81a0adc8e8535feb78453aa042c" + }, + { + "file": "packages/artplayer/types/runtime/plugin.d.ts", + "sha256": "8528f2b17843149f42f9cc16d6fd70baa238c9dc2c329b67d2c38096799c69bd" + }, + { + "file": "packages/artplayer/types/runtime/services.d.ts", + "sha256": "604c9f8e4b6c0da818f96576bf9f4b0e96085a9003927b2f7ba30027b1ba237e" + }, + { + "file": "packages/artplayer/types/runtime/setting.d.ts", + "sha256": "349c1fcb205ad312916bd3ee55e6bf241ea8a569fb2ab6c80822e69fc518f7d7" + }, + { + "file": "packages/artplayer/types/runtime/subtitle.d.ts", + "sha256": "269ff84678d327b3a9dc2f5bc6cc0d731d1e081b85422e474621d5d792efb153" + }, + { + "file": "packages/artplayer/types/runtime/template.d.ts", + "sha256": "7a62f968a38b4bf9109a4439557c02074eb1d62ba1f6e21a8eb194e91f0badfe" + }, + { + "file": "packages/artplayer/types/runtime/utils.d.ts", + "sha256": "6bf731705d86853e066dbaf3b8d4003b6548423fe615b7412b722bd0d3a6e48b" + }, + { + "file": "packages/artplayer/types/setting.d.ts", + "sha256": "08305a75dff96f06490430e099338b463df471b550c1d0dac3abc8995b39eb09" + }, + { + "file": "packages/artplayer/types/subtitle.d.ts", + "sha256": "b18314e2d64efdb6045830b6e12f615ae2ed585416130e562329ad3ea337f6ce" + }, + { + "file": "packages/artplayer/types/template.d.ts", + "sha256": "4792bc0c2cbcb7966e4375118bd34b326166e0831862e94ace4cf6b1bbe6a8c8" + }, + { + "file": "packages/artplayer/types/utils.d.ts", + "sha256": "fca0d3d814df94a25f9eb067c86fa0cf272e2791bac793b91229d57680797712" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.legacy.js", + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.mjs", + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.cts", + "sha256": "4f07514b37453cd6cea8e5aa28fa018ff31738e0d423c11a3b5eccd50ed30bcc" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.mts", + "sha256": "610179754db36276e161a07bccf4eaba8b4480f053e716a2bcc5a1574871a171" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts", + "sha256": "581aa2862e709601c87a23585f54a969ebd350be56a7469a31ff53f1311b578d" + } + ] + }, + "coverage": { + "file": "refactor/.cache/coverage/run-iRmuUI/report.json", + "sha256": "45691b6112241e762c091891fdab2da59cba85cc5baa51aa0adea04665a4485c", + "report": { + "task": "ENG-08", + "started": "2026-09-11T15:04:20.938Z", + "node": "v24.21.0", + "c8": "12.0.0", + "output": "refactor/.cache/coverage/run-iRmuUI", + "tests": [ + "test/playback.test.js", + "test/dash-control.test.js", + "test/public-behavior.test.js", + "test/helpers.test.js", + "test/chapter.test.js", + "test/utils.test.js", + "test/resource-scope.test.js", + "test/instance-lifecycle.test.js", + "test/options.test.js", + "test/media-hosts.test.js", + "test/plugins.test.js", + "test/source.test.js", + "test/playback-properties.test.js", + "test/media-events.test.js", + "test/template-resources.test.js", + "test/core-vendor.test.js", + "test/component-resources.test.js", + "test/setting-model.test.js", + "test/setting-layout.test.js", + "test/setting-resources.test.js", + "test/subtitle.test.js", + "test/display-native.test.js", + "test/display-video-fullscreen.test.js", + "test/display-pip.test.js", + "test/display-mini.test.js", + "test/display-sizing.test.js", + "test/display-orientation.test.js", + "test/hotkey.test.js", + "test/listener-registry.test.js", + "test/global-events.test.js", + "test/pointer-events.test.js", + "test/gesture.test.js", + "test/event-scheduling.test.js", + "test/notice.test.js", + "test/fast-forward.test.js", + "test/auto-playback.test.js", + "test/builtin-layers.test.js", + "test/prompt-components.test.js", + "test/screenshot.test.js", + "test/thumbnails.test.js", + "test/progress.test.js", + "test/environment.test.js", + "test/storage.test.js", + "test/facade-properties.test.js", + "test/dom-boundaries.test.js", + "test/initialization.test.js", + "test/entry.test.js", + "test/accessibility-button.test.js", + "test/accessibility-focus.test.js", + "test/accessibility-slider.test.js" + ], + "testExitCode": 0, + "status": "passed", + "maps": { + "modules": 50, + "reports": [ + { + "file": "coverage-10248-1789139062932-0.json", + "rawSha256": "77b8c47efb929a8d8ae9cbf687aec05f57b3dfd36271cb42e6cb19f72ea09561", + "normalizedSha256": "5fcb16f021c3462b88c0c143429fe0b6155ac9b7b048e1e371a1ad8224038a9c", + "modules": 1, + "normalizedSources": 6 + }, + { + "file": "coverage-11716-1789139064089-0.json", + "rawSha256": "3c723ce4c62f2d5069c9fda72ab0de3137e67d669f5733b2917c173c628f6c63", + "normalizedSha256": "3f89575d0e649495d7dbad62ffdec119f2129fd5142baeb9f8a2f79708a7cd0c", + "modules": 1, + "normalizedSources": 14 + }, + { + "file": "coverage-13740-1789139063903-0.json", + "rawSha256": "a33bd2638fcf90b6b6916a531e57c10e71f8670fe380e07288d9267e7af712c9", + "normalizedSha256": "fc441d623e416d781471dc41023d342bde3a7bc881ba2bf757ffacbb158ed711", + "modules": 1, + "normalizedSources": 12 + }, + { + "file": "coverage-13824-1789139063081-0.json", + "rawSha256": "b2506c4cbf2d4afbf399e8e3a76b4b1949c41295f6384453bffb38164d123d92", + "normalizedSha256": "05dc67894783de487f4222e4eafb6ece6d783926038ce92ec29cd8708faf1488", + "modules": 1, + "normalizedSources": 8 + }, + { + "file": "coverage-14624-1789139065177-0.json", + "rawSha256": "dad07a336da59d71709074de01c3e990a233f2fdf1cb4bfdab1a130644560b7d", + "normalizedSha256": "fa0e43de63d068f358060182aa0ff3e8c7806ca0a791b8d0331299caabd2970f", + "modules": 1, + "normalizedSources": 3 + }, + { + "file": "coverage-15356-1789139063883-0.json", + "rawSha256": "7ac1fb2776ec432546d43efd93112338d63b5f6a764f0319e9d157e8ca333612", + "normalizedSha256": "14f09db2f7be8d3f7ea45410f27c0752876d815d0896a396b1ab0d670cc06efe", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-15376-1789139066662-0.json", + "rawSha256": "d037dc29f8bae628a8254e67409cf2498b13f7c5a02692dbe7d9dbeeb5ccfa3f", + "normalizedSha256": "581e0c41da48e68b2876f12ab7da1e4604363e0df4ad5a6d409f036858005e7c", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-15544-1789139062746-0.json", + "rawSha256": "72a5f11ec8f85ac97e15e926a7cd9be6851806af736e9c2db220eee5b2420a29", + "normalizedSha256": "d3c5a91bb9f8ced499c374f7e017546d323cea61e6295e584ccfb052aed2db10", + "modules": 1, + "normalizedSources": 3 + }, + { + "file": "coverage-16312-1789139064877-0.json", + "rawSha256": "698ba657163a99814d14f67e4109bb33a0f97452323cd92e02ebb96b73fc7baf", + "normalizedSha256": "49bb2a24c91cb3f97ba7be129faba7c487deb6146d63574875c8da229ba6b148", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-16664-1789139061846-0.json", + "rawSha256": "96517ff8a0bbe98bd41c684822649a829167774f52e5ddb8c714c3466ce31f45", + "normalizedSha256": "1c30a679564298898455c1b2d132998e1f8b0297bc8b6898dbe707117d5fa971", + "modules": 1, + "normalizedSources": 5 + }, + { + "file": "coverage-17612-1789139066013-0.json", + "rawSha256": "a0dba13a922b46e6936a341f972691d656ed2c4c18c9ee801b81b7c2200cdf56", + "normalizedSha256": "3a1138515568a373463957c9787d16d8b9be7546f9f61aa769f4f2a138053033", + "modules": 1, + "normalizedSources": 2 + }, + { + "file": "coverage-17664-1789139064346-0.json", + "rawSha256": "5d6bfb08b637352513c8803542952761666ef86815c46880e2495624b70ddbf6", + "normalizedSha256": "8c0a66b9e92f73cf53229b82e3c4ece8d640d4bad42d0843986d2e50c6d3d4ca", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-17992-1789139063607-0.json", + "rawSha256": "fa24f026db0b25fd185f483ea68b528610708b807e6503c880e87f497e7636b2", + "normalizedSha256": "20c5f298d33c32f024c333addc6ffb8e2e1ade0aeb070fe7a140c9585e28a24e", + "modules": 1, + "normalizedSources": 15 + }, + { + "file": "coverage-19320-1789139063034-0.json", + "rawSha256": "e7ffc53676911e4c969f47436099d348fad800b7f2622441a20fc26176981be9", + "normalizedSha256": "1b0f9a23ce19d31e263576578943823e9505afb5d70b40cb8c2e271d8786828b", + "modules": 1, + "normalizedSources": 13 + }, + { + "file": "coverage-19352-1789139064090-0.json", + "rawSha256": "234931a45c712c2d0ea67d7400d52f541632895d9dcd62760fb38919f44d7765", + "normalizedSha256": "40b7304a9f92ec28b30fc0b176873711063e19780ffdc3c98c59aa4df31cd717", + "modules": 1, + "normalizedSources": 9 + }, + { + "file": "coverage-20388-1789139063036-0.json", + "rawSha256": "f7ffd086797ed0f959bd39b15b484739b38f810cd645ca0c11ff9403a75cd320", + "normalizedSha256": "e3e76bebb5c1b10661829d7e032aa7770ae343240570f2495d27f762d25b3238", + "modules": 1, + "normalizedSources": 12 + }, + { + "file": "coverage-20712-1789139069106-1.json", + "rawSha256": "a1e3dd686e957088907c0234fdd3892da225045954cb45e85f16c351fc4a1dad", + "normalizedSha256": "cd8e668b2f74871756b8287bb9c10435291e409531415d87e2295ecb9b256971", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-20712-1789139069171-0.json", + "rawSha256": "30f6ae2b08c5ade2a31c48bf194705a678432694f352f0b19126675f722d7137", + "normalizedSha256": "9b8cadddfde6c33e69b07ad2d95e20efcbb97f19d6500a322c934b28dc5be4f0", + "modules": 2, + "normalizedSources": 241 + }, + { + "file": "coverage-20772-1789139061970-0.json", + "rawSha256": "24a8ab1385396a778f270e83cc8a7b804d5b6883d0f9f6449f93a7157bc3a0d2", + "normalizedSha256": "cbd4681c23e11c060419ad42abc687c9c12fbc2e296812fdbc18a7ff892e92f1", + "modules": 1, + "normalizedSources": 50 + }, + { + "file": "coverage-21108-1789139062774-0.json", + "rawSha256": "bb6acaabbddeb8936bbac8f064552d63534a76cca1a7733a616465a5df86cf6c", + "normalizedSha256": "269bc3a89a35bed75adaef414e7d9b0e84123a3ea38f8490e42039be38aa293d", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-21188-1789139066081-0.json", + "rawSha256": "5c5433b25b9c2f1cb1d84f2bf3ec341a3d3fe353af3122f6b56d66a0160c2869", + "normalizedSha256": "36ebb5efda4a1ffc60dca7b95cd12b163f19247c99a99fa5762de06c53e7ef10", + "modules": 1, + "normalizedSources": 1 + }, + { + "file": "coverage-21196-1789139063790-0.json", + "rawSha256": "e7f9ab219f499667053e120744544089054580762a5d07c26a83d34a2f8d5936", + "normalizedSha256": "83617dba0d369b5c35f3b89cc3d308980c612d1b3daf508250e3744c08efe7ef", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-21312-1789139063727-0.json", + "rawSha256": "4bd3e3418c1fd433d0166e0b13fb24b168797a15d3ea7219ff37b7ddf0372e1b", + "normalizedSha256": "765685fb11013c102ddee5e9b2272b806d8a8aba1dddbb9c76679d0566d6c4e0", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-21360-1789139062644-0.json", + "rawSha256": "88014ce4428b42dcd6984390565abe69216bfdbcf28daa31bace6aac0414ff25", + "normalizedSha256": "f252efe156027ded6c4bde0b958a1d7229f329717d9044c3e10653de59b2255b", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-2160-1789139061689-0.json", + "rawSha256": "be4c66cc29c63f961ff315c1765b46902acec4386f522218ccb168a435f226f8", + "normalizedSha256": "94ad9fcd7aec152cd6de2f0cc831fac3e13d50571c9c4c65b3d7b9e5ea35e164", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-21600-1789139063668-0.json", + "rawSha256": "673c6dcbf9d46c6fdc3033c396eb4effe9bd3ca4e0168da5bc7f66a2cfde4431", + "normalizedSha256": "18fd76edbf1ca88c89716ed41329dd72951ed26d980d8f7b727abc033bab6615", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-21804-1789139063302-0.json", + "rawSha256": "4fafd55844ce80b22739138e50468cdaaca79e67b92f8ad759c64e1d2e33c67f", + "normalizedSha256": "4fe8df1a944fb2d1e39d2d7891c1a51f639a0ec417a2883d1a1daeeda7e768d5", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-22016-1789139062020-0.json", + "rawSha256": "c3976d8151342ca081afa6be692df7096f46b027accf7459c38552e28fd4cd5b", + "normalizedSha256": "bc2c425a6eff33a3cb3af1f973a73abecd8ff2cf2e1d31dff331f8ed09e5c6a1", + "modules": 1, + "normalizedSources": 6 + }, + { + "file": "coverage-2212-1789139062020-0.json", + "rawSha256": "8d44e23eb93118bc6c1aa66765c757241b864ae1ed1867c0b62dd9c0626cd252", + "normalizedSha256": "ae906aa4b91973cea9f55326646dfeb5beec12416e026dc3895da985d1b0b691", + "modules": 1, + "normalizedSources": 19 + }, + { + "file": "coverage-2212-1789139065792-0.json", + "rawSha256": "e388ed11207ce9f203120638d20d1582b8437db8f978dbb502a196e40b28c31d", + "normalizedSha256": "c9a253a580cfb1c541a60588a80056a3a659689760ea400083796207306a299f", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-22256-1789139061715-0.json", + "rawSha256": "68e5d856ff56344a2d519650be7e1557f52fb31504e607ce7ba324d1d9e4fab1", + "normalizedSha256": "21ecc3b9f72c9d378754886393a054f4e3c155113da31c5096618a3b6e387778", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-22768-1789139064637-0.json", + "rawSha256": "efd5b9d35cc9e7b5a59294dfac9c5c0ab531ec410d173ad713dd9c865105274d", + "normalizedSha256": "67a7735d1ae8d9a3fa16cda0da88362ef5e98aec853726c210ce5d0cf7a0b8e8", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-23224-1789139065300-0.json", + "rawSha256": "66d47fdde622dafd4c803f27845cc5753451bf621d290b9110e9157874443048", + "normalizedSha256": "e6cb50517818e4f538ff38a6bd9d91501e93c1be13427a66da560862827e60d0", + "modules": 1, + "normalizedSources": 12 + }, + { + "file": "coverage-2332-1789139061724-0.json", + "rawSha256": "0e8889defe82fb28afd5119ac1747f50965faad6550743713ed24b57a00e7c8a", + "normalizedSha256": "02f730c879ee40291bffbe903204906dae45ab2f3bacfd471ed09d928a81bc85", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-24000-1789139067910-1.json", + "rawSha256": "e8f67934e82846802ecb352ebaca37f7398baeff85ebcbfb050aeaa4433ca0ed", + "normalizedSha256": "6fab01fe8fd0a012996048917d10881c5d8524188ceb8c849307839544de7240", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-24000-1789139067986-0.json", + "rawSha256": "caaff5556a788ebd7479e89e4dcf1819ba105ca030000e2a6316e1decbe3184e", + "normalizedSha256": "8c13363d53e8808c256c9d0f6bcce87dc73eb1c88722ec00b0ea1368c0354b1b", + "modules": 2, + "normalizedSources": 245 + }, + { + "file": "coverage-24276-1789139066143-0.json", + "rawSha256": "80c6a570f3e01de75f4d9d136713a68e99cff871df6bfe4b9bb400583a1910de", + "normalizedSha256": "160aec9de1bacddf38123179a0eb3b0328c4d5b481518a7f4e30ddef523bbcbd", + "modules": 1, + "normalizedSources": 12 + }, + { + "file": "coverage-24496-1789139066170-0.json", + "rawSha256": "3b1cd5904f71b373bf7e678f4ddff85e59a4234e34f9444c435fd7b1a4f37930", + "normalizedSha256": "94b761681b245b78516395c837c13945aa1ea0129ac1dcc96ee4317fc35c52e2", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-24640-1789139069283-1.json", + "rawSha256": "f2733b9608a260d3c81307304625549cdfd9764794ee7b443851680bfbdf54c8", + "normalizedSha256": "498166c615dd5ecbfb57a666ef3f06e4e80770dadec3389d488034da4dafe754", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-24640-1789139069339-0.json", + "rawSha256": "31d8ff7536ddce5fe262af54ee1c53500008bfe867d8b7014e25490330a22b1a", + "normalizedSha256": "341fba51cdc04cdb22378290e14774ac4e706ebdcd1d3eab5b1a12fd9c790b4e", + "modules": 1, + "normalizedSources": 235 + }, + { + "file": "coverage-25284-1789139065663-0.json", + "rawSha256": "e9189ad7874e068760eb9540bd35ef8b7b80ac7a74f36fa81d04322583fd4e9e", + "normalizedSha256": "08c31e1077928bcd156fb15a3c99fd0d103a5932f0de4bd2ca8e82e08cb66e17", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-25388-1789139062702-0.json", + "rawSha256": "b3e4a31e16845d757d4d2386bf696c2e553836b166ef3021dff1d90ba2d70fbe", + "normalizedSha256": "515c136f9f86c8443dd218f8158164e8dc89c2f09103a999c36d03ee44d3a63c", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-25792-1789139064846-0.json", + "rawSha256": "4676cef7308be5d4d89304d320ce2bdc817cf60ffee0632132fc152420930ae1", + "normalizedSha256": "a8d2addc1676dda9945ab3465e3c96bff0e9c4335e0b76918db7164f24b92bdd", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-25904-1789139062544-0.json", + "rawSha256": "8f1aa24ed7d5dd6aa8be4ac997e7e7cd94ff21920f51adf07bb8cc0a78a9b657", + "normalizedSha256": "cf604cfa0d2416e4d0f213772a43a21d21bb7458d5e0f0308a950129734e999e", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-25964-1789139064922-0.json", + "rawSha256": "5072e5bec41cfd2b59364b8108649d677740625cb26cb898923b6a351250bd19", + "normalizedSha256": "99aed0e27ca1da0030f1eb6c3033a978dc7c2e5b658a89f8fbe8171c541d9e47", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-26120-1789139065898-0.json", + "rawSha256": "5abe33642e0b0cd882e8de9a238a55538f423fb2bd9fa204f7788c6e59f94ea7", + "normalizedSha256": "9173df88a01185f79d8db8a68df30cec5a286650d0ac7ac137fa525299535794", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-26220-1789139062780-0.json", + "rawSha256": "7c7627eff525a2b52bc9eb82f237443451b6753cb21f37288b256e4fcbb6d504", + "normalizedSha256": "24138f8aa0844c81f088f80d6b5fd3ee24affda21b1d3798cc97b96350de2362", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-26268-1789139065776-0.json", + "rawSha256": "0718ded21f84864516e0ea5b710ee5c610627b55e0119fd03570167a96284499", + "normalizedSha256": "7e0272a8a3a5170bbe7a56c6c02a663c5a5e261a35a600eefbe4f8224153d1aa", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-26504-1789139064217-0.json", + "rawSha256": "59bd321c20ac77ac56cb73f1caf34316c9fa2df037b6dde07fd3f11f5cf148a1", + "normalizedSha256": "ccd117f5c601dfc0f5578643d27002ead166d95335f555e11c887d26dcee3e29", + "modules": 1, + "normalizedSources": 27 + }, + { + "file": "coverage-26680-1789139061935-0.json", + "rawSha256": "e0edd43a09fc5eff43e8871ef22f936814c9ed3251ec90a83d6e8ec336d1ef48", + "normalizedSha256": "a9b32eb03292b8f7970318c4179ee733f55e04775acd1892f4d67968c681d427", + "modules": 1, + "normalizedSources": 4 + }, + { + "file": "coverage-26908-1789139065091-0.json", + "rawSha256": "23756d5a8f0d73d67b231de0e5520d4e3527142d6cf9d818a98ad9d269b628eb", + "normalizedSha256": "ec2c4f9b8d2cdacd398688350d68cf3a19cb554de447dd2290c3795288db0c3d", + "modules": 1, + "normalizedSources": 34 + }, + { + "file": "coverage-28728-1789139061937-0.json", + "rawSha256": "d1912aac88a954570f36c086be4f622437fef15c4c52614eb030ef7f647b1129", + "normalizedSha256": "f236bf51bc630dcd194d6e6ba60e330fc9ae04649fbf98b8d7eed7f47406765d", + "modules": 1, + "normalizedSources": 1 + }, + { + "file": "coverage-28796-1789139062100-0.json", + "rawSha256": "698ce3f0de3ef3d6b713e4e32b11e70f54da8ab4ca0f4d48d9f5ee2e12bc38fa", + "normalizedSha256": "6acb48a7f65d078b62f9afaf7b7c6ea620011f189339c79077daf34d09f19c80", + "modules": 1, + "normalizedSources": 19 + }, + { + "file": "coverage-29256-1789139065073-0.json", + "rawSha256": "1424a3bac450fd9b757bd3f6f06e5b7bf9a5730bceddea5dac35630bb54b12d4", + "normalizedSha256": "5e78f7430702167e802467b85a31f169af749cc8342124463496875c9aad9937", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-29704-1789139061725-0.json", + "rawSha256": "d20d1d3b49e191be60e1b8c8a173ef89f9f3278a9c6db83089ed751fbd250516", + "normalizedSha256": "1771f06c02255e8900ed86ddd25ffdb06f915e354b147898fed97129c9a7c5cf", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-29956-1789139066162-0.json", + "rawSha256": "a010cc0139e50e1de252777d88726c797518d77c65908c9c8af98a90cf178cc3", + "normalizedSha256": "a176f70ff8dc1d187902fe8a20965fffc54e9010a9fc2c18562184fef73ed385", + "modules": 1, + "normalizedSources": 20 + }, + { + "file": "coverage-29980-1789139063665-0.json", + "rawSha256": "5b295eeba088d20d8a0913eb698808ee179f6205d10134cc2219e3429117f04b", + "normalizedSha256": "4e6710d007fa931c61156db7a41e10a190030050288dcd540bbe4ee237d65797", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-30064-1789139062807-0.json", + "rawSha256": "8acb6586d04055ac2d6a6c19d4e5bf3fefc2808d9c6a5ed3c9dec8864fe6fdbf", + "normalizedSha256": "3ee7a8f14a57a56f71a54c9880e878a101723b270a3ee73b2b6c7f83748387af", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-30076-1789139061667-0.json", + "rawSha256": "d1596dfd598d49631d192348f685eac8683cbd0e74d1bbd5f3e460b57038067d", + "normalizedSha256": "5fcf35cefe09ea5a940712517cc9cd743d64e5916c8d1197202438cbf76c45e4", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-30284-1789139064865-0.json", + "rawSha256": "84a94be0a510a94ce43af2f8ffb06793873b5a59df37b14cda188de745421326", + "normalizedSha256": "6775a9c4cca1bdcc26aec99eab74da5cc10e3d8c4f29855dab3aa31a765bc6b8", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-30468-1789139065780-0.json", + "rawSha256": "e26728814880778d6afa8cde9477560583db0523e42e3e7c3bd818916fd1e580", + "normalizedSha256": "772ae142cad0ae9612921cdcb20c149ddc02eeacd8e9190370103dff5c360baf", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-30900-1789139064225-0.json", + "rawSha256": "dd0b376beb29e94bea7add18ba13ffb2a1d71ec5e6a21a45fc4206fcfe7e7a4e", + "normalizedSha256": "547915234e66b01ce7a928b143f0fb5557a2ffc5e31ee0d219201f50e9a2e556", + "modules": 1, + "normalizedSources": 13 + }, + { + "file": "coverage-30912-1789139063629-0.json", + "rawSha256": "4d1bb7ab98d0d08c469c6a4b91bc0fc45884df92f9cd67753abe9dadd602fd07", + "normalizedSha256": "4ffca474cc75d2915dc617927b78b50910b6df14c210a1548b858321578815b5", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-31132-1789139066096-0.json", + "rawSha256": "c51701b772f49644e881ac75a59c39cf4b7b559666f1d3c0403d0441a8a9863b", + "normalizedSha256": "b800e2f9e4838eccdf6cbff004702278a1b76c71981402a3fb05c73ab0842fe3", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-31296-1789139062030-0.json", + "rawSha256": "69297cbdd5d0ffac910d092ad34936ee6f483e7649ae307ff2b36b2a75264d85", + "normalizedSha256": "83313ca27db211de1d759cea7cdf59dcf7a2f956b90219afb789f12da8a6f4ac", + "modules": 1, + "normalizedSources": 19 + }, + { + "file": "coverage-31296-1789139065014-0.json", + "rawSha256": "9194f1dae4e23c2e0f6629ab6417461f601d5ff7a39ba25db6123146715b393f", + "normalizedSha256": "dcf53202b620a9b94b7e4fd26d4bd7bac938a548eee053ec21e91e5cbfe49507", + "modules": 1, + "normalizedSources": 17 + }, + { + "file": "coverage-31380-1789139062781-0.json", + "rawSha256": "e780a0f3b27ccc88f7eae7f3ca2012975a7575d70b4553e2aa99bd326c9e39e2", + "normalizedSha256": "86c42c2950bd5c9db29e4161cd265f570de6810c12c5a41ca147e570a80231f7", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-31580-1789139062816-0.json", + "rawSha256": "74199f9a4c6795cccb9f242b40c3a51b4a785deea4a11ea524638b022be88ee6", + "normalizedSha256": "1c4a85dcfde99caf31b163619e56a2fe846b94b5ec4281c8e99ecf267b142460", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-31664-1789139061653-0.json", + "rawSha256": "f3a5450e5160440db57784c54d5a2e803f51ca106fda572a89c192379cce45da", + "normalizedSha256": "442aba3408982ebb21e4539e6a3a34fc9dfcfa5d1380d2d4bebb5525fdc1b922", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-31796-1789139062948-0.json", + "rawSha256": "6a8b92cf7d48c506c19a22ed6637df3f4439622b13a0b93a79d41fc7657a351d", + "normalizedSha256": "e2a1ccce8e54db6c4c26e5d9963036cdcca539636a198ed045ffee4c2b51a3a7", + "modules": 1, + "normalizedSources": 6 + }, + { + "file": "coverage-31892-1789139062639-0.json", + "rawSha256": "dd9bad80fe60e02923c8e0f83899ca4252d97f2c02c01e2bc86c634c3f73e4ea", + "normalizedSha256": "149ab74cdf4b529cdf688e3d692ee1835e66efc424a3cfb722e756f903133f34", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-32380-1789139063093-0.json", + "rawSha256": "8ec1e26ed0a15971c8a6efbbe467d7aaa4f12ba796e8417be459016da7cdad2a", + "normalizedSha256": "13e0e2a33e0557534239e8e5cacae1fa91252ae2d10e4169c6bdb96c2937ce65", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-32696-1789139062492-0.json", + "rawSha256": "1639ebf61e2ab73ebfaad41accd126b1f2102d8e36605a86206313707a0ddb7d", + "normalizedSha256": "e9f3ab4d21b8f4bc941aecc46c5852a18dab694fdf857bfe261049e1ec37a0a0", + "modules": 1, + "normalizedSources": 3 + }, + { + "file": "coverage-33120-1789139061931-0.json", + "rawSha256": "bb61b58ef5cb33277b262de9cbfe44c391636d14f55e96f5547312b0b8f04b96", + "normalizedSha256": "71fe537bdd3dcba034eb446a02f54df6b4c45a906b60dc488588909ba1a20732", + "modules": 1, + "normalizedSources": 1 + }, + { + "file": "coverage-33164-1789139061743-0.json", + "rawSha256": "7be8472c2be63ead497540cf15ce6d5bb1b973183c5ddc1759ca4f430f950230", + "normalizedSha256": "5ffcc4924820e50dda4c1d70a8be9137949dd515856cef9859cb8bdf3efb4d23", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-33360-1789139065155-0.json", + "rawSha256": "036644e9fc7397f8727314a99d88d5846c85fdbc477dd22e1e09d565a3514680", + "normalizedSha256": "17cb17f209961cf4f9dfd1755c6b3fcde7228d3b945aaac68128816376e6fbd3", + "modules": 1, + "normalizedSources": 26 + }, + { + "file": "coverage-33564-1789139063845-0.json", + "rawSha256": "c5fd04f43f2185573a987814bbd7fb5f9f2591cb1e651c6a51b62459dc8f808e", + "normalizedSha256": "004f95b80ae71b54bbe0faf5a444469e272d27368622756b725d1f8bbc4118da", + "modules": 2, + "normalizedSources": 2 + }, + { + "file": "coverage-33656-1789139062941-0.json", + "rawSha256": "31d1bb4537448eb01626bf382f9110e179ec9a2494f59fff423465641e06fc9b", + "normalizedSha256": "d14a65f3a43e6ac430371573c235e74ffc6d5cf462429d7943fea76e27cf3899", + "modules": 1, + "normalizedSources": 1 + }, + { + "file": "coverage-33676-1789139061734-0.json", + "rawSha256": "b6e041a7834ae70f8c2a47f32b18ca46ab68f98eb74de42c844941af560bc9bc", + "normalizedSha256": "338ee31f542470d74097fabcae90cb2f79dd46a71642aab2020c342faa7df32e", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-33700-1789139064719-0.json", + "rawSha256": "aa04c06a5171c8e319639e0d7d2c7c25584348cf05b79536d0f931c4cd6f33f9", + "normalizedSha256": "f983682d1c5c1ac6003faa78ac6aa3a28afebebb1403f46ecb3f1783466fd134", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-33744-1789139063734-0.json", + "rawSha256": "d721f477684b11bc2a3d95bf6d14757b8532f555e3eeb96ff6f472a54aba95b6", + "normalizedSha256": "a5dda3d0fdbfd115306a3e8df50c74d485168c4f49e93e8eefd1cb665eed68f6", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-33924-1789139066301-0.json", + "rawSha256": "b6e245a6e7b353ddae905d221c1952f03f4ef14b6e0527070bf1d08768b0b517", + "normalizedSha256": "484cef140e02b76735bdfb0fca13d3946442ea517c6ebb7110ac6435fb0c26d7", + "modules": 1, + "normalizedSources": 16 + }, + { + "file": "coverage-34160-1789139065951-0.json", + "rawSha256": "af3132d49aa38f8019280adadb7c4822bc766ae253e846d95de16ee978b7adff", + "normalizedSha256": "712599005a8008caf026f52f469a7396559ea98e30c27172099588cb7adcb2a2", + "modules": 1, + "normalizedSources": 2 + }, + { + "file": "coverage-34224-1789139065076-0.json", + "rawSha256": "ff75752737c7a89ebaf758bb319c2c3384df8eafc51b980049e5064a5f79cb1d", + "normalizedSha256": "921a994edbf07720d866169dac4fe1f67325a6ee270480b805e9a942280e4c4b", + "modules": 1, + "normalizedSources": 13 + }, + { + "file": "coverage-34408-1789139063833-0.json", + "rawSha256": "500ad523a4a6d6c444c11181eb95923965bf22e0dfd214c1990a7d19f1fefb87", + "normalizedSha256": "48cb900465a0283ef481abc94e200c476c120fcabd4a9cd4c1c79aa00a6f244d", + "modules": 1, + "normalizedSources": 4 + }, + { + "file": "coverage-34584-1789139061881-0.json", + "rawSha256": "a5c4372ec4724535e0ae41445a131558875e2148bf8dfd4b659cc4697851aebd", + "normalizedSha256": "b0beb0f4c3c94c8596db4fef2b59c3b9d9ed6fa429fe426ae1a73116d3022d3d", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-34648-1789139061722-0.json", + "rawSha256": "85ceb4626152dd011b9fc8e3ce7a7059110ea84bf535a173fe4416b08493f5a0", + "normalizedSha256": "98c06d88ec5f73b1f9567387defb9eb35fb2a4e5c36f459ae49f4901d3b63f87", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-3508-1789139064639-0.json", + "rawSha256": "2dea3db96e054dfe8de3880784f369c343d0bd9a6f1a1ba54b9e9186754b8a39", + "normalizedSha256": "f3a89ffc3cd70c660babbf7480a0d2afe36d788913766ca52be5f1bbcd6590ad", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-3836-1789139063969-0.json", + "rawSha256": "02f998eaf67f32bf4c3f7a7cd55ba460238d38b50b034d071275f3f0b2d128ad", + "normalizedSha256": "3a111ba89ace83de262ccc1a4b593bb23c3f1daf7f8f6dff92fa11c0a3b4cf90", + "modules": 1, + "normalizedSources": 3 + }, + { + "file": "coverage-4072-1789139065040-0.json", + "rawSha256": "0e9f51439cd673a831c044198514de868ff8eea53c4fee81c76e0b24e2b091ae", + "normalizedSha256": "2527820f5bd47b2cda58c290ea60bc3ff279f66dcd84ce096d3003d16e8d327d", + "modules": 1, + "normalizedSources": 15 + }, + { + "file": "coverage-4992-1789139068047-1.json", + "rawSha256": "4585bfc3cac15e7e4fcfe09cdfeacc3fc8e1a57490fc94a987a5a8cdfbf8b6b8", + "normalizedSha256": "13910f80b31463ff4aedeeba0fb4c730e28a8a63ea83b2621e80d84195b58180", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-4992-1789139068118-0.json", + "rawSha256": "e66a043ff94eeac91514973b592028b974208efbe9215b0403f356925d9c59a5", + "normalizedSha256": "f8796cfc39de321f7f13dd6cd9af6f92defd36c0e3b2584187dbacac96867744", + "modules": 1, + "normalizedSources": 235 + }, + { + "file": "coverage-5368-1789139063887-0.json", + "rawSha256": "b10806ec69d01cb954d4f610affc643a6d7db3855bd2bdd3630b83bb69739bec", + "normalizedSha256": "3279e7e55f1afced472f52fc6992a92bd9713d784d78c60cf6e255aed78fa40b", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-7304-1789139061698-0.json", + "rawSha256": "0f360a300ad1dee12f25598094c2a428b326c0e63e6bec43469ce3e475a08844", + "normalizedSha256": "e1b4a1be7472b4c9a449491fcac27cbe151cf01c69c635d8d7e501ecbdb8ae0b", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-7304-1789139063947-0.json", + "rawSha256": "5ef47f72b83234d5f1bc3c1b37aeb45dd401939d6651338b2c0bc9112acc5e0e", + "normalizedSha256": "57065c94371ebc744db3bf872a89eeedb1dd82b11c720f7eac8b54bbb3dd8e6b", + "modules": 1, + "normalizedSources": 9 + }, + { + "file": "coverage-7736-1789139066463-0.json", + "rawSha256": "6e886ca75b2f3c5768537ba777cb1998101d1d363bc11878c7fd502471ac68eb", + "normalizedSha256": "8b81393a118ed61cd24ad9cee4480f96ddd9f60f0ffbe41ed15b03514a988e8e", + "modules": 1, + "normalizedSources": 14 + }, + { + "file": "coverage-7884-1789139064599-0.json", + "rawSha256": "e19829500395473f65353dcb919ba235f337f5456abf22381f7641bb2f2f1761", + "normalizedSha256": "1d95a1ff1a4ff20bcf5b491eebd00304acf093b3368697a2ecf2a3ab206e9bf8", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-7980-1789139064905-0.json", + "rawSha256": "503eb4865329cc433fa23532ab1a4742e5cb30ea3546d4d45c5048d108c1168c", + "normalizedSha256": "01cf2913077ba92c9c55ebed53fb92855de04ff039f1fe10f2bd78a8b03ba55e", + "modules": 1, + "normalizedSources": 22 + }, + { + "file": "coverage-8512-1789139063583-0.json", + "rawSha256": "8eb58b580020a15e1b3c0bb3da07e0eb1b4f7bbfd163359b2c32becb843411c2", + "normalizedSha256": "58dde08a670e77175cda535cf249ee11b82b461a77e0c8acecda774a1e3e8df4", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-8712-1789139062973-0.json", + "rawSha256": "223ee4a1d7dda93228f480b34e62953523794cdb44313b28bce846e81b1edc7a", + "normalizedSha256": "028e1ea50b8cd0b6d2249008376e9affecbb2ff25b32b12210a2c9b099ace469", + "modules": 1, + "normalizedSources": 9 + }, + { + "file": "coverage-9232-1789139066022-0.json", + "rawSha256": "d97be19a8a9c2f35997c9cf233aa1cd25274cfe604247aef5f3c38472a1c69e7", + "normalizedSha256": "60d27f34bd765ee36cd17b5933720ef4e5c567f8703110915181129f42a1d08a", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-924-1789139067117-1.json", + "rawSha256": "08ed8ee15fb92f48e064c26264b06189d96ea8d1e1ba1a47c4daa39ae9c79293", + "normalizedSha256": "24d056aaf23d2e444d949d5176c3f5c6b28deed810e79caf3964d32a1a06b4da", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-924-1789139067182-0.json", + "rawSha256": "074ab69ba114ef6da4eaec3dd399b92f29129815243b79cdc89f0c944b34211a", + "normalizedSha256": "b89f08740c810672c58b536166699c450a284c448b526b69e640d2e9acb34aa0", + "modules": 0, + "normalizedSources": 0 + }, + { + "file": "coverage-9524-1789139062683-0.json", + "rawSha256": "27232dead96242fb085005e18ad75fe7be74d216156bca8d80a9d1fde5fefe8c", + "normalizedSha256": "9a8c25d7b17eabb37a5e8d1f11f96fe48f9e9c55f0970d5918cb813aba0db440", + "modules": 0, + "normalizedSources": 0 + } + ] + }, + "files": [ + { + "file": "packages/artplayer-plugin-chapter/src/chapters.ts", + "sha256": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "metrics": { + "lines": { + "covered": 36, + "total": 36, + "percent": 100 + }, + "branches": { + "covered": 30, + "total": 30, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 36, + "total": 36, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer-plugin-chapter/src/index.ts", + "sha256": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "metrics": { + "lines": { + "covered": 0, + "total": 54, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 54, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer-plugin-chapter/src/progress.ts", + "sha256": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "metrics": { + "lines": { + "covered": 0, + "total": 93, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 93, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer-plugin-chapter/src/stylesheet.ts", + "sha256": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "metrics": { + "lines": { + "covered": 0, + "total": 21, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 21, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/button.ts", + "sha256": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "metrics": { + "lines": { + "covered": 48, + "total": 48, + "percent": 100 + }, + "branches": { + "covered": 32, + "total": 33, + "percent": 96.96969696969697 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 48, + "total": 48, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/focus.ts", + "sha256": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "metrics": { + "lines": { + "covered": 50, + "total": 50, + "percent": 100 + }, + "branches": { + "covered": 16, + "total": 16, + "percent": 100 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 50, + "total": 50, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/keyboard.ts", + "sha256": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "metrics": { + "lines": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 14, + "total": 14, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/moved-focus.ts", + "sha256": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "metrics": { + "lines": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "branches": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 9, + "total": 9, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/overlay-focus.ts", + "sha256": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "metrics": { + "lines": { + "covered": 5, + "total": 26, + "percent": 19.23076923076923 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 26, + "percent": 19.23076923076923 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/player-focus.ts", + "sha256": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "metrics": { + "lines": { + "covered": 6, + "total": 22, + "percent": 27.272727272727273 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 22, + "percent": 27.272727272727273 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/slider.ts", + "sha256": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "metrics": { + "lines": { + "covered": 55, + "total": 55, + "percent": 100 + }, + "branches": { + "covered": 29, + "total": 31, + "percent": 93.54838709677419 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 55, + "total": 55, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/accessibility/suspend-focus.ts", + "sha256": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "metrics": { + "lines": { + "covered": 32, + "total": 57, + "percent": 56.14035087719298 + }, + "branches": { + "covered": 3, + "total": 10, + "percent": 30 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 32, + "total": 57, + "percent": 56.14035087719298 + } + } + }, + { + "file": "packages/artplayer/src/bootstrap/browser.ts", + "sha256": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "metrics": { + "lines": { + "covered": 6, + "total": 21, + "percent": 28.571428571428573 + }, + "branches": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 6, + "total": 21, + "percent": 28.571428571428573 + } + } + }, + { + "file": "packages/artplayer/src/capture/frame.ts", + "sha256": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "metrics": { + "lines": { + "covered": 28, + "total": 28, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 28, + "total": 28, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/component/dom.ts", + "sha256": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "metrics": { + "lines": { + "covered": 13, + "total": 29, + "percent": 44.827586206896555 + }, + "branches": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 13, + "total": 29, + "percent": 44.827586206896555 + } + } + }, + { + "file": "packages/artplayer/src/component/focus.ts", + "sha256": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "metrics": { + "lines": { + "covered": 15, + "total": 50, + "percent": 30 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 15, + "total": 50, + "percent": 30 + } + } + }, + { + "file": "packages/artplayer/src/component/resources.ts", + "sha256": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "metrics": { + "lines": { + "covered": 54, + "total": 54, + "percent": 100 + }, + "branches": { + "covered": 14, + "total": 15, + "percent": 93.33333333333333 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 54, + "total": 54, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/component/selection.ts", + "sha256": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "metrics": { + "lines": { + "covered": 15, + "total": 15, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 5, + "percent": 60 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 15, + "total": 15, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/config/index.ts", + "sha256": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "metrics": { + "lines": { + "covered": 91, + "total": 91, + "percent": 100 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "statements": { + "covered": 91, + "total": 91, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/aspectRatio.ts", + "sha256": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "metrics": { + "lines": { + "covered": 5, + "total": 45, + "percent": 11.11111111111111 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 45, + "percent": 11.11111111111111 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/choices.ts", + "sha256": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "metrics": { + "lines": { + "covered": 6, + "total": 20, + "percent": 30 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 20, + "percent": 30 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/close.ts", + "sha256": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "metrics": { + "lines": { + "covered": 2, + "total": 11, + "percent": 18.181818181818183 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 2, + "total": 11, + "percent": 18.181818181818183 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/flip.ts", + "sha256": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "metrics": { + "lines": { + "covered": 5, + "total": 43, + "percent": 11.627906976744185 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 43, + "percent": 11.627906976744185 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/index.ts", + "sha256": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "metrics": { + "lines": { + "covered": 20, + "total": 116, + "percent": 17.24137931034483 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 20, + "total": 116, + "percent": 17.24137931034483 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/info.ts", + "sha256": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "metrics": { + "lines": { + "covered": 2, + "total": 12, + "percent": 16.666666666666668 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 2, + "total": 12, + "percent": 16.666666666666668 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/keyboard.ts", + "sha256": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "metrics": { + "lines": { + "covered": 11, + "total": 144, + "percent": 7.638888888888889 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 3, + "percent": 0 + }, + "statements": { + "covered": 11, + "total": 144, + "percent": 7.638888888888889 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/playbackRate.ts", + "sha256": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "metrics": { + "lines": { + "covered": 5, + "total": 46, + "percent": 10.869565217391305 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 46, + "percent": 10.869565217391305 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/position.ts", + "sha256": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "metrics": { + "lines": { + "covered": 5, + "total": 17, + "percent": 29.41176470588235 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 17, + "percent": 29.41176470588235 + } + } + }, + { + "file": "packages/artplayer/src/contextmenu/version.ts", + "sha256": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "metrics": { + "lines": { + "covered": 3, + "total": 9, + "percent": 33.333333333333336 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 3, + "total": 9, + "percent": 33.333333333333336 + } + } + }, + { + "file": "packages/artplayer/src/control/airplay.ts", + "sha256": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "metrics": { + "lines": { + "covered": 7, + "total": 19, + "percent": 36.8421052631579 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 7, + "total": 19, + "percent": 36.8421052631579 + } + } + }, + { + "file": "packages/artplayer/src/control/builtins.ts", + "sha256": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "metrics": { + "lines": { + "covered": 85, + "total": 135, + "percent": 62.96296296296296 + }, + "branches": { + "covered": 3, + "total": 14, + "percent": 21.428571428571427 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 85, + "total": 135, + "percent": 62.96296296296296 + } + } + }, + { + "file": "packages/artplayer/src/control/fullscreen.ts", + "sha256": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "metrics": { + "lines": { + "covered": 8, + "total": 39, + "percent": 20.512820512820515 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 39, + "percent": 20.512820512820515 + } + } + }, + { + "file": "packages/artplayer/src/control/fullscreenWeb.ts", + "sha256": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "metrics": { + "lines": { + "covered": 8, + "total": 39, + "percent": 20.512820512820515 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 39, + "percent": 20.512820512820515 + } + } + }, + { + "file": "packages/artplayer/src/control/index.ts", + "sha256": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "metrics": { + "lines": { + "covered": 46, + "total": 136, + "percent": 33.8235294117647 + }, + "branches": { + "covered": 1, + "total": 8, + "percent": 12.5 + }, + "functions": { + "covered": 1, + "total": 5, + "percent": 20 + }, + "statements": { + "covered": 46, + "total": 136, + "percent": 33.8235294117647 + } + } + }, + { + "file": "packages/artplayer/src/control/layout.ts", + "sha256": "72e0b95bc632561e97569d789b76d16f36edd94eac8c62ba9e1918c9a222d328", + "metrics": { + "lines": { + "covered": 5, + "total": 35, + "percent": 14.285714285714286 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 35, + "percent": 14.285714285714286 + } + } + }, + { + "file": "packages/artplayer/src/control/pip.ts", + "sha256": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "metrics": { + "lines": { + "covered": 8, + "total": 28, + "percent": 28.571428571428573 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 28, + "percent": 28.571428571428573 + } + } + }, + { + "file": "packages/artplayer/src/control/playAndPause.ts", + "sha256": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "metrics": { + "lines": { + "covered": 10, + "total": 57, + "percent": 17.54385964912281 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 10, + "total": 57, + "percent": 17.54385964912281 + } + } + }, + { + "file": "packages/artplayer/src/control/progress.ts", + "sha256": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "metrics": { + "lines": { + "covered": 10, + "total": 27, + "percent": 37.03703703703704 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 10, + "total": 27, + "percent": 37.03703703703704 + } + } + }, + { + "file": "packages/artplayer/src/control/progress/interactions.ts", + "sha256": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "metrics": { + "lines": { + "covered": 61, + "total": 66, + "percent": 92.42424242424242 + }, + "branches": { + "covered": 19, + "total": 20, + "percent": 95 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 61, + "total": 66, + "percent": 92.42424242424242 + } + } + }, + { + "file": "packages/artplayer/src/control/progress/keyboard.ts", + "sha256": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "metrics": { + "lines": { + "covered": 73, + "total": 77, + "percent": 94.8051948051948 + }, + "branches": { + "covered": 23, + "total": 24, + "percent": 95.83333333333333 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 73, + "total": 77, + "percent": 94.8051948051948 + } + } + }, + { + "file": "packages/artplayer/src/control/progress/position.ts", + "sha256": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "metrics": { + "lines": { + "covered": 46, + "total": 46, + "percent": 100 + }, + "branches": { + "covered": 9, + "total": 11, + "percent": 81.81818181818181 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 46, + "total": 46, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/control/progress/view.ts", + "sha256": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "metrics": { + "lines": { + "covered": 10, + "total": 141, + "percent": 7.092198581560283 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 10, + "total": 141, + "percent": 7.092198581560283 + } + } + }, + { + "file": "packages/artplayer/src/control/resources.ts", + "sha256": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "metrics": { + "lines": { + "covered": 13, + "total": 13, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 13, + "total": 13, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/control/screenshot.ts", + "sha256": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "metrics": { + "lines": { + "covered": 8, + "total": 23, + "percent": 34.78260869565217 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 23, + "percent": 34.78260869565217 + } + } + }, + { + "file": "packages/artplayer/src/control/selector-keyboard.ts", + "sha256": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "metrics": { + "lines": { + "covered": 8, + "total": 191, + "percent": 4.18848167539267 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 191, + "percent": 4.18848167539267 + } + } + }, + { + "file": "packages/artplayer/src/control/selector.ts", + "sha256": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "metrics": { + "lines": { + "covered": 23, + "total": 108, + "percent": 21.296296296296298 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 4, + "percent": 0 + }, + "statements": { + "covered": 23, + "total": 108, + "percent": 21.296296296296298 + } + } + }, + { + "file": "packages/artplayer/src/control/setting.ts", + "sha256": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "metrics": { + "lines": { + "covered": 8, + "total": 31, + "percent": 25.806451612903224 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 8, + "total": 31, + "percent": 25.806451612903224 + } + } + }, + { + "file": "packages/artplayer/src/control/time.ts", + "sha256": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "metrics": { + "lines": { + "covered": 7, + "total": 34, + "percent": 20.58823529411765 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 7, + "total": 34, + "percent": 20.58823529411765 + } + } + }, + { + "file": "packages/artplayer/src/control/volume.ts", + "sha256": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "metrics": { + "lines": { + "covered": 12, + "total": 113, + "percent": 10.619469026548673 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 12, + "total": 113, + "percent": 10.619469026548673 + } + } + }, + { + "file": "packages/artplayer/src/display/fullscreen-abandoned.ts", + "sha256": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "metrics": { + "lines": { + "covered": 44, + "total": 48, + "percent": 91.66666666666667 + }, + "branches": { + "covered": 12, + "total": 14, + "percent": 85.71428571428571 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 44, + "total": 48, + "percent": 91.66666666666667 + } + } + }, + { + "file": "packages/artplayer/src/display/fullscreen-adapter.ts", + "sha256": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "metrics": { + "lines": { + "covered": 14, + "total": 38, + "percent": 36.8421052631579 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 14, + "total": 38, + "percent": 36.8421052631579 + } + } + }, + { + "file": "packages/artplayer/src/display/fullscreen-request.ts", + "sha256": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "metrics": { + "lines": { + "covered": 79, + "total": 88, + "percent": 89.77272727272727 + }, + "branches": { + "covered": 33, + "total": 39, + "percent": 84.61538461538461 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 79, + "total": 88, + "percent": 89.77272727272727 + } + } + }, + { + "file": "packages/artplayer/src/display/mini-drag.ts", + "sha256": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "metrics": { + "lines": { + "covered": 6, + "total": 51, + "percent": 11.764705882352942 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 51, + "percent": 11.764705882352942 + } + } + }, + { + "file": "packages/artplayer/src/display/mini-focus.ts", + "sha256": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "metrics": { + "lines": { + "covered": 6, + "total": 36, + "percent": 16.666666666666668 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 36, + "percent": 16.666666666666668 + } + } + }, + { + "file": "packages/artplayer/src/display/mini-layout.ts", + "sha256": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "metrics": { + "lines": { + "covered": 20, + "total": 24, + "percent": 83.33333333333333 + }, + "branches": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 20, + "total": 24, + "percent": 83.33333333333333 + } + } + }, + { + "file": "packages/artplayer/src/display/mini-view.ts", + "sha256": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "metrics": { + "lines": { + "covered": 17, + "total": 105, + "percent": 16.19047619047619 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 17, + "total": 105, + "percent": 16.19047619047619 + } + } + }, + { + "file": "packages/artplayer/src/display/mini.ts", + "sha256": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "metrics": { + "lines": { + "covered": 10, + "total": 150, + "percent": 6.666666666666667 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 10, + "total": 150, + "percent": 6.666666666666667 + } + } + }, + { + "file": "packages/artplayer/src/display/native-fullscreen.ts", + "sha256": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "metrics": { + "lines": { + "covered": 105, + "total": 106, + "percent": 99.05660377358491 + }, + "branches": { + "covered": 47, + "total": 52, + "percent": 90.38461538461539 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 105, + "total": 106, + "percent": 99.05660377358491 + } + } + }, + { + "file": "packages/artplayer/src/display/native-pip.ts", + "sha256": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "metrics": { + "lines": { + "covered": 91, + "total": 98, + "percent": 92.85714285714286 + }, + "branches": { + "covered": 31, + "total": 36, + "percent": 86.11111111111111 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 91, + "total": 98, + "percent": 92.85714285714286 + } + } + }, + { + "file": "packages/artplayer/src/display/orientation-native.ts", + "sha256": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "metrics": { + "lines": { + "covered": 87, + "total": 87, + "percent": 100 + }, + "branches": { + "covered": 37, + "total": 37, + "percent": 100 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 87, + "total": 87, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/display/orientation-web.ts", + "sha256": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "metrics": { + "lines": { + "covered": 9, + "total": 72, + "percent": 12.5 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 9, + "total": 72, + "percent": 12.5 + } + } + }, + { + "file": "packages/artplayer/src/display/placement.ts", + "sha256": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "metrics": { + "lines": { + "covered": 9, + "total": 19, + "percent": 47.36842105263158 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 9, + "total": 19, + "percent": 47.36842105263158 + } + } + }, + { + "file": "packages/artplayer/src/display/sizing.ts", + "sha256": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "metrics": { + "lines": { + "covered": 24, + "total": 24, + "percent": 100 + }, + "branches": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 24, + "total": 24, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/display/video-fullscreen-state.ts", + "sha256": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "metrics": { + "lines": { + "covered": 39, + "total": 40, + "percent": 97.5 + }, + "branches": { + "covered": 9, + "total": 11, + "percent": 81.81818181818181 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 39, + "total": 40, + "percent": 97.5 + } + } + }, + { + "file": "packages/artplayer/src/display/video-fullscreen.ts", + "sha256": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "metrics": { + "lines": { + "covered": 87, + "total": 87, + "percent": 100 + }, + "branches": { + "covered": 35, + "total": 37, + "percent": 94.5945945945946 + }, + "functions": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "statements": { + "covered": 87, + "total": 87, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/display/web-fullscreen.ts", + "sha256": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "metrics": { + "lines": { + "covered": 13, + "total": 109, + "percent": 11.926605504587156 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 13, + "total": 109, + "percent": 11.926605504587156 + } + } + }, + { + "file": "packages/artplayer/src/display/webkit-pip.ts", + "sha256": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "metrics": { + "lines": { + "covered": 98, + "total": 107, + "percent": 91.58878504672897 + }, + "branches": { + "covered": 33, + "total": 40, + "percent": 82.5 + }, + "functions": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "statements": { + "covered": 98, + "total": 107, + "percent": 91.58878504672897 + } + } + }, + { + "file": "packages/artplayer/src/dom/event-path.ts", + "sha256": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "metrics": { + "lines": { + "covered": 22, + "total": 22, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 10, + "percent": 80 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 22, + "total": 22, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/dom/measure.ts", + "sha256": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "metrics": { + "lines": { + "covered": 26, + "total": 37, + "percent": 70.27027027027027 + }, + "branches": { + "covered": 4, + "total": 6, + "percent": 66.66666666666667 + }, + "functions": { + "covered": 2, + "total": 4, + "percent": 50 + }, + "statements": { + "covered": 26, + "total": 37, + "percent": 70.27027027027027 + } + } + }, + { + "file": "packages/artplayer/src/dom/presentation.ts", + "sha256": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "metrics": { + "lines": { + "covered": 6, + "total": 18, + "percent": 33.333333333333336 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 18, + "percent": 33.333333333333336 + } + } + }, + { + "file": "packages/artplayer/src/dom/styles.ts", + "sha256": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "metrics": { + "lines": { + "covered": 22, + "total": 22, + "percent": 100 + }, + "branches": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 22, + "total": 22, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/dom/tree.ts", + "sha256": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "metrics": { + "lines": { + "covered": 43, + "total": 54, + "percent": 79.62962962962963 + }, + "branches": { + "covered": 9, + "total": 10, + "percent": 90 + }, + "functions": { + "covered": 6, + "total": 11, + "percent": 54.54545454545455 + }, + "statements": { + "covered": 43, + "total": 54, + "percent": 79.62962962962963 + } + } + }, + { + "file": "packages/artplayer/src/events/clickInit.ts", + "sha256": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "metrics": { + "lines": { + "covered": 41, + "total": 45, + "percent": 91.11111111111111 + }, + "branches": { + "covered": 14, + "total": 17, + "percent": 82.3529411764706 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 41, + "total": 45, + "percent": 91.11111111111111 + } + } + }, + { + "file": "packages/artplayer/src/events/gestureInit.ts", + "sha256": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "metrics": { + "lines": { + "covered": 19, + "total": 19, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 19, + "total": 19, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/globalInit.ts", + "sha256": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "metrics": { + "lines": { + "covered": 80, + "total": 80, + "percent": 100 + }, + "branches": { + "covered": 24, + "total": 26, + "percent": 92.3076923076923 + }, + "functions": { + "covered": 5, + "total": 6, + "percent": 83.33333333333333 + }, + "statements": { + "covered": 80, + "total": 80, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/hoverInit.ts", + "sha256": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "metrics": { + "lines": { + "covered": 22, + "total": 22, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 22, + "total": 22, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/index.ts", + "sha256": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "metrics": { + "lines": { + "covered": 31, + "total": 59, + "percent": 52.54237288135593 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 5, + "percent": 0 + }, + "statements": { + "covered": 31, + "total": 59, + "percent": 52.54237288135593 + } + } + }, + { + "file": "packages/artplayer/src/events/listener-registry.ts", + "sha256": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "metrics": { + "lines": { + "covered": 128, + "total": 135, + "percent": 94.81481481481481 + }, + "branches": { + "covered": 41, + "total": 48, + "percent": 85.41666666666667 + }, + "functions": { + "covered": 7, + "total": 8, + "percent": 87.5 + }, + "statements": { + "covered": 128, + "total": 135, + "percent": 94.81481481481481 + } + } + }, + { + "file": "packages/artplayer/src/events/moveInit.ts", + "sha256": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "metrics": { + "lines": { + "covered": 10, + "total": 10, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 10, + "total": 10, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/resizeInit.ts", + "sha256": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "metrics": { + "lines": { + "covered": 35, + "total": 35, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 8, + "percent": 87.5 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 35, + "total": 35, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/subscriptions.ts", + "sha256": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "metrics": { + "lines": { + "covered": 17, + "total": 17, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 17, + "total": 17, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/updateInit.ts", + "sha256": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "metrics": { + "lines": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 8, + "percent": 87.5 + }, + "functions": { + "covered": 2, + "total": 4, + "percent": 50 + }, + "statements": { + "covered": 21, + "total": 21, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/viewInit.ts", + "sha256": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "metrics": { + "lines": { + "covered": 29, + "total": 29, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 29, + "total": 29, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/events/viewport.ts", + "sha256": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "metrics": { + "lines": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 11, + "total": 11, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/hotkey.ts", + "sha256": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "metrics": { + "lines": { + "covered": 94, + "total": 94, + "percent": 100 + }, + "branches": { + "covered": 32, + "total": 33, + "percent": 96.96969696969697 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 94, + "total": 94, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/i18n/ar.ts", + "sha256": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/cs.ts", + "sha256": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/es.ts", + "sha256": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/fa.ts", + "sha256": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/fr.ts", + "sha256": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/id.ts", + "sha256": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/index.ts", + "sha256": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "metrics": { + "lines": { + "covered": 34, + "total": 34, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 34, + "total": 34, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/i18n/pl.ts", + "sha256": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/publish.ts", + "sha256": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "metrics": { + "lines": { + "covered": 9, + "total": 12, + "percent": 75 + }, + "branches": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 9, + "total": 12, + "percent": 75 + } + } + }, + { + "file": "packages/artplayer/src/i18n/ru.ts", + "sha256": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/tr.ts", + "sha256": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/vi.ts", + "sha256": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/i18n/zh-cn.ts", + "sha256": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "metrics": { + "lines": { + "covered": 50, + "total": 50, + "percent": 100 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "statements": { + "covered": 50, + "total": 50, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/i18n/zh-tw.ts", + "sha256": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "metrics": { + "lines": { + "covered": 0, + "total": 50, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 50, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/icons/defaults.ts", + "sha256": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "metrics": { + "lines": { + "covered": 57, + "total": 57, + "percent": 100 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "statements": { + "covered": 57, + "total": 57, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/icons/index.ts", + "sha256": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "metrics": { + "lines": { + "covered": 14, + "total": 21, + "percent": 66.66666666666667 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 14, + "total": 21, + "percent": 66.66666666666667 + } + } + }, + { + "file": "packages/artplayer/src/image/load.ts", + "sha256": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "metrics": { + "lines": { + "covered": 129, + "total": 146, + "percent": 88.35616438356165 + }, + "branches": { + "covered": 44, + "total": 52, + "percent": 84.61538461538461 + }, + "functions": { + "covered": 10, + "total": 10, + "percent": 100 + }, + "statements": { + "covered": 129, + "total": 146, + "percent": 88.35616438356165 + } + } + }, + { + "file": "packages/artplayer/src/index.ts", + "sha256": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "metrics": { + "lines": { + "covered": 196, + "total": 304, + "percent": 64.47368421052632 + }, + "branches": { + "covered": 8, + "total": 10, + "percent": 80 + }, + "functions": { + "covered": 8, + "total": 17, + "percent": 47.05882352941177 + }, + "statements": { + "covered": 196, + "total": 304, + "percent": 64.47368421052632 + } + } + }, + { + "file": "packages/artplayer/src/info.ts", + "sha256": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "metrics": { + "lines": { + "covered": 35, + "total": 35, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 35, + "total": 35, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/info/keyboard.ts", + "sha256": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "metrics": { + "lines": { + "covered": 54, + "total": 66, + "percent": 81.81818181818181 + }, + "branches": { + "covered": 5, + "total": 21, + "percent": 23.80952380952381 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 54, + "total": 66, + "percent": 81.81818181818181 + } + } + }, + { + "file": "packages/artplayer/src/info/poll.ts", + "sha256": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "metrics": { + "lines": { + "covered": 71, + "total": 74, + "percent": 95.94594594594595 + }, + "branches": { + "covered": 19, + "total": 25, + "percent": 76 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 71, + "total": 74, + "percent": 95.94594594594595 + } + } + }, + { + "file": "packages/artplayer/src/input/gesture-controller.ts", + "sha256": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "metrics": { + "lines": { + "covered": 94, + "total": 94, + "percent": 100 + }, + "branches": { + "covered": 46, + "total": 48, + "percent": 95.83333333333333 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 94, + "total": 94, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/input/gesture-direction.ts", + "sha256": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "metrics": { + "lines": { + "covered": 16, + "total": 16, + "percent": 100 + }, + "branches": { + "covered": 15, + "total": 16, + "percent": 93.75 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 16, + "total": 16, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/input/hotkey-defaults.ts", + "sha256": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "metrics": { + "lines": { + "covered": 25, + "total": 27, + "percent": 92.5925925925926 + }, + "branches": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "functions": { + "covered": 6, + "total": 7, + "percent": 85.71428571428571 + }, + "statements": { + "covered": 25, + "total": 27, + "percent": 92.5925925925926 + } + } + }, + { + "file": "packages/artplayer/src/input/keyboard-focus.ts", + "sha256": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "metrics": { + "lines": { + "covered": 35, + "total": 39, + "percent": 89.74358974358974 + }, + "branches": { + "covered": 26, + "total": 36, + "percent": 72.22222222222223 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 35, + "total": 39, + "percent": 89.74358974358974 + } + } + }, + { + "file": "packages/artplayer/src/input/long-press.ts", + "sha256": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "metrics": { + "lines": { + "covered": 77, + "total": 80, + "percent": 96.25 + }, + "branches": { + "covered": 26, + "total": 30, + "percent": 86.66666666666667 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 77, + "total": 80, + "percent": 96.25 + } + } + }, + { + "file": "packages/artplayer/src/input/pointer-focus.ts", + "sha256": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "metrics": { + "lines": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 5, + "percent": 60 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 21, + "total": 21, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/layer.ts", + "sha256": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "metrics": { + "lines": { + "covered": 11, + "total": 18, + "percent": 61.111111111111114 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 11, + "total": 18, + "percent": 61.111111111111114 + } + } + }, + { + "file": "packages/artplayer/src/lifecycle/instance.ts", + "sha256": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "metrics": { + "lines": { + "covered": 128, + "total": 128, + "percent": 100 + }, + "branches": { + "covered": 48, + "total": 48, + "percent": 100 + }, + "functions": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "statements": { + "covered": 128, + "total": 128, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/lifecycle/resources.ts", + "sha256": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "metrics": { + "lines": { + "covered": 106, + "total": 106, + "percent": 100 + }, + "branches": { + "covered": 42, + "total": 42, + "percent": 100 + }, + "functions": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "statements": { + "covered": 106, + "total": 106, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/lifecycle/scope.ts", + "sha256": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "metrics": { + "lines": { + "covered": 65, + "total": 65, + "percent": 100 + }, + "branches": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "functions": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "statements": { + "covered": 65, + "total": 65, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/lifecycle/template-rollback.ts", + "sha256": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "metrics": { + "lines": { + "covered": 7, + "total": 39, + "percent": 17.94871794871795 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 7, + "total": 39, + "percent": 17.94871794871795 + } + } + }, + { + "file": "packages/artplayer/src/loading.ts", + "sha256": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "metrics": { + "lines": { + "covered": 19, + "total": 19, + "percent": 100 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 19, + "total": 19, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/mask.ts", + "sha256": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "metrics": { + "lines": { + "covered": 57, + "total": 57, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 9, + "percent": 77.77777777777777 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 57, + "total": 57, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/media/events/forward.ts", + "sha256": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "metrics": { + "lines": { + "covered": 13, + "total": 13, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 13, + "total": 13, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/media/events/listen.ts", + "sha256": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "metrics": { + "lines": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "branches": { + "covered": 12, + "total": 12, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 21, + "total": 21, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/media/events/playback.ts", + "sha256": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "metrics": { + "lines": { + "covered": 44, + "total": 53, + "percent": 83.01886792452831 + }, + "branches": { + "covered": 6, + "total": 8, + "percent": 75 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 44, + "total": 53, + "percent": 83.01886792452831 + } + } + }, + { + "file": "packages/artplayer/src/media/events/readiness.ts", + "sha256": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "metrics": { + "lines": { + "covered": 17, + "total": 17, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 17, + "total": 17, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/media/events/reconnect.ts", + "sha256": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "metrics": { + "lines": { + "covered": 88, + "total": 88, + "percent": 100 + }, + "branches": { + "covered": 26, + "total": 30, + "percent": 86.66666666666667 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 88, + "total": 88, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/media/position-revision.ts", + "sha256": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "metrics": { + "lines": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 9, + "total": 9, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/notice.ts", + "sha256": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "metrics": { + "lines": { + "covered": 102, + "total": 104, + "percent": 98.07692307692308 + }, + "branches": { + "covered": 25, + "total": 28, + "percent": 89.28571428571429 + }, + "functions": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "statements": { + "covered": 102, + "total": 104, + "percent": 98.07692307692308 + } + } + }, + { + "file": "packages/artplayer/src/option/defaults.ts", + "sha256": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "metrics": { + "lines": { + "covered": 75, + "total": 75, + "percent": 100 + }, + "branches": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 75, + "total": 75, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/option/resolve.ts", + "sha256": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "metrics": { + "lines": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 11, + "total": 11, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/option/runtime.ts", + "sha256": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "metrics": { + "lines": { + "covered": 22, + "total": 28, + "percent": 78.57142857142857 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 22, + "total": 28, + "percent": 78.57142857142857 + } + } + }, + { + "file": "packages/artplayer/src/player/airplayMix.ts", + "sha256": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "metrics": { + "lines": { + "covered": 70, + "total": 70, + "percent": 100 + }, + "branches": { + "covered": 25, + "total": 26, + "percent": 96.15384615384616 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 70, + "total": 70, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/aspectRatioMix.ts", + "sha256": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "metrics": { + "lines": { + "covered": 5, + "total": 44, + "percent": 11.363636363636363 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 44, + "percent": 11.363636363636363 + } + } + }, + { + "file": "packages/artplayer/src/player/attrMix.ts", + "sha256": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "metrics": { + "lines": { + "covered": 24, + "total": 24, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 24, + "total": 24, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/autoHeightMix.ts", + "sha256": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "metrics": { + "lines": { + "covered": 5, + "total": 19, + "percent": 26.31578947368421 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 19, + "percent": 26.31578947368421 + } + } + }, + { + "file": "packages/artplayer/src/player/autoSizeMix.ts", + "sha256": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "metrics": { + "lines": { + "covered": 5, + "total": 30, + "percent": 16.666666666666668 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 30, + "percent": 16.666666666666668 + } + } + }, + { + "file": "packages/artplayer/src/player/cssVarMix.ts", + "sha256": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "metrics": { + "lines": { + "covered": 24, + "total": 24, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 24, + "total": 24, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/currentTimeMix.ts", + "sha256": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "metrics": { + "lines": { + "covered": 19, + "total": 19, + "percent": 100 + }, + "branches": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 19, + "total": 19, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/durationMix.ts", + "sha256": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "metrics": { + "lines": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 14, + "total": 14, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/eventInit.ts", + "sha256": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "metrics": { + "lines": { + "covered": 15, + "total": 15, + "percent": 100 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 15, + "total": 15, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/flipMix.ts", + "sha256": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "metrics": { + "lines": { + "covered": 4, + "total": 23, + "percent": 17.391304347826086 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 4, + "total": 23, + "percent": 17.391304347826086 + } + } + }, + { + "file": "packages/artplayer/src/player/fullscreenMix.ts", + "sha256": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "metrics": { + "lines": { + "covered": 7, + "total": 35, + "percent": 20 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 7, + "total": 35, + "percent": 20 + } + } + }, + { + "file": "packages/artplayer/src/player/fullscreenWebMix.ts", + "sha256": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "metrics": { + "lines": { + "covered": 4, + "total": 13, + "percent": 30.76923076923077 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 4, + "total": 13, + "percent": 30.76923076923077 + } + } + }, + { + "file": "packages/artplayer/src/player/index.ts", + "sha256": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "metrics": { + "lines": { + "covered": 119, + "total": 128, + "percent": 92.96875 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 119, + "total": 128, + "percent": 92.96875 + } + } + }, + { + "file": "packages/artplayer/src/player/loadedMix.ts", + "sha256": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "metrics": { + "lines": { + "covered": 17, + "total": 17, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 17, + "total": 17, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/miniMix.ts", + "sha256": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "metrics": { + "lines": { + "covered": 4, + "total": 7, + "percent": 57.142857142857146 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 4, + "total": 7, + "percent": 57.142857142857146 + } + } + }, + { + "file": "packages/artplayer/src/player/optionInit.ts", + "sha256": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "metrics": { + "lines": { + "covered": 117, + "total": 117, + "percent": 100 + }, + "branches": { + "covered": 31, + "total": 41, + "percent": 75.60975609756098 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 117, + "total": 117, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/pauseMix.ts", + "sha256": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "metrics": { + "lines": { + "covered": 20, + "total": 20, + "percent": 100 + }, + "branches": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 20, + "total": 20, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/pipMix.ts", + "sha256": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "metrics": { + "lines": { + "covered": 6, + "total": 25, + "percent": 24 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 6, + "total": 25, + "percent": 24 + } + } + }, + { + "file": "packages/artplayer/src/player/playbackRateMix.ts", + "sha256": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "metrics": { + "lines": { + "covered": 26, + "total": 26, + "percent": 100 + }, + "branches": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 26, + "total": 26, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/playedMix.ts", + "sha256": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "metrics": { + "lines": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "branches": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 6, + "total": 6, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/playingMix.ts", + "sha256": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "metrics": { + "lines": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "branches": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 14, + "total": 14, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/playMix.ts", + "sha256": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "metrics": { + "lines": { + "covered": 43, + "total": 43, + "percent": 100 + }, + "branches": { + "covered": 12, + "total": 15, + "percent": 80 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 43, + "total": 43, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/posterMix.ts", + "sha256": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "metrics": { + "lines": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 21, + "total": 21, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/qualityMix.ts", + "sha256": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "metrics": { + "lines": { + "covered": 41, + "total": 41, + "percent": 100 + }, + "branches": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 41, + "total": 41, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/rectMix.ts", + "sha256": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "metrics": { + "lines": { + "covered": 34, + "total": 34, + "percent": 100 + }, + "branches": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "functions": { + "covered": 5, + "total": 6, + "percent": 83.33333333333333 + }, + "statements": { + "covered": 34, + "total": 34, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/screenshotMix.ts", + "sha256": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "metrics": { + "lines": { + "covered": 66, + "total": 66, + "percent": 100 + }, + "branches": { + "covered": 17, + "total": 17, + "percent": 100 + }, + "functions": { + "covered": 6, + "total": 7, + "percent": 85.71428571428571 + }, + "statements": { + "covered": 66, + "total": 66, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/seekMix.ts", + "sha256": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "metrics": { + "lines": { + "covered": 26, + "total": 26, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 26, + "total": 26, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/stateMix.ts", + "sha256": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "metrics": { + "lines": { + "covered": 16, + "total": 16, + "percent": 100 + }, + "branches": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 16, + "total": 16, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/subtitleOffsetMix.ts", + "sha256": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "metrics": { + "lines": { + "covered": 29, + "total": 29, + "percent": 100 + }, + "branches": { + "covered": 10, + "total": 10, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 29, + "total": 29, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/switchMix.ts", + "sha256": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "metrics": { + "lines": { + "covered": 10, + "total": 10, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 10, + "total": 10, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/themeMix.ts", + "sha256": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "metrics": { + "lines": { + "covered": 13, + "total": 13, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 13, + "total": 13, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/thumbnailsMix.ts", + "sha256": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "metrics": { + "lines": { + "covered": 115, + "total": 115, + "percent": 100 + }, + "branches": { + "covered": 33, + "total": 37, + "percent": 89.1891891891892 + }, + "functions": { + "covered": 6, + "total": 7, + "percent": 85.71428571428571 + }, + "statements": { + "covered": 115, + "total": 115, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/toggleMix.ts", + "sha256": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "metrics": { + "lines": { + "covered": 13, + "total": 13, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 13, + "total": 13, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/typeMix.ts", + "sha256": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "metrics": { + "lines": { + "covered": 12, + "total": 12, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 12, + "total": 12, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/urlMix.ts", + "sha256": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "metrics": { + "lines": { + "covered": 86, + "total": 86, + "percent": 100 + }, + "branches": { + "covered": 36, + "total": 39, + "percent": 92.3076923076923 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 86, + "total": 86, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/player/volumeMix.ts", + "sha256": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "metrics": { + "lines": { + "covered": 22, + "total": 22, + "percent": 100 + }, + "branches": { + "covered": 6, + "total": 7, + "percent": 85.71428571428571 + }, + "functions": { + "covered": 5, + "total": 6, + "percent": 83.33333333333333 + }, + "statements": { + "covered": 22, + "total": 22, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/auto-playback/prompt.ts", + "sha256": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "metrics": { + "lines": { + "covered": 145, + "total": 145, + "percent": 100 + }, + "branches": { + "covered": 32, + "total": 46, + "percent": 69.56521739130434 + }, + "functions": { + "covered": 5, + "total": 6, + "percent": 83.33333333333333 + }, + "statements": { + "covered": 145, + "total": 145, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/auto-playback/records.ts", + "sha256": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "metrics": { + "lines": { + "covered": 46, + "total": 46, + "percent": 100 + }, + "branches": { + "covered": 11, + "total": 11, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 46, + "total": 46, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/autoOrientation.ts", + "sha256": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "metrics": { + "lines": { + "covered": 7, + "total": 30, + "percent": 23.333333333333332 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 7, + "total": 30, + "percent": 23.333333333333332 + } + } + }, + { + "file": "packages/artplayer/src/plugins/autoPlayback.ts", + "sha256": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "metrics": { + "lines": { + "covered": 29, + "total": 29, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 29, + "total": 29, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/builtins.ts", + "sha256": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "metrics": { + "lines": { + "covered": 28, + "total": 28, + "percent": 100 + }, + "branches": { + "covered": 1, + "total": 12, + "percent": 8.333333333333334 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 28, + "total": 28, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/fastForward.ts", + "sha256": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "metrics": { + "lines": { + "covered": 43, + "total": 43, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 3, + "percent": 66.66666666666667 + }, + "statements": { + "covered": 43, + "total": 43, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/index.ts", + "sha256": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "metrics": { + "lines": { + "covered": 41, + "total": 41, + "percent": 100 + }, + "branches": { + "covered": 12, + "total": 12, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 41, + "total": 41, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/lock-keyboard.ts", + "sha256": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "metrics": { + "lines": { + "covered": 39, + "total": 44, + "percent": 88.63636363636364 + }, + "branches": { + "covered": 8, + "total": 12, + "percent": 66.66666666666667 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 39, + "total": 44, + "percent": 88.63636363636364 + } + } + }, + { + "file": "packages/artplayer/src/plugins/lock.ts", + "sha256": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "metrics": { + "lines": { + "covered": 101, + "total": 108, + "percent": 93.51851851851852 + }, + "branches": { + "covered": 18, + "total": 27, + "percent": 66.66666666666667 + }, + "functions": { + "covered": 8, + "total": 9, + "percent": 88.88888888888889 + }, + "statements": { + "covered": 101, + "total": 108, + "percent": 93.51851851851852 + } + } + }, + { + "file": "packages/artplayer/src/plugins/miniProgressBar.ts", + "sha256": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "metrics": { + "lines": { + "covered": 20, + "total": 20, + "percent": 100 + }, + "branches": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 20, + "total": 20, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/plugins/registration.ts", + "sha256": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "metrics": { + "lines": { + "covered": 27, + "total": 27, + "percent": 100 + }, + "branches": { + "covered": 18, + "total": 18, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 27, + "total": 27, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/scheme/index.ts", + "sha256": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "metrics": { + "lines": { + "covered": 128, + "total": 128, + "percent": 100 + }, + "branches": { + "covered": 2, + "total": 4, + "percent": 50 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 128, + "total": 128, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/setting/activity.ts", + "sha256": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "metrics": { + "lines": { + "covered": 22, + "total": 22, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 7, + "percent": 57.142857142857146 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 22, + "total": 22, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/setting/aspectRatio.ts", + "sha256": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "metrics": { + "lines": { + "covered": 3, + "total": 43, + "percent": 6.976744186046512 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 3, + "total": 43, + "percent": 6.976744186046512 + } + } + }, + { + "file": "packages/artplayer/src/setting/checkpoint.ts", + "sha256": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "metrics": { + "lines": { + "covered": 9, + "total": 40, + "percent": 22.5 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 9, + "total": 40, + "percent": 22.5 + } + } + }, + { + "file": "packages/artplayer/src/setting/events.ts", + "sha256": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "metrics": { + "lines": { + "covered": 5, + "total": 65, + "percent": 7.6923076923076925 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 65, + "percent": 7.6923076923076925 + } + } + }, + { + "file": "packages/artplayer/src/setting/flip.ts", + "sha256": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "metrics": { + "lines": { + "covered": 4, + "total": 44, + "percent": 9.090909090909092 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 4, + "total": 44, + "percent": 9.090909090909092 + } + } + }, + { + "file": "packages/artplayer/src/setting/index.ts", + "sha256": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "metrics": { + "lines": { + "covered": 58, + "total": 190, + "percent": 30.526315789473685 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 14, + "percent": 0 + }, + "statements": { + "covered": 58, + "total": 190, + "percent": 30.526315789473685 + } + } + }, + { + "file": "packages/artplayer/src/setting/keyboard-focus.ts", + "sha256": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "metrics": { + "lines": { + "covered": 17, + "total": 65, + "percent": 26.153846153846153 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 6, + "percent": 0 + }, + "statements": { + "covered": 17, + "total": 65, + "percent": 26.153846153846153 + } + } + }, + { + "file": "packages/artplayer/src/setting/keyboard-item.ts", + "sha256": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "metrics": { + "lines": { + "covered": 10, + "total": 30, + "percent": 33.333333333333336 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 10, + "total": 30, + "percent": 33.333333333333336 + } + } + }, + { + "file": "packages/artplayer/src/setting/keyboard.ts", + "sha256": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "metrics": { + "lines": { + "covered": 10, + "total": 135, + "percent": 7.407407407407407 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 10, + "total": 135, + "percent": 7.407407407407407 + } + } + }, + { + "file": "packages/artplayer/src/setting/layout.ts", + "sha256": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "metrics": { + "lines": { + "covered": 39, + "total": 71, + "percent": 54.929577464788736 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "statements": { + "covered": 39, + "total": 71, + "percent": 54.929577464788736 + } + } + }, + { + "file": "packages/artplayer/src/setting/model.ts", + "sha256": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "metrics": { + "lines": { + "covered": 181, + "total": 183, + "percent": 98.90710382513662 + }, + "branches": { + "covered": 73, + "total": 79, + "percent": 92.40506329113924 + }, + "functions": { + "covered": 15, + "total": 15, + "percent": 100 + }, + "statements": { + "covered": 181, + "total": 183, + "percent": 98.90710382513662 + } + } + }, + { + "file": "packages/artplayer/src/setting/panels.ts", + "sha256": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "metrics": { + "lines": { + "covered": 17, + "total": 31, + "percent": 54.83870967741935 + }, + "branches": { + "covered": 1, + "total": 2, + "percent": 50 + }, + "functions": { + "covered": 1, + "total": 3, + "percent": 33.333333333333336 + }, + "statements": { + "covered": 17, + "total": 31, + "percent": 54.83870967741935 + } + } + }, + { + "file": "packages/artplayer/src/setting/playbackRate.ts", + "sha256": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "metrics": { + "lines": { + "covered": 3, + "total": 43, + "percent": 6.976744186046512 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 3, + "total": 43, + "percent": 6.976744186046512 + } + } + }, + { + "file": "packages/artplayer/src/setting/registration.ts", + "sha256": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "metrics": { + "lines": { + "covered": 7, + "total": 20, + "percent": 35 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 2, + "percent": 0 + }, + "statements": { + "covered": 7, + "total": 20, + "percent": 35 + } + } + }, + { + "file": "packages/artplayer/src/setting/render.ts", + "sha256": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "metrics": { + "lines": { + "covered": 24, + "total": 395, + "percent": 6.075949367088608 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 4, + "percent": 0 + }, + "statements": { + "covered": 24, + "total": 395, + "percent": 6.075949367088608 + } + } + }, + { + "file": "packages/artplayer/src/setting/resources.ts", + "sha256": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "metrics": { + "lines": { + "covered": 168, + "total": 202, + "percent": 83.16831683168317 + }, + "branches": { + "covered": 46, + "total": 55, + "percent": 83.63636363636364 + }, + "functions": { + "covered": 10, + "total": 12, + "percent": 83.33333333333333 + }, + "statements": { + "covered": 168, + "total": 202, + "percent": 83.16831683168317 + } + } + }, + { + "file": "packages/artplayer/src/setting/selection.ts", + "sha256": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "metrics": { + "lines": { + "covered": 44, + "total": 85, + "percent": 51.76470588235294 + }, + "branches": { + "covered": 12, + "total": 17, + "percent": 70.58823529411765 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 44, + "total": 85, + "percent": 51.76470588235294 + } + } + }, + { + "file": "packages/artplayer/src/setting/subtitleOffset.ts", + "sha256": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "metrics": { + "lines": { + "covered": 3, + "total": 25, + "percent": 12 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 3, + "total": 25, + "percent": 12 + } + } + }, + { + "file": "packages/artplayer/src/setting/update.ts", + "sha256": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "metrics": { + "lines": { + "covered": 23, + "total": 214, + "percent": 10.74766355140187 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 6, + "percent": 0 + }, + "statements": { + "covered": 23, + "total": 214, + "percent": 10.74766355140187 + } + } + }, + { + "file": "packages/artplayer/src/source/listen.ts", + "sha256": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "metrics": { + "lines": { + "covered": 21, + "total": 21, + "percent": 100 + }, + "branches": { + "covered": 10, + "total": 10, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 21, + "total": 21, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/source/operation.ts", + "sha256": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "metrics": { + "lines": { + "covered": 92, + "total": 92, + "percent": 100 + }, + "branches": { + "covered": 30, + "total": 30, + "percent": 100 + }, + "functions": { + "covered": 8, + "total": 8, + "percent": 100 + }, + "statements": { + "covered": 92, + "total": 92, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/source/restore-position.ts", + "sha256": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "metrics": { + "lines": { + "covered": 51, + "total": 51, + "percent": 100 + }, + "branches": { + "covered": 29, + "total": 29, + "percent": 100 + }, + "functions": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "statements": { + "covered": 51, + "total": 51, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/source/switch.ts", + "sha256": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "metrics": { + "lines": { + "covered": 142, + "total": 145, + "percent": 97.93103448275862 + }, + "branches": { + "covered": 61, + "total": 65, + "percent": 93.84615384615384 + }, + "functions": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "statements": { + "covered": 142, + "total": 145, + "percent": 97.93103448275862 + } + } + }, + { + "file": "packages/artplayer/src/storage.ts", + "sha256": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "metrics": { + "lines": { + "covered": 52, + "total": 52, + "percent": 100 + }, + "branches": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "functions": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "statements": { + "covered": 52, + "total": 52, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/style/index.ts", + "sha256": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "metrics": { + "lines": { + "covered": 0, + "total": 3, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 3, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/style/inject.ts", + "sha256": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "metrics": { + "lines": { + "covered": 1, + "total": 16, + "percent": 6.25 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 1, + "total": 16, + "percent": 6.25 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/index.ts", + "sha256": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "metrics": { + "lines": { + "covered": 43, + "total": 151, + "percent": 28.47682119205298 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 11, + "percent": 0 + }, + "statements": { + "covered": 43, + "total": 151, + "percent": 28.47682119205298 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/parse.ts", + "sha256": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "metrics": { + "lines": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 6, + "percent": 83.33333333333333 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 14, + "total": 14, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/render.ts", + "sha256": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "metrics": { + "lines": { + "covered": 5, + "total": 31, + "percent": 16.129032258064516 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 5, + "total": 31, + "percent": 16.129032258064516 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/request.ts", + "sha256": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "metrics": { + "lines": { + "covered": 38, + "total": 38, + "percent": 100 + }, + "branches": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 38, + "total": 38, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/state.ts", + "sha256": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "metrics": { + "lines": { + "covered": 38, + "total": 45, + "percent": 84.44444444444444 + }, + "branches": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "functions": { + "covered": 3, + "total": 4, + "percent": 75 + }, + "statements": { + "covered": 38, + "total": 45, + "percent": 84.44444444444444 + } + } + }, + { + "file": "packages/artplayer/src/subtitle/track.ts", + "sha256": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "metrics": { + "lines": { + "covered": 48, + "total": 83, + "percent": 57.83132530120482 + }, + "branches": { + "covered": 2, + "total": 13, + "percent": 15.384615384615385 + }, + "functions": { + "covered": 1, + "total": 4, + "percent": 25 + }, + "statements": { + "covered": 48, + "total": 83, + "percent": 57.83132530120482 + } + } + }, + { + "file": "packages/artplayer/src/template.ts", + "sha256": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "metrics": { + "lines": { + "covered": 47, + "total": 116, + "percent": 40.51724137931034 + }, + "branches": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "functions": { + "covered": 1, + "total": 6, + "percent": 16.666666666666668 + }, + "statements": { + "covered": 47, + "total": 116, + "percent": 40.51724137931034 + } + } + }, + { + "file": "packages/artplayer/src/template/html.ts", + "sha256": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "metrics": { + "lines": { + "covered": 61, + "total": 61, + "percent": 100 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "statements": { + "covered": 61, + "total": 61, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/template/nodes.ts", + "sha256": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "metrics": { + "lines": { + "covered": 2, + "total": 27, + "percent": 7.407407407407407 + }, + "branches": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 2, + "total": 27, + "percent": 7.407407407407407 + } + } + }, + { + "file": "packages/artplayer/src/thumbnails/layout.ts", + "sha256": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "metrics": { + "lines": { + "covered": 32, + "total": 32, + "percent": 100 + }, + "branches": { + "covered": 5, + "total": 7, + "percent": 71.42857142857143 + }, + "functions": { + "covered": 1, + "total": 1, + "percent": 100 + }, + "statements": { + "covered": 32, + "total": 32, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/compatibility.ts", + "sha256": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "metrics": { + "lines": { + "covered": 7, + "total": 7, + "percent": 100 + }, + "branches": { + "covered": 0, + "total": 7, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 0, + "percent": 100 + }, + "statements": { + "covered": 7, + "total": 7, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/component.ts", + "sha256": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "metrics": { + "lines": { + "covered": 53, + "total": 171, + "percent": 30.994152046783626 + }, + "branches": { + "covered": 5, + "total": 5, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 8, + "percent": 37.5 + }, + "statements": { + "covered": 53, + "total": 171, + "percent": 30.994152046783626 + } + } + }, + { + "file": "packages/artplayer/src/utils/dom.ts", + "sha256": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "metrics": { + "lines": { + "covered": 0, + "total": 7, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 7, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/utils/emitter.ts", + "sha256": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "metrics": { + "lines": { + "covered": 69, + "total": 69, + "percent": 100 + }, + "branches": { + "covered": 28, + "total": 30, + "percent": 93.33333333333333 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 69, + "total": 69, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/error.ts", + "sha256": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "metrics": { + "lines": { + "covered": 29, + "total": 29, + "percent": 100 + }, + "branches": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "functions": { + "covered": 3, + "total": 3, + "percent": 100 + }, + "statements": { + "covered": 29, + "total": 29, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/file.ts", + "sha256": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "metrics": { + "lines": { + "covered": 19, + "total": 19, + "percent": 100 + }, + "branches": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "functions": { + "covered": 2, + "total": 2, + "percent": 100 + }, + "statements": { + "covered": 19, + "total": 19, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/format.ts", + "sha256": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "metrics": { + "lines": { + "covered": 44, + "total": 44, + "percent": 100 + }, + "branches": { + "covered": 14, + "total": 16, + "percent": 87.5 + }, + "functions": { + "covered": 6, + "total": 6, + "percent": 100 + }, + "statements": { + "covered": 44, + "total": 44, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/index.ts", + "sha256": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "metrics": { + "lines": { + "covered": 0, + "total": 8, + "percent": 0 + }, + "branches": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "functions": { + "covered": 0, + "total": 1, + "percent": 0 + }, + "statements": { + "covered": 0, + "total": 8, + "percent": 0 + } + } + }, + { + "file": "packages/artplayer/src/utils/property.ts", + "sha256": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "metrics": { + "lines": { + "covered": 35, + "total": 35, + "percent": 100 + }, + "branches": { + "covered": 14, + "total": 14, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 35, + "total": 35, + "percent": 100 + } + } + }, + { + "file": "packages/artplayer/src/utils/subtitle.ts", + "sha256": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "metrics": { + "lines": { + "covered": 93, + "total": 102, + "percent": 91.17647058823529 + }, + "branches": { + "covered": 20, + "total": 25, + "percent": 80 + }, + "functions": { + "covered": 4, + "total": 5, + "percent": 80 + }, + "statements": { + "covered": 93, + "total": 102, + "percent": 91.17647058823529 + } + } + }, + { + "file": "packages/artplayer/src/utils/time.ts", + "sha256": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "metrics": { + "lines": { + "covered": 32, + "total": 32, + "percent": 100 + }, + "branches": { + "covered": 9, + "total": 9, + "percent": 100 + }, + "functions": { + "covered": 4, + "total": 4, + "percent": 100 + }, + "statements": { + "covered": 32, + "total": 32, + "percent": 100 + } + } + } + ], + "excluded": [ + { + "file": "packages/artplayer/src/component/types.ts", + "sha256": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/contextmenu/types.ts", + "sha256": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/control/types.ts", + "sha256": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/display/orientation-types.ts", + "sha256": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/display/sizing-types.ts", + "sha256": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/display/types.ts", + "sha256": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/events/core-types.ts", + "sha256": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/events/global-types.ts", + "sha256": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/events/scheduling-types.ts", + "sha256": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/events/types.ts", + "sha256": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/input/gesture-types.ts", + "sha256": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/input/hotkey-types.ts", + "sha256": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/input/pointer-types.ts", + "sha256": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/libs/screenfull.js", + "sha256": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "reason": "Vendored dependency with separate provenance and browser compatibility tests." + }, + { + "file": "packages/artplayer/src/media/events/types.ts", + "sha256": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/media/hosts.ts", + "sha256": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/media/playback.ts", + "sha256": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/media/types.ts", + "sha256": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/option/types.ts", + "sha256": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/player/properties.ts", + "sha256": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/plugins/types.ts", + "sha256": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/setting/types.ts", + "sha256": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/source/types.ts", + "sha256": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/subtitle/types.ts", + "sha256": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer/src/template/types.ts", + "sha256": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "reason": "Type-only module; no emitted runtime code." + }, + { + "file": "packages/artplayer-plugin-chapter/src/types.ts", + "sha256": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "reason": "Type-only module; no emitted runtime code." + } + ], + "minimum": { + "packages/artplayer/src/lifecycle/scope.ts": { + "lines": 95, + "branches": 90, + "functions": 95 + }, + "packages/artplayer/src/lifecycle/resources.ts": { + "lines": 95, + "branches": 90, + "functions": 95 + }, + "packages/artplayer/src/lifecycle/instance.ts": { + "lines": 95, + "branches": 90, + "functions": 95 + }, + "packages/artplayer/src/source/operation.ts": { + "lines": 90, + "branches": 85, + "functions": 90 + } + }, + "violations": [] + } + }, + "cpu": { + "script": "refactor/scripts/profile-core-layout.mjs", + "scriptSHA256": "de464c57f98e01925d7edd197901b8964c8085b1914629c92ad900d2b3220c57", + "profiles": [ + { + "directory": "refactor/.cache/core22-profile-z45oIu", + "summarySHA256": "d7e64e6a41292ca63e758c6adccfcae716001c9849977072c445f408ebe2b98d", + "profileSHA256": "1bb1142c51c2d4d7fbdc9cf3a50c5e10c123d2f24756376d5ada06762db78cc6", + "summary": { + "kind": "diagnostic-cpu-sampling", + "browser": "153.0.8010.12", + "node": "v24.21.0", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "intervalRequestedUs": 100, + "warmup": 10, + "repetitions": 60, + "totalsUs": { + "constructor": 116678, + "destroy": 46795, + "other": 1279531 + }, + "groups": { + "constructor": [ + { + "frame": { + "functionName": "update", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2732, + "columnNumber": 19 + }, + "sampledUs": 32712, + "samples": 57 + }, + { + "frame": { + "functionName": "init", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9213, + "columnNumber": 8 + }, + "sampledUs": 18991, + "samples": 34 + }, + { + "frame": { + "functionName": "insertAdjacentHTML", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 8869, + "samples": 16 + }, + { + "frame": { + "functionName": "s2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 131, + "columnNumber": 19 + }, + "sampledUs": 7402, + "samples": 14 + }, + { + "frame": { + "functionName": "f2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 111, + "columnNumber": 19 + }, + "sampledUs": 3375, + "samples": 6 + }, + { + "frame": { + "functionName": "addEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2858, + "samples": 5 + }, + { + "frame": { + "functionName": "add", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2798, + "samples": 5 + }, + { + "frame": { + "functionName": "focusVisibility", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1856, + "columnNumber": 26 + }, + "sampledUs": 2151, + "samples": 4 + }, + { + "frame": { + "functionName": "set", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6414, + "columnNumber": 15 + }, + "sampledUs": 2098, + "samples": 4 + }, + { + "frame": { + "functionName": "querySelector", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1715, + "samples": 3 + }, + { + "frame": { + "functionName": "Artplayer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9305, + "columnNumber": 15 + }, + "sampledUs": 1696, + "samples": 3 + }, + { + "frame": { + "functionName": "appendChild", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1680, + "samples": 3 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 806, + "columnNumber": 34 + }, + "sampledUs": 1628, + "samples": 3 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8069, + "columnNumber": 70 + }, + "sampledUs": 1265, + "samples": 2 + }, + { + "frame": { + "functionName": "setTimeout", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1179, + "samples": 2 + }, + { + "frame": { + "functionName": "Player", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6536, + "columnNumber": 15 + }, + "sampledUs": 1169, + "samples": 2 + }, + { + "frame": { + "functionName": "add", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1336, + "columnNumber": 7 + }, + "sampledUs": 1141, + "samples": 2 + }, + { + "frame": { + "functionName": "createElement", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1138, + "samples": 2 + }, + { + "frame": { + "functionName": "installControls", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2622, + "columnNumber": 26 + }, + "sampledUs": 1120, + "samples": 2 + }, + { + "frame": { + "functionName": "observeControlLayout", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2728, + "columnNumber": 31 + }, + "sampledUs": 1116, + "samples": 2 + }, + { + "frame": { + "functionName": "isClosing", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 358, + "columnNumber": 20 + }, + "sampledUs": 1111, + "samples": 2 + }, + { + "frame": { + "functionName": "listen", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 970, + "columnNumber": 17 + }, + "sampledUs": 1100, + "samples": 2 + }, + { + "frame": { + "functionName": "renderEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1112, + "columnNumber": 22 + }, + "sampledUs": 1063, + "samples": 2 + }, + { + "frame": { + "functionName": "urlMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6408, + "columnNumber": 17 + }, + "sampledUs": 604, + "samples": 1 + }, + { + "frame": { + "functionName": "get closed", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 289, + "columnNumber": 14 + }, + "sampledUs": 592, + "samples": 1 + }, + { + "frame": { + "functionName": "hasAttribute", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 583, + "samples": 1 + }, + { + "frame": { + "functionName": "volumeMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6480, + "columnNumber": 20 + }, + "sampledUs": 581, + "samples": 1 + }, + { + "frame": { + "functionName": "contextmenuKeyboard", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1591, + "columnNumber": 30 + }, + "sampledUs": 581, + "samples": 1 + }, + { + "frame": { + "functionName": "proxy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3596, + "columnNumber": 9 + }, + "sampledUs": 577, + "samples": 1 + }, + { + "frame": { + "functionName": "proxyEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 441, + "columnNumber": 21 + }, + "sampledUs": 573, + "samples": 1 + }, + { + "frame": { + "functionName": "get", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4410, + "columnNumber": 11 + }, + "sampledUs": 573, + "samples": 1 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 565, + "samples": 1 + }, + { + "frame": { + "functionName": "ownEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 427, + "columnNumber": 19 + }, + "sampledUs": 565, + "samples": 1 + }, + { + "frame": { + "functionName": "Subtitle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8982, + "columnNumber": 15 + }, + "sampledUs": 562, + "samples": 1 + }, + { + "frame": { + "functionName": "append", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 538, + "columnNumber": 17 + }, + "sampledUs": 562, + "samples": 1 + }, + { + "frame": { + "functionName": "Component", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1313, + "columnNumber": 15 + }, + "sampledUs": 560, + "samples": 1 + }, + { + "frame": { + "functionName": "c", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 24, + "columnNumber": 56 + }, + "sampledUs": 559, + "samples": 1 + }, + { + "frame": { + "functionName": "state2.defaults", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3686, + "columnNumber": 28 + }, + "sampledUs": 558, + "samples": 1 + }, + { + "frame": { + "functionName": "add", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 292, + "columnNumber": 7 + }, + "sampledUs": 556, + "samples": 1 + }, + { + "frame": { + "functionName": "rectMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5964, + "columnNumber": 18 + }, + "sampledUs": 556, + "samples": 1 + }, + { + "frame": { + "functionName": "mounted", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2461, + "columnNumber": 15 + }, + "sampledUs": 551, + "samples": 1 + }, + { + "frame": { + "functionName": "supportsFlex", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 491, + "columnNumber": 23 + }, + "sampledUs": 549, + "samples": 1 + }, + { + "frame": { + "functionName": "thumbnailsMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6299, + "columnNumber": 24 + }, + "sampledUs": 548, + "samples": 1 + }, + { + "frame": { + "functionName": "listenSource", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6115, + "columnNumber": 23 + }, + "sampledUs": 547, + "samples": 1 + }, + { + "frame": { + "functionName": "miniMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5549, + "columnNumber": 18 + }, + "sampledUs": 544, + "samples": 1 + }, + { + "frame": { + "functionName": "optionInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5552, + "columnNumber": 21 + }, + "sampledUs": 544, + "samples": 1 + }, + { + "frame": { + "functionName": "Icons", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3870, + "columnNumber": 15 + }, + "sampledUs": 544, + "samples": 1 + }, + { + "frame": { + "functionName": "capture", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8064, + "columnNumber": 20 + }, + "sampledUs": 543, + "samples": 1 + }, + { + "frame": { + "functionName": "get", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8778, + "columnNumber": 7 + }, + "sampledUs": 543, + "samples": 1 + }, + { + "frame": { + "functionName": "on", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9251, + "columnNumber": 6 + }, + "sampledUs": 543, + "samples": 1 + }, + { + "frame": { + "functionName": "Template", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9184, + "columnNumber": 15 + }, + "sampledUs": 541, + "samples": 1 + }, + { + "frame": { + "functionName": "subscribeEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 454, + "columnNumber": 25 + }, + "sampledUs": 538, + "samples": 1 + }, + { + "frame": { + "functionName": "airplayMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4228, + "columnNumber": 21 + }, + "sampledUs": 536, + "samples": 1 + }, + { + "frame": { + "functionName": "Layer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4017, + "columnNumber": 15 + }, + "sampledUs": 525, + "samples": 1 + } + ], + "destroy": [ + { + "frame": { + "functionName": "load", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 28014, + "samples": 51 + }, + { + "frame": { + "functionName": "destroy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9235, + "columnNumber": 11 + }, + "sampledUs": 8750, + "samples": 16 + }, + { + "frame": { + "functionName": "removeEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 4313, + "samples": 8 + }, + { + "frame": { + "functionName": "dispose", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 317, + "columnNumber": 11 + }, + "sampledUs": 1357, + "samples": 2 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 1117, + "samples": 2 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 986, + "columnNumber": 24 + }, + "sampledUs": 547, + "samples": 1 + }, + { + "frame": { + "functionName": "destroyInstance", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 389, + "columnNumber": 26 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "state2.releaseContainer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 379, + "columnNumber": 30 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "releaseTreeOwner", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 7211, + "columnNumber": 27 + }, + "sampledUs": 540, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1008, + "columnNumber": 24 + }, + "sampledUs": 537, + "samples": 1 + }, + { + "frame": { + "functionName": "get element", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4750, + "columnNumber": 17 + }, + "sampledUs": 536, + "samples": 1 + } + ] + }, + "timings": [ + { + "constructorMs": 2.4000000059604645, + "destroyMs": 1.4000000059604645 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2.2999999821186066, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 3.0999999940395355, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 2.2000000178813934, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 2.199999988079071, + "destroyMs": 2.300000011920929 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 1 + }, + { + "constructorMs": 2.7000000178813934, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 2, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 0.5 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 2, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.7000000178813934, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.7000000178813934, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 2.2999999821186066, + "destroyMs": 0.5 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.5 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.6000000238418579 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 2.100000023841858, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.5 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 2, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 2.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 2, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2.699999988079071, + "destroyMs": 1 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.800000011920929 + } + ], + "errors": [], + "limit": "Instrumented Chromium source-build diagnostic only; not an uninstrumented published/candidate performance comparison. Native frames and sampling gaps may be charged to their JS caller. Timings must not be used for performance acceptance." + } + }, + { + "directory": "refactor/.cache/core22-profile-6pNQZk", + "summarySHA256": "1faf95b44f762e4fedeb4426ff5240c8b8a998dab1f358702866b47e52dc25e7", + "profileSHA256": "5901456ffad02c64730bc45dff6a2c20b228f588c3e6b916e3ae9fc0e0c3d360", + "summary": { + "kind": "diagnostic-cpu-sampling", + "browser": "153.0.8010.12", + "node": "v24.21.0", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "intervalRequestedUs": 100, + "warmup": 10, + "repetitions": 60, + "totalsUs": { + "constructor": 129742, + "destroy": 78651, + "other": 1439632 + }, + "groups": { + "constructor": [ + { + "frame": { + "functionName": "update", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2732, + "columnNumber": 19 + }, + "sampledUs": 31989, + "samples": 55 + }, + { + "frame": { + "functionName": "init", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9213, + "columnNumber": 8 + }, + "sampledUs": 24603, + "samples": 42 + }, + { + "frame": { + "functionName": "insertAdjacentHTML", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 17731, + "samples": 31 + }, + { + "frame": { + "functionName": "s2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 131, + "columnNumber": 19 + }, + "sampledUs": 6708, + "samples": 12 + }, + { + "frame": { + "functionName": "setAttribute", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 3969, + "samples": 7 + }, + { + "frame": { + "functionName": "addEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 3466, + "samples": 6 + }, + { + "frame": { + "functionName": "appendChild", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 3383, + "samples": 6 + }, + { + "frame": { + "functionName": "renderEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1112, + "columnNumber": 22 + }, + "sampledUs": 2273, + "samples": 4 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 806, + "columnNumber": 34 + }, + "sampledUs": 1873, + "samples": 3 + }, + { + "frame": { + "functionName": "add", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 292, + "columnNumber": 7 + }, + "sampledUs": 1811, + "samples": 3 + }, + { + "frame": { + "functionName": "proxyListener", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3385, + "columnNumber": 24 + }, + "sampledUs": 1471, + "samples": 2 + }, + { + "frame": { + "functionName": "supportsFlex", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 491, + "columnNumber": 23 + }, + "sampledUs": 1270, + "samples": 2 + }, + { + "frame": { + "functionName": "Events", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3579, + "columnNumber": 15 + }, + "sampledUs": 1149, + "samples": 2 + }, + { + "frame": { + "functionName": "capture", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8064, + "columnNumber": 20 + }, + "sampledUs": 1147, + "samples": 2 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 1132, + "samples": 2 + }, + { + "frame": { + "functionName": "state2.defaults", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3686, + "columnNumber": 28 + }, + "sampledUs": 1128, + "samples": 2 + }, + { + "frame": { + "functionName": "c", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 24, + "columnNumber": 56 + }, + "sampledUs": 1112, + "samples": 2 + }, + { + "frame": { + "functionName": "createDefaults", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4148, + "columnNumber": 25 + }, + "sampledUs": 1112, + "samples": 2 + }, + { + "frame": { + "functionName": "set", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6414, + "columnNumber": 15 + }, + "sampledUs": 1064, + "samples": 2 + }, + { + "frame": { + "functionName": "pollInfo", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3934, + "columnNumber": 19 + }, + "sampledUs": 799, + "samples": 1 + }, + { + "frame": { + "functionName": "y", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 141, + "columnNumber": 18 + }, + "sampledUs": 775, + "samples": 2 + }, + { + "frame": { + "functionName": "bindGlobalEvents", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3320, + "columnNumber": 29 + }, + "sampledUs": 662, + "samples": 1 + }, + { + "frame": { + "functionName": "querySelector", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 626, + "samples": 1 + }, + { + "frame": { + "functionName": "mounted", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2533, + "columnNumber": 15 + }, + "sampledUs": 617, + "samples": 1 + }, + { + "frame": { + "functionName": "Subtitle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8982, + "columnNumber": 15 + }, + "sampledUs": 608, + "samples": 1 + }, + { + "frame": { + "functionName": "volumeMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6480, + "columnNumber": 20 + }, + "sampledUs": 595, + "samples": 1 + }, + { + "frame": { + "functionName": "bindNodes", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9158, + "columnNumber": 20 + }, + "sampledUs": 593, + "samples": 1 + }, + { + "frame": { + "functionName": "update", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3808, + "columnNumber": 10 + }, + "sampledUs": 585, + "samples": 1 + }, + { + "frame": { + "functionName": "beginSubtitleRequest", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8866, + "columnNumber": 31 + }, + "sampledUs": 581, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1117, + "columnNumber": 31 + }, + "sampledUs": 579, + "samples": 1 + }, + { + "frame": { + "functionName": "Loading", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4027, + "columnNumber": 15 + }, + "sampledUs": 577, + "samples": 1 + }, + { + "frame": { + "functionName": "observe", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 577, + "samples": 1 + }, + { + "frame": { + "functionName": "get closed", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 289, + "columnNumber": 14 + }, + "sampledUs": 573, + "samples": 1 + }, + { + "frame": { + "functionName": "screenshotMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6010, + "columnNumber": 24 + }, + "sampledUs": 572, + "samples": 1 + }, + { + "frame": { + "functionName": "optionInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5552, + "columnNumber": 21 + }, + "sampledUs": 568, + "samples": 1 + }, + { + "frame": { + "functionName": "keyboardSlider", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2182, + "columnNumber": 25 + }, + "sampledUs": 568, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9045, + "columnNumber": 25 + }, + "sampledUs": 568, + "samples": 1 + }, + { + "frame": { + "functionName": "loop", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3960, + "columnNumber": 19 + }, + "sampledUs": 563, + "samples": 1 + }, + { + "frame": { + "functionName": "Component", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1313, + "columnNumber": 15 + }, + "sampledUs": 562, + "samples": 1 + }, + { + "frame": { + "functionName": "setTimeout", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 558, + "samples": 1 + }, + { + "frame": { + "functionName": "update", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2185, + "columnNumber": 19 + }, + "sampledUs": 555, + "samples": 1 + }, + { + "frame": { + "functionName": "Control", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3036, + "columnNumber": 15 + }, + "sampledUs": 549, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 117, + "columnNumber": 45 + }, + "sampledUs": 549, + "samples": 1 + }, + { + "frame": { + "functionName": "ownEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 427, + "columnNumber": 19 + }, + "sampledUs": 548, + "samples": 1 + }, + { + "frame": { + "functionName": "appendElement", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1129, + "columnNumber": 24 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "createElement", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "mountProgressView", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2340, + "columnNumber": 28 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "getScope", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 352, + "columnNumber": 19 + }, + "sampledUs": 543, + "samples": 1 + }, + { + "frame": { + "functionName": "getExt", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 740, + "columnNumber": 17 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "constructProfilePlayer", + "scriptId": "13", + "url": "", + "lineNumber": 3, + "columnNumber": 37 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "register", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3330, + "columnNumber": 25 + }, + "sampledUs": 541, + "samples": 1 + }, + { + "frame": { + "functionName": "mergeDeep", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 804, + "columnNumber": 20 + }, + "sampledUs": 535, + "samples": 1 + }, + { + "frame": { + "functionName": "listen", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 970, + "columnNumber": 17 + }, + "sampledUs": 534, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3488, + "columnNumber": 11 + }, + "sampledUs": 531, + "samples": 1 + }, + { + "frame": { + "functionName": "querySelectorAll", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 529, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6128, + "columnNumber": 24 + }, + "sampledUs": 512, + "samples": 1 + } + ], + "destroy": [ + { + "frame": { + "functionName": "load", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 41195, + "samples": 70 + }, + { + "frame": { + "functionName": "destroy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9235, + "columnNumber": 11 + }, + "sampledUs": 16813, + "samples": 27 + }, + { + "frame": { + "functionName": "removeEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 8365, + "samples": 13 + }, + { + "frame": { + "functionName": "dispose", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 317, + "columnNumber": 11 + }, + "sampledUs": 4854, + "samples": 6 + }, + { + "frame": { + "functionName": "ownsFullscreen", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4882, + "columnNumber": 27 + }, + "sampledUs": 1309, + "samples": 2 + }, + { + "frame": { + "functionName": "off", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9283, + "columnNumber": 7 + }, + "sampledUs": 1162, + "samples": 2 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 1123, + "samples": 2 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 986, + "columnNumber": 24 + }, + "sampledUs": 807, + "samples": 1 + }, + { + "frame": { + "functionName": "destroyListeners", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3462, + "columnNumber": 27 + }, + "sampledUs": 735, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 463, + "columnNumber": 14 + }, + "sampledUs": 597, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 403, + "columnNumber": 14 + }, + "sampledUs": 585, + "samples": 1 + }, + { + "frame": { + "functionName": "stateOf$1", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 346, + "columnNumber": 20 + }, + "sampledUs": 560, + "samples": 1 + }, + { + "frame": { + "functionName": "clearTimeout", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 546, + "samples": 1 + } + ] + }, + "timings": [ + { + "constructorMs": 2, + "destroyMs": 1 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2, + "destroyMs": 1.300000011920929 + }, + { + "constructorMs": 2.399999976158142, + "destroyMs": 1.2000000178813934 + }, + { + "constructorMs": 2.9000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 2, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1.5999999940395355 + }, + { + "constructorMs": 2, + "destroyMs": 1.5 + }, + { + "constructorMs": 2.5, + "destroyMs": 1.5999999940395355 + }, + { + "constructorMs": 2.7000000178813934, + "destroyMs": 1.5999999940395355 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1 + }, + { + "constructorMs": 2, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 2, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 2, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 2, + "destroyMs": 1.199999988079071 + }, + { + "constructorMs": 2.300000011920929, + "destroyMs": 1.5 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 1.800000011920929 + }, + { + "constructorMs": 2.199999988079071, + "destroyMs": 1.9000000059604645 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 2.5 + }, + { + "constructorMs": 3.5, + "destroyMs": 1.199999988079071 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1.7999999821186066 + }, + { + "constructorMs": 2.4000000059604645, + "destroyMs": 1.5 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 2 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 1.699999988079071 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 2.300000011920929 + }, + { + "constructorMs": 3.5999999940395355, + "destroyMs": 1.699999988079071 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 2.2999999821186066 + }, + { + "constructorMs": 2, + "destroyMs": 1 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.5 + }, + { + "constructorMs": 2.2000000178813934, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 2.100000023841858, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 2.5, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1.100000023841858 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 2, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 1.5999999940395355 + }, + { + "constructorMs": 2.2999999821186066, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.7999999821186066, + "destroyMs": 1.699999988079071 + }, + { + "constructorMs": 2.2000000178813934, + "destroyMs": 2 + }, + { + "constructorMs": 2.300000011920929, + "destroyMs": 2.5 + }, + { + "constructorMs": 1.899999976158142, + "destroyMs": 1.4000000059604645 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 1.9000000059604645 + }, + { + "constructorMs": 4.200000017881393, + "destroyMs": 1 + }, + { + "constructorMs": 1.7000000178813934, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 2, + "destroyMs": 1 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 2.300000011920929, + "destroyMs": 2.100000023841858 + } + ], + "errors": [], + "limit": "Instrumented Chromium source-build diagnostic only; not an uninstrumented published/candidate performance comparison. Native frames and sampling gaps may be charged to their JS caller. Timings must not be used for performance acceptance." + } + }, + { + "directory": "refactor/.cache/core22-profile-mGz2AL", + "summarySHA256": "1ea2e86cd28d27eaea65d2b6e22faacf4961ceca5613180fbab7ccb27629e972", + "profileSHA256": "4deb8fe06a936c0f5c53bcd68e78dbdfe0d72209cb2758cb3f5eab389c777b5e", + "summary": { + "kind": "diagnostic-cpu-sampling", + "browser": "153.0.8010.12", + "node": "v24.21.0", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "intervalRequestedUs": 100, + "warmup": 10, + "repetitions": 60, + "totalsUs": { + "constructor": 85399, + "destroy": 44270, + "other": 1450176 + }, + "groups": { + "constructor": [ + { + "frame": { + "functionName": "init", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9214, + "columnNumber": 8 + }, + "sampledUs": 12928, + "samples": 24 + }, + { + "frame": { + "functionName": "insertAdjacentHTML", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 10669, + "samples": 19 + }, + { + "frame": { + "functionName": "f2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 111, + "columnNumber": 19 + }, + "sampledUs": 7151, + "samples": 13 + }, + { + "frame": { + "functionName": "addEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 5636, + "samples": 10 + }, + { + "frame": { + "functionName": "s2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 131, + "columnNumber": 19 + }, + "sampledUs": 4494, + "samples": 8 + }, + { + "frame": { + "functionName": "appendChild", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 3423, + "samples": 6 + }, + { + "frame": { + "functionName": "set", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6415, + "columnNumber": 15 + }, + "sampledUs": 2687, + "samples": 5 + }, + { + "frame": { + "functionName": "on", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9252, + "columnNumber": 6 + }, + "sampledUs": 2300, + "samples": 4 + }, + { + "frame": { + "functionName": "Artplayer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9306, + "columnNumber": 15 + }, + "sampledUs": 2225, + "samples": 4 + }, + { + "frame": { + "functionName": "createElement", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2202, + "samples": 4 + }, + { + "frame": { + "functionName": "add", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2199, + "samples": 4 + }, + { + "frame": { + "functionName": "c", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 24, + "columnNumber": 56 + }, + "sampledUs": 2166, + "samples": 4 + }, + { + "frame": { + "functionName": "resizeInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3502, + "columnNumber": 21 + }, + "sampledUs": 1677, + "samples": 3 + }, + { + "frame": { + "functionName": "autoSizeMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4360, + "columnNumber": 22 + }, + "sampledUs": 1152, + "samples": 2 + }, + { + "frame": { + "functionName": "Player", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6537, + "columnNumber": 15 + }, + "sampledUs": 1123, + "samples": 2 + }, + { + "frame": { + "functionName": "setProperty", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1119, + "samples": 2 + }, + { + "frame": { + "functionName": "capture", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8065, + "columnNumber": 20 + }, + "sampledUs": 1083, + "samples": 2 + }, + { + "frame": { + "functionName": "get", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8779, + "columnNumber": 7 + }, + "sampledUs": 1080, + "samples": 2 + }, + { + "frame": { + "functionName": "installPlaybackUI", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4461, + "columnNumber": 28 + }, + "sampledUs": 1078, + "samples": 2 + }, + { + "frame": { + "functionName": "getExt", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 740, + "columnNumber": 17 + }, + "sampledUs": 1075, + "samples": 2 + }, + { + "frame": { + "functionName": "get", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3875, + "columnNumber": 15 + }, + "sampledUs": 626, + "samples": 1 + }, + { + "frame": { + "functionName": "renderEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1112, + "columnNumber": 22 + }, + "sampledUs": 588, + "samples": 1 + }, + { + "frame": { + "functionName": "getScope", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 352, + "columnNumber": 19 + }, + "sampledUs": 584, + "samples": 1 + }, + { + "frame": { + "functionName": "setAttribute", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 579, + "samples": 1 + }, + { + "frame": { + "functionName": "contextmenuKeyboard", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1591, + "columnNumber": 30 + }, + "sampledUs": 577, + "samples": 1 + }, + { + "frame": { + "functionName": "Info", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3993, + "columnNumber": 15 + }, + "sampledUs": 576, + "samples": 1 + }, + { + "frame": { + "functionName": "timeout", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 996, + "columnNumber": 18 + }, + "sampledUs": 576, + "samples": 1 + }, + { + "frame": { + "functionName": "AbortController", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 574, + "samples": 1 + }, + { + "frame": { + "functionName": "has", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 798, + "columnNumber": 14 + }, + "sampledUs": 574, + "samples": 1 + }, + { + "frame": { + "functionName": "pauseMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5642, + "columnNumber": 19 + }, + "sampledUs": 574, + "samples": 1 + }, + { + "frame": { + "functionName": "get textTrack", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9013, + "columnNumber": 17 + }, + "sampledUs": 574, + "samples": 1 + }, + { + "frame": { + "functionName": "mounted", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2533, + "columnNumber": 15 + }, + "sampledUs": 573, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 309, + "columnNumber": 31 + }, + "sampledUs": 572, + "samples": 1 + }, + { + "frame": { + "functionName": "isClosing", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 358, + "columnNumber": 20 + }, + "sampledUs": 568, + "samples": 1 + }, + { + "frame": { + "functionName": "loop", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3961, + "columnNumber": 19 + }, + "sampledUs": 564, + "samples": 1 + }, + { + "frame": { + "functionName": "keyboardSlider", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2182, + "columnNumber": 25 + }, + "sampledUs": 563, + "samples": 1 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 562, + "samples": 1 + }, + { + "frame": { + "functionName": "setTimeout", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 557, + "samples": 1 + }, + { + "frame": { + "functionName": "Control", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3037, + "columnNumber": 15 + }, + "sampledUs": 552, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 806, + "columnNumber": 34 + }, + "sampledUs": 549, + "samples": 1 + }, + { + "frame": { + "functionName": "mergeDeep", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 804, + "columnNumber": 20 + }, + "sampledUs": 547, + "samples": 1 + }, + { + "frame": { + "functionName": "ResourceScope", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 285, + "columnNumber": 15 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "y", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 141, + "columnNumber": 18 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "constructProfilePlayer", + "scriptId": "13", + "url": "", + "lineNumber": 3, + "columnNumber": 37 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "posterMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5922, + "columnNumber": 20 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "nativePip", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5657, + "columnNumber": 20 + }, + "sampledUs": 541, + "samples": 1 + }, + { + "frame": { + "functionName": "bindDocument", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1876, + "columnNumber": 25 + }, + "sampledUs": 539, + "samples": 1 + }, + { + "frame": { + "functionName": "get option", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9420, + "columnNumber": 21 + }, + "sampledUs": 537, + "samples": 1 + }, + { + "frame": { + "functionName": "optionInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5553, + "columnNumber": 21 + }, + "sampledUs": 537, + "samples": 1 + }, + { + "frame": { + "functionName": "append", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 538, + "columnNumber": 17 + }, + "sampledUs": 535, + "samples": 1 + }, + { + "frame": { + "functionName": "listener", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3492, + "columnNumber": 23 + }, + "sampledUs": 531, + "samples": 1 + }, + { + "frame": { + "functionName": "querySelector", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 529, + "samples": 1 + } + ], + "destroy": [ + { + "frame": { + "functionName": "load", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 26431, + "samples": 48 + }, + { + "frame": { + "functionName": "destroy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9236, + "columnNumber": 11 + }, + "sampledUs": 9868, + "samples": 18 + }, + { + "frame": { + "functionName": "dispose", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 317, + "columnNumber": 11 + }, + "sampledUs": 2149, + "samples": 4 + }, + { + "frame": { + "functionName": "removeEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1982, + "samples": 4 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 1085, + "samples": 2 + }, + { + "frame": { + "functionName": "clearTimeout", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1070, + "samples": 2 + }, + { + "frame": { + "functionName": "state2.releaseContainer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 379, + "columnNumber": 30 + }, + "sampledUs": 591, + "samples": 1 + }, + { + "frame": { + "functionName": "destroyInstance", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 389, + "columnNumber": 26 + }, + "sampledUs": 552, + "samples": 1 + }, + { + "frame": { + "functionName": "clean", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3423, + "columnNumber": 18 + }, + "sampledUs": 542, + "samples": 1 + } + ] + }, + "timings": [ + { + "constructorMs": 1.5999999940395355, + "destroyMs": 1 + }, + { + "constructorMs": 1.199999988079071, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.199999988079071, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.6000000238418579 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.199999988079071, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.199999988079071, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.800000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 1 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.2000000178813934, + "destroyMs": 0.6000000238418579 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.6000000238418579 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.699999988079071, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 1 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.800000011920929 + } + ], + "errors": [], + "limit": "Instrumented Chromium source-build diagnostic only; not an uninstrumented published/candidate performance comparison. Native frames and sampling gaps may be charged to their JS caller. Timings must not be used for performance acceptance." + } + }, + { + "directory": "refactor/.cache/core22-profile-Wsg2mP", + "summarySHA256": "f6191f375ca389663b8d0f70dcff50fd2eb5e1ef2bef74fac298f4a760ece31a", + "profileSHA256": "3fcc5e44779d8613077c969b7d25cfd37a1c6bd55ca5e3c6960f41c805ceaa4a", + "summary": { + "kind": "diagnostic-cpu-sampling", + "browser": "153.0.8010.12", + "node": "v24.21.0", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "intervalRequestedUs": 100, + "warmup": 10, + "repetitions": 60, + "totalsUs": { + "constructor": 91257, + "destroy": 44088, + "other": 1261858 + }, + "groups": { + "constructor": [ + { + "frame": { + "functionName": "init", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9214, + "columnNumber": 8 + }, + "sampledUs": 16978, + "samples": 31 + }, + { + "frame": { + "functionName": "insertAdjacentHTML", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 14205, + "samples": 25 + }, + { + "frame": { + "functionName": "s2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 131, + "columnNumber": 19 + }, + "sampledUs": 5646, + "samples": 11 + }, + { + "frame": { + "functionName": "addEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 3407, + "samples": 6 + }, + { + "frame": { + "functionName": "set", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6415, + "columnNumber": 15 + }, + "sampledUs": 2705, + "samples": 5 + }, + { + "frame": { + "functionName": "loop", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3961, + "columnNumber": 19 + }, + "sampledUs": 2430, + "samples": 4 + }, + { + "frame": { + "functionName": "querySelector", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2238, + "samples": 4 + }, + { + "frame": { + "functionName": "setAttribute", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 2237, + "samples": 4 + }, + { + "frame": { + "functionName": "setStyle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 577, + "columnNumber": 19 + }, + "sampledUs": 2215, + "samples": 4 + }, + { + "frame": { + "functionName": "c", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 24, + "columnNumber": 56 + }, + "sampledUs": 2168, + "samples": 4 + }, + { + "frame": { + "functionName": "Artplayer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9306, + "columnNumber": 15 + }, + "sampledUs": 1735, + "samples": 3 + }, + { + "frame": { + "functionName": "add", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1657, + "samples": 3 + }, + { + "frame": { + "functionName": "createDefaults", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4149, + "columnNumber": 25 + }, + "sampledUs": 1652, + "samples": 3 + }, + { + "frame": { + "functionName": "proxyListener", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3386, + "columnNumber": 24 + }, + "sampledUs": 1645, + "samples": 3 + }, + { + "frame": { + "functionName": "f2", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 111, + "columnNumber": 19 + }, + "sampledUs": 1600, + "samples": 3 + }, + { + "frame": { + "functionName": "init", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1779, + "columnNumber": 8 + }, + "sampledUs": 1161, + "samples": 2 + }, + { + "frame": { + "functionName": "append", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 538, + "columnNumber": 17 + }, + "sampledUs": 1148, + "samples": 2 + }, + { + "frame": { + "functionName": "createElement", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1120, + "samples": 2 + }, + { + "frame": { + "functionName": "renderEntry", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1112, + "columnNumber": 22 + }, + "sampledUs": 1111, + "samples": 2 + }, + { + "frame": { + "functionName": "supportsFlex", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 491, + "columnNumber": 23 + }, + "sampledUs": 1110, + "samples": 2 + }, + { + "frame": { + "functionName": "appendChild", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1104, + "samples": 2 + }, + { + "frame": { + "functionName": "listen", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 970, + "columnNumber": 17 + }, + "sampledUs": 1092, + "samples": 2 + }, + { + "frame": { + "functionName": "set", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6494, + "columnNumber": 11 + }, + "sampledUs": 1091, + "samples": 2 + }, + { + "frame": { + "functionName": "optionInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 5553, + "columnNumber": 21 + }, + "sampledUs": 1088, + "samples": 2 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 806, + "columnNumber": 34 + }, + "sampledUs": 1087, + "samples": 2 + }, + { + "frame": { + "functionName": "add", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 292, + "columnNumber": 7 + }, + "sampledUs": 1082, + "samples": 2 + }, + { + "frame": { + "functionName": "pollInfo", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3935, + "columnNumber": 19 + }, + "sampledUs": 1080, + "samples": 2 + }, + { + "frame": { + "functionName": "Icons", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3871, + "columnNumber": 15 + }, + "sampledUs": 1075, + "samples": 2 + }, + { + "frame": { + "functionName": "resizeInit", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3502, + "columnNumber": 21 + }, + "sampledUs": 1042, + "samples": 2 + }, + { + "frame": { + "functionName": "getScope", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 352, + "columnNumber": 19 + }, + "sampledUs": 680, + "samples": 1 + }, + { + "frame": { + "functionName": "isClosing", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 358, + "columnNumber": 20 + }, + "sampledUs": 602, + "samples": 1 + }, + { + "frame": { + "functionName": "screenshotMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6011, + "columnNumber": 24 + }, + "sampledUs": 597, + "samples": 1 + }, + { + "frame": { + "functionName": "seekMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6056, + "columnNumber": 18 + }, + "sampledUs": 587, + "samples": 1 + }, + { + "frame": { + "functionName": "bindNodes", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9159, + "columnNumber": 20 + }, + "sampledUs": 578, + "samples": 1 + }, + { + "frame": { + "functionName": "state2.defaults", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3687, + "columnNumber": 28 + }, + "sampledUs": 575, + "samples": 1 + }, + { + "frame": { + "functionName": "getTime", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 2516, + "columnNumber": 24 + }, + "sampledUs": 574, + "samples": 1 + }, + { + "frame": { + "functionName": "Mask", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4037, + "columnNumber": 15 + }, + "sampledUs": 568, + "samples": 1 + }, + { + "frame": { + "functionName": "addClass", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 529, + "columnNumber": 19 + }, + "sampledUs": 562, + "samples": 1 + }, + { + "frame": { + "functionName": "beginLifecycle", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 338, + "columnNumber": 25 + }, + "sampledUs": 552, + "samples": 1 + }, + { + "frame": { + "functionName": "get", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4411, + "columnNumber": 11 + }, + "sampledUs": 547, + "samples": 1 + }, + { + "frame": { + "functionName": "validElement", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 1198, + "columnNumber": 23 + }, + "sampledUs": 547, + "samples": 1 + }, + { + "frame": { + "functionName": "query", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 523, + "columnNumber": 16 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "ownContainer", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 372, + "columnNumber": 23 + }, + "sampledUs": 545, + "samples": 1 + }, + { + "frame": { + "functionName": "resolveOption", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4221, + "columnNumber": 24 + }, + "sampledUs": 544, + "samples": 1 + }, + { + "frame": { + "functionName": "value", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4338, + "columnNumber": 11 + }, + "sampledUs": 544, + "samples": 1 + }, + { + "frame": { + "functionName": "setProperty", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "proxy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3597, + "columnNumber": 9 + }, + "sampledUs": 539, + "samples": 1 + }, + { + "frame": { + "functionName": "captureTemplate", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 8063, + "columnNumber": 26 + }, + "sampledUs": 537, + "samples": 1 + }, + { + "frame": { + "functionName": "listener", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3492, + "columnNumber": 23 + }, + "sampledUs": 536, + "samples": 1 + }, + { + "frame": { + "functionName": "constructProfilePlayer", + "scriptId": "13", + "url": "", + "lineNumber": 3, + "columnNumber": 37 + }, + "sampledUs": 536, + "samples": 1 + }, + { + "frame": { + "functionName": "Template", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9185, + "columnNumber": 15 + }, + "sampledUs": 535, + "samples": 1 + }, + { + "frame": { + "functionName": "switchMix", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 6267, + "columnNumber": 20 + }, + "sampledUs": 506, + "samples": 1 + }, + { + "frame": { + "functionName": "ResizeObserver", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 470, + "samples": 1 + } + ], + "destroy": [ + { + "frame": { + "functionName": "load", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 29623, + "samples": 54 + }, + { + "frame": { + "functionName": "destroy", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9236, + "columnNumber": 11 + }, + "sampledUs": 8807, + "samples": 16 + }, + { + "frame": { + "functionName": "removeEventListener", + "scriptId": "0", + "url": "", + "lineNumber": -1, + "columnNumber": -1 + }, + "sampledUs": 1742, + "samples": 3 + }, + { + "frame": { + "functionName": "clean", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3423, + "columnNumber": 18 + }, + "sampledUs": 1606, + "samples": 3 + }, + { + "frame": { + "functionName": "remove", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 3606, + "columnNumber": 10 + }, + "sampledUs": 633, + "samples": 1 + }, + { + "frame": { + "functionName": "", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 309, + "columnNumber": 31 + }, + "sampledUs": 599, + "samples": 1 + }, + { + "frame": { + "functionName": "reset", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 9432, + "columnNumber": 9 + }, + "sampledUs": 542, + "samples": 1 + }, + { + "frame": { + "functionName": "get element", + "scriptId": "4", + "url": "http://127.0.0.1:8086/candidate/artplayer.js", + "lineNumber": 4751, + "columnNumber": 17 + }, + "sampledUs": 536, + "samples": 1 + } + ] + }, + "timings": [ + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 1 + }, + { + "constructorMs": 1.2000000178813934, + "destroyMs": 0.8999999761581421 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.2000000178813934, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 2.0999999940395355, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.7000000178813934, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.9000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.2000000178813934, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.5999999940395355 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 1.2000000178813934 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.6000000238418579 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.0999999940395355, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.399999976158142, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 1.300000011920929 + }, + { + "constructorMs": 2.5, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 1.5, + "destroyMs": 0.7000000178813934 + }, + { + "constructorMs": 1.5999999940395355, + "destroyMs": 0.9000000059604645 + }, + { + "constructorMs": 1.300000011920929, + "destroyMs": 0.800000011920929 + }, + { + "constructorMs": 1.2999999821186066, + "destroyMs": 0.699999988079071 + }, + { + "constructorMs": 1.199999988079071, + "destroyMs": 0.7999999821186066 + }, + { + "constructorMs": 2.100000023841858, + "destroyMs": 1.0999999940395355 + }, + { + "constructorMs": 1.4000000059604645, + "destroyMs": 0.699999988079071 + } + ], + "errors": [], + "limit": "Instrumented Chromium source-build diagnostic only; not an uninstrumented published/candidate performance comparison. Native frames and sampling gaps may be charged to their JS caller. Timings must not be used for performance acceptance." + } + } + ] + }, + "validator": { + "version": "2.0.6", + "file": "node_modules/option-validator/dist/option-validator.js", + "sha256": "7d8781668aa1ea52af5b46eba94cf2be18845bc116e3cfa727b8b19d1904d747", + "runtime": "bundled synchronous dependency; no device or remote service", + "tests": [ + "test/options.test.js", + "test/browser/options.spec.js", + "test/browser/initialization.spec.js" + ] + }, + "limits": [ + "Core stage only; all ecosystem packages, external SDKs and physical devices still require their named PKG/REL tasks.", + "Size and intermittent timing risks remain open for MOD-03/REVIEW-01; historical thresholds are unchanged.", + "No remote CI, npm publication, heap/GPU certification or whole-site acceptance is implied." + ] +} diff --git a/refactor/baselines/core-setting-navigation-partial.json b/refactor/baselines/core-setting-navigation-partial.json new file mode 100644 index 000000000..fbea83724 --- /dev/null +++ b/refactor/baselines/core-setting-navigation-partial.json @@ -0,0 +1,18416 @@ +{ + "schemaVersion": 1, + "task": "CORE-22", + "stage": "setting-navigation", + "status": "partial", + "capturedAt": "2026-09-11T14:41:44.713Z", + "baseCommit": "5efc7f7699e16ec21ec8d4cdc20ff360b26cadd7", + "source": { + "packages/artplayer/src/setting/keyboard.ts": { + "beforeLF": "99db705c0cc87d5d7fb5dffbee9f2a88b7342b6661fd6d00addd17a815792bdc", + "afterLF": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395" + }, + "packages/artplayer/src/setting/keyboard-focus.ts": { + "beforeLF": "d66b7e2ae3693da3ee500d1fc57346310066c3a1cb34d7433ebadc70090417ca", + "afterLF": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3" + } + }, + "testSHA256": "779aa12cfd814cab26bdce474dd9d297c6b12a55268618a47ae7d54b74588cbd", + "before": { + "path": "refactor/.cache/core22-setting-before.json", + "sha256": "6c33f44e0b2deb999d56fb56e7c6bac0fc2c136d1d0a30234f632b385bce2cb9", + "stats": { + "startTime": "2026-09-11T14:31:20.389Z", + "duration": 3223.891, + "expected": 1, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "77b6e3f35b62a18b60516d150d789d3c81ff03e5adaab3779c355389a6c03cc8", + "bytes": 376354 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "77b6e3f35b62a18b60516d150d789d3c81ff03e5adaab3779c355389a6c03cc8", + "bytes": 376354, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "77b6e3f35b62a18b60516d150d789d3c81ff03e5adaab3779c355389a6c03cc8", + "bytes": 376354, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "project": "chromium", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 495, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 2, + "styles": 80 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 2, + "styles": 78 + }, + { + "key": "a", + "expected": 6, + "queries": 1, + "styles": 39 + }, + { + "key": "End", + "expected": 39, + "queries": 2, + "styles": 78 + }, + { + "key": "Home", + "expected": 0, + "queries": 2, + "styles": 78 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 2, + "styles": 78 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 2, + "styles": 78 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 2, + "styles": 78 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 2, + "styles": 78 + } + ] + } + ] + }, + "after": { + "path": "refactor/.cache/core22-setting-after.json", + "sha256": "72218b69d025cd7c1f03e26068b2a8a7fe8616e84f8fc4141d63a249dc24961e", + "stats": { + "startTime": "2026-09-11T14:32:00.870Z", + "duration": 7224.7119999999995, + "expected": 3, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "project": "chromium", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 706, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "firefox", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 3409, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "webkit", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 2593, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + } + ] + }, + "regression": { + "path": "refactor/.cache/core22-setting-regression.json", + "sha256": "841f71a37052812ff6992e8a2a0263d8970aee4d6981e49fbb469dd5b0fd6ef4", + "stats": { + "startTime": "2026-09-11T14:32:49.854Z", + "duration": 89465.723, + "expected": 327, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "f3e99e721c33de5b076a3ea3fb8c8c2f0ad1e437208575b3b0f563ada97d594e", + "bytes": 376730, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 468 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 447 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 449 + }, + { + "project": "chromium", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 325 + }, + { + "project": "chromium", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 640, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "chromium", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 685 + }, + { + "project": "chromium", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 412 + }, + { + "project": "chromium", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 520 + }, + { + "project": "chromium", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 337 + }, + { + "project": "chromium", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 291 + }, + { + "project": "chromium", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 322 + }, + { + "project": "chromium", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 251 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 2807 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 2536 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 2153 + }, + { + "project": "firefox", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 569 + }, + { + "project": "firefox", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 989, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "firefox", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 1062 + }, + { + "project": "firefox", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 755 + }, + { + "project": "firefox", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 742 + }, + { + "project": "firefox", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 643 + }, + { + "project": "firefox", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 694 + }, + { + "project": "firefox", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 642 + }, + { + "project": "firefox", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 575 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 2612 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 2817 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 2793 + }, + { + "project": "webkit", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 2296 + }, + { + "project": "webkit", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 4083, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "webkit", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 5110 + }, + { + "project": "webkit", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 2742 + }, + { + "project": "webkit", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 3432 + }, + { + "project": "webkit", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 2101 + }, + { + "project": "webkit", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 1818 + }, + { + "project": "webkit", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 1954 + }, + { + "project": "webkit", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 1610 + }, + { + "project": "chromium", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "status": "passed", + "durationMs": 197 + }, + { + "project": "chromium", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "status": "passed", + "durationMs": 228 + }, + { + "project": "chromium", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "status": "passed", + "durationMs": 216 + }, + { + "project": "chromium", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "status": "passed", + "durationMs": 206 + }, + { + "project": "chromium", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "status": "passed", + "durationMs": 209 + }, + { + "project": "chromium", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "status": "passed", + "durationMs": 293 + }, + { + "project": "chromium", + "title": "candidate: a failed body move restores style and keeps its original error", + "status": "passed", + "durationMs": 215 + }, + { + "project": "chromium", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "status": "passed", + "durationMs": 207 + }, + { + "project": "chromium", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "status": "passed", + "durationMs": 209 + }, + { + "project": "chromium", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 188 + }, + { + "project": "chromium", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 180 + }, + { + "project": "chromium", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 188 + }, + { + "project": "chromium", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 193 + }, + { + "project": "chromium", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 186 + }, + { + "project": "chromium", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 191 + }, + { + "project": "chromium", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 215 + }, + { + "project": "chromium", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 219 + }, + { + "project": "chromium", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 225 + }, + { + "project": "chromium", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 201 + }, + { + "project": "chromium", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 198 + }, + { + "project": "chromium", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 212 + }, + { + "project": "firefox", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "status": "passed", + "durationMs": 534 + }, + { + "project": "firefox", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "status": "passed", + "durationMs": 574 + }, + { + "project": "firefox", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "status": "passed", + "durationMs": 479 + }, + { + "project": "firefox", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "status": "passed", + "durationMs": 467 + }, + { + "project": "firefox", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "status": "passed", + "durationMs": 458 + }, + { + "project": "firefox", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "status": "passed", + "durationMs": 584 + }, + { + "project": "firefox", + "title": "candidate: a failed body move restores style and keeps its original error", + "status": "passed", + "durationMs": 495 + }, + { + "project": "firefox", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "status": "passed", + "durationMs": 478 + }, + { + "project": "firefox", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "status": "passed", + "durationMs": 540 + }, + { + "project": "firefox", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 584 + }, + { + "project": "firefox", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 480 + }, + { + "project": "firefox", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 683 + }, + { + "project": "firefox", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 558 + }, + { + "project": "firefox", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 751 + }, + { + "project": "firefox", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 1276 + }, + { + "project": "firefox", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 723 + }, + { + "project": "firefox", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 1401 + }, + { + "project": "firefox", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 1304 + }, + { + "project": "firefox", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 572 + }, + { + "project": "firefox", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 579 + }, + { + "project": "firefox", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 538 + }, + { + "project": "webkit", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=false", + "status": "passed", + "durationMs": 1487 + }, + { + "project": "webkit", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=false movedBeforeThrow=true", + "status": "passed", + "durationMs": 1493 + }, + { + "project": "webkit", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=false", + "status": "passed", + "durationMs": 1296 + }, + { + "project": "webkit", + "title": "candidate: failed destroy restoration cannot orphan the player removeHtml=true movedBeforeThrow=true", + "status": "passed", + "durationMs": 1436 + }, + { + "project": "webkit", + "title": "candidate: web fullscreen listener can exit without stale resize or overwritten restoration", + "status": "passed", + "durationMs": 1620 + }, + { + "project": "webkit", + "title": "candidate: web fullscreen listener destroy restores ownership without post-destroy resize", + "status": "passed", + "durationMs": 1274 + }, + { + "project": "webkit", + "title": "candidate: a failed body move restores style and keeps its original error", + "status": "passed", + "durationMs": 1381 + }, + { + "project": "webkit", + "title": "candidate: a failed web fullscreen exit can retry restoring the original placement", + "status": "passed", + "durationMs": 1540 + }, + { + "project": "webkit", + "title": "candidate: reentry during web fullscreen restoration preserves the newer active mode", + "status": "passed", + "durationMs": 1841 + }, + { + "project": "webkit", + "title": "published: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 1587 + }, + { + "project": "webkit", + "title": "published: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 1618 + }, + { + "project": "webkit", + "title": "published: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 1691 + }, + { + "project": "webkit", + "title": "published: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 1673 + }, + { + "project": "webkit", + "title": "published: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 1366 + }, + { + "project": "webkit", + "title": "published: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 1440 + }, + { + "project": "webkit", + "title": "candidate: web fullscreen restores initial style after repeated entry (empty)", + "status": "passed", + "durationMs": 1483 + }, + { + "project": "webkit", + "title": "candidate: web fullscreen restores initial style after repeated entry (width: 70%; height: 80%; color: red;)", + "status": "passed", + "durationMs": 1719 + }, + { + "project": "webkit", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=false", + "status": "passed", + "durationMs": 1412 + }, + { + "project": "webkit", + "title": "candidate: body fullscreen restores original parent and sibling when flag changes=true", + "status": "passed", + "durationMs": 1461 + }, + { + "project": "webkit", + "title": "candidate: destroy while web fullscreen removeHtml=false restores DOM ownership", + "status": "passed", + "durationMs": 1228 + }, + { + "project": "webkit", + "title": "candidate: destroy while web fullscreen removeHtml=true restores DOM ownership", + "status": "passed", + "durationMs": 1284 + }, + { + "project": "chromium", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 204 + }, + { + "project": "chromium", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 216 + }, + { + "project": "chromium", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 195 + }, + { + "project": "chromium", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 201 + }, + { + "project": "chromium", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "status": "passed", + "durationMs": 472 + }, + { + "project": "chromium", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 247 + }, + { + "project": "chromium", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 239 + }, + { + "project": "chromium", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 230 + }, + { + "project": "chromium", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "status": "passed", + "durationMs": 229 + }, + { + "project": "chromium", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 173 + }, + { + "project": "chromium", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 283 + }, + { + "project": "chromium", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 259 + }, + { + "project": "chromium", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 224 + }, + { + "project": "chromium", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 204 + }, + { + "project": "chromium", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 304 + }, + { + "project": "chromium", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 290 + }, + { + "project": "chromium", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 210 + }, + { + "project": "firefox", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 557 + }, + { + "project": "firefox", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 390 + }, + { + "project": "firefox", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 416 + }, + { + "project": "firefox", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 515 + }, + { + "project": "firefox", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "status": "passed", + "durationMs": 1174 + }, + { + "project": "firefox", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 538 + }, + { + "project": "firefox", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 537 + }, + { + "project": "firefox", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 434 + }, + { + "project": "firefox", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "status": "passed", + "durationMs": 577 + }, + { + "project": "firefox", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 451 + }, + { + "project": "firefox", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 572 + }, + { + "project": "firefox", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 511 + }, + { + "project": "firefox", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 442 + }, + { + "project": "firefox", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 546 + }, + { + "project": "firefox", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 821 + }, + { + "project": "firefox", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 704 + }, + { + "project": "firefox", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 704 + }, + { + "project": "webkit", + "title": "published: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 1248 + }, + { + "project": "webkit", + "title": "published: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 1453 + }, + { + "project": "webkit", + "title": "candidate: mobile keeps keyboard initialization opt-in through the existing init method", + "status": "passed", + "durationMs": 1281 + }, + { + "project": "webkit", + "title": "candidate: prototype-named hotkeys do not crash or replace the keys prototype", + "status": "passed", + "durationMs": 1289 + }, + { + "project": "webkit", + "title": "candidate: native keyboard play/pause, seek, volume and web-fullscreen Escape retain their behavior", + "status": "passed", + "durationMs": 2544 + }, + { + "project": "webkit", + "title": "candidate: inherited editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 1296 + }, + { + "project": "webkit", + "title": "candidate: plaintext editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 1268 + }, + { + "project": "webkit", + "title": "candidate: select editing and IME composition do not activate player shortcuts", + "status": "passed", + "durationMs": 1230 + }, + { + "project": "webkit", + "title": "candidate: destroying during a key callback stops remaining keys and notifications", + "status": "passed", + "durationMs": 1272 + }, + { + "project": "webkit", + "title": "published: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 1845 + }, + { + "project": "webkit", + "title": "published: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 2301 + }, + { + "project": "webkit", + "title": "published: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 1761 + }, + { + "project": "webkit", + "title": "published: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 1369 + }, + { + "project": "webkit", + "title": "candidate: hotkey registration retains chain, array identity, receiver and event order", + "status": "passed", + "durationMs": 1350 + }, + { + "project": "webkit", + "title": "candidate: rebound document input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 1877 + }, + { + "project": "webkit", + "title": "candidate: shadow-root input retains typing instead of triggering a hotkey", + "status": "passed", + "durationMs": 1492 + }, + { + "project": "webkit", + "title": "candidate: repeated hotkey init does not multiply the keyboard subscription", + "status": "passed", + "durationMs": 1083 + }, + { + "project": "chromium", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 320 + }, + { + "project": "chromium", + "title": "published: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 322 + }, + { + "project": "chromium", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 336 + }, + { + "project": "chromium", + "title": "candidate: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 411 + }, + { + "project": "firefox", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 617 + }, + { + "project": "firefox", + "title": "published: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 560 + }, + { + "project": "firefox", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 660 + }, + { + "project": "firefox", + "title": "candidate: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 754 + }, + { + "project": "webkit", + "title": "published: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 1284 + }, + { + "project": "webkit", + "title": "published: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 1062 + }, + { + "project": "webkit", + "title": "candidate: native setting keyboard and pointer actions retain range and switch callbacks", + "status": "passed", + "durationMs": 1264 + }, + { + "project": "webkit", + "title": "candidate: long setting labels leave native controls inside the row", + "status": "passed", + "durationMs": 1644 + }, + { + "project": "chromium", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "status": "passed", + "durationMs": 641 + }, + { + "project": "chromium", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "status": "passed", + "durationMs": 653 + }, + { + "project": "firefox", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "status": "passed", + "durationMs": 922 + }, + { + "project": "firefox", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "status": "passed", + "durationMs": 1114 + }, + { + "project": "webkit", + "title": "candidate: nested settings remain selectable with autoOrientation=false", + "status": "passed", + "durationMs": 1854 + }, + { + "project": "webkit", + "title": "candidate: nested settings remain selectable with autoOrientation=true", + "status": "passed", + "durationMs": 2146 + }, + { + "project": "chromium", + "title": "candidate: cached panel failure preserves navigation after failure", + "status": "passed", + "durationMs": 165 + }, + { + "project": "chromium", + "title": "candidate: cached panel failure preserves navigation after navigate", + "status": "passed", + "durationMs": 181 + }, + { + "project": "chromium", + "title": "candidate: cached panel failure preserves navigation after remove", + "status": "passed", + "durationMs": 182 + }, + { + "project": "chromium", + "title": "candidate: cached panel failure preserves navigation after destroy", + "status": "passed", + "durationMs": 173 + }, + { + "project": "chromium", + "title": "published: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 150 + }, + { + "project": "chromium", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 213 + }, + { + "project": "chromium", + "title": "candidate: a setting subtree can move to another instance after remove", + "status": "passed", + "durationMs": 197 + }, + { + "project": "chromium", + "title": "candidate: a setting subtree can move to another instance after destroy", + "status": "passed", + "durationMs": 185 + }, + { + "project": "firefox", + "title": "candidate: cached panel failure preserves navigation after failure", + "status": "passed", + "durationMs": 1427 + }, + { + "project": "firefox", + "title": "candidate: cached panel failure preserves navigation after navigate", + "status": "passed", + "durationMs": 465 + }, + { + "project": "firefox", + "title": "candidate: cached panel failure preserves navigation after remove", + "status": "passed", + "durationMs": 1188 + }, + { + "project": "firefox", + "title": "candidate: cached panel failure preserves navigation after destroy", + "status": "passed", + "durationMs": 1173 + }, + { + "project": "firefox", + "title": "published: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 385 + }, + { + "project": "firefox", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 413 + }, + { + "project": "firefox", + "title": "candidate: a setting subtree can move to another instance after remove", + "status": "passed", + "durationMs": 448 + }, + { + "project": "firefox", + "title": "candidate: a setting subtree can move to another instance after destroy", + "status": "passed", + "durationMs": 449 + }, + { + "project": "webkit", + "title": "candidate: cached panel failure preserves navigation after failure", + "status": "passed", + "durationMs": 494 + }, + { + "project": "webkit", + "title": "candidate: cached panel failure preserves navigation after navigate", + "status": "passed", + "durationMs": 484 + }, + { + "project": "webkit", + "title": "candidate: cached panel failure preserves navigation after remove", + "status": "passed", + "durationMs": 486 + }, + { + "project": "webkit", + "title": "candidate: cached panel failure preserves navigation after destroy", + "status": "passed", + "durationMs": 581 + }, + { + "project": "webkit", + "title": "published: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 512 + }, + { + "project": "webkit", + "title": "candidate: sharing an active setting has an explicit ownership baseline", + "status": "passed", + "durationMs": 550 + }, + { + "project": "webkit", + "title": "candidate: a setting subtree can move to another instance after remove", + "status": "passed", + "durationMs": 652 + }, + { + "project": "webkit", + "title": "candidate: a setting subtree can move to another instance after destroy", + "status": "passed", + "durationMs": 670 + }, + { + "project": "chromium", + "title": "candidate: setting update restores the original range row after assign failure", + "status": "passed", + "durationMs": 191 + }, + { + "project": "chromium", + "title": "candidate: setting update restores the original range row after format failure", + "status": "passed", + "durationMs": 216 + }, + { + "project": "chromium", + "title": "candidate: setting update restores the original range row after item failure", + "status": "passed", + "durationMs": 217 + }, + { + "project": "chromium", + "title": "candidate: setting update restores the original range row after render failure", + "status": "passed", + "durationMs": 204 + }, + { + "project": "chromium", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "status": "passed", + "durationMs": 186 + }, + { + "project": "chromium", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 190 + }, + { + "project": "chromium", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "status": "passed", + "durationMs": 180 + }, + { + "project": "chromium", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "status": "passed", + "durationMs": 178 + }, + { + "project": "chromium", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 186 + }, + { + "project": "chromium", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "status": "passed", + "durationMs": 186 + }, + { + "project": "chromium", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "status": "passed", + "durationMs": 183 + }, + { + "project": "chromium", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "status": "passed", + "durationMs": 177 + }, + { + "project": "chromium", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 200 + }, + { + "project": "chromium", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 188 + }, + { + "project": "chromium", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "status": "passed", + "durationMs": 186 + }, + { + "project": "chromium", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "status": "passed", + "durationMs": 178 + }, + { + "project": "firefox", + "title": "candidate: setting update restores the original range row after assign failure", + "status": "passed", + "durationMs": 415 + }, + { + "project": "firefox", + "title": "candidate: setting update restores the original range row after format failure", + "status": "passed", + "durationMs": 399 + }, + { + "project": "firefox", + "title": "candidate: setting update restores the original range row after item failure", + "status": "passed", + "durationMs": 415 + }, + { + "project": "firefox", + "title": "candidate: setting update restores the original range row after render failure", + "status": "passed", + "durationMs": 418 + }, + { + "project": "firefox", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "status": "passed", + "durationMs": 403 + }, + { + "project": "firefox", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 422 + }, + { + "project": "firefox", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "status": "passed", + "durationMs": 463 + }, + { + "project": "firefox", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "status": "passed", + "durationMs": 440 + }, + { + "project": "firefox", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 459 + }, + { + "project": "firefox", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "status": "passed", + "durationMs": 443 + }, + { + "project": "firefox", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "status": "passed", + "durationMs": 437 + }, + { + "project": "firefox", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "status": "passed", + "durationMs": 443 + }, + { + "project": "firefox", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 419 + }, + { + "project": "firefox", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 428 + }, + { + "project": "firefox", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "status": "passed", + "durationMs": 414 + }, + { + "project": "firefox", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "status": "passed", + "durationMs": 414 + }, + { + "project": "webkit", + "title": "candidate: setting update restores the original range row after assign failure", + "status": "passed", + "durationMs": 660 + }, + { + "project": "webkit", + "title": "candidate: setting update restores the original range row after format failure", + "status": "passed", + "durationMs": 536 + }, + { + "project": "webkit", + "title": "candidate: setting update restores the original range row after item failure", + "status": "passed", + "durationMs": 624 + }, + { + "project": "webkit", + "title": "candidate: setting update restores the original range row after render failure", + "status": "passed", + "durationMs": 549 + }, + { + "project": "webkit", + "title": "candidate: failed switch updates restore the original closure and displayed icon", + "status": "passed", + "durationMs": 525 + }, + { + "project": "webkit", + "title": "candidate: reentrant update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 557 + }, + { + "project": "webkit", + "title": "candidate: reentrant remove supersedes an unfinished setting update", + "status": "passed", + "durationMs": 550 + }, + { + "project": "webkit", + "title": "candidate: reentrant destroy supersedes an unfinished setting update", + "status": "passed", + "durationMs": 552 + }, + { + "project": "webkit", + "title": "candidate: reentrant child-update supersedes an unfinished setting update", + "status": "passed", + "durationMs": 547 + }, + { + "project": "webkit", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=false", + "status": "passed", + "durationMs": 616 + }, + { + "project": "webkit", + "title": "candidate: reentry inside a render getter retains the winning row with throwing=true", + "status": "passed", + "durationMs": 534 + }, + { + "project": "webkit", + "title": "candidate: removing an ancestor cancels its pending descendant update", + "status": "passed", + "durationMs": 536 + }, + { + "project": "webkit", + "title": "candidate: a reentrant switch getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 520 + }, + { + "project": "webkit", + "title": "candidate: a reentrant range getter cannot replace the winning control handles", + "status": "passed", + "durationMs": 520 + }, + { + "project": "webkit", + "title": "candidate: a failed outer add preserves a reentrant add of the same object", + "status": "passed", + "durationMs": 515 + }, + { + "project": "webkit", + "title": "candidate: a failed outer add preserves a reentrant update of the same object", + "status": "passed", + "durationMs": 516 + }, + { + "project": "chromium", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 193 + }, + { + "project": "chromium", + "title": "published: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 161 + }, + { + "project": "chromium", + "title": "published: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 154 + }, + { + "project": "chromium", + "title": "published: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 158 + }, + { + "project": "chromium", + "title": "published: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 151 + }, + { + "project": "chromium", + "title": "published: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 199 + }, + { + "project": "chromium", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 802 + }, + { + "project": "chromium", + "title": "published: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 159 + }, + { + "project": "chromium", + "title": "published: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 243 + }, + { + "project": "chromium", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 146 + }, + { + "project": "chromium", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 175 + }, + { + "project": "chromium", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 170 + }, + { + "project": "chromium", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 187 + }, + { + "project": "chromium", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 165 + }, + { + "project": "chromium", + "title": "candidate: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 165 + }, + { + "project": "chromium", + "title": "candidate: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 202 + }, + { + "project": "chromium", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 973 + }, + { + "project": "chromium", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 185 + }, + { + "project": "chromium", + "title": "candidate: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 271 + }, + { + "project": "chromium", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 168 + }, + { + "project": "chromium", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "status": "passed", + "durationMs": 1211 + }, + { + "project": "chromium", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "status": "passed", + "durationMs": 1207 + }, + { + "project": "chromium", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "status": "passed", + "durationMs": 190 + }, + { + "project": "chromium", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "status": "passed", + "durationMs": 165 + }, + { + "project": "chromium", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 196 + }, + { + "project": "chromium", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 228 + }, + { + "project": "chromium", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 234 + }, + { + "project": "chromium", + "title": "candidate: panel creation stops after reentrant remove", + "status": "passed", + "durationMs": 200 + }, + { + "project": "chromium", + "title": "candidate: panel creation stops after reentrant destroy", + "status": "passed", + "durationMs": 190 + }, + { + "project": "firefox", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 376 + }, + { + "project": "firefox", + "title": "published: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 383 + }, + { + "project": "firefox", + "title": "published: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 406 + }, + { + "project": "firefox", + "title": "published: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 384 + }, + { + "project": "firefox", + "title": "published: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 412 + }, + { + "project": "firefox", + "title": "published: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 447 + }, + { + "project": "firefox", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 1719 + }, + { + "project": "firefox", + "title": "published: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 445 + }, + { + "project": "firefox", + "title": "published: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 1365 + }, + { + "project": "firefox", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 1161 + }, + { + "project": "firefox", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 422 + }, + { + "project": "firefox", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 419 + }, + { + "project": "firefox", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 435 + }, + { + "project": "firefox", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 618 + }, + { + "project": "firefox", + "title": "candidate: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 609 + }, + { + "project": "firefox", + "title": "candidate: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 623 + }, + { + "project": "firefox", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 1166 + }, + { + "project": "firefox", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 644 + }, + { + "project": "firefox", + "title": "candidate: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 731 + }, + { + "project": "firefox", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 623 + }, + { + "project": "firefox", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "status": "passed", + "durationMs": 1161 + }, + { + "project": "firefox", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "status": "passed", + "durationMs": 1691 + }, + { + "project": "firefox", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "status": "passed", + "durationMs": 579 + }, + { + "project": "firefox", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "status": "passed", + "durationMs": 604 + }, + { + "project": "firefox", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 677 + }, + { + "project": "firefox", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 661 + }, + { + "project": "firefox", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 616 + }, + { + "project": "firefox", + "title": "candidate: panel creation stops after reentrant remove", + "status": "passed", + "durationMs": 667 + }, + { + "project": "firefox", + "title": "candidate: panel creation stops after reentrant destroy", + "status": "passed", + "durationMs": 645 + }, + { + "project": "webkit", + "title": "published: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 541 + }, + { + "project": "webkit", + "title": "published: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 521 + }, + { + "project": "webkit", + "title": "published: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 484 + }, + { + "project": "webkit", + "title": "published: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 524 + }, + { + "project": "webkit", + "title": "published: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 550 + }, + { + "project": "webkit", + "title": "published: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 701 + }, + { + "project": "webkit", + "title": "published: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 2008 + }, + { + "project": "webkit", + "title": "published: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 488 + }, + { + "project": "webkit", + "title": "published: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 894 + }, + { + "project": "webkit", + "title": "published: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 429 + }, + { + "project": "webkit", + "title": "candidate: builtin setting subscriptions are replaced and removed with their row", + "status": "passed", + "durationMs": 508 + }, + { + "project": "webkit", + "title": "candidate: deferred setting mounts belong to the rendered item generation", + "status": "passed", + "durationMs": 503 + }, + { + "project": "webkit", + "title": "candidate: removed setting subtrees release child listeners and cached panels", + "status": "passed", + "durationMs": 447 + }, + { + "project": "webkit", + "title": "candidate: setting button results cannot overwrite an updated or newer item", + "status": "passed", + "durationMs": 483 + }, + { + "project": "webkit", + "title": "candidate: sibling setting selections share the parent result generation", + "status": "passed", + "durationMs": 500 + }, + { + "project": "webkit", + "title": "candidate: setting callback rejection retains its original failure identity", + "status": "passed", + "durationMs": 598 + }, + { + "project": "webkit", + "title": "candidate: a wide nested setting panel fits the narrow player and remains selectable", + "status": "passed", + "durationMs": 2070 + }, + { + "project": "webkit", + "title": "candidate: setting registry retains item returns and hidden tree bindings", + "status": "passed", + "durationMs": 463 + }, + { + "project": "webkit", + "title": "candidate: moved setting items bind to their current parent and panel", + "status": "passed", + "durationMs": 962 + }, + { + "project": "webkit", + "title": "candidate: automatic setting names and explicit nested names have an explicit baseline", + "status": "passed", + "durationMs": 395 + }, + { + "project": "webkit", + "title": "candidate: open settings follow container and control height changes with fallback=false", + "status": "passed", + "durationMs": 1067 + }, + { + "project": "webkit", + "title": "candidate: open settings follow container and control height changes with fallback=true", + "status": "passed", + "durationMs": 1602 + }, + { + "project": "webkit", + "title": "candidate: failed setting additions leave existing rows usable and allow retry", + "status": "passed", + "durationMs": 485 + }, + { + "project": "webkit", + "title": "candidate: setting removal finishes DOM cleanup when the event-removal hook throws", + "status": "passed", + "durationMs": 443 + }, + { + "project": "webkit", + "title": "candidate: failed header rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 506 + }, + { + "project": "webkit", + "title": "candidate: failed item rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 473 + }, + { + "project": "webkit", + "title": "candidate: failed layout rendering releases its panel and restores reusable inputs", + "status": "passed", + "durationMs": 475 + }, + { + "project": "webkit", + "title": "candidate: panel creation stops after reentrant remove", + "status": "passed", + "durationMs": 493 + }, + { + "project": "webkit", + "title": "candidate: panel creation stops after reentrant destroy", + "status": "passed", + "durationMs": 421 + } + ] + }, + "installedModern": { + "path": "refactor/.cache/core22-setting-modern.json", + "sha256": "19b5b07fb2a2753c6d6677e8e820a54a9d2e2feda3efb6289d5dee1516aea5cc", + "stats": { + "startTime": "2026-09-11T14:39:20.224Z", + "duration": 15718.444, + "expected": 36, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 394 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 388 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 387 + }, + { + "project": "chromium", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 261 + }, + { + "project": "chromium", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 523, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "chromium", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 615 + }, + { + "project": "chromium", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 350 + }, + { + "project": "chromium", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 491 + }, + { + "project": "chromium", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 311 + }, + { + "project": "chromium", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 258 + }, + { + "project": "chromium", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 298 + }, + { + "project": "chromium", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 239 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 2254 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 2140 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 2003 + }, + { + "project": "firefox", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 476 + }, + { + "project": "firefox", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 779, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "firefox", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 878 + }, + { + "project": "firefox", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 648 + }, + { + "project": "firefox", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 790 + }, + { + "project": "firefox", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 584 + }, + { + "project": "firefox", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 639 + }, + { + "project": "firefox", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 624 + }, + { + "project": "firefox", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 453 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 1276 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 1393 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 1337 + }, + { + "project": "webkit", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 1193 + }, + { + "project": "webkit", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 2001, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "webkit", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 2632 + }, + { + "project": "webkit", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 1570 + }, + { + "project": "webkit", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 2028 + }, + { + "project": "webkit", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 1290 + }, + { + "project": "webkit", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 1131 + }, + { + "project": "webkit", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 1263 + }, + { + "project": "webkit", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 1085 + } + ] + }, + "installedLegacy": { + "path": "refactor/.cache/core22-setting-legacy.json", + "sha256": "13391484ec3fcb0bfea00eaec279edbc61cf6edc006c565447604d8ccb13284a", + "stats": { + "startTime": "2026-09-11T14:39:36.742Z", + "duration": 15903.065, + "expected": 36, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "environments": { + "chromium": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "firefox": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + }, + "webkit": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.legacy.js" + }, + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "bytes": 212211, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.legacy.js" + }, + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "bytes": 5153, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + } + } + }, + "tests": [ + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 409 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 392 + }, + { + "project": "chromium", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 393 + }, + { + "project": "chromium", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 275 + }, + { + "project": "chromium", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 541, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "chromium", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 635 + }, + { + "project": "chromium", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 366 + }, + { + "project": "chromium", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 507 + }, + { + "project": "chromium", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 311 + }, + { + "project": "chromium", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 288 + }, + { + "project": "chromium", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 293 + }, + { + "project": "chromium", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 220 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 1839 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 1996 + }, + { + "project": "firefox", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 2095 + }, + { + "project": "firefox", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 727 + }, + { + "project": "firefox", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 1083, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "firefox", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 1070 + }, + { + "project": "firefox", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 942 + }, + { + "project": "firefox", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 688 + }, + { + "project": "firefox", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 637 + }, + { + "project": "firefox", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 651 + }, + { + "project": "firefox", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 676 + }, + { + "project": "firefox", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 618 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is removed", + "status": "passed", + "durationMs": 1449 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is hidden", + "status": "passed", + "durationMs": 1390 + }, + { + "project": "webkit", + "title": "candidate: setting exit falls back to the player when its button is disabled", + "status": "passed", + "durationMs": 1688 + }, + { + "project": "webkit", + "title": "candidate: setting navigation ignores hidden rows and inert descendants", + "status": "passed", + "durationMs": 1316 + }, + { + "project": "webkit", + "title": "candidate: long setting panels observe live button availability on every navigation", + "status": "passed", + "durationMs": 2010, + "navigationWork": [ + { + "key": "ArrowDown", + "expected": 1, + "queries": 1, + "styles": 41 + }, + { + "key": "ArrowDown", + "expected": 6, + "queries": 1, + "styles": 38 + }, + { + "key": "a", + "expected": 6, + "queries": 0, + "styles": 0 + }, + { + "key": "End", + "expected": 39, + "queries": 1, + "styles": 38 + }, + { + "key": "Home", + "expected": 0, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 2, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 3, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 4, + "queries": 1, + "styles": 40 + }, + { + "key": "ArrowDown", + "expected": 5, + "queries": 1, + "styles": 40 + } + ] + }, + { + "project": "webkit", + "title": "candidate: setting keyboard enters nested panels and returns to the originating item", + "status": "passed", + "durationMs": 2788 + }, + { + "project": "webkit", + "title": "candidate: setting switches and native ranges keep callbacks and avoid player shortcuts", + "status": "passed", + "durationMs": 1556 + }, + { + "project": "webkit", + "title": "candidate: setting Tab leaves without trapping focus and pointer opening keeps its old focus path", + "status": "passed", + "durationMs": 1866 + }, + { + "project": "webkit", + "title": "candidate: setting update, failed replacement and removal recover visible focus", + "status": "passed", + "durationMs": 1300 + }, + { + "project": "webkit", + "title": "candidate: suspended settings ignore keyboard callbacks and restored items resume", + "status": "passed", + "durationMs": 1175 + }, + { + "project": "webkit", + "title": "candidate: native setting buttons retain their role, click path and keyboard navigation", + "status": "passed", + "durationMs": 1183 + }, + { + "project": "webkit", + "title": "candidate: destroying during moved focus restoration cancels fullscreen notifications", + "status": "passed", + "durationMs": 1139 + } + ] + }, + "ci": { + "counts": [ + 440, + 11, + 25 + ], + "productionTS": 249, + "total": 476 + }, + "package": { + "directory": "refactor/.cache/packages/run-UElxNR", + "reportSHA256": "4f7df518c352d0c8e7b66cca9647a64f75dc631844c4cea9398b6841b4b8857f", + "runtime": 34, + "legacyTypes": 5, + "preciseTypes": 8, + "knownTypeBlockers": 0, + "verified": [ + { + "file": "packages/artplayer/dist/artplayer.cts", + "sha256": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7" + }, + { + "file": "packages/artplayer/dist/artplayer.js", + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f" + }, + { + "file": "packages/artplayer/dist/artplayer.legacy.js", + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39" + }, + { + "file": "packages/artplayer/dist/artplayer.mjs", + "sha256": "92e4d16a85ae94ac83b2b8a5c16c65c09e7adec4e0a0c4bbc14112ff6fc59331" + }, + { + "file": "packages/artplayer/dist/artplayer.mts", + "sha256": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313" + }, + { + "file": "packages/artplayer/dist/artplayer.ts", + "sha256": "26a42ac66811e70f68a8ebe62cbf304eb1993451b3e658961be98e7106162527" + }, + { + "file": "packages/artplayer/dist/component.ts", + "sha256": "aa1c43be67322781b4b355b143bc69d9f29d22e578e4974d6a13e957a7c0334f" + }, + { + "file": "packages/artplayer/dist/config.ts", + "sha256": "c4fd8681bf32b10c743e3e561c532520c8f32e43fd765524850b15e55cb91c72" + }, + { + "file": "packages/artplayer/dist/cssVar.ts", + "sha256": "e027d82fb4f01c9ce7559cf679b2d5ee1962d3f7e5b4dd64ca21f472b933efb6" + }, + { + "file": "packages/artplayer/dist/emitter.ts", + "sha256": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537" + }, + { + "file": "packages/artplayer/dist/events.ts", + "sha256": "af191f862af4ec8933b09113b8c074603ae254a8b70460d0f3006646cd74ae42" + }, + { + "file": "packages/artplayer/dist/i18n.ts", + "sha256": "34b0c684668044f7600c80b9d3979f8fb730138007b7cb4e7034326b340156fb" + }, + { + "file": "packages/artplayer/dist/i18n/ar.js", + "sha256": "bd0bef65f4f7dc3f8ed562904cc6fa9071ff4537fb64c1e0fc3d554141bcd3cb" + }, + { + "file": "packages/artplayer/dist/i18n/ar.mjs", + "sha256": "59310b7bbeea83bbb7d73aadc5ca82a6ec269c3530d19aa741c94d5c64fc5da8" + }, + { + "file": "packages/artplayer/dist/i18n/cs.js", + "sha256": "6e2c93daba24c2e48dfa206bcf4f2f2a8a02713b856e404d2e4e4ecd8309ca2f" + }, + { + "file": "packages/artplayer/dist/i18n/cs.mjs", + "sha256": "c73fba18797d62d7b2581e67fe7340c35fe84510b2250ff1ecaad253d9cabbac" + }, + { + "file": "packages/artplayer/dist/i18n/es.js", + "sha256": "f4133ac6ea06b69a474b33c4a1809a4066e2376bb9464a3f3aa8330f01f1944a" + }, + { + "file": "packages/artplayer/dist/i18n/es.mjs", + "sha256": "1390bca3def2be115e811de337df0a0c3f63998e51359f283023246245c552a7" + }, + { + "file": "packages/artplayer/dist/i18n/fa.js", + "sha256": "8d3ef2e0f0cc0ea480c2167b6fcb87cdf444e90759c3519e8daa139fec576da4" + }, + { + "file": "packages/artplayer/dist/i18n/fa.mjs", + "sha256": "ab441e8a2d79043b29ceca87c783bf06874bb9d3a149c1604bc167eb481be2a9" + }, + { + "file": "packages/artplayer/dist/i18n/fr.js", + "sha256": "89dc4194a6c0a962b9ce756b52c90401c1acf3b159f265f3bc0d7d6d7d987f03" + }, + { + "file": "packages/artplayer/dist/i18n/fr.mjs", + "sha256": "99491878430fb7b6f2b7bf93da0588a831704b412e01116f23ba1d9d45863816" + }, + { + "file": "packages/artplayer/dist/i18n/id.js", + "sha256": "4c6dc86db741bcc2857df55a9d037e82e91d375fa6fd22e0562809ff621b92db" + }, + { + "file": "packages/artplayer/dist/i18n/id.mjs", + "sha256": "383e5803a6b6686c6de4e867770241de75b6f517dcca2bdedc6f2004bf6e1fb3" + }, + { + "file": "packages/artplayer/dist/i18n/pl.js", + "sha256": "3a38828b1c3d719c0aca9906cf6a46c23555a8411f8d57645f0e0ce8147dc664" + }, + { + "file": "packages/artplayer/dist/i18n/pl.mjs", + "sha256": "079ed96732979035297af387c64a7b99519b5a43107fb86735a654ea4fe8e9b5" + }, + { + "file": "packages/artplayer/dist/i18n/ru.js", + "sha256": "62fac9dddb302eb16382e6e9301fc4b2c66f5f69d4a358a26b67026a5fa4e787" + }, + { + "file": "packages/artplayer/dist/i18n/ru.mjs", + "sha256": "a893aeaee1d79409db72e324fbff200e3864f33ed168f04d91d25f7cf2efa765" + }, + { + "file": "packages/artplayer/dist/i18n/tr.js", + "sha256": "1492c36b069a7d73db4f3913bd18085faff7afd8b3c158138fe264e31600e38c" + }, + { + "file": "packages/artplayer/dist/i18n/tr.mjs", + "sha256": "a90478cac078836b76c2a98261907610fee07f3e4b28671b8e7dbf533778f918" + }, + { + "file": "packages/artplayer/dist/i18n/vi.js", + "sha256": "c7216ef7e608a79b7e2c479a07bf310d4ab79577947ac4a62d676faaced0e9cf" + }, + { + "file": "packages/artplayer/dist/i18n/vi.mjs", + "sha256": "66270fdfa0b5da396322d1769169b7df37a030ba15ac18eb30bd87b3af8074ec" + }, + { + "file": "packages/artplayer/dist/i18n/zh-tw.js", + "sha256": "11c49857d6d40a5ffd224ffa59c9026e71621b345f63c5a086326db80a22371a" + }, + { + "file": "packages/artplayer/dist/i18n/zh-tw.mjs", + "sha256": "a38e630cb96de96c15d824686aec750e25cf6c8ada01285a292442a81566314f" + }, + { + "file": "packages/artplayer/dist/icons.ts", + "sha256": "0d8e8e52e52130dd4a29bab551dd7a2a954797e42e92a6e068c85d583e23e6a4" + }, + { + "file": "packages/artplayer/dist/language.cts", + "sha256": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120" + }, + { + "file": "packages/artplayer/dist/language.mts", + "sha256": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f" + }, + { + "file": "packages/artplayer/dist/legacy/language.ts", + "sha256": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3" + }, + { + "file": "packages/artplayer/dist/option.ts", + "sha256": "850e5264219b8b438c80694402225b690b131786677a5da0d22739ec2352d263" + }, + { + "file": "packages/artplayer/dist/playback.ts", + "sha256": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5" + }, + { + "file": "packages/artplayer/dist/player.ts", + "sha256": "f1e50257df2ea592d0a0e1f36078dda77eaf2cf3b3d795307501396562d99f28" + }, + { + "file": "packages/artplayer/dist/plugin.ts", + "sha256": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35" + }, + { + "file": "packages/artplayer/dist/quality.ts", + "sha256": "7ed6ed78cea52991b2f6ddd2bd3b7bd8c5146fdfff7486fe8b814c3e632f1567" + }, + { + "file": "packages/artplayer/dist/runtime.cts", + "sha256": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652" + }, + { + "file": "packages/artplayer/dist/runtime.mts", + "sha256": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03" + }, + { + "file": "packages/artplayer/dist/runtime.ts", + "sha256": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b" + }, + { + "file": "packages/artplayer/dist/runtime/component.ts", + "sha256": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39" + }, + { + "file": "packages/artplayer/dist/runtime/construction.ts", + "sha256": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee" + }, + { + "file": "packages/artplayer/dist/runtime/events.ts", + "sha256": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe" + }, + { + "file": "packages/artplayer/dist/runtime/media.ts", + "sha256": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3" + }, + { + "file": "packages/artplayer/dist/runtime/option.ts", + "sha256": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce" + }, + { + "file": "packages/artplayer/dist/runtime/player.ts", + "sha256": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb" + }, + { + "file": "packages/artplayer/dist/runtime/plugin.ts", + "sha256": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9" + }, + { + "file": "packages/artplayer/dist/runtime/services.ts", + "sha256": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254" + }, + { + "file": "packages/artplayer/dist/runtime/setting.ts", + "sha256": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218" + }, + { + "file": "packages/artplayer/dist/runtime/subtitle.ts", + "sha256": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e" + }, + { + "file": "packages/artplayer/dist/runtime/template.ts", + "sha256": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1" + }, + { + "file": "packages/artplayer/dist/runtime/utils.ts", + "sha256": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916" + }, + { + "file": "packages/artplayer/dist/setting.ts", + "sha256": "d12a75b656fff70cbb30be4bffec46d9c4273636e8722bce971a4d2b188712a1" + }, + { + "file": "packages/artplayer/dist/subtitle.ts", + "sha256": "d25b470e47d6a9bd696d9c1ad8adb58e56a208f05695186d513bc8c43c2e8acf" + }, + { + "file": "packages/artplayer/dist/template.ts", + "sha256": "68aed9e97d006d6be4fabb8504ca84dafab770b0925f4d6e7319e67c82f21b0d" + }, + { + "file": "packages/artplayer/dist/utils.ts", + "sha256": "494ec447ab467a07ddd7a2c2abf778b3fce69fd28a09aaa8ced9759f8de2e3f6" + }, + { + "file": "packages/artplayer/types/COMPATIBILITY.md", + "sha256": "a7da9e102a116104b513df4f7451247b7759bc502d3375f30bd5b14a541826e0" + }, + { + "file": "packages/artplayer/types/README.md", + "sha256": "1bd9868e773610e6312fd48a1c5aa20772d29df0af40c3db66e75b7ab4a1aee0" + }, + { + "file": "packages/artplayer/types/artplayer.d.cts", + "sha256": "3685065e4263abcfd9d953176e461d5b3eb990b0363b54689a7f55deba770fef" + }, + { + "file": "packages/artplayer/types/artplayer.d.mts", + "sha256": "b664fec51ee5c5381f2ceab25d99d52aee56feab04a2ee7b4ea5b2145ea5fa0e" + }, + { + "file": "packages/artplayer/types/artplayer.d.ts", + "sha256": "5d0162adf7ac6d0f2bb9b5cfe361f28657c4d9c540cadbf36eba3cc954ce50f8" + }, + { + "file": "packages/artplayer/types/component.d.ts", + "sha256": "ae5bc1ddeaa1ee1ebbc62573e32423993727079205c64751a5a314170e588a32" + }, + { + "file": "packages/artplayer/types/config.d.ts", + "sha256": "36f9a84cd436f17701a0d11d3417fc1fe0414e0c52c80083b94a85dfc329e37e" + }, + { + "file": "packages/artplayer/types/cssVar.d.ts", + "sha256": "93217860fff2ebf750f606d95ddd22220a58837119e63bdf2f5f78fd7488458b" + }, + { + "file": "packages/artplayer/types/emitter.d.ts", + "sha256": "7e1f9a2a8ce65feb95734f1ed52d1334e57aa388bbef2a43d8bc53a9b6f6623c" + }, + { + "file": "packages/artplayer/types/events.d.ts", + "sha256": "f83624c9268a284477e8bd793fe3562a2363b72f2a44d5c64fe8c6a6cede8830" + }, + { + "file": "packages/artplayer/types/i18n.d.ts", + "sha256": "f4f2f05bdfda73c74fef34767cb18ee8e11b743120b1c4598e9714d7846018e5" + }, + { + "file": "packages/artplayer/types/icons.d.ts", + "sha256": "326a67ba7bdcf52862c5b2a269e540140aff98d05c7b96196485a77f84fe5960" + }, + { + "file": "packages/artplayer/types/language.d.cts", + "sha256": "f7928e108cf7b7814c2d75cb0a525333e95873fca6cd6d89a740450656b9c1cd" + }, + { + "file": "packages/artplayer/types/language.d.mts", + "sha256": "6619a26d604b7cccbe2f596243d87ae37cfaae33b8b52874ec071d9787446f9e" + }, + { + "file": "packages/artplayer/types/legacy/language.d.ts", + "sha256": "c7abda4d506fd933c350e9030290bf9e64347a921d683a66115da1995ebe0a81" + }, + { + "file": "packages/artplayer/types/option.d.ts", + "sha256": "ccf2c8ddc537dc65c9682d39f044726e23bff18f476b622512d7e6a4b949b5f6" + }, + { + "file": "packages/artplayer/types/playback.d.ts", + "sha256": "58705c273df6e76a77a6575e769a9ec6c013785c25080f2551aa22415788d870" + }, + { + "file": "packages/artplayer/types/player.d.ts", + "sha256": "92b00211b70ac71336e495899df972a0519dd138111846044fe4e0f967966177" + }, + { + "file": "packages/artplayer/types/plugin.d.ts", + "sha256": "fc3594a41c51d8248713e33c486fb1f6a518ac5c7ce31be6988a6cd8d052c5f3" + }, + { + "file": "packages/artplayer/types/quality.d.ts", + "sha256": "1ac1a48b4f74ff9ba1ce60443e1463d50d1c6a2e5d87d63dc7d2a8eb7f4c2c34" + }, + { + "file": "packages/artplayer/types/runtime.d.cts", + "sha256": "7ee988dfea9a0ac71a34a656f96f7b74e78aa92547cfdfab7ff7e1139a77d4a3" + }, + { + "file": "packages/artplayer/types/runtime.d.mts", + "sha256": "dcb85f59a8b7714918ced0c1d18c2bb24e8b80b56d8c594e019dcbdb5ad88b08" + }, + { + "file": "packages/artplayer/types/runtime.d.ts", + "sha256": "9c6ccd39a1be293f17ae46dae8ea077053e12635ee79d73a5e3b3a559230fcff" + }, + { + "file": "packages/artplayer/types/runtime/component.d.ts", + "sha256": "1b4c0cee44568649e80140fe778febfcae88af0ac85515f1cbeff78ab0c6d14f" + }, + { + "file": "packages/artplayer/types/runtime/construction.d.ts", + "sha256": "7a87bedf6f7ffff0c46078aa5f1551e0077d35574e286516121f5f935e2d9ce4" + }, + { + "file": "packages/artplayer/types/runtime/events.d.ts", + "sha256": "a1e2f9d387475453eaf95c2a5ee79e228636c0bb859bda3fcc46da46574a0c31" + }, + { + "file": "packages/artplayer/types/runtime/media.d.ts", + "sha256": "8fc89401be7fe25542c169d07dd5675f10916ed20be8493e19695966cf3864a8" + }, + { + "file": "packages/artplayer/types/runtime/option.d.ts", + "sha256": "6e334e1a76fdcc40b4665c02523bd31c3994d96078fadeb40e23422aa54c1a1d" + }, + { + "file": "packages/artplayer/types/runtime/player.d.ts", + "sha256": "8ac6383502e4872e83659838844856903031a81a0adc8e8535feb78453aa042c" + }, + { + "file": "packages/artplayer/types/runtime/plugin.d.ts", + "sha256": "8528f2b17843149f42f9cc16d6fd70baa238c9dc2c329b67d2c38096799c69bd" + }, + { + "file": "packages/artplayer/types/runtime/services.d.ts", + "sha256": "604c9f8e4b6c0da818f96576bf9f4b0e96085a9003927b2f7ba30027b1ba237e" + }, + { + "file": "packages/artplayer/types/runtime/setting.d.ts", + "sha256": "349c1fcb205ad312916bd3ee55e6bf241ea8a569fb2ab6c80822e69fc518f7d7" + }, + { + "file": "packages/artplayer/types/runtime/subtitle.d.ts", + "sha256": "269ff84678d327b3a9dc2f5bc6cc0d731d1e081b85422e474621d5d792efb153" + }, + { + "file": "packages/artplayer/types/runtime/template.d.ts", + "sha256": "7a62f968a38b4bf9109a4439557c02074eb1d62ba1f6e21a8eb194e91f0badfe" + }, + { + "file": "packages/artplayer/types/runtime/utils.d.ts", + "sha256": "6bf731705d86853e066dbaf3b8d4003b6548423fe615b7412b722bd0d3a6e48b" + }, + { + "file": "packages/artplayer/types/setting.d.ts", + "sha256": "08305a75dff96f06490430e099338b463df471b550c1d0dac3abc8995b39eb09" + }, + { + "file": "packages/artplayer/types/subtitle.d.ts", + "sha256": "b18314e2d64efdb6045830b6e12f615ae2ed585416130e562329ad3ea337f6ce" + }, + { + "file": "packages/artplayer/types/template.d.ts", + "sha256": "4792bc0c2cbcb7966e4375118bd34b326166e0831862e94ace4cf6b1bbe6a8c8" + }, + { + "file": "packages/artplayer/types/utils.d.ts", + "sha256": "fca0d3d814df94a25f9eb067c86fa0cf272e2791bac793b91229d57680797712" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.legacy.js", + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359" + }, + { + "file": "packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.mjs", + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.cts", + "sha256": "4f07514b37453cd6cea8e5aa28fa018ff31738e0d423c11a3b5eccd50ed30bcc" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.mts", + "sha256": "610179754db36276e161a07bccf4eaba8b4480f053e716a2bcc5a1574871a171" + }, + { + "file": "packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts", + "sha256": "581aa2862e709601c87a23585f54a969ebd350be56a7469a31ff53f1311b578d" + } + ] + }, + "formats": [ + { + "name": "artplayer.js", + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "before": { + "raw": 207875, + "gzip9": 58374 + }, + "after": { + "raw": 208030, + "gzip9": 58429 + } + }, + { + "name": "artplayer.legacy.js", + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "before": { + "raw": 212058, + "gzip9": 59650 + }, + "after": { + "raw": 212211, + "gzip9": 59683 + } + }, + { + "name": "artplayer.mjs", + "sha256": "92e4d16a85ae94ac83b2b8a5c16c65c09e7adec4e0a0c4bbc14112ff6fc59331", + "before": { + "raw": 361126, + "gzip9": 77074 + }, + "after": { + "raw": 361484, + "gzip9": 77137 + } + } + ], + "performance": [ + { + "path": "refactor/.cache/performance/run-chromium-3jgwTU/report.json", + "sha256": "87637b0523391fa7baa887deee3ac616506a810ff4bc751127322c1db8ad327a", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T14:35:33.302Z", + "environment": { + "browser": "chromium", + "version": "153.0.8010.12", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "archiveSha256": "a0e5ab74354f9da6f62dac8bc070e6e50c5abeb11d98fe85c1509deae797b932", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "b5134a9d0cb5ad128b1fb229dce79a306b944f750d8620e224a99f5791e6cab5", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "6d59d815ae036e6ffe833f1fab5e1996afff48d9122511783bfddd37f79b107c", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "raw": 208030, + "gzip9": 58429, + "brotli6": 53361 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 73993, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22943, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20828, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "raw": 212211, + "gzip9": 59683, + "brotli6": 54404 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76463, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23662, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21359, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "92e4d16a85ae94ac83b2b8a5c16c65c09e7adec4e0a0c4bbc14112ff6fc59331", + "raw": 361484, + "gzip9": 77137, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152658, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33269, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7.0999999940395355, + "readyMs": 29.099999994039536, + "playResolvedMs": 4.700000017881393, + "playbackObservedMs": 248.80000001192093, + "mediaProgress": 0.163091, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2.0999999940395355, + "readyMs": 17.099999994039536, + "playResolvedMs": 1, + "playbackObservedMs": 215.09999999403954, + "mediaProgress": 0.16191, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2.5999999940395355, + "readyMs": 15.5, + "playResolvedMs": 1.2999999821186066, + "playbackObservedMs": 215.5, + "mediaProgress": 0.162476, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1.699999988079071, + "readyMs": 17.299999982118607, + "playResolvedMs": 1.300000011920929, + "playbackObservedMs": 215.60000002384186, + "mediaProgress": 0.16142, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.5999999940395355, + "readyMs": 14.300000011920929, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 218, + "mediaProgress": 0.165492, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.899999976158142, + "readyMs": 14.399999976158142, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.5, + "mediaProgress": 0.162479, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1.5, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 217.40000000596046, + "mediaProgress": 0.164379, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.0999999940395355, + "readyMs": 14.900000005960464, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.7999999821186, + "mediaProgress": 0.163425, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 16.600000023841858, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 215.59999999403954, + "mediaProgress": 0.162577, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.7000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.4000000059604645, + "readyMs": 16.299999982118607, + "playResolvedMs": 1.100000023841858, + "playbackObservedMs": 216, + "mediaProgress": 0.162025, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.0999999940395355, + "readyMs": 15.900000005960464, + "playResolvedMs": 1.699999988079071, + "playbackObservedMs": 217.5, + "mediaProgress": 0.16064, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 13.800000011920929, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.7999999821186, + "mediaProgress": 0.163655, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359.90000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360.5, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 354.7999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351.40000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357.59999999403954, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360.7000000178814, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7.699999988079071, + "readyMs": 30.799999982118607, + "playResolvedMs": 3.4000000059604645, + "playbackObservedMs": 217.40000000596046, + "mediaProgress": 0.163482, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3.199999988079071, + "readyMs": 13.099999994039536, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.19999998807907, + "mediaProgress": 0.164916, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2.699999988079071, + "readyMs": 13.199999988079071, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 217.80000001192093, + "mediaProgress": 0.165682, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3.399999976158142, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3.699999988079071, + "readyMs": 12.199999988079071, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.163631, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.2999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2.300000011920929, + "readyMs": 14.100000023841858, + "playResolvedMs": 1.199999988079071, + "playbackObservedMs": 217.2999999821186, + "mediaProgress": 0.161888, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3.0999999940395355, + "readyMs": 12.899999976158142, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.10000002384186, + "mediaProgress": 0.162779, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2.5, + "readyMs": 14.200000017881393, + "playResolvedMs": 1, + "playbackObservedMs": 216, + "mediaProgress": 0.162102, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2.5999999940395355, + "readyMs": 15.400000005960464, + "playResolvedMs": 1.800000011920929, + "playbackObservedMs": 216, + "mediaProgress": 0.160527, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 4.200000017881393, + "readyMs": 10.800000011920929, + "playResolvedMs": 1.199999988079071, + "playbackObservedMs": 217.7999999821186, + "mediaProgress": 0.162578, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 9.799999982118607, + "readyMs": 28.900000005960464, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 216.89999997615814, + "mediaProgress": 0.162309, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 14.400000005960464, + "playResolvedMs": 1.800000011920929, + "playbackObservedMs": 214.5, + "mediaProgress": 0.156582, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 4.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3.0999999940395355, + "readyMs": 11.899999976158142, + "playResolvedMs": 1.600000023841858, + "playbackObservedMs": 218.80000001192093, + "mediaProgress": 0.163583, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3.600000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 355.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357.7999999821186, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 366, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 353.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 355.59999999403954, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350.40000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 43, + "playResolvedMs": 7, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.159693, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3.0999999940395355, + "readyMs": 14.700000017881393, + "playResolvedMs": 0.8999999761581421, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.1624, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2.399999976158142, + "readyMs": 15.399999976158142, + "playResolvedMs": 0.5, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.161579, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 6.200000017881393, + "readyMs": 14.800000011920929, + "playResolvedMs": 0.5, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.163426, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2.9000000059604645, + "readyMs": 15.400000005960464, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 216.69999998807907, + "mediaProgress": 0.16148, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3.800000011920929, + "readyMs": 14.400000005960464, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.162692, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 14.200000017881393, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 217.5, + "mediaProgress": 0.163457, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3.5999999940395355, + "readyMs": 14.699999988079071, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 215.59999999403954, + "mediaProgress": 0.162874, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2.0999999940395355, + "readyMs": 16.299999982118607, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.90000000596046, + "mediaProgress": 0.16297, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.9000000059604645, + "readyMs": 15.900000005960464, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 215.90000000596046, + "mediaProgress": 0.162585, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 3.4000000059604645, + "readyMs": 15.5, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 215.90000000596046, + "mediaProgress": 0.16145, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3.300000011920929, + "readyMs": 15.200000017881393, + "playResolvedMs": 0.5, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.163526, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351.69999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 353.19999998807907, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 354.89999997615814, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 2.4000000059604645, + "readyMs": 29.69999998807907, + "playResolvedMs": 4.4000000059604645, + "playbackObservedMs": 216.7000000178814, + "mediaProgress": 0.162932, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 1.7999999821186066, + "readyMs": 15.299999982118607, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.161372, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 1.5, + "readyMs": 16.30000001192093, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.5, + "mediaProgress": 0.163649, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.300000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 15.099999994039536, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 218, + "mediaProgress": 0.164377, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1, + "readyMs": 15.199999988079071, + "playResolvedMs": 1.5, + "playbackObservedMs": 216, + "mediaProgress": 0.16258, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.7000000178813934, + "readyMs": 15.400000005960464, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.162256, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.699999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1.300000011920929, + "readyMs": 15.599999994039536, + "playResolvedMs": 0.6000000238418579, + "playbackObservedMs": 216.90000000596046, + "mediaProgress": 0.164325, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.600000023841858, + "readyMs": 16.400000005960464, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.5, + "mediaProgress": 0.16287, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.399999976158142, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2.2000000178813934, + "readyMs": 14.800000011920929, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.160449, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.800000011920929, + "readyMs": 15, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 217, + "mediaProgress": 0.163473, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.399999976158142, + "readyMs": 14.399999976158142, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 217.5, + "mediaProgress": 0.165303, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2.300000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3.0999999940395355, + "readyMs": 13.799999982118607, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 217.90000000596046, + "mediaProgress": 0.16533, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355.2000000178814, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 357.40000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356.5, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.40000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360.89999997615814, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 4.700000017881393, + "readyMs": 24.099999994039536, + "playResolvedMs": 5.4000000059604645, + "playbackObservedMs": 217.60000002384186, + "mediaProgress": 0.162268, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 1.5999999940395355, + "readyMs": 13.599999994039536, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.163844, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 1.399999976158142, + "readyMs": 16.599999994039536, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.163639, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1.5999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 15.300000011920929, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 215.69999998807907, + "mediaProgress": 0.160497, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1.300000011920929, + "readyMs": 15.700000017881393, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.69999998807907, + "mediaProgress": 0.161486, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 1.199999988079071, + "readyMs": 16.799999982118607, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216.30000001192093, + "mediaProgress": 0.161459, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1.7000000178813934, + "readyMs": 15.5, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 217.30000001192093, + "mediaProgress": 0.159121, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.800000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1.800000011920929, + "readyMs": 15.199999988079071, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.161439, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1.699999988079071, + "readyMs": 15.599999994039536, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.40000000596046, + "mediaProgress": 0.164405, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1.5, + "readyMs": 14.300000011920929, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.09999999403954, + "mediaProgress": 0.16323, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.100000023841858, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1.5, + "readyMs": 15.599999994039536, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 216.5, + "mediaProgress": 0.163778, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0.7999999821186066, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 16.5, + "playResolvedMs": 1.2000000178813934, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.163001, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 360.90000000596046, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362.5, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 365.7999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350.2999999821186, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353.69999998807907, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": 32, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 30.099999994039536, + "playResolvedMs": 4.5999999940395355, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.161315, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2.9000000059604645, + "readyMs": 15.400000005960464, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 216.69999998807907, + "mediaProgress": 0.162988, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2.2000000178813934, + "readyMs": 12, + "playResolvedMs": 0.9000000059604645, + "playbackObservedMs": 216.5, + "mediaProgress": 0.162555, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2.5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4.299999982118607, + "readyMs": 15.199999988079071, + "playResolvedMs": 1.0999999940395355, + "playbackObservedMs": 215.5, + "mediaProgress": 0.161556, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3.4000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3.7000000178813934, + "readyMs": 13.800000011920929, + "playResolvedMs": 1.4000000059604645, + "playbackObservedMs": 215.5, + "mediaProgress": 0.160374, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 17.80000001192093, + "playResolvedMs": 0.7999999821186066, + "playbackObservedMs": 214.69999998807907, + "mediaProgress": 0.161451, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.199999988079071, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2.699999988079071, + "readyMs": 15.599999994039536, + "playResolvedMs": 0.800000011920929, + "playbackObservedMs": 216, + "mediaProgress": 0.16137, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 0.9000000059604645, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 17, + "playResolvedMs": 1, + "playbackObservedMs": 216.40000000596046, + "mediaProgress": 0.157384, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.300000011920929, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 15.199999988079071, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 216.59999999403954, + "mediaProgress": 0.161333, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.0999999940395355, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2.100000023841858, + "readyMs": 15.5, + "playResolvedMs": 0.7000000178813934, + "playbackObservedMs": 216.80000001192093, + "mediaProgress": 0.164294, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2.7000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4.0999999940395355, + "readyMs": 13, + "playResolvedMs": 0.5999999940395355, + "playbackObservedMs": 217, + "mediaProgress": 0.15993, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5.699999988079071, + "readyMs": 15, + "playResolvedMs": 0.699999988079071, + "playbackObservedMs": 217.89999997615814, + "mediaProgress": 0.160379, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1.2000000178813934, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363.90000000596046, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 355.2999999821186, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350.80000001192093, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350.30000001192093, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2.300000011920929, + "median": 2.699999988079071, + "max": 4.200000017881393 + }, + "readyMs": { + "count": 5, + "min": 10.800000011920929, + "median": 14.100000023841858, + "max": 14.400000005960464 + }, + "playResolvedMs": { + "count": 5, + "min": 0.5999999940395355, + "median": 1.199999988079071, + "max": 1.800000011920929 + }, + "destroyMs": { + "count": 5, + "min": 2.699999988079071, + "median": 3.9000000059604645, + "max": 4.5 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2.5999999940395355, + "median": 3.0999999940395355, + "max": 9.799999982118607 + }, + "readyMs": { + "count": 5, + "min": 11.899999976158142, + "median": 12.899999976158142, + "max": 28.900000005960464 + }, + "playResolvedMs": { + "count": 5, + "min": 0.699999988079071, + "median": 1.0999999940395355, + "max": 1.800000011920929 + }, + "destroyMs": { + "count": 5, + "min": 1.2999999821186066, + "median": 3.5999999940395355, + "max": 3.699999988079071 + } + } + }, + "reviewSignals": [ + { + "configuration": "core", + "metric": "destroyMs", + "deltaMs": 3.0999999940395355, + "allowanceMs": 2 + }, + { + "configuration": "chapter", + "metric": "destroyMs", + "deltaMs": 2.5, + "allowanceMs": 2 + } + ], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2.0999999940395355, + "median": 2.9000000059604645, + "max": 3.4000000059604645 + }, + "readyMs": { + "count": 5, + "min": 14.200000017881393, + "median": 15.400000005960464, + "max": 16.299999982118607 + }, + "playResolvedMs": { + "count": 5, + "min": 0.5, + "median": 0.7999999821186066, + "max": 0.800000011920929 + }, + "destroyMs": { + "count": 5, + "min": 0.9000000059604645, + "median": 1.5999999940395355, + "max": 2.199999988079071 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 1.9000000059604645, + "median": 3.5999999940395355, + "max": 6.200000017881393 + }, + "readyMs": { + "count": 5, + "min": 14.400000005960464, + "median": 14.800000011920929, + "max": 15.900000005960464 + }, + "playResolvedMs": { + "count": 5, + "min": 0.5, + "median": 0.699999988079071, + "max": 0.800000011920929 + }, + "destroyMs": { + "count": 5, + "min": 0.9000000059604645, + "median": 1, + "max": 1.9000000059604645 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2.2000000178813934, + "median": 3, + "max": 4.0999999940395355 + }, + "readyMs": { + "count": 5, + "min": 12, + "median": 13.800000011920929, + "max": 15.599999994039536 + }, + "playResolvedMs": { + "count": 5, + "min": 0.5999999940395355, + "median": 0.800000011920929, + "max": 1.4000000059604645 + }, + "destroyMs": { + "count": 5, + "min": 0.9000000059604645, + "median": 1.0999999940395355, + "max": 2.5 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 4.299999982118607, + "max": 5.699999988079071 + }, + "readyMs": { + "count": 5, + "min": 15, + "median": 15.5, + "max": 17.80000001192093 + }, + "playResolvedMs": { + "count": 5, + "min": 0.699999988079071, + "median": 0.7999999821186066, + "max": 1.0999999940395355 + }, + "destroyMs": { + "count": 5, + "min": 1.199999988079071, + "median": 1.300000011920929, + "max": 3.4000000059604645 + } + } + }, + "reviewSignals": [ + { + "configuration": "chapter", + "metric": "constructorMs", + "deltaMs": 2.7999999821186066, + "allowanceMs": 2 + } + ], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + }, + { + "path": "refactor/.cache/performance/run-firefox-s7hVJm/report.json", + "sha256": "fa9a3f34489b5cc33356dab75a4c76d350cde1d219c7d6c27c8d12eeb3c1eb95", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T14:36:07.216Z", + "environment": { + "browser": "firefox", + "version": "155.0", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "archiveSha256": "a0e5ab74354f9da6f62dac8bc070e6e50c5abeb11d98fe85c1509deae797b932", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "b5134a9d0cb5ad128b1fb229dce79a306b944f750d8620e224a99f5791e6cab5", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "6d59d815ae036e6ffe833f1fab5e1996afff48d9122511783bfddd37f79b107c", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "raw": 208030, + "gzip9": 58429, + "brotli6": 53361 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 73993, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22943, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20828, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "raw": 212211, + "gzip9": 59683, + "brotli6": 54404 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76463, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23662, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21359, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "92e4d16a85ae94ac83b2b8a5c16c65c09e7adec4e0a0c4bbc14112ff6fc59331", + "raw": 361484, + "gzip9": 77137, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152658, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33269, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 28, + "readyMs": 150, + "playResolvedMs": 3, + "playbackObservedMs": 199, + "mediaProgress": 0.181592, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 200, + "mediaProgress": 0.182041, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.170854, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174041, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.177179, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.175123, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 6, + "readyMs": 47, + "playResolvedMs": 4, + "playbackObservedMs": 184, + "mediaProgress": 0.1795, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 29, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174325, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 185, + "mediaProgress": 0.177654, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 0, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.171811, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 49, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.171903, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174785, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 362, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 8, + "readyMs": 44, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.173594, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 8, + "readyMs": 30, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.176031, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 6, + "readyMs": 45, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.172943, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 6, + "readyMs": 30, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.173505, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 6, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.173504, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173954, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173461, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 4, + "playbackObservedMs": 183, + "mediaProgress": 0.173366, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 7, + "readyMs": 47, + "playResolvedMs": 4, + "playbackObservedMs": 200, + "mediaProgress": 0.189672, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 6, + "readyMs": 45, + "playResolvedMs": 3, + "playbackObservedMs": 185, + "mediaProgress": 0.178115, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 8, + "readyMs": 47, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.176586, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174257, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 361, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 355, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 381, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7, + "readyMs": 45, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.175257, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 30, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.173831, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.173379, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 30, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.171631, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 6, + "readyMs": 30, + "playResolvedMs": 1, + "playbackObservedMs": 185, + "mediaProgress": 0.172876, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 9, + "readyMs": 44, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.172336, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 6, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 7, + "readyMs": 44, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.176135, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 6, + "readyMs": 47, + "playResolvedMs": 5, + "playbackObservedMs": 184, + "mediaProgress": 0.175424, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 5, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 201, + "mediaProgress": 0.184188, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 6, + "readyMs": 45, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.176615, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 6, + "readyMs": 45, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175552, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 7, + "readyMs": 43, + "playResolvedMs": 6, + "playbackObservedMs": 201, + "mediaProgress": 0.184165, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 365, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 366, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 359, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 45, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175126, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.175464, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 185, + "mediaProgress": 0.174745, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.175649, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 185, + "mediaProgress": 0.175289, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 43, + "playResolvedMs": 3, + "playbackObservedMs": 185, + "mediaProgress": 0.174483, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 4, + "playbackObservedMs": 201, + "mediaProgress": 0.18526, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175055, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 6, + "readyMs": 47, + "playResolvedMs": 1, + "playbackObservedMs": 184, + "mediaProgress": 0.171874, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 6, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 201, + "mediaProgress": 0.18426, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.176693, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 33, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.174892, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 354, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 6, + "readyMs": 43, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174895, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.175502, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.178574, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 48, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174542, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 30, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.174152, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 47, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.172927, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 4, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 183, + "mediaProgress": 0.174642, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 33, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.175125, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.177081, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.171627, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.17945, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 47, + "playResolvedMs": 5, + "playbackObservedMs": 185, + "mediaProgress": 0.172598, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 57, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 350, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 58, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "language": "en-US", + "hardwareConcurrency": 12, + "deviceMemory": null, + "devicePixelRatio": 1, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 8, + "readyMs": 46, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.177628, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 4, + "readyMs": 30, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.17674, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 7, + "readyMs": 47, + "playResolvedMs": 2, + "playbackObservedMs": 183, + "mediaProgress": 0.17179, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 2, + "playbackObservedMs": 199, + "mediaProgress": 0.181728, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 31, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.176933, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 29, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.172685, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 2, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 5, + "readyMs": 31, + "playResolvedMs": 1, + "playbackObservedMs": 183, + "mediaProgress": 0.172112, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 6, + "readyMs": 32, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.171833, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 5, + "readyMs": 46, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.174515, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 1, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 32, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.17668, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 3, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 29, + "playResolvedMs": 2, + "playbackObservedMs": 184, + "mediaProgress": 0.170991, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 4, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 5, + "readyMs": 45, + "playResolvedMs": 3, + "playbackObservedMs": 184, + "mediaProgress": 0.173669, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 5, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 366, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 351, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 350, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 363, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 5, + "median": 6, + "max": 8 + }, + "readyMs": { + "count": 5, + "min": 45, + "median": 47, + "max": 47 + }, + "playResolvedMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 4 + }, + "destroyMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 3 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 5, + "median": 5, + "max": 6 + }, + "readyMs": { + "count": 5, + "min": 30, + "median": 47, + "max": 47 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 4 + }, + "destroyMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 3 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 5, + "median": 6, + "max": 7 + }, + "readyMs": { + "count": 5, + "min": 30, + "median": 45, + "max": 48 + }, + "playResolvedMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 4 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 6, + "max": 9 + }, + "readyMs": { + "count": 5, + "min": 30, + "median": 44, + "max": 47 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 6 + }, + "destroyMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 6 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 4, + "median": 5, + "max": 7 + }, + "readyMs": { + "count": 5, + "min": 29, + "median": 31, + "max": 47 + }, + "playResolvedMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 2, + "max": 4 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 4, + "median": 5, + "max": 6 + }, + "readyMs": { + "count": 5, + "min": 29, + "median": 32, + "max": 45 + }, + "playResolvedMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 3 + }, + "destroyMs": { + "count": 5, + "min": 1, + "median": 3, + "max": 5 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + }, + { + "path": "refactor/.cache/performance/run-webkit-o3HiKz/report.json", + "sha256": "158762c199948f6bfd294df9a91b726f51b40ebb7352559c123815922fd596eb", + "report": { + "schemaVersion": 1, + "task": "ENG-08", + "capturedAt": "2026-09-11T14:36:41.377Z", + "environment": { + "browser": "webkit", + "version": "26.6", + "platform": "win32", + "node": "v24.21.0" + }, + "inputs": [ + { + "name": "artplayer", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js", + "member": "package/dist/artplayer.js", + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "archiveSha256": "a0e5ab74354f9da6f62dac8bc070e6e50c5abeb11d98fe85c1509deae797b932", + "sourceHashes": { + "src/accessibility/button.ts": "e5afa7aade56116082f54678c44961157950fa550d66e21a4e1ff9bb5369a6f8", + "src/accessibility/focus.ts": "2fa16941ac3632cb1e4b466e9a7e29700ef97b7eb2facd4330c59ec0a9320594", + "src/accessibility/keyboard.ts": "2d82122732f84f39e59c6852ca081614caa6430a82b32c4749e297826c77eb12", + "src/accessibility/moved-focus.ts": "c3d2a7d496381b2a86819b82fbd26cc940a1204fdf19408ccc8db267741d96c9", + "src/accessibility/overlay-focus.ts": "93fa088daaa3afed88f645507828a10cb63292937c49b16f6c2a0ea895897878", + "src/accessibility/player-focus.ts": "e8fd5222cbfc38cd4938324c83d9f5cef3d01a439464e1570d63a5131c84f20a", + "src/accessibility/slider.ts": "533d5e6d806c32a84a578b43ed50993d30b4a414b5a85a34bbc68c37c5673a44", + "src/accessibility/suspend-focus.ts": "d95c6097236be66e252165287435cca01b50553d64259add6b011721e4bbc644", + "src/bootstrap/browser.ts": "8d401627e8ea1c87fb44204227b04177a70cc7a0f79f95fb5dc73fe828e46a8c", + "src/capture/frame.ts": "eb25d81ec2d40a239103c63cfd80333705251291f2c2da77c740b4d413ea9cd9", + "src/component/dom.ts": "740f63e6e5942c444b9f05605880f8d56a77b066dbe5c4791da74f78cb96c668", + "src/component/focus.ts": "f4aff802711f6146c80e8c6bd90bc2cb406ccbdb581aef41f436ff5c03871ad3", + "src/component/resources.ts": "ff158ef0db8ba13343ff6ba329713820cfe2f5c2c446a7873a6cfff782855edf", + "src/component/selection.ts": "1f0bd089415da28db862647ffd1a0b4af752576465fb616d4b97ae4f8dcae3a7", + "src/component/types.ts": "d7b0e7008b0f6c82e3e97ac43e0188598dca4f740a860e7a60b3b38a46f4565d", + "src/config/index.ts": "a56b4d3d6942cfa3e2b47f909fc5ad87e6e3202fd61b29c7afd7649049e31d05", + "src/contextmenu/aspectRatio.ts": "18ab60c9acee1e0cecd76c0b6cf750763eed7cfbede4220328b5200154c5c478", + "src/contextmenu/choices.ts": "6bb880b27afc9457442c3973992da6dc8da48fc61d6b66b3b5a3bb4fc4651dc8", + "src/contextmenu/close.ts": "84b7a96df910e6f38140df8b1e73519d209a7331e9be9f42d076ae791757024f", + "src/contextmenu/flip.ts": "a7a4ac375da45dc7b6c996d4534098838646a078abfc4438f688e91e14ef0b38", + "src/contextmenu/index.ts": "7532165d162fa463f1fe3c538d6bda0f579b5907b05137382efeb0018719b011", + "src/contextmenu/info.ts": "f37cf0104510c13a130d2f55114c8f7ff15cc1b51863f97e60825442bdb2bf01", + "src/contextmenu/keyboard.ts": "eaa1af6b1abf8947d957208a0535f1b34f6c88e95394efd56cae905ccdea564c", + "src/contextmenu/playbackRate.ts": "7e06bb6fab3acdd71fb3ed63f77083172af517b49c1ecaefa3ee6a9068bdfe54", + "src/contextmenu/position.ts": "851ed1a884a13fbe430be77e7f72ae46d8a719175647e058644834aabd27ac58", + "src/contextmenu/types.ts": "a93fc90f4e17b731e8f6b486a507117810b61c1f1b0d9e775eba27dabeaeee1d", + "src/contextmenu/version.ts": "0553a716be0ba49f614059c41eef6dc694a9641fca79e6448b1b30382c6b582b", + "src/control/airplay.ts": "539bcc3671c7fe428ab95f9fea8a4943444066bcb742c7cf71591ba347642547", + "src/control/builtins.ts": "2a0e12a9741713c92938e1d2009149bbbde498284aa85c63f270d02b27dc22b1", + "src/control/fullscreen.ts": "7f8a9e8915abf9cbb9dda05b5c68523a47cc0ccf9ef5e0d9b82bc5c362fe346d", + "src/control/fullscreenWeb.ts": "9cb30987a3d2cbb334a80d3f2c41f39fd339bf37a9524c7ed0145cf5c98f1859", + "src/control/index.ts": "0d8e5a281f2eeba06c4cc4ac5a042847df53db1a19fdf140efea17d6ab2c0b78", + "src/control/layout.ts": "b5134a9d0cb5ad128b1fb229dce79a306b944f750d8620e224a99f5791e6cab5", + "src/control/pip.ts": "b829a7c83c5efa6751c2e434345e077339c9f5bc5022af9973f181ca8ce7f7ce", + "src/control/playAndPause.ts": "20ed88bcc7ac7622e02a7c4e6be518582c05f0d7c571a97a54b851d79dcf13c5", + "src/control/progress/interactions.ts": "da03600375451ecf8c152be5afcc5f1a4f8b759e837bbd54b7faaf8f8b228497", + "src/control/progress/keyboard.ts": "03d1d47e6641ea08f765d731f10a6aad35f7c3edc16aa97df822c5f9a7f75eb0", + "src/control/progress/position.ts": "a3794ab5ac5dafa5fd61e56acb12c94998bd4b9065dbf0fa4739c6bba1094aa1", + "src/control/progress/view.ts": "60ee16d5170be81b8132bb56dd0bc0eaf23e50f5c268d0697c9187b38a14aba9", + "src/control/progress.ts": "629c622864619e2515b2eacb1bdfcf523ccce7ce680c8fdf51812e8e50a0cc7e", + "src/control/resources.ts": "16fd7c53ac8f47b333041c4f298313390dc102523d47767b8a16f39a2564ba74", + "src/control/screenshot.ts": "11a1e3da919e476e7882abc3f74aaa809c3e9fc1de4346ec808731f78b6f27e2", + "src/control/selector-keyboard.ts": "6a749f48b23cda62148298e648bb380a6067cc18c7be4258b9ec85c382a56165", + "src/control/selector.ts": "a6f0c564c674530da9a0e4ed8762c6dfb81fa89373d64313e1020550731441f6", + "src/control/setting.ts": "10ee1118858c41f2e97a6df70d6d5dc978757d0e5d79ec36c11e743e6df86726", + "src/control/time.ts": "fa572092e0848878689367fb536e9658d13888d0a0d476babc5acd165af0f8d3", + "src/control/types.ts": "454846310d4fc3a8576ba030c2e8428bb795cde7b89308d29943bb4d4bc2aaa4", + "src/control/volume.ts": "45474d8d7f43d59263aa42e774eaaafeb45530ec24b81a5f589f6c906954568b", + "src/display/fullscreen-abandoned.ts": "1715b30d336976921b4957b444418702b7d93dbf1debce47429269638d15810f", + "src/display/fullscreen-adapter.ts": "71da10ec21c7706a8264badedac9022c74b865887931e9e369168fe3233c3b2f", + "src/display/fullscreen-request.ts": "c6292ded96aab0f2dbc978af251f6cd9f5fd074819529ca498077db8d14e1bfe", + "src/display/mini-drag.ts": "73d2f48f868c0ba4d8d5e5df40cbbdb4698c26540f3973b178d9cd374008f1cb", + "src/display/mini-focus.ts": "1f717619e183b1cfab668bd2e41c8e9ba02210c94cdb58034ec97aa41e71aa34", + "src/display/mini-layout.ts": "3835fe3d314da2fc624cbeb0e79fcdfa5393f08d87dfde730d2eac4e827f405b", + "src/display/mini-view.ts": "bbe69e4419ffc0f6c744cb730a51778f23c311a0fac157223bcf8d8bf0f3edc7", + "src/display/mini.ts": "a6fed598428bbf8d52931f21bb68b7560a3643d2576f7e7bfbae98b2f7cdd1e5", + "src/display/native-fullscreen.ts": "323401f2b3ea5186da981a1215b1b9e7dcf4ef4261a8e885fe8ff0c090de6a7a", + "src/display/native-pip.ts": "647879ae027cc0ebe684daa31d75511dd882e123e4ca8da2942e659bae3719f2", + "src/display/orientation-native.ts": "909980ba837471d9b456545a18fb0ab19f0990e8788936f0580a4b332cd4baee", + "src/display/orientation-types.ts": "0d68d2bc99d04db1e2fdf16b74e406e31f8b7e03fd9b6ea271773ed263ffa890", + "src/display/orientation-web.ts": "aea55c3b9e8c708fe5559f07cf8f0afd7ad37ac5b1a43bf519245c3072ec4129", + "src/display/placement.ts": "dbe4491ebd0f46b4efe13ac567e476fcd9ca5b84da675f19025935b5e3f8d733", + "src/display/sizing-types.ts": "da9b3d957dafaca9331f7319257dd8156b3c3e7b6db11f33f11ded48512450ad", + "src/display/sizing.ts": "c19856976320f1f35ff5a1049d19a940768300e095270b336dd12861b200da2a", + "src/display/types.ts": "e88c868fd370fcc9dc612489992d446a8d0558bd87c26c5c05fdd73d8a3d1b02", + "src/display/video-fullscreen-state.ts": "5fcb5e6b80ac45577664ef67e0460e0ceefd4022cafacdd7434c376a86d619be", + "src/display/video-fullscreen.ts": "b425bf0df462524b5d3accc9e3df383c6635676c152bf4bef09c477a90662728", + "src/display/web-fullscreen.ts": "bc091e6dcfb28784dd40ea619ce1fb9061b9e85dcc5bf2b6a303679eee5c727d", + "src/display/webkit-pip.ts": "3617927b4bb8fa46f651d0e584141f804ae438e2b4531cc2e9cf9f7eeb027550", + "src/dom/event-path.ts": "e952ea847a2e844a79c5c1b83035e03917e0294b80b1eb8af3b3bec0d2f7d333", + "src/dom/measure.ts": "84a599351d26a790c5a8f6e7d271486a0a68d5b58457d8ce754d540b54902b96", + "src/dom/presentation.ts": "500bded394579dd8194778f73cc44d0724f0a59cb5400957491928534ed091c6", + "src/dom/styles.ts": "734e0a4e04d666417a18ac09ed6271ee7630c399d52d7f510a1c19fd6e7b3493", + "src/dom/tree.ts": "3bc517ab9fa5317a1445156d53afb27182685eb3b4c0ac2ff41bbde55c9eecb6", + "src/events/clickInit.ts": "bd1ba29fe0af4332ceb19297797c4c942a3a74bfd901998d6b93293f1b309300", + "src/events/core-types.ts": "a607a3b2eea1b031f23ec0f620f1f4cd68799c4a77138a1443ecb196b00d1662", + "src/events/gestureInit.ts": "9e9d1ac0da7f87e89dd0d86fa2820b980e9cb810782d6ab30017de8686fc910b", + "src/events/global-types.ts": "3f4672d7af959cfa34ba39aa84ce614f422901437686bba98b14f578df40021c", + "src/events/globalInit.ts": "6f6ea497a20a8fd0746b1f020caff76ad6817cd70a1a90fbaea12f992b6d03a7", + "src/events/hoverInit.ts": "d1250e0dd35a8ba8067275986acbe6320c22adf1a977ec1009c0c012ed1563fe", + "src/events/index.ts": "30d2286316dbd351e93f5a2234dcca84bf68ca28c05921169cca70c2e0b1ecf9", + "src/events/listener-registry.ts": "fb062df5151c4e8e970de469f1c7d9af948f72214d32c293c81a5feeb8406124", + "src/events/moveInit.ts": "da97591723f8b94a34702559b7ee67a35f172aa696d37dfbecd472581ad3de35", + "src/events/resizeInit.ts": "719e27d11d2f93fcbe8368393c9190e251fc86dd0c3c2919f60e9b3b1edd0192", + "src/events/scheduling-types.ts": "0fd98e94397064f32cae4c004d9932c006d2db69a7d6d9374ff174d74ff93cd4", + "src/events/subscriptions.ts": "98573ed6cce73a73467c0e7fdb8ddc45e66b6bdf684c38886749453b2002a1d8", + "src/events/types.ts": "df03625039605314a96ef15b5e3777cbb9d444fd317e1a2fbeaaa0f1e83f6b0f", + "src/events/updateInit.ts": "6f174db14d20319f03a76e6ea267a3d71973faac44a92483badfa4420791817a", + "src/events/viewInit.ts": "d77b83eab802ff0046a4966e28b810a25592bcada49f526adae37556c1e4c3e9", + "src/events/viewport.ts": "6196fccb8b08ae22bde732c4389d9aceb5d727a63efd87b6d3914e338aadc46f", + "src/hotkey.ts": "d8e477bf451143e566e1f743a5f253dcf00beb23544709794779f275e11498e8", + "src/i18n/ar.ts": "897d8935384da16c3c4e96480777fe7fc022f6e3c0d87f62f79ae5f3c98e228c", + "src/i18n/cs.ts": "cc154ee50d258495d04dd2d49e89e9c0166e8b368969c443ec80cb5e48cf357c", + "src/i18n/es.ts": "0ed0283cb78847d6d1674be8c8ffa45feab88beaa8dbd11954b793c7b1657c75", + "src/i18n/fa.ts": "a72e83717f2e3e8f19f1de82516aef4a54ea70563223637bcbb25d21e9eac084", + "src/i18n/fr.ts": "a7366c75530e87f069216e20a6f09da42f7e77fdce862c02b32acf311068124b", + "src/i18n/id.ts": "146bf4c4e5bb39d8e1eb1a6fe3c639eb3128c55789de20511201f8ec02c56c0e", + "src/i18n/index.ts": "09c6f5bce58e4118dde10e8b2a2d3808785b7fde913a54dd189e0b473e21266a", + "src/i18n/pl.ts": "420f3b620d5c7ccdeba7857872be6176239fdf5da30b9cc72341e85dc95c2c8d", + "src/i18n/publish.ts": "5b216bbe313b3cda56a5da41fba4fb9d095eeec0dc903fcf284ddd8f94926e99", + "src/i18n/ru.ts": "9a9f61e6a66b3cd884c609250bf765dcdbc850dae3270d8a1600a5c2542436d3", + "src/i18n/tr.ts": "631c262a5e6cd00fada5bf2e146007d845816e47edb7643ec792250a403e4ec6", + "src/i18n/vi.ts": "e6f3f8e53599e27755e162c76c3b049457aae7089eca73ee531986e67f517f6f", + "src/i18n/zh-cn.ts": "51eb75562ae1ae4e248e1db85c90bcbc69b388a177ada6cbf8c3196a2c343ac6", + "src/i18n/zh-tw.ts": "6b098739e27ad531172d0f13e53849be30e9936365ce9613a7d938d9f01cce53", + "src/icons/airplay.svg": "20802c6735f2489bb6ce4221b519437095c54a3d2c4adbbab3319bb30536f285", + "src/icons/arrow-left.svg": "f1570036b739b0a67fab9261284aa3a13afe277e4c11aba7ab142503e7cce9ba", + "src/icons/arrow-right.svg": "6ffd8eb809152fe54b863bb890b9384d6f8788d129d604d70897fc9bb4398280", + "src/icons/aspect-ratio.svg": "987752a87701523057d8dfa7c45a6a139c4542b96fdcfaf8665722bbeb41f3b2", + "src/icons/check.svg": "7d06c8797e3a71fa7439eda4ea5ae62378e1a974907733e1cdf413db4af99b0c", + "src/icons/close.svg": "bb9e23e5305d11ec3d8f75a50ecdf3150deab8614c7df2af588873f2d78f06c2", + "src/icons/config.svg": "e1884d5411296b5cd1bfec7803b558b0afa5ab64478393977b07a662e2e0f15c", + "src/icons/defaults.ts": "31df862d754922fe5d68b20911c477d7c22893a6a67b5dcb1a48d3b437a0b23a", + "src/icons/error.svg": "d85a72e27ceaa38221637405cb0a5be270a297da58f1b0428498f568fab7570a", + "src/icons/fast-forward.svg": "629cb09ab7e2966c1fc2c04d9b0ee427b71b71abbc437b1db6635992cbe36d83", + "src/icons/flip.svg": "78044b69504710080044315a017f4836d56edce517c210ced3969756818f5b6a", + "src/icons/fullscreen-off.svg": "185b49ff4b0383974cb15a8fda1ba413dc99a133d4a02a4b72c75381d52515f4", + "src/icons/fullscreen-on.svg": "2d71a366b612e29cb2d9cb23c05a75389f794d90646d28bb8a2ac740861a5daa", + "src/icons/fullscreen-web-off.svg": "b4c81bbaa2ea91858b138083df0515c87f4ab8aa70df95ab9eb79e627ab47c7c", + "src/icons/fullscreen-web-on.svg": "4f0a8f688c44aab286bd2d12ab240ab33207664498d3f9fd0a752b53a3c1651f", + "src/icons/index.ts": "7152126328f6e485ee92b6d924c34776518b4a3925b2887867b516f7523b15cc", + "src/icons/loading.svg": "c0f4fd4e243012f1ab67429c99b41e7f8828c66b4ca228e3c6b2d1b6ca629e90", + "src/icons/lock.svg": "571221f734ec224e03f5023d136bca2186f58d768a6ea262881a4c6b49dc283a", + "src/icons/pause.svg": "9efe05ebf5610befddebcac51b3c9a491001189ff86204cb47928eb1617f6c7a", + "src/icons/pip.svg": "36a01d01d140fea05bd7c4eced17c29bc59f73990ed70807d8184ff09f57f50b", + "src/icons/play.svg": "c35562d20028d52ce329f35f90496a06d4dc5b6dc39df7ebcfb027f6f2393958", + "src/icons/playback-rate.svg": "872deecac0365ab04aeb5ccb1cdd9a0c88589a1442709fdac7c0ed12a241ff2b", + "src/icons/screenshot.svg": "49f7d90198fb0bcbc29848f40b0a8c042b78c07ecef1cfc5184e2e84a61b4bd4", + "src/icons/setting.svg": "7f6454d1c7f037d5a7144a898abedc89ca339534166d620dfa45efcd4c74ee3c", + "src/icons/state.svg": "63b56ffbfbba6e9ffe8fd050b3894c033cf30b166bcce9e717b42a9dc42d6424", + "src/icons/switch-off.svg": "aa4b81a9684e02323c32eb58e9a3e409a8f5abac4b8928b176092bf55baec4c0", + "src/icons/switch-on.svg": "1d87b42af5e7141f9defdc790567534288d84858d5068dd15093d5ef12f37f9c", + "src/icons/unlock.svg": "6dc8d6062af2f38efe12ddf4772e97d3f3114a28b885ee90067a4527e1ad6007", + "src/icons/volume-close.svg": "b9dbeaf9043c8014cd29d0e4a21a82ce567bc6b85497c310cca5f68bceeb31b2", + "src/icons/volume.svg": "baebc4ede3013202a4b13202a8d961cb0e5e065ee03733816022b2541d13884f", + "src/image/load.ts": "b4f1517243249d5fb017b89f993660e8b148906bbf28d08fe5c9f6d3a41e1e88", + "src/index.ts": "20cfe3738b3ce7e11b69721a5f0bdad9db77807417d8e421397a40dfade4c047", + "src/info/keyboard.ts": "13a6f617514388b4d14e0bf752780937f2baf545edb216b8259f56a198112c83", + "src/info/poll.ts": "d26ff67d9eadf1e032445371dde6f15293a7fc0b2ae6b87c3815e4b4e1ed5dda", + "src/info.ts": "6594ff3ee5643d63fec874631865d0e35b4ebdcf8aeafdd9fd3d9c595cfa3713", + "src/input/gesture-controller.ts": "1ebbd18184771a623b02ec19c363f84dcc72fdb7cd82bcf2adc97f4a138cb2b4", + "src/input/gesture-direction.ts": "65737f60e177338ebb3337a13ca75aeae77d77e94bc21495ddb829cc30de33a7", + "src/input/gesture-types.ts": "5ed25db69e0d9579a2fc0ab6faadf00fa073ad73a1ea5aa48096b4430c71141a", + "src/input/hotkey-defaults.ts": "c28e14821e5c7f7ac92a302e92439ab68fe77d5ef7d90a36b147b7c979ab96c6", + "src/input/hotkey-types.ts": "c7232470d725f3700481ab98bf9203403a67f1ab82e72394baa9c3ad6f3c9a4b", + "src/input/keyboard-focus.ts": "270c9dba40c0eb6d9fb36118b53e7f1d42a301ba4514917849523b6a05ed9e11", + "src/input/long-press.ts": "110cf16cf9dae845597377ebbc43249e103cbc0ece56f89e44ec6ecc7f3819b0", + "src/input/pointer-focus.ts": "802087098c786135eefa6727f13177ffe4a98e2abf48fad0e356b91e26960077", + "src/input/pointer-types.ts": "63e679498f8f42f6842f63e910c38717ac3438d58df3a75ef5b77c009b7931d4", + "src/layer.ts": "4014268eed043d5dd7b925cdeef6245e357cda67192a1301c5612ef98cdbec12", + "src/libs/screenfull.js": "2332b50c0c6364d5c99080be0f5739255e4b9e465d2cca40f761adce9a1908f8", + "src/lifecycle/instance.ts": "3168f7db4271bae7a242e80798546b755ac15443e15dd9ebb7675f5a259299d8", + "src/lifecycle/resources.ts": "b743daeffb676bb0b31932c3198fa9cf842f5e9015344659594ffffe1a56ba23", + "src/lifecycle/scope.ts": "e2188e8544b27cf8c7ac149e7146af628a2d6166c82b719a247adef5d85be5db", + "src/lifecycle/template-rollback.ts": "7a83da6739bcec1587b02f8157934988910d7f9103fe489a0d6f4f65290c3d77", + "src/loading.ts": "216fa5e2af5be5fcbf95a1578c869553a02f625683a98333d4a404f9a70df9f5", + "src/mask.ts": "500b8c2fb5ded63d5acab3c984fc9757f28a8b6cbd4d5beeac8c5a6d73ca63e4", + "src/media/events/forward.ts": "6b1b7e80036bfb523b51843dc6ec6d83c2b949cefb9cef085b2d679a444e46d8", + "src/media/events/listen.ts": "4eb7e943c1ebca77da8025d83b7d408276187cd02860b7793284344378bd0fe0", + "src/media/events/playback.ts": "2c68e4f6274a0dc65e56d42c928e500fc1d63bf3e03bbdd8a83c3f3ed7ae8ee4", + "src/media/events/readiness.ts": "3ba74f26dd9ff0729967097c2cb6f329a9cea57745bfe8173f9173e0d134476a", + "src/media/events/reconnect.ts": "876027b5116d0d3628755705682b30630f4b713199ed8015541932d81d2944be", + "src/media/events/types.ts": "02bd29ad8b158fa04ce5c1524e397260ef24b94c2cf1f053e7bd02b23e5d29dd", + "src/media/hosts.ts": "498d1cde31bf9ee12af1f13523eb0a4553adb285264529378abba5b629829e9a", + "src/media/playback.ts": "b0364027e1ea26e44e435a938e93c022836885c2622cda6bc3a7ca791d3c2964", + "src/media/position-revision.ts": "ba074cce7e7c6bda84aa234de8eb315e5ca482aa9b06250896f9ac6251192851", + "src/media/types.ts": "96d4a7f066cbb6fb9138165dd736b4ca500cb19c827bd7702134d61c44cc0e87", + "src/notice.ts": "4faa700323a8fdfd91a59491a5f57da2dee9bd1f2de0d900ed16e9809a208c94", + "src/option/defaults.ts": "f357ef80cf32085fcbc3409d92dfa27b31c13fbcf823f576052c0347911c0cca", + "src/option/resolve.ts": "53a73627cd540e3f21349c0a43beda35ea5195647a31e3f5b30ac292390b4b1b", + "src/option/runtime.ts": "d1bcc7682da05a74d7af173304e47f71ba9eb59e5351436040e9dbdef5c58fa8", + "src/option/types.ts": "f2ce01c01acf45fac6cbb34685b8e6c321bcad6b0da2526f3f189eb5962ea0e5", + "src/player/airplayMix.ts": "bfa30e1dcd7cbaef97e977344e8a35524fad6bd23089cd8e45945e3b32b4bf04", + "src/player/aspectRatioMix.ts": "9e5e7365d469aeaef65a6010cb92734702191f9086b2f21d98c9f0ad7f356898", + "src/player/attrMix.ts": "d82150611a69423ed46bf673f44c3e0f61e80425026effd486a6951b6c0dd90c", + "src/player/autoHeightMix.ts": "5848e34cd826f5d4cc81d076c83fb3bcea0aed1228cd93a1edb6b8ca402ad175", + "src/player/autoSizeMix.ts": "6373a8ea7fff4cd875d17c5d3df6dc37764055ab77850a6c6348526969071cbb", + "src/player/cssVarMix.ts": "0d023f28b7a8b4c1a5e2c4dd5672ef4294c86bce0013babd9d52efa32a443b2a", + "src/player/currentTimeMix.ts": "cc374abeb85b203b9f31c566a6b9e53a4a1723d609fccc7b0c9c210993b79e75", + "src/player/durationMix.ts": "60a9d665cf302dcb6b3e37e2f057e31720935e5e588fd7709231f691f6014191", + "src/player/eventInit.ts": "a915c5a618e70b1ab10536b1273ba0fea4ec11d3a2ca629b538e90b5ad2b55f9", + "src/player/flipMix.ts": "a1519c83f8c9437a9b7e99a59e38a3d931032c579f4085226fc0955c7c9eab67", + "src/player/fullscreenMix.ts": "b339bebb4c87f7b75232d7e0d637ebe25bd09a0a0428ba87339a16af5daa71aa", + "src/player/fullscreenWebMix.ts": "75b83a6093c7887ca8725f63c55503d0bf3aafdbbf2347b579120cb257503555", + "src/player/index.ts": "359943c88dc99863e510fc0d51f8e8ee2397217e68045f755d4e9538579bdaec", + "src/player/loadedMix.ts": "6a4c4a08ed74346dad3e138b1dda22c8c9c12f175fe6d00da41b89c78cbe2c18", + "src/player/miniMix.ts": "d68a0c4f6c6059d5831d2d1fd4823b8d3cbce95eefd6d36d38670d6d8720f44e", + "src/player/optionInit.ts": "7c1c47679ee6201d0e0d203fc7b449a09309e7b24a0a1099ad259a70fc1b1a35", + "src/player/pauseMix.ts": "5bbb68eab7dcf2170c944cabb8d4b82be4e6d7623e37ad6ea464b81c1028bc0b", + "src/player/pipMix.ts": "63dfb29ffd66ce7d081b24f8e8bf697c041675b49ab8919e206d2df5132de236", + "src/player/playbackRateMix.ts": "e185c6ff52cd567f7fd7c30553bbd6c65517324d1d16c4948c3623ef457ef536", + "src/player/playedMix.ts": "5b6b89bf8dec1efb19cd51e46af1505bae006bdb3fb798e9dec7e3fb5cf0acaa", + "src/player/playingMix.ts": "968c9f6e6d23c233c77d62a593db64adcc6d1a2411f5f1c61a35c6996d6a54d9", + "src/player/playMix.ts": "60249fcacdc5b1bc6f33bcd806e8a4f5472cea21d40550b042794a75027fe34a", + "src/player/posterMix.ts": "d569dc24e8e64efe398bd76942bfaf563ffbf64d2a7387ea2e1cb1cf511183d4", + "src/player/properties.ts": "76806d6273545ff556cf9c6d341b59b9041455a8ecbe1fd40510e841c0d5710b", + "src/player/qualityMix.ts": "980ff584c8a5793f5ec9f049f144df31d184d7c9acef49fbe9d504b7657a96bb", + "src/player/rectMix.ts": "a741ee09fa3271df84363c5d73eac1b2e5adb39491f95f8112af81f1219ffed4", + "src/player/screenshotMix.ts": "1754bbce09f713204c120cd4657b52c06eb09eb1fe3244f84474e5967cd68e50", + "src/player/seekMix.ts": "e6e1bf00e8441f1ce58d2a67a66f7e5e98c86d78620ff10a5e6268d54f13fadb", + "src/player/stateMix.ts": "e45b3209a93ab14665d19c5740d5c632187e9fe234b019a2a0263e26884ab3b2", + "src/player/subtitleOffsetMix.ts": "e7866cf3a6d9fe271a4c34973f7a961542a738e89a3647df85197cee5853ce8b", + "src/player/switchMix.ts": "b47e174ef0edb2b96ff29f2ddd3c9f2dd2a38713db2a81002b18c89ce71994e9", + "src/player/themeMix.ts": "5bf11bcf8b77cd5d5f2970bc3edcee315c693c1be3d567770d5107a5951cb48f", + "src/player/thumbnailsMix.ts": "6c097d7d00779a6d0d3d65cf9ffd126624a48c9bdb98396c84c39f4de4bdf712", + "src/player/toggleMix.ts": "a3050136248e7d0b942387484c61286ac2b33a90724b1dc3460f5061be76f247", + "src/player/typeMix.ts": "c2a234a9c09f0269a4bd0659087635995945075ac70a5cf2478c8a135fc1b2fe", + "src/player/urlMix.ts": "726a42899261879e03c8b1d4f716458bf3e6e614cecc3bb8d7a581afc2b7866d", + "src/player/volumeMix.ts": "d830bb27b984e0ab2f687943fb49abcbd0331d71fe96049fd81edbddaa64f07f", + "src/plugins/auto-playback/prompt.ts": "58c6dcaf540296ee6f6bdeeda38ee7302aca2b06ddb152b716c0c2bf9c6c96b4", + "src/plugins/auto-playback/records.ts": "133a4ba2fd2d3df724d96eb203d05cffb0b82ecb8de72403974f7979bd37ce01", + "src/plugins/autoOrientation.ts": "4a13b0c010ea7a5002e66c422260ed24bb0d18b3ed41ce10974ac7ca2804cc09", + "src/plugins/autoPlayback.ts": "e349010813bbcd53503383b707c5f6e6e60d8ade6442d020fe6ba07a128c3122", + "src/plugins/builtins.ts": "4631c9775732982dfdc87e16b1bd6b41a350be36fb27e0a9132c11a85b0c016d", + "src/plugins/fastForward.ts": "74c03e3fcfe2f87dcb0ef1a5da5410cb96322509fd07e32930128584c54f62b5", + "src/plugins/index.ts": "4c97f354769bbcb338263f321876a90745a87a9af2d267e216bd3d9d007f268a", + "src/plugins/lock-keyboard.ts": "d59ac2fc9d0daf48c7946e0b49698a74e01f5f55e903c1b090fbda5516cbd16f", + "src/plugins/lock.ts": "8f5fe4469787b7b2a0a302d0fbd925f8eb6d1b261cae6e17367e4d97666a096c", + "src/plugins/miniProgressBar.ts": "21b4850fcaf6b0e82d5e62ca7aca60c179c578f7ff6d5606e6025628ff4b1cc7", + "src/plugins/registration.ts": "9891686c32aeaa33c48ca500cf30ab24ffbb0835c6248769b4c645a5ff20129b", + "src/plugins/types.ts": "6823098d5ec1bf053f60ddfdd36bfcd3f06f3b528cc5dd30fd676a1318dac590", + "src/scheme/index.ts": "dc4a3b5e08478cf72b46b0b59c023359ad5f79b891ea8a6a119ce24a5251821a", + "src/setting/activity.ts": "699ceed4bdeddb6d48eacf79c8dbf737f5d2d8c4983be70205322b14807a91b7", + "src/setting/aspectRatio.ts": "a16eb58fadf77f0a9009cf162d957ffd59d9b8fde83cc193d510fd642e3456cb", + "src/setting/checkpoint.ts": "9d3bff311f9b15c067ca49661af4f48de939f266b8077e7c2f0d66edef22dde6", + "src/setting/events.ts": "f7a3347ca146232caf2a8c9a5a18731cf7bc91dca4cd36370e0265c6eb70df53", + "src/setting/flip.ts": "e72a4ae33300d9e48880897a4f85a04fa6d9a5fff7b06ecaf9081cfb1bb14404", + "src/setting/index.ts": "f6319af15ebe3600a466123dd9d343b86a8d6ed201693ac7ac86dc1d674d477f", + "src/setting/keyboard-focus.ts": "b9af20f66342e10564ef606d75550e9eb9c65274af615ff5719598a0620464a3", + "src/setting/keyboard-item.ts": "d94bfc0266486615ddb79b9eee3886f48891ebb2e5f465652ef98f142ada89d2", + "src/setting/keyboard.ts": "5a2c717d9ecd368efb1bab2562e8d8a06af7607e9fe6d96c1be4d8d58212d395", + "src/setting/layout.ts": "584604e8fffaeaf1d633d1ed45e64d94595c2a56976e3a3f7ede01839b83a37d", + "src/setting/model.ts": "c47348f0f9494c4ce8ea5561bcde6eb698fb11e9197ccdc1ca1359a6d5e370dd", + "src/setting/panels.ts": "64d48720971763985a2a652a18c2ed2f32300c3553d56b52049ae40c4dfceae1", + "src/setting/playbackRate.ts": "2e70e0d2a33cb0ec9fcdd6d22424979fed7b2e01f87015d6be4e520d5cf4e88a", + "src/setting/registration.ts": "c29db62b5d90e0efa4a926c753015e65e96a47add3f5b8840ee51017052edf7c", + "src/setting/render.ts": "ed73745f2c7e2d76bbe8ce7202336e5f4de217dc8f0806b769127cb25316faba", + "src/setting/resources.ts": "64c28cc2cb08cb87b0864ab957d7999bc94931be4788f282d6f190b8806a81fd", + "src/setting/selection.ts": "a642e630924eaf4ad91705fad1fa6e6dc946b32970d809a23da274399fce20ef", + "src/setting/subtitleOffset.ts": "86513835d4e542ac39e9d551507473e3e14c71fd0d5ea725267008ecbff6ab83", + "src/setting/types.ts": "21a07d75a28bbbe20b3e107b6f1a09cb6f8ef2773ea10a4bd7caa88956e9b99c", + "src/setting/update.ts": "79326cb55c52243a7aa8df347a3b081dcd84eb7932fc6162061cc0d9f7078add", + "src/source/listen.ts": "c0596b98258c1544c8e4b762509646428450e56588da36908cb8583b8b716c37", + "src/source/operation.ts": "a6cb65594a5b28247e3a6889fe0a2f47a34aeb08cdde5f0125800a87862cd559", + "src/source/restore-position.ts": "da98a47e8419b33069191e51fc94cc9652302ee4f3eff8ccc7a6dbd4c4c0e2bc", + "src/source/switch.ts": "16f5418d73a1d6e89fbb797afcd79af13857861ba25cca9046c16b70ad31d431", + "src/source/types.ts": "e5fa3a9cd6b84dffbbb02f61aad966d6046204d857de3e4564c795f02a0259ff", + "src/storage.ts": "9c0a0f3d8ac18261db6e49b2ea14322d1d53bfec3531c7337b85005e708fef30", + "src/style/accessibility.less": "eb9cfe282c64a059d2e102280750bcd33ac33726fa09042eb9875f534335efef", + "src/style/artplayer.less": "a0da37fc5beadee7181d20b0c4769caabce0416fe87b501cbf916d33d073a82b", + "src/style/aspectRatio.less": "2218f0db06da5287a8b7d99c3e72360d1c9af02d805d1b380f93d95df7542cd8", + "src/style/backdrop.less": "45d2518d29c294801dff1ab85e3a4bb2cec66496adccdf893854fb08d444869b", + "src/style/bottom.less": "324de61ac2a82748015168789fc48c861ba6d490a87f9a98dac931b53f0d5a95", + "src/style/contextmenu.less": "190d7e61fba903428847e4495f084306c9ddd1b45178abe04087f3ab883eda2d", + "src/style/controls.less": "eb6d4bf4e4ff903d724d45f3ff60f0cf10c02e622fba195555a8179100cdce87", + "src/style/danmuku.less": "e971e214fc4fcad36707d0a2739991e5345ed3b0d582fd9484e3e2065f4d4e45", + "src/style/flip.less": "f3169f63fbab0c8166b0f1fe58719bc980a295f160dd534855adb2670742b8b5", + "src/style/fullscreen.less": "ae20b0142cb4dab46f1062270608d47c6947a6e35d9c0915ae237f6d593287c2", + "src/style/fullscreenWeb.less": "d92057496349d44b903a4e62b4b4a6ebc2c7b93320fce81f26a5666abdf77330", + "src/style/hideCursor.less": "28c6c2150589607c2002fa7b6e7a09b525742630d0b247c3c36b414c2c693cb8", + "src/style/hint.less": "e2dc4940e6b212d8da75a404fd5ff1ad894008457677bc37554c6b64b735bc31", + "src/style/icon.less": "2751208954958b8437d10746111d192ca944f97d8cbfcbae6a2a2f5f0ceaf234", + "src/style/index.less": "ea6f4cd4ac769bbedf870e01a753c0cdc24493e9ac367c895ff3687d02f6a84c", + "src/style/index.ts": "856afc037ffcd4d18c4b54901ddbb30e310014553fe9d19560e34fb54b8378c1", + "src/style/info.less": "8cdb91746d0ad17dfd9c493f317bdbe0bac250c11ce6d907596a7f34c6f0d5d4", + "src/style/inject.ts": "9cddbe51b5de0da74f27c045ab982b509c3854cc6b81eeb02a6b974914760a4d", + "src/style/layers.less": "623d06fb1c5520e99401f6e5e3f2a6e60aec540e4d3226845582677e69fe220f", + "src/style/loading.less": "3defb61105e6229494501dfa3315cc82366eaffc9569a25dabdb54ba8ba57f9d", + "src/style/mask.less": "3bcd16bc8cb4fe573c3937ae7fa1a1435fc5479873841c21d99d83d1916cd1be", + "src/style/mini.less": "abf2b03a51d518867bdef5818ef5fd604f19c2f85dc8bc9784dbad480dd8b991", + "src/style/mixins.less": "4de7eb5642eb03388ff36b2fc37c5b2bbd9d8a68c74861aee2d9aba22cc0d171", + "src/style/mobile.less": "1c3f93a6eba38589a031478ba04d87007c02594613845c1325c22ba940629c32", + "src/style/notice.less": "4ef68e420702979d9bb6d9659fefdd52a22996edd9f528473ffc0e08bb9f70de", + "src/style/plugins.less": "7122d23a57a98f09b3d933ff15eddbadc909d3fd1cd096a8e8e25fef25cbc0b2", + "src/style/poster.less": "8bc21639753db5f5ee671b1155812ba4bb42365c218f9c53c95e42b68ec4498b", + "src/style/progress.less": "9578590a84cd446d9790ae97f89103cdd65cac0094846f0c36ea16e182275411", + "src/style/selector.less": "a33cba4ff9c8e9aad4af152547bf54fdc64fb74a1013ab99a9ac01eb55fe25c7", + "src/style/setting.less": "c7fec9fc8c3cc3e63085b405a0199e2148721050b41fca3ba33598dccb153958", + "src/style/subtitle.less": "9660cef4d9933f2e3b5f8299f1c820797df4942c18e8c9883930ad111a86b3b3", + "src/style/variables.less": "166418165eb862c669eaaf40bd068ae12beb9b784abf6ebdd83380b9aa72bedc", + "src/style/video.less": "1658e7941437268fc187c991d0fab1d2d74ec1fad5997df67b4b9cc6a1cb52d9", + "src/style/volume.less": "9c3a184f3921e026ba5e3164b6d0c52ea7d5f60214e2884959939b74360b21fd", + "src/subtitle/index.ts": "b4ead680dc82fa47c53d1ec7e5fb8bf94abbf55730d5d1130ad8d544cb42adc8", + "src/subtitle/parse.ts": "7db540c5edb1d2312eed82757fd15a7ce6a28996ba20d0087e56730f21dede74", + "src/subtitle/render.ts": "96493fc35680af635a8db225a8bf002208df79ed48b1d4ee6cc73587543add5c", + "src/subtitle/request.ts": "543c964571bd5ab984bc1adc9f64a8917dd134ed2892ad10b30ed9c859f34119", + "src/subtitle/state.ts": "9f79b982d66747170bc39bdaf99b65676310965f23da62a4dec15547c756a56b", + "src/subtitle/track.ts": "707f4c43af4ebf4b87521f6f577168460e739274d0cec28b9efe5704d2540d18", + "src/subtitle/types.ts": "615e389b4bb36196a69a059eb04cf7e519cdac13d2da15e4374fede2f3b6631b", + "src/template/html.ts": "351c472bfd01fa5ba1a4e347ed31bd5faaf823d9b4c5cab1ce8c651e3b175021", + "src/template/nodes.ts": "1572746a636647e4d313cc8752d3a110ff81fddb390ad7b0feb6a0db0d42b9d4", + "src/template/types.ts": "2bf906b4a209e17dae4d79225e758e2e53772e93f19f188d0131051ea2a0143a", + "src/template.ts": "0ea9155b9292d4c528a464d3c97996ee5a1c9c4aabc2959a744989085db2251b", + "src/thumbnails/layout.ts": "6630439242a880f53fcb374b7b15c7f486405aab8a0fad651b137f02971eeb59", + "src/utils/compatibility.ts": "1fd2a5b17ee3245712eda961d3c0a15caf3c428010112e48231890176ce1e5e2", + "src/utils/component.ts": "c3fa96467e8b315d974a42a19591aa4a4a7514853db796135b2acbcdcb160ea3", + "src/utils/dom.ts": "72f3539dabf296df37ab4cc7ade0c8ac9480f399987101589450c787e7d6719b", + "src/utils/emitter.ts": "26a93d3ff35b53e71a5f3bb22c252a854559d8151ede50a66a28d9eefae6c008", + "src/utils/error.ts": "ba303c7d4e4228919088f9d608fa364596f5853ee646eda2008deee354866f38", + "src/utils/file.ts": "ea71d7fc0e818d473bf5a596211ba9d571e4febdf1878014eadefa8d0a98d4cc", + "src/utils/format.ts": "891df5b7542b713aef46bf2b93924f42e68eee574afd802db3e6c62ff2655ede", + "src/utils/index.ts": "5211af833dddb2937d25dcc772740d62f9d5c5039ce5505bffff0796d4afd756", + "src/utils/property.ts": "c737d4582a4382f4038d12dafdf8b43418e508c9b8b859b2f0cc17c20f370343", + "src/utils/subtitle.ts": "f058851d11a418e321a8a498472b67fa535fec2c7b5d3df739b6b4f263d00337", + "src/utils/time.ts": "b8ce3d50865f6c343e8e3ce9f5c87de565a87b4e9fbcbccbe7030e30e80b93fe", + "public/artplayer.cts": "0e91e907d021db02a68004603e6190505fdc0806d873ebb6af171aa089a81da7", + "public/artplayer.mts": "f6292596a9ccb1d43a6d6a12c35f859b1889ad15924c5ae0f9f280941aade313", + "public/artplayer.ts": "2c1f228e38eeda3aba0dceb9630c5db1380ef7033037b28a12423355c8a80983", + "public/component.ts": "ec0ba441e6f834118afcefd0621d9a76143ad4fcf50b699a374249ab14d2c314", + "public/config.ts": "97322dce493ac3d1160f426e4fd0ba89fa746f7d66bfbeabd9f45454198560ad", + "public/cssVar.ts": "2ff9827aa10bf326f60f6cda7556a94fdcabafba529185a1ceae46d865f33697", + "public/emitter.ts": "9c62551cdcc6dd3966bed8a7a85dd477435db977c91a294d2ac8f162f9592537", + "public/events.ts": "cb23eb57b07a0b4725a2cbea62add2fe691f818cc4bbcb862bc62caf5b297f3d", + "public/i18n.ts": "38094c46bed0ecd5bad02a3a5fbf0d61521df45aa2e1154256cec4ad5491958f", + "public/icons.ts": "61ce1b0cb9bc7488263b644419b5fd5a13e72de1493c8113eee81d5174f1234b", + "public/language.cts": "2248040d86a8e34626755c4ecf53ea0174706c653073cf0e15884a030d173120", + "public/language.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f", + "public/legacy/language.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3", + "public/option.ts": "88dab402e6f55c51ef7b70c0ecde3e4437116f7dfced303047e410835088a3a5", + "public/playback.ts": "1ceaed3aa1cef511fe8b20f4874647f6065c723ad805b742a0a9247e16bb1bb5", + "public/player.ts": "fe75e08e8bc3912bd1f42bba92998418b9718a688b60068c2b9843e6218b0519", + "public/plugin.ts": "2a57e148fda00ee687da5036b890b0f611cb94bb403a1ed52602179060259d35", + "public/quality.ts": "dcca8c0f5b5c25373f85825a274fc3ee8beeffd7c8b2a978468e039ff4946a9e", + "public/runtime/component.ts": "840213299c942fe058eb5436977ceec066b9dccda24c55ae9f464b399c979e39", + "public/runtime/construction.ts": "24cc5cda1f614314db382271a9b0d5583b781894cfdf6c548700b1b5270467ee", + "public/runtime/events.ts": "52848f57d35eb1037cf74c8877521edf99a015bcd77f30ef6bbcba1807a99bfe", + "public/runtime/media.ts": "8828f80953aec3e95328cefe691661e8897cb27cb309483cf806ec45a8549ae3", + "public/runtime/option.ts": "bb672e49ffe74a6fc78543217f6de80d7d738890146df0857c709d4dc283e4ce", + "public/runtime/player.ts": "a4a24794e26cfb9e4310bf0f459a7a407e85bf81b4f3a4feb6294331af8036fb", + "public/runtime/plugin.ts": "9ad482f2a77914a91450419680b8af6b314b926f0831c2f7f6d7c466690f95c9", + "public/runtime/services.ts": "8e4648d8c61bff47343f9e1c2b995af69fc00947264b826109ceadcbaf553254", + "public/runtime/setting.ts": "c48d20957b57f79f985ef76a2950cc8a5cfa25dafa8ec5939e562661778e6218", + "public/runtime/subtitle.ts": "13241c4f9a87517aa2cf7b3e0bb8cedaa12fa0b4d3f8934285797583b752557e", + "public/runtime/template.ts": "da9975513a1938e7f386f4f65f718f0fc595164bfeac8f0cd99a3e97a54919a1", + "public/runtime/utils.ts": "cab9916f5224a3b047812b9f759cc9cc62105662599744067a6955020ab36916", + "public/runtime.cts": "52cfff1daeb6841a90212c8fa8d46ca46d6650bb7ed1b59b62115d854b8ad652", + "public/runtime.mts": "1b09bc0ee0f0ee2f788689eaff441bdeda1fab0ce783e71b61b9792d81072b03", + "public/runtime.ts": "ec4b1d56993eb482a77eb0f94b701047549d009e6ba6433f27e7d464fef30c2b", + "public/setting.ts": "a60ed81da780439a55ee22ebe2611d936bd45da0d98e6bf44c92e9a5d9047492", + "public/subtitle.ts": "92f711ad0f7924e609ad4425cd26d19c73eb027cccddc6d89fcf9b8e334db065", + "public/template.ts": "b5f9bff43b4816bd2e3531a3a1750b8014fcf63d421fbc786341cedb1429035c", + "public/utils.ts": "63757d81dd9cf5b95c67ff758da71c87bf535f15aeea7dfda322637d26fd33d0", + "package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "tsconfig.json": "c074f0621b18e6f209e217a702745e4118ee7724955e8104c7e3df3a223a9921" + } + }, + { + "name": "artplayer-plugin-chapter", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js", + "member": "package/dist/artplayer-plugin-chapter.js", + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "archiveSha256": "6d59d815ae036e6ffe833f1fab5e1996afff48d9122511783bfddd37f79b107c", + "sourceHashes": { + "src/chapters.ts": "92206f524624ac3a7304677b6a69fda88e62caeca52e1e530d746e51579d3a4d", + "src/index.ts": "83dc022253c0539587590f7a551e090684d1944dcb2010a76e8498a683e7ef36", + "src/progress.ts": "4a18d19ed703772d73622ea3fa9d433dbc2c6092ba244c9bb1ec727368996951", + "src/style.less": "a7506541374cbf5b3a6906b19d4a925406b2ccebdb9be6c7406c3bb8d9045ee5", + "src/stylesheet.ts": "6ccd88b6d17127acf6f6c1f02a7fbb3a55d59f427d2d92c007bf658122abd51c", + "src/types.ts": "07c528f9753cc54c12211276f28ff01a5f6e8f1ef1451b2b534f2d6cfaa17ee9", + "package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f", + "tsconfig.json": "732a6076acef4c8437d305af19a9da8a0e04b8740a1df32921fd30011c162492" + } + } + ], + "toolchain": { + "yarn.lock": "44cda170cc8279bfd1fba361945aea5f2d8a63893cc79c9404835c1afc998dd6", + "scripts/build.js": "f836f7332b83b022550cdbf3dea04750c699fc6db5175a6fbefe502fee5db374", + "scripts/utils.js": "4bf07ce5a1029df6360e402d128233e2ce9873316270473f6c5f23d88533a1ec", + "scripts/projects.js": "a88d5da78a0d50c4ac92a37ea5594a833b169a51d45b5442d3af4d97ffa16965" + }, + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer\\dist\\artplayer.js" + }, + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "bytes": 208030, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "artifact", + "file": "D:\\github\\ArtPlayer\\refactor\\.cache\\packages\\run-UElxNR\\artifacts\\artplayer-plugin-chapter\\dist\\artplayer-plugin-chapter.js" + }, + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "bytes": 5121, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "sizes": [ + { + "name": "artplayer", + "member": "package/dist/artplayer.js", + "before": { + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "raw": 134037, + "gzip9": 35486, + "brotli6": 32533 + }, + "after": { + "sha256": "45630b67199159ce5000ad61d5433e95559c3a49b6a9daaea547d751fd36cd9f", + "raw": 208030, + "gzip9": 58429, + "brotli6": 53361 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 73993, + "allowanceBytes": 6701.85 + }, + { + "metric": "gzip9", + "deltaBytes": 22943, + "allowanceBytes": 1774.3000000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 20828, + "allowanceBytes": 1626.65 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.legacy.js", + "before": { + "sha256": "cef83f9dac8a343060329ea6c5d603f0e7811fd0fd6c1590ae1c47f9e0afc9bb", + "raw": 135748, + "gzip9": 36021, + "brotli6": 33045 + }, + "after": { + "sha256": "a106958fb438a56190c4ef46b1e5a6a19e81e3364e3ede5865ab8cc068919d39", + "raw": 212211, + "gzip9": 59683, + "brotli6": 54404 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 76463, + "allowanceBytes": 6787.400000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 23662, + "allowanceBytes": 1801.0500000000002 + }, + { + "metric": "brotli6", + "deltaBytes": 21359, + "allowanceBytes": 1652.25 + } + ] + }, + { + "name": "artplayer", + "member": "package/dist/artplayer.mjs", + "before": { + "sha256": "a1800b37ac7549f52fa960fe28bc6e1c69ec18bd4bc9a7e2534aecc3df10eb3e", + "raw": 208826, + "gzip9": 43868, + "brotli6": 40443 + }, + "after": { + "sha256": "92e4d16a85ae94ac83b2b8a5c16c65c09e7adec4e0a0c4bbc14112ff6fc59331", + "raw": 361484, + "gzip9": 77137, + "brotli6": 70030 + }, + "reviewSignals": [ + { + "metric": "raw", + "deltaBytes": 152658, + "allowanceBytes": 10441.300000000001 + }, + { + "metric": "gzip9", + "deltaBytes": 33269, + "allowanceBytes": 2193.4 + }, + { + "metric": "brotli6", + "deltaBytes": 29587, + "allowanceBytes": 2022.15 + } + ] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5", + "raw": 5121, + "gzip9": 1995, + "brotli6": 1814 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.legacy.js", + "before": { + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "raw": 4973, + "gzip9": 1850, + "brotli6": 1653 + }, + "after": { + "sha256": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359", + "raw": 5153, + "gzip9": 2008, + "brotli6": 1825 + }, + "reviewSignals": [] + }, + { + "name": "artplayer-plugin-chapter", + "member": "package/dist/artplayer-plugin-chapter.mjs", + "before": { + "sha256": "61342a069b84e0731d44a2464d0dfe637d1514d0037c740371fc866c516d2209", + "raw": 7721, + "gzip9": 2126, + "brotli6": 1904 + }, + "after": { + "sha256": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af", + "raw": 7936, + "gzip9": 2392, + "brotli6": 2179 + }, + "reviewSignals": [] + } + ], + "runs": [ + { + "group": 0, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 11, + "readyMs": 496, + "playResolvedMs": 17, + "playbackObservedMs": 188, + "mediaProgress": 0.1514999, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 90, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 332, + "playResolvedMs": 15, + "playbackObservedMs": 183, + "mediaProgress": 0.1521875, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 97, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 308, + "playResolvedMs": 17, + "playbackObservedMs": 186, + "mediaProgress": 0.1533749, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 102, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 303, + "playResolvedMs": 18, + "playbackObservedMs": 199, + "mediaProgress": 0.1656458, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 71, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 320, + "playResolvedMs": 16, + "playbackObservedMs": 218, + "mediaProgress": 0.17941659999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 152, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 336, + "playResolvedMs": 13, + "playbackObservedMs": 198, + "mediaProgress": 0.1588541, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 99, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 318, + "playResolvedMs": 17, + "playbackObservedMs": 186, + "mediaProgress": 0.15893749999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 77, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 313, + "playResolvedMs": 17, + "playbackObservedMs": 198, + "mediaProgress": 0.1678333, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 305, + "playResolvedMs": 16, + "playbackObservedMs": 186, + "mediaProgress": 0.1579374, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 83, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 305, + "playResolvedMs": 16, + "playbackObservedMs": 203, + "mediaProgress": 0.1704166, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 72, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 2, + "readyMs": 288, + "playResolvedMs": 17, + "playbackObservedMs": 213, + "mediaProgress": 0.1632083, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 87, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 302, + "playResolvedMs": 19, + "playbackObservedMs": 199, + "mediaProgress": 0.1669791, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 69, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 358, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 0, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 14, + "readyMs": 227, + "playResolvedMs": 18, + "playbackObservedMs": 218, + "mediaProgress": 0.15487499999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 113, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 6, + "readyMs": 212, + "playResolvedMs": 16, + "playbackObservedMs": 183, + "mediaProgress": 0.1635208, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 82, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 198, + "playResolvedMs": 16, + "playbackObservedMs": 230, + "mediaProgress": 0.1537708, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 113, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 5, + "readyMs": 231, + "playResolvedMs": 16, + "playbackObservedMs": 212, + "mediaProgress": 0.1900208, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 123, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 5, + "readyMs": 207, + "playResolvedMs": 16, + "playbackObservedMs": 246, + "mediaProgress": 0.16674999999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 100, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 199, + "playResolvedMs": 14, + "playbackObservedMs": 214, + "mediaProgress": 0.1698125, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 67, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 230, + "playResolvedMs": 15, + "playbackObservedMs": 202, + "mediaProgress": 0.1796458, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 76, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 203, + "playResolvedMs": 16, + "playbackObservedMs": 263, + "mediaProgress": 0.1725208, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 98, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 197, + "playResolvedMs": 16, + "playbackObservedMs": 248, + "mediaProgress": 0.1758958, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 98, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 201, + "playResolvedMs": 16, + "playbackObservedMs": 248, + "mediaProgress": 0.15152079999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 112, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 229, + "playResolvedMs": 17, + "playbackObservedMs": 218, + "mediaProgress": 0.1517291, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 112, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 215, + "playResolvedMs": 17, + "playbackObservedMs": 186, + "mediaProgress": 0.1549791, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 81, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 359, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 352, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 12, + "readyMs": 231, + "playResolvedMs": 17, + "playbackObservedMs": 216, + "mediaProgress": 0.1518124, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 260, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 5, + "readyMs": 205, + "playResolvedMs": 16, + "playbackObservedMs": 245, + "mediaProgress": 0.163, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 204, + "playResolvedMs": 15, + "playbackObservedMs": 229, + "mediaProgress": 0.15347909999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 208, + "playResolvedMs": 17, + "playbackObservedMs": 247, + "mediaProgress": 0.1703958, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 261, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 221, + "playResolvedMs": 16, + "playbackObservedMs": 247, + "mediaProgress": 0.1699166, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 196, + "playResolvedMs": 16, + "playbackObservedMs": 247, + "mediaProgress": 0.16158329999999999, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 212, + "playResolvedMs": 16, + "playbackObservedMs": 248, + "mediaProgress": 0.1688125, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 207, + "playResolvedMs": 15, + "playbackObservedMs": 214, + "mediaProgress": 0.1536666, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 207, + "playResolvedMs": 17, + "playbackObservedMs": 249, + "mediaProgress": 0.1715833, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 260, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 4, + "readyMs": 205, + "playResolvedMs": 15, + "playbackObservedMs": 245, + "mediaProgress": 0.1514583, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 208, + "playResolvedMs": 16, + "playbackObservedMs": 246, + "mediaProgress": 0.17485409999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 255, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 3, + "readyMs": 198, + "playResolvedMs": 15, + "playbackObservedMs": 248, + "mediaProgress": 0.17445829999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 361, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 357, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 1, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 7, + "readyMs": 225, + "playResolvedMs": 16, + "playbackObservedMs": 245, + "mediaProgress": 0.1812499, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 2, + "readyMs": 195, + "playResolvedMs": 14, + "playbackObservedMs": 245, + "mediaProgress": 0.1609374, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 261, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 203, + "playResolvedMs": 16, + "playbackObservedMs": 247, + "mediaProgress": 0.1540416, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 1, + "readyMs": 181, + "playResolvedMs": 11, + "playbackObservedMs": 257, + "mediaProgress": 0.1786875, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 265, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 4, + "readyMs": 201, + "playResolvedMs": 16, + "playbackObservedMs": 262, + "mediaProgress": 0.1677083, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 262, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 203, + "playResolvedMs": 15, + "playbackObservedMs": 245, + "mediaProgress": 0.17445829999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 261, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 203, + "playResolvedMs": 17, + "playbackObservedMs": 247, + "mediaProgress": 0.15222909999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 262, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 1, + "readyMs": 206, + "playResolvedMs": 16, + "playbackObservedMs": 246, + "mediaProgress": 0.16839579999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 208, + "playResolvedMs": 17, + "playbackObservedMs": 186, + "mediaProgress": 0.1502291, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 254, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 1, + "readyMs": 198, + "playResolvedMs": 18, + "playbackObservedMs": 246, + "mediaProgress": 0.16935409999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 14, + "readyMs": 211, + "playResolvedMs": 17, + "playbackObservedMs": 279, + "mediaProgress": 0.1910624, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 196, + "playResolvedMs": 16, + "playbackObservedMs": 262, + "mediaProgress": 0.18441659999999999, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 260, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 353, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 355, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 364, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 351, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 356, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "published", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/published/artplayer.js", + "/published/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 15, + "readyMs": 193, + "playResolvedMs": 16, + "playbackObservedMs": 231, + "mediaProgress": 0.1511666, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 208, + "playResolvedMs": 17, + "playbackObservedMs": 186, + "mediaProgress": 0.15493749999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 193, + "playResolvedMs": 16, + "playbackObservedMs": 233, + "mediaProgress": 0.16033329999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 2, + "readyMs": 195, + "playResolvedMs": 16, + "playbackObservedMs": 278, + "mediaProgress": 0.18583329999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 1, + "readyMs": 197, + "playResolvedMs": 16, + "playbackObservedMs": 218, + "mediaProgress": 0.1507291, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 2, + "readyMs": 199, + "playResolvedMs": 17, + "playbackObservedMs": 279, + "mediaProgress": 0.19204159999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 260, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 1, + "readyMs": 221, + "playResolvedMs": 18, + "playbackObservedMs": 215, + "mediaProgress": 0.1559583, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 255, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 2, + "readyMs": 196, + "playResolvedMs": 16, + "playbackObservedMs": 259, + "mediaProgress": 0.18612489999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 193, + "playResolvedMs": 16, + "playbackObservedMs": 264, + "mediaProgress": 0.1710416, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 2, + "readyMs": 192, + "playResolvedMs": 16, + "playbackObservedMs": 201, + "mediaProgress": 0.1706458, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 211, + "playResolvedMs": 15, + "playbackObservedMs": 197, + "mediaProgress": 0.1681875, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 55, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 1, + "readyMs": 179, + "playResolvedMs": 14, + "playbackObservedMs": 257, + "mediaProgress": 0.1596874, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 55, + "destroyMs": 260, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 363, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 361, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 359, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 56, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "after": { + "observedMs": 354, + "timers": [ + { + "kind": "timeout", + "delay": 2000 + } + ], + "lateCallbacks": [ + { + "kind": "timeout", + "delay": 200 + } + ], + "lateResizeEvents": 1, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + }, + { + "group": 2, + "variant": "candidate", + "measurements": { + "kind": "performance", + "environment": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "language": "en-US", + "hardwareConcurrency": 8, + "deviceMemory": null, + "devicePixelRatio": 2, + "viewport": { + "width": 1280, + "height": 720 + }, + "visibility": "visible" + }, + "scripts": [ + "/candidate/artplayer.js", + "/candidate/artplayer-plugin-chapter.js", + "/test/performance.js" + ], + "samples": [ + { + "configuration": "core", + "warmup": true, + "round": 0, + "constructorMs": 12, + "readyMs": 223, + "playResolvedMs": 18, + "playbackObservedMs": 201, + "mediaProgress": 0.1738333, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 262, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": true, + "round": 0, + "constructorMs": 3, + "readyMs": 195, + "playResolvedMs": 15, + "playbackObservedMs": 230, + "mediaProgress": 0.15472909999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 1, + "constructorMs": 3, + "readyMs": 193, + "playResolvedMs": 18, + "playbackObservedMs": 248, + "mediaProgress": 0.1677083, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 1, + "constructorMs": 4, + "readyMs": 225, + "playResolvedMs": 17, + "playbackObservedMs": 199, + "mediaProgress": 0.1744166, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 194, + "playResolvedMs": 15, + "playbackObservedMs": 213, + "mediaProgress": 0.1770833, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 262, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 2, + "constructorMs": 3, + "readyMs": 208, + "playResolvedMs": 15, + "playbackObservedMs": 264, + "mediaProgress": 0.1823541, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 3, + "constructorMs": 3, + "readyMs": 221, + "playResolvedMs": 16, + "playbackObservedMs": 215, + "mediaProgress": 0.1537916, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 258, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 3, + "constructorMs": 15, + "readyMs": 223, + "playResolvedMs": 16, + "playbackObservedMs": 199, + "mediaProgress": 0.16895829999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 197, + "playResolvedMs": 15, + "playbackObservedMs": 199, + "mediaProgress": 0.17056249999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 257, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 4, + "constructorMs": 3, + "readyMs": 222, + "playResolvedMs": 17, + "playbackObservedMs": 232, + "mediaProgress": 0.17031249999999998, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 259, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "core", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 208, + "playResolvedMs": 17, + "playbackObservedMs": 184, + "mediaProgress": 0.15222909999999998, + "videoWidth": 640, + "nodes": 113, + "proxyCleanupEntries": 59, + "destroyMs": 256, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + }, + { + "configuration": "chapter", + "warmup": false, + "round": 5, + "constructorMs": 4, + "readyMs": 210, + "playResolvedMs": 16, + "playbackObservedMs": 218, + "mediaProgress": 0.1550625, + "videoWidth": 640, + "nodes": 125, + "proxyCleanupEntries": 59, + "destroyMs": 263, + "afterDestroy": { + "nodes": 0, + "instances": 0, + "proxyCleanupEntries": 0, + "paused": true, + "sourceAttribute": null + } + } + ], + "resources": [ + { + "configuration": "core", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 0, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 364, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 353, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 1, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 358, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "core", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 361, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + }, + { + "configuration": "chapter", + "round": 2, + "useRaf": true, + "before": { + "timers": [ + { + "kind": "timeout", + "delay": 1000 + }, + { + "kind": "raf", + "delay": null + }, + { + "kind": "timeout", + "delay": 2000 + }, + { + "kind": "timeout", + "delay": 200 + } + ], + "proxyCleanupEntries": 60, + "frames": 2, + "proxyCalls": 1 + }, + "immediatelyAfter": [], + "after": { + "observedMs": 360, + "timers": [], + "lateCallbacks": [], + "lateResizeEvents": 0, + "framesAfterDestroy": 0, + "proxyCalls": 1, + "proxyCleanupEntries": 0, + "nodes": 0, + "instances": 0 + } + } + ], + "errors": [], + "unhandled": [], + "visibilityChanges": [], + "remainingInstances": 0 + } + } + ], + "status": "review-required", + "groups": [ + { + "group": 0, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 3, + "max": 5 + }, + "readyMs": { + "count": 5, + "min": 197, + "median": 207, + "max": 230 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 16, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 76, + "median": 100, + "max": 113 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 2, + "median": 4, + "max": 5 + }, + "readyMs": { + "count": 5, + "min": 199, + "median": 203, + "max": 231 + }, + "playResolvedMs": { + "count": 5, + "min": 14, + "median": 16, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 67, + "median": 98, + "max": 123 + } + } + }, + "reviewSignals": [ + { + "configuration": "chapter", + "metric": "destroyMs", + "deltaMs": 27, + "allowanceMs": 17.75 + } + ], + "resourceProfileChanged": true + }, + { + "group": 1, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 3, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 204, + "median": 208, + "max": 221 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 16, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 255, + "median": 258, + "max": 260 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 3, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 196, + "median": 205, + "max": 208 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 15, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 256, + "median": 257, + "max": 261 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + }, + { + "group": 2, + "summary": { + "core": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 3, + "max": 4 + }, + "readyMs": { + "count": 5, + "min": 193, + "median": 197, + "max": 221 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 16, + "max": 18 + }, + "destroyMs": { + "count": 5, + "min": 256, + "median": 257, + "max": 262 + } + }, + "chapter": { + "constructorMs": { + "count": 5, + "min": 3, + "median": 4, + "max": 15 + }, + "readyMs": { + "count": 5, + "min": 208, + "median": 222, + "max": 225 + }, + "playResolvedMs": { + "count": 5, + "min": 15, + "median": 16, + "max": 17 + }, + "destroyMs": { + "count": 5, + "min": 257, + "median": 258, + "max": 263 + } + } + }, + "reviewSignals": [], + "resourceProfileChanged": true + } + ], + "reviewRequired": true + } + } + ], + "logs": { + "ci": { + "file": "refactor/.cache/core22-ci.log", + "sha256": "98685478fa8e88c3caccb5ae7d56904346d89ed971f673476e14991103c5a624" + }, + "setting-build": { + "file": "refactor/.cache/core22-setting-build.log", + "sha256": "873e48de704b20ba45e169da139c20e3e53b416d5c63c2cb9f1b80d79adc31f5" + }, + "setting-i18n": { + "file": "refactor/.cache/core22-setting-i18n.log", + "sha256": "34420acc662bac7dbb076f585e5fbdb513d9730df5ec1120913ce0e4d4e902ee" + }, + "setting-imports": { + "file": "refactor/.cache/core22-setting-imports.log", + "sha256": "1ccda6531a648395c0910a75d234f29c6e7ca3013145bf0d052ce968090ce1d3" + }, + "setting-package": { + "file": "refactor/.cache/core22-setting-package.log", + "sha256": "ae1ae608191ab98ee585725f3f58947a290ab9eac8198ba87b4c5277c12f61ec" + }, + "setting-performance": { + "file": "refactor/.cache/core22-setting-performance.log", + "sha256": "dc7945d06332fcf633e702edbf610c80cd7bbe6157acfa0c7997826418819fda" + } + }, + "limits": [ + "Browser regressions are focused; complete current-artifact modern/legacy acceptance remains outstanding.", + "Navigation operation counts are not constructor timing or bundle-size improvements. The timed fixture has default settings disabled.", + "ENG-PERF-01 and ENG-PERF-02 remain open. Timing results include constructor and teardown review signals.", + "No physical device, heap/GPU leak, external SDK, remote CI or release validation is implied." + ] +} diff --git a/refactor/build-analysis.md b/refactor/build-analysis.md index 9b398a8c7..6aab662ab 100644 --- a/refactor/build-analysis.md +++ b/refactor/build-analysis.md @@ -33,3 +33,26 @@ scripts/build-analysis.mjs 负责报告;projects.js 解析只对 build 有效 目录迁移会改变分组,例如 display 从旧 player 中移出,不能只按新目录的正增量计算功能成本。当前最大源码模块是 setting/render.ts,报告中的模块 code 为 11933 UTF-8 字节;Rollup 记录的渲染长度为 11598 代码单元。后续审查应结合它的失败回滚、更新冲突、挂载回调和焦点契约,不能为减小体积删除已有回归所保护的路径。 没有发现 TS、c8、Playwright 或 Vite 运行时进入核心产物。此轮仅完成归因工具和证据,尚未优化生产行为;ENG-PERF-01/02 保持 open,CORE-22 继续审查可避免的开销和构造耗时。不要把解释了来源等同接受了全部成本。 + +## CORE-22 构造/销毁热点定位 + +使用固定 Node 和已有 Playwright,运行 `node refactor/scripts/profile-core-layout.mjs`。 +它启动自身拥有的 8086 本地测试服务和 headless Chromium,加载当前源码的未压缩构建, +先预热 10 次,再对 60 次构造、真实本地视频 ready/play/首个解码帧及销毁进行 CPU 采样。 +产物、manifest、原始 cpuprofile、分组摘要及服务日志保存在 refactor/.cache/core22-profile-*。 +脚本在 finally 中关闭浏览器和自身服务,没有使用连接的 Chrome,也没有新依赖或修改正式性能夹具。 + +只有调用栈位于 constructProfilePlayer / destroyProfilePlayer 内的样本才计入对应分组; +其余样本独立统计。请求采样间隔 100 微秒不表示平台实际达到该分辨率,采样空隙和原生调用 +可能计入 JS 调用方。摘要中的耗时是带分析器的诊断数据,不得拿来替代未插桩的新旧配对门槛。 + +两次修改前采样均把 control/layout.ts 的初始 update 定位为构造热点。它在控件 DOM 创建后 +同步读取 offsetHeight,之后还会收到 ResizeObserver 的初始通知。现在原生 observer 路径 +使用首次布局通知完成测量,避免在后续构造 DOM 写入前额外强制布局;显式 resize 仍同步, +缺少 ResizeObserver 时仍立即测量。新增浏览器用例先复现一次同步读取,修改后三引擎为零, +并检查首轮渲染的窄屏高度、字幕偏移、fallback 和首次通知前销毁。修改后采样不再在构造栈 +出现该 update 热点,这一事实不等于整个播放器已经达到性能发布门槛。 + +销毁采样主要落在原生 video.load() 和模板 DOM 移除,资源作用域清理占比较低。 +保留 reset 的 removeAttribute('src') / load 顺序:不能为了缩短同步计时留下媒体资源, +也不能把清理挪到计时窗口外制造收益。原始计时波动仍须通过正式配对与后续 MOD-03/REVIEW-01 复核。 diff --git a/refactor/changes/2026-09-11-CORE-22-core-acceptance.md b/refactor/changes/2026-09-11-CORE-22-core-acceptance.md index a5d40f37f..00bc111e1 100644 --- a/refactor/changes/2026-09-11-CORE-22-core-acceptance.md +++ b/refactor/changes/2026-09-11-CORE-22-core-acceptance.md @@ -1,6 +1,6 @@ # CORE-22 核心阶段完整验收 -起点为 ENG-08 提交 4a9a26d4,工作区干净,CORE-21/23、PILOT-01、ENG-08/10 前置均已完成。本任务尚在实施,不能视为核心或 npm 发布验收完成。 +首轮起点为 ENG-08 提交 4a9a26d4;ENG-11 提交 5efc7f76 后恢复核心验收。下文保留实施过程,最终阶段结论见文末。核心阶段不等于全项目或 npm 发布验收。 首先处理 ENG-PERF-01/02:确认核心体积增长的源码/构建来源,保留旧版与候选真实字节和相同格式;对间歇构造耗时继续同环境配对取证。不得通过提高阈值、删除兼容功能或忽略采样差异让报告通过。 @@ -13,3 +13,62 @@ 可复用的正式构建分析从本任务拆为 ENG-11,下游依赖已更新;在该前置交付前本任务暂回 todo,保留初步工作,不重复宣称工具实现。当前三格式产物没有变化。详见 [归因说明](../build-analysis.md) 和 [完整数据](../baselines/bundle-attribution.json)。 同工具链下,起点源码构建现代包 gzip 为 35703 字节,当前为 58374 字节;主要增量仍来自实现而非换编译工具。已提交产物对照中,键盘/焦点、设置树和显示模式三阶段合计约占净 gzip 增量六成。接下来审查这些模块的可避免开销与构造耗时,不删除已有回归保护的兼容、清理和错误恢复路径。 + +## 设置导航:减少重复 DOM 工作 + +ENG-11 提交 5efc7f76 后恢复 doing。本阶段修改两个生产 TS 模块,不改变公共入口、回调、点击语义或声明。`keyboard.ts` 在读取条目和布局前排除无关按键;`keyboard-focus.ts` 为仍在活动面板内且可聚焦的 preferred 元素直接复核可用性,免去第二次全表扫描。若元素失效或只是包装节点,仍走原来的后代/选中项回退路径。每次按键仍重新读取条目,不跨事件缓存。断开、禁用、inert、无布局盒的元素先被排除,再读取计算样式。 + +40 个原生按钮的真实 Chromium 修改前证据显示:正常向下导航调用两次 querySelectorAll、80 次 getComputedStyle;修改后三引擎均为一次扫描、41 次样式读取。无关字符键从一次扫描/39 次样式读取变为零。浏览器测试还验证即时隐藏、inert、原生 disabled、tabindex=-1、恢复和公开 remove 后的实际焦点。记录的是操作次数,不据此估算毫秒收益。原有嵌套面板、更新失败恢复、原生范围、暂停作用域等回归保留。 + +构建后的现代包为 208030 raw / 58429 gzip9 字节;与 ENG-08 的 207875 / 58374 相比增加 155 / 55 字节。legacy 为 212211 / 59683,ESM 为 361484 / 77137。该小幅代码成本换取避免重复扫描,不能算作体积优化;ENG-PERF-01 仍 open。架构说明同步到包内 ARCHITECTURE.md。产物全部由正式 build 和 build:i18n 生成,没有手改产物或公开声明。 + +新安装包 run-UElxNR 的三引擎配对均完整,54 次候选资源清理探针通过。Chromium 第一组 core/chapter 销毁分别增加 3.1/2.5 ms,第三组 chapter 构造增加 2.8 ms;WebKit 第一组 chapter 销毁从 71 到 98 ms,其他组未重复该销毁信号;Firefox 本轮没有计时信号。固定计时夹具使用默认关闭的设置面板,不能把这些波动归因于本次导航路径。原始样本保留,ENG-PERF-02 扩展为构造及销毁计时待复核,门槛不变。 + +阶段证据见 [设置导航与配对报告](../baselines/core-setting-navigation-partial.json)。本阶段不是 CORE-22 完整验收;完整安装包浏览器矩阵、核心差异结论以及性能归因仍未完成。不复用上一任务的全量结果宣称当前源码已全部通过。本任务完成时再统一独立提交;当前没有新的完成任务,也没有 push/tag/publish/merge。 + +验证:完整本地 CI 476 项(440 单元、11 工程、25 基线),249 个生产 TS 严格检查通过;源码构建三引擎设置/网页全屏/快捷键组合 327 项通过。新安装包 34 个运行时、5 组旧类型、8 组精确类型通过;107 个工作区 dist/types 文件以及三份 docs/compiled 核心产物与安装包相同。三个导入检查通过,安装包 modern 与 legacy 的设置键盘专项各 36 项通过,均无失败、重试或跳过。未为本次小改动重复宣称覆盖率测量或远端 CI 成果。 + +## 构造布局测量与最终核心阶段验收 + +两次真实 Chromium CPU 采样将默认构造热点定位到 control/layout.ts 的同步 offsetHeight 读取。 +支持 ResizeObserver 时现在使用其首次布局通知,在构造剩余 DOM 写入后测量;旧环境立即测量, +显式 resize 仍同步。修改前的原生 observer 探针稳定记录一次同步读取,修改后为零,三引擎 +15 项初始布局、fallback、窄屏/字幕位置和首次通知前销毁检查通过。最初的 fallback 测试在字幕 +CSS 过渡未结束时断言最终位置,已改为等待实际状态,保留原失败报告,没有改变位置门槛。 + +两次修改后 CPU 采样不再在构造栈出现该 update 热点。诊断脚本已保存到 +refactor/scripts/profile-core-layout.mjs,明确限定为 Chromium 未压缩源码构建的带分析器定位, +不是新旧性能门槛。Chromium 销毁采样主要落在原生 load 和 DOM 移除;保留释放顺序,不能将其 +延后到计时区间外。WebKit 的销毁信号不能仅用 Chromium 调用栈解释。 + +最终安装包 run-vynq7l 的结果如下,详见 [最终冻结证据](../baselines/core-acceptance-validation.json): + +| 验收项 | 结果与范围 | +| --- | --- | +| 源码与声明 | 自有核心源码 TS 迁移完成,249 个生产 TS(含 chapter)严格检查,37 个生成核心声明无漂移;唯一保留的 src JS 是有来源记录的 screenfull | +| 本地 CI | 476 项:440 单元、11 工程、25 基线;新增诊断脚本另行 lint 和实际执行通过 | +| 安装包消费 | 34 运行时、5 组旧类型、8 组精确类型通过;107 个工作区分发/声明文件及三份 docs 核心产物与安装包匹配,三个导入检查通过 | +| 完整浏览器矩阵 | modern 1761、legacy 1761;每种格式每引擎 587 项,零失败/重试/跳过;真实媒体、核心 Monaco、已有 chapter 四组合和自定义插件均包含在当前套件 | +| 最新覆盖率 | 224 运行时文件、26 明确排除,四个关键生命周期/操作文件的行/分支/函数均 100%;全体 Node 行 60.90%、分支 86.55%、函数 66.62%,不与浏览器数量合并为覆盖率 | +| 性能/资源 | 每引擎三组正式配对均完成,54 次候选资源探针通过;本轮三引擎均无构造计时信号,Chromium/Firefox 无任何计时信号,WebKit 两组销毁仍超阈值 | +| 分发体积 | 现代 208037 raw / 58434 gzip9 / 53372 Brotli6;legacy 212218 / 59686 / 54412;ESM 361496 / 77141 / 70030。相较 ENG-08,现代增加 60 gzip 字节,不能称作体积缩减 | + +SDK-12 的实际同步集成范围已补齐:固定 option-validator 2.0.6 与文件哈希,真实新旧安装包 +验证正常/非法配置、首错、挂载前失败、容器复用、媒体 ready/customType 和销毁;纯同步依赖本身 +不创建网络、切源任务或设备资源。它的直接测试范围与核心完整矩阵对应,不套用外部媒体 SDK 的 +设备/网络门槛,也不声称已经审核整个第三方项目。 + +CORE-22 完成核心结构、兼容差异处置和当前固定消费者的自动化阶段。具体 API-01 至 API-12 +入口及旧声明/切源/生命周期差异的结论见 [核心验收范围](../core-acceptance.md)。现有方法、类型 +兼容入口、事件/Promise、DOM/CSS hooks 和包分发回归通过;新派生控件高度值的首次测量时机有 +明确说明和浏览器验证。没有把 chapter 或受控能力场景当作所有插件/物理设备通过。 + +ENG-PERF-01/02 保持 open,由 MOD-03 和 REVIEW-01 继续复核:本轮 WebKit 第一组 chapter +销毁增加 44 ms,第二组 core 增加 30 ms,第三组未触发;保存全部样本,不将其归为已证明的主机 +噪声。体积增长虽已归因,仍需后续性能与发布复盘处理。此阶段交付不放宽阈值、不豁免发布,也 +不删除后续性能依赖。全插件/外部 SDK、EX/SITE、物理设备、完整 CI/CD、各包 major 和三轮复盘 +仍由原任务负责;完整目标继续推进。 + +本任务以独立本地 commit 交付,包含三处生产模块改进、回归、正式生成产物、诊断脚本、风险和 +文档/状态。回退时整体 revert 本任务 commit,保留其父提交 5efc7f76 的运行时/产物对应关系, +不要只回退 TS 或只回退 dist。提交 SHA 在提交后由 Git 核对;没有 push/tag/publish/merge。 diff --git a/refactor/core-acceptance.md b/refactor/core-acceptance.md new file mode 100644 index 000000000..4c5eb5e82 --- /dev/null +++ b/refactor/core-acceptance.md @@ -0,0 +1,59 @@ +# 核心阶段验收范围 + +CORE-22 汇总核心自有源码、公开声明、生成产物和当前固定消费者的自动化证据。 +本文件不能作为全部生态包或 npm 发布放行。实际执行结果、源码/产物指纹和剩余事项见 +[交付记录](changes/2026-09-11-CORE-22-core-acceptance.md);任务状态以 tasks.json 为准。 + +## 契约与回归入口 + +| 契约 | 本阶段检查与可重跑入口 | 明确边界 | +| --- | --- | --- | +| API-01 构造/配置 | options、initialization、entry 单元测试;浏览器 options、initialization、template-resources;实际 option-validator 2.0.6 | 保留 getter 读取、默认值、容器身份、错误种类/首错、挂载前失败与回滚;非浏览器构造仍抛错 | +| API-02/03 属性与返回 | playback-properties、facade-properties、public-behavior;浏览器 declarations、runtime-types、initialization;安装 runtime.cjs | 保留描述符、绑定/身份、同步返回及 Promise;只写命令不虚构 getter | +| API-04 事件 | emitter、media-events、listener-registry、event-scheduling、source 及对应浏览器用例 | 比较实际语义顺序与 payload,不冻结浏览器媒体时钟或平台允许的原生事件差异 | +| API-05 生命周期 | resource-scope、instance-lifecycle、initialization;全部浏览器销毁/回滚用例;正式性能资源探针 | 包含多实例、失败构造、连续操作及延迟回调;不等于原生 heap/GPU 泄漏认证 | +| API-06/07 扩展 | plugins、component/setting 的正常/异常/重入用例;published/current chapter 四组合;安装旧插件类型消费者 | 可控自定义插件和 chapter 已有固定发布基线;其余插件的实际 SDK 组合由各包 01/05 步补齐 | +| API-08 DOM/CSS | components、setting 系列、display 系列、字幕/缩略图/截图、accessibility 系列 | 保留原 hooks、鼠标/点击入口,新增键盘和焦点行为;UA/触摸模拟不代表物理设备验收 | +| API-09/10 分发/浏览器 | 隔离 tarball 安装、UMD/AMD/global/CJS/ESM/legacy/i18n/runtime 入口,modern/legacy 三引擎完整矩阵 | es2015 语法不为 WebCodecs/PiP 等能力提供 polyfill;正式目标版本由 REL-09/02 再验 | +| API-11 类型 | check:types、249 个生产 TS 文件严格检查、五组旧消费者、八组精确消费者、真实 Monaco worker 用例 | 旧根入口保留 TS 4.3.5 及历史可编译赋值;可选 runtime 入口提供准确类型且复用原 JS 构造器 | +| API-12 持久状态/资源 | storage、source、subtitle、thumbnails、gesture 单元与浏览器回归 | 保留存储格式和调用方 URL 所有权;远端 SDK/服务协议仍须由对应包验证 | + +统一命令是 yarn ci:check、yarn test:package、指定该安装包 ARTPLAYER_BROWSER_ARTIFACTS 的 +yarn test:browser,以及同一安装包的 yarn test:performance。legacy 必须映射安装后的 +*.legacy.js,不能让测试服务回退到源码。原始冻结报告中的历史结果不自动覆盖新源码。 + +## 已处置的兼容差异 + +- 旧切源 Promise 被替代或销毁后以 undefined 兑现,避免新增 AbortError;当前源的真实失败仍拒绝。 + Promise 结束不表示该源曾激活,调用方继续通过 URL/媒体事件确认。见 CORE-09 交付记录。 +- 同步插件注册仍同步可见;销毁后延迟结果不再写回实例。重复销毁、失败挂载、移除后的监听器和 + 过期异步 UI 更新属于已复现缺陷修正,不是新公开调用形式。 +- root 类型保留历史接受范围,可选 artplayer/runtime 精确描述真实返回、访问器和事件数组。 + 不使用交叉返回伪装矛盾,也不包装运行时 Promise。见 core-public-types.md 与包内 types/COMPATIBILITY.md。 +- 新键盘/焦点和窄屏布局保持原类名、模板、点击回调及普通快捷键。设置树的资源归属、更新回滚和 + 显示模式恢复保护真实重入/异常路径,不为压缩体积删除这些已被回归用例约束的行为。 +- --art-controls-height 是此次重构增加的派生布局值。原生 ResizeObserver 下改在首次布局通知填充, + CSS 继续使用单行高度 fallback;旧环境及显式 resize 仍同步测量。它不是对历史公开 API 的删改。 + +## 性能处置和继续实施条件 + +模块归因确认主要体积增长来自键盘/焦点、设置树和显示模式的能力及异常路径,TS 与测试工具没有 +进入运行时包。CORE-22 已移除设置导航的重复扫描和构造中的一次强制控件布局;不夸大其收益, +也不将原始 gzip/计时阈值上调。native load/DOM 销毁成本不通过异步延迟清理转移出计时区间。 + +ENG-PERF-01/02 的后续核心性能工作归 MOD-03,并在 REVIEW-01 重新审查。它们保持 open, +表示不能批准发布,也不能宣称性能已经全面达标;保留相同设备媒体三组配对和原始样本。 +核心结构及兼容自动化阶段的交付不删除这些任务、风险或后续依赖。 + +## 仍需全项目完成的范围 + +- 各 PKG-*-01/05/06:完整发布基线、支持范围旧核心/新插件、新核心/旧插件、SDK/组合/分发; + chapter 的本轮四组合不能代替所有包,也不能代替它自己的最终进度/质量/全屏组合任务。 +- EX-01/02/03 与 SITE:React/Vue、全部 demo/在线编辑器及远端资源;核心 Monaco 场景不是全站验收。 +- REL-03、REVIEW-02:物理 Apple/Android、原生 PiP/AirPlay/方向/触摸、外部 SDK、codec/模型及压力环境。 +- ENG/MOD 后续任务:完整 GitHub CI/CD、覆盖/提交索引、剩余脚本、性能优化及工具链采用决策。 +- REL-09/02 和 REVIEW-01/02/03:逐包下一个 major、最终 tarball、三轮全项目复盘及发布批准。 + +包内 ARCHITECTURE.md 是实际源码地图;本目录保存迁移与验收记录。 +核心 src 下唯一保留的 JS 为有来源记录的第三方 screenfull 文件,不能冒充待迁移的自有实现, +也不能把本阶段完成理解为全部 22 包已迁移。 diff --git a/refactor/plan.md b/refactor/plan.md index d363fa1b8..072711a15 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -4,7 +4,7 @@ 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 215 项,范围 22 个包及工作区/示例。 -状态:todo 155 / doing 0 / blocked 0 / done 60 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 154 / doing 0 / blocked 0 / done 61 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -127,7 +127,7 @@ | CORE-20 | artplayer
收敛核心入口与依赖方向 | CORE-14, CORE-15, CORE-18, CORE-19 | Artplayer 门面、初始化依赖与最终目录 | 所有核心自有源码迁移,公开描述符/静态接口/事件差分通过 | H | done | | CORE-21 | artplayer
生成核心声明并校验包内容 | CORE-20, ENG-07 | 由 TS 生成的既有入口声明与三种发布产物 | 内部类型不泄漏,旧 JS/TS 消费者与 i18n 通过;逐项完成 CORE-07 留下的 BASE-TYPE-04/05/07 声明方案,旧合法消费者与实际返回分别留证;不能以虚假的交叉返回类型或改变运行时来掩盖冲突,未决项阻止核心声明出口;处理 CORE-10 / BASE-TYPE-08 的 setter-only 属性虚构 getter 声明,并复核 PlaybackControls 精确视图与旧 toggle 声明共存策略 | H | done | | CORE-23 | artplayer
检查并补齐键盘、焦点与可访问名称 | CORE-13, CORE-14, CORE-17, ENG-05, BASE-04 | 主要控件/设置/模式退出的键盘与焦点回归、名称和字幕可用性检查及必要兼容修正 | 保持旧快捷键和 DOM/CSS 钩子;真实浏览器验证,不以静态属性检查代替交互;处理 BASE-DOM-01 的主要控件 Tab 不可达,保留既有名称与快捷键 | H | done | -| CORE-22 | artplayer
核心阶段完整验收 | CORE-21, CORE-23, PILOT-01, ENG-08, ENG-10, ENG-11 | 核心与旧插件的可自动化完整回归、资源/性能及明确外部验证缺口 | 核心自动化和公开差异处置通过;真实环境缺口链接包集成/REL 门槛,阶段完成不代表可公开发布 | H | todo | +| CORE-22 | artplayer
核心阶段完整验收 | CORE-21, CORE-23, PILOT-01, ENG-08, ENG-10, ENG-11 | 核心与旧插件的可自动化完整回归、资源/性能及明确外部验证缺口 | 核心自动化和公开差异处置通过;真实环境缺口链接包集成/REL 门槛,阶段完成不代表可公开发布 | H | done | ## 5 包迁移:artplayer-plugin-chapter @@ -460,7 +460,7 @@ - CORE-20: [记录](changes/2026-09-11-CORE-20-entry.md) [记录](baselines/entry-validation.json) - CORE-21: [记录](changes/2026-09-11-CORE-21-public-declarations.md) [记录](baselines/core-declarations-validation.json) [记录](core-public-types.md) [记录](typechecking.md) - CORE-23: [记录](changes/2026-09-11-CORE-23-keyboard-focus.md) [记录](baselines/keyboard-validation.json) -- CORE-22: [记录](changes/2026-09-11-CORE-22-core-acceptance.md) 初步体积归因已执行;先独立交付新增前置 ENG-11 分析工具,再恢复核心完整验收。 +- CORE-22: [记录](changes/2026-09-11-CORE-22-core-acceptance.md) [记录](baselines/core-setting-navigation-partial.json) [记录](core-acceptance.md) [记录](baselines/core-acceptance-validation.json) - PKG-CHAPTER-01: [记录](changes/2026-09-10-PKG-CHAPTER-01-contract.md) [记录](baselines/chapter-contract.md) - PKG-CHAPTER-02: [记录](changes/2026-09-10-PKG-CHAPTER-02-tests.md) [记录](baselines/chapter-validation.json) - PKG-CHAPTER-03: [记录](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md) [记录](baselines/chapter-migration-validation.json) diff --git a/refactor/progress.md b/refactor/progress.md index 0159e8ab9..333d49037 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,29 @@ # 进度与证据 +## 最新完成:CORE-22 核心结构与兼容自动化验收 + +核心阶段完成,完整目标继续覆盖全部 22 包。本任务在设置导航优化之外,按实际 CPU 热点移除了原生 ResizeObserver 环境中构造时的额外控件布局读取;首次布局结果、fallback、窄屏字幕与销毁都有三引擎回归。三个生产 TS 模块、生成产物、诊断脚本及包内架构说明同步交付。 + +最终安装包 run-vynq7l:modern/legacy 全量各 1761 项(每引擎 587 项)通过,零失败/重试/跳过;34 个运行时、5 组旧类型、8 组精确类型通过,107 个分发/声明文件与三份 docs 核心产物匹配。完整 CI 476 项、249 个生产 TS 严格检查和三个导入检查通过。最新 Node 覆盖率四个关键文件的行/分支/函数均 100%,总体行 60.90%;浏览器数量不合并为覆盖率。 + +新三引擎三组配对均完整,54 次候选资源清理通过,本轮没有构造计时信号;WebKit 第一组 chapter 销毁增加 44 ms、第二组 core 增加 30 ms,仍需复核。现代 gzip 58434 字节,体积风险保持开放。ENG-PERF-01/02 由 MOD-03/REVIEW-01 接续,不改变历史阈值或豁免发布。SDK-12 的同步 validator 集成范围已补齐并关闭;其余插件、外部 SDK、真机、全站/消费者、完整 CI/CD、逐包 major 和三轮复盘仍待原任务完成。 + +见 [核心验收范围](core-acceptance.md)、[最终证据](baselines/core-acceptance-validation.json) 和 [实施记录](changes/2026-09-11-CORE-22-core-acceptance.md)。当前 61 done、154 todo;本任务独立本地 commit,提交后以 Git 核对。下一步 PKG-HLS-01,先固定 HLS control 的发布契约,再迁移与验证该插件;不把当前 chapter 四组合当作全部旧插件已通过。没有 push/tag/publish/merge。下方记录保留各阶段当时的状态。 + +## 当前实施:CORE-22 设置导航优化与新安装包复核 + +已修改设置键盘与焦点 TS 模块:无关按键不再扫描面板;选定目标实时复核后直接聚焦,保留失效目标的原回退。40 按钮探针的正常导航从两次扫描/80 次样式读取降至一次/41 次;三引擎结果一致,动态隐藏/inert/禁用/tabindex、恢复及移除后的实际焦点通过。没有跨事件缓存或公开 API/声明变更。 + +完整本地 CI 476 项、249 个生产 TS 文件通过;设置/布局/所有权/交互/网页全屏/快捷键三引擎组合 327 项通过。新安装包 run-UElxNR 通过 34 运行时、5 组旧类型、8 组精确类型,107 个工作区分发/声明文件和三份 docs 产物与安装包匹配;三个导入检查通过。安装包 modern/legacy 的设置键盘专项各 36 项通过,无失败、重试或跳过。这些是专项证据,不是当前产物的全量浏览器验收。 + +现代包 gzip 为 58429 字节,比 ENG-08 增加 55 字节;减少重复 DOM 工作不等于体积优化。新三引擎三组配对均完整,54 次候选资源清理通过,但 Chromium 个别组有构造/销毁信号,WebKit 一组有销毁信号;Firefox 本轮无计时信号。固定计时夹具默认关闭设置面板,不能用这组计时解释导航改动的收益。已保留样本,并将 ENG-PERF-02 扩展为构造及销毁计时待复核;两个性能风险继续 open。 + +详见 [阶段冻结证据](baselines/core-setting-navigation-partial.json) 与 [实施记录](changes/2026-09-11-CORE-22-core-acceptance.md)。下一步继续默认构造/销毁路径的实际开销归因、设置树/显示模式的可避免体积审查,再完成核心公开差异与新安装包全量矩阵。CORE-22 仍 doing,60 done、1 doing、154 todo;本任务尚未验收完成,无新的完成 commit,未推送或发布。 + +## 当前实施:CORE-22 恢复核心完整验收 + +ENG-11 提交 5efc7f76 已核实,三个格式的核心产物字节未变。CORE-22 的新增前置已完成,恢复 doing;60 done、1 doing、154 todo。接下来审查设置树/显示模式开销、间歇构造耗时和核心完整兼容性,现有两项性能风险仍 open。 + ## 最新完成:ENG-11 构建归因;CORE-22 保留待验收 新增正式构建 --analyze 开关,三个格式的产物字节不变,报告仅写本地缓存。实际构建夹具覆盖 TS/JS/Less/SVG/worker,并验证分析前后内容和清单一致。476 项 CI 通过,最终报告计量修正后另跑 lint 与实际构建测试通过;当前核心三格式均与 ENG-08 指纹一致。 diff --git a/refactor/risk-table.md b/refactor/risk-table.md index c25239a0e..0d108bf96 100644 --- a/refactor/risk-table.md +++ b/refactor/risk-table.md @@ -4,8 +4,8 @@ | ID | 状态 / 证据等级 | 条目 | 后续任务 | | --- | --- | --- | --- | -| ENG-PERF-01 | open / 源码/产物事实 | Candidate core bundles exceed the BASE-06 size review threshold in all three formats | CORE-22, REVIEW-01 | -| ENG-PERF-02 | open / 待取证 | Intermittent constructor timing signals require follow-up paired measurement | CORE-22, REVIEW-01 | +| ENG-PERF-01 | open / 源码/产物事实 | Candidate core bundles exceed the BASE-06 size review threshold in all three formats | CORE-22, MOD-03, REVIEW-01 | +| ENG-PERF-02 | open / 待取证 | Intermittent constructor and destruction timing signals require follow-up paired measurement | CORE-22, MOD-03, REVIEW-01 | | BASE-LIFE-06 | resolved / 已复现 | Published switch leaves an unhandled rejection and an unsettled promise when resume fails | CORE-09 | | BASE-LIFE-01 | resolved / 已复现 | Superseded switch resolves along with the latest source | CORE-09 | | BASE-LIFE-02 | resolved / 已复现 | Switch remains unsettled during the bounded observation after destroy | CORE-09 | @@ -44,7 +44,7 @@ | SDK-09 | open / 待取证 | jassub-worker-wasm-fonts 实际集成验证范围 | PKG-JASSUB-01, PKG-JASSUB-05 | | SDK-10 | open / 待取证 | mediabunny 实际集成验证范围 | PKG-MB-01, PKG-MB-09 | | SDK-11 | open / 待取证 | asr-caller-service 实际集成验证范围 | PKG-ASR-01, PKG-ASR-05, EX-03 | -| SDK-12 | open / 待取证 | option-validator 实际集成验证范围 | CORE-01, CORE-07 | +| SDK-12 | resolved / 源码/产物事实 | option-validator 实际集成验证范围 | CORE-01, CORE-07, CORE-22 | | BUILD-AMD-01 | resolved / 已复现 | AMD 全局导出补丁误将固定参数 t 当作全局对象 | ENG-06 | | UTIL-MERGE-01 | resolved / 已复现 | mergeDeep lets a JSON __proto__ key replace the result prototype | CORE-01 | | UTIL-DOWNLOAD-01 | resolved / 源码/产物事实 | Temporary download anchor remains if click throws | CORE-01 | diff --git a/refactor/risks.json b/refactor/risks.json index a8b651602..f3dfe0633 100644 --- a/refactor/risks.json +++ b/refactor/risks.json @@ -12,34 +12,44 @@ "status": "open", "owners": [ "CORE-22", + "MOD-03", "REVIEW-01" ], "evidence": [ "refactor/coverage-performance.md", "refactor/baselines/quality-validation.json", - "refactor/changes/2026-09-11-ENG-08-quality-reports.md" + "refactor/changes/2026-09-11-ENG-08-quality-reports.md", + "refactor/baselines/core-setting-navigation-partial.json", + "refactor/changes/2026-09-11-CORE-22-core-acceptance.md", + "refactor/core-acceptance.md", + "refactor/baselines/core-acceptance-validation.json" ], "compatibleResolution": "Attribute the growth to actual modules and build output, remove avoidable overhead while preserving APIs, and document any justified remaining cost against matching published entries.", "closureCriteria": "Fresh isolated artifacts have reproducible raw/gzip9/Brotli6 results and an explicit size review; do not raise or overwrite the historical threshold to pass.", - "workspaceState": "First ENG-08 modern core measurement: 134037 to 207875 raw bytes, 35486 to 58374 gzip9, 32533 to 53326 Brotli6. Chapter remains below the combined relative/absolute review threshold. This is a review requirement, not a release approval." + "workspaceState": "First ENG-08 modern core measurement: 134037 to 207875 raw bytes, 35486 to 58374 gzip9, 32533 to 53326 Brotli6. Chapter remains below the combined relative/absolute review threshold. This is a review requirement, not a release approval. CORE-22 navigation phase: 208030 raw / 58429 gzip9 / 53361 Brotli6 modern bytes. Preferred-target revalidation removes a second panel scan at a cost of 55 gzip bytes over ENG-08; it does not resolve total bundle growth. Final CORE-22: modern 208037 raw / 58434 gzip9 / 53372 Brotli6; legacy 212218 / 59686 / 54412; ESM 361496 / 77141 / 70030. Navigation and initial-layout work were reduced, but total size remains above the historical threshold. MOD-03 and REVIEW-01 must review this before release." }, { "id": "ENG-PERF-02", - "title": "Intermittent constructor timing signals require follow-up paired measurement", + "title": "Intermittent constructor and destruction timing signals require follow-up paired measurement", "confirmation": "unverified", "status": "open", "owners": [ "CORE-22", + "MOD-03", "REVIEW-01" ], "evidence": [ "refactor/coverage-performance.md", "refactor/baselines/quality-validation.json", - "refactor/changes/2026-09-11-ENG-08-quality-reports.md" + "refactor/changes/2026-09-11-ENG-08-quality-reports.md", + "refactor/baselines/core-setting-navigation-partial.json", + "refactor/changes/2026-09-11-CORE-22-core-acceptance.md", + "refactor/core-acceptance.md", + "refactor/baselines/core-acceptance-validation.json" ], - "compatibleResolution": "Repeat paired measurements on the same environment, distinguish initialization work from host jitter, and optimize only after identifying a reproducible cost.", + "compatibleResolution": "Repeat paired measurements on the same environment, distinguish initialization and teardown work from host jitter, and optimize only after identifying a reproducible cost.", "closureCriteria": "Explain repeat-group timing signals with retained samples and source fingerprints; do not infer a regression or improvement from a single group or expand timing allowances.", - "workspaceState": "First ENG-08 run: Firefox group 2 had core/chapter constructor delta 3/5 ms, WebKit group 3 chapter delta 3 ms, versus 2 ms absolute allowance. Other groups did not trigger. Candidate resource checks passed independently. Final run: Chromium/Firefox had no timing signals; WebKit group 1 core/chapter each increased 3 ms, with no signals in the other two groups. The intermittent review remains open." + "workspaceState": "First ENG-08 run: Firefox group 2 had core/chapter constructor delta 3/5 ms, WebKit group 3 chapter delta 3 ms, versus 2 ms absolute allowance. Other groups did not trigger. Candidate resource checks passed independently. Final run: Chromium/Firefox had no timing signals; WebKit group 1 core/chapter each increased 3 ms, with no signals in the other two groups. The intermittent review remains open. CORE-22 navigation phase: Chromium group 1 core/chapter destroy deltas 3.1/2.5 ms and group 3 chapter constructor delta 2.8 ms; WebKit group 1 chapter destroy delta 27 ms (71 to 98 ms); Firefox has no timing signals. Other groups do not reproduce those destroy signals. All 54 candidate resource probes pass. The timed fixture uses default settings disabled, so these measurements do not establish any timing effect from setting navigation changes. Final CORE-22: no constructor timing signals in any of the three engines; Chromium/Firefox have no timing signals. WebKit group 1 chapter destruction delta 44 ms and group 2 core delta 30 ms remain, group 3 has no signal. All 54 candidate resource probes pass. Chromium sampling identifies native load/DOM teardown cost but does not establish the cause of WebKit signals. MOD-03/REVIEW-01 retain the open review without changing allowances." }, { "id": "BASE-LIFE-06", @@ -761,18 +771,29 @@ { "id": "SDK-12", "title": "option-validator 实际集成验证范围", - "confirmation": "unverified", - "status": "open", + "confirmation": "source-observed", + "status": "resolved", "owners": [ "CORE-01", - "CORE-07" + "CORE-07", + "CORE-22" ], "evidence": [ "packages/artplayer/src/index.ts", - "packages/artplayer/src/option/resolve.ts" + "packages/artplayer/src/option/resolve.ts", + "test/options.test.js", + "test/browser/options.spec.js", + "test/browser/initialization.spec.js", + "refactor/baselines/core-acceptance-validation.json" ], "compatibleResolution": "Bundled validation dependency; preserve validation/default/merge behavior and failure cleanup when typing constructor boundaries.", - "closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。" + "closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。", + "resolutionEvidence": [ + "refactor/baselines/core-acceptance-validation.json", + "refactor/core-acceptance.md", + "refactor/changes/2026-09-11-CORE-22-core-acceptance.md" + ], + "resolutionRationale": "option-validator 2.0.6 is a bundled synchronous dependency with recorded file hash and lock/version evidence. Current and published real-browser consumers retain default/merge identity, callback behavior, exact invalid-option errors before mounting, subsequent container reuse and destruction; modern/legacy full matrices and current unit tests passed. The dependency itself has no source-switch, network or physical-device lifecycle, so those external-SDK conditions do not apply; player media lifecycle is covered by the core matrix. This closes its integration scope, not an independent audit of the upstream project." }, { "id": "BUILD-AMD-01", diff --git a/refactor/scripts/profile-core-layout.mjs b/refactor/scripts/profile-core-layout.mjs new file mode 100644 index 000000000..524a48ab2 --- /dev/null +++ b/refactor/scripts/profile-core-layout.mjs @@ -0,0 +1,150 @@ +import assert from 'node:assert/strict' +import { spawn } from 'node:child_process' +import fs from 'node:fs' +import path from 'node:path' +import process from 'node:process' +import { chromium } from '@playwright/test' + +const directory = fs.mkdtempSync('refactor/.cache/core22-profile-') +const port = 8086 +const env = { ...process.env, ARTPLAYER_BROWSER_PORT: String(port) } +delete env.ARTPLAYER_BROWSER_ARTIFACTS +const server = spawn(process.execPath, ['test/browser/server.mjs'], { env, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }) +let serverLog = '' +server.stdout.on('data', (chunk) => { + serverLog += chunk +}) +server.stderr.on('data', (chunk) => { + serverLog += chunk +}) +let browser +try { + await new Promise((resolve, reject) => { + const timer = setTimeout(() => reject(new Error('Server startup timeout')), 60000) + const close = (code) => { + clearTimeout(timer) + reject(new Error(`Server exited ${code}: ${serverLog}`)) + } + server.once('exit', close) + server.stdout.on('data', () => { + if (serverLog.includes(`Browser test server: http://127.0.0.1:${port}`)) { + clearTimeout(timer) + server.removeListener('exit', close) + resolve() + } + }) + }) + browser = await chromium.launch() + const page = await browser.newPage({ viewport: { width: 960, height: 720 } }) + const errors = [] + page.on('pageerror', error => errors.push(error.message)) + await page.goto(`http://127.0.0.1:${port}/test/player.html?core=candidate&chapter=published`) + const manifest = await (await page.request.get(`http://127.0.0.1:${port}/test/manifest.json`)).json() + fs.writeFileSync(path.join(directory, 'candidate.js'), await (await page.request.get(`http://127.0.0.1:${port}/candidate/artplayer.js`)).body()) + await page.evaluate(() => { + window.profileSamples = [] + window.runProfile = async function (count) { + function constructProfilePlayer() { + return new window.Artplayer({ container: '.player', url: '/assets/sample/video.mp4', muted: true }) + } + function destroyProfilePlayer(art) { + art.destroy() + } + for (let index = 0; index < count; index++) { + const start = performance.now() + const art = constructProfilePlayer() + const constructed = performance.now() + try { + await new Promise((resolve, reject) => { + const timer = setTimeout(() => reject(new Error('Ready timed out')), 10000) + art.once('ready', () => { + clearTimeout(timer) + resolve() + }) + }) + await art.play() + await new Promise(resolve => art.video.requestVideoFrameCallback(() => resolve())) + art.pause() + const beforeDestroy = performance.now() + destroyProfilePlayer(art) + window.profileSamples.push({ constructorMs: constructed - start, destroyMs: performance.now() - beforeDestroy }) + } + finally { + art.destroy() + } + } + } + }) + await page.evaluate(() => window.runProfile(10)) + await page.evaluate(() => { + window.profileSamples = [] + }) + const client = await page.context().newCDPSession(page) + await client.send('Profiler.enable') + await client.send('Profiler.setSamplingInterval', { interval: 100 }) + await client.send('Profiler.start') + await page.evaluate(() => window.runProfile(60)) + const { profile } = await client.send('Profiler.stop') + const nodes = new Map(profile.nodes.map(node => [node.id, node])) + const parents = new Map() + for (const node of profile.nodes) { + for (const child of node.children || []) parents.set(child, node.id) + } + const totals = { constructor: 0, destroy: 0, other: 0 } + const groups = { constructor: new Map(), destroy: new Map() } + for (let index = 0; index < profile.samples.length; index++) { + const leaf = nodes.get(profile.samples[index]) + let node = leaf + let group = 'other' + while (node) { + if (node.callFrame.functionName === 'constructProfilePlayer') { + group = 'constructor' + break + } + if (node.callFrame.functionName === 'destroyProfilePlayer') { + group = 'destroy' + break + } + node = nodes.get(parents.get(node.id)) + } + const duration = profile.timeDeltas[index] + totals[group] += duration + if (group !== 'other') { + const frame = leaf.callFrame + const key = `${frame.functionName || '(anonymous)'}:${frame.url}:${frame.lineNumber + 1}` + const result = groups[group].get(key) || { frame, sampledUs: 0, samples: 0 } + result.sampledUs += duration + result.samples++ + groups[group].set(key, result) + } + } + const summary = { + kind: 'diagnostic-cpu-sampling', + browser: browser.version(), + node: process.version, + manifest, + intervalRequestedUs: 100, + warmup: 10, + repetitions: 60, + totalsUs: totals, + groups: Object.fromEntries(Object.entries(groups).map(([name, values]) => [name, [...values.values()].sort((a, b) => b.sampledUs - a.sampledUs)])), + timings: await page.evaluate(() => window.profileSamples), + errors, + limit: 'Instrumented Chromium source-build diagnostic only; not an uninstrumented published/candidate performance comparison. Native frames and sampling gaps may be charged to their JS caller. Timings must not be used for performance acceptance.', + } + assert.deepEqual(errors, []) + assert.equal(await page.evaluate(() => window.Artplayer.instances.length), 0) + fs.writeFileSync(path.join(directory, 'profile.cpuprofile'), JSON.stringify(profile)) + fs.writeFileSync(path.join(directory, 'summary.json'), `${JSON.stringify(summary, null, 2)}\n`) + console.log(directory) + for (const [name, rows] of Object.entries(summary.groups)) console.log(name, totals[name], rows.slice(0, 12).map(row => ({ name: row.frame.functionName, line: row.frame.lineNumber + 1, sampledUs: row.sampledUs, samples: row.samples }))) +} +finally { + try { + await browser?.close() + } + finally { + server.kill() + fs.writeFileSync(path.join(directory, 'server.log'), serverLog) + } +} diff --git a/refactor/tasks.json b/refactor/tasks.json index 80a744066..c67b96589 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -1227,14 +1227,16 @@ "ENG-10", "ENG-11" ], - "status": "todo", + "status": "done", "risk": "H", "deliverable": "核心与旧插件的可自动化完整回归、资源/性能及明确外部验证缺口", "acceptance": "核心自动化和公开差异处置通过;真实环境缺口链接包集成/REL 门槛,阶段完成不代表可公开发布", "evidence": [ - "changes/2026-09-11-CORE-22-core-acceptance.md" - ], - "reason": "初步体积归因已执行;先独立交付新增前置 ENG-11 分析工具,再恢复核心完整验收。" + "changes/2026-09-11-CORE-22-core-acceptance.md", + "baselines/core-setting-navigation-partial.json", + "core-acceptance.md", + "baselines/core-acceptance-validation.json" + ] }, { "id": "PKG-CHAPTER-01", diff --git a/test/browser/accessibility-setting.spec.js b/test/browser/accessibility-setting.spec.js index 80515b087..7fe939237 100644 --- a/test/browser/accessibility-setting.spec.js +++ b/test/browser/accessibility-setting.spec.js @@ -84,6 +84,73 @@ test('candidate: setting navigation ignores hidden rows and inert descendants', await expect(row(page, 'quality')).toBeFocused() }) +test('candidate: long setting panels observe live button availability on every navigation', async ({ page }, testInfo) => { + await setup(page) + await page.evaluate(() => { + const setting = window.art.setting + for (const name of ['quality', 'loop', 'offset', 'action']) + setting.remove(name) + for (let index = 0; index < 40; index++) + setting.add({ name: `row-${index}`, html: `` }) + }) + await page.keyboard.press('Enter') + await expect(page.locator('#setting-button-0')).toBeFocused() + const measurements = [] + async function navigate(key, expected) { + await page.evaluate(() => { + const panel = window.art.setting.cache.get(window.art.setting.active) + const query = panel.querySelectorAll + const style = window.getComputedStyle + const counts = { queries: 0, styles: 0 } + panel.querySelectorAll = function (...args) { + counts.queries++ + return query.apply(this, args) + } + window.getComputedStyle = function (element, ...args) { + if (panel.contains(element)) + counts.styles++ + return style.call(this, element, ...args) + } + window.finishSettingMeasurement = () => { + delete panel.querySelectorAll + window.getComputedStyle = style + delete window.finishSettingMeasurement + return counts + } + }) + try { + await page.keyboard.press(key) + } + finally { + measurements.push({ key, expected, ...await page.evaluate(() => window.finishSettingMeasurement()) }) + } + await expect(page.locator(`#setting-button-${expected}`)).toBeFocused() + } + await navigate('ArrowDown', 1) + await page.evaluate(() => { + document.querySelector('#setting-button-2').style.visibility = 'hidden' + document.querySelector('#setting-button-3').closest('.art-setting-item').setAttribute('inert', '') + document.querySelector('#setting-button-4').disabled = true + document.querySelector('#setting-button-5').tabIndex = -1 + }) + await navigate('ArrowDown', 6) + await navigate('a', 6) + await navigate('End', 39) + await page.evaluate(() => { + document.querySelector('#setting-button-2').style.visibility = '' + document.querySelector('#setting-button-3').closest('.art-setting-item').removeAttribute('inert') + document.querySelector('#setting-button-4').disabled = false + document.querySelector('#setting-button-5').removeAttribute('tabindex') + window.art.setting.remove('row-1') + }) + await navigate('Home', 0) + await navigate('ArrowDown', 2) + await navigate('ArrowDown', 3) + await navigate('ArrowDown', 4) + await navigate('ArrowDown', 5) + await testInfo.attach('setting-navigation-work', { contentType: 'application/json', body: JSON.stringify(measurements, null, 2) }) +}) + test('candidate: setting keyboard enters nested panels and returns to the originating item', async ({ page }, testInfo) => { await setup(page) await page.evaluate(() => { diff --git a/test/browser/components.spec.js b/test/browser/components.spec.js index 4d0bad092..3bc6ef23a 100644 --- a/test/browser/components.spec.js +++ b/test/browser/components.spec.js @@ -1,5 +1,57 @@ import { expect, test } from './fixtures.js' +for (const fallback of [false, true]) { + test(`candidate: initial control measurement uses the browser layout phase with fallback=${fallback}`, async ({ page }, testInfo) => { + if (fallback) + await page.addInitScript(() => { window.ResizeObserver = undefined }) + await page.goto('/test/player.html?core=candidate&chapter=published') + const reads = await page.evaluate(() => { + document.querySelector('.player').style.width = '320px' + const descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetHeight') + let reads = 0 + Object.defineProperty(HTMLElement.prototype, 'offsetHeight', { + ...descriptor, + get() { + if (this.classList.contains('art-controls')) + reads++ + return descriptor.get.call(this) + }, + }) + try { + window.art = new window.Artplayer({ container: '.player', url: '', setting: true, fullscreenWeb: true, controls: [{ name: 'probe', position: 'right', html: 'Probe control' }] }) + } + finally { + Object.defineProperty(HTMLElement.prototype, 'offsetHeight', descriptor) + } + return reads + }) + await testInfo.attach('constructor-control-layout-reads', { contentType: 'application/json', body: JSON.stringify({ fallback, reads }) }) + expect(reads).toBe(fallback ? 1 : 0) + const measured = await page.evaluate(async () => { + await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))) + const { $controls, $player } = window.art.template + return { height: $controls.offsetHeight, recorded: Number.parseFloat($player.style.getPropertyValue('--art-controls-height')) } + }) + expect(measured.height).toBe(92) + expect(measured.recorded).toBe(measured.height) + await expect.poll(() => page.evaluate(() => Number.parseFloat(getComputedStyle(window.art.template.$subtitle).bottom))).toBeGreaterThanOrEqual(measured.height) + }) +} + +test('candidate: destroying before initial control observation leaves no late layout write', async ({ page }) => { + await page.goto('/test/player.html?core=candidate&chapter=published') + const state = await page.evaluate(async () => { + const art = new window.Artplayer({ container: '.player', url: '' }) + const player = art.template.$player + art.destroy(false) + const before = player.getAttribute('style') + await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))) + return { before, after: player.getAttribute('style'), instances: window.Artplayer.instances.length } + }) + expect(state.after).toBe(state.before) + expect(state.instances).toBe(0) +}) + for (const fallback of [false, true]) { test(`candidate: control layout follows resize and removal with observer fallback=${fallback}`, async ({ page }) => { if (fallback) {