@mapled/vanilla 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  <html lang="en">
14
14
  <head>
15
15
  <title data-mapled-bind="home.headline">Studio Nord</title>
16
- <script src="https://cdn.jsdelivr.net/npm/@mapled/vanilla@0.3.0/dist/mapled.js" data-mapled-key="mk_live_…" defer></script>
16
+ <script src="https://cdn.jsdelivr.net/npm/@mapled/vanilla@0.4.0/dist/mapled.js" data-mapled-key="mk_live_…" defer></script>
17
17
  </head>
18
18
  <body>
19
19
  <h1 data-mapled-bind="home.headline">Websites, built by hand</h1>
package/dist/mapled.js CHANGED
@@ -1,18 +1,18 @@
1
- /*! @mapled/vanilla 0.3.0 | MIT | https://mapled.io */
2
- "use strict";(()=>{var It=Object.defineProperty;var Ft=(e,t,n)=>t in e?It(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Se=(e,t,n)=>Ft(e,typeof t!="symbol"?t+"":t,n);var Re="mapled-preview",pe="mapled:preview",Dt=/^mpv_[A-Za-z0-9]{16,96}$/,Je=/^mps_[A-Za-z0-9]{16,96}$/,Ye=new WeakMap,_t=4e3;function Ae(){if(typeof window>"u"||typeof document>"u")return null;try{let e=window.sessionStorage,t=Ye.get(window);return t||Ye.set(window,t={memory:null,exchanging:null,epoch:0}),{location:window.location,history:window.history,sessionStorage:e,page:t}}catch{return null}}function jt(e){try{let t=e.getItem(pe);if(!t)return null;let n=JSON.parse(t),r=typeof n?.expiresAt=="string"?Date.parse(n.expiresAt):NaN;return typeof n?.draftToken!="string"||!Je.test(n.draftToken)||!(r>Date.now())?(e.removeItem(pe),null):{draftToken:n.draftToken,expiresAt:n.expiresAt}}catch{return null}}function K(e){let t=jt(e.sessionStorage);if(t)return t;let n=e.page.memory;return n&&Date.parse(n.expiresAt)>Date.now()?n:(e.page.memory=null,null)}function B(){let e=Ae();return e?K(e):null}function Qe(e){let t;try{t=new URL(e.location.href)}catch{return null}let n=t.searchParams.get(Re);if(n===null)return null;t.searchParams.delete(Re);try{e.history.replaceState(e.history.state,"",`${t.pathname}${t.search}${t.hash}`)}catch{}return n}function ve(){let e=Ae();if(e){e.page.memory=null,e.page.epoch++,e.page.exchanging=null,Qe(e);try{e.sessionStorage.removeItem(pe)}catch{}}}function et(e={}){let t=Ae();if(!t)return Promise.resolve(null);let n=Qe(t);if(n===null)return t.page.exchanging?t.page.exchanging.done:Promise.resolve(K(t));if(!Dt.test(n))return Promise.resolve(K(t));if(t.page.exchanging?.token===n)return t.page.exchanging.done;let r=(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,""),s=(e.appUrl??"https://app.mapled.io").replace(/\/+$/,""),l=e.fetch??fetch,c=++t.page.epoch,o=(async()=>{try{let i=await l(`${r}/v1/delivery/preview/exchange`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({token:n}),cache:"no-store"});if(i.ok){let p=await i.json();if(typeof p.draftToken!="string"||typeof p.expiresAt!="string"||!Je.test(p.draftToken)||!(Date.parse(p.expiresAt)>Date.now())||t.page.epoch!==c)return K(t);let f={draftToken:p.draftToken,expiresAt:p.expiresAt};t.page.memory=f;try{t.sessionStorage.setItem(pe,JSON.stringify(f))}catch{}return f}if(i.status===401&&t.page.epoch===c){let p=await i.json().catch(()=>null),f=p?.error?.projectId;if(t.page.epoch===c&&p?.error?.code==="PREVIEW_EXPIRED"&&typeof f=="string"&&/^[0-9a-f-]{8,64}$/i.test(f))return t.location.assign(`${s}/preview/expired?project=${encodeURIComponent(f)}`),await new Promise(a=>setTimeout(a,_t)),K(t)}return K(t)}catch{return K(t)}})(),d={token:n,done:o};return t.page.exchanging=d,o.then(()=>{t.page.exchanging===d&&(t.page.exchanging=null)}),o}async function tt(e){return(await et(e))?.draftToken??null}function Te(e){if(!e||typeof e!="object")return;let{release:t,publishedAt:n}=e;if(t===null)return n===null?null:void 0;if(!(!Number.isInteger(t)||t<1||typeof n!="string"))return{release:t,publishedAt:n}}var Kt=1e4;function Bt(e,t){let n=typeof document>"u"?void 0:globalThis.performance?.timeOrigin;if(n===void 0)return!1;let r=Date.parse(t.get("date")??""),s=Number.isNaN(r)?0:r+(Number(t.get("age"))||0)*1e3-Date.now();return Date.parse(e)>n+s-Kt}function nt(e,t){return(n,r)=>{if(e!==void 0)return e;let s=t?.();return s!==void 0?s:Bt(n.publishedAt,r)?null:n.release}}function rt(e,t,n){let r=typeof e.key=="string"&&e.key.length>0;if(!r&&!e.endpoint)throw new Error("Mapled: watchRelease needs an endpoint or a delivery key.");let s=r?`${(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,"")}/v1/delivery/release`:e.endpoint,l=r?{accept:"application/json","x-mapled-key":e.key}:{accept:"application/json"},c=(r?Math.max(15,e.interval??60):Math.max(2,e.interval??10))*1e3,o=e.fetch??fetch,d=typeof document>"u"?null:document,i,p=null,f=0,a=null,g=0,R=!1,O,P=null,w=()=>!d||d.visibilityState!=="hidden",U=()=>{R||!w()||(O=setTimeout(N,Math.min(c*2**g,3e5)))};async function N(){if(R||P)return;let I=new AbortController;P=I;let F=null;try{let J=await o(s,{cache:"no-cache",headers:l,signal:I.signal}),$=J.ok?Te(await J.json()):void 0;if(R)return;$===void 0?g+=1:(g=0,i===void 0&&(i=$?t($,J.headers):null),$&&$.release>(p?.release??0)&&(p=$),$&&$.release>(i??0)?(F={next:$,previous:i},i=$.release,f=$.release,a=null):$&&a!==null&&typeof i=="number"&&$.release>=i&&i>f&&(F={next:$,previous:a},f=i,a=null))}catch{if(R)return;g+=1}finally{P===I&&(P=null)}U(),F&&e.onPublish(F.next,F.previous)}let L=()=>{clearTimeout(O),w()&&N()};d?.addEventListener("visibilitychange",L);let W=n?.(I=>{if(R||typeof i!="number"||I>=i||i<=f||(a=a===null?I:Math.min(a,I),p===null||p.release<i))return;f=i;let F=a;a=null,e.onPublish(p,F)});return w()&&N(),()=>{R=!0,clearTimeout(O),P?.abort(),W?.(),d?.removeEventListener("visibilitychange",L)}}function st(e){let t={};return e.forEach((n,r)=>{typeof n!="string"||r in t||(t[r]=n)}),t}async function xe(e,t,n){if(!n?.key)throw new Error("Mapled: a delivery key is required.");let r=(n.apiUrl??"https://api.mapled.io").replace(/\/+$/,""),s=typeof HTMLFormElement<"u"&&t instanceof HTMLFormElement?st(new FormData(t)):typeof FormData<"u"&&t instanceof FormData?st(t):{...t},l=n.page??(typeof window<"u"&&typeof document<"u"?window.location.pathname:void 0),c={...s};n.consent&&(c._consent=n.consent),l&&c._page===void 0&&(c._page=l),n.test&&(c._test=!0);let o=B()?.draftToken,d={"content-type":"application/json","x-mapled-key":n.key};o&&(d["x-mapled-draft"]=o);let i;try{i=await(n.fetch??fetch)(`${r}/v1/delivery/forms/${encodeURIComponent(e)}`,{method:"POST",headers:d,body:JSON.stringify(c)})}catch{return{ok:!1,status:0,code:"NETWORK",message:"Mapled couldn't be reached. Try again in a minute."}}if(i.ok)return{ok:!0};let p=`The submission wasn't accepted (${i.status}).`,f;try{let a=await i.json();a.error?.message&&(p=a.error.message),typeof a.error?.code=="string"&&(f=a.error.code)}catch{}return{ok:!1,status:i.status,code:f,message:p}}var Ee=/^[a-z0-9][a-z0-9-]{0,63}$/,ot=new Set;function Ht(e){if(typeof process<"u")return;let t=e?.aliases;if(!(!t||typeof t!="object")){for(let[n,r]of Object.entries(t))if(!(!r||typeof r!="object"||!Ee.test(n)))for(let[s,l]of Object.entries(r)){if(typeof l!="string"||!Ee.test(s)||!Ee.test(l))continue;let c=`${n}.${s}`;ot.has(c)||(ot.add(c),console.warn(`[mapled] \u201C${s}\u201D in \u201C${n}\u201D was renamed to \u201C${l}\u201D. The old key keeps working until its alias is removed in Mapled \u2014 use \u201C${l}\u201D instead.`))}}}function at(e,t={}){let n=new URLSearchParams;t.width&&n.set("w",String(t.width)),t.height&&n.set("h",String(t.height)),t.fit&&n.set("fit",t.fit),t.format&&n.set("fmt",t.format),t.quality&&n.set("q",String(t.quality));let r=n.toString(),s=t.files?(t.files[e]??t.files[e.toLowerCase()])?.url:void 0;return typeof s=="string"&&s?r?`${s}${s.includes("?")?"&":"?"}${r}`:s:`${(t.apiUrl??"https://api.mapled.io").replace(/\/+$/,"")}/files/${encodeURIComponent(e)}${r?`?${r}`:""}`}var V=class extends Error{constructor(n,r,s){super(r);Se(this,"status");Se(this,"code");this.name="MapledError",this.status=n,this.code=s}},it=e=>Number.isInteger(e)&&e>=1,lt=()=>new Error("Mapled: release must be a positive whole number.");function ut(e){let t=(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,"");if(!e.key)throw new Error("Mapled: a delivery key is required.");if(e.release!==void 0&&!it(e.release))throw lt();let n=(f,a)=>(e.fetch??fetch)(f,a),r,s=new Set;async function l(){return e.draft===null?null:typeof e.draft=="string"?e.draft||null:typeof e.draft=="function"?await e.draft()||null:tt({apiUrl:t,appUrl:e.appUrl,fetch:e.fetch})}async function c(f){let a=`Mapled request failed (${f.status}).`,g;try{let R=await f.json();R.error?.message&&(a=R.error.message),typeof R.error?.code=="string"&&(g=R.error.code)}catch{}return new V(f.status,a,g)}async function o(f,a,g){let R=await l(),O=g.release??e.release;if(O!==void 0&&!it(O))throw lt();O!==void 0&&!R&&a.set("release",String(O));let P=g.locale||e.locale;P&&a.set("locale",P);let w=a.toString(),U=await n(`${t}${f}${w?`?${w}`:""}`,{headers:R?{"x-mapled-key":e.key,"x-mapled-draft":R}:{"x-mapled-key":e.key},...R?{cache:"no-store"}:{},...g.signal?{signal:g.signal}:{}});if(!U.ok)throw await c(U);let N=await U.json();if(!R){let L=Number(U.headers.get("x-mapled-release"));if(Number.isInteger(L)&&L>=1){r=r===void 0?L:Math.min(r,L);for(let W of s)Promise.resolve().then(()=>W(L))}}return Ht(N),N}let d=(f,a)=>(a.expand?.length&&f.set("expand",a.expand.join(",")),a.fields?.length&&f.set("fields",a.fields.join(",")),f),i=async(f,a)=>{try{return(await o(f,d(new URLSearchParams,a),a)).record}catch(g){if(g instanceof V&&g.status===404&&g.code!=="RELEASE_NOT_FOUND")return null;throw g}};return{async getRecords(f,a={}){let g=new URLSearchParams;for(let[R,O]of Object.entries(a.filter??{}))if(O!==null&&typeof O=="object")for(let[P,w]of Object.entries(O))w!==void 0&&g.set(`filter[${R}][${P}]`,Array.isArray(w)?w.join(","):String(w));else g.set(`filter[${R}]`,String(O));return a.sort&&g.set("sort",a.sort),a.limit!==void 0&&g.set("limit",String(a.limit)),a.offset!==void 0&&g.set("offset",String(a.offset)),a.search&&g.set("search",a.search),d(g,a),o(`/v1/delivery/collections/${encodeURIComponent(f)}/records`,g,a)},getRecord(f,a,g={}){return i(`/v1/delivery/collections/${encodeURIComponent(f)}/records/${encodeURIComponent(a)}`,g)},getRecordBySlug(f,a,g={}){return i(`/v1/delivery/collections/${encodeURIComponent(f)}/records/by-slug/${encodeURIComponent(a)}`,g)},getSingle(f,a={}){return i(`/v1/delivery/singles/${encodeURIComponent(f)}`,a)},async isPreview(){return await l()!==null},watch(f,a={}){return rt({key:e.key,apiUrl:t,interval:a.interval,onPublish:f,fetch:e.fetch},nt(a.from,()=>r),g=>(s.add(g),()=>{s.delete(g)}))},async getRelease(f={}){let a=await n(`${t}/v1/delivery/release`,{headers:{"x-mapled-key":e.key},cache:"no-cache",...f.signal?{signal:f.signal}:{}});if(!a.ok)throw await c(a);let g=Te(await a.json());if(g===void 0)throw new Error("Mapled: the release pointer didn't come back as one \u2014 check the API origin.");return g}}}var qt=/^[a-z0-9][a-z0-9_-]{0,63}$/;function te(e){if(typeof e!="string")return null;let t=e.trim().split(".");if(t.length>8)return null;for(let n of t)if(!qt.test(n))return null;return t}var z=(e,t)=>e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;function Me(e,t){let n=e.data,r=e.expanded,s=e.expandedBlocks;for(let l=0;l<t.length;l++){let c=t[l],o=z(r,c);if(l===t.length-1)return{value:z(n,c),linked:o,blocks:z(s,c)};if(o!==void 0){if(o===null||Array.isArray(o))return{value:void 0};n=z(o,"data"),r=z(o,"expanded"),s=z(o,"expandedBlocks");continue}if(n=z(n,c),r=void 0,s=void 0,n===void 0)return{value:void 0}}return{value:n}}var ne=e=>e==null||e===""||Array.isArray(e)&&e.length===0;function Oe(e){return typeof e=="string"?e:typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)&&e.every(t=>typeof t=="string"||typeof t=="number")?e.join(", "):null}var zt=new Set(["http:","https:","mailto:","tel:"]),Wt=new Set(["http:","https:"]),Gt=2048;function H(e,t,n){if(typeof e!="string"||e.length>Gt)return null;let r;try{r=new URL(e,t)}catch{return null}return!(n==="link"?zt:Wt).has(r.protocol)||r.username!==""||r.password!==""?null:r.href}var Xt=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ct=e=>typeof e=="string"&&Xt.test(e);function dt(e,t,n){let r=[],s=e.replace(/\{([^{}]*)\}/g,(c,o)=>{let d=te(o);if(!d)return r.push({ok:!1,reason:"bad-path",path:o.trim().slice(0,80)}),"";let i=n(d);if(typeof i!="string"&&typeof i!="number"||i==="")return r.push({ok:!1,reason:"empty",path:d.join(".")}),"";try{return encodeURIComponent(String(i))}catch{return r.push({ok:!1,reason:"unsafe-url",path:d.join(".")}),""}});if(r[0])return r[0];let l=H(s,t,"link");return l===null?{ok:!1,reason:"unsafe-url",path:e.slice(0,80)}:{ok:!0,url:l}}var Vt=1e5,pt=8,mt=2048,Zt="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",ft={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:"\xA0",copy:"\xA9",reg:"\xAE",trade:"\u2122",mdash:"\u2014",ndash:"\u2013",hellip:"\u2026",laquo:"\xAB",raquo:"\xBB"};function gt(e,t,n){let r=t.createDocumentFragment();if(typeof e!="string"||e==="")return r;let s=e.replace(/\r\n?/g,`
3
- `).replace(/\t/g," ").replace(/\u0000/g,"\uFFFD"),l={doc:t,base:n};if(s.length>Vt){for(let c of s.split(/\n{2,}/))c.trim()!==""&&(C(l,"p",r).textContent=c.trim());return r}return Ne(l,s.split(`
4
- `),r,0),r}function C(e,t,n){let r=e.doc.createElement(t);return n.appendChild(r),r}var Pe=e=>e.trim()==="",se=e=>e.length-e.trimStart().length;function ht(e){let t=se(e);if(t>3)return null;let n=0;for(;n<7&&e[t+n]==="#";)n++;if(n===0||n>6)return null;let r=e[t+n];if(r!==void 0&&r!==" ")return null;let s=e.slice(t+n).trim(),l=s.length;for(;l>0&&s[l-1]==="#";)l--;return l<s.length&&(l===0||s[l-1]===" ")&&(s=s.slice(0,l).trim()),{level:n,text:s}}function Ue(e){if(se(e)>3)return!1;let t=e.replace(/ /g,""),n=t[0];if(t.length<3||n!=="-"&&n!=="*"&&n!=="_")return!1;for(let r of t)if(r!==n)return!1;return!0}function Ce(e){let t=/^ {0,3}(`{3,}|~{3,})/.exec(e);if(!t)return null;let n=t[1][0];return n==="`"&&e.slice(t[0].length).includes("`")?null:{mark:n,size:t[1].length}}function re(e){let t=/^( {0,3})([-*+]|\d{1,9}[.)])( +|$)/.exec(e);if(!t)return null;let n=t[2],r=t[3].length,s=n.length>1||/\d/.test(n);return{indent:t[1].length,width:n.length+(r>=1&&r<=4?r:1),ordered:s,start:s?parseInt(n,10):1,rest:e.slice(t[0].length)}}var $e=e=>/^ {0,3}>/.test(e);function Yt(e){if(ht(e)!==null||Ce(e)!==null||$e(e)||Ue(e))return!0;let t=re(e);return t!==null&&t.rest!==""&&(!t.ordered||t.start===1)}function Ne(e,t,n,r){if(r>=pt){let l=t.join(`
5
- `).trim();l!==""&&(C(e,"p",n).textContent=l);return}let s=0;for(;s<t.length;){let l=t[s];if(Pe(l)){s++;continue}let c=Ce(l);if(c){let p=[],f=se(l);for(s++;s<t.length;){let a=t[s],g=Ce(a);if(g&&g.mark===c.mark&&g.size>=c.size&&a.trim().length===g.size)break;p.push(a.slice(Math.min(f,se(a)))),s++}s++,C(e,"code",C(e,"pre",n)).textContent=p.length>0?`${p.join(`
1
+ /*! @mapled/vanilla 0.4.0 | MIT | https://mapled.io */
2
+ "use strict";(()=>{var mn=Object.defineProperty;var gn=(e,t,n)=>t in e?mn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var We=(e,t,n)=>gn(e,typeof t!="symbol"?t+"":t,n);var qe="mapled-preview",Ne="mapled:preview",hn=/^mpv_[A-Za-z0-9]{16,96}$/,yt=/^mps_[A-Za-z0-9]{16,96}$/,yn=/^(?:https:\/\/[a-z0-9.-]+|http:\/\/(?:localhost|127\.0\.0\.1))(?::[0-9]{1,5})?$/;function kt(e){let t={draftToken:e.draftToken,expiresAt:e.expiresAt};return e.mode==="edit"&&typeof e.appOrigin=="string"&&yn.test(e.appOrigin)&&(t.mode="edit",t.appOrigin=e.appOrigin),t}var ht=new WeakMap,kn=4e3;function Ve(){if(typeof window>"u"||typeof document>"u")return null;try{let e=window.sessionStorage,t=ht.get(window);return t||ht.set(window,t={memory:null,exchanging:null,epoch:0}),{location:window.location,history:window.history,sessionStorage:e,page:t}}catch{return null}}function bn(e){try{let t=e.getItem(Ne);if(!t)return null;let n=JSON.parse(t),r=typeof n?.expiresAt=="string"?Date.parse(n.expiresAt):NaN;return typeof n?.draftToken!="string"||!yt.test(n.draftToken)||!(r>Date.now())?(e.removeItem(Ne),null):kt({...n,draftToken:n.draftToken,expiresAt:n.expiresAt})}catch{return null}}function te(e){let t=bn(e.sessionStorage);if(t)return t;let n=e.page.memory;return n&&Date.parse(n.expiresAt)>Date.now()?n:(e.page.memory=null,null)}function J(){let e=Ve();return e?te(e):null}function bt(e){let t;try{t=new URL(e.location.href)}catch{return null}let n=t.searchParams.get(qe);if(n===null)return null;t.searchParams.delete(qe);try{e.history.replaceState(e.history.state,"",`${t.pathname}${t.search}${t.hash}`)}catch{}return n}function Ge(){let e=Ve();if(e){e.page.memory=null,e.page.epoch++,e.page.exchanging=null,bt(e);try{e.sessionStorage.removeItem(Ne)}catch{}}}function wt(e={}){let t=Ve();if(!t)return Promise.resolve(null);let n=bt(t);if(n===null)return t.page.exchanging?t.page.exchanging.done:Promise.resolve(te(t));if(!hn.test(n))return Promise.resolve(te(t));if(t.page.exchanging?.token===n)return t.page.exchanging.done;let r=(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,""),s=(e.appUrl??"https://app.mapled.io").replace(/\/+$/,""),i=e.fetch??fetch,u=++t.page.epoch,a=(async()=>{try{let l=await i(`${r}/v1/delivery/preview/exchange`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({token:n}),cache:"no-store"});if(l.ok){let g=await l.json();if(typeof g.draftToken!="string"||typeof g.expiresAt!="string"||!yt.test(g.draftToken)||!(Date.parse(g.expiresAt)>Date.now())||t.page.epoch!==u)return te(t);let m=kt({...g,draftToken:g.draftToken,expiresAt:g.expiresAt});t.page.memory=m;try{t.sessionStorage.setItem(Ne,JSON.stringify(m))}catch{}return m}if(l.status===401&&t.page.epoch===u){let g=await l.json().catch(()=>null),m=g?.error?.projectId;if(t.page.epoch===u&&g?.error?.code==="PREVIEW_EXPIRED"&&typeof m=="string"&&/^[0-9a-f-]{8,64}$/i.test(m))return t.location.assign(`${s}/preview/expired?project=${encodeURIComponent(m)}`),await new Promise(c=>setTimeout(c,kn)),te(t)}return te(t)}catch{return te(t)}})(),d={token:n,done:a};return t.page.exchanging=d,a.then(()=>{t.page.exchanging===d&&(t.page.exchanging=null)}),a}async function At(e){return(await wt(e))?.draftToken??null}function Xe(e){if(!e||typeof e!="object")return;let{release:t,publishedAt:n}=e;if(t===null)return n===null?null:void 0;if(!(!Number.isInteger(t)||t<1||typeof n!="string"))return{release:t,publishedAt:n}}var wn=1e4;function An(e,t){let n=typeof document>"u"?void 0:globalThis.performance?.timeOrigin;if(n===void 0)return!1;let r=Date.parse(t.get("date")??""),s=Number.isNaN(r)?0:r+(Number(t.get("age"))||0)*1e3-Date.now();return Date.parse(e)>n+s-wn}function St(e,t){return(n,r)=>{if(e!==void 0)return e;let s=t?.();return s!==void 0?s:An(n.publishedAt,r)?null:n.release}}function Rt(e,t,n){let r=typeof e.key=="string"&&e.key.length>0;if(!r&&!e.endpoint)throw new Error("Mapled: watchRelease needs an endpoint or a delivery key.");let s=r?`${(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,"")}/v1/delivery/release`:e.endpoint,i=r?{accept:"application/json","x-mapled-key":e.key}:{accept:"application/json"},u=(r?Math.max(15,e.interval??60):Math.max(2,e.interval??10))*1e3,a=e.fetch??fetch,d=typeof document>"u"?null:document,l,g=null,m=0,c=null,b=0,x=!1,_,D=null,k=()=>!d||d.visibilityState!=="hidden",N=()=>{x||!k()||(_=setTimeout(q,Math.min(u*2**b,3e5)))};async function q(){if(x||D)return;let H=new AbortController;D=H;let j=null;try{let B=await a(s,{cache:"no-cache",headers:i,signal:H.signal}),I=B.ok?Xe(await B.json()):void 0;if(x)return;I===void 0?b+=1:(b=0,l===void 0&&(l=I?t(I,B.headers):null),I&&I.release>(g?.release??0)&&(g=I),I&&I.release>(l??0)?(j={next:I,previous:l},l=I.release,m=I.release,c=null):I&&c!==null&&typeof l=="number"&&I.release>=l&&l>m&&(j={next:I,previous:c},m=l,c=null))}catch{if(x)return;b+=1}finally{D===H&&(D=null)}N(),j&&e.onPublish(j.next,j.previous)}let K=()=>{clearTimeout(_),k()&&q()};d?.addEventListener("visibilitychange",K);let Z=n?.(H=>{if(x||typeof l!="number"||H>=l||l<=m||(c=c===null?H:Math.min(c,H),g===null||g.release<l))return;m=l;let j=c;c=null,e.onPublish(g,j)});return k()&&q(),()=>{x=!0,clearTimeout(_),D?.abort(),Z?.(),d?.removeEventListener("visibilitychange",K)}}function Et(e){let t={};return e.forEach((n,r)=>{typeof n!="string"||r in t||(t[r]=n)}),t}async function Ze(e,t,n){if(!n?.key)throw new Error("Mapled: a delivery key is required.");let r=(n.apiUrl??"https://api.mapled.io").replace(/\/+$/,""),s=typeof HTMLFormElement<"u"&&t instanceof HTMLFormElement?Et(new FormData(t)):typeof FormData<"u"&&t instanceof FormData?Et(t):{...t},i=n.page??(typeof window<"u"&&typeof document<"u"?window.location.pathname:void 0),u={...s};n.consent&&(u._consent=n.consent),i&&u._page===void 0&&(u._page=i),n.test&&(u._test=!0);let a=J()?.draftToken,d={"content-type":"application/json","x-mapled-key":n.key};a&&(d["x-mapled-draft"]=a);let l;try{l=await(n.fetch??fetch)(`${r}/v1/delivery/forms/${encodeURIComponent(e)}`,{method:"POST",headers:d,body:JSON.stringify(u)})}catch{return{ok:!1,status:0,code:"NETWORK",message:"Mapled couldn't be reached. Try again in a minute."}}if(l.ok)return{ok:!0};let g=`The submission wasn't accepted (${l.status}).`,m;try{let c=await l.json();c.error?.message&&(g=c.error.message),typeof c.error?.code=="string"&&(m=c.error.code)}catch{}return{ok:!1,status:l.status,code:m,message:g}}var vt={"\u200B":0,"\u200C":1,"\u200D":2,"\u2060":3},Sn=1,Rn=1024,Ct=/\u2064[\u200B\u200C\u200D\u2060]*/g;function be(e){return e.indexOf("\u2064")<0?e:e.replace(Ct,"")}function _e(e){if(e.indexOf("\u2064")<0)return[];let t=[];for(let n of e.matchAll(Ct)){let r=En(n[0]);r&&t.push(r)}return t}function En(e){for(let t=e.indexOf("\u2064");t>=0;t=e.indexOf("\u2064",t+1)){let n=vn(e,t);if(n)return n}return null}function vn(e,t){let n=t+1;for(;n<e.length&&vt[e[n]]!==void 0;)if(n+=1,n-t-1>Rn*4)return null;let r=e.slice(t,n),s=r.length-1;if(s===0||s%4!==0)return null;let i=new Uint8Array(s/4);for(let u=0;u<i.length;u+=1){let a=0;for(let d=0;d<4;d+=1)a=a<<2|vt[r[1+u*4+d]];i[u]=a}return Tn(i,r)}function Tn(e,t){if(e.length<19||e[0]!==Sn)return null;let n=Tt(e,1),s=18+e[17];if(s>=e.length)return null;let i="";for(let l=18;l<s;l+=1)i+=String.fromCharCode(e[l]);if(i&&!xn.test(i))return null;let u=e.indexOf(0,s),a=Pt(xt(e.subarray(s,u<0?e.length:u)));if(!a)return null;let d={raw:t,token:Pn(e),record:n,locale:i||null,path:a};if(u>=0){if(s=u+1,e.length<s+17)return null;let l=Pt(xt(e.subarray(s+16)));if(!l)return null;d.via={record:Tt(e,s),path:l}}return d}function Tt(e,t){let n="";for(let r=t;r<t+16;r+=1)n+=e[r].toString(16).padStart(2,"0");return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}function xt(e){if(e.length===0)return null;try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(e)}catch{return null}}var xn=/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{1,8}){0,3}$/,Mt=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,Ot=/^(?:0|[1-9][0-9]{0,3})$/,Mn=/^@[A-Za-z0-9_-]{1,40}$/,On=new Set(["__proto__","prototype","constructor"]);function Pt(e){if(!e||e.length>2048)return null;let t=e.split(".");if(!Mt.test(t[0])||Ot.test(t[0]))return null;for(let n of t)if(!(Mt.test(n)||Ot.test(n)||Mn.test(n))||On.has(n))return null;return e}var Ue="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function Pn(e){let t="";for(let n=0;n<e.length;n+=3){let r=e[n]<<16|(e[n+1]??0)<<8|(e[n+2]??0);t+=Ue[r>>18&63]+Ue[r>>12&63],n+1<e.length&&(t+=Ue[r>>6&63]),n+2<e.length&&(t+=Ue[r&63])}return t}var Je={mapled:"editor",v:1},X={marks:2e3,assets:500,text:1e5,mark:4100,asset:64,path:2048,label:200},Cn=/^\u2064[\u200B\u200C\u200D\u2060]+$/,$n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ln(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return t.mapled===Je.mapled&&t.v===Je.v&&typeof t.type=="string"?t:null}var we=(e,t)=>typeof e=="string"&&e.length<=t,ue=e=>we(e,X.mark)&&Cn.test(e),In=e=>typeof e=="string"&&$n.test(e);function $t(e){let t=Ln(e);if(!t)return null;switch(t.type){case"init":{let n=Ye(t.homes,X.marks,ue,i=>i==="page"||i==="cms"||i==="none"),r=Ye(t.assets,X.assets,In,i=>i==="page"||i==="cms"),s=t.labels===void 0?void 0:Ye(t.labels,X.marks,ue,i=>we(i,X.label));return!n||!r||s===null?null:{type:"init",homes:n,assets:r,...s?{labels:s}:{}}}case"edit":return!ue(t.mark)||t.kind!=="inline"&&t.kind!=="panel"||t.text!==void 0&&!we(t.text,X.text)?null:{type:"edit",mark:t.mark,kind:t.kind,...typeof t.text=="string"?{text:t.text}:{}};case"patch":return ue(t.mark)&&we(t.text,X.text)&&we(t.previous,X.text)?{type:"patch",mark:t.mark,text:t.text,previous:t.previous}:null;case"refresh":return{type:"refresh"};case"highlight":return ue(t.mark)?{type:"highlight",mark:t.mark}:null;case"finish":return ue(t.mark)&&typeof t.save=="boolean"?{type:"finish",mark:t.mark,save:t.save}:null;default:return null}}function Ye(e,t,n,r){if(!e||typeof e!="object"||Array.isArray(e))return null;let s=Object.entries(e);if(s.length>t)return null;let i=Object.create(null);for(let[u,a]of s){if(!n(u)||!r(a))return null;i[u]=a}return i}var Dn=/^(?:https:\/\/[a-z0-9.-]+|http:\/\/(?:localhost|127\.0\.0\.1))(?::[0-9]{1,5})?$/;function Lt(e,t,n){return!Dn.test(t)||e.origin!==t?!1:n.parent!==void 0&&n.parent!==null&&n.parent!==n.self&&e.source===n.parent||n.opener!=null&&e.source===n.opener}function It(e){return{...Je,...e}}var Nt="#eb5c1a",Nn="#2d82cc",Un=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,Ut=["alt","title","aria-label"],_n="script, style, textarea, noscript, template, iframe, object, select, option",_t="a[href], area[href]";function et(e){let t=e.window??(typeof window>"u"?void 0:window);if(!t)return()=>{};let n=t,r=n.document,i=n.parent&&n.parent!==n.self?n.parent:n.opener;if(!i)return()=>{};let u=e.appOrigin,a=!1,d=new Map,l=new WeakMap,g=new Map,m=new WeakMap,c=Object.create(null),b=Object.create(null),x=Object.create(null),_="",D=null,k=null,N=o=>{try{i.postMessage(It(o),u)}catch{}},q=()=>`${n.location.pathname}${n.location.search}`,K=r.createElement("mapled-editor"),Z=K.attachShadow({mode:"closed"});Ae(K,{position:"fixed",inset:"0",pointerEvents:"none",zIndex:"2147483647"});let H=me(),j=me();j.style.borderStyle="dashed",j.style.borderWidth="1px";let B=me(),I=r.createElement("div");Ae(I,{position:"absolute",display:"none",padding:"3px 8px",borderRadius:"6px",font:"500 12px/16px Inter, system-ui, sans-serif",color:"#ffffff",whiteSpace:"nowrap"}),Z.append(j,H,B,I),r.documentElement.append(K);function me(){let o=r.createElement("div");return Ae(o,{position:"absolute",display:"none",border:`2px solid ${Nt}`,borderRadius:"6px",boxSizing:"border-box"}),o}function z(o,p,S=6){if(!p){o.style.display="none";return}Ae(o,{display:"block",left:`${p.x-S}px`,top:`${p.y-S}px`,width:`${p.width+S*2}px`,height:`${p.height+S*2}px`})}function ae(){if(a||k)return;let o=new Map,p=new WeakMap,S=A=>{if(o.size>=X.marks&&!o.has(A.mark.raw))return;let $=o.get(A.mark.raw)??[];$.push(A),o.set(A.mark.raw,$);let F=p.get(A.el)??[];F.push(A),p.set(A.el,F)},w=r.createTreeWalker(r.body??r.documentElement,n.NodeFilter.SHOW_TEXT,{acceptNode:A=>A.parentElement?.closest(_n)?n.NodeFilter.FILTER_REJECT:n.NodeFilter.FILTER_ACCEPT});for(let A=w.nextNode();A;A=w.nextNode()){let $=A;if(!($.data.indexOf("\u2064")<0||!$.parentElement))for(let F of _e($.data))S({mark:F,el:$.parentElement,node:$})}for(let A of Ut)for(let $ of Array.from(r.querySelectorAll(`[${A}]`))){let F=$.getAttribute(A)??"";if(F.indexOf("\u2064")>=0)for(let ce of _e(F))S({mark:ce,el:$,attr:A})}let P=new Map,U=new WeakMap,G=(A,$)=>{if($)for(let F of $.matchAll(Un)){let ce=F[0].toLowerCase();if(P.size>=X.assets&&!P.has(ce))return;let gt=P.get(ce)??[];gt.push(A),P.set(ce,gt),U.has(A)||U.set(A,ce)}};for(let A of Array.from(r.images)){G(A,A.getAttribute("src")),G(A,A.getAttribute("srcset"));let $=A.parentElement?.tagName==="PICTURE"?A.parentElement:null;if($)for(let F of Array.from($.querySelectorAll("source")))G(A,F.getAttribute("srcset"))}for(let A of Array.from(r.querySelectorAll("[style*='background']")))G(A,A.style.backgroundImage);d=o,l=p,g=P,m=U;let oe={type:"marks",path:q(),marks:[...d.keys()],assets:[...g.keys()]},R=JSON.stringify(oe);R!==_&&(_=R,N(oe)),D&&h()}function le(o){let p=o instanceof n.Element?o:null;for(;p&&p!==r.documentElement;p=p.parentElement){let S=l.get(p)?.filter(P=>c[P.mark.raw]==="page"||c[P.mark.raw]==="cms"),w=m.get(p);if(w&&b[w]&&(!S||S.every(P=>P.attr==="alt")))return{asset:w,el:p};if(S&&S.length>0)return{places:S,el:p}}return null}function ge(o){let p=Qe(o.mark);if(!p)return null;let S=[];for(let w of d.values())for(let P of w)Qe(P.mark)===p&&S.push(P.el);return Fn(S)}let $e=o=>!!o.node&&o.el.childNodes.length===1&&o.node.data.endsWith(o.mark.raw)&&_e(o.node.data).length===1,V=o=>{let p=o.getBoundingClientRect();return{x:p.left,y:p.top,width:p.width,height:p.height}};function Le(o){if(!o||k){z(H,null),z(j,null),I.style.display="none";return}let p=o.places?.[0],S=p?.mark.via!==void 0,w=p?c[p.mark.raw]:o.asset?b[o.asset]:void 0,P=S?Nn:Nt,U=V(o.el);H.style.borderColor=P,z(H,U);let G=p?ge(p):null;G&&G!==o.el?(j.style.borderColor=P,z(j,V(G),10)):z(j,null);let oe=(p&&x[p.mark.raw])??(o.asset?w==="cms"?"Image \u2022 from Content":"Image":w==="cms"?"From Content":S?"Component \u2022 on every page":"Text");I.textContent=oe,Ae(I,{display:"block",background:P,left:`${U.x-6}px`,top:`${Math.max(U.y-30,0)}px`})}function Ie(o){if(!o.node||k||a)return;let p=o.node.data;k={place:o,before:p},o.el.textContent=be(p),o.el.setAttribute("contenteditable","plaintext-only"),o.el.isContentEditable===!1&&o.el.setAttribute("contenteditable","true"),o.el.addEventListener("keydown",De),o.el.addEventListener("paste",ee),o.el.addEventListener("drop",se),o.el.addEventListener("input",h),o.el.focus(),z(H,null),I.style.display="none",z(B,V(o.el)),h()}function Y(o){if(!k)return;let{place:p,before:S}=k;if(k=null,p.el.removeEventListener("keydown",De),p.el.removeEventListener("paste",ee),p.el.removeEventListener("drop",se),p.el.removeEventListener("input",h),p.el.removeAttribute("contenteditable"),o){let w=(p.el.textContent??"").slice(0,X.text);p.el.textContent=w+p.mark.raw,N({type:"commit",mark:p.mark.raw,text:w})}else p.el.textContent=S,N({type:"cancel",mark:p.mark.raw});z(B,null),ae()}function De(o){o.isComposing||o.keyCode===229||(o.key==="Escape"?(o.preventDefault(),Y(!1)):o.key==="Enter"&&!o.shiftKey&&(o.preventDefault(),Y(!0)))}function he(o){let p=n.getSelection();if(!p||p.rangeCount===0||!k)return;let S=p.getRangeAt(0);if(!k.place.el.contains(S.startContainer)||!k.place.el.contains(S.endContainer))return;S.deleteContents();let w=r.createTextNode(o);S.insertNode(w),S.setStartAfter(w),S.collapse(!0),p.removeAllRanges(),p.addRange(S)}function ee(o){o.preventDefault(),he(be(o.clipboardData?.getData("text/plain")??""))}function se(o){o.preventDefault()}let ye=o=>Le(le(o.target)),ke=o=>{if(k&&k.place.el.contains(o.target))return;let p=le(o.target);if(p){o.preventDefault(),o.stopPropagation(),k&&Y(!0);let w=p.places?.[0];if(w){D={mark:w.mark.raw};let P=ge(w),U=$e(w)&&c[w.mark.raw]==="page";N({type:"select",mark:w.mark.raw,rect:V(p.el),kind:"text",editable:U,...P?{item:V(P)}:{}})}else if(p.asset){D={asset:p.asset};let P=l.get(p.el)?.find(U=>U.attr==="alt"&&(c[U.mark.raw]==="page"||c[U.mark.raw]==="cms"));N({type:"select",asset:p.asset,rect:V(p.el),kind:"image",...P?{alt:P.mark.raw}:{}})}z(B,V(p.el));return}k&&Y(!0);let S=o.target?.closest?.(_t)??null;if(S){o.preventDefault(),o.stopPropagation();try{let w=new URL(S.getAttribute("href")??"",n.location.href);w.origin===n.location.origin&&N({type:"navigate",path:`${w.pathname}${w.search}`})}catch{}}},f=o=>{o.preventDefault(),o.stopImmediatePropagation()},y=o=>{o.target?.closest?.(_t)&&(o.preventDefault(),o.stopImmediatePropagation())},v=0,h=()=>{v||(v=n.requestAnimationFrame(()=>{v=0;let o=[],p=k?{mark:k.place.mark.raw}:D;if(p?.mark)for(let S of d.get(p.mark)??[])o.push({mark:p.mark,rect:V(S.el)});if(p?.asset)for(let S of g.get(p.asset)??[])o.push({asset:p.asset,rect:V(S)});k?z(B,V(k.place.el)):o[0]&&z(B,o[0].rect),z(H,null),z(j,null),I.style.display="none",o.length>0&&N({type:"rects",items:o.slice(0,X.marks)})}))};function E(o){switch(o.type){case"init":c=o.homes,b=o.assets,x=o.labels??Object.create(null);break;case"edit":{let p=d.get(o.mark)??[];if(o.kind==="inline"){let S=c[o.mark]==="page"&&o.text!==void 0?p.find(w=>$e(w)&&be(w.node.data)===o.text):void 0;S&&!k?Ie(S):k?.place.mark.raw!==o.mark&&N({type:"cancel",mark:o.mark});break}p[0]&&z(B,V(p[0].el));break}case"finish":k&&k.place.mark.raw===o.mark&&Y(o.save);break;case"patch":{let p=!0,S=(w,P)=>{let U=w.indexOf(P),G=U-o.previous.length;return U<0||G<0||w.slice(G,U)!==o.previous?null:w.slice(0,G)+o.text+w.slice(U)};for(let w of d.get(o.mark)??[]){if(k?.place===w)continue;let P=S(w.attr?w.el.getAttribute(w.attr)??"":w.node?.data??"",w.mark.raw);P===null?p=!1:w.attr?w.el.setAttribute(w.attr,P):w.node&&(w.node.data=P)}p||e.onRefresh?.();break}case"highlight":{let p=d.get(o.mark)?.[0];p&&(p.el.scrollIntoView?.({block:"center",behavior:"smooth"}),z(B,V(p.el)));break}case"refresh":e.onRefresh?.();break}}let T=o=>{if(!Lt(o,u,{parent:n.parent,opener:n.opener,self:n.self}))return;let p=$t(o.data);p&&E(p)},O,C=0,L=new n.MutationObserver(o=>{if(o.every(S=>K.contains(S.target)))return;clearTimeout(O);let p=Date.now();C||(C=p),O=setTimeout(()=>{C=0,ae()},p-C>=1e3?0:150)});return n.addEventListener("message",T),r.addEventListener("pointermove",ye,!0),r.addEventListener("click",ke,!0),r.addEventListener("auxclick",y,!0),n.addEventListener("submit",f,!0),n.addEventListener("scroll",h,!0),n.addEventListener("resize",h),L.observe(r.documentElement,{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:["src","srcset","style",...Ut]}),N({type:"ready",sdk:e.sdk,path:q(),title:be(r.title)}),ae(),()=>{a||(k&&Y(!1),a=!0,clearTimeout(O),v&&n.cancelAnimationFrame(v),L.disconnect(),n.removeEventListener("message",T),r.removeEventListener("pointermove",ye,!0),r.removeEventListener("click",ke,!0),r.removeEventListener("auxclick",y,!0),n.removeEventListener("submit",f,!0),n.removeEventListener("scroll",h,!0),n.removeEventListener("resize",h),K.remove())}}function Qe(e){if(e.via)return`${e.via.record}:${e.via.path}`;let t=e.path.split(".");for(let n=t.length-1;n>0;n-=1)if(t[n].startsWith("@")||/^[0-9]+$/.test(t[n]))return`${e.record}:${t.slice(0,n+1).join(".")}`;return null}function Fn(e){if(e.length===0)return null;let t=e[0];for(let n of e.slice(1))for(;t&&!t.contains(n);)t=t.parentElement;return t}function Ae(e,t){Object.assign(e.style,t)}var tt=/^[a-z0-9][a-z0-9-]{0,63}$/,Ft=new Set;function Kn(e){if(typeof process<"u")return;let t=e?.aliases;if(!(!t||typeof t!="object")){for(let[n,r]of Object.entries(t))if(!(!r||typeof r!="object"||!tt.test(n)))for(let[s,i]of Object.entries(r)){if(typeof i!="string"||!tt.test(s)||!tt.test(i))continue;let u=`${n}.${s}`;Ft.has(u)||(Ft.add(u),console.warn(`[mapled] \u201C${s}\u201D in \u201C${n}\u201D was renamed to \u201C${i}\u201D. The old key keeps working until its alias is removed in Mapled \u2014 use \u201C${i}\u201D instead.`))}}}function Ht(e,t={}){let n=new URLSearchParams;t.width&&n.set("w",String(t.width)),t.height&&n.set("h",String(t.height)),t.fit&&n.set("fit",t.fit),t.format&&n.set("fmt",t.format),t.quality&&n.set("q",String(t.quality));let r=n.toString(),s=t.files?(t.files[e]??t.files[e.toLowerCase()])?.url:void 0;return typeof s=="string"&&s?r?`${s}${s.includes("?")?"&":"?"}${r}`:s:`${(t.apiUrl??"https://api.mapled.io").replace(/\/+$/,"")}/files/${encodeURIComponent(e)}${r?`?${r}`:""}`}var de=class extends Error{constructor(n,r,s){super(r);We(this,"status");We(this,"code");this.name="MapledError",this.status=n,this.code=s}},Kt=e=>Number.isInteger(e)&&e>=1,jt=()=>new Error("Mapled: release must be a positive whole number.");function Bt(e){let t=(e.apiUrl??"https://api.mapled.io").replace(/\/+$/,"");if(!e.key)throw new Error("Mapled: a delivery key is required.");if(e.release!==void 0&&!Kt(e.release))throw jt();let n=(m,c)=>(e.fetch??fetch)(m,c),r,s=new Set;async function i(){return e.draft===null?null:typeof e.draft=="string"?e.draft||null:typeof e.draft=="function"?await e.draft()||null:At({apiUrl:t,appUrl:e.appUrl,fetch:e.fetch})}async function u(m){let c=`Mapled request failed (${m.status}).`,b;try{let x=await m.json();x.error?.message&&(c=x.error.message),typeof x.error?.code=="string"&&(b=x.error.code)}catch{}return new de(m.status,c,b)}async function a(m,c,b){let x=await i(),_=b.release??e.release;if(_!==void 0&&!Kt(_))throw jt();_!==void 0&&!x&&c.set("release",String(_));let D=b.locale||e.locale;D&&c.set("locale",D);let k=c.toString(),N=await n(`${t}${m}${k?`?${k}`:""}`,{headers:x?{"x-mapled-key":e.key,"x-mapled-draft":x}:{"x-mapled-key":e.key},...x?{cache:"no-store"}:{},...b.signal?{signal:b.signal}:{}});if(!N.ok)throw await u(N);let q=await N.json();if(!x){let K=Number(N.headers.get("x-mapled-release"));if(Number.isInteger(K)&&K>=1){r=r===void 0?K:Math.min(r,K);for(let Z of s)Promise.resolve().then(()=>Z(K))}}return Kn(q),q}let d=(m,c)=>(c.expand?.length&&m.set("expand",c.expand.join(",")),c.fields?.length&&m.set("fields",c.fields.join(",")),m),l=async(m,c)=>{try{return(await a(m,d(new URLSearchParams,c),c)).record}catch(b){if(b instanceof de&&b.status===404&&b.code!=="RELEASE_NOT_FOUND")return null;throw b}};return{async getRecords(m,c={}){let b=new URLSearchParams;for(let[x,_]of Object.entries(c.filter??{}))if(_!==null&&typeof _=="object")for(let[D,k]of Object.entries(_))k!==void 0&&b.set(`filter[${x}][${D}]`,Array.isArray(k)?k.join(","):String(k));else b.set(`filter[${x}]`,String(_));return c.sort&&b.set("sort",c.sort),c.limit!==void 0&&b.set("limit",String(c.limit)),c.offset!==void 0&&b.set("offset",String(c.offset)),c.search&&b.set("search",c.search),d(b,c),a(`/v1/delivery/collections/${encodeURIComponent(m)}/records`,b,c)},getRecord(m,c,b={}){return l(`/v1/delivery/collections/${encodeURIComponent(m)}/records/${encodeURIComponent(c)}`,b)},getRecordBySlug(m,c,b={}){return l(`/v1/delivery/collections/${encodeURIComponent(m)}/records/by-slug/${encodeURIComponent(c)}`,b)},getSingle(m,c={}){return l(`/v1/delivery/singles/${encodeURIComponent(m)}`,c)},async isPreview(){return await i()!==null},watch(m,c={}){return Rt({key:e.key,apiUrl:t,interval:c.interval,onPublish:m,fetch:e.fetch},St(c.from,()=>r),b=>(s.add(b),()=>{s.delete(b)}))},async getRelease(m={}){let c=await n(`${t}/v1/delivery/release`,{headers:{"x-mapled-key":e.key},cache:"no-cache",...m.signal?{signal:m.signal}:{}});if(!c.ok)throw await u(c);let b=Xe(await c.json());if(b===void 0)throw new Error("Mapled: the release pointer didn't come back as one \u2014 check the API origin.");return b}}}var jn=/^[a-z0-9][a-z0-9_-]{0,63}$/;function Se(e){if(typeof e!="string")return null;let t=e.trim().split(".");if(t.length>8)return null;for(let n of t)if(!jn.test(n))return null;return t}var ie=(e,t)=>e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;function nt(e,t){let n=e.data,r=e.expanded,s=e.expandedBlocks;for(let i=0;i<t.length;i++){let u=t[i],a=ie(r,u);if(i===t.length-1)return{value:ie(n,u),linked:a,blocks:ie(s,u)};if(a!==void 0){if(a===null||Array.isArray(a))return{value:void 0};n=ie(a,"data"),r=ie(a,"expanded"),s=ie(a,"expandedBlocks");continue}if(n=ie(n,u),r=void 0,s=void 0,n===void 0)return{value:void 0}}return{value:n}}var Re=e=>e==null||e===""||Array.isArray(e)&&e.length===0;function rt(e){return typeof e=="string"?e:typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)&&e.every(t=>typeof t=="string"||typeof t=="number")?e.join(", "):null}var Hn=new Set(["http:","https:","mailto:","tel:"]),Bn=new Set(["http:","https:"]),zn=2048;function ne(e,t,n){if(typeof e!="string"||e.length>zn)return null;let r;try{r=new URL(e,t)}catch{return null}return!(n==="link"?Hn:Bn).has(r.protocol)||r.username!==""||r.password!==""?null:r.href}var Wn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,zt=e=>typeof e=="string"&&Wn.test(e);function Wt(e,t,n){let r=[],s=e.replace(/\{([^{}]*)\}/g,(u,a)=>{let d=Se(a);if(!d)return r.push({ok:!1,reason:"bad-path",path:a.trim().slice(0,80)}),"";let l=n(d);if(typeof l!="string"&&typeof l!="number"||l==="")return r.push({ok:!1,reason:"empty",path:d.join(".")}),"";try{return encodeURIComponent(String(l))}catch{return r.push({ok:!1,reason:"unsafe-url",path:d.join(".")}),""}});if(r[0])return r[0];let i=ne(s,t,"link");return i===null?{ok:!1,reason:"unsafe-url",path:e.slice(0,80)}:{ok:!0,url:i}}var qn=1e5,Vt=8,Gt=2048,Vn="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",qt={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:"\xA0",copy:"\xA9",reg:"\xAE",trade:"\u2122",mdash:"\u2014",ndash:"\u2013",hellip:"\u2026",laquo:"\xAB",raquo:"\xBB"};function Xt(e,t,n){let r=t.createDocumentFragment();if(typeof e!="string"||e==="")return r;let s=e.replace(/\r\n?/g,`
3
+ `).replace(/\t/g," ").replace(/\u0000/g,"\uFFFD"),i={doc:t,base:n};if(s.length>qn){for(let u of s.split(/\n{2,}/))u.trim()!==""&&(W(i,"p",r).textContent=u.trim());return r}return ct(i,s.split(`
4
+ `),r,0),r}function W(e,t,n){let r=e.doc.createElement(t);return n.appendChild(r),r}var st=e=>e.trim()==="",ve=e=>e.length-e.trimStart().length;function Zt(e){let t=ve(e);if(t>3)return null;let n=0;for(;n<7&&e[t+n]==="#";)n++;if(n===0||n>6)return null;let r=e[t+n];if(r!==void 0&&r!==" ")return null;let s=e.slice(t+n).trim(),i=s.length;for(;i>0&&s[i-1]==="#";)i--;return i<s.length&&(i===0||s[i-1]===" ")&&(s=s.slice(0,i).trim()),{level:n,text:s}}function lt(e){if(ve(e)>3)return!1;let t=e.replace(/ /g,""),n=t[0];if(t.length<3||n!=="-"&&n!=="*"&&n!=="_")return!1;for(let r of t)if(r!==n)return!1;return!0}function ot(e){let t=/^ {0,3}(`{3,}|~{3,})/.exec(e);if(!t)return null;let n=t[1][0];return n==="`"&&e.slice(t[0].length).includes("`")?null:{mark:n,size:t[1].length}}function Ee(e){let t=/^( {0,3})([-*+]|\d{1,9}[.)])( +|$)/.exec(e);if(!t)return null;let n=t[2],r=t[3].length,s=n.length>1||/\d/.test(n);return{indent:t[1].length,width:n.length+(r>=1&&r<=4?r:1),ordered:s,start:s?parseInt(n,10):1,rest:e.slice(t[0].length)}}var it=e=>/^ {0,3}>/.test(e);function Gn(e){if(Zt(e)!==null||ot(e)!==null||it(e)||lt(e))return!0;let t=Ee(e);return t!==null&&t.rest!==""&&(!t.ordered||t.start===1)}function ct(e,t,n,r){if(r>=Vt){let i=t.join(`
5
+ `).trim();i!==""&&(W(e,"p",n).textContent=i);return}let s=0;for(;s<t.length;){let i=t[s];if(st(i)){s++;continue}let u=ot(i);if(u){let g=[],m=ve(i);for(s++;s<t.length;){let c=t[s],b=ot(c);if(b&&b.mark===u.mark&&b.size>=u.size&&c.trim().length===b.size)break;g.push(c.slice(Math.min(m,ve(c)))),s++}s++,W(e,"code",W(e,"pre",n)).textContent=g.length>0?`${g.join(`
6
6
  `)}
7
- `:"";continue}let o=ht(l);if(o){ge(e,o.text,C(e,`h${o.level}`,n),r),s++;continue}if(Ue(l)){C(e,"hr",n),s++;continue}if($e(l)){let p=[];for(;s<t.length&&$e(t[s]);)p.push(t[s].replace(/^ {0,3}> ?/,"")),s++;Ne(e,p,C(e,"blockquote",n),r+1);continue}let d=re(l);if(d){s=Jt(e,t,s,d,n,r);continue}let i=[l.trimStart()];for(s++;s<t.length&&!Pe(t[s])&&!Yt(t[s]);)i.push(t[s].trimStart()),s++;ge(e,i.join(`
8
- `),C(e,"p",n),r)}}function Jt(e,t,n,r,s,l){let c=C(e,r.ordered?"ol":"ul",s);r.ordered&&r.start!==1&&c.setAttribute("start",String(r.start));let o=[],d=!1;for(;n<t.length;){let i=re(t[n]);if(!i||i.ordered!==r.ordered||i.indent!==r.indent||Ue(t[n]))break;let p=i.indent+i.width,f=[i.rest];n++;let a=!1;for(;n<t.length;){let g=t[n];if(Pe(g)){a=!0,f.push(""),n++;continue}if(se(g)<p)break;a&&f.some(R=>R!=="")&&!re(g.slice(p))&&(d=!0),a=!1,f.push(g.slice(p)),n++}for(;f.length>0&&f[f.length-1]==="";)f.pop();if(a&&n<t.length){let g=re(t[n]);g&&g.ordered===r.ordered&&g.indent===r.indent&&(d=!0)}o.push({lines:f,el:C(e,"li",c)})}for(let i of o)if(Ne(e,i.lines,i.el,l+1),!d){for(let p of Array.from(i.el.childNodes))if(p.nodeName==="P"){for(;p.firstChild;)i.el.insertBefore(p.firstChild,p);i.el.removeChild(p)}}return n}var Ie=e=>e===void 0||e===" "||e===`
9
- `,yt=e=>e!==void 0&&/[\p{L}\p{N}]/u.test(e);function me(e,t,n,r,s=""){let l=Math.min(e.length,r);for(let c=n;c<l;c++){if(e[c]===t)return c;if(s.includes(e[c]))return-1}return-1}function oe(e,t,n){let r=t;for(;e[r]===n;)r++;return r}function bt(e,t){if(e[t]==="\\")return t+2;if(e[t]==="`"){let n=oe(e,t,"`"),r=wt(e,n,n-t);return r===-1?n:r+(n-t)}return-1}function wt(e,t,n){let r=e.indexOf("`",t);for(;r!==-1;){let s=oe(e,r,"`");if(s-r===n)return r;r=e.indexOf("`",s)}return-1}function Qt(e,t,n){let r=n[0],s=t;for(;s<e.length;){let l=bt(e,s);if(l!==-1){s=l;continue}if(e[s]!==r){s++;continue}let c=oe(e,s,r),o=c-s;if((n.length===1?o===1||o>=3:o>=n.length)&&s>t&&!Ie(e[s-1])&&(r!=="_"||!yt(e[c])))return c-n.length;s=c}return-1}function en(e,t){let n=me(e,";",t+1,t+34,`
10
- &`);if(n===-1)return null;let r=e.slice(t+1,n);if(r[0]==="#"){let l=r[1]==="x"||r[1]==="X",c=r.slice(l?2:1);if(!(l?/^[0-9a-fA-F]{1,6}$/:/^[0-9]{1,7}$/).test(c))return null;let o=parseInt(c,l?16:10);return{char:o>0&&o<=1114111&&!(o>=55296&&o<=57343)?String.fromCodePoint(o):"\uFFFD",end:n+1}}let s=Object.prototype.hasOwnProperty.call(ft,r)?ft[r]:void 0;return s===void 0?null:{char:s,end:n+1}}var kt=e=>e.replace(/\\([!-/:-@[-`{-~])/g,"$1");function tn(e,t){if(e[t]!=="(")return null;let n=Math.min(e.length,t+mt+1024),r=t+1;for(;r<n&&Ie(e[r])&&e[r]!==void 0;)r++;let s="";if(e[r]==="<"){let c=me(e,">",r+1,n,`
11
- <`);if(c===-1)return null;s=e.slice(r+1,c),r=c+1}else{let c=r,o=0;for(;r<n;){let d=e[r];if(d==="\\"&&r+1<n){r+=2;continue}if(d===" "||d===`
12
- `)break;if(d==="("&&o++,d===")"){if(o===0)break;o--}r++}s=e.slice(c,r)}for(;r<n&&(e[r]===" "||e[r]===`
13
- `);)r++;let l=e[r];if(l==='"'||l==="'"||l==="("){let c=me(e,l==="("?")":l,r+1,n);if(c===-1)return null;for(r=c+1;r<n&&(e[r]===" "||e[r]===`
14
- `);)r++}return e[r]!==")"?null:{address:kt(s),end:r+1}}function Le(e,t,n=!1){let r=t+1;for(;r<e.length;){let l=bt(e,r);if(l!==-1){r=l;continue}if(!n&&e[r]==="!"&&e[r+1]==="["){let c=Le(e,r+1,!0);if(!c)return null;r=c.end;continue}if(e[r]==="[")return null;if(e[r]==="]")break;r++}if(r>=e.length)return null;let s=tn(e,r+1);return s?{label:e.slice(t+1,r),address:s.address,end:s.end}:null}var nn=/^(?:[a-z][a-z0-9+.-]{1,31}:[^\s<>]*|[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+)$/i;function ge(e,t,n,r){if(r>=pt){n.appendChild(e.doc.createTextNode(t));return}let s="",l=()=>{s!==""&&n.appendChild(e.doc.createTextNode(s)),s=""},c=new Set,o=0;for(;o<t.length;){let d=t[o];if(d==="\\"){let i=t[o+1];if(i===`
15
- `)for(l(),C(e,"br",n),o+=2;t[o]===" ";)o++;else i!==void 0&&Zt.includes(i)?(s+=i,o+=2):(s+=d,o++);continue}if(d===`
16
- `){let i=s.endsWith(" "),p=s.length;for(;p>0&&s[p-1]===" ";)p--;for(s=s.slice(0,p),i?(l(),C(e,"br",n)):s+=`
17
- `,o++;t[o]===" ";)o++;continue}if(d==="`"){let i=oe(t,o,"`"),p=wt(t,i,i-o);if(p===-1){s+=t.slice(o,i),o=i;continue}let f=t.slice(i,p).replace(/\n/g," ");f.length>1&&f.startsWith(" ")&&f.endsWith(" ")&&f.trim()!==""&&(f=f.slice(1,-1)),l(),C(e,"code",n).textContent=f,o=p+(i-o);continue}if(d==="!"&&t[o+1]==="["){let i=Le(t,o+1);if(i){let p=kt(i.label),f=H(i.address.trim(),e.base,"media");if(f===null)s+=p;else{l();let a=C(e,"img",n);a.setAttribute("src",f),a.setAttribute("alt",p),a.setAttribute("loading","lazy")}o=i.end;continue}}if(d==="["){let i=Le(t,o);if(i){let p=H(i.address.trim(),e.base,"link");l();let f=p===null?n:C(e,"a",n);p!==null&&f.setAttribute("href",p),ge(e,i.label,f,r+1),o=i.end;continue}}if(d==="<"){let i=me(t,">",o+1,o+mt,`
18
- <`),p=i===-1?null:t.slice(o+1,i);if(p!==null&&nn.test(p)){let f=H(p.includes(":")?p:`mailto:${p}`,e.base,"link");if(f!==null){l();let a=C(e,"a",n);a.setAttribute("href",f),a.textContent=p,o=i+1;continue}}}if(d==="&"){let i=en(t,o);if(i){s+=i.char,o=i.end;continue}}if(d==="*"||d==="_"||d==="~"){let i=oe(t,o,d),p=i-o,f=!Ie(t[i])&&(d!=="_"||!yt(t[o-1])),a=d==="~"?p>=2?[["~~",["del"]]]:[]:[...p>=3?[[d.repeat(3),["em","strong"]]]:[],...p>=2?[[d.repeat(2),["strong"]]]:[],[d,["em"]]],g=!1;if(f)for(let[R,O]of a){if(c.has(R))continue;let P=o+R.length,w=Qt(t,P,R);if(w===-1){c.add(R);continue}if(w===P)continue;l();let U=n;for(let N of O)U=C(e,N,U);ge(e,t.slice(P,w),U,r+1),o=w+R.length,g=!0;break}g||(s+=t.slice(o,i),o=i);continue}s+=d,o++}l()}var rn="http://www.w3.org/1999/xhtml",sn=new Set(["script","style","iframe","frame","frameset","object","embed","applet","base","link","meta","template","noscript"]),ie={href:{on:["a","area"],holds:"link"},src:{on:["img","video","audio","source"],holds:"media"},alt:{on:["img","area"],holds:"text"},title:{on:null,holds:"text"},"aria-label":{on:null,holds:"text"},placeholder:{on:["input","textarea"],holds:"text"},datetime:{on:["time","del","ins"],holds:"text"}},le=e=>e.namespaceURI===rn,he=e=>!sn.has(e.localName.toLowerCase());function Fe(e,t){if(!he(e))return"refused-element";let n=Oe(t);return n===null?"type":(e.textContent=n,null)}function St(e,t,n){return!he(e)||!le(e)?"refused-element":typeof t!="string"?"type":(e.replaceChildren(gt(t,e.ownerDocument,n.base)),null)}function Rt(e,t,n){return typeof e!="string"?null:ct(e)?at(e,{...t.apiUrl?{apiUrl:t.apiUrl}:{},...n?{width:n}:{}}):H(e,t.base,"media")}function At(e,t,n,r){if(!le(e)||e.localName!=="img")return"refused-element";if(typeof t!="string")return"type";let s=Rt(t,n,r);return s===null?"unsafe-url":(e.removeAttribute("srcset"),e.setAttribute("src",s),null)}function vt(e,t){return!he(e)||(e.localName==="img"||t==="markdown")&&!le(e)?"refused-element":null}function De(e,t){let n=t.toLowerCase(),r=Object.prototype.hasOwnProperty.call(ie,n)?ie[n]:void 0;return r?!he(e)||!le(e)?"refused-element":r.on!==null&&!r.on.includes(e.localName)?"unsupported":null:"unsupported"}function Tt(e,t,n,r,s){let l=De(e,t);if(l)return l;let c=t.toLowerCase(),o=ie[c];if(o.holds==="text"){let i=Oe(n);return i===null?"type":(e.setAttribute(c,i),null)}if(typeof n!="string")return"type";let d=o.holds==="media"?Rt(n,r,e.localName==="img"?s:void 0):H(n,r.base,"link");return d===null?"unsafe-url":(e.setAttribute(c,d),null)}function xt(e,t){return!le(e)||e.localName!=="a"&&e.localName!=="area"?"unsupported":(e.setAttribute("href",t),null)}function Z(e,t){t?e.removeAttribute("hidden"):e.setAttribute("hidden","")}var Et=["text","markdown","date","datetime","number"],on=/^\d{4}-\d{2}-\d{2}$/,ln=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/;function Mt(e,t,n){let r=n&&/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(n)?n:void 0;try{if(t==="number"){let c=typeof e=="number"?e:typeof e=="string"&&e.trim()!==""?Number(e):NaN;return Number.isFinite(c)?new Intl.NumberFormat(r).format(c):null}if(typeof e!="string"||!ln.test(e))return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let l=on.test(e);return new Intl.DateTimeFormat(r,{dateStyle:"long",...t==="datetime"&&!l?{timeStyle:"short"}:{},...l?{timeZone:"UTC"}:{}}).format(s)}catch{return null}}var S="data-mapled-",an=new Set(["bind","format","width","show","hide","link","list","each","record","slug","slug-param","sort","limit","filter","expand","empty","form","form-state","form-sent","form-failed","consent","end-preview","state","preview","key","api","live","locale","type"]),ce=/^[a-z0-9][a-z0-9_-]{0,63}$/,un=/^mk_[A-Za-z0-9_]{8,128}$/,cn=4,dn=100,Ot=2,Y=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);function ue(e,t=0){if(!Y(e))return!1;let{data:n,expanded:r,expandedBlocks:s}=e;if(!Y(n))return!1;let l=o=>Y(o)&&(t>=Ot?Object.keys(o).length===0:Object.values(o).every(d=>d===null||(Array.isArray(d)?d.every(i=>ue(i,t+1)):ue(d,t+1))));if(r!==void 0&&!l(r))return!1;if(s===void 0)return!0;if(!Y(s))return!1;let c=Object.entries(s);return t>=Ot?c.length===0:c.every(([o,d])=>{let i=Object.prototype.hasOwnProperty.call(n,o)?n[o]:void 0;return Array.isArray(d)&&(!Array.isArray(i)||d.length===i.length)&&d.every(l)})}var fn=e=>Array.isArray(e)&&e.every(t=>ue(t));function j(e){let t=e.getAttribute("id");return`${e.localName}${t&&/^[\w-]{1,40}$/.test(t)?`#${t}`:""}`}var be=e=>(e??"").split(",").map(t=>t.trim()).filter(t=>/^[a-z0-9][a-z0-9_.-]{0,127}$/.test(t));function Pt(e){let t={plain:null,typed:new Map,all:[],bad:[]};for(let n of Array.from(e.children)){if(n.localName!=="template")continue;let r=n;t.all.push(r);let s=r.getAttribute(`${S}type`);s===null?t.plain??(t.plain=r):ce.test(s.trim())?t.typed.has(s.trim())||t.typed.set(s.trim(),r):t.bad.push(r)}return t}function pn(e){let t=e.data;if(t===null||typeof t!="object"||Array.isArray(t)||!Object.prototype.hasOwnProperty.call(t,"_type"))return null;let n=t._type;return typeof n=="string"&&ce.test(n)?n:null}function _e(e,t){let n=null,r=()=>n??(n={format:"text",attrs:[],expand:[]});for(let o of Array.from(e.attributes)){if(!o.name.startsWith(S))continue;let d=o.name.slice(S.length);if(d==="bind")r().bind=o.value;else if(d.startsWith("bind-")){let i=d.slice(5);Object.prototype.hasOwnProperty.call(ie,i)?r().attrs.push([i,o.value]):t.push({path:o.value.slice(0,80),reason:"unsupported",on:`${j(e)}[${o.name.slice(0,60)}]`})}else d==="show"?r().show=o.value:d==="hide"?r().hide=o.value:d==="link"?r().link=o.value:an.has(d)||t.push({path:o.value.slice(0,80),reason:"unsupported",on:`${j(e)}[${o.name.slice(0,60)}]`})}if(!n)return null;let s=n,l=e.getAttribute(`${S}format`);l!==null&&(Et.includes(l)?s.format=l:t.push({path:l.slice(0,80),reason:"bad-path",on:`${j(e)}[${S}format]`}));let c=parseInt(e.getAttribute(`${S}width`)??"",10);return c>=16&&c<=4096&&(s.width=c),s.expand=be(e.getAttribute(`${S}expand`)),s}function mn(e,t){let n={},r=e.getAttribute(`${S}sort`);r!==null&&(/^-?[a-z0-9][a-z0-9_-]{0,63}$/.test(r.trim())?n.sort=r.trim():t.push({path:r.slice(0,80),reason:"bad-path",on:`${j(e)}[${S}sort]`}));let s=parseInt(e.getAttribute(`${S}limit`)??"",10);s>=1&&s<=100&&(n.limit=s);let l=e.getAttribute(`${S}filter`);if(l!==null)for(let o of l.split(";")){if(o.trim()==="")continue;let d=o.indexOf("="),i=d===-1?"":o.slice(0,d).trim(),p=d===-1?"":o.slice(d+1).trim();ce.test(i)&&p!==""&&p.length<=200?(n.filter??(n.filter={}))[i]=p:t.push({path:o.trim().slice(0,80),reason:"bad-path",on:`${j(e)}[${S}filter]`})}let c=be(e.getAttribute(`${S}expand`));return c.length>0&&(n.expand=c),n}function ye(e,t){let n={bound:[],eaches:[],lists:[],records:[],issues:[]},r=s=>{if(s.hasAttributes()){let l=s.getAttribute(`${S}list`),c=s.getAttribute(`${S}record`),o=s.getAttribute(`${S}each`);if(l!==null||c!==null){let i=(l??c??"").trim();if(!t)n.issues.push({path:i.slice(0,80),reason:"unsupported",on:j(s)});else if(!ce.test(i))n.issues.push({path:i.slice(0,80),reason:"bad-path",on:j(s)});else if(l!==null)n.lists.push({el:s,collection:i,options:mn(s,n.issues)});else{let p=s.getAttribute(`${S}slug-param`),f=s.getAttribute(`${S}slug`)??(p===null?null:new URLSearchParams(s.ownerDocument.location?.search??"").get(p)),a=ye(s,!0);for(let R of a.records)n.issues.push({path:R.collection,reason:"unsupported",on:j(R.el)});n.lists.push(...a.lists),n.issues.push(...a.issues);let g=_e(s,n.issues);g&&a.bound.unshift({el:s,d:g}),n.records.push({el:s,collection:i,slug:f!==null&&f.trim()!==""&&f.length<=200?f.trim():null,expand:be(s.getAttribute(`${S}expand`)),block:{...a,lists:[],records:[],issues:[]}})}return}if(o!==null){n.eaches.push({el:s,path:o});return}let d=_e(s,n.issues);d&&n.bound.push({el:s,d})}for(let l of Array.from(s.children))r(l)};for(let s of Array.from(e.children))r(s);return n}function Ct(e){let t=new Map,n=(r,s=[])=>{let l=te(r)?.[0];if(!l)return;let c=t.get(l)??new Set;for(let o of s)c.add(o);t.set(l,c)};for(let{d:r}of e.bound){n(r.bind,r.expand);for(let[,s]of r.attrs)n(s,r.expand);n(r.show,r.expand),n(r.hide,r.expand);for(let s of(r.link??"").matchAll(/\{([^{}]*)\}/g))n(s[1],r.expand)}for(let r of e.eaches)n(r.path,be(r.el.getAttribute(`${S}expand`)));return t}function ae(e,t){let n=te(t);if(!n)return{status:"bad-path"};if(e.kind==="record")return{status:"value",...Me(e.source,n)};if(n.length<2)return{status:"bad-path"};let r=e.singles.get(n[0]);return!r||r.status!=="ok"?{status:r?.status==="failed"?"failed":"missing"}:{status:"value",...Me(r.value,n.slice(1))}}function je(e){if(typeof e?.key!="string"||!un.test(e.key))throw new Error("Mapled: data-mapled-key takes the delivery key (mk_\u2026) \u2014 the one key that is safe in a page. A server key or a secret never goes into HTML.");if(typeof document>"u")throw new Error("Mapled: @mapled/vanilla fills a page \u2014 it runs in a browser. On a server read with @mapled/client.");let t=e.root??document.documentElement,n=t.ownerDocument,r=ut({key:e.key,apiUrl:e.apiUrl,appUrl:e.appUrl,fetch:e.fetch,...e.locale?{locale:e.locale}:{}}),s={apiUrl:e.apiUrl,base:n.baseURI},l=new Map,c=u=>{let m=l.get(u);return m||l.set(u,m={attrs:new Map}),m},o=u=>{let m=c(u);m.nodes??(m.nodes=Array.from(u.childNodes))},d=(u,m)=>{let A=c(u);A.attrs.has(m)||A.attrs.set(m,u.getAttribute(m))},i=()=>{for(let[u,m]of l){m.nodes&&u.replaceChildren(...m.nodes);for(let[A,h]of m.attrs)h===null?u.removeAttribute(A):u.setAttribute(A,h)}l.clear()},p=[],f=0,a=(u,m,A)=>p.push({path:(m??"").trim().slice(0,120),reason:A,on:j(u)});function g(u,m,A){if(m.bind!==void 0){let h=ae(A,m.bind),y=vt(u,m.format);if(h.status!=="value")a(u,m.bind,h.status);else if(y)a(u,m.bind,y);else{let k=u.localName==="img";if(k?(d(u,"src"),d(u,"srcset"),d(u,"hidden")):o(u),ne(h.value))k?Z(u,!1):u.textContent="",a(u,m.bind,"empty");else{let v;if(k)v=At(u,h.value,s,m.width);else if(m.format==="markdown")v=St(u,h.value,s);else if(m.format==="text")v=Fe(u,h.value);else{let T=Mt(h.value,m.format,u.closest("[lang]")?.getAttribute("lang")??void 0);v=T===null?"type":Fe(u,T)}v?a(u,m.bind,v):f++}}}for(let[h,y]of m.attrs){let k=ae(A,y);if(k.status!=="value"){a(u,y,k.status);continue}let v=De(u,h);if(v){a(u,y,v);continue}if(d(u,h),ne(k.value)){h==="alt"?u.setAttribute("alt",""):u.removeAttribute(h),a(u,y,"empty");continue}let T=u.getAttribute(h),x=Tt(u,h,k.value,s,m.width);x?(T===null&&u.removeAttribute(h),a(u,y,x)):f++}for(let[h,y]of[[m.show,!0],[m.hide,!1]]){if(h===void 0)continue;let k=ae(A,h);if(k.status!=="value"){a(u,h,k.status);continue}d(u,"hidden");let v=!ne(k.value)&&k.value!==!1;Z(u,v===y),f++}if(m.link!==void 0){let h=[],y=dt(m.link,s.base,k=>{let v=ae(A,k.join("."));if(v.status==="value")return v.value;h.push(v.status)});if(h[0])a(u,m.link,h[0]);else if(!y.ok)a(u,y.path,y.reason);else{d(u,"href");let k=xt(u,y.url);k?a(u,m.link,k):f++}}}function R(u,m,A,h,y){let k=Pt(u);for(let E of k.bad)a(E,E.getAttribute(`${S}type`)??"","bad-path");if(!k.plain&&k.typed.size===0){a(u,"template","unsupported");return}o(u);let v=[...k.all];for(let E of Array.from(u.children))E.hasAttribute(`${S}empty`)&&(d(E,"hidden"),Z(E,m.length===0),v.push(E));let T=[],x=!1;for(let E of m.slice(0,dn)){let ee=y?pn(E):null,G=(ee===null?void 0:k.typed.get(ee))??k.plain;if(!G){x=!0;continue}let X=G.content.cloneNode(!0);O(ye(X,!1),{kind:"record",source:E},A+1),T.push(...Array.from(X.childNodes))}x&&a(u,h,"no-template"),u.replaceChildren(...v,...T),f++}function O(u,m,A){p.push(...u.issues);for(let{el:h,d:y}of u.bound)g(h,y,m);for(let h of u.eaches){let y=ae(m,h.path);if(y.status!=="value"){a(h.el,h.path,y.status);continue}if(A>=cn){a(h.el,h.path,"unsupported");continue}if(y.linked!==void 0){let x=Array.isArray(y.linked)?y.linked:y.linked===null?[]:[y.linked];x.length===0&&a(h.el,h.path,"empty"),R(h.el,x,A,h.path,!1);continue}let k=y.value,v=Array.isArray(k)?k:ne(k)?[]:[k];if(v.some(x=>!Y(x))){a(h.el,h.path,"type");continue}v.length===0&&a(h.el,h.path,"empty");let T=Array.isArray(k)&&Array.isArray(y.blocks)?y.blocks:[];R(h.el,v.map((x,E)=>Y(T[E])?{data:x,expanded:T[E]}:{data:x}),A,h.path,!0)}}async function P(u,m){try{let A=await u();return A===null?{status:"missing"}:m(A)?{status:"ok",value:A}:{status:"failed",answered:!0}}catch(A){return A instanceof V&&A.status===404&&A.code!=="RELEASE_NOT_FOUND"?{status:"missing"}:{status:"failed"}}}let w=null,U="",N=null,L,W=!1,I=0,F=-1,J=3,$=typeof e.live=="number"?e.live:void 0;function Ke(){i(),w={state:"fallback",release:null,preview:!1,bound:0,issues:[]},t.setAttribute(`${S}state`,"fallback"),t.removeAttribute(`${S}preview`)}function Be(){I++,clearTimeout(L),w?.preview&&Ke()}function Ut(){clearTimeout(L);let u=B();if(!u||W)return;let m=Date.parse(u.expiresAt)-Date.now();L=setTimeout(()=>{B()===null&&Be(),ke()},Math.min(Math.max(m,0)+1,2147483647))}async function He(u,m=1){let A=w===null;A&&t.setAttribute(`${S}state`,"loading");let h=I,y=await r.isPreview().catch(()=>!1),k=y?B()?.draftToken??null:null;if(w!==null&&w.preview&&!y&&Ke(),!y&&u!==void 0&&w!==null&&w.state==="ready"&&!w.preview&&w.release!==null&&u<=w.release)return w;let v=b=>{w=b,F=h,t.setAttribute(`${S}state`,b.state),t.toggleAttribute(`${S}preview`,b.preview);let M=b.issues.filter(_=>_.reason!=="empty"),D=M.map(_=>`${_.path} (${_.reason}) on ${_.on}`).join("; ");return D!==U&&(U=D,M.length>0&&console.warn(`[mapled] ${M.length===1?"1 place":`${M.length} places`} couldn't be filled: ${D}`)),n.dispatchEvent(new CustomEvent(A?"mapled:ready":"mapled:update",{detail:b})),b.preview?Ut():(clearTimeout(L),e.live&&N===null&&(N=r.watch(_=>{ke(_.release)},{interval:$,from:b.state==="ready"?b.release:null}))),b},T=null;if(!y)if(u!==void 0)T=u;else try{let b=await r.getRelease();if(b===null)return i(),v({state:"unpublished",release:null,preview:y,bound:0,issues:[]});T=b.release}catch{return w!==null&&w.state==="ready"?w:v({state:"fallback",release:null,preview:y,bound:0,issues:[]})}let x=T===null?{}:{release:T},E=ye(t,!0),ee=_e(t,E.issues);ee&&E.bound.unshift({el:t,d:ee});let G=new Map,X=new Map,de=new Map,fe=[];for(let[b,M]of Ct(E))fe.push(P(()=>r.getSingle(b,{...x,...M.size>0?{expand:[...M]}:{}}),ue).then(D=>G.set(b,D)));for(let b of E.lists){let M=Pt(b.el).plain,D=M?[...Ct(ye(M.content,!1)).keys()]:[];fe.push(P(async()=>(await r.getRecords(b.collection,{...b.options,...x,...D.length>0?{fields:D}:{}})).records,fn).then(_=>X.set(b,_)))}for(let b of E.records){if(b.slug===null){de.set(b,{status:"missing"});continue}let M=b.slug;fe.push(P(()=>r.getRecordBySlug(b.collection,M,{...x,...b.expand.length>0?{expand:b.expand}:{}}),ue).then(D=>de.set(b,D)))}await Promise.all(fe);let Ve=await r.isPreview().catch(()=>!1)?B()?.draftToken??null:null;if(h!==I||Ve!==k)return m<J?He(u,m+1):(i(),v({state:"fallback",release:null,preview:Ve!==null,bound:0,issues:[]}));let Ze=[...G.values(),...X.values(),...de.values()];if(Ze.length>0&&Ze.every(b=>b.status==="failed"&&!b.answered))return w!==null&&w.state==="ready"?w:v({state:"fallback",release:T,preview:y,bound:0,issues:[]});i(),p=[],f=0,O(E,{kind:"page",singles:G},0);for(let b of E.lists){let M=X.get(b);M?.status==="ok"?R(b.el,M.value,0,b.collection,!1):a(b.el,b.collection,M?.status??"failed")}for(let b of E.records){let M=de.get(b);M?.status==="ok"?O(b.block,{kind:"record",source:M.value},0):a(b.el,b.collection,M?.status??"failed")}return We(),v({state:"ready",release:T,preview:y,bound:f,issues:p})}let qe=new WeakSet,ze=new WeakSet;function We(){for(let u of Array.from(t.querySelectorAll(`form[${S}form]`)))qe.has(u)||(qe.add(u),u.addEventListener("submit",m=>{m.preventDefault(),Nt(u)}))}async function Nt(u){if(u.getAttribute(`${S}form-state`)==="sending")return;let m=(u.getAttribute(`${S}form`)??"").trim(),A=u.querySelector(`[${S}form-sent]`),h=u.querySelector(`[${S}form-failed]`),y=Array.from(u.querySelectorAll("button, input[type=submit]")).filter(x=>!x.disabled);u.setAttribute(`${S}form-state`,"sending");for(let x of y)x.disabled=!0;let k=u.querySelector(`input[type=checkbox][${S}consent]`),v=k?.checked?(k.labels?.[0]?.textContent??k.closest("label")?.textContent??"").trim().slice(0,500):"",T=ce.test(m)?await xe(m,u,{key:e.key,apiUrl:e.apiUrl,fetch:e.fetch,...v?{consent:v}:{}}):{ok:!1,status:0,code:"BAD_FORM",message:"This form isn't set up yet."};for(let x of y)x.disabled=!1;u.setAttribute(`${S}form-state`,T.ok?"sent":"failed"),T.ok&&u.reset(),A&&Z(A,T.ok),h&&(!T.ok&&(ze.has(h)||(h.textContent??"").trim()==="")&&(ze.add(h),h.textContent=T.message),Z(h,!T.ok)),n.dispatchEvent(new CustomEvent("mapled:form",{detail:T.ok?{form:m,ok:!0}:{form:m,ok:!1,status:T.status,code:T.code}}))}We();let we=async u=>{try{return await He(u)}catch(m){return console.error(`[mapled] ${m instanceof Error?m.message:"The page couldn't be filled."}`),w??{state:"fallback",release:null,preview:!1,bound:0,issues:[]}}},Q=we(),ke=u=>Q=Q.then(()=>we(u)),Ge=()=>{ve(),Be();let u=I;return Q=Q.then(()=>F>=u&&w!==null?w:we())},Xe=u=>{u.target?.closest?.(`[${S}end-preview]`)&&(u.preventDefault(),Ge())};return n.addEventListener("click",Xe),{ready:Q,get report(){return w},refresh:()=>ke(),endPreview:Ge,stop:()=>{W=!0,N?.(),N=()=>{},clearTimeout(L),n.removeEventListener("click",Xe)},client:r}}var $t="0.3.0";var Lt={version:$t,mount:je,page:null};window.Mapled=Lt;var q=document.currentScript;if(q instanceof HTMLScriptElement&&q.hasAttribute("data-mapled-key")){let e=q.getAttribute("data-mapled-live"),t=e===null?NaN:parseInt(e,10),n=()=>{try{Lt.page=je({key:q.getAttribute("data-mapled-key")??"",...q.getAttribute("data-mapled-api")?{apiUrl:q.getAttribute("data-mapled-api")}:{},...q.getAttribute("data-mapled-locale")?{locale:q.getAttribute("data-mapled-locale")}:{},...e===null?{}:{live:Number.isFinite(t)?t:!0}})}catch(r){console.error(r instanceof Error?r.message:"Mapled couldn't start.")}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",n,{once:!0}):n()}})();
7
+ `:"";continue}let a=Zt(i);if(a){Ke(e,a.text,W(e,`h${a.level}`,n),r),s++;continue}if(lt(i)){W(e,"hr",n),s++;continue}if(it(i)){let g=[];for(;s<t.length&&it(t[s]);)g.push(t[s].replace(/^ {0,3}> ?/,"")),s++;ct(e,g,W(e,"blockquote",n),r+1);continue}let d=Ee(i);if(d){s=Xn(e,t,s,d,n,r);continue}let l=[i.trimStart()];for(s++;s<t.length&&!st(t[s])&&!Gn(t[s]);)l.push(t[s].trimStart()),s++;Ke(e,l.join(`
8
+ `),W(e,"p",n),r)}}function Xn(e,t,n,r,s,i){let u=W(e,r.ordered?"ol":"ul",s);r.ordered&&r.start!==1&&u.setAttribute("start",String(r.start));let a=[],d=!1;for(;n<t.length;){let l=Ee(t[n]);if(!l||l.ordered!==r.ordered||l.indent!==r.indent||lt(t[n]))break;let g=l.indent+l.width,m=[l.rest];n++;let c=!1;for(;n<t.length;){let b=t[n];if(st(b)){c=!0,m.push(""),n++;continue}if(ve(b)<g)break;c&&m.some(x=>x!=="")&&!Ee(b.slice(g))&&(d=!0),c=!1,m.push(b.slice(g)),n++}for(;m.length>0&&m[m.length-1]==="";)m.pop();if(c&&n<t.length){let b=Ee(t[n]);b&&b.ordered===r.ordered&&b.indent===r.indent&&(d=!0)}a.push({lines:m,el:W(e,"li",u)})}for(let l of a)if(ct(e,l.lines,l.el,i+1),!d){for(let g of Array.from(l.el.childNodes))if(g.nodeName==="P"){for(;g.firstChild;)l.el.insertBefore(g.firstChild,g);l.el.removeChild(g)}}return n}var ut=e=>e===void 0||e===" "||e===`
9
+ `,Yt=e=>e!==void 0&&/[\p{L}\p{N}]/u.test(e);function Fe(e,t,n,r,s=""){let i=Math.min(e.length,r);for(let u=n;u<i;u++){if(e[u]===t)return u;if(s.includes(e[u]))return-1}return-1}function Te(e,t,n){let r=t;for(;e[r]===n;)r++;return r}function Jt(e,t){if(e[t]==="\\")return t+2;if(e[t]==="`"){let n=Te(e,t,"`"),r=Qt(e,n,n-t);return r===-1?n:r+(n-t)}return-1}function Qt(e,t,n){let r=e.indexOf("`",t);for(;r!==-1;){let s=Te(e,r,"`");if(s-r===n)return r;r=e.indexOf("`",s)}return-1}function Zn(e,t,n){let r=n[0],s=t;for(;s<e.length;){let i=Jt(e,s);if(i!==-1){s=i;continue}if(e[s]!==r){s++;continue}let u=Te(e,s,r),a=u-s;if((n.length===1?a===1||a>=3:a>=n.length)&&s>t&&!ut(e[s-1])&&(r!=="_"||!Yt(e[u])))return u-n.length;s=u}return-1}function Yn(e,t){let n=Fe(e,";",t+1,t+34,`
10
+ &`);if(n===-1)return null;let r=e.slice(t+1,n);if(r[0]==="#"){let i=r[1]==="x"||r[1]==="X",u=r.slice(i?2:1);if(!(i?/^[0-9a-fA-F]{1,6}$/:/^[0-9]{1,7}$/).test(u))return null;let a=parseInt(u,i?16:10);return{char:a>0&&a<=1114111&&!(a>=55296&&a<=57343)?String.fromCodePoint(a):"\uFFFD",end:n+1}}let s=Object.prototype.hasOwnProperty.call(qt,r)?qt[r]:void 0;return s===void 0?null:{char:s,end:n+1}}var en=e=>e.replace(/\\([!-/:-@[-`{-~])/g,"$1");function Jn(e,t){if(e[t]!=="(")return null;let n=Math.min(e.length,t+Gt+1024),r=t+1;for(;r<n&&ut(e[r])&&e[r]!==void 0;)r++;let s="";if(e[r]==="<"){let u=Fe(e,">",r+1,n,`
11
+ <`);if(u===-1)return null;s=e.slice(r+1,u),r=u+1}else{let u=r,a=0;for(;r<n;){let d=e[r];if(d==="\\"&&r+1<n){r+=2;continue}if(d===" "||d===`
12
+ `)break;if(d==="("&&a++,d===")"){if(a===0)break;a--}r++}s=e.slice(u,r)}for(;r<n&&(e[r]===" "||e[r]===`
13
+ `);)r++;let i=e[r];if(i==='"'||i==="'"||i==="("){let u=Fe(e,i==="("?")":i,r+1,n);if(u===-1)return null;for(r=u+1;r<n&&(e[r]===" "||e[r]===`
14
+ `);)r++}return e[r]!==")"?null:{address:en(s),end:r+1}}function at(e,t,n=!1){let r=t+1;for(;r<e.length;){let i=Jt(e,r);if(i!==-1){r=i;continue}if(!n&&e[r]==="!"&&e[r+1]==="["){let u=at(e,r+1,!0);if(!u)return null;r=u.end;continue}if(e[r]==="[")return null;if(e[r]==="]")break;r++}if(r>=e.length)return null;let s=Jn(e,r+1);return s?{label:e.slice(t+1,r),address:s.address,end:s.end}:null}var Qn=/^(?:[a-z][a-z0-9+.-]{1,31}:[^\s<>]*|[^\s<>@]+@[^\s<>@]+\.[^\s<>@]+)$/i;function Ke(e,t,n,r){if(r>=Vt){n.appendChild(e.doc.createTextNode(t));return}let s="",i=()=>{s!==""&&n.appendChild(e.doc.createTextNode(s)),s=""},u=new Set,a=0;for(;a<t.length;){let d=t[a];if(d==="\\"){let l=t[a+1];if(l===`
15
+ `)for(i(),W(e,"br",n),a+=2;t[a]===" ";)a++;else l!==void 0&&Vn.includes(l)?(s+=l,a+=2):(s+=d,a++);continue}if(d===`
16
+ `){let l=s.endsWith(" "),g=s.length;for(;g>0&&s[g-1]===" ";)g--;for(s=s.slice(0,g),l?(i(),W(e,"br",n)):s+=`
17
+ `,a++;t[a]===" ";)a++;continue}if(d==="`"){let l=Te(t,a,"`"),g=Qt(t,l,l-a);if(g===-1){s+=t.slice(a,l),a=l;continue}let m=t.slice(l,g).replace(/\n/g," ");m.length>1&&m.startsWith(" ")&&m.endsWith(" ")&&m.trim()!==""&&(m=m.slice(1,-1)),i(),W(e,"code",n).textContent=m,a=g+(l-a);continue}if(d==="!"&&t[a+1]==="["){let l=at(t,a+1);if(l){let g=en(l.label),m=ne(l.address.trim(),e.base,"media");if(m===null)s+=g;else{i();let c=W(e,"img",n);c.setAttribute("src",m),c.setAttribute("alt",g),c.setAttribute("loading","lazy")}a=l.end;continue}}if(d==="["){let l=at(t,a);if(l){let g=ne(l.address.trim(),e.base,"link");i();let m=g===null?n:W(e,"a",n);g!==null&&m.setAttribute("href",g),Ke(e,l.label,m,r+1),a=l.end;continue}}if(d==="<"){let l=Fe(t,">",a+1,a+Gt,`
18
+ <`),g=l===-1?null:t.slice(a+1,l);if(g!==null&&Qn.test(g)){let m=ne(g.includes(":")?g:`mailto:${g}`,e.base,"link");if(m!==null){i();let c=W(e,"a",n);c.setAttribute("href",m),c.textContent=g,a=l+1;continue}}}if(d==="&"){let l=Yn(t,a);if(l){s+=l.char,a=l.end;continue}}if(d==="*"||d==="_"||d==="~"){let l=Te(t,a,d),g=l-a,m=!ut(t[l])&&(d!=="_"||!Yt(t[a-1])),c=d==="~"?g>=2?[["~~",["del"]]]:[]:[...g>=3?[[d.repeat(3),["em","strong"]]]:[],...g>=2?[[d.repeat(2),["strong"]]]:[],[d,["em"]]],b=!1;if(m)for(let[x,_]of c){if(u.has(x))continue;let D=a+x.length,k=Zn(t,D,x);if(k===-1){u.add(x);continue}if(k===D)continue;i();let N=n;for(let q of _)N=W(e,q,N);Ke(e,t.slice(D,k),N,r+1),a=k+x.length,b=!0;break}b||(s+=t.slice(a,l),a=l);continue}s+=d,a++}i()}var er="http://www.w3.org/1999/xhtml",tr=new Set(["script","style","iframe","frame","frameset","object","embed","applet","base","link","meta","template","noscript"]),xe={href:{on:["a","area"],holds:"link"},src:{on:["img","video","audio","source"],holds:"media"},alt:{on:["img","area"],holds:"text"},title:{on:null,holds:"text"},"aria-label":{on:null,holds:"text"},placeholder:{on:["input","textarea"],holds:"text"},datetime:{on:["time","del","ins"],holds:"text"}},Me=e=>e.namespaceURI===er,je=e=>!tr.has(e.localName.toLowerCase());function dt(e,t){if(!je(e))return"refused-element";let n=rt(t);return n===null?"type":(e.textContent=n,null)}function tn(e,t,n){return!je(e)||!Me(e)?"refused-element":typeof t!="string"?"type":(e.replaceChildren(Xt(t,e.ownerDocument,n.base)),null)}function nn(e,t,n){return typeof e!="string"?null:zt(e)?Ht(e,{...t.apiUrl?{apiUrl:t.apiUrl}:{},...n?{width:n}:{}}):ne(e,t.base,"media")}function rn(e,t,n,r){if(!Me(e)||e.localName!=="img")return"refused-element";if(typeof t!="string")return"type";let s=nn(t,n,r);return s===null?"unsafe-url":(e.removeAttribute("srcset"),e.setAttribute("src",s),null)}function sn(e,t){return!je(e)||(e.localName==="img"||t==="markdown")&&!Me(e)?"refused-element":null}function ft(e,t){let n=t.toLowerCase(),r=Object.prototype.hasOwnProperty.call(xe,n)?xe[n]:void 0;return r?!je(e)||!Me(e)?"refused-element":r.on!==null&&!r.on.includes(e.localName)?"unsupported":null:"unsupported"}function on(e,t,n,r,s){let i=ft(e,t);if(i)return i;let u=t.toLowerCase(),a=xe[u];if(a.holds==="text"){let l=rt(n);return l===null?"type":(e.setAttribute(u,l),null)}if(typeof n!="string")return"type";let d=a.holds==="media"?nn(n,r,e.localName==="img"?s:void 0):ne(n,r.base,"link");return d===null?"unsafe-url":(e.setAttribute(u,d),null)}function an(e,t){return!Me(e)||e.localName!=="a"&&e.localName!=="area"?"unsupported":(e.setAttribute("href",t),null)}function fe(e,t){t?e.removeAttribute("hidden"):e.setAttribute("hidden","")}var ln=["text","markdown","date","datetime","number"],nr=/^\d{4}-\d{2}-\d{2}$/,rr=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/;function cn(e,t,n){let r=n&&/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(n)?n:void 0;try{if(t==="number"){let u=typeof e=="number"?e:typeof e=="string"&&e.trim()!==""?Number(e):NaN;return Number.isFinite(u)?new Intl.NumberFormat(r).format(u):null}if(typeof e!="string"||!rr.test(e))return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let i=nr.test(e);return new Intl.DateTimeFormat(r,{dateStyle:"long",...t==="datetime"&&!i?{timeStyle:"short"}:{},...i?{timeZone:"UTC"}:{}}).format(s)}catch{return null}}var He="0.4.0";var M="data-mapled-",sr=new Set(["bind","format","width","show","hide","link","list","each","record","slug","slug-param","sort","limit","filter","expand","empty","form","form-state","form-sent","form-failed","consent","end-preview","state","preview","key","api","live","locale","type"]),Ce=/^[a-z0-9][a-z0-9_-]{0,63}$/,or=/^mk_[A-Za-z0-9_]{8,128}$/,ir=4,ar=100,un=2,pe=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);function Pe(e,t=0){if(!pe(e))return!1;let{data:n,expanded:r,expandedBlocks:s}=e;if(!pe(n))return!1;let i=a=>pe(a)&&(t>=un?Object.keys(a).length===0:Object.values(a).every(d=>d===null||(Array.isArray(d)?d.every(l=>Pe(l,t+1)):Pe(d,t+1))));if(r!==void 0&&!i(r))return!1;if(s===void 0)return!0;if(!pe(s))return!1;let u=Object.entries(s);return t>=un?u.length===0:u.every(([a,d])=>{let l=Object.prototype.hasOwnProperty.call(n,a)?n[a]:void 0;return Array.isArray(d)&&(!Array.isArray(l)||d.length===l.length)&&d.every(i)})}var lr=e=>Array.isArray(e)&&e.every(t=>Pe(t));function Q(e){let t=e.getAttribute("id");return`${e.localName}${t&&/^[\w-]{1,40}$/.test(t)?`#${t}`:""}`}var ze=e=>(e??"").split(",").map(t=>t.trim()).filter(t=>/^[a-z0-9][a-z0-9_.-]{0,127}$/.test(t));function dn(e){let t={plain:null,typed:new Map,all:[],bad:[]};for(let n of Array.from(e.children)){if(n.localName!=="template")continue;let r=n;t.all.push(r);let s=r.getAttribute(`${M}type`);s===null?t.plain??(t.plain=r):Ce.test(s.trim())?t.typed.has(s.trim())||t.typed.set(s.trim(),r):t.bad.push(r)}return t}function cr(e){let t=e.data;if(t===null||typeof t!="object"||Array.isArray(t)||!Object.prototype.hasOwnProperty.call(t,"_type"))return null;let n=t._type;return typeof n=="string"&&Ce.test(n)?n:null}function pt(e,t){let n=null,r=()=>n??(n={format:"text",attrs:[],expand:[]});for(let a of Array.from(e.attributes)){if(!a.name.startsWith(M))continue;let d=a.name.slice(M.length);if(d==="bind")r().bind=a.value;else if(d.startsWith("bind-")){let l=d.slice(5);Object.prototype.hasOwnProperty.call(xe,l)?r().attrs.push([l,a.value]):t.push({path:a.value.slice(0,80),reason:"unsupported",on:`${Q(e)}[${a.name.slice(0,60)}]`})}else d==="show"?r().show=a.value:d==="hide"?r().hide=a.value:d==="link"?r().link=a.value:sr.has(d)||t.push({path:a.value.slice(0,80),reason:"unsupported",on:`${Q(e)}[${a.name.slice(0,60)}]`})}if(!n)return null;let s=n,i=e.getAttribute(`${M}format`);i!==null&&(ln.includes(i)?s.format=i:t.push({path:i.slice(0,80),reason:"bad-path",on:`${Q(e)}[${M}format]`}));let u=parseInt(e.getAttribute(`${M}width`)??"",10);return u>=16&&u<=4096&&(s.width=u),s.expand=ze(e.getAttribute(`${M}expand`)),s}function ur(e,t){let n={},r=e.getAttribute(`${M}sort`);r!==null&&(/^-?[a-z0-9][a-z0-9_-]{0,63}$/.test(r.trim())?n.sort=r.trim():t.push({path:r.slice(0,80),reason:"bad-path",on:`${Q(e)}[${M}sort]`}));let s=parseInt(e.getAttribute(`${M}limit`)??"",10);s>=1&&s<=100&&(n.limit=s);let i=e.getAttribute(`${M}filter`);if(i!==null)for(let a of i.split(";")){if(a.trim()==="")continue;let d=a.indexOf("="),l=d===-1?"":a.slice(0,d).trim(),g=d===-1?"":a.slice(d+1).trim();Ce.test(l)&&g!==""&&g.length<=200?(n.filter??(n.filter={}))[l]=g:t.push({path:a.trim().slice(0,80),reason:"bad-path",on:`${Q(e)}[${M}filter]`})}let u=ze(e.getAttribute(`${M}expand`));return u.length>0&&(n.expand=u),n}function Be(e,t){let n={bound:[],eaches:[],lists:[],records:[],issues:[]},r=s=>{if(s.hasAttributes()){let i=s.getAttribute(`${M}list`),u=s.getAttribute(`${M}record`),a=s.getAttribute(`${M}each`);if(i!==null||u!==null){let l=(i??u??"").trim();if(!t)n.issues.push({path:l.slice(0,80),reason:"unsupported",on:Q(s)});else if(!Ce.test(l))n.issues.push({path:l.slice(0,80),reason:"bad-path",on:Q(s)});else if(i!==null)n.lists.push({el:s,collection:l,options:ur(s,n.issues)});else{let g=s.getAttribute(`${M}slug-param`),m=s.getAttribute(`${M}slug`)??(g===null?null:new URLSearchParams(s.ownerDocument.location?.search??"").get(g)),c=Be(s,!0);for(let x of c.records)n.issues.push({path:x.collection,reason:"unsupported",on:Q(x.el)});n.lists.push(...c.lists),n.issues.push(...c.issues);let b=pt(s,n.issues);b&&c.bound.unshift({el:s,d:b}),n.records.push({el:s,collection:l,slug:m!==null&&m.trim()!==""&&m.length<=200?m.trim():null,expand:ze(s.getAttribute(`${M}expand`)),block:{...c,lists:[],records:[],issues:[]}})}return}if(a!==null){n.eaches.push({el:s,path:a});return}let d=pt(s,n.issues);d&&n.bound.push({el:s,d})}for(let i of Array.from(s.children))r(i)};for(let s of Array.from(e.children))r(s);return n}function fn(e){let t=new Map,n=(r,s=[])=>{let i=Se(r)?.[0];if(!i)return;let u=t.get(i)??new Set;for(let a of s)u.add(a);t.set(i,u)};for(let{d:r}of e.bound){n(r.bind,r.expand);for(let[,s]of r.attrs)n(s,r.expand);n(r.show,r.expand),n(r.hide,r.expand);for(let s of(r.link??"").matchAll(/\{([^{}]*)\}/g))n(s[1],r.expand)}for(let r of e.eaches)n(r.path,ze(r.el.getAttribute(`${M}expand`)));return t}function Oe(e,t){let n=Se(t);if(!n)return{status:"bad-path"};if(e.kind==="record")return{status:"value",...nt(e.source,n)};if(n.length<2)return{status:"bad-path"};let r=e.singles.get(n[0]);return!r||r.status!=="ok"?{status:r?.status==="failed"?"failed":"missing"}:{status:"value",...nt(r.value,n.slice(1))}}function mt(e){if(typeof e?.key!="string"||!or.test(e.key))throw new Error("Mapled: data-mapled-key takes the delivery key (mk_\u2026) \u2014 the one key that is safe in a page. A server key or a secret never goes into HTML.");if(typeof document>"u")throw new Error("Mapled: @mapled/vanilla fills a page \u2014 it runs in a browser. On a server read with @mapled/client.");let t=e.root??document.documentElement,n=t.ownerDocument,r=Bt({key:e.key,apiUrl:e.apiUrl,appUrl:e.appUrl,fetch:e.fetch,...e.locale?{locale:e.locale}:{}}),s={apiUrl:e.apiUrl,base:n.baseURI},i=new Map,u=f=>{let y=i.get(f);return y||i.set(f,y={attrs:new Map}),y},a=f=>{let y=u(f);y.nodes??(y.nodes=Array.from(f.childNodes))},d=(f,y)=>{let v=u(f);v.attrs.has(y)||v.attrs.set(y,f.getAttribute(y))},l=()=>{for(let[f,y]of i){y.nodes&&f.replaceChildren(...y.nodes);for(let[v,h]of y.attrs)h===null?f.removeAttribute(v):f.setAttribute(v,h)}i.clear()},g=[],m=0,c=(f,y,v)=>g.push({path:(y??"").trim().slice(0,120),reason:v,on:Q(f)});function b(f,y,v){if(y.bind!==void 0){let h=Oe(v,y.bind),E=sn(f,y.format);if(h.status!=="value")c(f,y.bind,h.status);else if(E)c(f,y.bind,E);else{let T=f.localName==="img";if(T?(d(f,"src"),d(f,"srcset"),d(f,"hidden")):a(f),Re(h.value))T?fe(f,!1):f.textContent="",c(f,y.bind,"empty");else{let O;if(T)O=rn(f,h.value,s,y.width);else if(y.format==="markdown")O=tn(f,h.value,s);else if(y.format==="text")O=dt(f,h.value);else{let C=cn(h.value,y.format,f.closest("[lang]")?.getAttribute("lang")??void 0);O=C===null?"type":dt(f,C)}O?c(f,y.bind,O):m++}}}for(let[h,E]of y.attrs){let T=Oe(v,E);if(T.status!=="value"){c(f,E,T.status);continue}let O=ft(f,h);if(O){c(f,E,O);continue}if(d(f,h),Re(T.value)){h==="alt"?f.setAttribute("alt",""):f.removeAttribute(h),c(f,E,"empty");continue}let C=f.getAttribute(h),L=on(f,h,T.value,s,y.width);L?(C===null&&f.removeAttribute(h),c(f,E,L)):m++}for(let[h,E]of[[y.show,!0],[y.hide,!1]]){if(h===void 0)continue;let T=Oe(v,h);if(T.status!=="value"){c(f,h,T.status);continue}d(f,"hidden");let O=!Re(T.value)&&T.value!==!1;fe(f,O===E),m++}if(y.link!==void 0){let h=[],E=Wt(y.link,s.base,T=>{let O=Oe(v,T.join("."));if(O.status==="value")return O.value;h.push(O.status)});if(h[0])c(f,y.link,h[0]);else if(!E.ok)c(f,E.path,E.reason);else{d(f,"href");let T=an(f,E.url);T?c(f,y.link,T):m++}}}function x(f,y,v,h,E){let T=dn(f);for(let o of T.bad)c(o,o.getAttribute(`${M}type`)??"","bad-path");if(!T.plain&&T.typed.size===0){c(f,"template","unsupported");return}a(f);let O=[...T.all];for(let o of Array.from(f.children))o.hasAttribute(`${M}empty`)&&(d(o,"hidden"),fe(o,y.length===0),O.push(o));let C=[],L=!1;for(let o of y.slice(0,ar)){let p=E?cr(o):null,S=(p===null?void 0:T.typed.get(p))??T.plain;if(!S){L=!0;continue}let w=S.content.cloneNode(!0);_(Be(w,!1),{kind:"record",source:o},v+1),C.push(...Array.from(w.childNodes))}L&&c(f,h,"no-template"),f.replaceChildren(...O,...C),m++}function _(f,y,v){g.push(...f.issues);for(let{el:h,d:E}of f.bound)b(h,E,y);for(let h of f.eaches){let E=Oe(y,h.path);if(E.status!=="value"){c(h.el,h.path,E.status);continue}if(v>=ir){c(h.el,h.path,"unsupported");continue}if(E.linked!==void 0){let L=Array.isArray(E.linked)?E.linked:E.linked===null?[]:[E.linked];L.length===0&&c(h.el,h.path,"empty"),x(h.el,L,v,h.path,!1);continue}let T=E.value,O=Array.isArray(T)?T:Re(T)?[]:[T];if(O.some(L=>!pe(L))){c(h.el,h.path,"type");continue}O.length===0&&c(h.el,h.path,"empty");let C=Array.isArray(T)&&Array.isArray(E.blocks)?E.blocks:[];x(h.el,O.map((L,o)=>pe(C[o])?{data:L,expanded:C[o]}:{data:L}),v,h.path,!0)}}async function D(f,y){try{let v=await f();return v===null?{status:"missing"}:y(v)?{status:"ok",value:v}:{status:"failed",answered:!0}}catch(v){return v instanceof de&&v.status===404&&v.code!=="RELEASE_NOT_FOUND"?{status:"missing"}:{status:"failed"}}}let k=null,N="",q=null,K,Z=!1,H=null,j=null,B=0,I=-1,me=3,z=typeof e.live=="number"?e.live:void 0;function ae(){le(!1),l(),k={state:"fallback",release:null,preview:!1,bound:0,issues:[]},t.setAttribute(`${M}state`,"fallback"),t.removeAttribute(`${M}preview`)}function le(f){let y=f&&!Z?J():null,v=n.defaultView,h=y?.mode==="edit"&&v?y.appOrigin??null:null;h!==j&&(H?.(),H=null,j=h,h&&v&&(H=et({appOrigin:h,sdk:`@mapled/vanilla@${He}`,onRefresh:()=>{se()},window:v})))}function ge(){B++,clearTimeout(K),k?.preview&&ae()}function $e(){clearTimeout(K);let f=J();if(!f||Z)return;let y=Date.parse(f.expiresAt)-Date.now();K=setTimeout(()=>{J()===null&&ge(),se()},Math.min(Math.max(y,0)+1,2147483647))}async function V(f,y=1){let v=k===null;v&&t.setAttribute(`${M}state`,"loading");let h=B,E=await r.isPreview().catch(()=>!1),T=E?J()?.draftToken??null:null;if(k!==null&&k.preview&&!E&&ae(),!E&&f!==void 0&&k!==null&&k.state==="ready"&&!k.preview&&k.release!==null&&f<=k.release)return k;let O=R=>{k=R,I=h,t.setAttribute(`${M}state`,R.state),t.toggleAttribute(`${M}preview`,R.preview);let A=R.issues.filter(F=>F.reason!=="empty"),$=A.map(F=>`${F.path} (${F.reason}) on ${F.on}`).join("; ");return $!==N&&(N=$,A.length>0&&console.warn(`[mapled] ${A.length===1?"1 place":`${A.length} places`} couldn't be filled: ${$}`)),n.dispatchEvent(new CustomEvent(v?"mapled:ready":"mapled:update",{detail:R})),le(R.preview),R.preview?$e():(clearTimeout(K),e.live&&q===null&&(q=r.watch(F=>{se(F.release)},{interval:z,from:R.state==="ready"?R.release:null}))),R},C=null;if(!E)if(f!==void 0)C=f;else try{let R=await r.getRelease();if(R===null)return l(),O({state:"unpublished",release:null,preview:E,bound:0,issues:[]});C=R.release}catch{return k!==null&&k.state==="ready"?k:O({state:"fallback",release:null,preview:E,bound:0,issues:[]})}let L=C===null?{}:{release:C},o=Be(t,!0),p=pt(t,o.issues);p&&o.bound.unshift({el:t,d:p});let S=new Map,w=new Map,P=new Map,U=[];for(let[R,A]of fn(o))U.push(D(()=>r.getSingle(R,{...L,...A.size>0?{expand:[...A]}:{}}),Pe).then($=>S.set(R,$)));for(let R of o.lists){let A=dn(R.el).plain,$=A?[...fn(Be(A.content,!1)).keys()]:[];U.push(D(async()=>(await r.getRecords(R.collection,{...R.options,...L,...$.length>0?{fields:$}:{}})).records,lr).then(F=>w.set(R,F)))}for(let R of o.records){if(R.slug===null){P.set(R,{status:"missing"});continue}let A=R.slug;U.push(D(()=>r.getRecordBySlug(R.collection,A,{...L,...R.expand.length>0?{expand:R.expand}:{}}),Pe).then($=>P.set(R,$)))}await Promise.all(U);let G=await r.isPreview().catch(()=>!1)?J()?.draftToken??null:null;if(h!==B||G!==T)return y<me?V(f,y+1):(l(),O({state:"fallback",release:null,preview:G!==null,bound:0,issues:[]}));let oe=[...S.values(),...w.values(),...P.values()];if(oe.length>0&&oe.every(R=>R.status==="failed"&&!R.answered))return k!==null&&k.state==="ready"?k:O({state:"fallback",release:C,preview:E,bound:0,issues:[]});l(),g=[],m=0,_(o,{kind:"page",singles:S},0);for(let R of o.lists){let A=w.get(R);A?.status==="ok"?x(R.el,A.value,0,R.collection,!1):c(R.el,R.collection,A?.status??"failed")}for(let R of o.records){let A=P.get(R);A?.status==="ok"?_(R.block,{kind:"record",source:A.value},0):c(R.el,R.collection,A?.status??"failed")}return Y(),O({state:"ready",release:C,preview:E,bound:m,issues:g})}let Le=new WeakSet,Ie=new WeakSet;function Y(){for(let f of Array.from(t.querySelectorAll(`form[${M}form]`)))Le.has(f)||(Le.add(f),f.addEventListener("submit",y=>{y.preventDefault(),De(f)}))}async function De(f){if(f.getAttribute(`${M}form-state`)==="sending")return;let y=(f.getAttribute(`${M}form`)??"").trim(),v=f.querySelector(`[${M}form-sent]`),h=f.querySelector(`[${M}form-failed]`),E=Array.from(f.querySelectorAll("button, input[type=submit]")).filter(L=>!L.disabled);f.setAttribute(`${M}form-state`,"sending");for(let L of E)L.disabled=!0;let T=f.querySelector(`input[type=checkbox][${M}consent]`),O=T?.checked?(T.labels?.[0]?.textContent??T.closest("label")?.textContent??"").trim().slice(0,500):"",C=Ce.test(y)?await Ze(y,f,{key:e.key,apiUrl:e.apiUrl,fetch:e.fetch,...O?{consent:O}:{}}):{ok:!1,status:0,code:"BAD_FORM",message:"This form isn't set up yet."};for(let L of E)L.disabled=!1;f.setAttribute(`${M}form-state`,C.ok?"sent":"failed"),C.ok&&f.reset(),v&&fe(v,C.ok),h&&(!C.ok&&(Ie.has(h)||(h.textContent??"").trim()==="")&&(Ie.add(h),h.textContent=C.message),fe(h,!C.ok)),n.dispatchEvent(new CustomEvent("mapled:form",{detail:C.ok?{form:y,ok:!0}:{form:y,ok:!1,status:C.status,code:C.code}}))}Y();let he=async f=>{try{return await V(f)}catch(y){return console.error(`[mapled] ${y instanceof Error?y.message:"The page couldn't be filled."}`),k??{state:"fallback",release:null,preview:!1,bound:0,issues:[]}}},ee=he(),se=f=>ee=ee.then(()=>he(f)),ye=()=>{Ge(),ge();let f=B;return ee=ee.then(()=>I>=f&&k!==null?k:he())},ke=f=>{f.target?.closest?.(`[${M}end-preview]`)&&(f.preventDefault(),ye())};return n.addEventListener("click",ke),{ready:ee,get report(){return k},refresh:()=>se(),endPreview:ye,stop:()=>{Z=!0,le(!1),q?.(),q=()=>{},clearTimeout(K),n.removeEventListener("click",ke)},client:r}}var pn={version:He,mount:mt,page:null};window.Mapled=pn;var re=document.currentScript;if(re instanceof HTMLScriptElement&&re.hasAttribute("data-mapled-key")){let e=re.getAttribute("data-mapled-live"),t=e===null?NaN:parseInt(e,10),n=()=>{try{pn.page=mt({key:re.getAttribute("data-mapled-key")??"",...re.getAttribute("data-mapled-api")?{apiUrl:re.getAttribute("data-mapled-api")}:{},...re.getAttribute("data-mapled-locale")?{locale:re.getAttribute("data-mapled-locale")}:{},...e===null?{}:{live:Number.isFinite(t)?t:!0}})}catch(r){console.error(r instanceof Error?r.message:"Mapled couldn't start.")}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",n,{once:!0}):n()}})();
@@ -1 +1 @@
1
- sha384-evhHWpu15FOXqD3S7ZXIrtTTDv71hVrOE6l9eHWeeo2NzJh4o9eE3VUkQOnkMj/R
1
+ sha384-DgnLLoT4DVtklY1XJM+nCt7FvO1tWtJxmVn4IQM4+yEpV1ttw/1uYuP50+dZN5y7
package/dist/runtime.js CHANGED
@@ -30,10 +30,11 @@
30
30
 
31
31
  Paths start at a single from the document (`home.headline`) and at the
32
32
  record inside a list, an each or a record (`title`, `author.name`). */
33
- import { createClient, endPreview, MapledError, previewSession, submitForm } from "@mapled/client";
33
+ import { createClient, endPreview, MapledError, previewSession, startEditor, submitForm } from "@mapled/client";
34
34
  import { isEmpty, parsePath, walk } from "./paths.js";
35
35
  import { ATTRIBUTES, attributeRefusal, bindRefusal, FORMATS, formatted, setVisible, writeAttribute, writeImage, writeLink, writeMarkdown, writeText } from "./sinks.js";
36
36
  import { fillTemplate } from "./url.js";
37
+ import { VERSION } from "./version.js";
37
38
  /** Why a place wasn't filled. `missing` — no such single, record or
38
39
  collection in the release; `empty` — the record is there, a value at
39
40
  this path isn't; `failed` — the read didn't come back; `bad-path` —
@@ -555,6 +556,9 @@ export function mount(options) {
555
556
  let stopWatching = null;
556
557
  let expiry;
557
558
  let stopped = false;
559
+ /** the editing overlay, while the page is open in Mapled's editor (Edit site) */
560
+ let stopEditor = null;
561
+ let editorOrigin = null;
558
562
  /** moves when preview is left: a fill that began before it commits nothing */
559
563
  let generation = 0;
560
564
  /** the generation of the last fill that committed: an exit's own fill is skipped when one already has */
@@ -566,11 +570,26 @@ export function mount(options) {
566
570
  page is as written again, and says so, before anything is asked of
567
571
  Mapled; what is published follows when it is in hand. */
568
572
  function leave() {
573
+ editor(false);
569
574
  restore();
570
575
  last = { state: "fallback", release: null, preview: false, bound: 0, issues: [] };
571
576
  root.setAttribute(`${P}state`, "fallback");
572
577
  root.removeAttribute(`${P}preview`);
573
578
  }
579
+ /** The overlay runs while the drafts shown are an editing session's, and only then. */
580
+ function editor(on) {
581
+ const session = on && !stopped ? previewSession() : null;
582
+ const view = doc.defaultView;
583
+ const origin = session?.mode === "edit" && view ? (session.appOrigin ?? null) : null;
584
+ if (origin === editorOrigin)
585
+ return;
586
+ stopEditor?.();
587
+ stopEditor = null;
588
+ editorOrigin = origin;
589
+ // a new editing session with another Mapled is a new overlay, listening to that one alone
590
+ if (origin && view)
591
+ stopEditor = startEditor({ appOrigin: origin, sdk: `@mapled/vanilla@${VERSION}`, onRefresh: () => void refresh(), window: view });
592
+ }
574
593
  /** Preview ends now, not after the fill in flight: the draft goes at
575
594
  once, and whatever that fill brings back is dropped. */
576
595
  function drop() {
@@ -620,6 +639,7 @@ export function mount(options) {
620
639
  console.warn(`[mapled] ${loud.length === 1 ? "1 place" : `${loud.length} places`} couldn't be filled: ${text}`);
621
640
  }
622
641
  doc.dispatchEvent(new CustomEvent(first ? "mapled:ready" : "mapled:update", { detail: report }));
642
+ editor(report.preview);
623
643
  if (report.preview)
624
644
  watchExpiry();
625
645
  else {
@@ -804,6 +824,7 @@ export function mount(options) {
804
824
  endPreview: exit,
805
825
  stop: () => {
806
826
  stopped = true;
827
+ editor(false);
807
828
  stopWatching?.();
808
829
  stopWatching = () => { };
809
830
  clearTimeout(expiry);
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** The package's version — what the banner of the single file and
2
2
  `Mapled.version` say. Kept equal to package.json by version.test.ts. */
3
- export declare const VERSION = "0.3.0";
3
+ export declare const VERSION = "0.4.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** The package's version — what the banner of the single file and
2
2
  `Mapled.version` say. Kept equal to package.json by version.test.ts. */
3
- export const VERSION = "0.3.0";
3
+ export const VERSION = "0.4.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapled/vanilla",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "The browser runtime of Mapled, the hosted headless CMS for sites built with AI — published content in a plain HTML site: one script tag and data-mapled attributes, no framework and no build step.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://mapled.io",
@@ -41,7 +41,7 @@
41
41
  "typecheck": "tsc --noEmit -p tsconfig.json"
42
42
  },
43
43
  "dependencies": {
44
- "@mapled/client": "^0.5.0"
44
+ "@mapled/client": "^0.5.2"
45
45
  },
46
46
  "devDependencies": {
47
47
  "esbuild": "^0.28.2",