@codename/deck 0.2.0 → 0.3.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/dist/template.mjs CHANGED
@@ -1,2 +1,4 @@
1
- var D=/^[a-z][a-z0-9-]{0,31}$/,L=/^(auto|min-content|max-content|\d{1,2}(\.\d)?fr|\d{1,3}%)$/,K=["Title Slide","Title and Content","Section Header","Two Content","Comparison","Title Only","Blank","Content with Caption","Picture with Caption"],z={align:["start","center","end"],justify:["start","center","end"],paper:["paper","fill","ink","soft"],title:["normal","large","huge"],logo:["small","big","none"]},R=["top-end","top-start","bottom-end","bottom-start"],B=e=>typeof e=="string"&&e.length<=7e5&&/^data:image\/(png|jpeg|gif|webp|svg\+xml);base64,[a-z0-9+/]+=*$/i.test(e)?e:null;var _={name:"standard",tokens:{},layouts:Object.fromEntries(Object.entries({default:{label:{en:"Title and content",fr:"Titre et contenu"},pptx:"Title and Content"},cover:{label:{en:"Cover",fr:"Couverture"},justify:"center",paper:"fill",title:"huge",logo:"big",pptx:"Title Slide",numbered:!1},intro:{label:{en:"Introduction",fr:"Introduction"},justify:"center",paper:"fill",title:"large",logo:"big",pptx:"Title Slide",numbered:!1},section:{label:{en:"Section",fr:"Section"},justify:"center",paper:"ink",title:"huge",pptx:"Section Header",numbered:!1},center:{label:{en:"Centred",fr:"Centré"},justify:"center",align:"center",pptx:"Title Only"},statement:{label:{en:"Statement",fr:"Affirmation"},justify:"center",align:"center",title:"large",pptx:"Title Only"},fact:{label:{en:"Big number",fr:"Grand chiffre"},justify:"center",align:"center",title:"huge",pptx:"Title Only"},quote:{label:{en:"Quote",fr:"Citation"},justify:"center",pptx:"Title Only"},end:{label:{en:"Closing",fr:"Clôture"},justify:"center",align:"center",paper:"fill",title:"large",logo:"big",pptx:"Title Slide",numbered:!1},full:{label:{en:"Full",fr:"Plein cadre"},logo:"none",pptx:"Blank",numbered:!1},none:{label:{en:"Blank",fr:"Vide"},logo:"none",pptx:"Blank",numbered:!1},"two-cols":{label:{en:"Two columns",fr:"Deux colonnes"},slots:["default","right"],areas:"default right",columns:"1fr 1fr",pptx:"Two Content"},"two-cols-header":{label:{en:"Comparison",fr:"Comparaison"},slots:["default","left","right","bottom"],areas:"default default | left right | bottom bottom",columns:"1fr 1fr",rows:"auto 1fr auto",pptx:"Comparison"},"three-cols":{label:{en:"Three columns",fr:"Trois colonnes"},slots:["default","left","middle","right"],areas:"default default default | left middle right",columns:"1fr 1fr 1fr",rows:"auto 1fr",pptx:"Comparison"},"image-left":{label:{en:"Picture left",fr:"Image à gauche"},pptx:"Picture with Caption",justify:"center"},"image-right":{label:{en:"Picture right",fr:"Image à droite"},pptx:"Picture with Caption",justify:"center"},image:{label:{en:"Picture",fr:"Image"},logo:"none",pptx:"Blank",numbered:!1}}).map(([e,o])=>[e,F(o).layout]))};function F(e){let o=[];if(!e||typeof e!="object")return{layout:null,problems:["not a layout"]};let s={},i=Array.isArray(e.slots)||typeof e.slots=="string"?[e.slots].flat().map(String):e.slots&&typeof e.slots=="object"?Object.entries(e.slots).map(([l,d])=>(d&&typeof d=="object"&&(s[l]=W(d)),l==="title"?"default":l)):["default"],n=[...new Set(i)];if(!n.every(l=>D.test(l)))return{layout:null,problems:["a slot name is not a-z, 0-9 and -"]};n.includes("default")||n.unshift("default");let p=(Array.isArray(e.areas)?e.areas.map(l=>[l].flat().join(" ")):String(e.areas??n.join(" ")).split(/\||\n/)).map(l=>l.trim().replace(/^"|"$/g,"").split(/\s+/)).filter(l=>l.length&&l[0]),y=p[0]?.length??0;if(!p.length||p.some(l=>l.length!==y)||p.flat().some(l=>l!=="."&&!n.includes(l)))return{layout:null,problems:["areas are not a rectangle of its slots"]};for(let l of n){let d=p.flatMap((T,S)=>T.map((A,N)=>[A,N,S])).filter(([T])=>T===l);if(!d.length){l!=="default"&&o.push(`slot ${l} has no area`);continue}let $=d.map(T=>T[1]),j=d.map(T=>T[2]);if(d.length!==(Math.max(...$)-Math.min(...$)+1)*(Math.max(...j)-Math.min(...j)+1))return{layout:null,problems:[`slot ${l} is not a rectangle`]}}let h=(l,d)=>{let $=l===void 0?Array(d).fill("1fr"):(Array.isArray(l)?l:String(l).split(/\s+/)).map(String);return $.length===d&&$.every(j=>L.test(j))?$:null},b=h(e.columns,y),x=h(e.rows,p.length);if(!b||!x)return{layout:null,problems:["columns or rows are not tracks deck knows (auto, 1fr, 40%…), one per column or row"]};let m=(l,d)=>{let $=String(e[l]??d);return z[l].includes($)?$:(o.push(`${l} ${$} is not one of ${z[l].join(", ")}`),d)},w=typeof e.label=="string"||e.label&&typeof e.label=="object"?e.label:void 0,a=l=>typeof l=="string"?l.slice(0,300):void 0;return{layout:{label:w,intent:a(e.intent),use_when:a(e.use_when),avoid_when:a(e.avoid_when),slots:n,budgets:s,areas:p,columns:b,rows:x,align:m("align","start"),justify:m("justify","start"),paper:m("paper","paper"),title:m("title","normal"),logo:m("logo","small"),pptx:K.includes(e.pptx)?e.pptx:n.length>1?"Comparison":"Title and Content",numbered:e.numbered!==!1},problems:o}}function W(e){let o={};for(let s of["max_words","max_chars","item_max_words","heading_max_words"])Number.isInteger(e[s])&&e[s]>0&&(o[s]=e[s]);return Array.isArray(e.items)&&e.items.length===2&&e.items.every(Number.isInteger)&&(o.items=e.items),typeof e.required=="boolean"&&(o.required=e.required),typeof e.kind=="string"&&/^[a-z-]{1,20}$/.test(e.kind)&&(o.kind=e.kind),o}function q(e){if(!e||typeof e!="object")return{};if(!JSON.stringify(e).includes('"$value"'))return e;let o=w=>w&&typeof w=="object"&&"$value"in w?w.$value:w,s=w=>{let a=o(w);return typeof a=="string"?a:typeof a?.hex=="string"?a.hex:void 0},i=w=>{let a=o(w);return Array.isArray(a)?a.map(String):typeof a=="string"?[a]:void 0},n={bg:"paper",background:"paper",paper:"paper",fg:"ink",text:"ink",ink:"ink",accent:"primary",primary:"primary",muted:"muted",surface:"soft",soft:"soft"},u=w=>Object.fromEntries(Object.entries(w??{}).filter(([a])=>a in n).map(([a,l])=>[n[a],s(l)]).filter(([,a])=>a)),p=e.color??e.colour??{},y={...u(p),...u(p.light)},h=u(p.dark);Object.keys(h).length&&(y.dark=h);let b=e.font??e.fontFamily??{},x=i(b.heading??b.display??b.sans),m=i(b.body??b.text??b.sans);return(x||m)&&(y.fonts={heading:x??m,body:m??x}),y}function I(...e){let o={name:"standard",tokens:{},layouts:{..._.layouts}},s=[];for(let i of e)if(!(!i||typeof i!="object")){if(typeof i.name=="string"&&(o.name=i.name),i.tokens&&typeof i.tokens=="object"){let n=q(i.tokens),u=n.dark&&typeof n.dark=="object"?{...o.tokens.dark,...n.dark}:o.tokens.dark;o.tokens={...o.tokens,...n,...u&&{dark:u}}}for(let[n,u]of Object.entries(i.layouts??i.types??{})){if(!D.test(n)){s.push(`layout ${n}: not a-z, 0-9 and -`);continue}if(u===!1){n!=="default"&&delete o.layouts[n];continue}let{layout:p,problems:y}=F(u);s.push(...y.map(h=>`layout ${n}: ${h}`)),p&&(o.layouts[n]=p)}}for(let[i,n]of[["logo",o.tokens],["dark logo",o.tokens.dark]])n?.logo!==void 0&&!B(n.logo)&&(s.push(`${i}: not a picture inside the kit (PNG, JPEG, GIF, WebP or SVG as data:, 512 KB at most)`),delete n.logo);return o.tokens.logoAt!==void 0&&!R.includes(o.tokens.logoAt)&&(s.push(`logoAt ${o.tokens.logoAt} is not one of ${R.join(", ")}`),delete o.tokens.logoAt),{kit:o,problems:s}}var G={"Title Slide":"cover","Title and Content":"default","Section Header":"section","Two Content":"two-cols-header","Title Only":"center",Blank:"none"},H=["Title Slide","Title and Content","Section Header","Two Content","Comparison","Title Only","Blank","Content with Caption","Picture with Caption"],V={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml"};function X(e){let o=new DataView(e.buffer,e.byteOffset,e.byteLength),s=e.length-22;for(;s>=0&&o.getUint32(s,!0)!==101010256;)s--;if(s<0)throw new Error("not a PowerPoint file");let i=new Map;for(let n=o.getUint32(s+16,!0),u=o.getUint16(s+10,!0);u>0;u--){let p=o.getUint16(n+10,!0),y=o.getUint32(n+20,!0),h=new TextDecoder().decode(e.subarray(n+46,n+46+o.getUint16(n+28,!0))),b=o.getUint32(n+42,!0),x=b+30+o.getUint16(b+26,!0)+o.getUint16(b+28,!0),m=e.subarray(x,x+y);i.set(h,async()=>p===0?m:new Uint8Array(await new Response(new Blob([m]).stream().pipeThrough(new DecompressionStream("deflate-raw"))).arrayBuffer())),n+=46+o.getUint16(n+28,!0)+o.getUint16(n+30,!0)+o.getUint16(n+32,!0)}return i}var k=(e,o)=>new RegExp(`\\b${o}="([^"]*)"`).exec(e)?.[1],J=(e,o)=>new Map([...e.matchAll(/<Relationship\b[^>]*>/g)].map(([s])=>[String(k(s,"Id")),new URL(String(k(s,"Target")),`file:///${o}/`).pathname.slice(1)]));async function tt(e,{name:o}={}){let s=X(e),i=[],n=async t=>new TextDecoder().decode(await(s.get(t)?.()??new Uint8Array)),u=[...s.keys()].filter(t=>/^(ppt|theme)\/slideMasters\/slideMaster\d+\.xml$/.test(t)).sort()[0];if(!u)throw new Error("no slide master: not a PowerPoint template");let p=u.split("/")[0],y=await n(u),h=J(await n(u.replace(/([^/]+)$/,"_rels/$1.rels")),`${p}/slideMasters`),b=[...h.values()].find(t=>/theme\/theme\d+\.xml$/.test(t))??`${p}/theme/theme1.xml`,x=await n(b),[m,w]=(t=>[Number(k(t,"cx")??12192e3),Number(k(t,"cy")??6858e3)])(/<p:sldSz\b[^>]*>/.exec(await n(`${p}/presentation.xml`))?.[0]??""),a=Object.fromEntries([...x.matchAll(/<a:(dk1|lt1|dk2|lt2|accent[1-6])>\s*<a:(?:srgbClr\b[^>]*\bval|sysClr\b[^>]*\blastClr)="([0-9A-Fa-f]{6})"/g)].map(([,t,r])=>[t,`#${r.toLowerCase()}`])),l=t=>k(new RegExp(`<a:${t}>[\\s\\S]*?<a:latin\\b[^>]*>`).exec(x)?.[0].replace(/^[\s\S]*<a:latin/,"")??"","typeface"),[d,$]=[l("majorFont"),l("minorFont")].map(t=>t&&!t.startsWith("+")?[t,"ui-sans-serif","system-ui","sans-serif"]:null),j={...a.lt1&&{paper:a.lt1},...a.dk1&&{ink:a.dk1},...a.accent1&&{primary:a.accent1},...a.dk2&&{muted:a.dk2},...a.lt2&&{soft:a.lt2}},T=[1,2,3,4,5,6].map(t=>a[`accent${t}`]).filter(Boolean);T.length&&(j.series=T),(d||$)&&(j.fonts={heading:d??$,body:$??d});for(let[t]of y.matchAll(/<p:pic>[\s\S]*?<\/p:pic>/g)){let r=h.get(String(k(/<a:blip\b[^>]*>/.exec(t)?.[0]??"","r:embed"))),c=V[/\.(\w+)$/.exec(r??"")?.[1].toLowerCase()??""];if(!r||!c||!s.has(r))continue;let f=await s.get(r)?.(),g=f&&`data:${c};base64,${Y(f)}`;if(!B(g)){i.push(`the logo ${r.split("/").pop()} is larger than 512 KB`);break}let[P,C]=(U=>[Number(k(U,"x")??0),Number(k(U,"y")??0)])(/<a:off\b[^>]*>/.exec(t)?.[0]??"");Object.assign(j,{logo:g,logoAt:`${C<w/2?"top":"bottom"}-${P<m/2?"start":"end"}`});break}let S=t=>[...t.matchAll(/<p:sp>[\s\S]*?<\/p:sp>/g)].flatMap(([r])=>{let c=/<p:ph\b[^>]*>/.exec(r)?.[0];if(!c)return[];let f=/<a:off\b[^>]*>/.exec(r)?.[0],g=/<a:ext\b[^>]*>/.exec(r)?.[0];return[{type:k(c,"type")??"body",name:k(/<p:cNvPr\b[^>]*>/.exec(r)?.[0]??"","name")??"",box:f&&g?[Number(k(f,"x")),Number(k(f,"y")),Number(k(g,"cx")),Number(k(g,"cy"))]:null}]}),A=S(y),N=t=>{let r=/<p:bg>[\s\S]*?<\/p:bg>/.exec(t)?.[0]??"",c=k(/<a:schemeClr\b[^>]*>/.exec(r)?.[0]??"","val"),f=k(/<a:srgbClr\b[^>]*>/.exec(r)?.[0]??"","val")?.toLowerCase();return c==="accent1"||f&&`#${f}`===a.accent1?"fill":c==="tx1"||c==="dk1"||f&&`#${f}`===a.dk1?"ink":c==="bg2"||c==="lt2"?"soft":"paper"},O={},M=[...h.values()].filter(t=>/slideLayouts\/slideLayout\d+\.xml$/.test(t)).sort((t,r)=>Number(/(\d+)\.xml$/.exec(t)?.[1])-Number(/(\d+)\.xml$/.exec(r)?.[1]));for(let t of M){let r=await n(t),c=(k(/<p:cSld\b[^>]*>/.exec(r)?.[0]??"","name")??"").replace(/&amp;/g,"&").trim(),f=S(r).filter(C=>!["dt","ftr","sldNum"].includes(C.type)).map(C=>({...C,box:C.box??A.find(U=>U.type===C.type||C.type==="ctrTitle"&&U.type==="title")?.box??null})).filter(C=>C.box),g=G[c]??(c.toLowerCase().normalize("NFKD").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/^(?=\d)/,"l-").slice(0,32)||`layout-${M.indexOf(t)+1}`),P=Q(f,m,w);if(!P){i.push(`layout ${c||g}: its placeholders make no grid deck lays out`);continue}O[g]={label:c||g,...P,paper:N(r),title:f.some(C=>C.type==="ctrTitle")?"huge":"normal",logo:_.layouts[g]?.logo??"small",...f.some(C=>C.type==="ctrTitle")&&{justify:"center"},pptx:H.includes(c)?c:P.slots.length>1?"Comparison":"Title and Content",numbered:/<p:ph\b[^>]*type="sldNum"/.test(r)}}let E=I({name:o??"template",tokens:j,layouts:O});return{kit:{...E.kit,name:o??"template"},problems:[...i,...E.problems]}}function Q(e,o,s){let i=t=>["title","ctrTitle","subTitle"].includes(t.type),n=t=>t.box,u=(t,r)=>Math.abs(t[0]-r[0])<o*.05&&Math.abs(t[2]-r[2])<o*.05&&t[1]>r[1],p=e.filter(i),y=t=>/^body-([a-z][a-z0-9-]{0,31})$/.exec(t.name)?.[1],h=e.filter(t=>!i(t)).sort((t,r)=>n(t)[0]-n(r)[0]||n(t)[1]-n(r)[1]),b=p.length?h.length===1&&!y(h[0])?h[0]:h.find(t=>y(t)==="default"||!y(t)&&u(n(t),n(p[0]))):void 0,x=b?[...p,b]:p,m=h.filter(t=>t!==b),w=t=>t.length?((r,c,f,g)=>[r,c,f-r,g-c])(Math.min(...t.map(r=>r[0])),Math.min(...t.map(r=>r[1])),Math.max(...t.map(r=>r[0]+r[2])),Math.max(...t.map(r=>r[1]+r[3]))):null,a=x.length?m:m.slice(1),l=x.length?w(x.map(n)):m.length?n(m[0]):[0,0,o,s],d=a.every((t,r)=>!r||n(t)[0]>=(n(a[r-1])[0]+n(a[r-1])[2])*.98),$=d&&a.length===2&&x.length?["left","right"]:d&&a.length===3&&x.length?["left","middle","right"]:d&&a.length===1?["right"]:d&&a.length===2?["middle","right"]:a.map((t,r)=>`s${r+1}`),j=[["default",l],...a.map((t,r)=>[y(t)??$[r],n(t)])],T=(t,r,c)=>[...new Set(j.flatMap(([,f])=>[f[t],f[t]+f[r]]))].sort((f,g)=>f-g).reduce((f,g)=>f.length&&g-f[f.length-1]<c*.03?f:[...f,g],[]),S=T(0,2,o),A=T(1,3,s),N=(t,r,c)=>r>=t[0]-o*.03&&r<=t[0]+t[2]+o*.03&&c>=t[1]-s*.03&&c<=t[1]+t[3]+s*.03,O=A.slice(1).map((t,r)=>S.slice(1).map((c,f)=>j.find(([,g])=>N(g,(S[f]+c)/2,(A[r]+t)/2))?.[0]??"."));if(!O.length||!O[0].length)return null;let M=(t,r)=>t.length===2?["1fr"]:t.slice(1).map((c,f)=>`${Math.max(.1,Math.round((c-t[f])/r*100)/10)}fr`),E=M(A,s).map((t,r)=>j.length>1&&O[r].every(c=>c==="default"||c===".")?"auto":t);return{slots:j.map(([t])=>t),areas:O.map(t=>t.join(" ")).join(" | "),columns:M(S,o).join(" "),rows:E.join(" ")}}function Y(e){let o="";for(let s=0;s<e.length;s+=32768)o+=String.fromCharCode(...e.subarray(s,s+32768));return btoa(o)}function et(e){let o=n=>typeof n=="string"?{$type:"color",$value:n}:void 0,s=n=>Object.fromEntries(Object.entries({bg:n.paper,fg:n.ink,accent:n.primary,muted:n.muted,surface:n.soft}).flatMap(([u,p])=>o(p)?[[u,o(p)]]:[])),i=e.fonts??{};return{color:{light:s(e),...e.dark&&{dark:s(e.dark)},...e.series&&{series:Object.fromEntries(e.series.map((n,u)=>[`s${u+1}`,o(n)]))}},...(i.heading||i.body)&&{font:{...i.heading&&{heading:{$type:"fontFamily",$value:i.heading}},...i.body&&{body:{$type:"fontFamily",$value:i.body}}}}}}export{tt as kitFromTemplate,et as tokensToDtcg};
1
+ var ot=/^[a-z][a-z0-9-]{0,31}$/,Lt=/^(auto|min-content|max-content|\d{1,2}(\.\d)?fr|\d{1,3}%)$/,_t=["Title Slide","Title and Content","Section Header","Two Content","Comparison","Title Only","Blank","Content with Caption","Picture with Caption"],kt={align:["start","center","end"],justify:["start","center","end"],paper:["paper","fill","ink","soft"],title:["normal","large","huge"],logo:["small","big","none"]},jt=["top-end","top-start","bottom-end","bottom-start"],ut=t=>typeof t=="string"&&t.length<=7e5&&/^data:image\/(png|jpeg|gif|webp|svg\+xml);base64,[a-z0-9+/]+=*$/i.test(t)?t:null,dt=t=>typeof t=="string"&&t.length<=3145728&&/^data:image\/(?:(?:png|jpeg|gif|webp|svg\+xml);base64,[a-z0-9+/]+=*|svg\+xml,[\w.!~*'()%/+=-]*)$/i.test(t)?t:null;var mt={name:"standard",tokens:{},pictures:{},layouts:Object.fromEntries(Object.entries({default:{label:{en:"Title and content",fr:"Titre et contenu"},pptx:"Title and Content"},cover:{label:{en:"Cover",fr:"Couverture"},justify:"center",paper:"fill",title:"huge",logo:"big",pptx:"Title Slide",numbered:!1},intro:{label:{en:"Introduction",fr:"Introduction"},justify:"center",paper:"fill",title:"large",logo:"big",pptx:"Title Slide",numbered:!1},section:{label:{en:"Section",fr:"Section"},justify:"center",paper:"ink",title:"huge",pptx:"Section Header",numbered:!1},center:{label:{en:"Centred",fr:"Centré"},justify:"center",align:"center",pptx:"Title Only"},statement:{label:{en:"Statement",fr:"Affirmation"},justify:"center",align:"center",title:"large",pptx:"Title Only"},fact:{label:{en:"Big number",fr:"Grand chiffre"},justify:"center",align:"center",title:"huge",pptx:"Title Only"},quote:{label:{en:"Quote",fr:"Citation"},justify:"center",pptx:"Title Only"},end:{label:{en:"Closing",fr:"Clôture"},justify:"center",align:"center",paper:"fill",title:"large",logo:"big",pptx:"Title Slide",numbered:!1},full:{label:{en:"Full",fr:"Plein cadre"},logo:"none",pptx:"Blank",numbered:!1},none:{label:{en:"Blank",fr:"Vide"},logo:"none",pptx:"Blank",numbered:!1},"two-cols":{label:{en:"Two columns",fr:"Deux colonnes"},slots:["default","right"],areas:"default right",columns:"1fr 1fr",pptx:"Two Content"},"two-cols-header":{label:{en:"Comparison",fr:"Comparaison"},slots:["default","left","right","bottom"],areas:"default default | left right | bottom bottom",columns:"1fr 1fr",rows:"auto 1fr auto",pptx:"Comparison"},"three-cols":{label:{en:"Three columns",fr:"Trois colonnes"},slots:["default","left","middle","right"],areas:"default default default | left middle right",columns:"1fr 1fr 1fr",rows:"auto 1fr",pptx:"Comparison"},"image-left":{label:{en:"Picture left",fr:"Image à gauche"},pptx:"Picture with Caption",justify:"center"},"image-right":{label:{en:"Picture right",fr:"Image à droite"},pptx:"Picture with Caption",justify:"center"},image:{label:{en:"Picture",fr:"Image"},logo:"none",pptx:"Blank",numbered:!1}}).map(([t,e])=>[t,St(e).layout]))};function St(t){let e=[];if(!t||typeof t!="object")return{layout:null,problems:["not a layout"]};let r={},a=Array.isArray(t.slots)||typeof t.slots=="string"?[t.slots].flat().map(String):t.slots&&typeof t.slots=="object"?Object.entries(t.slots).map(([u,S])=>(S&&typeof S=="object"&&(r[u]=vt(S)),u==="title"?"default":u)):["default"],n=[...new Set(a)];if(!n.every(u=>ot.test(u)))return{layout:null,problems:["a slot name is not a-z, 0-9 and -"]};n.includes("default")||n.unshift("default");let s=(Array.isArray(t.areas)?t.areas.map(u=>[u].flat().join(" ")):String(t.areas??n.join(" ")).split(/\||\n/)).map(u=>u.trim().replace(/^"|"$/g,"").split(/\s+/)).filter(u=>u.length&&u[0]),p=s[0]?.length??0;if(!s.length||s.some(u=>u.length!==p)||s.flat().some(u=>u!=="."&&!n.includes(u)))return{layout:null,problems:["areas are not a rectangle of its slots"]};for(let u of n){let S=s.flatMap((C,F)=>C.map((j,A)=>[j,A,F])).filter(([C])=>C===u);if(!S.length){u!=="default"&&e.push(`slot ${u} has no area`);continue}let O=S.map(C=>C[1]),M=S.map(C=>C[2]);if(S.length!==(Math.max(...O)-Math.min(...O)+1)*(Math.max(...M)-Math.min(...M)+1))return{layout:null,problems:[`slot ${u} is not a rectangle`]}}let l=(u,S)=>{let O=u===void 0?Array(S).fill("1fr"):(Array.isArray(u)?u:String(u).split(/\s+/)).map(String);return O.length===S&&O.every(M=>Lt.test(M))?O:null},c=l(t.columns,p),f=l(t.rows,s.length);if(!c||!f)return{layout:null,problems:["columns or rows are not tracks deck knows (auto, 1fr, 40%…), one per column or row"]};let g=(u,S)=>{let O=String(t[u]??S);return kt[u].includes(O)?O:(e.push(`${u} ${O} is not one of ${kt[u].join(", ")}`),S)},k=typeof t.label=="string"||t.label&&typeof t.label=="object"?t.label:void 0,b=Array.isArray(t.art)&&t.art.length<=8&&t.art.every(u=>typeof u=="string"&&ot.test(u))?t.art:void 0;t.art!==void 0&&!b&&e.push("art is not 8 names at most");let y=u=>typeof u=="string"?u.slice(0,300):void 0;return{layout:{label:k,intent:y(t.intent),use_when:y(t.use_when),avoid_when:y(t.avoid_when),slots:n,budgets:r,areas:s,columns:c,rows:f,align:g("align","start"),justify:g("justify","start"),paper:g("paper","paper"),title:g("title","normal"),logo:g("logo","small"),pptx:_t.includes(t.pptx)?t.pptx:n.length>1?"Comparison":"Title and Content",numbered:t.numbered!==!1,art:b},problems:e}}function vt(t){let e={};for(let r of["max_words","max_chars","item_max_words","heading_max_words"])Number.isInteger(t[r])&&t[r]>0&&(e[r]=t[r]);return Array.isArray(t.items)&&t.items.length===2&&t.items.every(Number.isInteger)&&(e.items=t.items),typeof t.required=="boolean"&&(e.required=t.required),typeof t.kind=="string"&&/^[a-z-]{1,20}$/.test(t.kind)&&(e.kind=t.kind),e}function Gt(t){if(!t||typeof t!="object")return{};if(!JSON.stringify(t).includes('"$value"'))return t;let e=k=>k&&typeof k=="object"&&"$value"in k?k.$value:k,r=k=>{let b=e(k);return typeof b=="string"?b:typeof b?.hex=="string"?`${b.hex}${typeof b.alpha=="number"&&b.alpha<1?Math.round(Math.max(0,b.alpha)*255).toString(16).padStart(2,"0"):""}`:void 0},a=k=>{let b=e(k);return Array.isArray(b)?b.map(String):typeof b=="string"?[b]:void 0},n={bg:"paper",background:"paper",paper:"paper",fg:"ink",text:"ink",ink:"ink",accent:"primary",primary:"primary",muted:"muted",surface:"soft",soft:"soft"},o=k=>Object.fromEntries(Object.entries(k??{}).filter(([b])=>b in n).map(([b,y])=>[n[b],r(y)]).filter(([,b])=>b)),s=t.color??t.colour??{},p={...o(s),...o(s.light)},l=o(s.dark);Object.keys(l).length&&(p.dark=l);let c=t.font??t.fontFamily??{},f=a(c.heading??c.display??c.sans),g=a(c.body??c.text??c.sans);return(f||g)&&(p.fonts={heading:f??g,body:g??f}),p}function Mt(...t){let e={name:"standard",tokens:{},layouts:{...mt.layouts},pictures:{}},r=[];for(let a of t)if(!(!a||typeof a!="object")){if(typeof a.name=="string"&&(e.name=a.name),a.tokens&&typeof a.tokens=="object"){let n=Gt(a.tokens),o=n.dark&&typeof n.dark=="object"?{...e.tokens.dark,...n.dark}:e.tokens.dark;e.tokens={...e.tokens,...n,...o&&{dark:o}}}for(let[n,o]of Object.entries(a.pictures??{}))ot.test(n)&&dt(o)?e.pictures[n]=o:r.push(`picture ${n}: not a picture inside the kit`);for(let[n,o]of Object.entries(a.layouts??a.types??{})){if(!ot.test(n)){r.push(`layout ${n}: not a-z, 0-9 and -`);continue}if(o===!1){n!=="default"&&delete e.layouts[n];continue}let{layout:s,problems:p}=St(o);r.push(...p.map(l=>`layout ${n}: ${l}`)),s&&(e.layouts[n]=s)}}for(let[a,n]of[["logo",e.tokens],["dark logo",e.tokens.dark]])n?.logo!==void 0&&!ut(n.logo)&&(r.push(`${a}: not a picture inside the kit (PNG, JPEG, GIF, WebP or SVG as data:, 512 KB at most)`),delete n.logo);return e.tokens.logoAt!==void 0&&!jt.includes(e.tokens.logoAt)&&(r.push(`logoAt ${e.tokens.logoAt} is not one of ${jt.join(", ")}`),delete e.tokens.logoAt),{kit:e,problems:r}}function tt(t,e=[255,255,255]){let r=String(t).trim(),a=/^#?([\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i.exec(r)?.[1],n=/^rgba?\(([^)]*)\)$/i.exec(r)?.[1].split(/[\s,/]+/).filter(Boolean),o=(f,g)=>f.endsWith("%")?parseFloat(f)/100*g:Number(f),[s,p,l,c=1]=a?(a.length<5?[...a].map(f=>f+f):a.match(/../g)).map((f,g)=>parseInt(f,16)/(g>2?255:1)):n?.length===3||n?.length===4?n.map((f,g)=>o(f,g>2?1:255)):[];return s!==void 0&&[s,p,l].every(f=>f>=0&&f<=255)&&c>=0&&c<=1?Ht(Wt(e,[s,p,l],c)):null}var Ht=t=>t.map(e=>Math.round(Math.max(0,Math.min(255,e)))),Wt=(t,e,r)=>t.map((a,n)=>a+(e[n]-a)*r);function Ct(t){let[e,r,a]=t.map(n=>{let o=n/255;return o<=.03928?o/12.92:((o+.055)/1.055)**2.4});return .2126*e+.7152*r+.0722*a}function et(t,e){let[r,a]=[Ct(t),Ct(e)].sort((n,o)=>o-n);return(r+.05)/(a+.05)}var Vt={"Title Slide":"cover","Title and Content":"default","Section Header":"section","Two Content":"two-cols-header","Title Only":"center",Blank:"none"},qt=["Title Slide","Title and Content","Section Header","Two Content","Comparison","Title Only","Blank","Content with Caption","Picture with Caption"],Pt={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml"},Kt={...Pt,webp:"image/webp",bmp:"image/bmp"},Ot=2,Jt=3,V=12700;function Zt(t){let e=new DataView(t.buffer,t.byteOffset,t.byteLength),r=t.length-22;for(;r>=0&&e.getUint32(r,!0)!==101010256;)r--;if(r<0)throw new Error("not a PowerPoint file");let a=new Map;for(let n=e.getUint32(r+16,!0),o=e.getUint16(r+10,!0);o>0;o--){let s=e.getUint16(n+10,!0),p=e.getUint32(n+20,!0),l=new TextDecoder().decode(t.subarray(n+46,n+46+e.getUint16(n+28,!0))),c=e.getUint32(n+42,!0),f=c+30+e.getUint16(c+26,!0)+e.getUint16(c+28,!0),g=t.subarray(f,f+p);a.set(l,async()=>s===0?g:new Uint8Array(await new Response(new Blob([g]).stream().pipeThrough(new DecompressionStream("deflate-raw"))).arrayBuffer())),n+=46+e.getUint16(n+28,!0)+e.getUint16(n+30,!0)+e.getUint16(n+32,!0)}return a}var m=(t,e)=>new RegExp(`\\b${e}="([^"]*)"`).exec(t)?.[1],gt=(t,e)=>new Map([...t.matchAll(/<Relationship\b[^>]*>/g)].map(([r])=>[String(m(r,"Id")),new URL(String(m(r,"Target")),`file:///${e}/`).pathname.slice(1)]));async function me(t,{name:e}={}){let r=Zt(t),a=[],n=async d=>new TextDecoder().decode(await(r.get(d)?.()??new Uint8Array)),o=[...r.keys()].filter(d=>/^(ppt|theme)\/slideMasters\/slideMaster\d+\.xml$/.test(d)).sort()[0];if(!o)throw new Error("no slide master: not a PowerPoint template");let s=o.split("/")[0],p=await n(o),l=gt(await n(o.replace(/([^/]+)$/,"_rels/$1.rels")),`${s}/slideMasters`),c=[...l.values()].find(d=>/theme\/theme\d+\.xml$/.test(d))??`${s}/theme/theme1.xml`,f=await n(c),[g,k]=(d=>[Number(m(d,"cx")??12192e3),Number(m(d,"cy")??6858e3)])(/<p:sldSz\b[^>]*>/.exec(await n(`${s}/presentation.xml`))?.[0]??""),b=d=>Object.fromEntries([...(/<(?:p:clrMap|a:overrideClrMapping)\b[^>]*>/.exec(d)?.[0]??"").matchAll(/(\w+)="(\w+)"/g)].map(([,w,N])=>[w,N])),y={bg1:"lt1",tx1:"dk1",bg2:"lt2",tx2:"dk2",...b(p)},u=Object.fromEntries([...f.matchAll(/<a:(dk1|lt1|dk2|lt2|accent[1-6]|hlink|folHlink)>\s*<a:(?:srgbClr\b[^>]*\bval|sysClr\b[^>]*\blastClr)="([0-9A-Fa-f]{6})"/g)].map(([,d,w])=>[d,`#${w.toLowerCase()}`])),S=d=>m(new RegExp(`<a:${d}>[\\s\\S]*?<a:latin\\b[^>]*>`).exec(f)?.[0].replace(/^[\s\S]*<a:latin/,"")??"","typeface"),[O,M]=[S("majorFont"),S("minorFont")].map(d=>d&&!d.startsWith("+")?[d,"ui-sans-serif","system-ui","sans-serif"]:null),C=Object.fromEntries([["paper",y.bg1],["ink",y.tx1],["primary","accent1"],["muted",y.tx2],["soft",y.bg2]].filter(([,d])=>u[d]).map(([d,w])=>[d,u[w]])),F=[1,2,3,4,5,6].map(d=>u[`accent${d}`]).filter(Boolean);F.length&&(C.series=F),(O||M)&&(C.fonts={heading:O??M,body:M??O});let j="";for(let[d]of p.matchAll(/<p:pic>[\s\S]*?<\/p:pic>/g)){let w=l.get(String(m(/<a:blip\b[^>]*>/.exec(d)?.[0]??"","r:embed"))),N=Pt[/\.(\w+)$/.exec(w??"")?.[1].toLowerCase()??""];if(!w||!N||!r.has(w))continue;let B=await r.get(w)?.(),D=B&&`data:${N};base64,${It(B)}`;if(!ut(D)){a.push(`the logo ${w.split("/").pop()} is larger than 512 KB`);break}let[K,rt]=(W=>[Number(m(W,"x")??0),Number(m(W,"y")??0)])(/<a:off\b[^>]*>/.exec(d)?.[0]??"");Object.assign(C,{logo:D,logoAt:`${rt<k/2?"top":"bottom"}-${K<g/2?"start":"end"}`}),j=w;break}let A=d=>z(new RegExp(`<a:${d}>([\\s\\S]*?)</a:${d}>`).exec(f)?.[1]??"").map(w=>w.xml),I={scheme:Object.fromEntries(Object.entries(u).map(([d,w])=>[d,tt(w.slice(1))])),map:y,rels:l,files:r,size:[g/V,k/V],themeRels:gt(await n(c.replace(/([^/]+)$/,"_rels/$1.rels")),c.replace(/\/[^/]+$/,"")),styles:{fill:A("fillStyleLst"),line:A("lnStyleLst"),bg:A("bgFillStyleLst")},faces:{major:S("majorFont")??"",minor:S("minorFont")??""},pictures:new Map,used:new Set,noted:new Set,ids:{n:0},defs:[]},E=new Map,G=d=>E.get(JSON.stringify(d))??E.set(JSON.stringify(d),(w=>it(At(p),{...I,map:d,used:w,ids:{n:0}}).then(N=>({svg:N,used:w})))(new Set)).get(JSON.stringify(d)),X=Object.fromEntries([[y.bg2,"soft"],["accent1","fill"],[y.tx1,"ink"],[y.bg1,"paper"]].filter(([d])=>u[d]).map(([d,w])=>[u[d],w])),[h,x]=[I.scheme[y.tx1]??[0,0,0],I.scheme[y.bg1]??[255,255,255]],P=d=>[...d.matchAll(/<p:sp>[\s\S]*?<\/p:sp>/g)].flatMap(([w])=>{let N=/<p:ph\b[^>]*>/.exec(w)?.[0];if(!N)return[];let B=/<a:off\b[^>]*>/.exec(w)?.[0],D=/<a:ext\b[^>]*>/.exec(w)?.[0];return[{type:m(N,"type")??"body",name:m(/<p:cNvPr\b[^>]*>/.exec(w)?.[0]??"","name")??"",box:B&&D?[Number(m(B,"x")),Number(m(B,"y")),Number(m(D,"cx")),Number(m(D,"cy"))]:null}]}),T=P(p),U={},R={},q=(d,w)=>{let N=d?dt(le(d,I.size)):null;if(d&&!N&&a.push(`layout ${w}: a layer of its art is larger than ${Jt} MB`),!N)return[];let B=2166136261;for(let D=0;D<N.length;D++)B=Math.imul(B^N.charCodeAt(D),16777619)>>>0;return R[`art-${B.toString(36)}`]=N,[`art-${B.toString(36)}`]},Y=[...l.values()].filter(d=>/slideLayouts\/slideLayout\d+\.xml$/.test(d)).sort((d,w)=>Number(/(\d+)\.xml$/.exec(d)?.[1])-Number(/(\d+)\.xml$/.exec(w)?.[1]));for(let d of Y){let w=await n(d),N=(m(/<p:cSld\b[^>]*>/.exec(w)?.[0]??"","name")??"").replace(/&amp;/g,"&").trim(),B=P(w).filter(v=>!["dt","ftr","sldNum"].includes(v.type)).map(v=>({...v,box:v.box??T.find(wt=>wt.type===v.type||v.type==="ctrTitle"&&wt.type==="title")?.box??null})).filter(v=>v.box),D=Vt[N]??(N.toLowerCase().normalize("NFKD").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/^(?=\d)/,"l-").slice(0,32)||`layout-${Y.indexOf(d)+1}`),K={...I,map:{...y,...b(w)},rels:gt(await n(d.replace(/([^/]+)$/,"_rels/$1.rels")),d.replace(/\/[^/]+$/,"")),used:new Set,ids:{n:0}},rt=Nt(w),W=await se(rt??Nt(p),{...K,ids:{n:0},...!rt&&{rels:l}}),lt=/<p:sldLayout\b[^>]*\bshowMasterSp="(0|false)"/.test(w)?{svg:"",used:new Set}:await G(K.map),yt=await it(At(w),K),ct=ie(w,p,K),at=W.rgb?X[nt(W.rgb)]:void 0,Bt=ct&&et(ct,h)>et(ct,x),xt=at==="fill"?"fill":Bt&&(lt.svg||yt||!at)?"ink":at??(W.rgb&&et(W.rgb,h)<et(W.rgb,x)?"ink":"paper"),ft=[...q(xt===at?"":W.svg,N||D),...q(lt.svg,N||D),...q(yt,N||D)],pt=ce(B,g,k,ft.length>0);if(!pt){a.push(`layout ${N||D}: its placeholders make no grid deck lays out`);continue}let zt=j&&(K.used.has(j)||lt.used.has(j))?"none":mt.layouts[D]?.logo??"small",Ut={ctr:"center",r:"end"}[Et(w,p,/<a:(?:lvl1pPr|pPr)\b[^>]*\balgn="(\w+)"/)??""]??"start";U[D]={label:N||D,...pt,paper:xt,title:B.some(v=>v.type==="ctrTitle")?"huge":"normal",logo:zt,align:Ut,...B.some(v=>v.type==="ctrTitle")&&{justify:"center"},pptx:qt.includes(N)?N:pt.slots.length>1?"Comparison":"Title and Content",numbered:/<p:ph\b[^>]*type="sldNum"/.test(w),...ft.length&&{art:ft}}}Object.values(U).some(d=>d.art)&&(C.dark=Object.fromEntries(["paper","ink","muted","soft"].filter(d=>C[d]).map(d=>[d,C[d]])));let L=Mt({name:e??"template",tokens:C,layouts:U,pictures:R});return{kit:{...L.kit,name:e??"template"},problems:[...a,...I.noted,...L.problems]}}function z(t=""){let e=[],r=0,a="",n=0,o=0;for(let s of t.matchAll(/<(\/?)([\w:]+)[^>]*?(\/?)>/g)){let p=s.index;s[1]?--r===0&&e.push({name:s[2],tag:a,inner:t.slice(n,p),xml:t.slice(o,p+s[0].length)}):s[3]?r||e.push({name:s[2],tag:s[0],inner:"",xml:s[0]}):r++||(a=s[0],o=p,n=p+s[0].length)}return e}var $=(t,e)=>z(t).find(r=>r.name===e),At=t=>/<p:spTree>([\s\S]*)<\/p:spTree>/.exec(t)?.[1]??"",Nt=t=>/<p:bg>([\s\S]*?)<\/p:bg>/.exec(t)?.[1],i=t=>String(Math.round(t*100)/100),nt=t=>`#${t.map(e=>Math.round(Math.max(0,Math.min(255,e))).toString(16).padStart(2,"0")).join("")}`,Tt=t=>(t/=255)<=.04045?t/12.92:((t+.055)/1.055)**2.4,ht=t=>255*(t<=.0031308?t*12.92:1.055*Math.max(0,t)**(1/2.4)-.055);function Qt([t,e,r]){let[a,n,o]=[t/255,e/255,r/255],s=Math.max(a,n,o),p=Math.min(a,n,o),l=(s+p)/2,c=s-p;if(!c)return[0,0,l];let f=c/(1-Math.abs(2*l-1));return[((s===a?(n-o)/c%6:s===n?(o-a)/c+2:(a-n)/c+4)*60+360)%360,f,l]}function Z(t,e,r){let a=(1-Math.abs(2*Math.min(1,Math.max(0,r))-1))*Math.min(1,e),n=a*(1-Math.abs(t/60%2-1)),o=Math.min(1,Math.max(0,r))-a/2,[s,p,l]=t<60?[a,n,0]:t<120?[n,a,0]:t<180?[0,a,n]:t<240?[0,n,a]:t<300?[n,0,a]:[a,0,n];return[s+o,p+o,l+o].map(c=>c*255)}var Xt={black:"000000",white:"ffffff",gray:"808080",grey:"808080",red:"ff0000",green:"008000",blue:"0000ff",yellow:"ffff00"};function H(t,e,r=null){let a=z(t).find(l=>/^a:(srgbClr|schemeClr|sysClr|prstClr|scrgbClr|hslClr)$/.test(l.name));if(!a)return null;let n=m(a.tag,"val")??"",o=l=>Number(m(a.tag,l)??0)/1e5,s=a.name==="a:srgbClr"?tt(n):a.name==="a:sysClr"?tt(m(a.tag,"lastClr")??(n==="window"?"ffffff":"000000")):a.name==="a:schemeClr"?n==="phClr"?r?.rgb??null:e.scheme[e.map[n]??n]??null:a.name==="a:prstClr"?tt(Xt[n]??"808080"):a.name==="a:scrgbClr"?["r","g","b"].map(l=>ht(o(l))):Z(Number(m(a.tag,"hue")??0)/6e4,o("sat"),o("lum"));if(!s)return null;let p=n==="phClr"?r?.alpha??1:1;for(let l of z(a.inner)){let c=Number(m(l.tag,"val")??1e5)/1e5,[f,g,k]=Qt(s);l.name==="a:alpha"?p=c:l.name==="a:alphaMod"?p*=c:l.name==="a:lumMod"?s=Z(f,g,k*c):l.name==="a:lumOff"?s=Z(f,g,k+c):l.name==="a:satMod"?s=Z(f,g*c,k):l.name==="a:hueMod"?s=Z(f*c%360,g,k):l.name==="a:hueOff"?s=Z((f+c*1e5/6e4+360)%360,g,k):l.name==="a:shade"?s=s.map(b=>ht(Tt(b)*c)):l.name==="a:tint"&&(s=s.map(b=>ht(1-(1-Tt(b))*c)))}return{rgb:s,alpha:p}}async function bt(t,e){let r=t?e.rels.get(t):void 0,a=r&&e.files.get(r);if(!r||!a)return null;let n=Kt[/\.(\w+)$/.exec(r)?.[1].toLowerCase()??""],o=r.split("/").pop();if(!n)return e.noted.add(`the picture ${o} is in a format browsers don't draw`),null;e.pictures.has(r)||e.pictures.set(r,a().then(p=>p.length>Ot*1024*1024?(e.noted.add(`the picture ${o} is larger than ${Ot} MB`),null):`data:${n};base64,${It(p)}`));let s=await e.pictures.get(r);return s&&e.used.add(r),s??null}function Rt(t,e,r=null){let a=$(t,"a:duotone"),n=$(t,"a:lum");if(!a&&!n)return"";let o=`a${++e.ids.n}`,[s,p]=z(a?.inner).map(b=>H(b.xml,e,r)?.rgb??[0,0,0]),l=b=>(y=>`${i(y*.2126)} ${i(y*.7152)} ${i(y*.0722)} 0 ${i(s[b]/255)}`)((p[b]-s[b])/255),[c,f]=["bright","contrast"].map(b=>Number(m(n?.tag??"",b)??0)/1e5),g=f<0?1+f:1/Math.max(.01,1-f),k=["R","G","B"].map(b=>`<feFunc${b} type="linear" slope="${i(g)}" intercept="${i(c+.5*(1-g))}"/>`).join("");return e.defs.push(`<filter id="${o}" color-interpolation-filters="sRGB">${n?`<feComponentTransfer>${k}</feComponentTransfer>`:""}${a&&p?`<feColorMatrix type="matrix" values="${l(0)} ${l(1)} ${l(2)} 0 0 0 1 0"/>`:""}</filter>`),` filter="url(#${o})"`}async function Q(t,e,r,a=null){for(let n of z(t)){if(n.name==="a:noFill")return`${e}="none"`;if(n.name==="a:solidFill"||n.name==="a:pattFill"){let o=H(n.name==="a:pattFill"?$(n.inner,"a:fgClr")?.inner??"":n.inner,r,a);return o?`${e}="${nt(o.rgb)}"${o.alpha<1?` ${e}-opacity="${i(o.alpha)}"`:""}`:`${e}="none"`}if(n.name==="a:gradFill"){let o=z($(n.inner,"a:gsLst")?.inner).map(c=>[Number(m(c.tag,"pos")??0)/1e5,H(c.inner,r,a)]).sort((c,f)=>c[0]-f[0]),s=`a${++r.ids.n}`,p=$(n.inner,"a:path"),l=o.map(([c,f])=>f?`<stop offset="${i(c)}" stop-color="${nt(f.rgb)}"${f.alpha<1?` stop-opacity="${i(f.alpha)}"`:""}/>`:"").join("");if(!l)return`${e}="none"`;if(p){let c=$(p.inner,"a:fillToRect")?.tag??"",[f,g,k,b]=["l","t","r","b"].map(S=>Number(m(c,S)??0)/1e5),y=(f+1-k)/2,u=(g+1-b)/2;r.defs.push(`<radialGradient id="${s}" cx="${i(y)}" cy="${i(u)}" r="${i(Math.hypot(Math.max(y,1-y),Math.max(u,1-u)))}">${l}</radialGradient>`)}else{let c=Number(m($(n.inner,"a:lin")?.tag??"","ang")??0)/6e4*(Math.PI/180),f=Math.cos(c)/2,g=Math.sin(c)/2;r.defs.push(`<linearGradient id="${s}" x1="${i(.5-f)}" y1="${i(.5-g)}" x2="${i(.5+f)}" y2="${i(.5+g)}">${l}</linearGradient>`)}return`${e}="url(#${s})"`}if(n.name==="a:blipFill"){let o=$(n.inner,"a:blip"),s=await bt(m(o?.tag??"","r:embed"),r),p=`a${++r.ids.n}`;if(!s||e!=="fill")return`${e}="none"`;let l=m($(o?.inner,"a:alphaModFix")?.tag??"","amt");return r.defs.push(`<pattern id="${p}" width="1" height="1" patternContentUnits="objectBoundingBox"><image width="1" height="1" preserveAspectRatio="none"${Rt(o?.inner??"",r,a)}${l?` opacity="${i(Number(l)/1e5)}"`:""} xlink:href="${s}"/></pattern>`),`fill="url(#${p})"`}if(n.name==="a:grpFill")return r.group??`${e}="none"`}}var _=(...t)=>`M${t.map(([e,r])=>`${i(e)} ${i(r)}`).join("L")}Z`,st=(t,e,[r,a,n,o])=>`M${i(r)} 0H${i(t-a)}${a?`A${i(a)} ${i(a)} 0 0 1 ${i(t)} ${i(a)}`:""}V${i(e-n)}${n?`A${i(n)} ${i(n)} 0 0 1 ${i(t-n)} ${i(e)}`:""}H${i(o)}${o?`A${i(o)} ${i(o)} 0 0 1 0 ${i(e-o)}`:""}V${i(r)}${r?`A${i(r)} ${i(r)} 0 0 1 ${i(r)} 0`:""}Z`,J={rect:(t,e)=>_([0,0],[t,0],[t,e],[0,e]),roundRect:(t,e,r,a)=>st(t,e,Array(4).fill(a*r("adj",16667))),round1Rect:(t,e,r,a)=>st(t,e,[0,a*r("adj",16667),0,0]),round2SameRect:(t,e,r,a)=>st(t,e,[a*r("adj1",16667),a*r("adj1",16667),a*r("adj2",0),a*r("adj2",0)]),round2DiagRect:(t,e,r,a)=>st(t,e,[a*r("adj1",16667),a*r("adj2",0),a*r("adj1",16667),a*r("adj2",0)]),snip1Rect:(t,e,r,a)=>(n=>_([0,0],[t-n,0],[t,n],[t,e],[0,e]))(a*r("adj",16667)),snip2SameRect:(t,e,r,a)=>(n=>_([n,0],[t-n,0],[t,n],[t,e],[0,e],[0,n]))(a*r("adj1",16667)),ellipse:(t,e)=>`M0 ${i(e/2)}A${i(t/2)} ${i(e/2)} 0 1 1 ${i(t)} ${i(e/2)}A${i(t/2)} ${i(e/2)} 0 1 1 0 ${i(e/2)}Z`,triangle:(t,e,r)=>_([t*r("adj",5e4),0],[t,e],[0,e]),rtTriangle:(t,e)=>_([0,0],[t,e],[0,e]),diamond:(t,e)=>_([t/2,0],[t,e/2],[t/2,e],[0,e/2]),parallelogram:(t,e,r,a)=>(n=>_([n,0],[t,0],[t-n,e],[0,e]))(a*r("adj",25e3)),trapezoid:(t,e,r,a)=>(n=>_([n,0],[t-n,0],[t,e],[0,e]))(a*r("adj",25e3)),homePlate:(t,e,r,a)=>(n=>_([0,0],[n,0],[t,e/2],[n,e],[0,e]))(t-a*r("adj",5e4)),chevron:(t,e,r,a)=>(n=>_([0,0],[t-n,0],[t,e/2],[t-n,e],[0,e],[n,e/2]))(a*r("adj",5e4)),pentagon:(t,e)=>_([t/2,0],[t,e*.382],[t*.809,e],[t*.191,e],[0,e*.382]),hexagon:(t,e,r,a)=>(n=>_([n,0],[t-n,0],[t,e/2],[t-n,e],[n,e],[0,e/2]))(a*r("adj",25e3)),octagon:(t,e,r,a)=>(n=>_([n,0],[t-n,0],[t,n],[t,e-n],[t-n,e],[n,e],[0,e-n],[0,n]))(a*r("adj",29289)),star5:(t,e)=>_(...Array.from({length:10},(r,a)=>((n,o)=>[t/2+t/2*n*Math.cos(o),e/2+e/2*n*Math.sin(o)])(a%2?.382:1,-Math.PI/2+a*Math.PI/5))),line:(t,e)=>`M0 0L${i(t)} ${i(e)}`,bentConnector2:(t,e)=>`M0 0H${i(t)}V${i(e)}`,bentConnector3:(t,e,r)=>`M0 0H${i(t*r("adj1",5e4))}V${i(e)}H${i(t)}`,curvedConnector3:(t,e,r)=>(a=>`M0 0C${i(a)} 0 ${i(a)} ${i(e)} ${i(t)} ${i(e)}`)(t*r("adj1",5e4))};Object.assign(J,{straightConnector1:J.line,flowChartProcess:J.rect,flowChartAlternateProcess:J.roundRect,flowChartDecision:J.diamond,flowChartConnector:J.ellipse});var Yt=new Set(["line","straightConnector1","bentConnector2","bentConnector3","curvedConnector3"]),te={dash:[4,3],sysDash:[3,1],dot:[1,3],sysDot:[1,1],lgDash:[8,3],dashDot:[4,3,1,3],lgDashDot:[8,3,1,3],lgDashDotDot:[8,3,1,3,1,3],sysDashDot:[3,1,1,1],sysDashDotDot:[3,1,1,1,1,1]};function Ft(t,e,r){let a=$(t,"a:custGeom");if(a)return z($(a.inner,"a:pathLst")?.inner).filter(l=>l.name==="a:path").flatMap(l=>{let c=Number(m(l.tag,"w")??0),f=Number(m(l.tag,"h")??0),g=c?e/c:1/V,k=f?r/f:1/V,b="",y=[0,0];for(let u of z(l.inner)){let S=z(u.inner).filter(M=>M.name==="a:pt").map(M=>[Number(m(M.tag,"x"))*g,Number(m(M.tag,"y"))*k]),O=S.map(([M,C])=>`${i(M)} ${i(C)}`).join(" ");if(u.name==="a:moveTo")b+=`M${O}`;else if(u.name==="a:lnTo")b+=`L${O}`;else if(u.name==="a:cubicBezTo")b+=`C${O}`;else if(u.name==="a:quadBezTo")b+=`Q${O}`;else if(u.name==="a:close")b+="Z";else if(u.name==="a:arcTo"){let[M,C]=[Number(m(u.tag,"wR")??0)*g,Number(m(u.tag,"hR")??0)*k],[F,j]=["stAng","swAng"].map(I=>Number(m(u.tag,I)??0)/6e4*(Math.PI/180)),A=[y[0]-M*Math.cos(F)+M*Math.cos(F+j),y[1]-C*Math.sin(F)+C*Math.sin(F+j)];b+=`A${i(M)} ${i(C)} 0 ${Math.abs(j)>Math.PI?1:0} ${j>0?1:0} ${i(A[0])} ${i(A[1])}`,y=A}S.length&&(y=S[S.length-1])}return b&&!b.includes("NaN")?[{d:b,fill:m(l.tag,"fill")!=="none",stroke:!/^(0|false)$/.test(m(l.tag,"stroke")??"")}]:[]});let n=$(t,"a:prstGeom");if(!n)return null;let o=m(n.tag,"prst")??"",s=Object.fromEntries(z($(n.inner,"a:avLst")?.inner).map(l=>[m(l.tag,"name"),Number(/^val\s+(-?\d+)$/.exec(m(l.tag,"fmla")??"")?.[1])])),p=J[o]?.(e,r,(l,c)=>(Number.isFinite(s[l])?s[l]:c)/1e5,Math.min(e,r));return p?[{d:p,fill:!Yt.has(o),stroke:!0}]:void 0}function $t(t){let e=$(t?.inner,"a:off"),r=$(t?.inner,"a:ext");if(!t||!e||!r)return null;let[a,n,o,s]=[m(e.tag,"x"),m(e.tag,"y"),m(r.tag,"cx"),m(r.tag,"cy")].map(f=>Number(f??0)/V),p=Number(m(t.tag,"rot")??0)/6e4,[l,c]=["flipH","flipV"].map(f=>/^(1|true)$/.test(m(t.tag,f)??""));return{x:a,y:n,w:o,h:s,move:`translate(${i(a)} ${i(n)})${p?` rotate(${i(p)} ${i(o/2)} ${i(s/2)})`:""}`,flip:l||c?` matrix(${l?-1:1} 0 0 ${c?-1:1} ${l?i(o):0} ${c?i(s):0})`:""}}async function ee(t,e,r){let a=await Q(t,"fill",r),n=$(e,"a:fillRef"),o=Number(m(n?.tag??"","idx")??0),s=o>1e3?r.styles.bg[o-1001]:o?r.styles.fill[o-1]:void 0;return a??(s&&n&&await Q(s,"fill",{...r,rels:r.themeRels},H(n.inner,r)))??'fill="none"'}async function Dt(t,e,r){let a=$(t,"a:ln"),n=$(e,"a:lnRef"),o=Number(m(n?.tag??"","idx")??0),s=o?z(r.styles.line[o-1]??"")[0]:void 0,p=(a&&await Q(a.inner,"stroke",r))??(s&&n&&await Q(s.inner,"stroke",r,H(n.inner,r)));if(!p||p==='stroke="none"')return"";let l=Number(m(a?.tag??"","w")??m(s?.tag??"","w")??9525)/V,c=te[m($(a?.inner,"a:prstDash")?.tag??$(s?.inner,"a:prstDash")?.tag??"","val")??""];return` ${p} stroke-width="${i(l)}"${c?` stroke-dasharray="${c.map(f=>i(f*l)).join(" ")}"`:""}`}function ne(t,e,r,a,n){let o=$(t,"a:bodyPr"),s=(j,A)=>Number(m(o?.tag??"",j)??A)/V,[p,l,c,f]=[s("lIns",91440),s("tIns",45720),s("rIns",91440),s("bIns",45720)],g=m(o?.tag??"","wrap")!=="none",k=Number(m($(o?.inner,"a:normAutofit")?.tag??"","fontScale")??1e5)/1e5,b=$($(t,"a:lstStyle")?.inner,"a:lvl1pPr"),y=$(b?.inner,"a:defRPr"),u=$(a,"a:fontRef"),S=(u&&H(u.inner,n))??{rgb:n.scheme[n.map.tx1??"dk1"]??[0,0,0],alpha:1},O=[];for(let j of z(t).filter(A=>A.name==="a:p")){let A=z(j.inner).filter(R=>R.name==="a:r"||R.name==="a:br"),I=$(A.find(R=>R.name==="a:r")?.inner,"a:rPr")??$(j.inner,"a:endParaRPr"),E=R=>m(I?.tag??"",R)??m(y?.tag??"",R),G=Number(E("sz")??1800)/100*k,X=m($(j.inner,"a:pPr")?.tag??"","algn")??m(b?.tag??"","algn")??"l",h=H($(I?.inner,"a:solidFill")?.inner??"",n)??H($(y?.inner,"a:solidFill")?.inner??"",n)??S,x=m($(I?.inner,"a:latin")?.tag??"","typeface")??"+mn-lt",P=x.startsWith("+mj")?n.faces.major:x.startsWith("+")?n.faces.minor:x,T=A.map(R=>R.name==="a:br"?`
2
+ `:/<a:t(?:\s[^>]*)?>([\s\S]*?)<\/a:t>/.exec(R.inner)?.[1]??"").join("").replace(/(&[^;\s]+;)|[^&]+/g,(R,q)=>q??(E("cap")==="all"?R.toLocaleUpperCase():R)),U=Math.max(1,Math.floor((e-p-c)/(G*(E("b")==="1"?.6:.55))));for(let R of T.split(`
3
+ `)){let q=L=>L.replace(/&[^;\s]+;/g,"_").length<=U,Y=g?R.split(" ").reduce((L,d)=>L.length&&q(`${L[L.length-1]} ${d}`)?[...L.slice(0,-1),`${L[L.length-1]} ${d}`]:[...L,d],[]):[R];for(let L of Y.length?Y:[""])O.push({words:L,size:G,align:X,colour:h,face:P,bold:E("b")==="1",italic:E("i")==="1"})}}let M=O.reduce((j,A)=>j+A.size*1.2,0),C=m(o?.tag??"","anchor")??"t",F=C==="ctr"?l+(r-l-f-M)/2:C==="b"?r-f-M:l;return O.map(j=>{let A=F+j.size*.95,[I,E]=j.align==="ctr"?[p+(e-p-c)/2,"middle"]:j.align==="r"?[e-c,"end"]:[p,"start"];return F+=j.size*1.2,j.words.trim()?`<text x="${i(I)}" y="${i(A)}" font-size="${i(j.size)}" font-family="${[j.face.replace(/["'&<>]/g,""),"ui-sans-serif","system-ui","sans-serif"].filter(Boolean).map(G=>/\s/.test(G)?`'${G}'`:G).join(", ")}" fill="${nt(j.colour.rgb)}"${j.colour.alpha<1?` fill-opacity="${i(j.colour.alpha)}"`:""}${E==="start"?"":` text-anchor="${E}"`}${j.bold?' font-weight="bold"':""}${j.italic?' font-style="italic"':""} xml:space="preserve">${j.words}</text>`:""}).join("")}async function re(t,e){if(/<p:ph\b/.test(($(t,"p:nvSpPr")??$(t,"p:nvCxnSpPr"))?.inner??""))return"";let r=$(t,"p:spPr")?.inner??"",a=$(t,"p:style")?.inner??"",n=$t($(r,"a:xfrm")),o={...e,defs:[]};if(!n)return"";let s=Ft(r,n.w,n.h);s===void 0&&o.noted.add(`the shape ${m($(r,"a:prstGeom")?.tag??"","prst")} is left out`);let p=s?.some(g=>g.fill)?await ee(r,a,o):'fill="none"',l=s?.some(g=>g.stroke)?await Dt(r,a,o):"",c=(s??[]).filter(g=>g.fill&&p!=='fill="none"'||g.stroke&&l).map(g=>`<path d="${g.d}" ${g.fill?p:'fill="none"'}${g.stroke?l:""}/>`).join(""),f=ne($(t,"p:txBody")?.inner??"",n.w,n.h,a,o);return`${o.defs.join("")}${c?`<g transform="${n.move}${n.flip}">${c}</g>`:""}${f?`<g transform="${n.move}">${f}</g>`:""}`}async function ae(t,e){if(/<p:ph\b/.test($(t,"p:nvPicPr")?.inner??""))return"";let r=$(t,"p:blipFill")?.inner??"",a=$(r,"a:blip"),n=$(t,"p:spPr")?.inner??"",o=$t($(n,"a:xfrm")),s=/<asvg:svgBlip\b[^>]*\br:embed="([^"]+)"/.exec(a?.inner??"")?.[1],p=s&&await bt(s,e)||await bt(m(a?.tag??"","r:embed"),e);if(!o||!p)return"";let l=$(r,"a:srcRect")?.tag??"",[c,f,g,k]=["l","t","r","b"].map(j=>Number(m(l,j)??0)/1e5),b=o.w/(1-c-g||1),y=o.h/(1-f-k||1),u=m($(a?.inner,"a:alphaModFix")?.tag??"","amt"),S=Ft(n,o.w,o.h)?.[0],O=S&&!/\bprst="rect"/.test(n)?`a${++e.ids.n}`:"",M={...e,defs:[]},C=S?await Dt(n,$(t,"p:style")?.inner??"",M):"",F=Rt(a?.inner??"",M);return`${M.defs.join("")}<g transform="${o.move}${o.flip}"${u?` opacity="${i(Number(u)/1e5)}"`:""}>${O?`<clipPath id="${O}"><path d="${S?.d}"/></clipPath><g clip-path="url(#${O})">`:"<g>"}<svg width="${i(o.w)}" height="${i(o.h)}"><image x="${i(-c*b)}" y="${i(-f*y)}" width="${i(b)}" height="${i(y)}" preserveAspectRatio="none"${F} xlink:href="${p}"/></svg></g>${C?`<path d="${S?.d}" fill="none"${C}/>`:""}</g>`}async function oe(t,e){let r=$(t,"p:grpSpPr")?.inner??"",a=$(r,"a:xfrm"),n=$t(a),o={...e,defs:[]},[s,p,l,c]=[m($(a?.inner,"a:chOff")?.tag??"","x"),m($(a?.inner,"a:chOff")?.tag??"","y"),m($(a?.inner,"a:chExt")?.tag??"","cx"),m($(a?.inner,"a:chExt")?.tag??"","cy")].map(g=>Number(g??0)/V),f=await it(t,{...o,group:await Q(r,"fill",o)});return f?`${o.defs.join("")}<g${n?` transform="${n.move}${n.flip} scale(${i(l?n.w/l:1)} ${i(c?n.h/c:1)}) translate(${i(-s)} ${i(-p)})"`:""}>${f}</g>`:""}async function it(t,e){let r="";for(let a of z(t))a.name==="mc:AlternateContent"?r+=await it(($(a.inner,"mc:Fallback")??$(a.inner,"mc:Choice"))?.inner??"",e):a.name==="p:sp"||a.name==="p:cxnSp"?r+=await re(a.inner,e):a.name==="p:pic"?r+=await ae(a.inner,e):a.name==="p:grpSp"&&(r+=await oe(a.inner,e));return r}async function se(t,e){let r=$(t,"p:bgPr"),a=$(t,"p:bgRef"),n=Number(m(a?.tag??"","idx")??0),o={...e,defs:[]},s=r?.inner??(n>1e3?e.styles.bg[n-1001]:n?e.styles.fill[n-1]:void 0)??(a?'<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>':""),p=a?H(a.inner,e):null,l=$(s,"a:solidFill"),c=l?H(l.inner,e,p)?.rgb??null:t?null:e.scheme.lt1??[255,255,255],f=await Q(s,"fill",r?o:{...o,rels:e.themeRels},p)??(c?`fill="${nt(c)}"`:void 0);return{rgb:c,svg:f&&f!=='fill="none"'?`${o.defs.join("")}<rect width="${i(e.size[0])}" height="${i(e.size[1])}" ${f}/>`:""}}function Et(t,e,r){let a=n=>r.exec(/<p:txBody>[\s\S]*?<\/p:txBody>/.exec([...n.matchAll(/<p:sp>[\s\S]*?<\/p:sp>/g)].find(([o])=>/<p:ph\b[^>]*type="(title|ctrTitle)"/.test(o))?.[0]??"")?.[0]??"")?.[1];return a(t)??a(e)??r.exec(/<p:titleStyle>[\s\S]*?<\/p:titleStyle>/.exec(e)?.[0]??"")?.[1]}function ie(t,e,r){let a=Et(t,e,/<a:solidFill>([\s\S]*?)<\/a:solidFill>/);return(a&&H(a,r)?.rgb)??r.scheme[r.map.tx1??"dk1"]??null}var le=(t,[e,r])=>`data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${i(e)}" height="${i(r)}" viewBox="0 0 ${i(e)} ${i(r)}" preserveAspectRatio="none">${t}</svg>`).replace(/%2F/g,"/").replace(/%2B/g,"+").replace(/%3D/g,"=")}`;function ce(t,e,r,a=!1){let n=h=>["title","ctrTitle","subTitle"].includes(h.type),o=h=>h.box,s=(h,x)=>Math.abs(h[0]-x[0])<e*.05&&Math.abs(h[2]-x[2])<e*.05&&h[1]>x[1],p=t.filter(n),l=h=>/^body-([a-z][a-z0-9-]{0,31})$/.exec(h.name)?.[1],c=t.filter(h=>!n(h)).sort((h,x)=>o(h)[0]-o(x)[0]||o(h)[1]-o(x)[1]),f=p.length?c.length===1&&!l(c[0])&&o(c[0])[1]>=o(p[0])[1]?c[0]:c.find(h=>l(h)==="default"||!l(h)&&s(o(h),o(p[0]))):void 0,g=f?[...p,f]:p,k=c.filter(h=>h!==f),b=h=>h.length?((x,P,T,U)=>[x,P,T-x,U-P])(Math.min(...h.map(x=>x[0])),Math.min(...h.map(x=>x[1])),Math.max(...h.map(x=>x[0]+x[2])),Math.max(...h.map(x=>x[1]+x[3]))):null,y=g.length?k:k.slice(1),u=g.length?b(g.map(o)):k.length?o(k[0]):[0,0,e,r],S=y.every((h,x)=>!x||o(h)[0]>=(o(y[x-1])[0]+o(y[x-1])[2])*.98),O=S&&y.length===2&&g.length?["left","right"]:S&&y.length===3&&g.length?["left","middle","right"]:S&&y.length===1?["right"]:S&&y.length===2?["middle","right"]:y.map((h,x)=>`s${x+1}`),M=[["default",u],...y.map((h,x)=>[l(h)??O[x],o(h)])],C=(h,x,P)=>[...new Set([...a?[0,P]:[],...M.flatMap(([,T])=>[T[h],T[h]+T[x]])])].sort((T,U)=>T-U).reduce((T,U)=>T.length&&U-T[T.length-1]<P*.03?T:[...T,U],[]),F=C(0,2,e),j=C(1,3,r),A=a?.01:.03,I=(h,x,P)=>x>=h[0]-e*A&&x<=h[0]+h[2]+e*A&&P>=h[1]-r*A&&P<=h[1]+h[3]+r*A,E=j.slice(1).map((h,x)=>F.slice(1).map((P,T)=>M.find(([,U])=>I(U,(F[T]+P)/2,(j[x]+h)/2))?.[0]??"."));if(!E.length||!E[0].length||!E.flat().includes("default"))return null;let G=(h,x)=>h.length===2?["1fr"]:h.slice(1).map((P,T)=>`${Math.max(.1,Math.round((P-h[T])/x*100)/10)}fr`),X=G(j,r).map((h,x)=>!a&&M.length>1&&E[x].every(P=>P==="default"||P===".")?"auto":h);return{slots:M.map(([h])=>h),areas:E.map(h=>h.join(" ")).join(" | "),columns:G(F,e).join(" "),rows:X.join(" ")}}function It(t){let e="";for(let r=0;r<t.length;r+=32768)e+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(e)}function ge(t){let e=n=>typeof n=="string"?{$type:"color",$value:n}:void 0,r=n=>Object.fromEntries(Object.entries({bg:n.paper,fg:n.ink,accent:n.primary,muted:n.muted,surface:n.soft}).flatMap(([o,s])=>e(s)?[[o,e(s)]]:[])),a=t.fonts??{};return{color:{light:r(t),...t.dark&&{dark:r(t.dark)},...t.series&&{series:Object.fromEntries(t.series.map((n,o)=>[`s${o+1}`,e(n)]))}},...(a.heading||a.body)&&{font:{...a.heading&&{heading:{$type:"fontFamily",$value:a.heading}},...a.body&&{body:{$type:"fontFamily",$value:a.body}}}}}}export{me as kitFromTemplate,ge as tokensToDtcg};
2
4
  //# sourceMappingURL=template.mjs.map