@getv.design/embed 0.3.1 → 0.3.2
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/LICENSE +2 -2
- package/README.md +3 -3
- package/THIRD_PARTY_NOTICES.txt +1 -1
- package/dist/auto.js +2 -2
- package/dist/chunks/{chunk-JIHH634P.js → chunk-4O7TKIQJ.js} +1 -1
- package/dist/chunks/chunk-LJWWEZ4W.js +2 -0
- package/dist/chunks/{chunk-JWI4TIMM.js → chunk-M76WR2LQ.js} +2 -2
- package/dist/chunks/{chunk-UAVO4POT.js → chunk-QH553HXY.js} +2 -2
- package/dist/chunks/{chunk-H7KHX34X.js → chunk-RMZR36ZE.js} +1 -1
- package/dist/chunks/{chunk-P57LNVS3.js → chunk-YWFEB275.js} +2 -2
- package/dist/chunks/fonts.js +2 -2
- package/dist/cli.js +2 -2
- package/dist/edit.js +2 -2
- package/dist/index.js +2 -2
- package/dist/markdown-it.js +2 -2
- package/dist/markdown.js +2 -2
- package/dist/marked.js +2 -2
- package/dist/rehype.js +2 -2
- package/dist/static.js +2 -2
- package/dist/view.js +2 -2
- package/package.json +2 -2
- package/dist/chunks/chunk-ACHGJ7UR.js +0 -2
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The vDesign Embed Licence, version 1.0
|
|
2
2
|
|
|
3
|
-
Copyright © 2026
|
|
3
|
+
Copyright © 2026 vDesign. All rights not granted below are reserved.
|
|
4
4
|
|
|
5
5
|
This licence lets you use the vDesign Embed free of charge, including in
|
|
6
6
|
commercial products, and pass on copies of it as long as they are unchanged.
|
|
@@ -14,7 +14,7 @@ declaration files and stylesheets in this package, in the form the Licensor
|
|
|
14
14
|
publishes them, and any copy of them. It does not include the third-party
|
|
15
15
|
components described in clause 6.
|
|
16
16
|
|
|
17
|
-
"Licensor" means
|
|
17
|
+
"Licensor" means vDesign, an individual. You can contact the Licensor at
|
|
18
18
|
sagar@getv.design.
|
|
19
19
|
|
|
20
20
|
"You" means the person or organisation that uses, copies or redistributes the
|
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ rebundling), so the editor and the font code still load only when needed:
|
|
|
36
36
|
```html
|
|
37
37
|
<div id="design"></div>
|
|
38
38
|
<script type="module">
|
|
39
|
-
import { view } from 'https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.
|
|
39
|
+
import { view } from 'https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.2/dist/view.js';
|
|
40
40
|
|
|
41
41
|
const text = await (await fetch('/designs/home.vd')).text();
|
|
42
42
|
await view(document.querySelector('#design'), text);
|
|
@@ -230,7 +230,7 @@ has no `problems` or `fonts` event yet to say so.
|
|
|
230
230
|
### Where the faces come from
|
|
231
231
|
|
|
232
232
|
The faces come from `fontBase`, by default this package's `fonts/` folder on
|
|
233
|
-
jsDelivr (`https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.
|
|
233
|
+
jsDelivr (`https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.2/fonts/`). That means
|
|
234
234
|
your readers' browsers request the faces from jsDelivr, and a content security
|
|
235
235
|
policy needs it in `connect-src`. To keep those requests on your own origin,
|
|
236
236
|
copy `node_modules/@getv.design/embed/fonts/` to your site and point `fontBase` at it:
|
|
@@ -259,7 +259,7 @@ The embed's styles reach the page by one of two routes.
|
|
|
259
259
|
```
|
|
260
260
|
|
|
261
261
|
Link them before the embed runs, from your own origin or from the CDN
|
|
262
|
-
(`https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.
|
|
262
|
+
(`https://cdn.jsdelivr.net/npm/@getv.design/embed@0.3.2/view.css`). The id is what
|
|
263
263
|
the embed looks for: linked without it, the stylesheet still works, but
|
|
264
264
|
the embed inserts its `<style>` as well.
|
|
265
265
|
|
package/THIRD_PARTY_NOTICES.txt
CHANGED
package/dist/auto.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
2
|
-
import"./chunks/chunk-
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
|
+
import"./chunks/chunk-RMZR36ZE.js";var f="data-vd-live";async function L(n=document,s={}){let e=[...n.querySelectorAll('figure.vd-figure[data-vd-mode="view"]')].filter(t=>!t.hasAttribute(f)&&t.dataset.vdSource);if(e.length===0)return[];for(let t of e)t.setAttribute(f,"opening");let{view:r}=await import("./view.js");return(await Promise.all(e.map(t=>w(t,r,s)))).filter(t=>t!==void 0)}async function w(n,s,e){let r;try{let d=atob(n.dataset.vdSource??"");r=new TextDecoder().decode(Uint8Array.from(d,u=>u.charCodeAt(0)))}catch{n.removeAttribute(f);return}let i=n.querySelector(".vd-figure-art"),t=n.ownerDocument.createElement("div");t.className="vd-figure-live",t.style.height=`${x(n,i)}px`,i?.after(t);let o=n.dataset.vdPage;try{let d=await s(t,r,{fit:"page",...o===void 0?{}:{page:/^\d+$/.test(o)?Number(o):o},...e.fonts?{fonts:e.fonts}:{},...e.fontBase?{fontBase:e.fontBase}:{},...e.surface?{surface:e.surface}:{},...e.onLink?{onLink:e.onLink}:{}});return i?.setAttribute("hidden",""),n.setAttribute(f,"true"),d.pages().length>1&&H(n,t,d,o),d}catch{t.remove(),n.removeAttribute(f);return}}function H(n,s,e,r){let i=(a,v,y)=>{let b=n.ownerDocument.createElement(a);return b.className=v,b.textContent=y,b},t=i("div","vd-figure-pager",""),o=i("button","vd-figure-pager__button","\u2039"),d=i("span","vd-figure-pager__label",""),u=i("button","vd-figure-pager__button","\u203A"),m=i("button","vd-figure-pager__button","Present");o.setAttribute("aria-label","Previous page"),u.setAttribute("aria-label","Next page"),d.setAttribute("aria-live","polite");for(let a of[o,u,m])a.setAttribute("type","button");t.append(o,d,u,m),s.after(t);let c=e.pages(),g=r===void 0?-1:/^\d+$/.test(r)?Number(r):c.findIndex(a=>a.id===r),l=g>=0&&g<c.length?g:0,p=()=>{let a=c[l];d.textContent=`${a?.name??a?.id??""} \xB7 ${l+1} of ${c.length}`},h=a=>{l=Math.min(c.length-1,Math.max(0,l+a)),e.goTo(l),p()};e.on("page",a=>{l=Math.max(0,c.findIndex(v=>v.id===a.id)),p()}),o.addEventListener("click",()=>h(-1)),u.addEventListener("click",()=>h(1)),m.addEventListener("click",()=>{e.play()}),p()}function x(n,s){let e=Number(n.dataset.vdHeight);if(Number.isFinite(e)&&e>0)return e;let r=s?.getBoundingClientRect().height??0;return r>0?Math.max(240,Math.round(r)):420}export{L as hydrate};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
2
|
var Ie=["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],ce=["left","center","right","justify"],fe=["top","middle","bottom"],de=["cover","contain","fill"],Ae=["nonzero","evenodd"],Ne=["butt","round","square"],Pe=["miter","round","bevel"],mn=["canvas","frame","group"];function De(e){return mn.includes(e)}function N(e){return De(e.type)}function le(e){return e.type==="group"}function q(e){return N(e)?e.children:[]}var gn={canvas:["w","h"],ellipse:["x","y","w","h","rotation","strokeWidth","opacity"],frame:["x","y","w","h"],group:[],image:["x","y","w","h","rotation","radius","opacity"],rect:["x","y","w","h","rotation","strokeWidth","radius","opacity"],text:["x","y","w","h","rotation","size","weight","lineHeight","letterSpacing","opacity"],vector:["x","y","w","h","rotation","strokeWidth","opacity"]};function Re(e){return gn[e.type]}function O(e,t,n){if(t(e,n)!==!1&&N(e))for(let r of e.children)O(r,t,e)}function L(e,t){let n;return O(e,r=>{if(n)return!1;r.id===t&&(n=r)}),n}function V(e){let t=e.trim();if(t.startsWith("#")){let r=t.slice(1);return r===""?void 0:{kind:"frame",id:r}}let n;try{n=new URL(t)}catch{return}if(!(n.protocol!=="https:"&&n.protocol!=="mailto:"))return{kind:"url",url:t}}var Z="--- payload base64 ---",lr="sha256-";function yn(e){let t=yr(e);return t===-1?{head:e,payload:""}:{head:e.slice(0,t),payload:e.slice(t+Z.length)}}function pr(e){let{head:t,payload:n}=yn(e);return{head:t,blocks:xn(n)}}function xn(e){let t=new Map;for(let n of e.split(`
|
|
3
3
|
`)){let r=n.indexOf(" ");if(r===-1)continue;let o=n.slice(0,r);o.startsWith(lr)&&t.set(o,n.slice(r+1).trim())}return t}function hr(e,t){return`data:${e};base64,${t}`}function mr(e){let t=e.toBase64;if(typeof t=="function")return t.call(e);let n="";for(let r=0;r<e.length;r+=32768)n+=String.fromCharCode(...e.subarray(r,r+32768));return btoa(n)}function gr(e){let t=Uint8Array.fromBase64;if(typeof t=="function")return t(e);let n=atob(e),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function yr(e){if(e.startsWith(Z))return 0;let t=e.indexOf(`
|
|
4
4
|
${Z}`);return t===-1?-1:t+1}function pe(e){return{expr:e}}function P(e){return typeof e=="object"&&e!==null&&typeof e.expr=="string"}var he=["design"],Q="design";var Le=[1,2,3,4],j="doc";function me(e){return{type:"canvas",...e}}function Ce(e={}){return{version:4,kind:e.kind??Q,...e.title===void 0?{}:{title:e.title},tokens:e.tokens??{},fonts:e.fonts??{},assets:e.assets??{},...e.motion===void 0||Object.keys(e.motion).length===0?{}:{motion:e.motion},root:e.root??me({id:j,children:[]})}}var Fe=["beat","bar"];var xr=/^(\d+(?:\.\d+)?)(beats?|bars?)$/;function ee(e){let t=xr.exec(e);if(!t)return;let n=Number(t[1]);if(Number.isFinite(n))return{count:n,unit:t[2].startsWith("bar")?"bar":"beat"}}function te(e,t){return`${String(Math.round(e*1e6)/1e6)}${t}${e===1?"":"s"}`}function ne(e){return typeof e=="string"&&ee(e)!==void 0}function U(e){let t=e?.bpm;if(t===void 0)return;let n=e?.meter??4,r=6e4/t;return{bpm:t,meter:n,beat:r,bar:r*n}}function ge(e,t,n){if(e===void 0)return n;if(typeof e=="number")return e;let r=ee(e);return!r||!t?n:r.count*(r.unit==="bar"?t.bar:t.beat)}var ye=36e5;var Ve=["cut","fade","push","slide"],je=["cut","fade","rise","drop","pop","wipe","grow","count","draw"],re=["cut","fade","rise","drop","pop"],Ue=["pulse"],Be=["out","in","inout","linear","spring"],We=["word","letter"],B=["left","right","top","bottom"],$n=400,xe=1e4,ze=18e4,W=7680;function oe(e){let t=e.trim();return t==="back"?{kind:"back"}:t==="next"?{kind:"next"}:V(t)}function $e(e){return e===void 0||e.enter===void 0&&e.duration===void 0&&e.scroll!==!0&&e.length===void 0&&e.w===void 0&&e.h===void 0&&e.bpm===void 0&&e.meter===void 0&&e.music===void 0&&e.lines.length===0}function Xe(e){return e.camera===!0||e.enter!==void 0||e.exit!==void 0||e.emphasis!==void 0||e.go!==void 0}var wr=["camera","emphasis","from","by","stagger","hold","at","after","with","on","ease","pad"];function wn(e){return e===void 0?!1:e.length!==void 0||e.w!==void 0||e.h!==void 0||e.bpm!==void 0||e.meter!==void 0||e.music!==void 0?!0:e.lines.some(t=>wr.some(n=>t[n]!==void 0)||t.enter!==void 0&&!re.includes(t.enter)||t.exit!==void 0&&!re.includes(t.exit))}function Ge(e){let t=e.motion;if(!t)return[];let n=e.root.children.map(o=>o.id).filter(o=>o in t),r=Object.keys(t).filter(o=>!n.includes(o)).sort();return[...n,...r]}function He(e){return new Set(e.root.children.filter(t=>t.type==="frame").map(t=>t.id))}function Ye(e){let t=new Map;for(let n of e.root.children)n.type==="frame"&&O(n,r=>{t.set(r.id,n.id)});return t}function br(e){let t=new Set;return O(e,n=>{t.add(n.id)}),t}function we(e,t){let n=e.motion;if(!n)return[];let r=[],o=He(e),i=Ye(e),s=br(e.root),u=(a,c)=>{let f=t?.(a,c);return f===void 0?"":`Line ${f}: `};for(let a of Ge(e)){let c=n[a];if(!c)continue;if(!o.has(a)){r.push({severity:"warning",code:"motion-not-a-page",message:`${u(a)}motion ${a}: ${a} is not a page (a top-level frame), so none of it plays`,nodeId:a});continue}let f=new Set;for(let d of c.lines){let l=u(a,d.id);for(let h of["after","with"]){let x=d[h];x!==void 0&&!f.has(x)&&r.push({severity:"warning",code:"motion-anchor-missing",message:`${l}motion ${a}: ${h}=${x} names no line above, so it starts after the line above instead`,nodeId:d.id})}d.camera!==!0&&f.add(d.id);let p=s.has(d.id)?L(e.root,d.id):void 0;p&&r.push(...kr(d,p,l,a)),s.has(d.id)?i.get(d.id)!==a&&r.push({severity:"warning",code:"motion-wrong-page",message:`${l}motion ${a}: ${d.id} is not on ${a}, so Play skips it`,nodeId:d.id}):r.push({severity:"warning",code:"unknown-reference",message:`${l}motion ${a}: no node ${d.id}`,nodeId:d.id});let g=d.go===void 0?void 0:oe(d.go);g?.kind==="frame"&&!Sr(e,g.id)&&r.push({severity:"warning",code:"unknown-reference",message:`${l}motion ${a}: go=#${g.id} names no frame`,nodeId:d.id})}}return r}function kr(e,t,n,r){let o=[],i=(u,a)=>{o.push({severity:"warning",code:u,message:`${n}motion ${r}: ${a}`,nodeId:t.id})};if(e.camera===!0)return o;let s=e.enter??e.exit;return s==="count"&&(t.type!=="text"||!/\d/.test(Je(t.content)))&&i("count-no-number",`${t.id} has no number to count, so it fades in instead`),s==="draw"&&!Er(t)&&i("draw-no-stroke",`${t.id} has no stroked vector to draw, so it fades in instead`),e.by!==void 0&&t.type!=="text"?i("by-not-text",`by=${e.by} splits text, and ${t.id} is a ${t.type}`):e.by!==void 0&&t.type==="text"&&vr(t)&&i("by-rotated",`${t.id} is rotated, so by=${e.by} enters it whole`),e.stagger!==void 0&&e.by===void 0&&q(t).length===0&&i("stagger-no-children",`${t.id} has no children to stagger: split a text with by=word`),o}function vr(e){let t=e.rotation;return t!==void 0&&t!==0}function Er(e){let t=!1;return O(e,n=>(n.type==="vector"&&n.stroke!==void 0&&(t=!0),t?!1:void 0)),t}function Je(e){return typeof e=="string"?e:e.map(t=>typeof t=="string"?t:t.text).join("")}function Sr(e,t){let n=!1;return O(e.root,r=>{if(n)return!1;r.id===t&&(n=r.type==="frame")}),n}function m(e){if(!Number.isFinite(e))return"0";let t=Math.round(e*1e4)/1e4,n=Object.is(t,-0)?0:t;return Math.abs(n)>=1e21?n.toFixed(0):String(n)}var Mr={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};function kt(e){let t=[],n,r=0,o=0,i=0,s=0,u,a,c=Tr(e),f=()=>(n||(n={anchors:[{x:r,y:o}],closed:!1},t.push(n)),n.anchors[n.anchors.length-1]),d=(h,x)=>{f(),n?.anchors.push({x:h,y:x}),r=h,o=x},l=(h,x,k,$)=>{f().out=h,n?.anchors.push({x:k,y:$,in:x}),r=k,o=$},p="",g=!0;for(;c.more();){let h=c.command();if(h!==void 0)p=h,g=!0;else if(p===""||p.toUpperCase()==="Z")return{contours:Ke(t),error:`Expected a command at ${c.at()}`};let x=p.toUpperCase(),k=p!==x,$=Mr[x];if($===void 0)return{contours:Ke(t),error:`Unknown command ${p}`};if(x==="Z"){n&&(n.closed=!0),n=void 0,r=i,o=s,u=void 0,a=void 0,p="";continue}let A=x==="A"?c.arc():c.numbers($);if(A===void 0)return{contours:Ke(t),error:`${p} expects ${$} numbers at ${c.at()}`};let y=k?r:0,b=k?o:0,w=v=>A[v];switch(x){case"M":g&&(n={anchors:[{x:y+w(0),y:b+w(1)}],closed:!1},t.push(n),r=i=y+w(0),o=s=b+w(1),p=k?"l":"L"),u=a=void 0;break;case"L":d(y+w(0),b+w(1)),u=a=void 0;break;case"H":d(y+w(0),o),u=a=void 0;break;case"V":d(r,b+w(0)),u=a=void 0;break;case"C":{let v={x:y+w(2),y:b+w(3)};l({x:y+w(0),y:b+w(1)},v,y+w(4),b+w(5)),u=v,a=void 0;break}case"S":{let v=u?{x:2*r-u.x,y:2*o-u.y}:{x:r,y:o},S={x:y+w(0),y:b+w(1)};l(v,S,y+w(2),b+w(3)),u=S,a=void 0;break}case"Q":case"T":{let v=x==="Q"?{x:y+w(0),y:b+w(1)}:a?{x:2*r-a.x,y:2*o-a.y}:{x:r,y:o},S=x==="Q"?y+w(2):y+w(0),C=x==="Q"?b+w(3):b+w(1),G={x:r+2/3*(v.x-r),y:o+2/3*(v.y-o)},H={x:S+2/3*(v.x-S),y:C+2/3*(v.y-C)};l(G,H,S,C),a=v,u=void 0;break}case"A":{let v=y+w(5),S=b+w(6);for(let[C,G,H]of _r(r,o,w(0),w(1),w(2),w(3)!==0,w(4)!==0,v,S))l(C,G,H.x,H.y);(r!==v||o!==S)&&d(v,S),u=a=void 0;break}}g=!1}return{contours:Ke(t)}}function Ke(e){return e.map(t=>{let n=[...t.anchors];if(t.closed&&n.length>1){let r=n[0],o=n[n.length-1];be(r,o)&&(n.pop(),n[0]={...r,...o.in?{in:o.in}:{}})}return{anchors:n.map(Or),closed:t.closed}})}function Or(e){let t={x:e.x,y:e.y};return e.in&&!be(e.in,e)&&(t.in=e.in),e.out&&!be(e.out,e)&&(t.out=e.out),t}function be(e,t,n=1e-6){return Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n}function Tr(e){let t=0,n=()=>{for(;t<e.length&&/[\s,]/.test(e[t]);)t+=1},r=()=>{n();let i=/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(e.slice(t));if(i)return t+=i[0].length,Number(i[0])},o=()=>{n();let i=e[t];if(!(i!=="0"&&i!=="1"))return t+=1,Number(i)};return{more(){return n(),t<e.length},command(){n();let i=e[t];if(/[a-zA-Z]/.test(i))return t+=1,i},numbers(i){let s=[];for(let u=0;u<i;u+=1){let a=r();if(a===void 0)return;s.push(a)}return s},arc(){let i=this.numbers(3),s=o(),u=o(),a=this.numbers(2);if(!(!i||s===void 0||u===void 0||!a))return[...i,s,u,...a]},at(){return t}}}function _r(e,t,n,r,o,i,s,u,a){let c=Math.abs(n),f=Math.abs(r);if(c===0||f===0||e===u&&t===a)return[];let d=o*Math.PI/180,l=Math.cos(d),p=Math.sin(d),g=(e-u)/2,h=(t-a)/2,x=l*g+p*h,k=-p*g+l*h,$=x*x/(c*c)+k*k/(f*f);$>1&&(c*=Math.sqrt($),f*=Math.sqrt($));let A=c*c*f*f-c*c*k*k-f*f*x*x,y=c*c*k*k+f*f*x*x,b=(i===s?-1:1)*Math.sqrt(Math.max(0,A/y)),w=b*c*k/f,v=-b*f*x/c,S=l*w-p*v+(e+u)/2,C=p*w+l*v+(t+a)/2,G=(M,F,J,K)=>{let ue=M*J+F*K,_e=Math.hypot(M,F)*Math.hypot(J,K),ae=Math.acos(Math.min(1,Math.max(-1,ue/_e)));return M*K-F*J<0?-ae:ae},H=G(1,0,(x-w)/c,(k-v)/f),Y=G((x-w)/c,(k-v)/f,(-x-w)/c,(-k-v)/f);!s&&Y>0&&(Y-=2*Math.PI),s&&Y<0&&(Y+=2*Math.PI);let wt=Math.max(1,Math.ceil(Math.abs(Y)/(Math.PI/2)-1e-9)),bt=Y/wt,Te=4/3*Math.tan(bt/4),ln=M=>({x:S+c*Math.cos(M)*l-f*Math.sin(M)*p,y:C+c*Math.cos(M)*p+f*Math.sin(M)*l}),pn=M=>({x:-c*Math.sin(M)*l-f*Math.cos(M)*p,y:-c*Math.sin(M)*p+f*Math.cos(M)*l}),hn=[];for(let M=0;M<wt;M+=1){let F=H+M*bt,J=F+bt,K=ln(F),ue=M===wt-1?{x:u,y:a}:ln(J),_e=pn(F),ae=pn(J);hn.push([{x:K.x+Te*_e.x,y:K.y+Te*_e.y},{x:ue.x-Te*ae.x,y:ue.y-Te*ae.y},ue])}return hn}function vt(e){let t=[],n=r=>`${m(r.x)} ${m(r.y)}`;for(let r of e){let{anchors:o}=r,i=o[0];if(!i)continue;t.push(`M${n(i)}`);let s=ke(r);for(let u=0;u<s;u+=1){let a=o[u],c=o[(u+1)%o.length],f=r.closed&&u===o.length-1;!a.out&&!c.in?f||t.push(`L${n(c)}`):t.push(`C${n(a.out??a)} ${n(c.in??c)} ${n(c)}`)}r.closed&&t.push("Z")}return t.join(" ")}function ke(e){let t=e.anchors.length;return t<2?0:e.closed?t:t-1}function qe(e,t){let n=e.anchors[t],r=e.anchors[(t+1)%e.anchors.length];return[{x:n.x,y:n.y},n.out??{x:n.x,y:n.y},r.in??{x:r.x,y:r.y},{x:r.x,y:r.y}]}function Et(e,t){let[n,r,o,i]=e,s=1-t,u=s*s*s,a=3*s*s*t,c=3*s*t*t,f=t*t*t;return{x:u*n.x+a*r.x+c*o.x+f*i.x,y:u*n.y+a*r.y+c*o.y+f*i.y}}function St(e,t){return e.map(n=>({closed:n.closed,anchors:n.anchors.map(r=>{let o=t(r);return{x:o.x,y:o.y,...r.in?{in:t(r.in)}:{},...r.out?{out:t(r.out)}:{}}})}))}function Mt(e){let t=1/0,n=1/0,r=-1/0,o=-1/0,i=s=>{t=Math.min(t,s.x),n=Math.min(n,s.y),r=Math.max(r,s.x),o=Math.max(o,s.y)};for(let s of e){for(let a of s.anchors)i(a);let u=ke(s);for(let a=0;a<u;a+=1){let c=qe(s,a);for(let f of Ir(c))i(Et(c,f))}}if(t!==1/0)return{x:t,y:n,w:r-t,h:o-n}}function Ir(e){let[t,n,r,o]=e,i=[];for(let s of["x","y"]){let u=-t[s]+3*n[s]-3*r[s]+o[s],a=2*(t[s]-2*n[s]+r[s]),c=n[s]-t[s];if(Math.abs(u)<1e-12){Math.abs(a)>1e-12&&i.push(-c/a);continue}let f=a*a-4*u*c;if(f<0)continue;let d=Math.sqrt(f);i.push((-a+d)/(2*u),(-a-d)/(2*u))}return i.filter(s=>s>0&&s<1)}function Ze(e){if(e===void 0)return;let t=e.trim().split(/[\s,]+/).map(Number);if(t.length!==4||t.some(s=>!Number.isFinite(s)))return;let[n,r,o,i]=t;return{x:n,y:r,w:o,h:i}}function Ot(e,t,n){return Ze(e)??{x:0,y:0,w:t,h:n}}function Tt(e,t){let n=e.w===0?1:t.w/e.w,r=e.h===0?1:t.h/e.h;return o=>({x:t.x+(o.x-e.x)*n,y:t.y+(o.y-e.y)*r})}function _t(e,t=.5){let[n,r,o,i]=e;if(be(n,r)&&be(o,i))return[n,i];let u=Math.hypot(r.x-n.x,r.y-n.y)+Math.hypot(o.x-r.x,o.y-r.y)+Math.hypot(i.x-o.x,i.y-o.y),a=Math.min(256,Math.max(4,Math.ceil(Math.sqrt(u/t)))),c=[];for(let f=0;f<=a;f+=1)c.push(Et(e,f/a));return c}function Qe(e){let t=0;for(let n of e)for(let r=0;r<ke(n);r+=1){let o=_t(qe(n,r),.25);for(let i=1;i<o.length;i+=1){let s=o[i-1],u=o[i];t+=Math.hypot(u.x-s.x,u.y-s.y)}}return t}function Ar(e,t,n){let r=0,o=0;for(let i of e){let s=Nr(i);if(s.length!==0){if(n.reach>0){let u=i.closed?s.length:s.length-1;for(let a=0;a<u;a+=1){let c=s[a],f=s[(a+1)%s.length];if(Pr(t,c,f)<=n.reach)return!0}if(s.length===1&&Math.hypot(t.x-s[0].x,t.y-s[0].y)<=n.reach)return!0}if(n.fill)for(let u=0;u<s.length;u+=1){let a=s[u],c=s[(u+1)%s.length];a.y<=t.y!=c.y<=t.y&&a.x+(t.y-a.y)/(c.y-a.y)*(c.x-a.x)>t.x&&(o+=1,r+=c.y>a.y?1:-1)}}}return n.fill?n.rule==="evenodd"?o%2===1:r!==0:!1}function Nr(e){let t=e.anchors[0];if(!t)return[];let n=[{x:t.x,y:t.y}],r=ke(e);for(let o=0;o<r;o+=1)n.push(..._t(qe(e,o)).slice(1));return e.closed&&n.length>1&&n.pop(),n}function Pr(e,t,n){let r=n.x-t.x,o=n.y-t.y,i=r*r+o*o,s=i===0?0:Math.max(0,Math.min(1,((e.x-t.x)*r+(e.y-t.y)*o)/i));return Math.hypot(e.x-(t.x+s*r),e.y-(t.y+s*o))}var et={canvas:[["name","string"],["w","numberValue"],["h","numberValue"],["background","stringValue"]],frame:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["background","stringValue"],["clip","boolean"],["skip","boolean"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]],group:[["name","string"],["hidden","boolean"],["locked","boolean"]],ellipse:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["rotation","numberValue"],["fill","stringValue"],["stroke","stringValue"],["strokeWidth","numberValue"],["opacity","numberValue"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]],vector:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["rotation","numberValue"],["view","string"],["d","string"],["fill","stringValue"],["stroke","stringValue"],["strokeWidth","numberValue"],["opacity","numberValue"],["rule","fillRule"],["cap","lineCap"],["join","lineJoin"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]],rect:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["rotation","numberValue"],["fill","stringValue"],["stroke","stringValue"],["strokeWidth","numberValue"],["radius","numberValue"],["opacity","numberValue"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]],image:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["rotation","numberValue"],["src","stringValue"],["fit","imageFit"],["radius","numberValue"],["opacity","numberValue"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]],text:[["name","string"],["x","numberValue"],["y","numberValue"],["w","numberValue"],["h","numberValue"],["rotation","numberValue"],["font","stringValue"],["size","numberValue"],["weight","numberValue"],["lineHeight","numberValue"],["letterSpacing","numberValue"],["align","align"],["valign","valign"],["italic","boolean"],["fill","stringValue"],["opacity","numberValue"],["blend","blendMode"],["shadow","stringValue"],["hidden","boolean"],["locked","boolean"]]},tt=[["font","string"],["size","number"],["weight","number"],["italic","boolean"],["underline","boolean"],["strike","boolean"],["fill","string"],["letterSpacing","number"],["link","string"]];var nt=[["enter","pageEffect"],["duration","number"],["scroll","boolean"],["length","time"],["w","number"],["h","number"],["bpm","number"],["meter","number"]],ve=[["enter","nodeEffect"],["exit","nodeEffect"],["emphasis","emphasisEffect"],["from","from"],["by","piece"],["stagger","time"],["duration","time"],["hold","time"],["delay","time"],["at","time"],["after","string"],["with","string"],["step","boolean"],["together","boolean"],["on","on"],["ease","ease"],["pad","number"],["go","string"]],rt=[["from","number"],["volume","number"],["fadein","time"],["fadeout","time"],["loop","boolean"]],vn=Object.keys(et);function ot(e){return vn.includes(e)}function It(e,t){return et[e].find(([n])=>n===t)?.[1]}function _(e,t){if(t==="boolean")return e===""||e==="true"?{value:!0}:e==="false"?{value:!1}:{error:`Expected true or false, got ${e}`};if(e.startsWith('"')){let r=ie(e);return r===void 0?{error:`Malformed quoted string ${e}`}:bn(r,t,e)}if(jr(e)){if(!Cr(t))return{error:Fr(e,t)};let r=Mn(e).trim();return r===""?{error:"Empty expression"}:{value:pe(r)}}return t==="numberValue"&&En.test(e)?{value:pe(e)}:bn(e,t,e)}var En=/^-?\d+(?:\.\d+)?%$/;function Cr(e){return e==="numberValue"||e==="stringValue"}function Fr(e,t){return t==="number"?`Expected a plain number, not an expression, got ${e}`:t==="string"&&/^\$\w+$/.test(e)?`Expected a literal, got ${e} \u2014 name a token without the $: ${e.slice(1)}`:`Expected a literal, not an expression, got ${e} \u2014 quote it if you meant the text`}function Sn(e,t){let n=/^(-?\d+(?:\.\d+)?)([A-Za-z]+)$/.exec(e);return n?/^(?:beats?|bars?)$/.test(n[2])?" \u2014 beats and bars count motion times on a page with bpm=; this is milliseconds":n[2]==="s"&&t==="number"?` \u2014 durations are milliseconds: ${Number(n[1])*1e3}`:/^(?:px|pt|deg|ms)$/.test(n[2])?` \u2014 drop the unit: ${n[1]}`:" \u2014 units are not supported: use a number, a percentage like (100%), or an expression":t==="number"?En.test(e)?" \u2014 a percentage is not allowed here":"":/^-[$@(]/.test(e)?` \u2014 wrap an expression in parentheses: (${e})`:/^-?[A-Za-z_]\w*(?:\.\w+)+$/.test(e)?` \u2014 wrap an expression in parentheses: (${e})`:""}function bn(e,t,n){switch(t){case"numberValue":case"number":{let r=Number(e);return Number.isFinite(r)&&e.trim()!==""?{value:r}:{error:`Expected a number, got ${n}${Sn(e,t)}`}}case"align":return ce.includes(e)?{value:e}:{error:`Expected one of ${ce.join(", ")}, got ${n}`};case"valign":return fe.includes(e)?{value:e}:{error:`Expected one of ${fe.join(", ")}, got ${n}`};case"fontStyle":return e==="normal"||e==="italic"?{value:e}:{error:`Expected normal or italic, got ${n}`};case"imageFit":return de.includes(e)?{value:e}:{error:`Expected one of ${de.join(", ")}, got ${n}`};case"fillRule":return R(Ae,e,n);case"lineCap":return R(Ne,e,n);case"lineJoin":return R(Pe,e,n);case"blendMode":return R(Ie,e,n);case"pageEffect":return R(Ve,e,n);case"nodeEffect":return R(je,e,n);case"emphasisEffect":return R(Ue,e,n);case"ease":return R(Be,e,n);case"piece":return R(We,e,n);case"time":{let r=ee(e);if(r)return{value:te(r.count,r.unit)};let o=Number(e);return Number.isFinite(o)&&e.trim()!==""?{value:o}:{error:`Expected milliseconds or beats, got ${n}${Vr(e)}`}}case"on":return Fe.includes(e)?{value:e}:e==="downbeat"?{error:`Expected beat or bar, got ${n} \u2014 write on=bar: a bar starts on its downbeat`}:e==="beats"||e==="bars"?{error:`Expected beat or bar, got ${n} \u2014 write on=${e.slice(0,-1)}`}:{error:`Expected beat or bar, got ${n}`};case"from":{if(B.includes(e))return{value:e};let r=Number(e);return Number.isFinite(r)&&e.trim()!==""?{value:r}:{error:`Expected a number or one of ${B.join(", ")}, got ${n}`}}default:return{value:e}}}function Vr(e){let t=/^(beat|bar|b)[:\s#]?(\d+(?:\.\d+)?)$/.exec(e);if(t){let r=t[1]==="bar"?"bar":"beat",o=Number(t[2]);return` \u2014 write ${te(Math.max(0,o-1),r)} (counted from the start: ${r} ${o}'s ${r==="bar"?"downbeat":"start"})`}let n=/^(\d+(?:\.\d+)?)\s*(b|bt|beat|bars?|beats?)$/.exec(e);if(n){let r=n[2]?.startsWith("bar")?"bar":"beat";return` \u2014 write ${te(Number(n[1]),r)} (counted from the start)`}return Sn(e,"number")}function R(e,t,n){return e.includes(t)?{value:t}:{error:`Expected one of ${e.join(", ")}, got ${n}`}}function jr(e){return/^[$@(]/.test(e)}function ie(e){try{let t=JSON.parse(e);return typeof t=="string"?t:void 0}catch{return}}function Mn(e){if(!e.startsWith("("))return e;let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="(")t+=1;else if(r===")"&&(t-=1,t===0))return n===e.length-1?e.slice(1,-1):e}return e}function On(e){let t=[],n="",r=0,o=!1;for(let i=0;i<e.length;i+=1){let s=e[i];if(o){n+=s,s==="\\"?(n+=e[i+1]??"",i+=1):s==='"'&&(o=!1);continue}if(s==='"'){o=!0,n+=s;continue}if(s==="("?r+=1:s===")"&&(r=Math.max(0,r-1)),r===0&&/\s/.test(s)){n!==""&&t.push(n),n="";continue}n+=s}return n!==""&&t.push(n),t}function At(e,t,n){let r=n===void 0?void 0:I(n);if(r?.value===void 0||!kn(e[t]??""))return;let o=t;for(;o<e.length&&kn(e[o]??"");)o+=1;let i=[Mn(r.value),...e.slice(t,o)].join(" ");return{end:o,message:`${r.key}: an expression with spaces needs parentheses \u2014 write ${r.key}=(${i})`}}function kn(e){return!e.includes("=")&&/^(?:[-+*/]|-?\d+(?:\.\d+)?%?|[$@][\w.]*|[A-Za-z_]\w*(?:\.\w+)+|\(.*|.*\))$/.test(e)}function I(e){let t=e.indexOf("=");return t===-1?{key:e,value:void 0}:{key:e.slice(0,t),value:e.slice(t+1)}}var Wr=new Set(["exit","delay","step","together","go","at","after","with"]),_n=["at","after","with","together","step"],zr=new Set(["pad","duration","delay","ease","on",..._n]);function Nt(e){if(e==="at"||e==="length")return ze;if(e==="w"||e==="h")return W;if(e==="duration"||e==="delay"||e==="stagger"||e==="hold")return xe;if(e==="pad")return W}function Pt(e,t){let n=e.words[1];if(n===void 0||n.includes("=")){t(e.number,"invalid-motion","Expected motion <page>, e.g. motion intro enter=fade");return}let r={};for(let i of e.words.slice(2)){let{key:s,value:u}=I(i),a=nt.find(([f])=>f===s)?.[1];if(a===void 0){let f=Wr.has(s)?` \u2014 ${s} goes on a node's line, under the header`:"";t(e.number,"invalid-motion",`motion ${n} has no "${s}"${f}`,n);continue}let c=_(u??"",a);"error"in c?t(e.number,"invalid-motion",`${s}: ${qr(s,u)??c.error}`,n):s==="bpm"&&!Jr(c.value)?t(e.number,"invalid-motion",`bpm: expected ${20} to ${300} beats a minute, got ${u??""}`,n):s==="meter"&&!Kr(c.value)?t(e.number,"invalid-motion",`meter: expected a whole number of beats in a bar, 1 to ${16}, got ${u??""}`,n):c.value!==!1&&(r[s]=c.value)}let o=U({...r,lines:[]});for(let[i]of nt){let s=r[i];if(s===void 0||Nt(i)===void 0)continue;let u=Lt(i,s,o,n);u!==void 0&&(t(e.number,"invalid-motion",u,n),delete r[i])}return{page:n,number:e.number,head:r,lines:[],where:new Map,taken:new Map,numbers:[]}}function Dt(e,t,n){if(t.words[0]==="music"&&!(t.words[1]??"").includes("=")){Gr(e,t,n);return}let r=t.words[0]==="camera"&&t.words[1]!==void 0&&!t.words[1].includes("="),o=r?t.words.slice(1):t.words,i=o[0];if(t.indent!==1){n(t.number,"invalid-motion","A motion line sits one level under its page");return}if(i.includes("=")){n(t.number,"invalid-motion",`Expected a node id first, got ${i}`);return}if(i===e.page&&!r){n(t.number,"invalid-motion",`${i} is the page: its transition goes on the header (motion ${i} enter=fade)`,i);return}let s=r?{id:i,camera:!0}:{id:i},u=!0;for(let f of o.slice(1)){let{key:d,value:l}=I(f),p=ve.find(([x])=>x===d)?.[1];if(p===void 0){n(t.number,"invalid-motion",`A motion line has no "${d}"${Zr(d)}`,i),u=!1;continue}if(r&&!zr.has(d)){n(t.number,"invalid-motion",`A camera line moves the shot and says only pad=, duration=, delay=, ease= and when: not ${d}=`,i),u=!1;continue}let g=_(l??"",p),h="error"in g||Nt(d)===void 0?void 0:Lt(d,g.value,U(In(e)),e.page);"error"in g?(n(t.number,"invalid-motion",`${d}: ${g.error}`,i),u=!1):h!==void 0?(n(t.number,"invalid-motion",`${i}: ${h}`,i),u=!1):d==="on"&&e.head.bpm===void 0?(n(t.number,"invalid-motion",`${i}: on=${String(g.value)} needs a tempo \u2014 motion ${e.page} bpm=120`,i),u=!1):d==="go"&&oe(g.value)===void 0?(n(t.number,"invalid-motion",`go: expected #<page>, back, next, or an https: or mailto: link, got ${l??""}`,i),u=!1):g.value!==!1&&(s[d]=g.value)}s.enter!==void 0&&s.exit!==void 0&&(n(t.number,"invalid-motion",`${i} either enters or exits on one line \u2014 write a second line for the other`,i),u=!1),s.emphasis!==void 0&&(s.enter!==void 0||s.exit!==void 0)&&(n(t.number,"invalid-motion",`${i} either ${s.enter!==void 0?"enters":"exits"} or is stressed on one line \u2014 write a second line for emphasis=`,i),u=!1);let a=_n.filter(f=>s[f]!==void 0);if(s.step===!0&&s.together===!0?(n(t.number,"invalid-motion",`${i} waits for a step or starts together with the line above, not both`,i),u=!1):a.length>1?(n(t.number,"invalid-motion",`${i} says when it starts twice (${a.join(", ")}): keep one`,i),u=!1):s.on!==void 0&&(s.with!==void 0||s.together===!0)&&(n(t.number,"invalid-motion",`${i} starts with another line (${s.with===void 0?"together":"with="}), so on= could only pull it apart: keep one`,i),u=!1),u){let f=Qr(s);f!==void 0&&(n(t.number,"invalid-motion",`${i}: ${f}`,i),u=!1)}if(!u)return;let c=Yr(s);if(!Xe(c)){n(t.number,"invalid-motion",`${i} says nothing: give it enter=, exit=, emphasis= or go=`,i);return}if(r){e.where.has(i)||e.where.set(i,t.number),e.lines.push(c),e.numbers.push(t.number);return}for(let f of["enter","exit","emphasis","go"]){if(c[f]===void 0)continue;let d=e.taken.get(`${i} ${f}`);if(d!==void 0){let l=f==="go"?"has a go=":f==="enter"?"enters":f==="exit"?"exits":"has an emphasis=";n(t.number,"invalid-motion",`${i} already ${l} on line ${d}`,i);return}}for(let f of["enter","exit","emphasis","go"])c[f]!==void 0&&e.taken.set(`${i} ${f}`,t.number);e.where.has(i)||e.where.set(i,t.number),e.lines.push(c),e.numbers.push(t.number)}function Rt(e){let t={...e.head.enter===void 0?{}:{enter:e.head.enter},...e.head.duration===void 0?{}:{duration:e.head.duration},...e.head.scroll===!0?{scroll:!0}:{},...e.head.length===void 0?{}:{length:e.head.length},...e.head.w===void 0?{}:{w:e.head.w},...e.head.h===void 0?{}:{h:e.head.h},...e.head.bpm===void 0?{}:{bpm:e.head.bpm},...e.head.meter===void 0?{}:{meter:e.head.meter},...e.music===void 0?{}:{music:e.music},lines:e.lines};return $e(t)?void 0:t}var Xr=new Set(["loop","step","together"]);function Gr(e,t,n){let r=t.words[1];if(t.indent!==1){n(t.number,"invalid-motion","A motion line sits one level under its page");return}if(r===void 0){n(t.number,"invalid-motion","Expected music <asset>, e.g. music bed fadeout=1500");return}if(Xr.has(r)){n(t.number,"invalid-motion",`music names its track first: music <asset> ${r}`);return}if(e.musicLine!==void 0){n(t.number,"invalid-motion",`motion ${e.page} already has music on line ${e.musicLine}: a page has one track`);return}let o={asset:r},i=U(In(e)),s=!0,u=c=>{n(t.number,"invalid-motion",`music ${r}: ${c}`),s=!1};for(let c of t.words.slice(2)){let{key:f,value:d}=I(c),l=rt.find(([g])=>g===f)?.[1];if(l===void 0){u(`the music line has no "${f}"${Hr(f)}`);continue}if(f==="from"&&d!==void 0&&/\d(?:beats?|bars?)$/.test(d)){u(`from= is where in the track to begin, in milliseconds, not ${d}`);continue}let p=_(d??"",l);if("error"in p){u(`${f}: ${p.error}`);continue}if(f==="from"&&!Tn(p.value,0,ye)){u(`from: expected 0 to ${ye} milliseconds, got ${d??""}`);continue}if(f==="volume"&&!Tn(p.value,0,1)){u(`volume: expected 0 to 1, got ${d??""}`);continue}if(f==="fadein"||f==="fadeout"){let g=Lt(f,p.value,i,e.page);if(g!==void 0){u(g);continue}}p.value!==!1&&(o[f]=p.value)}if(!s)return;let a={asset:r};for(let[c]of rt)o[c]!==void 0&&(a[c]=o[c]);e.music=a,e.musicLine=t.number}function Tn(e,t,n){return typeof e=="number"&&e>=t&&e<=n}function Hr(e){return e==="fade"?" \u2014 write fadein= and fadeout=":e==="fade-in"||e==="fadeIn"||e==="fade_in"?" \u2014 write fadein=":e==="fade-out"||e==="fadeOut"||e==="fade_out"?" \u2014 write fadeout=":e==="start"||e==="offset"||e==="seek"?" \u2014 write from= (where in the track to begin, in milliseconds)":e==="gain"||e==="level"?" \u2014 write volume= (0 to 1)":e==="at"||e==="delay"||e==="after"||e==="with"?": the music starts with the video; from= picks where in the track":": it takes from=, volume=, fadein=, fadeout= and loop"}function Yr(e){let t=e.camera===!0?{id:e.id,camera:!0}:{id:e.id};for(let[n]of ve)e[n]!==void 0&&(t[n]=e[n]);return t}function In(e){let{bpm:t,meter:n}=e.head;return{...t===void 0?{}:{bpm:t},...n===void 0?{}:{meter:n},lines:[]}}function Lt(e,t,n,r){if(ne(t)&&!n)return`${t} needs a tempo \u2014 motion ${r} bpm=120`;let o=typeof t=="number"||ne(t)?ge(t,n):void 0,i=Nt(e)??xe;if(o!==void 0&&o>=(e==="w"||e==="h"?16:0)&&o<=i)return;let u=String(t),a=ne(t)&&o!==void 0?` (${Math.round(o)} ms)`:"";return e==="w"||e==="h"?`${e}: expected 16 to ${W} pixels, got ${u}`:e==="pad"?`pad: expected 0 to ${W}, got ${u}`:`${e}: expected 0 to ${i} milliseconds, got ${u}${a}`}function Jr(e){return typeof e=="number"&&e>=20&&e<=300}function Kr(e){return typeof e=="number"&&Number.isInteger(e)&&e>=1&&e<=16}function qr(e,t){if(e==="meter"&&t!==void 0&&/^\d+\/\d+$/.test(t))return`Expected beats in a bar, got ${t} \u2014 meter is beats per bar: meter=${t.split("/")[0]??""}`;if(e==="duration"&&t!==void 0&&/\d(?:beats?|bars?)$/.test(t))return`Expected milliseconds, got ${t} \u2014 the page transition is milliseconds; beats are for the lines`}function Zr(e){return e==="emphasise"||e==="emphasize"?" \u2014 write emphasis=pulse":e==="easing"?" \u2014 write ease=":e==="split"?" \u2014 write by=word or by=letter":e==="start"?" \u2014 write at= (milliseconds), after= or with=":""}function Qr(e){let t=e.enter,n=e.exit,r=t??n,o=e.from;if(n==="count")return"count only enters: it runs a number up to its written value";if(o!==void 0)if(r==="count"){if(typeof o!="number")return"from= on count is the number it starts at, e.g. from=0"}else if(r==="wipe"||r==="grow"){if(typeof o=="number")return`from= on ${r} is a side: ${B.join(", ")}`}else return"from= goes with count (a number), or wipe and grow (a side)";if(e.by!==void 0&&r!==void 0&&!re.includes(r))return`by= splits a text for ${re.join(", ")}, not ${r}`;if(e.by!==void 0&&r===void 0)return"by= goes with enter= or exit=";if(e.stagger!==void 0&&r===void 0)return"stagger= goes with enter= or exit=";if(e.hold!==void 0&&t===void 0)return"hold= goes with enter=: how long to stay before leaving the way it came"}function Ct(e){return(t,n,r,o)=>{e.push({severity:"error",code:n,message:`Line ${t}: ${r}`,...o===void 0?{}:{nodeId:o}})}}function Ft(e){let t=[],n=e.split(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
2
|
-
import{f as O}from"./chunk-
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
|
+
import{f as O}from"./chunk-YWFEB275.js";import{a as k,d as P,f as S}from"./chunk-QH553HXY.js";import{a as x,o as F}from"./chunk-4O7TKIQJ.js";function _(r="vd"){let e=0;return()=>`${r}${++e}-`}var A={bytes:1e6,nodes:5e3};function Z(r){let e=/^\s*([^\s{]+)/.exec(r??"")?.[1]?.toLowerCase();return e==="vd"||e==="vdesign"}function E(r){let e={},s=(r??"").trim().replace(/^\S+/,""),t=/([A-Za-z][\w-]*)(?:=(?:"((?:[^"\\]|\\.)*)"|'([^']*)'|(\S+)))?/g;for(let a of s.matchAll(t)){let i=a[1]?.toLowerCase(),o=a[2]?.replace(/\\(.)/g,"$1")??a[3]??a[4];switch(i){case"page":o!==void 0&&o!==""&&(e.page=/^\d+$/.test(o)?Number(o):o);break;case"src":o&&(e.src=o);break;case"height":{let d=Number(o);Number.isFinite(d)&&d>0&&d<=1e4&&(e.height=d);break}case"mode":(o==="static"||o==="view")&&(e.mode=o);break;case"source":e.source=o===void 0||o==="true";break;case"alt":o!==void 0&&(e.alt=o);break;default:break}}return e}function G(r,e,s={}){let t=typeof e=="string"?E(e):e,a={...A,...s.limits},i=typeof r=="string"?r:"";if(t.src!==void 0){let n;try{n=s.resolveSrc?.(t.src)}catch{n=void 0}if(n===void 0)return l(i,[g("src-unresolved",`Could not read ${t.src}.`)]);i=n}if(i.length>a.bytes)return l(t.src===void 0?i:"",[g("too-large",`This design is over ${a.bytes} characters, the most a fence draws.`)]);let{document:o,problems:d}=k(i),h=P(o).document;if(B(h)>a.nodes)return l(t.src===void 0?i:"",[g("too-large",`This design has over ${a.nodes} shapes, the most a fence draws.`)]);if(S(h).length===0){let n=d.filter(m=>m.severity==="error");return l(t.src===void 0?i:"",[...n,...n.length===0?[g("no-pages","This design has no page to draw.")]:[]])}let R=s.renderer??O(),j=s.idPrefix??z,f,v=[];try{f=R.renderSvg(o,{...t.page===void 0?{}:{page:t.page},idPrefix:j(),onProblems:n=>v.push(...n)})}catch(n){return l(t.src===void 0?i:"",[g("no-such-page",n instanceof Error?n.message:String(n))])}let b=t.mode??s.mode??"static",$=t.alt??h.title??"Design",L=s.output==="img"||s.inlineStyles===!1&&/ style="/.test(f)?`<img class="vd-figure-art" alt="${c($)}" src="data:image/svg+xml;base64,${T(f)}">`:`<div class="vd-figure-art" role="img" aria-label="${c($)}">${N(f).trimEnd()}</div>`,y=["vd-figure"],u=[];for(let[n,m]of s.attributes??[])!/^[a-z][a-z0-9-]*$/i.test(n)||/^on/i.test(n)||n==="style"||(n==="class"?y.push(...m.split(/\s+/).filter(Boolean)):u.push(`${n}="${c(m)}"`));u.unshift(`class="${c(y.join(" "))}"`,`data-vd-mode="${b}"`),t.page!==void 0&&u.push(`data-vd-page="${c(String(t.page))}"`),t.height!==void 0&&u.push(`data-vd-height="${t.height}"`),b==="view"&&u.push(`data-vd-source="${T(i)}"`);let p=[`<figure ${u.join(" ")}>`,L],w=C([...d,...v]);return w.length>0&&p.push(I(w)),t.source&&p.push(`<details class="vd-figure-source"><summary>Source</summary><pre><code class="language-vd">${c(i)}</code></pre></details>`),p.push("</figure>"),`${p.join("")}
|
|
3
3
|
`}function N(r){return r.replace(/<a href="#[^"]*">(<tspan[^>]*>[^<]*<\/tspan>)<\/a>/g,"$1")}function T(r){return F(new TextEncoder().encode(r))}var z=_();function B(r){let e=0;return x(r.root,()=>{e+=1}),e}function l(r,e){let s=e.length>0?I(e):"";return`<pre><code class="language-vd">${c(r)}</code></pre>${s}
|
|
4
4
|
`}function I(r){return`<ul class="vd-problems">${r.map(s=>`<li data-severity="${s.severity}">${c(s.message)}</li>`).join("")}</ul>`}function C(r){let e=new Set;return r.filter(s=>{let t=`${s.code}\0${s.message}`;return e.has(t)?!1:(e.add(t),!0)})}function g(r,e){return{code:r,message:e,severity:"error"}}function c(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}export{_ as a,Z as b,E as c,G as d};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
2
|
-
import{m as l,q as d,r as p,s as g}from"./chunk-
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
|
+
import{m as l,q as d,r as p,s as g}from"./chunk-4O7TKIQJ.js";import{a as m}from"./chunk-LJWWEZ4W.js";var h=Symbol.for(`vdesign.embed.documents@${m}`),y=globalThis[h]??=new WeakMap,v=/^Line (\d+): /;function w(e){let n=v.exec(e.message);return{...n?{line:Number(n[1])}:{},code:e.code,message:e.message,severity:e.severity}}function f(e){if(typeof e!="string")return c(d("").document,new Map,[{code:"not-text",message:`parse() takes .vd text, not ${e===null?"null":typeof e}.`,severity:"error"}]);let n=D(e);if(n.vd===void 0)return c(d("").document,new Map,[{code:"not-vd",message:"This SVG carries no vDesign document: only a .vd.svg exported from vDesign does.",severity:"error"}]);let{head:t,blocks:o}=l(n.vd),r=d(t),s=r.problems.map(w).map(i=>i.line===void 0?i:{...i,line:i.line+n.offset});return c(r.document,o,s)}function D(e){if(!g(e))return{vd:e,offset:0};let n=p(e);if(n===void 0)return{vd:void 0,offset:0};let t=e.indexOf("<vd:document"),o=e.indexOf("</vd:document",t),r=e.indexOf("<![CDATA[",t);if(r===-1||o!==-1&&r>o){let u=e.indexOf(">",t)+1,b=e.slice(0,u).split(`
|
|
3
3
|
`).length-1;return{vd:n,offset:b+(e[u]===`
|
|
4
4
|
`?1:0)}}let s=r+9,i=e.slice(0,s).split(`
|
|
5
5
|
`).length-1;return{vd:n,offset:i+(e[s]===`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
2
|
var g=Object.create;var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>()=>{try{return a||b((a={exports:{}}).exports,a),a.exports}catch(c){throw a=0,c}};var l=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=h(a,d))||e.enumerable});return b};var n=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:!0}):c,b));export{m as a,n as b};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.3.
|
|
2
|
-
import{a as m,b as w,d as g,e as O,f as P,g as S,h as y,i as p}from"./chunk-
|
|
1
|
+
/*! @getv.design/embed v0.3.2. Free to use under the vDesign Embed Licence. © 2026 vDesign. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as m,b as w,d as g,e as O,f as P,g as S,h as y,i as p}from"./chunk-QH553HXY.js";import{L as R,n as v}from"./chunk-4O7TKIQJ.js";import{b as h}from"./chunk-LJWWEZ4W.js";function E(e){return m(e)}async function L(e,n={}){let t=n.fonts??"approximate";if(!x.includes(t))throw new TypeError(`renderSvg: fonts must be one of ${x.join(", ")}; got ${String(t)}.`);let o=t==="exact"?y(n.fontBase,F()):void 0,{document:i,blocks:a,problems:s}=await O(e),r=n.page===void 0?i:D(i,n.page),u=B(a),f=n.idPrefix,d=[...s],c;if(t==="exact")if(o===void 0)d.push(p([],"no fontBase was given and this build has no default"));else{let{exactSvg:l}=await import("./fonts.js"),b=await l(r,{base:o,resolveAsset:u,...f?{idPrefix:f}:{}});"svg"in b?c=b.svg:d.push(p(b.failures))}return c??=R(r,{ids:!1,resolveAsset:u,...f?{idPrefix:f}:{}}),n.onProblems?.(d),c}function M(e){return typeof e=="string"?w(e).vd:void 0}function C(e){let{document:n,problems:t}=m(e),{document:o}=g(n),{vd:i,offset:a}=typeof e=="string"?w(e):{vd:void 0,offset:0},s=new Map;if(i!==void 0){let r=/^frame\s+(\S+)/;i.split(`
|
|
3
3
|
`).some((u,f)=>{if(u.startsWith("--- payload"))return!0;let d=r.exec(u)?.[1];return d!==void 0&&!s.has(d)&&s.set(d,f+1+a),!1})}return{...o.title===void 0?{}:{title:o.title},pages:P(o).map(r=>({id:r.id,...r.name===void 0?{}:{name:r.name},...s.has(r.id)?{line:s.get(r.id)}:{}})),problems:t}}async function W(e={}){let n=e.fonts??"approximate";if(!x.includes(n))throw new TypeError(`createRenderer: fonts must be one of ${x.join(", ")}; got ${String(n)}.`);let t,o="approximate",i,a;if(n==="exact")if(t=y(e.fontBase,F()),t===void 0)a=p([],"no fontBase was given and this build has no default");else{let s=await import("./fonts.js"),r=await s.exactFontsAt(t).ensureAll();i=s.exactSvgNow,o=r.length<s.BUNDLED_FACE_COUNT?"exact":"approximate",r.length>0&&(a=p(r))}return N({fonts:o,base:t,exactNow:i,failed:a})}function _(){return N({fonts:"approximate",base:void 0,exactNow:void 0,failed:void 0})}function N(e){let{fonts:n,base:t,exactNow:o,failed:i}=e;return{fonts:n,renderSvg(a,s={}){let r=typeof a=="string"?g(m(a).document):g(a),u=s.page===void 0?r.document:D(r.document,s.page),f=B(r.blocks),d=s.idPrefix,c=[...r.problems],l;return n==="exact"&&t!==void 0&&o!==void 0?(l=o(u,{base:t,resolveAsset:f,...d?{idPrefix:d}:{}}),l===void 0&&i&&c.push(i)):i&&c.push(i),l??=R(u,{ids:!1,resolveAsset:f,...d?{idPrefix:d}:{}}),s.onProblems?.(c),l}}}function B(e){return n=>{let t=e.get(n.hash);return t===void 0?void 0:v(n.type,t)}}var x=["approximate","exact"];function F(){let e=import.meta.url;if(typeof e!="string")return h;let t=typeof globalThis.process?.getBuiltinModule=="function",o=/\/dist\/chunks\/[^/]*$/.test(e)?"../../fonts/":"../fonts/";return e.startsWith("file:")&&t?new URL(o,e).href:h}function D(e,n){let t=S(e,n);return{...e,root:{...e.root,children:e.root.children.map(o=>o===t?o:{...o,hidden:!0})}}}export{E as a,L as b,M as c,C as d,W as e,_ as f};
|