@jokerized/decksmith 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -14
- package/dist/cli.js +450 -151
- package/dist/deck-runtime.js +2 -2
- package/dist/index.js +359 -68
- package/dist/mcp.js +477 -179
- package/dist/types/deck/runtime.d.ts +127 -0
- package/dist/types/emit/camera.d.ts +14 -6
- package/dist/types/emit/composition.d.ts +13 -0
- package/dist/types/emit/kit.d.ts +33 -8
- package/dist/types/emit/svg.d.ts +27 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/tmpdir.d.ts +33 -0
- package/dist/types/types.d.ts +28 -0
- package/package.json +2 -2
package/dist/deck-runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var H="decksmith-deck";function
|
|
1
|
+
"use strict";(()=>{var H="decksmith-deck";function q(e){return typeof e=="object"&&e!==null&&e.channel===H&&typeof e.type=="string"}var $='script[type="application/decksmith-narration+json"]';function R(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function J(e){let r=e,n=R(r?.start),t=R(r?.end);return n===void 0||t===void 0||t<n?null:{start:n,end:t,text:typeof r?.text=="string"?r.text:""}}var U=84;function P(e,r){let n=[],t="";for(let o of e)t===""?t=o:t.length+1+o.length<=r?t+=` ${o}`:(n.push(t),t=o);return t!==""&&n.push(t),n}function K(e,r=U){if(e.text.length<=r)return[e];let n=e.text.split(/\s+/).filter(Boolean),t=P(n,r).length,o=r;for(let s=Math.ceil(e.text.length/t);s<r;s++)if(P(n,s).length<=t){o=s;break}let a=P(n,o);if(a.length<2)return[e];let d=a.reduce((s,c)=>s+c.length,0),p=e.end-e.start,h=e.start;return a.map((s,c)=>{let l=c===a.length-1?e.end:h+p*s.length/d,b={start:h,end:l,text:s};return h=l,b})}function Q(e){let r=e,n=R(r?.stop);if(n===void 0||n<0||!r?.audio||typeof r.audio!="string")return null;let t=Array.isArray(r.cues)?r.cues.map(J).filter(o=>o!==null):[];return t.sort((o,a)=>o.start-a.start),{stop:n,audio:r.audio,cues:t.flatMap(o=>K(o))}}function _(e){if(!e)return null;let r;try{r=JSON.parse(e)}catch{return null}let n=r,t=n?.scenes;if(!t||typeof t!="object"||Array.isArray(t))return null;let o={};for(let[a,d]of Object.entries(t)){if(!Array.isArray(d))continue;let p=d.map(Q).filter(h=>h!==null);p.length>0&&(o[a]=p)}return Object.keys(o).length===0?null:{voice:typeof n?.voice=="string"?n.voice:"",dir:typeof n?.dir=="string"?n.dir:"",scenes:o}}function V(e,r){for(let n of e){if(r<n.start)return null;if(r<n.end)return n}return null}function j(e,r,n){return e?.scenes[r]?.find(t=>t.stop===n)??null}function z(e,r){let n=e.dir.replace(/\/+$/,"");return n===""||/^[a-z][a-z0-9+.-]*:|^\.{0,2}\//i.test(r.audio)?r.audio:`${n}/${r.audio}`}function B(...e){for(let r of e)if(typeof r=="number"&&Number.isFinite(r))return r}function Z(e){let r=[];for(let n of e){let t=B(n.startTime);if(t===void 0)continue;let o=B(n.endTime)??Number.POSITIVE_INFINITY,a=r.length===0?0:r[r.length-1].slide+1,d=n.notes??"",p=[...new Set(n.fragments??[])].filter(l=>Number.isFinite(l)&&l>t&&l<=o).sort((l,b)=>l-b),[h,...s]=p,c=n.sceneId;r.push({t:h??t,slide:a,fragment:0,notes:d,sceneId:c});for(let[l,b]of s.entries())r.push({t:b,slide:a,fragment:l+1,notes:d,sceneId:c})}return r}var ee=2.5;function te(e,r,n={}){let t=r-e;return n.reducedMotion===!0||t<=0||t>ee?{animate:!1,durationMs:0}:{animate:!0,durationMs:t*1e3}}var ne=1500,re=8e3;function oe(e){return!e.playing||e.heard?null:Math.min(re,Math.max(ne,e.gapMs))}function se(e){return e.fragment>0?`#${e.slide+1}.${e.fragment}`:`#${e.slide+1}`}function X(e){let r=/^#?(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!r)return null;let n=Number(r[1]);return n<1?null:{slide:n-1,fragment:r[2]===void 0?0:Number(r[2])}}function W(e,r){let n=e.findIndex(t=>t.slide===r.slide&&t.fragment===r.fragment);return n>=0?n:e.findIndex(t=>t.slide===r.slide)}var ie='script[type="application/hyperframes-slideshow+json"]';function ae(e){let r=e.shadowRoot?.querySelector("iframe")??e.querySelector("iframe")??null;try{let n=r?.contentDocument,t=r?.contentWindow;return n&&t?{doc:n,get timelines(){return t.__timelines??{}}}:null}catch{return null}}function G(e,r,n){for(let t of r){let o=t.startTime??0,a=t.endTime??Number.POSITIVE_INFINITY,d=n>=o&&n<a,p=e.doc.getElementById(t.sceneId);p?.style&&(p.style.display=d?"":"none"),d&&e.timelines[t.sceneId]?.seek(Math.max(0,n-o))}}function le(e){let r=e.querySelector(ie);if(!r?.textContent)return[];try{let t=JSON.parse(r.textContent)?.slides;return Array.isArray(t)?t.filter(o=>typeof o?.sceneId=="string"):[]}catch{return[]}}function ce(e){return e.ready===!0?Promise.resolve():new Promise(r=>{let n=()=>{clearTimeout(t),r()},t=setTimeout(()=>{e.removeEventListener("ready",n),r()},5e3);e.addEventListener("ready",n,{once:!0})})}var de=`
|
|
2
2
|
.ds-chrome{position:fixed;inset:auto 0 0 0;z-index:2147483000;pointer-events:none;
|
|
3
3
|
font:500 13px/1.5 ui-sans-serif,system-ui,sans-serif;color:#fff}
|
|
4
4
|
.ds-bar{height:3px;background:rgba(255,255,255,.14)}
|
|
@@ -77,4 +77,4 @@
|
|
|
77
77
|
text-align:center;color:#fff;font-weight:600;font-size:var(--ds-cap-font);
|
|
78
78
|
line-height:1.35;text-wrap:pretty}
|
|
79
79
|
.ds-subs[hidden]{visibility:hidden}
|
|
80
|
-
`;function
|
|
80
|
+
`;function ue(e){let r=e.createElement("style");r.textContent=de,e.head.append(r);let n=e.createElement("div");return n.className="ds-chrome",n.innerHTML='<div class="ds-bar"><i></i></div><button class="ds-play" type="button" aria-label="Play the deck"></button><button class="ds-video" type="button" hidden>Video</button><div class="ds-count"></div><div class="ds-flags"></div><div class="ds-subs" hidden></div><div class="ds-notes" hidden></div>',e.body.append(n),{chrome:n,fill:n.querySelector("i"),play:n.querySelector(".ds-play"),video:n.querySelector(".ds-video"),count:n.querySelector(".ds-count"),notes:n.querySelector(".ds-notes"),flags:n.querySelector(".ds-flags"),subs:n.querySelector(".ds-subs")}}var pe={at:()=>!1,hush:()=>{},toggleMute:()=>{},toggleSubtitles:()=>{},onEnded:()=>{},onSettled:()=>{},unlock:()=>{}};function fe(e){return e?.name!=="NotSupportedError"}function he(e,r,n){let t=e.createElement("audio");t.preload="auto",e.body.append(t);let o=!1,a=!0,d=()=>e.documentElement.classList.toggle("ds-cap",a);d();let p=!1,h=!1,s=!1,c=[],l=0,b=null,w=null,E=0,x=()=>{let u=[];p&&s?u.push("press any key for sound"):h?u.push("narration unavailable"):o&&u.push("muted"),a||u.push("subtitles off"),n.flags.textContent=u.join(" \xB7 ")},y=()=>{let u=a?V(c,t.currentTime):null;u!==b&&(b=u,n.subs.textContent=u?.text??"",n.subs.hidden=u===null)},S=()=>{y(),l=t.ended||t.paused&&t.currentTime>0?0:requestAnimationFrame(S)},C=()=>{l&&cancelAnimationFrame(l),l=0,t.pause(),t.removeAttribute("src"),t.load(),c=[],y()},L=()=>{};t.addEventListener("ended",()=>{p||L()});let N=()=>{},k=u=>{let A=++E;w=u,C(),h=!1,x();let g=j(r,u.sceneId,u.fragment);return g?(c=g.cues,t.muted=o,t.src=z(r,g),Promise.resolve(t.play()).then(()=>{A===E&&(p=!1,h=!1,x(),N(!0))},I=>{A===E&&(p=fe(I),h=!p,p&&(s=!0),l&&cancelAnimationFrame(l),l=0,c=[],y(),x(),N(!1))}),l===0&&(l=requestAnimationFrame(S)),!0):!1};return{at:k,hush:C,onEnded:u=>{L=u},onSettled:u=>{N=u},toggleMute:()=>{o=!o,t.muted=o,x()},toggleSubtitles:()=>{a=!a,d(),y(),x()},unlock:()=>{!w||!(p||h)||(p=!1,x(),k(w))}}}var me='script[type="application/decksmith-video+json"]';function ge(e){if(!e)return{};let r={};try{let n=JSON.parse(e);for(let[t,o]of Object.entries(n?.scenes??{}))typeof o?.url=="string"&&/^https:\/\//i.test(o.url)&&(r[t]={url:o.url,title:typeof o.title=="string"?o.title:"Video"})}catch{return{}}return r}var be={at:()=>{},toggle:()=>{},close:()=>!1};function ye(e,r,n,t){let o=null,a=null,d=()=>o?(o.remove(),o=null,!0):!1,p=()=>{if(!a||o)return;t(),o=e.createElement("div"),o.className="ds-film";let s=e.createElement("iframe");s.src=a.url,s.title=a.title,s.allow="fullscreen",s.setAttribute("referrerpolicy","strict-origin-when-cross-origin");let c=e.createElement("button");c.type="button",c.className="ds-shut",c.textContent="\u2715",c.setAttribute("aria-label","Close the video"),c.addEventListener("click",l=>{l.stopPropagation(),d()}),o.append(s,c),n.chrome.append(o),c.focus()},h=()=>{d()||p()};return n.video.addEventListener("click",s=>{s.stopPropagation(),h()}),{at:s=>{d(),a=r[s.sceneId]??null,n.video.hidden=a===null,a&&n.video.setAttribute("aria-label",`Play the video: ${a.title}`)},toggle:h,close:d}}function ve(e){let r=e;return!!r&&(r.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(r.tagName??""))}async function Y(e){let r=le(e),n=e.querySelector("hyperframes-player");if(r.length===0||!n)return;let t=Z(r);if(t.length===0)return;let o=ue(e),a=_(e.querySelector($)?.textContent),d=a?he(e,a,o):pe,p=ge(e.querySelector(me)?.textContent),h=Object.keys(p).length===0?be:ye(e,p,o,()=>{d.hush(),k(!1)}),s=0,c=null,l=0,b=0,w=-1,E=i=>{n.seek(i),c&&G(c,r,i),l=i},x=(i,f,m)=>{let v=l,T=0,M=O=>{T===0&&(T=O);let F=Math.min(1,(O-T)/m);if(F<1){l=v+(f-v)*F,G(i,r,l),b=requestAnimationFrame(M);return}b=0,E(f)};b=requestAnimationFrame(M)},y=!1,S=0,C=()=>{S&&clearTimeout(S),S=0},L=()=>{y&&(s+1<t.length?g(s+1):k(!1))},N=i=>{C();let f=t[s],m=t[s+1],v=oe({playing:y,heard:i,gapMs:m?(m.t-f.t)*1e3:0});v!==null&&(S=setTimeout(L,v))},k=i=>{y=i,C(),o.play.dataset.on=i?"1":"0",o.play.setAttribute("aria-label",i?"Pause the deck":"Play the deck"),i&&(w=-1,g(s,!0))},u=null,A=i=>{u===null||parent===window||parent.postMessage(i,u)};addEventListener("message",i=>{if(i.source!==parent||parent===window||!q(i.data))return;let f=i.data;if(f.type==="hello"){u=i.origin,A({channel:H,type:"ready",stops:t.map((m,v)=>({i:v,label:`${m.slide+1} / ${t[t.length-1].slide+1}`,notes:m.notes})),at:s});return}u===i.origin&&(f.type==="next"?g(s+1):f.type==="prev"?g(s-1):f.type==="go"?g(f.at,!0):f.type==="play"&&k(f.on))});let g=(i,f=!1)=>{s=Math.max(0,Math.min(t.length-1,i));let m=t[s];b&&cancelAnimationFrame(b),b=0;let v=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,T=te(l,m.t,{reducedMotion:v});T.animate&&!f&&c?x(c,m.t,T.durationMs):E(m.t);let M=!1;s!==w&&(w=s,M=d.at(m)),h.at(m),N(M),history.replaceState(null,"",se(m)),A({channel:H,type:"stop",at:s,total:t.length,label:`${m.slide+1} / ${t[t.length-1].slide+1}`,notes:m.notes,playing:y}),o.fill.style.transform=`scaleX(${(s+1)/t.length})`,o.count.textContent=`${m.slide+1} / ${t[t.length-1].slide+1}`,o.notes.textContent=m.notes};d.onEnded(L),d.onSettled(N),o.play.addEventListener("click",i=>{i.stopPropagation(),k(!y)}),addEventListener("hashchange",()=>{let i=X(location.hash);if(!i)return;let f=W(t,i);f>=0&&f!==s&&g(f,!0)}),e.addEventListener("keydown",i=>{if(!(i.defaultPrevented||ve(i.target))){switch(i.key){case"ArrowRight":case"PageDown":case" ":g(s+1);break;case"ArrowLeft":case"PageUp":g(s-1);break;case"Home":g(0,!0);break;case"End":g(t.length-1,!0);break;case"n":o.notes.hidden=!o.notes.hidden;break;case"m":d.toggleMute();break;case"s":d.toggleSubtitles();break;case"p":k(!y);break;case"v":h.toggle();break;case"Escape":if(!h.close())return;break;case"f":{(e.fullscreenElement?e.exitFullscreen():e.documentElement.requestFullscreen()).catch(()=>{});break}default:return}i.preventDefault()}}),e.addEventListener("click",i=>{if(o.chrome.contains(i.target))return;let f=(e.documentElement.clientWidth||1)/3;i.clientX>f*2?g(s+1):i.clientX<f&&g(s-1)});let I=()=>d.unlock();if(e.addEventListener("keydown",I),e.addEventListener("click",I),await ce(n),typeof n.seek!="function")return;n.pause?.(),c=ae(n),c?.doc.documentElement.classList.add("ds-live"),c||console.warn("[decksmith] composition unreachable; serve the deck over http, not file://");let D=X(location.hash);g(D?Math.max(0,W(t,D)):0,!0)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>void Y(document),{once:!0}):Y(document));})();
|