hyperframes 0.7.56 → 0.7.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var HyperframesPlayer=(()=>{var Y=Object.defineProperty;var Ne=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var Ue=Object.prototype.hasOwnProperty;var Ve=(r,e)=>{for(var t in e)Y(r,t,{get:e[t],enumerable:!0})},je=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Fe(e))!Ue.call(r,n)&&n!==t&&Y(r,n,{get:()=>e[n],enumerable:!(i=Ne(e,n))||i.enumerable});return r};var ze=r=>je(Y({},"__esModule",{value:!0}),r);var nt={};Ve(nt,{HyperframesPlayer:()=>X,SPEED_PRESETS:()=>J,formatSpeed:()=>R,formatTime:()=>V});function be(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function L(r){return typeof r=="object"&&r!==null}function ve(r){return L(r)&&typeof r.getDuration=="function"}function ge(r){return L(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}var $e="https://cdn.jsdelivr.net/npm/@hyperframes/core/dist/hyperframe.runtime.iife.js";function P(r){if(r===null)return null;let e=Number.parseInt(r,10);return Number.isFinite(e)&&e>0?e:null}function We(r){let e=r?.querySelector("[data-composition-id][data-width][data-height]")??r?.querySelector("[data-width][data-height]");if(!e)return null;let t=P(e.getAttribute("data-width")),i=P(e.getAttribute("data-height"));return t!==null&&i!==null?{width:t,height:i}:null}var U=class{constructor(e,t){this._iframe=e;this._callbacks=t}_iframe;_callbacks;_interval=null;_runtimeInjected=!1;get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let e=0;this._interval=setInterval(()=>{e++;try{let t=this._iframe.contentWindow;if(!t)return;let i=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),a=!!this._iframe.contentDocument?.querySelector("[data-composition-src]");if(be({hasRuntime:i,hasTimelines:n,hasNestedCompositions:a,runtimeInjected:this._runtimeInjected,attempts:e})){this._injectRuntime();return}if(this._runtimeInjected&&!i)return;let s=this._resolvePlaybackDurationAdapter(t);if(s&&s.getDuration()>0){this.stop();let d=We(this._iframe.contentDocument);this._callbacks.onReady({duration:s.getDuration(),adapter:s,compositionSize:d});return}}catch{}e>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{let e=this._iframe.contentWindow;return e?this._resolveDirectTimelineAdapterFromWindow(e):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(e){return this._resolveDirectTimelineAdapterFromWindow(e)}hasRuntimeBridge(e){return Reflect.get(e,"__hf")!==void 0||L(Reflect.get(e,"__player"))}_injectRuntime(){this._runtimeInjected=!0;try{let e=this._iframe.contentDocument;if(!e)return;let t=e.createElement("script");t.src=$e,(e.head||e.documentElement).appendChild(t),this._callbacks.onRuntimeInjected?.()}catch{}}_resolveDirectTimelineAdapterFromWindow(e){if(this.hasRuntimeBridge(e))return null;let t=Reflect.get(e,"__timelines");if(!L(t))return null;let i=Object.keys(t);if(i.length===0)return null;let n=this._iframe.contentDocument?.querySelector("[data-composition-id]")?.getAttribute("data-composition-id"),a=n&&n in t?n:i[i.length-1],s=t[a];return ge(s)?s:null}_resolvePlaybackDurationAdapter(e){let t=Reflect.get(e,"__player");if(ve(t))return{kind:"runtime",getDuration:()=>t.getDuration()};let i=this._resolveDirectTimelineAdapterFromWindow(e);return i?{kind:"direct-timeline",timeline:i,getDuration:()=>i.duration()}:null}};var ye=`
1
+ "use strict";var HyperframesPlayer=(()=>{var X=Object.defineProperty;var He=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var je=(r,e)=>{for(var t in e)X(r,t,{get:e[t],enumerable:!0})},ze=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ue(e))!Ve.call(r,n)&&n!==t&&X(r,n,{get:()=>e[n],enumerable:!(i=He(e,n))||i.enumerable});return r};var $e=r=>ze(X({},"__esModule",{value:!0}),r);var ut={};je(ut,{HyperframesPlayer:()=>Y,SPEED_PRESETS:()=>J,formatSpeed:()=>R,formatTime:()=>V});function be(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function L(r){return typeof r=="object"&&r!==null}function ve(r){return L(r)&&typeof r.getDuration=="function"}function ge(r){return L(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}var We="https://cdn.jsdelivr.net/npm/@hyperframes/core@0.7.57/dist/hyperframe.runtime.iife.js";function P(r){if(r===null)return null;let e=Number.parseInt(r,10);return Number.isFinite(e)&&e>0?e:null}function Be(r){let e=r?.querySelector("[data-composition-id][data-width][data-height]")??r?.querySelector("[data-width][data-height]");if(!e)return null;let t=P(e.getAttribute("data-width")),i=P(e.getAttribute("data-height"));return t!==null&&i!==null?{width:t,height:i}:null}var U=class{constructor(e,t){this._iframe=e;this._callbacks=t}_iframe;_callbacks;_interval=null;_runtimeInjected=!1;get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let e=0;this._interval=setInterval(()=>{e++;try{let t=this._iframe.contentWindow;if(!t)return;let i=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),s=!!this._iframe.contentDocument?.querySelector("[data-composition-src]");if(be({hasRuntime:i,hasTimelines:n,hasNestedCompositions:s,runtimeInjected:this._runtimeInjected,attempts:e})){this._injectRuntime();return}if(this._runtimeInjected&&!i)return;let a=this._resolvePlaybackDurationAdapter(t);if(a&&a.getDuration()>0){this.stop();let d=Be(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:d});return}}catch{}e>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{let e=this._iframe.contentWindow;return e?this._resolveDirectTimelineAdapterFromWindow(e):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(e){return this._resolveDirectTimelineAdapterFromWindow(e)}hasRuntimeBridge(e){return Reflect.get(e,"__hf")!==void 0||L(Reflect.get(e,"__player"))}_injectRuntime(){this._runtimeInjected=!0;try{let e=this._iframe.contentDocument;if(!e)return;let t=e.createElement("script");t.src=We,(e.head||e.documentElement).appendChild(t),this._callbacks.onRuntimeInjected?.()}catch{}}_resolveDirectTimelineAdapterFromWindow(e){if(this.hasRuntimeBridge(e))return null;let t=Reflect.get(e,"__timelines");if(!L(t))return null;let i=Object.keys(t);if(i.length===0)return null;let n=this._iframe.contentDocument?.querySelector("[data-composition-id]")?.getAttribute("data-composition-id"),s=n&&n in t?n:i[i.length-1],a=t[s];return ge(a)?a:null}_resolvePlaybackDurationAdapter(e){let t=Reflect.get(e,"__player");if(ve(t))return{kind:"runtime",getDuration:()=>t.getDuration()};let i=this._resolveDirectTimelineAdapterFromWindow(e);return i?{kind:"direct-timeline",timeline:i,getDuration:()=>i.duration()}:null}};var _e=`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;
@@ -456,5 +456,5 @@
456
456
  background: var(--hfp-accent, #fff);
457
457
  pointer-events: none;
458
458
  }
459
- `,_e='<svg width="24" height="24" viewBox="46 21 54 56" fill="currentColor"><path d="M87.5129 57.5141L56.9696 73.5433C52.8371 75.7098 48.7046 73.2553 49.6688 69.2104L58.9483 30.1391C59.9125 26.0942 65.2097 23.6397 68.3154 25.8062L91.2447 41.8354C96.4668 45.4796 94.4631 53.8699 87.5129 57.5141Z"/></svg>',Ee='<svg width="24" height="24" viewBox="0 0 18 18" fill="currentColor"><rect x="3" y="2" width="4" height="14"/><rect x="11" y="2" width="4" height="14"/></svg>',Q='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/><path d="M14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>',Z='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/></svg>',Se='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z" opacity="0.3"/><line x1="18" y1="7" x2="14" y2="17" stroke="currentColor" stroke-width="2"/></svg>';var J=[.25,.5,1,1.5,2,4];function R(r){return Number.isInteger(r)?`${r}x`:`${r}x`}function V(r){if(!Number.isFinite(r)||r<0)return"0:00";let e=Math.floor(r),t=Math.floor(e/60),i=e%60;return`${t}:${i.toString().padStart(2,"0")}`}function Te(r,e,t={}){let i=t.speedPresets??J,n=document.createElement("div");n.className="hfp-controls",n.addEventListener("click",o=>{o.stopPropagation()});let a=document.createElement("button");a.className="hfp-play-btn",a.type="button",a.innerHTML=`<span class="hfp-ico hfp-ico-play">${_e}</span><span class="hfp-ico hfp-ico-pause">${Ee}</span>`,a.setAttribute("aria-label","Play");let s=document.createElement("div");s.className="hfp-scrubber";let d=document.createElement("div");d.className="hfp-progress",d.style.width="0%",s.appendChild(d);let u=document.createElement("span");u.className="hfp-time",u.textContent="0:00 / 0:00";let c=document.createElement("div");c.className="hfp-speed-wrap";let p=document.createElement("button");p.className="hfp-speed-btn",p.type="button",p.textContent="1x",p.setAttribute("aria-label","Playback speed");let b=document.createElement("div");b.className="hfp-speed-menu",b.setAttribute("role","menu");for(let o of i){let l=document.createElement("button");l.className="hfp-speed-option",l.type="button",l.setAttribute("role","menuitem"),l.dataset.speed=String(o),l.textContent=R(o),o===1&&l.classList.add("hfp-active"),b.appendChild(l)}c.appendChild(b),c.appendChild(p);let g=document.createElement("div");g.className="hfp-volume-wrap";let m=document.createElement("button");m.className="hfp-mute-btn",m.type="button",m.innerHTML=Q,m.setAttribute("aria-label","Mute");let _=document.createElement("div");_.className="hfp-volume-slider-wrap";let h=document.createElement("div");h.className="hfp-volume-slider",h.setAttribute("role","slider"),h.setAttribute("aria-label","Volume"),h.setAttribute("aria-valuemin","0"),h.setAttribute("aria-valuemax","100"),h.setAttribute("aria-valuenow","100"),h.tabIndex=0;let y=document.createElement("div");y.className="hfp-volume-fill",y.style.width="100%",h.appendChild(y),_.appendChild(h),g.appendChild(_),g.appendChild(m),t.audioLocked&&(g.style.display="none"),n.appendChild(a),n.appendChild(s),n.appendChild(u),n.appendChild(g),n.appendChild(c),r.appendChild(n);let D=!1,w=!1,S=1,k=null,I=i.indexOf(1);I===-1&&(I=0);let O=(o,l)=>o?Se:l===0?Z:l<.5?Z:Q;a.addEventListener("click",o=>{o.stopPropagation(),D?e.onPause():e.onPlay()}),m.addEventListener("click",o=>{o.stopPropagation(),e.onMuteToggle()});let A=!1,H=o=>{let l=h.getBoundingClientRect(),f=Math.max(0,Math.min(1,(o-l.left)/l.width));S=f,y.style.width=`${f*100}%`,h.setAttribute("aria-valuenow",String(Math.round(f*100))),w&&f>0&&e.onMuteToggle(),m.innerHTML=O(w,f),e.onVolumeChange(f)};h.addEventListener("mousedown",o=>{o.stopPropagation(),A=!0,H(o.clientX)});let ie=o=>{A&&H(o.clientX)},re=()=>{A=!1};document.addEventListener("mousemove",ie),document.addEventListener("mouseup",re),h.addEventListener("touchstart",o=>{A=!0;let l=o.touches[0];l&&H(l.clientX)},{passive:!0});let ne=o=>{if(A){let l=o.touches[0];l&&H(l.clientX)}},oe=()=>{A=!1};document.addEventListener("touchmove",ne,{passive:!0}),document.addEventListener("touchend",oe);let ae=.05;h.addEventListener("keydown",o=>{let l=S;if(o.key==="ArrowRight"||o.key==="ArrowUp")l=Math.min(1,S+ae);else if(o.key==="ArrowLeft"||o.key==="ArrowDown")l=Math.max(0,S-ae);else return;o.preventDefault(),o.stopPropagation(),S=l,y.style.width=`${l*100}%`,h.setAttribute("aria-valuenow",String(Math.round(l*100))),w&&l>0&&e.onMuteToggle(),m.innerHTML=O(w,l),e.onVolumeChange(l)});let se=o=>{for(let l of b.querySelectorAll(".hfp-speed-option"))l.classList.toggle("hfp-active",l.dataset.speed===String(o))};p.addEventListener("click",o=>{o.stopPropagation();let l=b.classList.toggle("hfp-open");p.setAttribute("aria-expanded",String(l))}),b.addEventListener("click",o=>{o.stopPropagation();let l=o.target.closest(".hfp-speed-option");if(!l)return;let f=parseFloat(l.dataset.speed);I=i.indexOf(f),p.textContent=R(f),se(f),b.classList.remove("hfp-open"),p.setAttribute("aria-expanded","false"),e.onSpeedChange(f)});let le=()=>{b.classList.remove("hfp-open"),p.setAttribute("aria-expanded","false")};document.addEventListener("click",le);let N=o=>{let l=s.getBoundingClientRect(),f=Math.max(0,Math.min(1,(o-l.left)/l.width));e.onSeek(f)},E=!1;s.addEventListener("mousedown",o=>{o.stopPropagation(),E=!0,e.onScrubStart?.(),N(o.clientX)});let de=o=>{E&&N(o.clientX)},ue=()=>{E&&(E=!1,e.onScrubEnd?.())};document.addEventListener("mousemove",de),document.addEventListener("mouseup",ue),s.addEventListener("touchstart",o=>{E=!0,e.onScrubStart?.();let l=o.touches[0];l&&N(l.clientX)},{passive:!0});let pe=o=>{if(E){let l=o.touches[0];l&&N(l.clientX)}},ce=()=>{E&&(E=!1,e.onScrubEnd?.())};document.addEventListener("touchmove",pe,{passive:!0}),document.addEventListener("touchend",ce);let he=()=>{k&&clearTimeout(k),k=setTimeout(()=>{D&&n.classList.add("hfp-hidden")},3e3)},F=r instanceof ShadowRoot?r.host:r,me=()=>{n.classList.remove("hfp-hidden"),he()},fe=()=>{D&&n.classList.add("hfp-hidden")};return F.addEventListener("mousemove",me),F.addEventListener("mouseleave",fe),{updateTime(o,l){let f=l>0?Math.min(o,l):o,He=l>0?f/l*100:0;d.style.width=`${He}%`,u.textContent=`${V(f)} / ${V(l)}`},updatePlaying(o){D=o,a.classList.toggle("hfp-playing",o),a.setAttribute("aria-label",o?"Pause":"Play"),o?he():n.classList.remove("hfp-hidden")},updateSpeed(o){let l=i.indexOf(o);l!==-1&&(I=l),p.textContent=R(o),se(o)},updateMuted(o){w=o,m.innerHTML=O(o,S),m.setAttribute("aria-label",o?"Unmute":"Mute")},updateVolume(o){S=o,y.style.width=`${o*100}%`,h.setAttribute("aria-valuenow",String(Math.round(o*100))),m.innerHTML=O(w,o)},setVolumeControlsHidden(o){g.style.display=o?"none":""},show(){n.style.display=""},hide(){n.style.display="none"},destroy(){document.removeEventListener("mousemove",de),document.removeEventListener("mouseup",ue),document.removeEventListener("touchmove",pe),document.removeEventListener("touchend",ce),document.removeEventListener("mousemove",ie),document.removeEventListener("mouseup",re),document.removeEventListener("touchmove",ne),document.removeEventListener("touchend",oe),document.removeEventListener("click",le),F.removeEventListener("mousemove",me),F.removeEventListener("mouseleave",fe),k&&clearTimeout(k),n.remove()}}}function we(r,e,t,i,n,a=!1){let s=i?i.split(",").map(Number).filter(c=>!isNaN(c)&&c>0):void 0,d={...s?{speedPresets:s}:{},audioLocked:a},u=Te(r,n,d);return u.updateMuted(e),u.updateVolume(t),u}function K(r,e,t){return e?(t||(t=document.createElement("img"),t.className="hfp-poster",r.appendChild(t)),t.src=e,t):(t?.remove(),null)}function Ae(r){return r.composedPath().some(e=>e instanceof HTMLElement&&e.classList.contains("hfp-controls"))}var j=null;function Ce(r,e){if(typeof CSSStyleSheet<"u")try{j||(j=new CSSStyleSheet,j.replaceSync(e)),r.adoptedStyleSheets=[j];return}catch{}let t=document.createElement("style");t.textContent=e,r.appendChild(t)}function xe(){let r=document.createElement("div");r.className="hfp-container";let e=document.createElement("iframe");return e.className="hfp-iframe",e.sandbox.add("allow-scripts","allow-same-origin"),e.allow="autoplay; fullscreen",e.referrerPolicy="no-referrer",e.title="HyperFrames Composition",r.appendChild(e),{container:r,iframe:e}}function Me(r,e,t,i){let n=r.offsetWidth,a=r.offsetHeight;if(n===0||a===0)return!1;let s=Math.min(n/t,a/i);return e.style.width=`${t}px`,e.style.height=`${i}px`,e.style.transform=`translate(-50%, -50%) scale(${s})`,!0}var z=class{constructor(e){this._callbacks=e}_callbacks;_raf=null;_lastUpdateMs=0;start(e,t,i,n){this.stop();let a=()=>{if(n()){this._raf=null;return}let s;try{s=e.time()}catch{this._raf=null;return}let d=i();d>0&&(s=Math.min(s,d));let u=d>0&&s>=d,c=performance.now();if((c-this._lastUpdateMs>100||u)&&(this._lastUpdateMs=c,this._callbacks.onTimeUpdate(s,d)),u){if(this._callbacks.getLoop()){this._callbacks.restart();return}try{e.pause()}catch{}this._callbacks.onPaused(),this._raf=null;return}this._raf=requestAnimationFrame(a)};this._raf=requestAnimationFrame(a)}stop(){this._raf!==null&&(cancelAnimationFrame(this._raf),this._raf=null)}get isRunning(){return this._raf!==null}};function ke(r){let e=Array.from(r.querySelectorAll("[data-composition-id]"));if(e.length===0)return r.body?[r.body]:[];let t=[];for(let i of e)Ge(i)||t.push(i);return Be(r),t}function Be(r){let e=r.body;if(!e||typeof console>"u"||typeof console.warn!="function")return;let t=e.querySelectorAll("audio[data-start], video[data-start]");if(t.length===0)return;let i=[];for(let n of t)n.closest("[data-composition-id]")||i.push(n);i.length!==0&&console.warn(`[hyperframes-player] selectMediaObserverTargets: composition hosts are present, but ${i.length} body-level timed media element(s) sit outside every [data-composition-id] subtree and will not be observed. Move them inside a composition host or the parent-frame proxy will never adopt them.`,i)}function Ge(r){let e=r.parentElement;for(;e;){if(e.hasAttribute("data-composition-id"))return!0;e=e.parentElement}return!1}function $(r){let e=r.ownerDocument?.defaultView;return e&&r instanceof e.Element?!0:r instanceof Element}function v(r){if(!$(r)||r.tagName!=="AUDIO"&&r.tagName!=="VIDEO")return!1;let e=r.ownerDocument?.defaultView;return e&&r instanceof e.HTMLMediaElement?!0:r instanceof HTMLMediaElement}var qe=.05,Xe=2,W=class{_entries=[];_mediaObserver;_playbackErrorPosted=!1;_audioOwner="runtime";_urlAudioEntry=null;_urlAudioSrc=null;_dispatchEvent;_getMuted;_getVolume;_getPlaybackRate;_getCurrentTime;_isPaused;constructor(e){this._dispatchEvent=e.dispatchEvent,this._getMuted=e.getMuted,this._getVolume=e.getVolume,this._getPlaybackRate=e.getPlaybackRate,this._getCurrentTime=e.getCurrentTime,this._isPaused=e.isPaused}get audioOwner(){return this._audioOwner}get entries(){return this._entries}resetForIframeLoad(){this._playbackErrorPosted=!1;let e=this._audioOwner==="parent";this._audioOwner="runtime",this.pauseAll(),this.teardownObserver(),e&&this._dispatchEvent(new CustomEvent("audioownershipchange",{detail:{owner:"runtime",reason:"iframe-reload"}}))}destroy(){this.teardownObserver();for(let e of this._entries)e.el.pause(),e.el.src="";this._entries=[],this._urlAudioEntry=null,this._urlAudioSrc=null}updateMuted(e){for(let t of this._entries)t.el.muted=e}updateVolume(e){for(let t of this._entries)t.el.volume=e}updatePlaybackRate(e){for(let t of this._entries)t.el.playbackRate=e}_playEntry(e){e.el.src&&e.el.play().catch(t=>this._reportPlaybackError(t))}_playEntryIfActive(e){this._refreshEntryBounds(e);let t=this._getCurrentTime()-e.start;t<0||t>=e.duration||this._playEntry(e)}_refreshEntryBounds(e){if(!e.source?.isConnected)return;let t=parseFloat(e.source.getAttribute("data-start")||"0");e.start=Number.isFinite(t)?t:0;let i=parseFloat(e.source.getAttribute("data-duration")||"");e.duration=Number.isFinite(i)&&i>0?i:Number.POSITIVE_INFINITY}_gateEntryPlayback(e,t){return t<0||t>=e.duration?(e.el.paused||e.el.pause(),e.driftSamples=0,!1):(this._audioOwner==="parent"&&!this._isPaused()&&e.el.paused&&this._playEntry(e),!0)}playAll(){for(let e of this._entries)this._playEntryIfActive(e)}pauseAll(){for(let e of this._entries)e.el.pause()}stopAdoptedMedia(){for(let e of this._entries)e.source&&e.el.pause()}seekAll(e){for(let t of this._entries){this._refreshEntryBounds(t);let i=e-t.start;i>=0&&i<t.duration&&(t.el.currentTime=i)}}scrubAll(e){for(let t of this._entries){this._refreshEntryBounds(t);let i=e-t.start;i>=0&&i<t.duration?(t.el.currentTime=i,this._playEntry(t)):t.el.paused||t.el.pause()}}mirrorTime(e,t){let i=t?.force===!0;for(let n of this._entries){this._refreshEntryBounds(n);let a=e-n.start;this._gateEntryPlayback(n,a)&&(Math.abs(n.el.currentTime-a)>qe?(n.driftSamples+=1,(i||n.driftSamples>=Xe)&&(n.el.currentTime=a,n.driftSamples=0)):n.driftSamples=0)}}promoteToParentProxy(e,t){if(this._audioOwner==="parent")return;if(this._audioOwner="parent",e)for(let n of e.querySelectorAll("video, audio"))v(n)&&(n.muted=!0);let i=this._getCurrentTime();t?t(i,{force:!0}):this.mirrorTime(i,{force:!0}),this._isPaused()||this.playAll(),this._dispatchEvent(new CustomEvent("audioownershipchange",{detail:{owner:"parent",reason:"autoplay-blocked"}}))}setupFromIframe(e){let t=e.querySelectorAll("audio[data-start], video[data-start]");for(let i of t)v(i)&&this._adoptIframeMedia(i);this._observeDynamicMedia(e)}setupFromUrl(e){if(this._urlAudioSrc===e&&this._urlAudioEntry)return;this.teardownUrlAudio();let t=this._createEntry(e,"audio",0,1/0);this._urlAudioEntry=t,this._urlAudioSrc=t?e:null,t&&this._audioOwner==="parent"&&!this._isPaused()&&(this.mirrorTime(this._getCurrentTime(),{force:!0}),this.playAll())}teardownUrlAudio(){let e=this._urlAudioEntry;if(this._urlAudioEntry=null,this._urlAudioSrc=null,!e)return;e.el.pause(),e.el.src="";let t=this._entries.indexOf(e);t!==-1&&this._entries.splice(t,1)}teardownObserver(){this._mediaObserver?.disconnect(),this._mediaObserver=void 0}_reportPlaybackError(e){this._playbackErrorPosted||(this._playbackErrorPosted=!0,this._dispatchEvent(new CustomEvent("playbackerror",{detail:{source:"parent-proxy",error:e}})))}_createEntry(e,t,i,n,a){if(this._entries.some(c=>c.el.src===e))return null;let s=t==="video"?document.createElement("video"):new Audio;s.preload="auto",s.src=e,s.load(),s.muted=this._getMuted(),s.volume=this._getVolume();let d=this._getPlaybackRate();d!==1&&(s.playbackRate=d);let u={el:s,start:i,duration:n,driftSamples:0,source:a};return this._entries.push(u),u}_resolveIframeMediaSrc(e){let t=e.getAttribute("src")||e.querySelector("source")?.getAttribute("src");return t?new URL(t,e.ownerDocument.baseURI).href:null}_adoptIframeMedia(e){if(e.preload==="metadata"||e.preload==="none")return;let t=this._resolveIframeMediaSrc(e);if(!t)return;let i=parseFloat(e.getAttribute("data-start")||"0"),n=parseFloat(e.getAttribute("data-duration")||"Infinity"),a=e.tagName==="VIDEO"?"video":"audio",s=this._createEntry(t,a,i,n,e);s&&this._audioOwner==="parent"&&(this.mirrorTime(this._getCurrentTime(),{force:!0}),this._isPaused()||this._playEntryIfActive(s))}_detachIframeMedia(e){let t=this._resolveIframeMediaSrc(e);if(!t)return;let i=this._entries.findIndex(a=>a.el.src===t);if(i===-1)return;let n=this._entries[i];n.el.pause(),n.el.src="",this._entries.splice(i,1)}_observeDynamicMedia(e){if(this.teardownObserver(),typeof MutationObserver>"u"||!e.body)return;let t=new MutationObserver(a=>{for(let s of a){if(s.type==="attributes"&&s.attributeName==="preload"){let d=s.target;v(d)&&d.matches("audio[data-start], video[data-start]")&&d.preload==="auto"&&this._adoptIframeMedia(d);continue}for(let d of s.addedNodes){if(!$(d))continue;let u=[];v(d)&&d.matches("audio[data-start], video[data-start]")&&u.push(d);let c=d.querySelectorAll("audio[data-start], video[data-start]");for(let p of c)v(p)&&u.push(p);for(let p of u)this._adoptIframeMedia(p)}for(let d of s.removedNodes){if(!$(d))continue;let u=[];v(d)&&d.matches("audio[data-start], video[data-start]")&&u.push(d);let c=d.querySelectorAll("audio[data-start], video[data-start]");for(let p of c)v(p)&&u.push(p);for(let p of u)this._detachIframeMedia(p)}}}),i={childList:!0,subtree:!0,attributes:!0,attributeFilter:["preload"]},n=ke(e);for(let a of n)t.observe(a,i);this._mediaObserver=t}};function Le(r,e,t,i){let n=(r.frame??0)/e,a=t.duration>0?Math.min(n,t.duration):n,s=!t.paused,d=!r.isPlaying,u=t.duration>0&&a>=t.duration&&(s||r.isPlaying);if(u&&i.getLoop())return i.media.audioOwner==="parent"&&i.media.pauseAll(),i.seek(0),i.play(),{...t,currentTime:a,paused:!1};let c={...t,currentTime:a,paused:d};i.media.audioOwner==="parent"&&(s&&d?i.media.pauseAll():!s&&!d&&i.media.playAll(),i.media.mirrorTime(a));let p=performance.now(),b=d!==t.paused;return(p-t.lastUpdateMs>100||b)&&(c.lastUpdateMs=p,i.updateControlsTime(a,t.duration),i.updateControlsPlaying(!d),i.dispatchEvent(new CustomEvent("timeupdate",{detail:{currentTime:a}}))),u&&(i.media.audioOwner==="parent"&&i.media.pauseAll(),c.paused=!0,i.updateControlsPlaying(!1),i.dispatchEvent(new Event("ended"))),c}var Pe=30;function Ye(r){return Array.isArray(r)?r.filter(e=>typeof e=="object"&&e!==null&&typeof e.id=="string"&&typeof e.start=="number"&&typeof e.duration=="number"):[]}function Re(r,e,t){if(r.source!==e)return;let i=r.data;if(!(!i||i.source!=="hf-preview")){if(i.type==="shader-transition-state"){let n=i.state&&typeof i.state=="object"?i.state:{};t.shaderLoader.update(n,t.getShaderLoadingMode()),t.dispatchEvent(new CustomEvent("shadertransitionstate",{detail:{compositionId:i.compositionId,state:n}}));return}if(i.type==="ready"){t.onRuntimeReady();return}if(i.type==="state"){t.setPlaybackState(Le({frame:i.frame??0,isPlaying:!!i.isPlaying},Pe,t.getPlaybackState(),t));return}if(i.type==="media-autoplay-blocked"){if(t.shouldPromoteMediaAutoplayFallback?.()===!1)return;let n=null;try{n=t.getIframeDoc()}catch{}t.media.promoteToParentProxy(n,(a,s)=>t.media.mirrorTime(a,s)),t.sendControl("set-media-output-muted",{muted:!0});return}if(i.type==="timeline"&&i.durationInFrames>0){if(Number.isFinite(i.durationInFrames)){let n=t.getPlaybackState(),a=i.durationInFrames/Pe;t.setPlaybackState({...n,duration:a}),t.updateControlsTime(n.currentTime,a),t.onRuntimeTimelineReady(a)}t.setScenes(Ye(i.scenes));return}i.type==="stage-size"&&Number.isFinite(i.width)&&i.width>0&&Number.isFinite(i.height)&&i.height>0&&t.setCompositionSize(i.width,i.height)}}var T="shader-capture-scale",C="shader-loading",Qe="__hf_shader_capture_scale",Ze="__hf_shader_loading",x=["Preparing scene transitions","Sampling outgoing scene motion","Sampling incoming scene motion","Caching transition frames","Finalizing transition preview"];function ee(r){if(r===null)return null;let e=Number(r);return!Number.isFinite(e)||e<=0?null:String(Math.min(1,Math.max(.25,e)))}function Je(r){if(r===null||r.trim()==="")return"composition";let e=r.trim().toLowerCase();return e==="none"||e==="false"||e==="0"||e==="off"?"none":e==="player"||e==="true"||e==="1"||e==="on"?"player":"composition"}function De(r,e,t){t===null?r.delete(e):r.set(e,t)}function Ke(r,e,t){let i=r.indexOf("#"),n=i>=0?r.slice(0,i):r,a=i>=0?r.slice(i):"",s=n.indexOf("?"),d=s>=0?n.slice(0,s):n,u=s>=0?n.slice(s+1):"",c=new URLSearchParams(u);De(c,Qe,e),De(c,Ze,t==="composition"?null:t);let p=c.toString();return`${d}${p?`?${p}`:""}${a}`}function et(r,e,t){if(e===null&&t==="composition")return r;let i=[];e!==null&&i.push(`window.__HF_SHADER_CAPTURE_SCALE=${JSON.stringify(e)};`),t!=="composition"&&i.push(`window.__HF_SHADER_LOADING=${JSON.stringify(t)};`);let n=`<script data-hyperframes-player-shader-options>${i.join("")}</script>`;return/<head\b[^>]*>/i.test(r)?r.replace(/<head\b[^>]*>/i,a=>`${a}${n}`):/<html\b[^>]*>/i.test(r)?r.replace(/<html\b[^>]*>/i,a=>`${a}${n}`):`${n}${r}`}function M(r){return Je(r.getAttribute(C))}function Ie(r){return Number(ee(r.getAttribute(T))??"1")}function B(r,e){return Ke(e,ee(r.getAttribute(T)),M(r))}function G(r,e){return et(e,ee(r.getAttribute(T)),M(r))}function Oe(){let r=document.createElement("div");r.className="hfp-shader-loader",r.setAttribute("role","status"),r.setAttribute("aria-live","polite"),r.setAttribute("aria-label","Preparing scene transitions"),r.setAttribute("data-hyperframes-ignore",""),r.draggable=!1;let e=m=>{m.preventDefault(),m.stopPropagation()};for(let m of["selectstart","dragstart","pointerdown","mousedown","click","dblclick","contextmenu","touchstart"])r.addEventListener(m,e,{capture:!0});let t=document.createElement("div");t.className="hfp-shader-loader-panel",t.draggable=!1;let i=document.createElement("div");i.className="hfp-shader-loader-mark",i.draggable=!1,i.innerHTML=['<svg width="78" height="78" viewBox="0 0 100 100" fill="none" aria-hidden="true" draggable="false">','<path d="M10.1851 57.8021L33.1145 73.8313C36.2202 75.9978 41.5173 73.5433 42.4816 69.4984L51.7611 30.4271C52.7253 26.3822 48.5802 23.9277 44.4602 26.0942L13.917 42.1235C6.96677 45.7676 4.97564 54.1579 10.1851 57.8021Z" fill="url(#hfp-shader-loader-grad-left)"/>','<path d="M87.5129 57.5141L56.9696 73.5433C52.8371 75.7098 48.7046 73.2553 49.6688 69.2104L58.9483 30.1391C59.9125 26.0942 65.2097 23.6397 68.3154 25.8062L91.2447 41.8354C96.4668 45.4796 94.4631 53.8699 87.5129 57.5141Z" fill="url(#hfp-shader-loader-grad-right)"/>',"<defs>",'<linearGradient id="hfp-shader-loader-grad-left" x1="48.5676" y1="25" x2="44.7804" y2="71.9384" gradientUnits="userSpaceOnUse">','<stop stop-color="#06E3FA"/>','<stop offset="1" stop-color="#4FDB5E"/>',"</linearGradient>",'<linearGradient id="hfp-shader-loader-grad-right" x1="54.8282" y1="73.8392" x2="72.0989" y2="32.8932" gradientUnits="userSpaceOnUse">','<stop stop-color="#06E3FA"/>','<stop offset="1" stop-color="#4FDB5E"/>',"</linearGradient>","</defs>","</svg>"].join("");let n=document.createElement("div");n.className="hfp-shader-loader-title";let a=document.createElement("span");a.className="hfp-shader-loader-title-text",a.textContent=x[0]||"Preparing scene transitions",n.appendChild(a);let s=document.createElement("div");s.className="hfp-shader-loader-detail",s.textContent="Rendering animated scene samples for shader transitions.";let d=document.createElement("div");d.className="hfp-shader-loader-track",d.setAttribute("aria-hidden","true");let u=document.createElement("div");u.className="hfp-shader-loader-fill",d.appendChild(u);let c=document.createElement("div");c.className="hfp-shader-loader-progress";let p=m=>{let _=document.createElement("div");_.className="hfp-shader-loader-row";let h=document.createElement("span");h.className="hfp-shader-loader-label",h.textContent=m;let y=document.createElement("span");return y.className="hfp-shader-loader-value",_.appendChild(h),_.appendChild(y),c.appendChild(_),{row:_,label:h,value:y}},b=p("transition"),g=p("transition frame");return t.appendChild(i),t.appendChild(n),t.appendChild(s),t.appendChild(d),t.appendChild(c),r.appendChild(t),{root:r,fill:u,title:a,detail:s,transitionValue:b.value,frameLabel:g.label,frameValue:g.value,frameRow:g.row}}var tt=420,q=class{_el;_hideTimeout=null;constructor(e){this._el=e}show(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null),this._el.root.classList.remove("hfp-hiding"),this._el.root.classList.add("hfp-visible")}hide(){if(this._el.root.classList.contains("hfp-hiding")){this._hideTimeout||this._scheduleCleanup();return}this._el.root.classList.contains("hfp-visible")&&(this._el.root.classList.add("hfp-hiding"),this._el.root.classList.remove("hfp-visible"),this._scheduleCleanup())}reset(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null),this._el.root.classList.remove("hfp-visible","hfp-hiding"),this._el.fill.style.transform="scaleX(0)",this._el.transitionValue.textContent="",this._el.frameValue.textContent="",this._el.frameRow.style.visibility="hidden"}update(e,t){if(t!=="player"){this.reset();return}if(e.ready||!e.loading){this.hide();return}let i=typeof e.progress=="number"&&Number.isFinite(e.progress)?e.progress:0,n=typeof e.total=="number"&&Number.isFinite(e.total)?e.total:0,a=n>0?Math.min(1,Math.max(0,i/n)):0,s=Math.min(x.length-1,Math.floor(a*x.length));this._el.title.textContent=x[s]||"Preparing scene transitions",this._el.detail.textContent=e.phase==="cached"?"Loading cached transition frames before playback.":e.phase==="finalizing"?"Uploading transition textures for smooth playback.":"Rendering animated scene samples for shader transitions.",this._el.fill.style.transform=`scaleX(${a})`,this._el.transitionValue.textContent=e.currentTransition!==void 0&&e.transitionTotal!==void 0?`${e.currentTransition}/${e.transitionTotal}`:n>0?`${i}/${n}`:"";let d=e.transitionFrame!==void 0&&e.transitionFrames!==void 0?`${e.transitionFrame}/${e.transitionFrames}`:"";this._el.frameLabel.textContent=e.phase==="cached"?"cached transition frames":e.phase==="finalizing"?"finalizing transition frames":"rendering transition frames",this._el.frameValue.textContent=d,this._el.frameRow.style.visibility=d?"visible":"hidden",this._el.root.setAttribute("aria-valuenow",String(Math.round(a*100))),this.show()}get hideTimeout(){return this._hideTimeout}destroy(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null)}_scheduleCleanup(){this._hideTimeout&&clearTimeout(this._hideTimeout),this._hideTimeout=setTimeout(()=>{this._el.root.classList.remove("hfp-hiding"),this._hideTimeout=null},tt)}};var it=.1,rt=5;function te(r){return!Number.isFinite(r)||r<=0?1:Math.max(it,Math.min(rt,r))}var X=class extends HTMLElement{static get observedAttributes(){return["src","srcdoc","width","height","controls","muted","audio-locked","volume","poster","playback-rate","audio-src",T,C]}shadow;container;iframe;posterEl=null;controlsApi=null;resizeObserver;shaderLoader;probe;_ready=!1;_currentTime=0;_duration=0;_paused=!0;_scrubbing=!1;_lastUpdateMs=0;_volume=1;_compositionWidth=1920;_compositionHeight=1080;_rescaleWarned=!1;_directTimelineAdapter=null;_directTimelineClock;_parentTickRaf=null;_media;_scenes=[];constructor(){super(),this.shadow=this.attachShadow({mode:"open"}),Ce(this.shadow,ye),{container:this.container,iframe:this.iframe}=xe(),this.shadow.appendChild(this.container);let e=Oe();this.shadow.appendChild(e.root),this.shaderLoader=new q(e),this._media=new W({dispatchEvent:t=>this.dispatchEvent(t),getMuted:()=>this.muted,getVolume:()=>this._volume,getPlaybackRate:()=>this.playbackRate,getCurrentTime:()=>this._currentTime,isPaused:()=>this._paused}),this._directTimelineClock=new z({onTimeUpdate:(t,i)=>{this._currentTime=t,this.controlsApi?.updateTime(t,i),this.dispatchEvent(new CustomEvent("timeupdate",{detail:{currentTime:t}}))},getLoop:()=>this.loop,restart:()=>{this.seek(0),this.play()},onPaused:()=>{this._media.audioOwner==="parent"&&this._media.pauseAll(),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.dispatchEvent(new Event("ended"))},onEnded:()=>this.loop}),this.probe=new U(this.iframe,{onReady:t=>this._onProbeReady(t),onError:t=>this.dispatchEvent(new CustomEvent("error",{detail:{message:t}}))}),this.addEventListener("click",t=>{Ae(t)||(this._paused?this.play():this.pause())}),this.resizeObserver=new ResizeObserver(()=>this._rescale()),this._onMessage=this._onMessage.bind(this),this._onIframeLoad=this._onIframeLoad.bind(this)}connectedCallback(){this.resizeObserver.observe(this),window.addEventListener("message",this._onMessage),this.iframe.addEventListener("load",this._onIframeLoad),this.hasAttribute("controls")&&this._setupControls(),this.hasAttribute("poster")&&(this.posterEl=K(this.shadow,this.getAttribute("poster"),this.posterEl)),this.hasAttribute("audio-src")&&this._media.setupFromUrl(this.getAttribute("audio-src")),this.hasAttribute("srcdoc")&&(this.iframe.srcdoc=G(this,this.getAttribute("srcdoc"))),this.hasAttribute("src")&&(this.iframe.src=B(this,this.getAttribute("src"))),!this.hasAttribute("audio-locked")&&this._isLockedHostEnvironment()&&this._applyAudioLock(!0)}disconnectedCallback(){this.resizeObserver.disconnect(),window.removeEventListener("message",this._onMessage),this.iframe.removeEventListener("load",this._onIframeLoad),this.probe.stop(),this._directTimelineClock.stop(),this._stopParentTickClock(),this._directTimelineAdapter=null,this.shaderLoader.destroy(),this._media.destroy(),this.controlsApi?.destroy()}attributeChangedCallback(e,t,i){switch(e){case"src":i&&(this._ready=!1,this.iframe.src=B(this,i));break;case"srcdoc":this._ready=!1,i!==null?this.iframe.srcdoc=G(this,i):this.iframe.removeAttribute("srcdoc");break;case"width":this._compositionWidth=P(i)??1920,this._rescale();break;case"height":this._compositionHeight=P(i)??1080,this._rescale();break;case"controls":i!==null?this._setupControls():(this.controlsApi?.destroy(),this.controlsApi=null);break;case"poster":this.posterEl=K(this.shadow,i,this.posterEl);break;case"playback-rate":{let n=te(parseFloat(i||"1"));this._media.updatePlaybackRate(n),this._sendControl("set-playback-rate",{playbackRate:n}),this._directTimelineAdapter?.timeScale?.(n),this.controlsApi?.updateSpeed(n),this.dispatchEvent(new Event("ratechange"));break}case"muted":this._handleMutedChange(i);break;case"audio-locked":this._applyAudioLock(i!==null);break;case"volume":{let n=Math.max(0,Math.min(1,parseFloat(i||"1")));this._volume=n,this._media.updateVolume(n),this._sendControl("set-volume",{volume:n}),this.controlsApi?.updateVolume(n),this.dispatchEvent(new Event("volumechange"));break}case"audio-src":i?this._media.setupFromUrl(i):this._media.teardownUrlAudio();break;case T:case C:this._reloadShaderOptions();break}}get iframeElement(){return this.iframe}get scenes(){return this._scenes}play(){this.posterEl?.remove(),this.posterEl=null,this._duration>0&&this._currentTime>=this._duration&&this.seek(0),this._paused=!1;let e=this._tryDirectTimelinePlay();e||(this._sendControl("play"),this._ready&&!this._directTimelineAdapter&&this._startParentTickClock()),this._media.audioOwner==="parent"&&this._media.playAll(),this.controlsApi?.updatePlaying(!0),this.dispatchEvent(new Event("play")),e&&this._directTimelineAdapter&&this._directTimelineClock.start(this._directTimelineAdapter,()=>this._currentTime,()=>this._duration,()=>this._paused)}pause(){this._tryDirectTimelinePause()||this._sendControl("pause"),this._directTimelineClock.stop(),this._stopParentTickClock(),this._media.audioOwner==="parent"&&this._media.pauseAll(),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.dispatchEvent(new Event("pause"))}stopMedia(){this._sendControl("stop-media"),this._stopIframeMedia(),this._media.stopAdoptedMedia()}seek(e){!this._trySyncSeek(e)&&!this._tryDirectTimelineSeek(e)&&this._sendControl("seek",{frame:Math.round(e*30)}),this._directTimelineClock.stop(),this._stopParentTickClock(),this._currentTime=e,this._media.audioOwner==="parent"&&(this._scrubbing?this._media.scrubAll(e):(this._media.pauseAll(),this._media.seekAll(e))),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.controlsApi?.updateTime(this._currentTime,this._duration)}setColorGrading(e,t){this._sendControl("set-color-grading",{target:e,grading:t})}clearColorGrading(e){this._sendControl("set-color-grading",{target:e,grading:null})}setColorGradingCompare(e,t){this._sendControl("set-color-grading-compare",{target:e,compare:t})}clearColorGradingCompare(e){this._sendControl("set-color-grading-compare",{target:e,compare:{enabled:!1}})}get currentTime(){return this._currentTime}set currentTime(e){this.seek(e)}get duration(){return this._duration}get paused(){return this._paused}get ready(){return this._ready}get playbackRate(){return te(parseFloat(this.getAttribute("playback-rate")||"1"))}set playbackRate(e){this.setAttribute("playback-rate",String(te(e)))}get shaderCaptureScale(){return Ie(this)}set shaderCaptureScale(e){this.setAttribute(T,String(e))}get shaderLoading(){return M(this)}set shaderLoading(e){e==="composition"?this.removeAttribute(C):this.setAttribute(C,e)}get muted(){return this.hasAttribute("muted")}set muted(e){e?this.setAttribute("muted",""):this.removeAttribute("muted")}get audioLocked(){return this.hasAttribute("audio-locked")}set audioLocked(e){e?this.setAttribute("audio-locked",""):this.removeAttribute("audio-locked")}_isLockedHostEnvironment(){if(typeof navigator>"u")return!1;let e=navigator.userAgent||"";return/\bClaude\/\d/.test(e)&&/\bElectron\b/.test(e)}_isAudioLocked(){return this.hasAttribute("audio-locked")||this._isLockedHostEnvironment()}_isSlideshowPlayer(){return this.closest("hyperframes-slideshow")!==null}_handleMutedChange(e){if(e===null&&this._isAudioLocked()){this.setAttribute("muted","");return}this._media.updateMuted(e!==null),this._setIframeMediaMuted(e!==null),this._sendControl("set-muted",{muted:e!==null}),this.controlsApi?.updateMuted(e!==null),this.dispatchEvent(new Event("volumechange"))}_applyAudioLock(e){e&&(this.muted=!0),this.controlsApi?.setVolumeControlsHidden(e)}get volume(){return this._volume}set volume(e){this.setAttribute("volume",String(Math.max(0,Math.min(1,e))))}get loop(){return this.hasAttribute("loop")}set loop(e){e?this.setAttribute("loop",""):this.removeAttribute("loop")}_sendControl(e,t={}){try{this.iframe.contentWindow?.postMessage({source:"hf-parent",type:"control",action:e,...t},"*")}catch{}}_getSameOriginIframeDocument(){try{return this.iframe.contentDocument}catch{return null}}_setIframeMediaMuted(e){let t=this._getSameOriginIframeDocument();if(t)for(let i of t.querySelectorAll("video, audio"))v(i)&&(i.muted=e||i.defaultMuted)}_stopIframeMedia(){let e=this._getSameOriginIframeDocument();if(e)for(let t of e.querySelectorAll("video, audio"))v(t)&&t.pause()}_replayBridgeState(){this._sendControl("set-muted",{muted:this.muted}),this._sendControl("set-volume",{volume:this._volume}),this._sendControl("set-playback-rate",{playbackRate:this.playbackRate}),this._sendControl("set-native-media-sync-disabled",{disabled:this._isSlideshowPlayer()}),this._sendControl("set-web-audio-media-disabled",{disabled:this._isSlideshowPlayer()})}_reloadShaderOptions(){if(M(this)!=="player"&&this.shaderLoader.reset(),this.hasAttribute("srcdoc")){this.iframe.srcdoc=G(this,this.getAttribute("srcdoc")||"");return}this.hasAttribute("src")&&(this.iframe.src=B(this,this.getAttribute("src")||""))}_trySyncSeek(e){try{let i=this.iframe.contentWindow?.__player;return typeof i?.seek!="function"?!1:(i.seek.call(i,e),!0)}catch{return!1}}_withDirectTimeline(e){let t=this._directTimelineAdapter||this.probe.resolveDirectTimelineAdapter();if(!t)return!1;try{return e(t),this._directTimelineAdapter=t,!0}catch{return!1}}_tryDirectTimelineSeek(e){return this._withDirectTimeline(t=>{t.seek(e,!1),t.pause()})}_tryDirectTimelinePlay(){return this._withDirectTimeline(e=>{e.play()})}_tryDirectTimelinePause(){return this._withDirectTimeline(e=>{e.pause()})}_startParentTickClock(){this._stopParentTickClock();let e=()=>{if(this._paused){this._parentTickRaf=null;return}this._sendControl("tick"),this._parentTickRaf=requestAnimationFrame(e)};this._parentTickRaf=requestAnimationFrame(e)}_stopParentTickClock(){this._parentTickRaf!==null&&(cancelAnimationFrame(this._parentTickRaf),this._parentTickRaf=null)}_onMessage(e){Re(e,this.iframe.contentWindow,{getPlaybackState:()=>({currentTime:this._currentTime,duration:this._duration,paused:this._paused,lastUpdateMs:this._lastUpdateMs}),setPlaybackState:({currentTime:t,duration:i,paused:n,lastUpdateMs:a})=>{this._currentTime=t,this._duration=i,this._paused=n,this._lastUpdateMs=a},getShaderLoadingMode:()=>M(this),shaderLoader:this.shaderLoader,setCompositionSize:(t,i)=>{this._compositionWidth=t,this._compositionHeight=i,this._rescale()},sendControl:(t,i)=>this._sendControl(t,i),getIframeDoc:()=>this.iframe.contentDocument,onRuntimeReady:()=>this._replayBridgeState(),onRuntimeTimelineReady:t=>this._onRuntimeTimelineReady(t),shouldPromoteMediaAutoplayFallback:()=>!this._isSlideshowPlayer(),setScenes:t=>{this._scenes=t,this.dispatchEvent(new CustomEvent("scenes",{detail:{scenes:t}}))},updateControlsTime:(t,i)=>this.controlsApi?.updateTime(t,i),updateControlsPlaying:t=>this.controlsApi?.updatePlaying(t),dispatchEvent:t=>this.dispatchEvent(t),seek:t=>this.seek(t),play:()=>this.play(),getLoop:()=>this.loop,media:this._media})}_onRuntimeTimelineReady(e){if(this._ready)return;this.probe.stop(),this._duration=e,this._directTimelineAdapter=null,this._ready=!0,this.controlsApi?.updateTime(this._currentTime,e),this.dispatchEvent(new CustomEvent("ready",{detail:{duration:e}})),this._rescale();let t=this._getSameOriginIframeDocument();t&&this._media.setupFromIframe(t),this._replayBridgeState(),this._setIframeMediaMuted(this.muted),this.hasAttribute("autoplay")&&this.play()}_onProbeReady({duration:e,adapter:t,compositionSize:i}){this._duration=e,this._directTimelineAdapter=t.kind==="direct-timeline"?t.timeline:null,this._ready=!0,this.controlsApi?.updateTime(0,e),this.dispatchEvent(new CustomEvent("ready",{detail:{duration:e}})),i&&(this._compositionWidth=i.width,this._compositionHeight=i.height,this._rescale());try{let n=this.iframe.contentDocument;n&&this._media.setupFromIframe(n)}catch{}this._setIframeMediaMuted(this.muted),this.hasAttribute("autoplay")&&this.play()}_rescale(){!Me(this,this.iframe,this._compositionWidth,this._compositionHeight)&&this._ready&&!this._rescaleWarned&&(this._rescaleWarned=!0,console.warn("[hyperframes-player] rescale no-op after ready \u2014 zero-size player element",{src:this.getAttribute("src"),offsetWidth:this.offsetWidth,offsetHeight:this.offsetHeight,compositionWidth:this._compositionWidth,compositionHeight:this._compositionHeight}))}_onIframeLoad(){this._directTimelineAdapter=null,this._directTimelineClock.stop(),this._stopParentTickClock(),this.shaderLoader.reset(),this._media.resetForIframeLoad(),this.probe.start()}_setupControls(){this.controlsApi||(this.controlsApi=we(this.shadow,this.muted,this._volume,this.getAttribute("speed-presets"),{onPlay:()=>this.play(),onPause:()=>this.pause(),onSeek:e=>this.seek(e*this._duration),onScrubStart:()=>{this._scrubbing=!0},onScrubEnd:()=>{this._scrubbing=!1,this.seek(this._currentTime)},onSpeedChange:e=>{this.playbackRate=e},onMuteToggle:()=>{this.muted=!this.muted},onVolumeChange:e=>{this.volume=e}},this._isAudioLocked()))}get _audioOwner(){return this._media.audioOwner}get _parentMedia(){return this._media.entries}_mirrorParentMediaTime(e,t){this._media.mirrorTime(e,t)}_promoteToParentProxy(){let e=null;try{e=this.iframe.contentDocument}catch{}this._media.promoteToParentProxy(e,(t,i)=>this._mirrorParentMediaTime(t,i)),this._sendControl("set-media-output-muted",{muted:!0})}_observeDynamicMedia(e){this._media.setupFromIframe(e)}};customElements.get("hyperframes-player")||customElements.define("hyperframes-player",X);return ze(nt);})();
459
+ `,ye='<svg width="24" height="24" viewBox="46 21 54 56" fill="currentColor"><path d="M87.5129 57.5141L56.9696 73.5433C52.8371 75.7098 48.7046 73.2553 49.6688 69.2104L58.9483 30.1391C59.9125 26.0942 65.2097 23.6397 68.3154 25.8062L91.2447 41.8354C96.4668 45.4796 94.4631 53.8699 87.5129 57.5141Z"/></svg>',Ee='<svg width="24" height="24" viewBox="0 0 18 18" fill="currentColor"><rect x="3" y="2" width="4" height="14"/><rect x="11" y="2" width="4" height="14"/></svg>',Z='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/><path d="M14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>',Q='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/></svg>',Se='<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3z"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z" opacity="0.3"/><line x1="18" y1="7" x2="14" y2="17" stroke="currentColor" stroke-width="2"/></svg>';var J=[.25,.5,1,1.5,2,4];function R(r){return Number.isInteger(r)?`${r}x`:`${r}x`}function V(r){if(!Number.isFinite(r)||r<0)return"0:00";let e=Math.floor(r),t=Math.floor(e/60),i=e%60;return`${t}:${i.toString().padStart(2,"0")}`}function Te(r,e,t={}){let i=t.speedPresets??J,n=document.createElement("div");n.className="hfp-controls",n.addEventListener("click",o=>{o.stopPropagation()});let s=document.createElement("button");s.className="hfp-play-btn",s.type="button",s.innerHTML=`<span class="hfp-ico hfp-ico-play">${ye}</span><span class="hfp-ico hfp-ico-pause">${Ee}</span>`,s.setAttribute("aria-label","Play");let a=document.createElement("div");a.className="hfp-scrubber";let d=document.createElement("div");d.className="hfp-progress",d.style.width="0%",a.appendChild(d);let u=document.createElement("span");u.className="hfp-time",u.textContent="0:00 / 0:00";let c=document.createElement("div");c.className="hfp-speed-wrap";let p=document.createElement("button");p.className="hfp-speed-btn",p.type="button",p.textContent="1x",p.setAttribute("aria-label","Playback speed");let b=document.createElement("div");b.className="hfp-speed-menu",b.setAttribute("role","menu");for(let o of i){let l=document.createElement("button");l.className="hfp-speed-option",l.type="button",l.setAttribute("role","menuitem"),l.dataset.speed=String(o),l.textContent=R(o),o===1&&l.classList.add("hfp-active"),b.appendChild(l)}c.appendChild(b),c.appendChild(p);let g=document.createElement("div");g.className="hfp-volume-wrap";let m=document.createElement("button");m.className="hfp-mute-btn",m.type="button",m.innerHTML=Z,m.setAttribute("aria-label","Mute");let y=document.createElement("div");y.className="hfp-volume-slider-wrap";let h=document.createElement("div");h.className="hfp-volume-slider",h.setAttribute("role","slider"),h.setAttribute("aria-label","Volume"),h.setAttribute("aria-valuemin","0"),h.setAttribute("aria-valuemax","100"),h.setAttribute("aria-valuenow","100"),h.tabIndex=0;let _=document.createElement("div");_.className="hfp-volume-fill",_.style.width="100%",h.appendChild(_),y.appendChild(h),g.appendChild(y),g.appendChild(m),t.audioLocked&&(g.style.display="none"),n.appendChild(s),n.appendChild(a),n.appendChild(u),n.appendChild(g),n.appendChild(c),r.appendChild(n);let I=!1,w=!1,S=1,k=null,D=i.indexOf(1);D===-1&&(D=0);let O=(o,l)=>o?Se:l===0?Q:l<.5?Q:Z;s.addEventListener("click",o=>{o.stopPropagation(),I?e.onPause():e.onPlay()}),m.addEventListener("click",o=>{o.stopPropagation(),e.onMuteToggle()});let A=!1,N=o=>{let l=h.getBoundingClientRect(),f=Math.max(0,Math.min(1,(o-l.left)/l.width));S=f,_.style.width=`${f*100}%`,h.setAttribute("aria-valuenow",String(Math.round(f*100))),w&&f>0&&e.onMuteToggle(),m.innerHTML=O(w,f),e.onVolumeChange(f)};h.addEventListener("mousedown",o=>{o.stopPropagation(),A=!0,N(o.clientX)});let ie=o=>{A&&N(o.clientX)},re=()=>{A=!1};document.addEventListener("mousemove",ie),document.addEventListener("mouseup",re),h.addEventListener("touchstart",o=>{A=!0;let l=o.touches[0];l&&N(l.clientX)},{passive:!0});let ne=o=>{if(A){let l=o.touches[0];l&&N(l.clientX)}},oe=()=>{A=!1};document.addEventListener("touchmove",ne,{passive:!0}),document.addEventListener("touchend",oe);let se=.05;h.addEventListener("keydown",o=>{let l=S;if(o.key==="ArrowRight"||o.key==="ArrowUp")l=Math.min(1,S+se);else if(o.key==="ArrowLeft"||o.key==="ArrowDown")l=Math.max(0,S-se);else return;o.preventDefault(),o.stopPropagation(),S=l,_.style.width=`${l*100}%`,h.setAttribute("aria-valuenow",String(Math.round(l*100))),w&&l>0&&e.onMuteToggle(),m.innerHTML=O(w,l),e.onVolumeChange(l)});let ae=o=>{for(let l of b.querySelectorAll(".hfp-speed-option"))l.classList.toggle("hfp-active",l.dataset.speed===String(o))};p.addEventListener("click",o=>{o.stopPropagation();let l=b.classList.toggle("hfp-open");p.setAttribute("aria-expanded",String(l))}),b.addEventListener("click",o=>{o.stopPropagation();let l=o.target.closest(".hfp-speed-option");if(!l)return;let f=parseFloat(l.dataset.speed);D=i.indexOf(f),p.textContent=R(f),ae(f),b.classList.remove("hfp-open"),p.setAttribute("aria-expanded","false"),e.onSpeedChange(f)});let le=()=>{b.classList.remove("hfp-open"),p.setAttribute("aria-expanded","false")};document.addEventListener("click",le);let F=o=>{let l=a.getBoundingClientRect(),f=Math.max(0,Math.min(1,(o-l.left)/l.width));e.onSeek(f)},E=!1;a.addEventListener("mousedown",o=>{o.stopPropagation(),E=!0,e.onScrubStart?.(),F(o.clientX)});let de=o=>{E&&F(o.clientX)},ue=()=>{E&&(E=!1,e.onScrubEnd?.())};document.addEventListener("mousemove",de),document.addEventListener("mouseup",ue),a.addEventListener("touchstart",o=>{E=!0,e.onScrubStart?.();let l=o.touches[0];l&&F(l.clientX)},{passive:!0});let pe=o=>{if(E){let l=o.touches[0];l&&F(l.clientX)}},ce=()=>{E&&(E=!1,e.onScrubEnd?.())};document.addEventListener("touchmove",pe,{passive:!0}),document.addEventListener("touchend",ce);let he=()=>{k&&clearTimeout(k),k=setTimeout(()=>{I&&n.classList.add("hfp-hidden")},3e3)},H=r instanceof ShadowRoot?r.host:r,me=()=>{n.classList.remove("hfp-hidden"),he()},fe=()=>{I&&n.classList.add("hfp-hidden")};return H.addEventListener("mousemove",me),H.addEventListener("mouseleave",fe),{updateTime(o,l){let f=l>0?Math.min(o,l):o,Fe=l>0?f/l*100:0;d.style.width=`${Fe}%`,u.textContent=`${V(f)} / ${V(l)}`},updatePlaying(o){I=o,s.classList.toggle("hfp-playing",o),s.setAttribute("aria-label",o?"Pause":"Play"),o?he():n.classList.remove("hfp-hidden")},updateSpeed(o){let l=i.indexOf(o);l!==-1&&(D=l),p.textContent=R(o),ae(o)},updateMuted(o){w=o,m.innerHTML=O(o,S),m.setAttribute("aria-label",o?"Unmute":"Mute")},updateVolume(o){S=o,_.style.width=`${o*100}%`,h.setAttribute("aria-valuenow",String(Math.round(o*100))),m.innerHTML=O(w,o)},setVolumeControlsHidden(o){g.style.display=o?"none":""},show(){n.style.display=""},hide(){n.style.display="none"},destroy(){document.removeEventListener("mousemove",de),document.removeEventListener("mouseup",ue),document.removeEventListener("touchmove",pe),document.removeEventListener("touchend",ce),document.removeEventListener("mousemove",ie),document.removeEventListener("mouseup",re),document.removeEventListener("touchmove",ne),document.removeEventListener("touchend",oe),document.removeEventListener("click",le),H.removeEventListener("mousemove",me),H.removeEventListener("mouseleave",fe),k&&clearTimeout(k),n.remove()}}}function we(r,e,t,i,n,s=!1){let a=i?i.split(",").map(Number).filter(c=>!isNaN(c)&&c>0):void 0,d={...a?{speedPresets:a}:{},audioLocked:s},u=Te(r,n,d);return u.updateMuted(e),u.updateVolume(t),u}function K(r,e,t){return e?(t||(t=document.createElement("img"),t.className="hfp-poster",r.appendChild(t)),t.src=e,t):(t?.remove(),null)}function Ae(r){return r.composedPath().some(e=>e instanceof HTMLElement&&e.classList.contains("hfp-controls"))}var j=null;function Ce(r,e){if(typeof CSSStyleSheet<"u")try{j||(j=new CSSStyleSheet,j.replaceSync(e)),r.adoptedStyleSheets=[j];return}catch{}let t=document.createElement("style");t.textContent=e,r.appendChild(t)}function Me(){let r=document.createElement("div");r.className="hfp-container";let e=document.createElement("iframe");return e.className="hfp-iframe",e.sandbox.add("allow-scripts","allow-same-origin"),e.allow="autoplay; fullscreen",e.referrerPolicy="no-referrer",e.title="HyperFrames Composition",r.appendChild(e),{container:r,iframe:e}}function xe(r,e,t,i){let n=r.offsetWidth,s=r.offsetHeight;if(n===0||s===0)return!1;let a=Math.min(n/t,s/i);return e.style.width=`${t}px`,e.style.height=`${i}px`,e.style.transform=`translate(-50%, -50%) scale(${a})`,!0}var z=class{constructor(e){this._callbacks=e}_callbacks;_raf=null;_lastUpdateMs=0;start(e,t,i,n){this.stop();let s=()=>{if(n()){this._raf=null;return}let a;try{a=e.time()}catch{this._raf=null;return}let d=i();d>0&&(a=Math.min(a,d));let u=d>0&&a>=d,c=performance.now();if((c-this._lastUpdateMs>100||u)&&(this._lastUpdateMs=c,this._callbacks.onTimeUpdate(a,d)),u){if(this._callbacks.getLoop()){this._callbacks.restart();return}try{e.pause()}catch{}this._callbacks.onPaused(),this._raf=null;return}this._raf=requestAnimationFrame(s)};this._raf=requestAnimationFrame(s)}stop(){this._raf!==null&&(cancelAnimationFrame(this._raf),this._raf=null)}get isRunning(){return this._raf!==null}};function ke(r){let e=Array.from(r.querySelectorAll("[data-composition-id]"));if(e.length===0)return r.body?[r.body]:[];let t=[];for(let i of e)qe(i)||t.push(i);return Ge(r),t}function Ge(r){let e=r.body;if(!e||typeof console>"u"||typeof console.warn!="function")return;let t=e.querySelectorAll("audio[data-start], video[data-start]");if(t.length===0)return;let i=[];for(let n of t)n.closest("[data-composition-id]")||i.push(n);i.length!==0&&console.warn(`[hyperframes-player] selectMediaObserverTargets: composition hosts are present, but ${i.length} body-level timed media element(s) sit outside every [data-composition-id] subtree and will not be observed. Move them inside a composition host or the parent-frame proxy will never adopt them.`,i)}function qe(r){let e=r.parentElement;for(;e;){if(e.hasAttribute("data-composition-id"))return!0;e=e.parentElement}return!1}function $(r){let e=r.ownerDocument?.defaultView;return e&&r instanceof e.Element?!0:r instanceof Element}function v(r){if(!$(r)||r.tagName!=="AUDIO"&&r.tagName!=="VIDEO")return!1;let e=r.ownerDocument?.defaultView;return e&&r instanceof e.HTMLMediaElement?!0:r instanceof HTMLMediaElement}var Ye=.05,Xe=2,W=class{_entries=[];_mediaObserver;_playbackErrorPosted=!1;_audioOwner="runtime";_urlAudioEntry=null;_urlAudioSrc=null;_dispatchEvent;_getMuted;_getVolume;_getPlaybackRate;_getCurrentTime;_isPaused;constructor(e){this._dispatchEvent=e.dispatchEvent,this._getMuted=e.getMuted,this._getVolume=e.getVolume,this._getPlaybackRate=e.getPlaybackRate,this._getCurrentTime=e.getCurrentTime,this._isPaused=e.isPaused}get audioOwner(){return this._audioOwner}get entries(){return this._entries}resetForIframeLoad(){this._playbackErrorPosted=!1;let e=this._audioOwner==="parent";this._audioOwner="runtime",this.pauseAll(),this.teardownObserver(),e&&this._dispatchEvent(new CustomEvent("audioownershipchange",{detail:{owner:"runtime",reason:"iframe-reload"}}))}destroy(){this.teardownObserver();for(let e of this._entries)e.el.pause(),e.el.src="";this._entries=[],this._urlAudioEntry=null,this._urlAudioSrc=null,this._audioOwner="runtime",this._playbackErrorPosted=!1}updateMuted(e){for(let t of this._entries)t.el.muted=e}updateVolume(e){for(let t of this._entries)t.el.volume=e}updatePlaybackRate(e){for(let t of this._entries)t.el.playbackRate=e}_playEntry(e){e.el.src&&e.el.play().catch(t=>this._reportPlaybackError(t))}_playEntryIfActive(e){this._refreshEntryBounds(e);let t=this._getCurrentTime()-e.start;t<0||t>=e.duration||this._playEntry(e)}_refreshEntryBounds(e){if(!e.source?.isConnected)return;let t=parseFloat(e.source.getAttribute("data-start")||"0");e.start=Number.isFinite(t)?t:0;let i=parseFloat(e.source.getAttribute("data-duration")||"");e.duration=Number.isFinite(i)&&i>0?i:Number.POSITIVE_INFINITY}_gateEntryPlayback(e,t){return t<0||t>=e.duration?(e.el.paused||e.el.pause(),e.driftSamples=0,!1):(this._audioOwner==="parent"&&!this._isPaused()&&e.el.paused&&this._playEntry(e),!0)}playAll(){for(let e of this._entries)this._playEntryIfActive(e)}pauseAll(){for(let e of this._entries)e.el.pause()}stopAdoptedMedia(){for(let e of this._entries)e.source&&e.el.pause()}seekAll(e){for(let t of this._entries){this._refreshEntryBounds(t);let i=e-t.start;i>=0&&i<t.duration&&(t.el.currentTime=i)}}scrubAll(e){for(let t of this._entries){this._refreshEntryBounds(t);let i=e-t.start;i>=0&&i<t.duration?(t.el.currentTime=i,this._playEntry(t)):t.el.paused||t.el.pause()}}mirrorTime(e,t){let i=t?.force===!0;for(let n of this._entries){this._refreshEntryBounds(n);let s=e-n.start;this._gateEntryPlayback(n,s)&&(Math.abs(n.el.currentTime-s)>Ye?(n.driftSamples+=1,(i||n.driftSamples>=Xe)&&(n.el.currentTime=s,n.driftSamples=0)):n.driftSamples=0)}}promoteToParentProxy(e,t){if(this._audioOwner==="parent")return;if(this._audioOwner="parent",e)for(let n of e.querySelectorAll("video, audio"))v(n)&&(n.muted=!0);let i=this._getCurrentTime();t?t(i,{force:!0}):this.mirrorTime(i,{force:!0}),this._isPaused()||this.playAll(),this._dispatchEvent(new CustomEvent("audioownershipchange",{detail:{owner:"parent",reason:"autoplay-blocked"}}))}setupFromIframe(e){let t=e.querySelectorAll("audio[data-start], video[data-start]");for(let i of t)v(i)&&this._adoptIframeMedia(i);this._observeDynamicMedia(e)}setupFromUrl(e){if(this._urlAudioSrc===e&&this._urlAudioEntry)return;this.teardownUrlAudio();let t=this._createEntry(e,"audio",0,1/0);this._urlAudioEntry=t,this._urlAudioSrc=t?e:null,t&&this._audioOwner==="parent"&&!this._isPaused()&&(this.mirrorTime(this._getCurrentTime(),{force:!0}),this.playAll())}teardownUrlAudio(){let e=this._urlAudioEntry;if(this._urlAudioEntry=null,this._urlAudioSrc=null,!e)return;e.el.pause(),e.el.src="";let t=this._entries.indexOf(e);t!==-1&&this._entries.splice(t,1)}teardownObserver(){this._mediaObserver?.disconnect(),this._mediaObserver=void 0}_reportPlaybackError(e){this._playbackErrorPosted||(this._playbackErrorPosted=!0,this._dispatchEvent(new CustomEvent("playbackerror",{detail:{source:"parent-proxy",error:e}})))}_createEntry(e,t,i,n,s){if(this._entries.some(c=>c.el.src===e))return null;let a=t==="video"?document.createElement("video"):new Audio;a.preload="auto",a.src=e,a.load(),a.muted=this._getMuted(),a.volume=this._getVolume();let d=this._getPlaybackRate();d!==1&&(a.playbackRate=d);let u={el:a,start:i,duration:n,driftSamples:0,source:s};return this._entries.push(u),u}_resolveIframeMediaSrc(e){let t=e.getAttribute("src")||e.querySelector("source")?.getAttribute("src");return t?new URL(t,e.ownerDocument.baseURI).href:null}_adoptIframeMedia(e){if(e.preload==="metadata"||e.preload==="none")return;let t=this._resolveIframeMediaSrc(e);if(!t)return;let i=parseFloat(e.getAttribute("data-start")||"0"),n=parseFloat(e.getAttribute("data-duration")||"Infinity"),s=e.tagName==="VIDEO"?"video":"audio",a=this._createEntry(t,s,i,n,e);a&&this._audioOwner==="parent"&&(this.mirrorTime(this._getCurrentTime(),{force:!0}),this._isPaused()||this._playEntryIfActive(a))}_detachIframeMedia(e){let t=this._resolveIframeMediaSrc(e);if(!t)return;let i=this._entries.findIndex(s=>s.el.src===t);if(i===-1)return;let n=this._entries[i];n.el.pause(),n.el.src="",this._entries.splice(i,1)}_observeDynamicMedia(e){if(this.teardownObserver(),typeof MutationObserver>"u"||!e.body)return;let t=new MutationObserver(s=>{for(let a of s){if(a.type==="attributes"&&a.attributeName==="preload"){let d=a.target;v(d)&&d.matches("audio[data-start], video[data-start]")&&d.preload==="auto"&&this._adoptIframeMedia(d);continue}for(let d of a.addedNodes){if(!$(d))continue;let u=[];v(d)&&d.matches("audio[data-start], video[data-start]")&&u.push(d);let c=d.querySelectorAll("audio[data-start], video[data-start]");for(let p of c)v(p)&&u.push(p);for(let p of u)this._adoptIframeMedia(p)}for(let d of a.removedNodes){if(!$(d))continue;let u=[];v(d)&&d.matches("audio[data-start], video[data-start]")&&u.push(d);let c=d.querySelectorAll("audio[data-start], video[data-start]");for(let p of c)v(p)&&u.push(p);for(let p of u)this._detachIframeMedia(p)}}}),i={childList:!0,subtree:!0,attributes:!0,attributeFilter:["preload"]},n=ke(e);for(let s of n)t.observe(s,i);this._mediaObserver=t}};function Le(r,e,t,i){let n=(r.frame??0)/e,s=t.duration>0?Math.min(n,t.duration):n,a=!t.paused,d=!r.isPlaying,u=t.duration>0&&s>=t.duration&&(a||r.isPlaying);if(u&&i.getLoop())return i.media.audioOwner==="parent"&&i.media.pauseAll(),i.seek(0),i.play(),{...t,currentTime:s,paused:!1};let c={...t,currentTime:s,paused:d};i.media.audioOwner==="parent"&&(a&&d?i.media.pauseAll():!a&&!d&&i.media.playAll(),i.media.mirrorTime(s));let p=performance.now(),b=d!==t.paused;return(p-t.lastUpdateMs>100||b)&&(c.lastUpdateMs=p,i.updateControlsTime(s,t.duration),i.updateControlsPlaying(!d),i.dispatchEvent(new CustomEvent("timeupdate",{detail:{currentTime:s}}))),u&&(i.media.audioOwner==="parent"&&i.media.pauseAll(),c.paused=!0,i.updateControlsPlaying(!1),i.dispatchEvent(new Event("ended"))),c}var Ze=["seconds-time","rational-fps","seek-keep-playing"];function Qe(r,e){let t=Math.abs(r),i=Math.abs(e);for(;i!==0;){let n=t%i;t=i,i=n}return t||1}function Je(r){let e=Number.isFinite(r)&&r>0?r:30,t=Number.isInteger(e)?1:1e6,i=Math.round(e*t),n=Qe(i,t);return{numerator:i/n,denominator:t/n}}function Ke(r){if(typeof r!="object"||r===null)return null;let e=r;return!Number.isFinite(e.numerator)||!Number.isFinite(e.denominator)||(e.numerator??0)<=0||(e.denominator??0)<=0?null:Number(e.numerator)/Number(e.denominator)}function Pe(r){return{protocolVersion:1,capabilities:Ze,fps:Je(r)}}function et(r){return Array.isArray(r)&&r.every(e=>typeof e=="string")}function Re(r,e=30){if(typeof r!="object"||r===null)return{status:"legacy",fps:e};let t=r;if(t.protocolVersion===void 0)return{status:"legacy",fps:e};if(t.protocolVersion!==1)return{status:"unsupported",code:"unsupported_protocol_version",receivedVersion:t.protocolVersion};let i=Ke(t.fps);return i===null||!et(t.capabilities)?{status:"unsupported",code:"invalid_protocol_metadata",receivedVersion:t.protocolVersion}:{status:"supported",fps:i,metadata:t}}function tt(r){return Array.isArray(r)?r.filter(e=>typeof e=="object"&&e!==null&&typeof e.id=="string"&&typeof e.start=="number"&&typeof e.duration=="number"):[]}function Ie(r,e,t){if(r.source!==e)return;let i=r.data;if(!i||i.source!=="hf-preview")return;let n=Re(i);if(n.status==="unsupported"){t.dispatchEvent(new CustomEvent("runtimeprotocolerror",{detail:{code:n.code,receivedVersion:n.receivedVersion}}));return}if(t.setRuntimeFps?.(n.fps),i.type==="shader-transition-state"){let s=i.state&&typeof i.state=="object"?i.state:{};t.shaderLoader.update(s,t.getShaderLoadingMode()),t.dispatchEvent(new CustomEvent("shadertransitionstate",{detail:{compositionId:i.compositionId,state:s}}));return}if(i.type==="ready"){t.onRuntimeReady();return}if(i.type==="state"){t.setPlaybackState(Le({frame:i.frame??0,isPlaying:!!i.isPlaying},n.fps,t.getPlaybackState(),t));return}if(i.type==="media-autoplay-blocked"){if(t.shouldPromoteMediaAutoplayFallback?.()===!1)return;let s=null;try{s=t.getIframeDoc()}catch{}t.media.promoteToParentProxy(s,(a,d)=>t.media.mirrorTime(a,d)),t.sendControl("set-media-output-muted",{muted:!0});return}if(i.type==="timeline"&&i.durationInFrames>0){if(Number.isFinite(i.durationInFrames)){let s=t.getPlaybackState(),a=i.durationInFrames/n.fps;t.setPlaybackState({...s,duration:a}),t.updateControlsTime(s.currentTime,a),t.onRuntimeTimelineReady(a)}t.setScenes(tt(i.scenes));return}i.type==="stage-size"&&Number.isFinite(i.width)&&i.width>0&&Number.isFinite(i.height)&&i.height>0&&t.setCompositionSize(i.width,i.height)}var T="shader-capture-scale",C="shader-loading",it="__hf_shader_capture_scale",rt="__hf_shader_loading",M=["Preparing scene transitions","Sampling outgoing scene motion","Sampling incoming scene motion","Caching transition frames","Finalizing transition preview"];function ee(r){if(r===null)return null;let e=Number(r);return!Number.isFinite(e)||e<=0?null:String(Math.min(1,Math.max(.25,e)))}function nt(r){if(r===null||r.trim()==="")return"composition";let e=r.trim().toLowerCase();return e==="none"||e==="false"||e==="0"||e==="off"?"none":e==="player"||e==="true"||e==="1"||e==="on"?"player":"composition"}function De(r,e,t){t===null?r.delete(e):r.set(e,t)}function ot(r,e,t){let i=r.indexOf("#"),n=i>=0?r.slice(0,i):r,s=i>=0?r.slice(i):"",a=n.indexOf("?"),d=a>=0?n.slice(0,a):n,u=a>=0?n.slice(a+1):"",c=new URLSearchParams(u);De(c,it,e),De(c,rt,t==="composition"?null:t);let p=c.toString();return`${d}${p?`?${p}`:""}${s}`}function st(r,e,t){if(e===null&&t==="composition")return r;let i=[];e!==null&&i.push(`window.__HF_SHADER_CAPTURE_SCALE=${JSON.stringify(e)};`),t!=="composition"&&i.push(`window.__HF_SHADER_LOADING=${JSON.stringify(t)};`);let n=`<script data-hyperframes-player-shader-options>${i.join("")}</script>`;return/<head\b[^>]*>/i.test(r)?r.replace(/<head\b[^>]*>/i,s=>`${s}${n}`):/<html\b[^>]*>/i.test(r)?r.replace(/<html\b[^>]*>/i,s=>`${s}${n}`):`${n}${r}`}function x(r){return nt(r.getAttribute(C))}function Oe(r){return Number(ee(r.getAttribute(T))??"1")}function B(r,e){return ot(e,ee(r.getAttribute(T)),x(r))}function G(r,e){return st(e,ee(r.getAttribute(T)),x(r))}function Ne(){let r=document.createElement("div");r.className="hfp-shader-loader",r.setAttribute("role","status"),r.setAttribute("aria-live","polite"),r.setAttribute("aria-label","Preparing scene transitions"),r.setAttribute("data-hyperframes-ignore",""),r.draggable=!1;let e=m=>{m.preventDefault(),m.stopPropagation()};for(let m of["selectstart","dragstart","pointerdown","mousedown","click","dblclick","contextmenu","touchstart"])r.addEventListener(m,e,{capture:!0});let t=document.createElement("div");t.className="hfp-shader-loader-panel",t.draggable=!1;let i=document.createElement("div");i.className="hfp-shader-loader-mark",i.draggable=!1,i.innerHTML=['<svg width="78" height="78" viewBox="0 0 100 100" fill="none" aria-hidden="true" draggable="false">','<path d="M10.1851 57.8021L33.1145 73.8313C36.2202 75.9978 41.5173 73.5433 42.4816 69.4984L51.7611 30.4271C52.7253 26.3822 48.5802 23.9277 44.4602 26.0942L13.917 42.1235C6.96677 45.7676 4.97564 54.1579 10.1851 57.8021Z" fill="url(#hfp-shader-loader-grad-left)"/>','<path d="M87.5129 57.5141L56.9696 73.5433C52.8371 75.7098 48.7046 73.2553 49.6688 69.2104L58.9483 30.1391C59.9125 26.0942 65.2097 23.6397 68.3154 25.8062L91.2447 41.8354C96.4668 45.4796 94.4631 53.8699 87.5129 57.5141Z" fill="url(#hfp-shader-loader-grad-right)"/>',"<defs>",'<linearGradient id="hfp-shader-loader-grad-left" x1="48.5676" y1="25" x2="44.7804" y2="71.9384" gradientUnits="userSpaceOnUse">','<stop stop-color="#06E3FA"/>','<stop offset="1" stop-color="#4FDB5E"/>',"</linearGradient>",'<linearGradient id="hfp-shader-loader-grad-right" x1="54.8282" y1="73.8392" x2="72.0989" y2="32.8932" gradientUnits="userSpaceOnUse">','<stop stop-color="#06E3FA"/>','<stop offset="1" stop-color="#4FDB5E"/>',"</linearGradient>","</defs>","</svg>"].join("");let n=document.createElement("div");n.className="hfp-shader-loader-title";let s=document.createElement("span");s.className="hfp-shader-loader-title-text",s.textContent=M[0]||"Preparing scene transitions",n.appendChild(s);let a=document.createElement("div");a.className="hfp-shader-loader-detail",a.textContent="Rendering animated scene samples for shader transitions.";let d=document.createElement("div");d.className="hfp-shader-loader-track",d.setAttribute("aria-hidden","true");let u=document.createElement("div");u.className="hfp-shader-loader-fill",d.appendChild(u);let c=document.createElement("div");c.className="hfp-shader-loader-progress";let p=m=>{let y=document.createElement("div");y.className="hfp-shader-loader-row";let h=document.createElement("span");h.className="hfp-shader-loader-label",h.textContent=m;let _=document.createElement("span");return _.className="hfp-shader-loader-value",y.appendChild(h),y.appendChild(_),c.appendChild(y),{row:y,label:h,value:_}},b=p("transition"),g=p("transition frame");return t.appendChild(i),t.appendChild(n),t.appendChild(a),t.appendChild(d),t.appendChild(c),r.appendChild(t),{root:r,fill:u,title:s,detail:a,transitionValue:b.value,frameLabel:g.label,frameValue:g.value,frameRow:g.row}}var at=420,q=class{_el;_hideTimeout=null;constructor(e){this._el=e}show(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null),this._el.root.classList.remove("hfp-hiding"),this._el.root.classList.add("hfp-visible")}hide(){if(this._el.root.classList.contains("hfp-hiding")){this._hideTimeout||this._scheduleCleanup();return}this._el.root.classList.contains("hfp-visible")&&(this._el.root.classList.add("hfp-hiding"),this._el.root.classList.remove("hfp-visible"),this._scheduleCleanup())}reset(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null),this._el.root.classList.remove("hfp-visible","hfp-hiding"),this._el.fill.style.transform="scaleX(0)",this._el.transitionValue.textContent="",this._el.frameValue.textContent="",this._el.frameRow.style.visibility="hidden"}update(e,t){if(t!=="player"){this.reset();return}if(e.ready||!e.loading){this.hide();return}let i=typeof e.progress=="number"&&Number.isFinite(e.progress)?e.progress:0,n=typeof e.total=="number"&&Number.isFinite(e.total)?e.total:0,s=n>0?Math.min(1,Math.max(0,i/n)):0,a=Math.min(M.length-1,Math.floor(s*M.length));this._el.title.textContent=M[a]||"Preparing scene transitions",this._el.detail.textContent=e.phase==="cached"?"Loading cached transition frames before playback.":e.phase==="finalizing"?"Uploading transition textures for smooth playback.":"Rendering animated scene samples for shader transitions.",this._el.fill.style.transform=`scaleX(${s})`,this._el.transitionValue.textContent=e.currentTransition!==void 0&&e.transitionTotal!==void 0?`${e.currentTransition}/${e.transitionTotal}`:n>0?`${i}/${n}`:"";let d=e.transitionFrame!==void 0&&e.transitionFrames!==void 0?`${e.transitionFrame}/${e.transitionFrames}`:"";this._el.frameLabel.textContent=e.phase==="cached"?"cached transition frames":e.phase==="finalizing"?"finalizing transition frames":"rendering transition frames",this._el.frameValue.textContent=d,this._el.frameRow.style.visibility=d?"visible":"hidden",this._el.root.setAttribute("aria-valuenow",String(Math.round(s*100))),this.show()}get hideTimeout(){return this._hideTimeout}destroy(){this._hideTimeout&&(clearTimeout(this._hideTimeout),this._hideTimeout=null)}_scheduleCleanup(){this._hideTimeout&&clearTimeout(this._hideTimeout),this._hideTimeout=setTimeout(()=>{this._el.root.classList.remove("hfp-hiding"),this._hideTimeout=null},at)}};var lt=.1,dt=5;function te(r){return!Number.isFinite(r)||r<=0?1:Math.max(lt,Math.min(dt,r))}var Y=class extends HTMLElement{static get observedAttributes(){return["src","srcdoc","width","height","controls","muted","audio-locked","volume","poster","playback-rate","audio-src",T,C]}shadow;container;iframe;posterEl=null;controlsApi=null;resizeObserver;shaderLoader;probe;_ready=!1;_currentTime=0;_duration=0;_paused=!0;_scrubbing=!1;_lastUpdateMs=0;_volume=1;_compositionWidth=1920;_compositionHeight=1080;_rescaleWarned=!1;_directTimelineAdapter=null;_directTimelineClock;_parentTickRaf=null;_media;_scenes=[];_runtimeFps=30;constructor(){super(),this.shadow=this.attachShadow({mode:"open"}),Ce(this.shadow,_e),{container:this.container,iframe:this.iframe}=Me(),this.shadow.appendChild(this.container);let e=Ne();this.shadow.appendChild(e.root),this.shaderLoader=new q(e),this._media=new W({dispatchEvent:t=>this.dispatchEvent(t),getMuted:()=>this.muted,getVolume:()=>this._volume,getPlaybackRate:()=>this.playbackRate,getCurrentTime:()=>this._currentTime,isPaused:()=>this._paused}),this._directTimelineClock=new z({onTimeUpdate:(t,i)=>{this._currentTime=t,this.controlsApi?.updateTime(t,i),this.dispatchEvent(new CustomEvent("timeupdate",{detail:{currentTime:t}}))},getLoop:()=>this.loop,restart:()=>{this.seek(0),this.play()},onPaused:()=>{this._media.audioOwner==="parent"&&this._media.pauseAll(),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.dispatchEvent(new Event("ended"))},onEnded:()=>this.loop}),this.probe=new U(this.iframe,{onReady:t=>this._onProbeReady(t),onError:t=>this.dispatchEvent(new CustomEvent("error",{detail:{message:t}}))}),this.addEventListener("click",t=>{Ae(t)||(this._paused?this.play():this.pause())}),this.resizeObserver=new ResizeObserver(()=>this._rescale()),this._onMessage=this._onMessage.bind(this),this._onIframeLoad=this._onIframeLoad.bind(this)}connectedCallback(){this.resizeObserver.observe(this),window.addEventListener("message",this._onMessage),this.iframe.addEventListener("load",this._onIframeLoad),this.hasAttribute("controls")&&this._setupControls(),this.hasAttribute("poster")&&(this.posterEl=K(this.shadow,this.getAttribute("poster"),this.posterEl)),this.hasAttribute("audio-src")&&this._media.setupFromUrl(this.getAttribute("audio-src")),this.hasAttribute("srcdoc")&&(this.iframe.srcdoc=G(this,this.getAttribute("srcdoc"))),this.hasAttribute("src")&&(this.iframe.src=B(this,this.getAttribute("src"))),!this.hasAttribute("audio-locked")&&this._isLockedHostEnvironment()&&this._applyAudioLock(!0)}disconnectedCallback(){this._sendControl("pause"),this._stopIframeMedia(),this.resizeObserver.disconnect(),window.removeEventListener("message",this._onMessage),this.iframe.removeEventListener("load",this._onIframeLoad),this.probe.stop(),this._directTimelineClock.stop(),this._stopParentTickClock(),this._directTimelineAdapter=null,this.shaderLoader.destroy(),this._media.destroy(),this.controlsApi?.destroy(),this.controlsApi=null,this._paused=!0,this._ready=!1}attributeChangedCallback(e,t,i){switch(e){case"src":i&&(this._ready=!1,this.iframe.src=B(this,i));break;case"srcdoc":this._ready=!1,i!==null?this.iframe.srcdoc=G(this,i):this.iframe.removeAttribute("srcdoc");break;case"width":this._compositionWidth=P(i)??1920,this._rescale();break;case"height":this._compositionHeight=P(i)??1080,this._rescale();break;case"controls":i!==null?this._setupControls():(this.controlsApi?.destroy(),this.controlsApi=null);break;case"poster":this.posterEl=K(this.shadow,i,this.posterEl);break;case"playback-rate":{let n=te(parseFloat(i||"1"));this._media.updatePlaybackRate(n),this._sendControl("set-playback-rate",{playbackRate:n}),this._directTimelineAdapter?.timeScale?.(n),this.controlsApi?.updateSpeed(n),this.dispatchEvent(new Event("ratechange"));break}case"muted":this._handleMutedChange(i);break;case"audio-locked":this._applyAudioLock(i!==null);break;case"volume":{let n=Math.max(0,Math.min(1,parseFloat(i||"1")));this._volume=n,this._media.updateVolume(n),this._sendControl("set-volume",{volume:n}),this.controlsApi?.updateVolume(n),this.dispatchEvent(new Event("volumechange"));break}case"audio-src":i?this._media.setupFromUrl(i):this._media.teardownUrlAudio();break;case T:case C:this._reloadShaderOptions();break}}get iframeElement(){return this.iframe}get scenes(){return this._scenes}play(){this.posterEl?.remove(),this.posterEl=null,this._duration>0&&this._currentTime>=this._duration&&this.seek(0),this._paused=!1;let e=this._tryDirectTimelinePlay();e||(this._sendControl("play"),this._ready&&!this._directTimelineAdapter&&this._startParentTickClock()),this._media.audioOwner==="parent"&&this._media.playAll(),this.controlsApi?.updatePlaying(!0),this.dispatchEvent(new Event("play")),e&&this._directTimelineAdapter&&this._directTimelineClock.start(this._directTimelineAdapter,()=>this._currentTime,()=>this._duration,()=>this._paused)}pause(){this._tryDirectTimelinePause()||this._sendControl("pause"),this._directTimelineClock.stop(),this._stopParentTickClock(),this._media.audioOwner==="parent"&&this._media.pauseAll(),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.dispatchEvent(new Event("pause"))}stopMedia(){this._sendControl("stop-media"),this._stopIframeMedia(),this._media.stopAdoptedMedia()}seek(e){!this._trySyncSeek(e)&&!this._tryDirectTimelineSeek(e)&&this._sendControl("seek",{timeSeconds:e,frame:Math.round(e*this._runtimeFps)}),this._directTimelineClock.stop(),this._stopParentTickClock(),this._currentTime=e,this._media.audioOwner==="parent"&&(this._scrubbing?this._media.scrubAll(e):(this._media.pauseAll(),this._media.seekAll(e))),this._paused=!0,this.controlsApi?.updatePlaying(!1),this.controlsApi?.updateTime(this._currentTime,this._duration)}setColorGrading(e,t){this._sendControl("set-color-grading",{target:e,grading:t})}clearColorGrading(e){this._sendControl("set-color-grading",{target:e,grading:null})}setColorGradingCompare(e,t){this._sendControl("set-color-grading-compare",{target:e,compare:t})}clearColorGradingCompare(e){this._sendControl("set-color-grading-compare",{target:e,compare:{enabled:!1}})}get currentTime(){return this._currentTime}set currentTime(e){this.seek(e)}get duration(){return this._duration}get paused(){return this._paused}get ready(){return this._ready}get playbackRate(){return te(parseFloat(this.getAttribute("playback-rate")||"1"))}set playbackRate(e){this.setAttribute("playback-rate",String(te(e)))}get shaderCaptureScale(){return Oe(this)}set shaderCaptureScale(e){this.setAttribute(T,String(e))}get shaderLoading(){return x(this)}set shaderLoading(e){e==="composition"?this.removeAttribute(C):this.setAttribute(C,e)}get muted(){return this.hasAttribute("muted")}set muted(e){e?this.setAttribute("muted",""):this.removeAttribute("muted")}get audioLocked(){return this.hasAttribute("audio-locked")}set audioLocked(e){e?this.setAttribute("audio-locked",""):this.removeAttribute("audio-locked")}_isLockedHostEnvironment(){if(typeof navigator>"u")return!1;let e=navigator.userAgent||"";return/\bClaude\/\d/.test(e)&&/\bElectron\b/.test(e)}_isAudioLocked(){return this.hasAttribute("audio-locked")||this._isLockedHostEnvironment()}_isSlideshowPlayer(){return this.closest("hyperframes-slideshow")!==null}_handleMutedChange(e){if(e===null&&this._isAudioLocked()){this.setAttribute("muted","");return}this._media.updateMuted(e!==null),this._setIframeMediaMuted(e!==null),this._sendControl("set-muted",{muted:e!==null}),this.controlsApi?.updateMuted(e!==null),this.dispatchEvent(new Event("volumechange"))}_applyAudioLock(e){e&&(this.muted=!0),this.controlsApi?.setVolumeControlsHidden(e)}get volume(){return this._volume}set volume(e){this.setAttribute("volume",String(Math.max(0,Math.min(1,e))))}get loop(){return this.hasAttribute("loop")}set loop(e){e?this.setAttribute("loop",""):this.removeAttribute("loop")}_sendControl(e,t={}){try{this.iframe.contentWindow?.postMessage({...t,source:"hf-parent",type:"control",action:e,...Pe(this._runtimeFps)},"*")}catch{}}_getSameOriginIframeDocument(){try{return this.iframe.contentDocument}catch{return null}}_setIframeMediaMuted(e){let t=this._getSameOriginIframeDocument();if(t)for(let i of t.querySelectorAll("video, audio"))v(i)&&(i.muted=e||i.defaultMuted)}_stopIframeMedia(){let e=this._getSameOriginIframeDocument();if(e)for(let t of e.querySelectorAll("video, audio"))v(t)&&t.pause()}_replayBridgeState(){this._sendControl("set-muted",{muted:this.muted}),this._sendControl("set-volume",{volume:this._volume}),this._sendControl("set-playback-rate",{playbackRate:this.playbackRate}),this._sendControl("set-native-media-sync-disabled",{disabled:this._isSlideshowPlayer()}),this._sendControl("set-web-audio-media-disabled",{disabled:this._isSlideshowPlayer()})}_reloadShaderOptions(){if(x(this)!=="player"&&this.shaderLoader.reset(),this.hasAttribute("srcdoc")){this.iframe.srcdoc=G(this,this.getAttribute("srcdoc")||"");return}this.hasAttribute("src")&&(this.iframe.src=B(this,this.getAttribute("src")||""))}_trySyncSeek(e){try{let i=this.iframe.contentWindow?.__player;return typeof i?.seek!="function"?!1:(i.seek.call(i,e),!0)}catch{return!1}}_withDirectTimeline(e){let t=this._directTimelineAdapter||this.probe.resolveDirectTimelineAdapter();if(!t)return!1;try{return e(t),this._directTimelineAdapter=t,!0}catch{return!1}}_tryDirectTimelineSeek(e){return this._withDirectTimeline(t=>{t.seek(e,!1),t.pause()})}_tryDirectTimelinePlay(){return this._withDirectTimeline(e=>{e.play()})}_tryDirectTimelinePause(){return this._withDirectTimeline(e=>{e.pause()})}_startParentTickClock(){this._stopParentTickClock();let e=()=>{if(this._paused){this._parentTickRaf=null;return}this._sendControl("tick"),this._parentTickRaf=requestAnimationFrame(e)};this._parentTickRaf=requestAnimationFrame(e)}_stopParentTickClock(){this._parentTickRaf!==null&&(cancelAnimationFrame(this._parentTickRaf),this._parentTickRaf=null)}_onMessage(e){Ie(e,this.iframe.contentWindow,{getPlaybackState:()=>({currentTime:this._currentTime,duration:this._duration,paused:this._paused,lastUpdateMs:this._lastUpdateMs}),setPlaybackState:({currentTime:t,duration:i,paused:n,lastUpdateMs:s})=>{this._currentTime=t,this._duration=i,this._paused=n,this._lastUpdateMs=s},getShaderLoadingMode:()=>x(this),shaderLoader:this.shaderLoader,setCompositionSize:(t,i)=>{this._compositionWidth=t,this._compositionHeight=i,this._rescale()},sendControl:(t,i)=>this._sendControl(t,i),getIframeDoc:()=>this.iframe.contentDocument,onRuntimeReady:()=>this._replayBridgeState(),onRuntimeTimelineReady:t=>this._onRuntimeTimelineReady(t),setRuntimeFps:t=>{this._runtimeFps=t},shouldPromoteMediaAutoplayFallback:()=>!this._isSlideshowPlayer(),setScenes:t=>{this._scenes=t,this.dispatchEvent(new CustomEvent("scenes",{detail:{scenes:t}}))},updateControlsTime:(t,i)=>this.controlsApi?.updateTime(t,i),updateControlsPlaying:t=>this.controlsApi?.updatePlaying(t),dispatchEvent:t=>this.dispatchEvent(t),seek:t=>this.seek(t),play:()=>this.play(),getLoop:()=>this.loop,media:this._media})}_onRuntimeTimelineReady(e){if(this._ready)return;this.probe.stop(),this._duration=e,this._directTimelineAdapter=null,this._ready=!0,this.controlsApi?.updateTime(this._currentTime,e),this.dispatchEvent(new CustomEvent("ready",{detail:{duration:e}})),this._rescale();let t=this._getSameOriginIframeDocument();t&&this._media.setupFromIframe(t),this._replayBridgeState(),this._setIframeMediaMuted(this.muted),this.hasAttribute("autoplay")&&this.play()}_onProbeReady({duration:e,adapter:t,compositionSize:i}){this._duration=e,this._directTimelineAdapter=t.kind==="direct-timeline"?t.timeline:null,this._ready=!0,this.controlsApi?.updateTime(0,e),this.dispatchEvent(new CustomEvent("ready",{detail:{duration:e}})),i&&(this._compositionWidth=i.width,this._compositionHeight=i.height,this._rescale());try{let n=this.iframe.contentDocument;n&&this._media.setupFromIframe(n)}catch{}this._setIframeMediaMuted(this.muted),this.hasAttribute("autoplay")&&this.play()}_rescale(){!xe(this,this.iframe,this._compositionWidth,this._compositionHeight)&&this._ready&&!this._rescaleWarned&&(this._rescaleWarned=!0,console.warn("[hyperframes-player] rescale no-op after ready \u2014 zero-size player element",{src:this.getAttribute("src"),offsetWidth:this.offsetWidth,offsetHeight:this.offsetHeight,compositionWidth:this._compositionWidth,compositionHeight:this._compositionHeight}))}_onIframeLoad(){this._ready=!1,this._directTimelineAdapter=null,this._directTimelineClock.stop(),this._stopParentTickClock(),this.shaderLoader.reset(),this._media.resetForIframeLoad(),this.probe.start()}_setupControls(){this.controlsApi||(this.controlsApi=we(this.shadow,this.muted,this._volume,this.getAttribute("speed-presets"),{onPlay:()=>this.play(),onPause:()=>this.pause(),onSeek:e=>this.seek(e*this._duration),onScrubStart:()=>{this._scrubbing=!0},onScrubEnd:()=>{this._scrubbing=!1,this.seek(this._currentTime)},onSpeedChange:e=>{this.playbackRate=e},onMuteToggle:()=>{this.muted=!this.muted},onVolumeChange:e=>{this.volume=e}},this._isAudioLocked()))}get _audioOwner(){return this._media.audioOwner}get _parentMedia(){return this._media.entries}_mirrorParentMediaTime(e,t){this._media.mirrorTime(e,t)}_promoteToParentProxy(){let e=null;try{e=this.iframe.contentDocument}catch{}this._media.promoteToParentProxy(e,(t,i)=>this._mirrorParentMediaTime(t,i)),this._sendControl("set-media-output-muted",{muted:!0})}_observeDynamicMedia(e){this._media.setupFromIframe(e)}};customElements.get("hyperframes-player")||customElements.define("hyperframes-player",Y);return $e(ut);})();
460
460
  //# sourceMappingURL=hyperframes-player.global.js.map
@@ -1,4 +1,4 @@
1
- "use strict";var HyperframesPlayer=(()=>{var w=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var W=(i,e)=>{for(var t in e)w(i,t,{get:e[t],enumerable:!0})},Y=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of G(e))!j.call(i,r)&&r!==t&&w(i,r,{get:()=>e[r],enumerable:!(n=z(e,r))||n.enumerable});return i};var V=i=>Y(w({},"__esModule",{value:!0}),i);var Ie={};W(Ie,{HyperframesSlideshow:()=>g,dropInvalidSlides:()=>H});var X="application/hyperframes-slideshow+json";function J(i="i"){let e=X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`<script[^>]*type=["']${e}["'][^>]*>([\\s\\S]*?)<\\/script>`,i)}function I(i){let t=J("i").exec(i);if(!t||t[1]===void 0)return null;let n=t[1].trim();if(n.length===0)return null;let r=JSON.parse(n);if(!te(r))throw new Error("slideshow island is not a valid SlideshowManifest");return r}function Q(i){return i===void 0||Array.isArray(i)&&i.every(e=>typeof e=="number")}function Z(i){return i===void 0||typeof i=="boolean"}function P(i){if(typeof i!="object"||i===null)return!1;let e=i;return!(typeof e.sceneId!="string"||!Q(e.fragments)||e.hotspots!==void 0&&!Array.isArray(e.hotspots)||!Z(e.autoplay))}function ee(i){if(typeof i!="object"||i===null)return!1;let e=i;return typeof e.id=="string"&&typeof e.label=="string"&&Array.isArray(e.slides)&&e.slides.every(P)}function te(i){if(typeof i!="object"||i===null||Array.isArray(i))return!1;let e=i;return!(!Array.isArray(e.slides)||!e.slides.every(P)||e.slideSequences!==void 0&&(!Array.isArray(e.slideSequences)||!e.slideSequences.every(ee)))}function ne(i,e){return`slide "${i}" sets ${e==="startTime"?"endTime":"startTime"} but ${e} cannot be resolved (no scene "${i}")`}function ie(i,e,t){let{startTime:n,endTime:r,sceneId:s}=i;if(n!==void 0&&r!==void 0)return{start:n,end:r};if(n===void 0&&r===void 0)return e?{start:e.start,end:e.start+e.duration}:(t.push(`slide references unresolved sceneId "${s}"`),{start:0,end:0});if(!e){let a=n===void 0?"startTime":"endTime";t.push(ne(s,a));let d=n??r??0;return{start:d,end:d}}return{start:n??e.start,end:r??e.start+e.duration}}function re(i,e,t,n,r){for(let s of e)(s<t||s>n)&&r.push(`slide "${i}" fragment ${s} is outside range [${t}, ${n}]`)}function E(i,e,t){let n=e.get(i.sceneId),{start:r,end:s}=ie(i,n,t);i.startTime!==void 0&&i.endTime!==void 0&&s<=r&&t.push(`slide "${i.sceneId}" has endTime (${s}) <= startTime (${r})`);let a=[...new Set(i.fragments??[])].sort((d,o)=>d-o);return re(i.sceneId,a,r,s,t),{...i,start:r,end:s,fragments:a,hotspots:i.hotspots??[]}}function A(i,e){let t=[],n=new Map(e.map(o=>[o.id,o])),r={};for(let o of i.slideSequences??[])Object.prototype.hasOwnProperty.call(r,o.id)&&t.push(`duplicate slideSequence id "${o.id}" \u2014 only the last definition is kept`),r[o.id]={id:o.id,label:o.label,slides:o.slides.map(l=>E(l,n,t))};let s=i.slides.map(o=>E(o,n,t)),a=[...s,...Object.values(r).flatMap(o=>o.slides)];for(let o of a)for(let l of o.hotspots){let u=r[l.target];u?u.slides.length===0&&t.push(`hotspot "${l.id}" targets empty sequence "${l.target}"`):t.push(`hotspot "${l.id}" targets unknown sequence "${l.target}"`)}let d=[...s].sort((o,l)=>o.start-l.start);for(let o=1;o<d.length;o++){let l=d[o-1],u=d[o];l!==void 0&&u!==void 0&&u.start<l.end&&t.push(`main-line slides "${l.sceneId}" and "${u.sceneId}" overlap`)}return{resolved:{slides:s,sequences:r},errors:t}}var f="main",y=class{constructor(e,t){this.player=e;this.show=t;this.enterSlide(0)}player;show;stack=[{sequenceId:f,slideIndex:0,fragmentIndex:-1}];changeCbs=new Set;dispose(){}slidesOf(e){return e===f?this.show.slides:this.show.sequences[e]?.slides??[]}get frame(){return this.stack[this.stack.length-1]}get currentSlide(){return this.slidesOf(this.frame.sequenceId)[this.frame.slideIndex]}get nextSlide(){return this.slidesOf(this.frame.sequenceId)[this.frame.slideIndex+1]??null}get position(){return{...this.frame}}get counter(){return{index:this.frame.slideIndex+1,total:this.slidesOf(this.frame.sequenceId).length}}get canPrev(){return this.frame.slideIndex>0||this.stack.length>1}get canNext(){let e=this.slidesOf(this.frame.sequenceId);return this.frame.slideIndex+1<e.length||this.stack.length>1}get breadcrumb(){return this.stack.map(e=>e.sequenceId===f?{id:f,label:"Main deck"}:{id:e.sequenceId,label:this.show.sequences[e.sequenceId]?.label??e.sequenceId})}onChange(e){return this.changeCbs.add(e),()=>this.changeCbs.delete(e)}emitChange(){for(let e of this.changeCbs)e()}stopSlideMedia(){this.player.stopMedia?.()}enterSlide(e){e!==this.frame.slideIndex&&this.stopSlideMedia(),this.frame.slideIndex=e;let t=this.currentSlide;if(!t){this.frame.fragmentIndex=-1;return}t.fragments.length>0?(this.frame.fragmentIndex=0,this.playTo(t.fragments[0]??t.end)):(this.frame.fragmentIndex=-1,this.playTo(this.restFrame(t))),t.autoplay&&this.player.playSceneMedia?.(t.sceneId),this.emitChange()}restFrame(e){return e.start+(e.end-e.start)*.5}resumeSlide(e,t){this.frame.slideIndex=e,this.frame.fragmentIndex=t;let n=this.currentSlide;if(!n)return;let r=t>=0&&t<n.fragments.length?n.fragments[t]??n.start:n.fragments.length>0?n.start:this.restFrame(n);this.playTo(r),this.emitChange()}playTo(e){this.player.seek(e)}next(){let e=this.currentSlide;if(!e)return;if(this.frame.fragmentIndex+1<e.fragments.length){this.frame.fragmentIndex+=1;let r=e.fragments[this.frame.fragmentIndex]??e.end;this.playTo(r),this.emitChange();return}let n=this.slidesOf(this.frame.sequenceId);this.frame.slideIndex+1<n.length?this.enterSlide(this.frame.slideIndex+1):this.stack.length>1&&this.back()}prev(){if(this.frame.slideIndex>0){this.enterSlide(this.frame.slideIndex-1);return}this.stack.length>1&&this.back()}goToSlide(e){let t=this.slidesOf(this.frame.sequenceId);e>=0&&e<t.length&&this.enterSlide(e)}enterBranch(e){let t=this.show.sequences[e];!t||t.slides.length===0||(this.stopSlideMedia(),this.stack.push({sequenceId:e,slideIndex:0,fragmentIndex:-1}),this.enterSlide(0))}back(){this.stack.length<=1||(this.stopSlideMedia(),this.stack.pop(),this.resumeSlide(this.frame.slideIndex,this.frame.fragmentIndex))}backToMain(){this.stack.length<=1||(this.stopSlideMedia(),this.stack=[this.stack[0]],this.resumeSlide(this.frame.slideIndex,this.frame.fragmentIndex))}syncTo(e,t,n){this.isValidSyncTarget(e,t)&&(this.isCrossSlide(e,t)&&this.stopSlideMedia(),this.rerootStackTo(e)&&this.resumeSlide(t,n))}isValidSyncTarget(e,t){if(!this.stack[0])return!1;let n=e===f?this.show.slides:this.show.sequences[e]?.slides??null;return n?t>=0&&t<n.length:!1}isCrossSlide(e,t){return this.frame.sequenceId!==e||this.frame.slideIndex!==t}rerootStackTo(e){if(this.frame.sequenceId===e)return!0;let t=this.stack[0];if(!t)return!1;if(this.stack=[t],e===f)return!0;let n=this.show.sequences[e];return!n||n.slides.length===0?!1:(this.stack.push({sequenceId:e,slideIndex:0,fragmentIndex:-1}),!0)}};var C="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",se=new Set(["play","pause","seeking","seeked","ratechange","volumechange","ended","timeupdate"]),oe=["currentTime","volume","playbackRate"],ae=["paused","ended","muted"];function $(i){return!(typeof i!="object"||i===null)}function le(i){if(!$(i))return!1;let e=i;return e.type==="goto"&&typeof e.sequenceId=="string"&&typeof e.slideIndex=="number"&&typeof e.fragmentIndex=="number"}function de(i){return se.has(i)}function ue(i){return i==="presenter"||i==="audience"}function ce(i){return oe.every(e=>typeof i[e]=="number")}function he(i){return ae.every(e=>typeof i[e]=="boolean")}function pe(i){if(!$(i))return!1;let e=i;return e.type==="media"&&ue(e.sender)&&typeof e.key=="string"&&de(e.action)&&ce(e)&&he(e)}function fe(){return`hf-slideshow:${typeof location<"u"?location.pathname:""}`}var m=class{constructor(e,t,n=()=>{}){this.mode=e;this.onGoto=t;this.onMedia=n;try{this.channel=new BroadcastChannel(fe())}catch{return}this.channel.onmessage=r=>{if(le(r.data)){e==="audience"&&this.onGoto(r.data);return}pe(r.data)&&r.data.sender!==e&&this.onMedia(r.data)}}mode;onGoto;onMedia;channel=null;postPosition(e){if(this.mode!=="presenter"||!this.channel)return;let t={type:"goto",...e};this.channel.postMessage(t)}postMedia(e){this.channel&&this.channel.postMessage({type:"media",sender:this.mode,...e})}destroy(){this.channel&&(this.channel.onmessage=null,this.channel.close(),this.channel=null)}};function L(i){let e=s=>s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),t=s=>e(s).replace(/"/g,"&quot;"),n=e(i.notes),r=i.hotspots.length?`<div style="display:flex;flex-direction:column;gap:6px;">
1
+ "use strict";var HyperframesPlayer=(()=>{var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var V=(i,e)=>{for(var t in e)k(i,t,{get:e[t],enumerable:!0})},Y=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of j(e))!W.call(i,r)&&r!==t&&k(i,r,{get:()=>e[r],enumerable:!(n=G(e,r))||n.enumerable});return i};var X=i=>Y(k({},"__esModule",{value:!0}),i);var Ae={};V(Ae,{HyperframesSlideshow:()=>b,dropInvalidSlides:()=>_});var J="application/hyperframes-slideshow+json";function Q(i="i"){let e=J.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`<script[^>]*type=["']${e}["'][^>]*>([\\s\\S]*?)<\\/script>`,i)}function P(i){let t=Q("i").exec(i);if(!t||t[1]===void 0)return null;let n=t[1].trim();if(n.length===0)return null;let r=JSON.parse(n);if(!ne(r))throw new Error("slideshow island is not a valid SlideshowManifest");return r}function Z(i){return i===void 0||Array.isArray(i)&&i.every(e=>typeof e=="number")}function ee(i){return i===void 0||typeof i=="boolean"}function A(i){if(typeof i!="object"||i===null)return!1;let e=i;return!(typeof e.sceneId!="string"||!Z(e.fragments)||e.hotspots!==void 0&&!Array.isArray(e.hotspots)||!ee(e.autoplay))}function te(i){if(typeof i!="object"||i===null)return!1;let e=i;return typeof e.id=="string"&&typeof e.label=="string"&&Array.isArray(e.slides)&&e.slides.every(A)}function ne(i){if(typeof i!="object"||i===null||Array.isArray(i))return!1;let e=i;return!(!Array.isArray(e.slides)||!e.slides.every(A)||e.slideSequences!==void 0&&(!Array.isArray(e.slideSequences)||!e.slideSequences.every(te)))}function ie(i,e){return`slide "${i}" sets ${e==="startTime"?"endTime":"startTime"} but ${e} cannot be resolved (no scene "${i}")`}function re(i,e,t){let{startTime:n,endTime:r,sceneId:s}=i;if(n!==void 0&&r!==void 0)return{start:n,end:r};if(n===void 0&&r===void 0)return e?{start:e.start,end:e.start+e.duration}:(t.push(`slide references unresolved sceneId "${s}"`),{start:0,end:0});if(!e){let a=n===void 0?"startTime":"endTime";t.push(ie(s,a));let d=n??r??0;return{start:d,end:d}}return{start:n??e.start,end:r??e.start+e.duration}}function se(i,e,t,n,r){for(let s of e)(s<t||s>n)&&r.push(`slide "${i}" fragment ${s} is outside range [${t}, ${n}]`)}function I(i,e,t){let n=e.get(i.sceneId),{start:r,end:s}=re(i,n,t);i.startTime!==void 0&&i.endTime!==void 0&&s<=r&&t.push(`slide "${i.sceneId}" has endTime (${s}) <= startTime (${r})`);let a=[...new Set(i.fragments??[])].sort((d,o)=>d-o);return se(i.sceneId,a,r,s,t),{...i,start:r,end:s,fragments:a,hotspots:i.hotspots??[]}}function C(i,e){let t=[],n=new Map(e.map(o=>[o.id,o])),r={};for(let o of i.slideSequences??[])Object.prototype.hasOwnProperty.call(r,o.id)&&t.push(`duplicate slideSequence id "${o.id}" \u2014 only the last definition is kept`),r[o.id]={id:o.id,label:o.label,slides:o.slides.map(l=>I(l,n,t))};let s=i.slides.map(o=>I(o,n,t)),a=[...s,...Object.values(r).flatMap(o=>o.slides)];for(let o of a)for(let l of o.hotspots){let u=r[l.target];u?u.slides.length===0&&t.push(`hotspot "${l.id}" targets empty sequence "${l.target}"`):t.push(`hotspot "${l.id}" targets unknown sequence "${l.target}"`)}let d=[...s].sort((o,l)=>o.start-l.start);for(let o=1;o<d.length;o++){let l=d[o-1],u=d[o];l!==void 0&&u!==void 0&&u.start<l.end&&t.push(`main-line slides "${l.sceneId}" and "${u.sceneId}" overlap`)}return{resolved:{slides:s,sequences:r},errors:t}}var f="main",y=class{constructor(e,t){this.player=e;this.show=t;this.enterSlide(0)}player;show;stack=[{sequenceId:f,slideIndex:0,fragmentIndex:-1}];changeCbs=new Set;dispose(){}slidesOf(e){return e===f?this.show.slides:this.show.sequences[e]?.slides??[]}get frame(){return this.stack[this.stack.length-1]}get currentSlide(){return this.slidesOf(this.frame.sequenceId)[this.frame.slideIndex]}get nextSlide(){return this.slidesOf(this.frame.sequenceId)[this.frame.slideIndex+1]??null}get position(){return{...this.frame}}get counter(){return{index:this.frame.slideIndex+1,total:this.slidesOf(this.frame.sequenceId).length}}get canPrev(){return this.frame.slideIndex>0||this.stack.length>1}get canNext(){let e=this.slidesOf(this.frame.sequenceId);return this.frame.slideIndex+1<e.length||this.stack.length>1}get breadcrumb(){return this.stack.map(e=>e.sequenceId===f?{id:f,label:"Main deck"}:{id:e.sequenceId,label:this.show.sequences[e.sequenceId]?.label??e.sequenceId})}onChange(e){return this.changeCbs.add(e),()=>this.changeCbs.delete(e)}emitChange(){for(let e of this.changeCbs)e()}stopSlideMedia(){this.player.stopMedia?.()}enterSlide(e){e!==this.frame.slideIndex&&this.stopSlideMedia(),this.frame.slideIndex=e;let t=this.currentSlide;if(!t){this.frame.fragmentIndex=-1;return}t.fragments.length>0?(this.frame.fragmentIndex=0,this.playTo(t.fragments[0]??t.end)):(this.frame.fragmentIndex=-1,this.playTo(this.restFrame(t))),t.autoplay&&this.player.playSceneMedia?.(t.sceneId),this.emitChange()}restFrame(e){return e.start+(e.end-e.start)*.5}resumeSlide(e,t){this.frame.slideIndex=e,this.frame.fragmentIndex=t;let n=this.currentSlide;if(!n)return;let r=t>=0&&t<n.fragments.length?n.fragments[t]??n.start:n.fragments.length>0?n.start:this.restFrame(n);this.playTo(r),this.emitChange()}playTo(e){this.player.seek(e)}next(){let e=this.currentSlide;if(!e)return;if(this.frame.fragmentIndex+1<e.fragments.length){this.frame.fragmentIndex+=1;let r=e.fragments[this.frame.fragmentIndex]??e.end;this.playTo(r),this.emitChange();return}let n=this.slidesOf(this.frame.sequenceId);this.frame.slideIndex+1<n.length?this.enterSlide(this.frame.slideIndex+1):this.stack.length>1&&this.back()}prev(){if(this.frame.slideIndex>0){this.enterSlide(this.frame.slideIndex-1);return}this.stack.length>1&&this.back()}goToSlide(e){let t=this.slidesOf(this.frame.sequenceId);e>=0&&e<t.length&&this.enterSlide(e)}enterBranch(e){let t=this.show.sequences[e];!t||t.slides.length===0||(this.stopSlideMedia(),this.stack.push({sequenceId:e,slideIndex:0,fragmentIndex:-1}),this.enterSlide(0))}back(){this.stack.length<=1||(this.stopSlideMedia(),this.stack.pop(),this.resumeSlide(this.frame.slideIndex,this.frame.fragmentIndex))}backToMain(){this.stack.length<=1||(this.stopSlideMedia(),this.stack=[this.stack[0]],this.resumeSlide(this.frame.slideIndex,this.frame.fragmentIndex))}syncTo(e,t,n){this.isValidSyncTarget(e,t)&&(this.isCrossSlide(e,t)&&this.stopSlideMedia(),this.rerootStackTo(e)&&this.resumeSlide(t,n))}isValidSyncTarget(e,t){if(!this.stack[0])return!1;let n=e===f?this.show.slides:this.show.sequences[e]?.slides??null;return n?t>=0&&t<n.length:!1}isCrossSlide(e,t){return this.frame.sequenceId!==e||this.frame.slideIndex!==t}rerootStackTo(e){if(this.frame.sequenceId===e)return!0;let t=this.stack[0];if(!t)return!1;if(this.stack=[t],e===f)return!0;let n=this.show.sequences[e];return!n||n.slides.length===0?!1:(this.stack.push({sequenceId:e,slideIndex:0,fragmentIndex:-1}),!0)}};var L="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",oe=new Set(["play","pause","seeking","seeked","ratechange","volumechange","ended","timeupdate"]),ae=["currentTime","volume","playbackRate"],le=["paused","ended","muted"];function $(i){return!(typeof i!="object"||i===null)}function de(i){if(!$(i))return!1;let e=i;return e.type==="goto"&&typeof e.sequenceId=="string"&&typeof e.slideIndex=="number"&&typeof e.fragmentIndex=="number"}function ue(i){return oe.has(i)}function ce(i){return i==="presenter"||i==="audience"}function he(i){return ae.every(e=>typeof i[e]=="number")}function pe(i){return le.every(e=>typeof i[e]=="boolean")}function fe(i){if(!$(i))return!1;let e=i;return e.type==="media"&&ce(e.sender)&&typeof e.key=="string"&&ue(e.action)&&he(e)&&pe(e)}function me(){return`hf-slideshow:${typeof location<"u"?location.pathname:""}`}var m=class{constructor(e,t,n=()=>{}){this.mode=e;this.onGoto=t;this.onMedia=n;try{this.channel=new BroadcastChannel(me())}catch{return}this.channel.onmessage=r=>{if(de(r.data)){e==="audience"&&this.onGoto(r.data);return}fe(r.data)&&r.data.sender!==e&&this.onMedia(r.data)}}mode;onGoto;onMedia;channel=null;postPosition(e){if(this.mode!=="presenter"||!this.channel)return;let t={type:"goto",...e};this.channel.postMessage(t)}postMedia(e){this.channel&&this.channel.postMessage({type:"media",sender:this.mode,...e})}destroy(){this.channel&&(this.channel.onmessage=null,this.channel.close(),this.channel=null)}};function F(i){let e=s=>s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),t=s=>e(s).replace(/"/g,"&quot;"),n=e(i.notes),r=i.hotspots.length?`<div style="display:flex;flex-direction:column;gap:6px;">
2
2
  <div style="font-size:12px;text-transform:uppercase;letter-spacing:.12em;opacity:.55;">Branches</div>
3
3
  ${i.hotspots.map(s=>`<button data-hotspot-id="${t(s.id)}" data-hotspot-target="${t(s.target)}" type="button" title="${t(s.label)}" style="text-align:left;background:rgba(244,183,64,0.14);color:#f4b740;border:1px solid rgba(244,183,64,0.4);border-radius:8px;padding:8px 12px;font-size:15px;cursor:pointer;pointer-events:auto;font-family:inherit;">&#8627; ${e(s.label)}</button>`).join("")}
4
4
  </div>`:"";return`
@@ -9,11 +9,11 @@
9
9
  <div data-hf-presenter-next style="font-size:17px;opacity:.9;line-height:1.4;">${e(i.nextText)}</div>
10
10
  ${r}
11
11
  <div style="display:flex;gap:34px;margin-top:auto;">
12
- <div><div style="font-size:11px;text-transform:uppercase;letter-spacing:.1em;opacity:.5;margin-bottom:3px;">Slide</div><div data-hf-presenter-counter style="font-family:${C};font-size:23px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;">${e(i.counterText)}</div></div>
13
- <div><div style="font-size:11px;text-transform:uppercase;letter-spacing:.1em;opacity:.5;margin-bottom:3px;">Elapsed</div><div data-hf-presenter-elapsed style="font-family:${C};font-size:23px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;">${e(i.elapsedText)}</div></div>
12
+ <div><div style="font-size:11px;text-transform:uppercase;letter-spacing:.1em;opacity:.5;margin-bottom:3px;">Slide</div><div data-hf-presenter-counter style="font-family:${L};font-size:23px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;">${e(i.counterText)}</div></div>
13
+ <div><div style="font-size:11px;text-transform:uppercase;letter-spacing:.1em;opacity:.5;margin-bottom:3px;">Elapsed</div><div data-hf-presenter-elapsed style="font-family:${L};font-size:23px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;">${e(i.elapsedText)}</div></div>
14
14
  </div>
15
15
  </div>
16
- </div>`.trim()}function k(i){let e=Math.floor(i/60),t=Math.floor(i%60);return`${String(e).padStart(2,"0")}:${String(t).padStart(2,"0")}`}var F=150,me=6e3;function ve(i){if(!i||typeof i.tagName!="string")return!1;let e=i,t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||e.isContentEditable===!0}function ye(i){return typeof i.seek=="function"&&typeof i.play=="function"&&typeof i.pause=="function"}var ge="hf-slideshow:presenter-notes:v1:",R=!1;function be(){if(R)return;R=!0;let i=document.createElement("style");i.textContent=`
16
+ </div>`.trim()}function S(i){let e=Math.floor(i/60),t=Math.floor(i%60);return`${String(e).padStart(2,"0")}:${String(t).padStart(2,"0")}`}var g=class{constructor(e,t){this.actions=e;this.onAction=t}actions;onAction;bindings=new WeakMap;owned=new Set;sync(e){let t=new Set,n=[];for(let{key:r,el:s}of e){t.add(s);let a=this.bindings.get(s);if(a?.key===r)continue;a?.controller.abort();let d=s.ownerDocument.defaultView?.AbortController??AbortController,o=new d;this.bindings.set(s,{key:r,controller:o}),n.push(s);for(let l of this.actions)s.addEventListener(l,()=>this.onAction(s,r,l),{signal:o.signal})}for(let r of this.owned)t.has(r)||(this.bindings.get(r)?.controller.abort(),this.bindings.delete(r));return this.owned=t,n}setMuted(e){for(let t of this.owned)t.muted=e||t.defaultMuted}pauseAll(){for(let e of this.owned)e.pause()}clear(){for(let e of this.owned)this.bindings.get(e)?.controller.abort();this.owned.clear(),this.bindings=new WeakMap}};var R=150,ve=6e3,ye=["play","pause","seeking","seeked","ratechange","volumechange","ended","timeupdate"];function ge(i){if(!i||typeof i.tagName!="string")return!1;let e=i,t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||e.isContentEditable===!0}function be(i){return typeof i.seek=="function"&&typeof i.play=="function"&&typeof i.pause=="function"}var Me="hf-slideshow:presenter-notes:v1:",N=!1;function xe(){if(N)return;N=!0;let i=document.createElement("style");i.textContent=`
17
17
  @keyframes hf-hotspot-pulse {
18
18
  0%, 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0.35), 0 4px 16px rgba(0,0,0,0.35); }
19
19
  50% { box-shadow: 0 0 0 8px rgba(255,255,255,0), 0 4px 20px rgba(0,0,0,0.45); }
@@ -77,14 +77,14 @@
77
77
  [data-hf-muted] [data-hf-mute]:hover {
78
78
  color: rgba(255,255,255,0.6) !important;
79
79
  }
80
- `,document.head.appendChild(i)}var N='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3"/></svg>',q='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3v3a2 2 0 0 1-2 2H3M21 8h-3a2 2 0 0 1-2-2V3M3 16h3a2 2 0 0 1 2 2v3M16 21v-3a2 2 0 0 1 2-2h3"/></svg>',Me='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="13" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M10 8.5v4l4-2-4-2z"/></svg>',xe="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",g=class extends HTMLElement{controller=null;offChange=null;chrome=null;touchStartX=0;touchStartY=0;channel=null;presenterStartMs=null;presenterInterval=null;presenterPositionTimers=[];disconnected=!1;initTimer=null;initInFlight=!1;initGeneration=0;keyForwardFrame=null;detachIframeKeys=null;warnedIframeKeyForwardingUnavailable=!1;_muted=!1;mediaWireInterval=null;playerObserver=null;applyingRemoteMedia=!1;lastMediaTimeBroadcastMs=0;audienceMutedPlaybackKeys=new Set;blockedAudienceMedia=new Map;audienceMediaUnlockButton=null;autoplayToken=0;get muted(){return this._muted}resolveMode(){let e=this.getAttribute("mode");if(e)return e;try{return new URLSearchParams(location.search).get("mode")}catch{return null}}static get observedAttributes(){return["sound","mode"]}attributeChangedCallback(){this.controller&&this.render()}connectedCallback(){this.disconnected=!1,this.initInFlight=!1,this.initGeneration+=1,this.tabIndex=0,window.addEventListener("keydown",this.onKey),this.addEventListener("touchstart",this.onTouchStart,{passive:!0}),this.addEventListener("touchend",this.onTouchEnd),window.addEventListener("message",this.onMessage),document.addEventListener("fullscreenchange",this.onFsChange),this.initChannel(),this.observeInteractivePlayers(),this.initTimer=setTimeout(()=>{this.initTimer=null,this.isConnected&&!this.disconnected&&(this.ensureInteractivePlayers(),this.init())},0)}disconnectedCallback(){this.disconnected=!0,this.initGeneration+=1,this.autoplayToken++,this.initTimer!==null&&(clearTimeout(this.initTimer),this.initTimer=null),window.removeEventListener("keydown",this.onKey),this.detachIframeKeys?.(),this.removeEventListener("touchstart",this.onTouchStart),this.removeEventListener("touchend",this.onTouchEnd),window.removeEventListener("message",this.onMessage),document.removeEventListener("fullscreenchange",this.onFsChange),this.offChange?.(),this.offChange=null,this.controller?.dispose?.(),this.controller=null,this.chrome=null,this.channel?.destroy(),this.channel=null,this.mediaWireInterval!==null&&(clearInterval(this.mediaWireInterval),this.mediaWireInterval=null),this.playerObserver!==null&&(this.playerObserver.disconnect(),this.playerObserver=null),this.audienceMediaUnlockButton?.remove(),this.audienceMediaUnlockButton=null,this.audienceMutedPlaybackKeys.clear(),this.blockedAudienceMedia.clear(),this.presenterInterval!==null&&(clearInterval(this.presenterInterval),this.presenterInterval=null),this.clearPresenterPositionTimers()}__setControllerForTest(e){this.bindController(e)}present(){if(this.resolveMode()==="audience"||this.getAttribute("data-hf-presenting")==="true")return;let e=new URL(location.href);if(e.searchParams.set("mode","audience"),!this.openAudienceTab(e.href)){console.warn("[hyperframes-slideshow] present(): browser blocked the audience tab");return}this.setAttribute("data-hf-presenting","true"),this.postCurrentPresenterPositionBurst(),this.presenterStartMs=Date.now(),this.presenterInterval===null&&(this.presenterInterval=setInterval(()=>this.updateElapsed(),1e3)),this.render()}openAudienceTab(e){let t=navigator.userActivation;if(t&&t.isActive===!1)return!1;let n=document.createElement("a");return n.href=e,n.target="_blank",n.rel="noopener noreferrer",n.style.display="none",(document.body??document.documentElement).appendChild(n),n.click(),n.remove(),!0}updateElapsed(){if(this.presenterStartMs===null)return;let e=this.chrome?.querySelector("[data-hf-presenter-elapsed]");e&&(e.textContent=k(Math.floor((Date.now()-this.presenterStartMs)/1e3)))}initChannel(){this.resolveMode()==="audience"?this.channel=new m("audience",t=>{this.controller&&this.controller.syncTo?.(t.sequenceId,t.slideIndex,t.fragmentIndex)},this.onRemoteMedia):this.channel=new m("presenter",()=>{},this.onRemoteMedia)}async init(){if(this.initInFlight)return;this.initInFlight=!0;let e=this.initGeneration;try{let t=this.querySelector("hyperframes-player");if(!t||!(t instanceof HTMLElement))return;let n=this.innerHTML,r;try{r=I(n)}catch{return}if(!r||(this.renderInitialChrome(r),!ye(t))||(await Te(t),e!==this.initGeneration))return;this.attachIframeKeyForwarding(t);let s=await Ee(t,2500,()=>e!==this.initGeneration);if(e!==this.initGeneration)return;let{resolved:a,errors:d}=A(r,s);d.length>0&&console.warn("[hyperframes-slideshow] manifest errors:",d);let o=H(a);o.slides.length===0&&r.slides.length>0&&console.error("[hyperframes-slideshow] no main-line slides resolved \u2014 the scene timeline may not have loaded in time, or sceneIds/timing are invalid:",d);let l={seek:u=>t.seek(u),play:()=>t.play(),pause:()=>t.pause(),stopMedia:()=>{t.stopMedia?.(),this.stopDocumentMedia()},playSceneMedia:u=>this.playSceneDocumentMedia(u),get currentTime(){return t.currentTime},onTimeUpdate:u=>{let p=c=>{let b=c.detail;u(b.currentTime)};return t.addEventListener("timeupdate",p),()=>t.removeEventListener("timeupdate",p)}};this.bindController(new y(l,o)),s.length===0&&r.slides.length>0&&t.addEventListener("scenes",()=>{e===this.initGeneration&&this.init()},{once:!0})}finally{this.initInFlight=!1}}renderInitialChrome(e){if(this.controller||e.slides.length===0)return;let t={index:1,total:e.slides.length};if(this.resolveMode()==="audience"){this.paintChrome(this.buildNavCluster(t,"28px","fs-only"));return}this.paintChrome(this.buildNavCluster(t,"28px","full",{canPrev:!1,canNext:e.slides.length>1,loading:e.slides.length>1}))}bindController(e){this.offChange?.(),this.controller?.dispose?.(),this.controller=e,this.startMediaSync(),this.offChange=e.onChange(()=>{this.resolveMode()!=="audience"&&this.channel&&this.channel.postPosition(e.position),this.render()}),this.resolveMode()!=="audience"&&this.channel&&this.channel.postPosition(e.position),this.render()}postCurrentPresenterPosition(){this.resolveMode()==="audience"||!this.channel||!this.controller||this.channel.postPosition(this.controller.position)}postCurrentPresenterPositionBurst(){this.clearPresenterPositionTimers(),this.postCurrentPresenterPosition();for(let e of[250,750,1500,3e3,5e3]){let t=setTimeout(()=>{this.presenterPositionTimers=this.presenterPositionTimers.filter(n=>n!==t),this.postCurrentPresenterPosition()},e);this.presenterPositionTimers.push(t)}}clearPresenterPositionTimers(){for(let e of this.presenterPositionTimers)clearTimeout(e);this.presenterPositionTimers=[]}startMediaSync(){this.wireSlideshowMedia(),this.mediaWireInterval===null&&(this.mediaWireInterval=setInterval(()=>this.wireSlideshowMedia(),1e3))}mediaPlayerElements(){return Array.from(this.querySelectorAll("hyperframes-player")).filter(e=>e instanceof HTMLElement)}ensureInteractivePlayers(){for(let e of this.querySelectorAll("hyperframes-player"))e.hasAttribute("interactive")||e.setAttribute("interactive","")}observeInteractivePlayers(){typeof MutationObserver>"u"||this.playerObserver===null&&(this.playerObserver=new MutationObserver(()=>this.ensureInteractivePlayers()),this.playerObserver.observe(this,{childList:!0,subtree:!0}))}attachIframeKeyForwarding(e){let t=e.iframeElement;if(!(t instanceof HTMLIFrameElement)||t===this.keyForwardFrame)return;this.detachIframeKeys?.();let n=()=>{try{t.contentWindow?.addEventListener("keydown",this.onKey)}catch{this.warnIframeKeyForwardingUnavailable()}};n(),t.addEventListener("load",n),this.keyForwardFrame=t,this.detachIframeKeys=()=>{t.removeEventListener("load",n);try{t.contentWindow?.removeEventListener("keydown",this.onKey)}catch{this.warnIframeKeyForwardingUnavailable()}this.keyForwardFrame=null,this.detachIframeKeys=null}}warnIframeKeyForwardingUnavailable(){this.warnedIframeKeyForwardingUnavailable||(this.warnedIframeKeyForwardingUnavailable=!0,console.warn("[hyperframes-slideshow] iframe keyboard forwarding is unavailable for this composition, likely because the player iframe is cross-origin. Arrow shortcuts work when focus is outside the iframe."))}playerFrameDocument(e){let t=e.iframeElement;if(!(t instanceof HTMLIFrameElement))return null;try{return t.contentDocument}catch{return null}}mediaKey(e,t,n,r){let s=e.id?`player-id:${e.id}`:`player:${t}`,a=n.id?`id:${n.id}`:`${n.tagName.toLowerCase()}:${r}`;return`${s}|${a}`}mediaEntries(){let e=[];return this.mediaPlayerElements().forEach((t,n)=>{let r=this.playerFrameDocument(t);r&&Array.from(r.querySelectorAll("video,audio")).filter(ke).forEach((s,a)=>{e.push({key:this.mediaKey(t,n,s,a),el:s})})}),e}wireSlideshowMedia(){let e=["play","pause","seeking","seeked","ratechange","volumechange","ended","timeupdate"];for(let{key:t,el:n}of this.mediaEntries())if(n.dataset.hfSlideshowMediaSync!=="1"){n.dataset.hfSlideshowMediaSync="1";for(let r of e)n.addEventListener(r,()=>this.publishMediaState(n,t,r))}}publishMediaState(e,t,n){if(!(this.applyingRemoteMedia||this.resolveMode()==="audience"||!this.channel)){if(n==="timeupdate"){let r=performance.now();if(r-this.lastMediaTimeBroadcastMs<450&&!e.paused)return;this.lastMediaTimeBroadcastMs=r}this.channel.postMedia({key:t,action:n,currentTime:v(e.currentTime,0),paused:e.paused,ended:e.ended,muted:e.muted,volume:v(e.volume,1),playbackRate:v(e.playbackRate,1)})}}onRemoteMedia=e=>{if(this.resolveMode()!=="audience")return;if(this.blockedAudienceMedia.has(e.key)&&e.action==="timeupdate"){this.blockedAudienceMedia.set(e.key,e),this.showAudienceMediaUnlock();return}this.wireSlideshowMedia();let t=this.mediaEntries().find(n=>n.key===e.key);if(t){this.applyingRemoteMedia=!0;try{this.applyRemoteMedia(t.el,e)}finally{setTimeout(()=>{this.applyingRemoteMedia=!1},300)}}};applyRemoteMedia(e,t){if(t.action==="pause"||t.action==="ended"){this.audienceMutedPlaybackKeys.delete(t.key),this.blockedAudienceMedia.delete(t.key),this.syncRemoteMediaState(e,t,!0),e.pause(),this.hideAudienceMediaUnlockIfClear();return}if(t.action==="play"||t.action==="timeupdate"&&t.paused===!1&&e.paused){this.playAudienceMediaMuted(e,t);return}this.syncRemoteMediaState(e,t,!0)}syncRemoteMediaState(e,t,n){e.playbackRate=v(t.playbackRate,1),e.volume=Math.max(0,Math.min(1,v(t.volume,1))),e.muted=this.audienceMutedPlaybackKeys.has(t.key)?!0:t.muted,n&&Number.isFinite(t.currentTime)&&Math.abs((e.currentTime||0)-t.currentTime)>.35&&(e.currentTime=Math.max(0,t.currentTime))}playAudienceMediaMuted(e,t){this.audienceMutedPlaybackKeys.add(t.key),this.syncRemoteMediaState(e,t,!0),e.muted=!0;try{e.play().then(()=>{this.blockedAudienceMedia.delete(t.key),this.hideAudienceMediaUnlockIfClear()}).catch(()=>{this.blockedAudienceMedia.set(t.key,t),this.showAudienceMediaUnlock()})}catch{this.blockedAudienceMedia.set(t.key,t),this.showAudienceMediaUnlock()}}retryBlockedAudienceMedia=()=>{this.wireSlideshowMedia();let e=new Map(this.mediaEntries().map(t=>[t.key,t.el]));for(let[t,n]of this.blockedAudienceMedia){let r=e.get(t);r&&this.playAudienceMediaMuted(r,n)}};showAudienceMediaUnlock(){if(this.resolveMode()!=="audience"||this.audienceMediaUnlockButton)return;let e=document.createElement("button");e.type="button",e.textContent="Play audience media muted",e.style.cssText="position:fixed;left:50%;bottom:96px;transform:translateX(-50%);z-index:100000;border:0;border-radius:999px;padding:12px 18px;background:#fff;color:#111827;box-shadow:0 10px 32px rgba(0,0,0,.28);font:700 14px/1 system-ui,sans-serif;cursor:pointer;pointer-events:auto;",e.addEventListener("click",this.retryBlockedAudienceMedia),this.appendChild(e),this.audienceMediaUnlockButton=e}hideAudienceMediaUnlockIfClear(){this.blockedAudienceMedia.size>0||!this.audienceMediaUnlockButton||(this.audienceMediaUnlockButton.remove(),this.audienceMediaUnlockButton=null)}onKey=e=>{if(ve(e.target))return;let t=document.activeElement,n=t===this||this.contains(t),r=document.querySelectorAll("hyperframes-slideshow").length>1,s=n||!r&&(t===document.body||t===null);if((e.key==="p"||e.key==="P")&&!e.metaKey&&!e.ctrlKey&&!e.altKey){if(!s||!this.shouldShowPresentControl())return;this.present(),e.preventDefault();return}if(this.controller){if(e.key==="ArrowRight"){if(!s)return;this.controller.next(),e.preventDefault()}else if(e.key==="ArrowLeft"){if(!s)return;this.controller.prev(),e.preventDefault()}else if(e.key===" "){if(!n)return;this.controller.next(),e.preventDefault()}else if(e.key==="Backspace"){if(!n)return;this.controller.prev(),e.preventDefault()}else if((e.key==="f"||e.key==="F")&&!e.metaKey&&!e.ctrlKey&&!e.altKey){if(!n)return;this.toggleFullscreen(),e.preventDefault()}}};onMessage=e=>{if(this.resolveMode()==="audience")return;let t=e.data;!t||!this.controller||(t.type==="next"?this.controller.next():t.type==="prev"?this.controller.prev():t.type==="goto"&&typeof t.slideIndex=="number"?this.controller.goToSlide?.(t.slideIndex):t.type==="back"&&this.controller.back?.())};onTouchStart=e=>{let t=e.touches[0];t&&(this.touchStartX=t.clientX,this.touchStartY=t.clientY)};onTouchEnd=e=>{if(!this.controller)return;let t=e.changedTouches[0];if(!t)return;let n=t.clientX-this.touchStartX,r=t.clientY-this.touchStartY;Math.abs(n)<=40||Math.abs(n)<=Math.abs(r)||(n<0?this.controller.next():this.controller.prev())};render(){if(!this.controller)return;if(this.resolveMode()==="audience"){let{counter:r}=this.controller;this.paintChrome(this.buildNavCluster(r,"28px","fs-only"));return}if(this.getAttribute("data-hf-presenting")==="true"){this.renderPresenter();return}let{counter:e,currentSlide:t}=this.controller;if(!t)return;let n=t.hotspots.map(r=>{let s=r.region?`left:${r.region.x}%;top:${r.region.y}%;`:"right:5%;bottom:18%;";return`<button
80
+ `,document.head.appendChild(i)}var H='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3"/></svg>',q='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3v3a2 2 0 0 1-2 2H3M21 8h-3a2 2 0 0 1-2-2V3M3 16h3a2 2 0 0 1 2 2v3M16 21v-3a2 2 0 0 1 2-2h3"/></svg>',we='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="13" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M10 8.5v4l4-2-4-2z"/></svg>',ke="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",b=class extends HTMLElement{controller=null;offChange=null;chrome=null;touchStartX=0;touchStartY=0;channel=null;presenterStartMs=null;presenterInterval=null;presenterPositionTimers=[];disconnected=!1;initTimer=null;initInFlight=!1;initGeneration=0;keyForwardFrame=null;detachIframeKeys=null;warnedIframeKeyForwardingUnavailable=!1;_muted=!1;mediaWireInterval=null;playerObserver=null;applyingRemoteMedia=!1;lastMediaTimeBroadcastMs=0;audienceMutedPlaybackKeys=new Set;blockedAudienceMedia=new Map;audienceMediaUnlockButton=null;autoplayToken=0;ownedMedia=new g(ye,(e,t,n)=>this.publishMediaState(e,t,n));get muted(){return this._muted}resolveMode(){let e=this.getAttribute("mode");if(e)return e;try{return new URLSearchParams(location.search).get("mode")}catch{return null}}static get observedAttributes(){return["sound","mode"]}attributeChangedCallback(){this.controller&&this.render()}connectedCallback(){this.disconnected=!1,this.initInFlight=!1,this.initGeneration+=1,this.tabIndex=0,window.addEventListener("keydown",this.onKey),this.addEventListener("touchstart",this.onTouchStart,{passive:!0}),this.addEventListener("touchend",this.onTouchEnd),window.addEventListener("message",this.onMessage),document.addEventListener("fullscreenchange",this.onFsChange),this.initChannel(),this.observeInteractivePlayers(),this.initTimer=setTimeout(()=>{this.initTimer=null,this.isConnected&&!this.disconnected&&(this.ensureInteractivePlayers(),this.init())},0)}disconnectedCallback(){this.disconnected=!0,this.initGeneration+=1,this.autoplayToken++,this.initTimer!==null&&(clearTimeout(this.initTimer),this.initTimer=null),window.removeEventListener("keydown",this.onKey),this.detachIframeKeys?.(),this.removeEventListener("touchstart",this.onTouchStart),this.removeEventListener("touchend",this.onTouchEnd),window.removeEventListener("message",this.onMessage),document.removeEventListener("fullscreenchange",this.onFsChange),this.offChange?.(),this.offChange=null,this.controller?.dispose?.(),this.controller=null,this.chrome=null,this.channel?.destroy(),this.channel=null,this.mediaWireInterval!==null&&(clearInterval(this.mediaWireInterval),this.mediaWireInterval=null),this.playerObserver!==null&&(this.playerObserver.disconnect(),this.playerObserver=null),this.ownedMedia.clear(),this.audienceMediaUnlockButton?.remove(),this.audienceMediaUnlockButton=null,this.audienceMutedPlaybackKeys.clear(),this.blockedAudienceMedia.clear(),this.presenterInterval!==null&&(clearInterval(this.presenterInterval),this.presenterInterval=null),this.clearPresenterPositionTimers()}__setControllerForTest(e){this.bindController(e)}present(){if(this.resolveMode()==="audience"||this.getAttribute("data-hf-presenting")==="true")return;let e=new URL(location.href);if(e.searchParams.set("mode","audience"),!this.openAudienceTab(e.href)){console.warn("[hyperframes-slideshow] present(): browser blocked the audience tab");return}this.setAttribute("data-hf-presenting","true"),this.postCurrentPresenterPositionBurst(),this.presenterStartMs=Date.now(),this.presenterInterval===null&&(this.presenterInterval=setInterval(()=>this.updateElapsed(),1e3)),this.render()}openAudienceTab(e){let t=navigator.userActivation;if(t&&t.isActive===!1)return!1;let n=document.createElement("a");return n.href=e,n.target="_blank",n.rel="noopener noreferrer",n.style.display="none",(document.body??document.documentElement).appendChild(n),n.click(),n.remove(),!0}updateElapsed(){if(this.presenterStartMs===null)return;let e=this.chrome?.querySelector("[data-hf-presenter-elapsed]");e&&(e.textContent=S(Math.floor((Date.now()-this.presenterStartMs)/1e3)))}initChannel(){this.resolveMode()==="audience"?this.channel=new m("audience",t=>{this.controller&&this.controller.syncTo?.(t.sequenceId,t.slideIndex,t.fragmentIndex)},this.onRemoteMedia):this.channel=new m("presenter",()=>{},this.onRemoteMedia)}async init(){if(this.initInFlight)return;this.initInFlight=!0;let e=this.initGeneration;try{let t=this.querySelector("hyperframes-player");if(!t||!(t instanceof HTMLElement))return;let n=this.innerHTML,r;try{r=P(n)}catch{return}if(!r||(this.renderInitialChrome(r),!be(t))||(await Ie(t),e!==this.initGeneration))return;this.attachIframeKeyForwarding(t);let s=await Pe(t,2500,()=>e!==this.initGeneration);if(e!==this.initGeneration)return;let{resolved:a,errors:d}=C(r,s);d.length>0&&console.warn("[hyperframes-slideshow] manifest errors:",d);let o=_(a);o.slides.length===0&&r.slides.length>0&&console.error("[hyperframes-slideshow] no main-line slides resolved \u2014 the scene timeline may not have loaded in time, or sceneIds/timing are invalid:",d);let l={seek:u=>t.seek(u),play:()=>t.play(),pause:()=>t.pause(),stopMedia:()=>{t.stopMedia?.(),this.stopDocumentMedia()},playSceneMedia:u=>this.playSceneDocumentMedia(u),get currentTime(){return t.currentTime},onTimeUpdate:u=>{let p=c=>{let M=c.detail;u(M.currentTime)};return t.addEventListener("timeupdate",p),()=>t.removeEventListener("timeupdate",p)}};this.bindController(new y(l,o)),s.length===0&&r.slides.length>0&&t.addEventListener("scenes",()=>{e===this.initGeneration&&this.init()},{once:!0})}finally{this.initInFlight=!1}}renderInitialChrome(e){if(this.controller||e.slides.length===0)return;let t={index:1,total:e.slides.length};if(this.resolveMode()==="audience"){this.paintChrome(this.buildNavCluster(t,"28px","fs-only"));return}this.paintChrome(this.buildNavCluster(t,"28px","full",{canPrev:!1,canNext:e.slides.length>1,loading:e.slides.length>1}))}bindController(e){this.offChange?.(),this.controller?.dispose?.(),this.controller=e,this.startMediaSync(),this.offChange=e.onChange(()=>{this.resolveMode()!=="audience"&&this.channel&&this.channel.postPosition(e.position),this.render()}),this.resolveMode()!=="audience"&&this.channel&&this.channel.postPosition(e.position),this.render()}postCurrentPresenterPosition(){this.resolveMode()==="audience"||!this.channel||!this.controller||this.channel.postPosition(this.controller.position)}postCurrentPresenterPositionBurst(){this.clearPresenterPositionTimers(),this.postCurrentPresenterPosition();for(let e of[250,750,1500,3e3,5e3]){let t=setTimeout(()=>{this.presenterPositionTimers=this.presenterPositionTimers.filter(n=>n!==t),this.postCurrentPresenterPosition()},e);this.presenterPositionTimers.push(t)}}clearPresenterPositionTimers(){for(let e of this.presenterPositionTimers)clearTimeout(e);this.presenterPositionTimers=[]}startMediaSync(){this.wireSlideshowMedia(),this.mediaWireInterval===null&&(this.mediaWireInterval=setInterval(()=>this.wireSlideshowMedia(),1e3))}mediaPlayerElements(){return Array.from(this.querySelectorAll("hyperframes-player")).filter(e=>e instanceof HTMLElement)}ensureInteractivePlayers(){for(let e of this.querySelectorAll("hyperframes-player"))e.hasAttribute("interactive")||e.setAttribute("interactive","")}observeInteractivePlayers(){typeof MutationObserver>"u"||this.playerObserver===null&&(this.playerObserver=new MutationObserver(()=>this.ensureInteractivePlayers()),this.playerObserver.observe(this,{childList:!0,subtree:!0}))}attachIframeKeyForwarding(e){let t=e.iframeElement;if(!(t instanceof HTMLIFrameElement)||t===this.keyForwardFrame)return;this.detachIframeKeys?.();let n=()=>{try{t.contentWindow?.addEventListener("keydown",this.onKey)}catch{this.warnIframeKeyForwardingUnavailable()}};n(),t.addEventListener("load",n),this.keyForwardFrame=t,this.detachIframeKeys=()=>{t.removeEventListener("load",n);try{t.contentWindow?.removeEventListener("keydown",this.onKey)}catch{this.warnIframeKeyForwardingUnavailable()}this.keyForwardFrame=null,this.detachIframeKeys=null}}warnIframeKeyForwardingUnavailable(){this.warnedIframeKeyForwardingUnavailable||(this.warnedIframeKeyForwardingUnavailable=!0,console.warn("[hyperframes-slideshow] iframe keyboard forwarding is unavailable for this composition, likely because the player iframe is cross-origin. Arrow shortcuts work when focus is outside the iframe."))}playerFrameDocument(e){let t=e.iframeElement;if(!(t instanceof HTMLIFrameElement))return null;try{return t.contentDocument}catch{return null}}mediaKey(e,t,n,r){let s=e.id?`player-id:${e.id}`:`player:${t}`,a=n.id?`id:${n.id}`:`${n.tagName.toLowerCase()}:${r}`;return`${s}|${a}`}mediaEntries(){let e=[];return this.mediaPlayerElements().forEach((t,n)=>{let r=this.playerFrameDocument(t);r&&Array.from(r.querySelectorAll("video,audio")).filter(Te).forEach((s,a)=>{e.push({key:this.mediaKey(t,n,s,a),el:s})})}),e}wireSlideshowMedia(){let e=this.ownedMedia.sync(this.mediaEntries());for(let t of e)t.muted=this._muted||t.defaultMuted}publishMediaState(e,t,n){if(!(this.applyingRemoteMedia||this.resolveMode()==="audience"||!this.channel)){if(n==="timeupdate"){let r=performance.now();if(r-this.lastMediaTimeBroadcastMs<450&&!e.paused)return;this.lastMediaTimeBroadcastMs=r}this.channel.postMedia({key:t,action:n,currentTime:v(e.currentTime,0),paused:e.paused,ended:e.ended,muted:e.muted,volume:v(e.volume,1),playbackRate:v(e.playbackRate,1)})}}onRemoteMedia=e=>{if(this.resolveMode()!=="audience")return;if(this.blockedAudienceMedia.has(e.key)&&e.action==="timeupdate"){this.blockedAudienceMedia.set(e.key,e),this.showAudienceMediaUnlock();return}this.wireSlideshowMedia();let t=this.mediaEntries().find(n=>n.key===e.key);if(t){this.applyingRemoteMedia=!0;try{this.applyRemoteMedia(t.el,e)}finally{setTimeout(()=>{this.applyingRemoteMedia=!1},300)}}};applyRemoteMedia(e,t){if(t.action==="pause"||t.action==="ended"){this.audienceMutedPlaybackKeys.delete(t.key),this.blockedAudienceMedia.delete(t.key),this.syncRemoteMediaState(e,t,!0),e.pause(),this.hideAudienceMediaUnlockIfClear();return}if(t.action==="play"||t.action==="timeupdate"&&t.paused===!1&&e.paused){this.playAudienceMediaMuted(e,t);return}this.syncRemoteMediaState(e,t,!0)}syncRemoteMediaState(e,t,n){e.playbackRate=v(t.playbackRate,1),e.volume=Math.max(0,Math.min(1,v(t.volume,1))),e.muted=this.audienceMutedPlaybackKeys.has(t.key)?!0:t.muted,n&&Number.isFinite(t.currentTime)&&Math.abs((e.currentTime||0)-t.currentTime)>.35&&(e.currentTime=Math.max(0,t.currentTime))}playAudienceMediaMuted(e,t){this.audienceMutedPlaybackKeys.add(t.key),this.syncRemoteMediaState(e,t,!0),e.muted=!0;try{e.play().then(()=>{this.blockedAudienceMedia.delete(t.key),this.hideAudienceMediaUnlockIfClear()}).catch(()=>{this.blockedAudienceMedia.set(t.key,t),this.showAudienceMediaUnlock()})}catch{this.blockedAudienceMedia.set(t.key,t),this.showAudienceMediaUnlock()}}retryBlockedAudienceMedia=()=>{this.wireSlideshowMedia();let e=new Map(this.mediaEntries().map(t=>[t.key,t.el]));for(let[t,n]of this.blockedAudienceMedia){let r=e.get(t);r&&this.playAudienceMediaMuted(r,n)}};showAudienceMediaUnlock(){if(this.resolveMode()!=="audience"||this.audienceMediaUnlockButton)return;let e=document.createElement("button");e.type="button",e.textContent="Play audience media muted",e.style.cssText="position:fixed;left:50%;bottom:96px;transform:translateX(-50%);z-index:100000;border:0;border-radius:999px;padding:12px 18px;background:#fff;color:#111827;box-shadow:0 10px 32px rgba(0,0,0,.28);font:700 14px/1 system-ui,sans-serif;cursor:pointer;pointer-events:auto;",e.addEventListener("click",this.retryBlockedAudienceMedia),this.appendChild(e),this.audienceMediaUnlockButton=e}hideAudienceMediaUnlockIfClear(){this.blockedAudienceMedia.size>0||!this.audienceMediaUnlockButton||(this.audienceMediaUnlockButton.remove(),this.audienceMediaUnlockButton=null)}onKey=e=>{if(ge(e.target))return;let t=document.activeElement,n=t===this||this.contains(t),r=document.querySelectorAll("hyperframes-slideshow").length>1,s=n||!r&&(t===document.body||t===null);if((e.key==="p"||e.key==="P")&&!e.metaKey&&!e.ctrlKey&&!e.altKey){if(!s||!this.shouldShowPresentControl())return;this.present(),e.preventDefault();return}if(this.controller){if(e.key==="ArrowRight"){if(!s)return;this.controller.next(),e.preventDefault()}else if(e.key==="ArrowLeft"){if(!s)return;this.controller.prev(),e.preventDefault()}else if(e.key===" "){if(!n)return;this.controller.next(),e.preventDefault()}else if(e.key==="Backspace"){if(!n)return;this.controller.prev(),e.preventDefault()}else if((e.key==="f"||e.key==="F")&&!e.metaKey&&!e.ctrlKey&&!e.altKey){if(!n)return;this.toggleFullscreen(),e.preventDefault()}}};onMessage=e=>{if(this.resolveMode()==="audience")return;let t=e.data;!t||!this.controller||(t.type==="next"?this.controller.next():t.type==="prev"?this.controller.prev():t.type==="goto"&&typeof t.slideIndex=="number"?this.controller.goToSlide?.(t.slideIndex):t.type==="back"&&this.controller.back?.())};onTouchStart=e=>{let t=e.touches[0];t&&(this.touchStartX=t.clientX,this.touchStartY=t.clientY)};onTouchEnd=e=>{if(!this.controller)return;let t=e.changedTouches[0];if(!t)return;let n=t.clientX-this.touchStartX,r=t.clientY-this.touchStartY;Math.abs(n)<=40||Math.abs(n)<=Math.abs(r)||(n<0?this.controller.next():this.controller.prev())};render(){if(!this.controller)return;if(this.resolveMode()==="audience"){let{counter:r}=this.controller;this.paintChrome(this.buildNavCluster(r,"28px","fs-only"));return}if(this.getAttribute("data-hf-presenting")==="true"){this.renderPresenter();return}let{counter:e,currentSlide:t}=this.controller;if(!t)return;let n=t.hotspots.map(r=>{let s=r.region?`left:${r.region.x}%;top:${r.region.y}%;`:"right:5%;bottom:18%;";return`<button
81
81
  class="hf-hotspot-pill"
82
82
  data-hotspot-id="${h(r.id)}"
83
83
  data-hotspot-target="${h(r.target)}"
84
84
  type="button"
85
85
  style="position:absolute;${s}display:inline-flex;align-items:center;gap:6px;padding:8px 14px;background:var(--hf-slideshow-accent,rgba(255,255,255,0.92));color:#111;border:none;border-radius:999px;font-size:13px;font-weight:600;letter-spacing:0.01em;cursor:pointer;pointer-events:auto;box-shadow:0 4px 16px rgba(0,0,0,0.35);animation:hf-hotspot-pulse 1.8s ease-in-out infinite;white-space:nowrap;"
86
86
  aria-label="${h(r.label)}"
87
- ><span aria-hidden="true" style="font-size:14px;line-height:1;">\u2295</span>${h(r.label)}</button>`}).join("");this.paintChrome(n+this.buildNavCluster(e,"28px"))}paintChrome(e){be(),this.chrome||(this.chrome=document.createElement("div"),this.chrome.setAttribute("data-hf-chrome",""),this.appendChild(this.chrome)),this.chrome.style.cssText="position:absolute;inset:0;pointer-events:none;z-index:10;",this.chrome.innerHTML=e,this.wireChromeButtons()}buildNavCluster(e,t,n="full",r={}){let s=this.controller,a=r.canPrev??s?.canPrev??!0,d=r.canNext??s?.canNext??!0,o=r.loading===!0&&d,l=this.hasAttribute("sound"),u="display:flex;align-items:center;justify-content:center;width:34px;height:34px;background:transparent;border:none;border-radius:999px;color:rgba(255,255,255,0.85);font-size:16px;cursor:pointer;transition:background 0.15s,color 0.15s;padding:0;",b=l?`<button
87
+ ><span aria-hidden="true" style="font-size:14px;line-height:1;">\u2295</span>${h(r.label)}</button>`}).join("");this.paintChrome(n+this.buildNavCluster(e,"28px"))}paintChrome(e){xe(),this.chrome||(this.chrome=document.createElement("div"),this.chrome.setAttribute("data-hf-chrome",""),this.appendChild(this.chrome)),this.chrome.style.cssText="position:absolute;inset:0;pointer-events:none;z-index:10;",this.chrome.innerHTML=e,this.wireChromeButtons()}buildNavCluster(e,t,n="full",r={}){let s=this.controller,a=r.canPrev??s?.canPrev??!0,d=r.canNext??s?.canNext??!0,o=r.loading===!0&&d,l=this.hasAttribute("sound"),u="display:flex;align-items:center;justify-content:center;width:34px;height:34px;background:transparent;border:none;border-radius:999px;color:rgba(255,255,255,0.85);font-size:16px;cursor:pointer;transition:background 0.15s,color 0.15s;padding:0;",M=l?`<button
88
88
  data-hf-mute
89
89
  type="button"
90
90
  aria-label="${this._muted?"Unmute":"Mute"}"
@@ -92,58 +92,58 @@
92
92
  data-hf-tooltip="${this._muted?"Unmute":"Mute"}"
93
93
  aria-pressed="${this._muted?"true":"false"}"
94
94
  style="${u}${this._muted?"color:rgba(255,255,255,0.45);":""}"
95
- >${this._muted?'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/><line x1="23" y1="9" x2="17" y2="15"/><line x1="17" y1="9" x2="23" y2="15"/></svg>':'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/><path d="M15.54 8.46a5 5 0 0 1 0 7.07"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14"/></svg>'}</button>`:"",_=a?`<button
95
+ >${this._muted?'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/><line x1="23" y1="9" x2="17" y2="15"/><line x1="17" y1="9" x2="23" y2="15"/></svg>':'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/><path d="M15.54 8.46a5 5 0 0 1 0 7.07"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14"/></svg>'}</button>`:"",O=a?`<button
96
96
  data-hf-prev
97
97
  type="button"
98
98
  aria-label="Previous slide"
99
99
  title="Previous slide"
100
100
  data-hf-tooltip="Previous slide"
101
- style="${u}" >&#8249;</button>`:"",O=o?`<span
101
+ style="${u}" >&#8249;</button>`:"",B=o?`<span
102
102
  data-hf-nav-loading
103
103
  role="status"
104
104
  aria-label="Loading slides"
105
105
  title="Loading slides"
106
106
  style="${u}cursor:progress;color:rgba(255,255,255,0.72);"
107
- ><span class="hf-nav-spinner" aria-hidden="true" style="width:14px;height:14px;border:2px solid rgba(255,255,255,0.32);border-top-color:rgba(255,255,255,0.92);border-radius:999px;animation:hf-nav-spin 0.8s linear infinite;"></span></span>`:"",B=o?O:d?`<button
107
+ ><span class="hf-nav-spinner" aria-hidden="true" style="width:14px;height:14px;border:2px solid rgba(255,255,255,0.32);border-top-color:rgba(255,255,255,0.92);border-radius:999px;animation:hf-nav-spin 0.8s linear infinite;"></span></span>`:"",K=o?B:d?`<button
108
108
  data-hf-next
109
109
  type="button"
110
110
  aria-label="Next slide"
111
111
  title="Next slide"
112
112
  data-hf-tooltip="Next slide"
113
- style="${u}" >&#8250;</button>`:"",K=this.shouldShowPresentControl()?`<button
113
+ style="${u}" >&#8250;</button>`:"",U=this.shouldShowPresentControl()?`<button
114
114
  data-hf-present
115
115
  type="button"
116
116
  aria-label="Present"
117
117
  title="Present"
118
118
  data-hf-tooltip="Present"
119
- style="${u}" >${Me}</button>`:"",M=document.fullscreenElement===this,x=M?"Exit full screen":"Full screen",T=`<button
119
+ style="${u}" >${we}</button>`:"",x=document.fullscreenElement===this,w=x?"Exit full screen":"Full screen",E=`<button
120
120
  data-hf-fullscreen
121
121
  type="button"
122
- aria-label="${x}"
123
- title="${x}"
124
- data-hf-tooltip="${x}"
125
- aria-pressed="${M?"true":"false"}"
126
- style="${u}" >${M?q:N}</button>`;if(n==="fs-only")return`
122
+ aria-label="${w}"
123
+ title="${w}"
124
+ data-hf-tooltip="${w}"
125
+ aria-pressed="${x?"true":"false"}"
126
+ style="${u}" >${x?q:H}</button>`;if(n==="fs-only")return`
127
127
  <div
128
128
  data-hf-nav-cluster
129
129
  style="position:absolute;bottom:${t};right:32px;display:inline-flex;align-items:center;background:rgba(20,20,22,0.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.12);border-radius:999px;box-shadow:0 4px 24px rgba(0,0,0,0.45);padding:4px;pointer-events:auto;"
130
- >${T}</div>`;let U=a?"4px":"10px",D=d?"4px":"10px";return`
130
+ >${E}</div>`;let D=a?"4px":"10px",z=d?"4px":"10px";return`
131
131
  <div
132
132
  data-hf-nav-cluster
133
133
  style="position:absolute;bottom:${t};right:32px;display:inline-flex;align-items:center;gap:2px;background:rgba(20,20,22,0.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.12);border-radius:999px;box-shadow:0 4px 24px rgba(0,0,0,0.45);padding:4px;pointer-events:auto;"
134
134
  >
135
- ${b}
135
+ ${M}
136
136
  ${l?'<span aria-hidden="true" style="width:1px;height:20px;background:rgba(255,255,255,0.12);margin:0 2px;flex-shrink:0;"></span>':""}
137
- ${_}
137
+ ${O}
138
138
  <span
139
139
  data-hf-counter
140
140
  aria-label="Slide ${e.index} of ${e.total}"
141
- style="min-width:46px;text-align:center;color:rgba(255,255,255,0.9);font-family:${xe};font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;padding:0 ${D} 0 ${U};user-select:none;"
141
+ style="min-width:46px;text-align:center;color:rgba(255,255,255,0.9);font-family:${ke};font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:0;padding:0 ${z} 0 ${D};user-select:none;"
142
142
  >${e.index}&thinsp;/&thinsp;${e.total}</span>
143
- ${B}
144
- <span aria-hidden="true" style="width:1px;height:20px;background:rgba(255,255,255,0.12);margin:0 2px;flex-shrink:0;"></span>
145
143
  ${K}
146
- ${T}
147
- </div>`}wireChromeButtons(){let e=this.chrome;e&&(this.wireChromeClick(e,"[data-hf-mute]",()=>this.toggleMute()),this.wireChromeClick(e,"[data-hf-prev]",()=>this.controller?.prev()),this.wireChromeClick(e,"[data-hf-next]",()=>this.controller?.next()),this.wireChromeClick(e,"[data-hf-present]",()=>this.present()),this.wireChromeClick(e,"[data-hf-fullscreen]",()=>this.toggleFullscreen()),this.wirePresenterNotes(e),this.wireHotspots(e))}wireChromeClick(e,t,n){let r=e.querySelector(t);r&&r.addEventListener("click",n)}wirePresenterNotes(e){let t=e.querySelector("[data-hf-presenter-notes]");if(t instanceof HTMLTextAreaElement){let n=t.getAttribute("data-hf-presenter-notes-key");t.addEventListener("input",()=>this.writePresenterNotes(n,t.value))}}wireHotspots(e){for(let t of e.querySelectorAll("[data-hotspot-id]")){let n=t.getAttribute("data-hotspot-target")??"";t.addEventListener("click",()=>this.controller?.enterBranch?.(n))}}onFsChange=()=>{let e=this.chrome?.querySelector("[data-hf-fullscreen]");if(!e)return;let t=document.fullscreenElement===this;e.innerHTML=t?q:N;let n=t?"Exit full screen":"Full screen";e.setAttribute("aria-label",n),e.setAttribute("title",n),e.setAttribute("data-hf-tooltip",n),e.setAttribute("aria-pressed",t?"true":"false")};toggleFullscreen(){document.fullscreenElement===this?document.exitFullscreen().catch(()=>{}):this.requestFullscreen().catch(()=>{})}shouldShowPresentControl(){return this.resolveMode()!=="audience"&&this.getAttribute("data-hf-presenting")!=="true"}toggleMute(){this._muted=!this._muted,this._muted?this.setAttribute("data-hf-muted",""):this.removeAttribute("data-hf-muted"),this.applyGlobalMute(this._muted),this.dispatchEvent(new CustomEvent("hf-sound",{detail:{muted:this._muted},bubbles:!0,composed:!0})),this.render()}applyGlobalMute(e){for(let n of this.querySelectorAll("hyperframes-player")){if(!(n instanceof HTMLElement))continue;let r=n;"muted"in r?r.muted=e:e?r.setAttribute("muted",""):r.removeAttribute("muted")}let t=this.ownerDocument;for(let n of t.querySelectorAll("video, audio"))n instanceof HTMLMediaElement&&(n.muted=e||n.defaultMuted)}stopDocumentMedia(){this.autoplayToken++;let e=this.ownerDocument;for(let t of e.querySelectorAll("video, audio"))t instanceof HTMLMediaElement&&t.pause()}playSceneDocumentMedia(e){if(this.resolveMode()==="audience")return;let t=e.replace(/["\\]/g,"\\$&"),n=++this.autoplayToken,r={started:!1,lastTime:-1,advancingTicks:0,waited:0,warned:!1},s=()=>{if(n!==this.autoplayToken)return;let a=this.stepAutoplay(t,r);r.waited+=F,!a&&r.waited<=me&&window.setTimeout(s,F)};s()}findSceneVideo(e){for(let t of this.mediaPlayerElements()){let r=this.playerFrameDocument(t)?.querySelector(`[data-composition-id="${e}"] video`)??null;if(r instanceof HTMLVideoElement)return r}return null}stepAutoplay(e,t){let n=this.findSceneVideo(e);if(!n)return!1;if(!t.started){t.started=!0,n.muted=this._muted||n.defaultMuted;try{n.currentTime=0}catch{}}let r=!n.paused&&n.currentTime>t.lastTime;return t.lastTime=n.currentTime,r?++t.advancingTicks>=2:(t.advancingTicks=0,n.play().catch(s=>{let a=s instanceof DOMException?s.name:"";a!=="AbortError"&&a!=="NotAllowedError"&&!t.warned&&(t.warned=!0,console.warn("[hyperframes-slideshow] autoplay play() failed:",s))}),!1)}presenterNotesDeckKey(){let e=this.getAttribute("notes-storage-key")?.trim();if(e)return e;let t=this.querySelector("hyperframes-player")?.getAttribute("src")??"",n=t;try{let a=typeof location<"u"?location.href:"http://localhost/";n=new URL(t,a).href}catch{}let r=typeof location<"u"?`${location.origin}${location.pathname}`:"",s=this.ownerDocument.title;return`${r}|${s}|${n}`}presenterNotesStorageKey(e){let t=this.controller?.position;return t?`${ge}${JSON.stringify([this.presenterNotesDeckKey(),t.sequenceId,t.slideIndex,e.sceneId??""])}`:null}readPresenterNotes(e){if(!e||typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}writePresenterNotes(e,t){if(e&&!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}renderPresenter(){if(!this.controller)return;let{counter:e,currentSlide:t,nextSlide:n}=this.controller;if(!t)return;let r=this.presenterStartMs!==null?Math.floor((Date.now()-this.presenterStartMs)/1e3):0,s=this.querySelector("hyperframes-player");s instanceof HTMLElement&&(s.style.top="0",s.style.bottom="32%",s.style.height="auto");let a=this.presenterNotesStorageKey(t),d=this.readPresenterNotes(a)??t.notes??"";this.paintChrome(L({notes:d,notesStorageKey:a,nextText:we(n),counterText:`${e.index} / ${e.total}`,elapsedText:k(r),hotspots:t.hotspots})+this.buildNavCluster(e,"calc(32% + 18px)"))}};function we(i){if(i===null)return"End of sequence";let e=i.notes!=null?i.notes.split(`
148
- `)[0]??"":"";return e.length>0?`${h(i.sceneId)}: ${h(e)}`:h(i.sceneId)}function ke(i){let e=i.ownerDocument.defaultView;return!e||typeof e.HTMLMediaElement!="function"?!1:i instanceof e.HTMLMediaElement}function v(i,e){return Number.isFinite(i)?i:e}function S(i){return"scenes"in i&&Array.isArray(i.scenes)?i.scenes:[]}var Se=5e3;function Te(i){return i.ready===!0?Promise.resolve():new Promise(e=>{let t=null,n=()=>{t!==null&&(clearTimeout(t),t=null),e()};i.addEventListener("ready",n,{once:!0}),t=setTimeout(()=>{i.removeEventListener("ready",n),e()},Se)})}function Ee(i,e,t=()=>!1){let n=S(i);if(n.length>0)return Promise.resolve(n);let r=Math.ceil(e/100);return new Promise(s=>{let a=!1,d=null,o=0,l=c=>{a||(a=!0,d!==null&&clearTimeout(d),i.removeEventListener("scenes",u),s(c))},u=()=>{if(t())return l([]);let c=S(i);c.length>0&&l(c)},p=()=>{if(a)return;if(t())return l([]);let c=S(i);if(c.length>0)return l(c);if(o+=1,o>=r)return l([]);d=setTimeout(p,100)};i.addEventListener("scenes",u),d=setTimeout(p,100)})}function H(i){let e=r=>r.end>r.start,t=i.slides.filter(e),n={};for(let[r,s]of Object.entries(i.sequences))n[r]={...s,slides:s.slides.filter(e)};return{slides:t,sequences:n}}function h(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}customElements.get("hyperframes-slideshow")||customElements.define("hyperframes-slideshow",g);return V(Ie);})();
144
+ <span aria-hidden="true" style="width:1px;height:20px;background:rgba(255,255,255,0.12);margin:0 2px;flex-shrink:0;"></span>
145
+ ${U}
146
+ ${E}
147
+ </div>`}wireChromeButtons(){let e=this.chrome;e&&(this.wireChromeClick(e,"[data-hf-mute]",()=>this.toggleMute()),this.wireChromeClick(e,"[data-hf-prev]",()=>this.controller?.prev()),this.wireChromeClick(e,"[data-hf-next]",()=>this.controller?.next()),this.wireChromeClick(e,"[data-hf-present]",()=>this.present()),this.wireChromeClick(e,"[data-hf-fullscreen]",()=>this.toggleFullscreen()),this.wirePresenterNotes(e),this.wireHotspots(e))}wireChromeClick(e,t,n){let r=e.querySelector(t);r&&r.addEventListener("click",n)}wirePresenterNotes(e){let t=e.querySelector("[data-hf-presenter-notes]");if(t instanceof HTMLTextAreaElement){let n=t.getAttribute("data-hf-presenter-notes-key");t.addEventListener("input",()=>this.writePresenterNotes(n,t.value))}}wireHotspots(e){for(let t of e.querySelectorAll("[data-hotspot-id]")){let n=t.getAttribute("data-hotspot-target")??"";t.addEventListener("click",()=>this.controller?.enterBranch?.(n))}}onFsChange=()=>{let e=this.chrome?.querySelector("[data-hf-fullscreen]");if(!e)return;let t=document.fullscreenElement===this;e.innerHTML=t?q:H;let n=t?"Exit full screen":"Full screen";e.setAttribute("aria-label",n),e.setAttribute("title",n),e.setAttribute("data-hf-tooltip",n),e.setAttribute("aria-pressed",t?"true":"false")};toggleFullscreen(){document.fullscreenElement===this?document.exitFullscreen().catch(()=>{}):this.requestFullscreen().catch(()=>{})}shouldShowPresentControl(){return this.resolveMode()!=="audience"&&this.getAttribute("data-hf-presenting")!=="true"}toggleMute(){this._muted=!this._muted,this._muted?this.setAttribute("data-hf-muted",""):this.removeAttribute("data-hf-muted"),this.applyGlobalMute(this._muted),this.dispatchEvent(new CustomEvent("hf-sound",{detail:{muted:this._muted},bubbles:!0,composed:!0})),this.render()}applyGlobalMute(e){for(let t of this.querySelectorAll("hyperframes-player")){if(!(t instanceof HTMLElement))continue;let n=t;"muted"in n?n.muted=e:e?n.setAttribute("muted",""):n.removeAttribute("muted")}this.ownedMedia.sync(this.mediaEntries()),this.ownedMedia.setMuted(e)}stopDocumentMedia(){this.autoplayToken++,this.ownedMedia.sync(this.mediaEntries()),this.ownedMedia.pauseAll()}playSceneDocumentMedia(e){if(this.resolveMode()==="audience")return;let t=e.replace(/["\\]/g,"\\$&"),n=++this.autoplayToken,r={started:!1,lastTime:-1,advancingTicks:0,waited:0,warned:!1},s=()=>{if(n!==this.autoplayToken)return;let a=this.stepAutoplay(t,r);r.waited+=R,!a&&r.waited<=ve&&window.setTimeout(s,R)};s()}findSceneVideo(e){for(let t of this.mediaPlayerElements()){let r=this.playerFrameDocument(t)?.querySelector(`[data-composition-id="${e}"] video`)??null;if(r instanceof HTMLVideoElement)return r}return null}stepAutoplay(e,t){let n=this.findSceneVideo(e);if(!n)return!1;if(!t.started){t.started=!0,n.muted=this._muted||n.defaultMuted;try{n.currentTime=0}catch{}}let r=!n.paused&&n.currentTime>t.lastTime;return t.lastTime=n.currentTime,r?++t.advancingTicks>=2:(t.advancingTicks=0,n.play().catch(s=>{let a=s instanceof DOMException?s.name:"";a!=="AbortError"&&a!=="NotAllowedError"&&!t.warned&&(t.warned=!0,console.warn("[hyperframes-slideshow] autoplay play() failed:",s))}),!1)}presenterNotesDeckKey(){let e=this.getAttribute("notes-storage-key")?.trim();if(e)return e;let t=this.querySelector("hyperframes-player")?.getAttribute("src")??"",n=t;try{let a=typeof location<"u"?location.href:"http://localhost/";n=new URL(t,a).href}catch{}let r=typeof location<"u"?`${location.origin}${location.pathname}`:"",s=this.ownerDocument.title;return`${r}|${s}|${n}`}presenterNotesStorageKey(e){let t=this.controller?.position;return t?`${Me}${JSON.stringify([this.presenterNotesDeckKey(),t.sequenceId,t.slideIndex,e.sceneId??""])}`:null}readPresenterNotes(e){if(!e||typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}writePresenterNotes(e,t){if(e&&!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}renderPresenter(){if(!this.controller)return;let{counter:e,currentSlide:t,nextSlide:n}=this.controller;if(!t)return;let r=this.presenterStartMs!==null?Math.floor((Date.now()-this.presenterStartMs)/1e3):0,s=this.querySelector("hyperframes-player");s instanceof HTMLElement&&(s.style.top="0",s.style.bottom="32%",s.style.height="auto");let a=this.presenterNotesStorageKey(t),d=this.readPresenterNotes(a)??t.notes??"";this.paintChrome(F({notes:d,notesStorageKey:a,nextText:Se(n),counterText:`${e.index} / ${e.total}`,elapsedText:S(r),hotspots:t.hotspots})+this.buildNavCluster(e,"calc(32% + 18px)"))}};function Se(i){if(i===null)return"End of sequence";let e=i.notes!=null?i.notes.split(`
148
+ `)[0]??"":"";return e.length>0?`${h(i.sceneId)}: ${h(e)}`:h(i.sceneId)}function Te(i){let e=i.ownerDocument.defaultView;return!e||typeof e.HTMLMediaElement!="function"?!1:i instanceof e.HTMLMediaElement}function v(i,e){return Number.isFinite(i)?i:e}function T(i){return"scenes"in i&&Array.isArray(i.scenes)?i.scenes:[]}var Ee=5e3;function Ie(i){return i.ready===!0?Promise.resolve():new Promise(e=>{let t=null,n=()=>{t!==null&&(clearTimeout(t),t=null),e()};i.addEventListener("ready",n,{once:!0}),t=setTimeout(()=>{i.removeEventListener("ready",n),e()},Ee)})}function Pe(i,e,t=()=>!1){let n=T(i);if(n.length>0)return Promise.resolve(n);let r=Math.ceil(e/100);return new Promise(s=>{let a=!1,d=null,o=0,l=c=>{a||(a=!0,d!==null&&clearTimeout(d),i.removeEventListener("scenes",u),s(c))},u=()=>{if(t())return l([]);let c=T(i);c.length>0&&l(c)},p=()=>{if(a)return;if(t())return l([]);let c=T(i);if(c.length>0)return l(c);if(o+=1,o>=r)return l([]);d=setTimeout(p,100)};i.addEventListener("scenes",u),d=setTimeout(p,100)})}function _(i){let e=r=>r.end>r.start,t=i.slides.filter(e),n={};for(let[r,s]of Object.entries(i.sequences))n[r]={...s,slides:s.slides.filter(e)};return{slides:t,sequences:n}}function h(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}customElements.get("hyperframes-slideshow")||customElements.define("hyperframes-slideshow",b);return X(Ae);})();
149
149
  //# sourceMappingURL=hyperframes-slideshow.global.js.map