@baack-software/baack-ts-editor 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor.js +1 -1
- package/dist/editor.js.map +2 -2
- package/package.json +1 -1
package/dist/editor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import{b as w,c as R,e as T,f as Mt,h as Z,i as L,j as W,k as fe,l as c,m as Ct}from"./chunks/chunk-JI2V7IMH.js";function E(r,e={},...t){return{tag:r,attrs:e,children:t}}function It(r,e=document){if(typeof r=="string")return e.createTextNode(r);let t=e.createElement(r.tag);for(let[n,i]of Object.entries(r.attrs))i!==void 0&&t.setAttribute(n,i);return r.html!==void 0?t.innerHTML=r.html:t.append(...r.children.map(n=>It(n,e))),t}function Pt(r,e,t,n){for(let i of t)e.attrs[i]===void 0&&r.removeAttribute(i);for(let[i,s]of Object.entries(e.attrs))s===void 0?r.removeAttribute(i):r.getAttribute(i)!==s&&r.setAttribute(i,s);n&&(e.html!==void 0?r.innerHTML=e.html:r.replaceChildren(...e.children.map(i=>It(i,r.ownerDocument))))}function ve(r,e,t){if(!r.carried||!e)return t;let n={...t};for(let i of r.carried){let s=e[i];!(i in n)&&s!==void 0&&(n[i]=s)}return n}function O(r,e){let t={};for(let n of r.valueKeys){let i=e[n];i!==void 0&&(t[n]=i)}return t}function ye(r,e,t){return JSON.stringify(O(r,e))===JSON.stringify(O(r,t))}function dt(r,e,t){let n={...e,...t};for(let i of r.derived??[])delete n[i];return n}function $t(r,e,t,n){let i=r.component?.(e);if(!i)return;let s=i.propsFrom(e);Pt(e,i.render({name:t.name,sortOrder:t.sortOrder,item:n},s),i.volatile,i.ownsChildren)}function q(r,e,t,n){let i={...O(r,t),name:e.name,sortOrder:e.sortOrder,entity:{urn:n}};return e.urn!==void 0&&(i.urn=e.urn),i}function ae(r){return`data-${r.attribute}-name`}function X(r){return`data-${r.attribute}-sort-order`}function I(r){return`data-${r.attribute}-urn`}var U="data-entity-urn",ge=class{entries;listener;selector;byElement=new Map;unscopedByElement=new Map;observer;warned=new WeakSet;constructor(e,t){this.entries=e,this.listener=t,this.selector=e.map(n=>`[${ae(n)}]`).join(","),this.observer=new MutationObserver(n=>this.onMutations(n))}start(e=document.documentElement){this.scan(e),this.observer.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[U,...this.entries.flatMap(t=>[ae(t),X(t)])]})}stop(){this.observer.disconnect()}all(){return[...this.byElement.values()].flat()}unscoped(){for(let e of this.unscopedByElement.keys())e.isConnected||this.unscopedByElement.delete(e);return[...this.unscopedByElement.values()].flat()}of(e){return this.byElement.get(e)??[]}closest(e){if(!(e instanceof Element))return;let t=e.closest(this.selector);return t instanceof HTMLElement&&this.byElement.has(t)?t:void 0}flush(){let e=this.observer.takeRecords();e.length>0&&this.onMutations(e)}onMutations(e){let t=new Set,n=!1;for(let i of e){i.type==="attributes"&&i.target instanceof Element&&t.add(i.target);for(let s of i.addedNodes)s instanceof Element&&t.add(s);i.removedNodes.length>0&&(n=!0)}n&&this.sweep();for(let i of t)i.isConnected&&this.scan(i)}scan(e){let t=[...e.querySelectorAll(this.selector)];e instanceof HTMLElement&&e.matches(this.selector)&&t.unshift(e);let n=[],i=[];for(let s of t){let o=this.bind(s),a=this.unscopedSlots(s);a.length>0?this.unscopedByElement.set(s,a):this.unscopedByElement.delete(s);let d=this.byElement.get(s)??[];ci(d,o)||(i.push(...d),n.push(...o),o.length>0?this.byElement.set(s,o):this.byElement.delete(s))}e instanceof HTMLElement&&!e.matches(this.selector)&&this.byElement.has(e)&&(i.push(...this.byElement.get(e)),this.byElement.delete(e)),i.length>0&&this.listener.removed(i),n.length>0&&this.listener.added(n)}sweep(){let e=[];for(let[t,n]of this.byElement)t.isConnected||(e.push(...n),this.byElement.delete(t));e.length>0&&this.listener.removed(e)}bind(e){let t=e.closest(`[${U}]`)?.getAttribute(U),n=[];for(let i of this.entries){let s=e.getAttribute(ae(i));if(!s||!t)continue;let o=this.sortOrder(e,i);o!==void 0&&n.push({element:e,entry:i,scope:t,name:s,sortOrder:o})}return n}unscopedSlots(e){if(e.closest(`[${U}]`))return[];let t=[];for(let n of this.entries){let i=e.getAttribute(ae(n)),s=i?this.sortOrder(e,n):void 0;i&&s!==void 0&&t.push({element:e,entry:n,name:i,sortOrder:s})}return t}sortOrder(e,t){let n=e.getAttribute(X(t)),i=n===null||n.trim()===""?0:Number(n);if(Number.isInteger(i))return i;this.warn(e,`has ${X(t)}="${n}", which is not an integer`)}warn(e,t){this.warned.has(e)||(this.warned.add(e),console.warn(`Baack editor: element ${t}; it will not be editable.`,e))}};function ci(r,e){return r.length===e.length&&r.every((t,n)=>t.entry===e[n].entry&&t.scope===e[n].scope&&t.name===e[n].name&&t.sortOrder===e[n].sortOrder)}function P(r){return`${r.entityUrn}|${r.type}|${r.name}|${r.sortOrder}`}function z(r){return r.kind==="move"?`move|${r.planId}|${r.urn}`:r.kind==="edit"?r.urn:P(r)}var be=class{items=new Map;onChange;constructor(e){this.onChange=e}getEdit(e){let t=this.items.get(e);return t?.kind==="edit"?t:void 0}getCreate(e){let t=this.items.get(e);return t?.kind==="create"?t:void 0}set(e){this.items.set(z(e),e),this.onChange()}clear(e){this.items.delete(e)&&this.onChange()}clearAll(e){let t=this.all().filter(n=>e===void 0||n.entityUrn===e);for(let n of t)this.items.delete(z(n));return t.length>0&&this.onChange(),t}load(e){this.items.clear();for(let t of e)this.items.set(z(t),t);this.onChange()}all(){return[...this.items.values()]}plan(e){return this.all().filter(t=>t.kind==="move"&&t.planId===e)}count(){return this.items.size}byEntity(){let e=new Map;for(let t of this.items.values())e.set(t.entityUrn,[...e.get(t.entityUrn)??[],t]);return e}};var Ht="baack-editor:stash:";var we=class{key;constructor(e){this.key=Ht+e}load(e=Date.now()){ui(e);try{let t=window.localStorage.getItem(this.key);if(!t)return[];let n=JSON.parse(t);return n.version!==1||!Array.isArray(n.items)?[]:n.items}catch(t){return console.warn("Baack editor: could not read unsaved changes from this browser.",t),[]}}save(e,t=Date.now()){try{if(e.length===0)window.localStorage.removeItem(this.key);else{let n={version:1,savedAt:t,items:e};window.localStorage.setItem(this.key,JSON.stringify(n))}}catch(n){console.warn("Baack editor: could not keep unsaved changes in this browser.",n)}}};function ui(r){try{for(let e=window.localStorage.length-1;e>=0;e-=1){let t=window.localStorage.key(e);if(!t?.startsWith(Ht))continue;let n=JSON.parse(window.localStorage.getItem(t)??"{}").savedAt;(typeof n!="number"||r-n>6048e5)&&window.localStorage.removeItem(t)}}catch{}}var Ee=class r{entity;constructor(e){this.entity=e}get urn(){return this.entity.urn}get name(){return this.entity.name}get status(){return this.entity.status}get language(){return this.entity.language}get variant(){return this.entity.variant}get publishedAt(){return this.entity.publishTimestamp?new Date(this.entity.publishTimestamp):void 0}get updatedAt(){return this.entity.updatedTimestamp?new Date(this.entity.updatedTimestamp):void 0}get raw(){return this.entity}allByName(e,t){return e?e.filter(n=>n.name===t).sort((n,i)=>n.sortOrder-i.sortOrder):[]}byNameAndSortOrder(e,t,n=0){return e?.find(i=>i.name===t&&i.sortOrder===n)}has(e){let{texts:t,markdowns:n,templates:i,booleans:s,doubles:o,longs:a,money:d,dateTimes:l,images:u,latLongs:h,jsons:f,links:p,references:v}=this.entity;return[t,n,i,s,o,a,d,l,u,h,f,p,v].some(m=>m?.some(y=>y.name===e))}hasByNameAndSortOrder(e,t,n=0){return this.byNameAndSortOrder(e,t,n)!==void 0}hasText(e,t=0){return this.hasByNameAndSortOrder(this.entity.texts,e,t)}hasMarkdown(e,t=0){return this.hasByNameAndSortOrder(this.entity.markdowns,e,t)}hasTemplate(e,t=0){return this.hasByNameAndSortOrder(this.entity.templates,e,t)}hasBoolean(e,t=0){return this.hasByNameAndSortOrder(this.entity.booleans,e,t)}hasDouble(e,t=0){return this.hasByNameAndSortOrder(this.entity.doubles,e,t)}hasLong(e,t=0){return this.hasByNameAndSortOrder(this.entity.longs,e,t)}hasNumber(e,t=0){return this.hasDouble(e,t)||this.hasLong(e,t)}hasMoney(e,t=0){return this.hasByNameAndSortOrder(this.entity.money,e,t)}hasDate(e,t=0){return this.hasByNameAndSortOrder(this.entity.dateTimes,e,t)}hasImage(e,t=0){return this.hasByNameAndSortOrder(this.entity.images,e,t)}hasLatLong(e,t=0){return this.hasByNameAndSortOrder(this.entity.latLongs,e,t)}hasJson(e,t=0){return this.hasByNameAndSortOrder(this.entity.jsons,e,t)}hasLink(e,t=0){return this.hasByNameAndSortOrder(this.entity.links,e,t)}hasReference(e,t=0){return this.hasByNameAndSortOrder(this.entity.references,e,t)}text(e,t=0){return this.byNameAndSortOrder(this.entity.texts,e,t)}texts(e){return this.allByName(this.entity.texts,e)}requireText(e,t=0){let n=this.text(e,t);if(n===void 0)throw new Error(`EntityView: missing required text item "${e}" on entity ${this.entity.urn}`);return n}markdown(e,t=0){return this.byNameAndSortOrder(this.entity.markdowns,e,t)}markdowns(e){return this.allByName(this.entity.markdowns,e)}template(e,t=0){return this.byNameAndSortOrder(this.entity.templates,e,t)}templates(e){return this.allByName(this.entity.templates,e)}boolean(e,t=0){return this.byNameAndSortOrder(this.entity.booleans,e,t)}booleans(e){return this.allByName(this.entity.booleans,e)}double(e,t=0){return this.byNameAndSortOrder(this.entity.doubles,e,t)}doubles(e){return this.allByName(this.entity.doubles,e)}long(e,t=0){return this.byNameAndSortOrder(this.entity.longs,e,t)}longs(e){return this.allByName(this.entity.longs,e)}number(e,t=0){return this.double(e,t)??this.long(e,t)}money(e,t=0){return this.byNameAndSortOrder(this.entity.money,e,t)}moneys(e){return this.allByName(this.entity.money,e)}date(e,t=0){return this.byNameAndSortOrder(this.entity.dateTimes,e,t)}dates(e){return this.allByName(this.entity.dateTimes,e)}image(e,t=0){return this.byNameAndSortOrder(this.entity.images,e,t)}images(e){return this.allByName(this.entity.images,e)}latLong(e,t=0){return this.byNameAndSortOrder(this.entity.latLongs,e,t)}latLongs(e){return this.allByName(this.entity.latLongs,e)}json(e,t=0){return this.byNameAndSortOrder(this.entity.jsons,e,t)}jsons(e){return this.allByName(this.entity.jsons,e)}link(e,t=0){return this.byNameAndSortOrder(this.entity.links,e,t)}links(e){return this.allByName(this.entity.links,e)}reference(e,t=0){return this.byNameAndSortOrder(this.entity.references,e,t)}references(e){return this.allByName(this.entity.references,e)}static async fetch(e,t,n,i){let s=await e.read(w.ENTITY_VIEW,t,n,i);return new r(s)}static from(e){return new r(e)}};var ke=class{scopes=new Map;views=new Map;items=new Map;hasScope(e){return this.scopes.has(e)}loadEntity(e,t){this.scopes.set(e,t.urn),this.views.set(t.urn,Ee.from(t))}entityFor(e){return this.scopes.get(e)}view(e){return this.views.get(e)}entities(){return[...this.views.keys()]}scopesFor(e){return[...this.scopes].filter(([,t])=>t===e).map(([t])=>t)}itemFor(e){let t=this.scopes.get(e.scope);return t===void 0?void 0:this.itemAt(t,e.entry,e.name,e.sortOrder)}itemAt(e,t,n,i){let s=this.views.get(e),o=s?t.find(s,n,i):void 0;if(!o?.urn)return;let a={entry:t,item:o,entityUrn:e};return this.items.set(o.urn,a),a}remember(e,t,n){let i={entry:t,item:n,entityUrn:e};return n.urn&&this.items.set(n.urn,i),i}get(e){return this.items.get(e)}replace(e,t){let n=this.items.get(e);if(!n||!t.urn)throw new Error(`Cannot replace unknown item ${e}`);let i={entry:n.entry,item:t,entityUrn:n.entityUrn};if(this.items.delete(e),this.items.set(t.urn,i),n.entry.renderedByView)return i;let s=this.views.get(n.entityUrn)?.raw[n.entry.entityArray],o=s?.findIndex(a=>a.urn===e)??-1;return s&&o>=0&&(s[o]=t),i}clearEntities(){this.scopes.clear(),this.views.clear(),this.items.clear()}};var de=class extends Error{expectedUrn;received;constructor(e,t){super(`The entity view returned ${t.urn} (${t.language}) for ${e}`),this.name="EntityMismatchError",this.expectedUrn=e,this.received=t}},Q=class extends Error{entityUrn;constructor(e){super(`${e} has no live view: it is not published`),this.name="NotLiveError",this.entityUrn=e}};function S(r){return r==="PUBLISHED"||r==="PUBLISHED_WITH_DRAFTS"}var xe=class{transport;locators=new Map;constructor(e){this.transport=e}async read(e,t={}){let n=await this.locator(e),i;try{i=await this.transport.entityView(e,{...t,...n})}catch(s){throw t.version===void 0&&R(s)&&s.isNotFound?new Q(e):s}if(i.urn!==e)throw new de(e,i);return i}async readAsLive(e){let t=await this.transport.readEntity(e);if(this.locators.set(e,Promise.resolve({language:t.language,variant:t.variant??""})),S(t.status))return{entity:await this.read(e),live:!0};if(t.status==="PUBLISH"||t.status==="PUBLISH_PENDING")try{return{entity:await this.read(e),live:!0}}catch(n){if(!(n instanceof Q))throw n}return{entity:await this.read(e,{version:"LATEST"}),live:!1}}locator(e){let t=this.locators.get(e);return t||(t=this.transport.readEntity(e).then(n=>({language:n.language,variant:n.variant??""})),t.catch(()=>this.locators.delete(e)),this.locators.set(e,t)),t}};function Te(r,e){return{label:r.canPublish?"Review and publish\u2026":"Request approval\u2026",run:()=>r.hooks.publishEntity(e)}}function ee(r){let e=document.documentElement.getAttribute(U);return e?r.entityFor(e):void 0}function te(r,e){let t=ee(r);return[...e].sort((n,i)=>n===t?-1:i===t?1:0)}function le(r){switch(r){case"DRAFT_UNPUBLISHED":return"Draft, not published yet";case"PUBLISH":return"Publishing\u2026";case"PUBLISH_PENDING":return"Scheduled to publish";case"PUBLISHED":return"Published";case"PUBLISHED_WITH_DRAFTS":return"Published, with unpublished changes";default:return""}}var Le="data-baack-state",hi={editable:["1px dashed","primary",70],editing:["2px solid","primary",100],changed:["2px solid","warning",100],unresolved:["1px dotted","muted",80],previewing:["2px dashed","preview",100],published:["2px solid","success",100]};function pi(r,e){let[t,n,i]=hi[e],[s,o]=Mt[n],a=d=>i===100?d:`color-mix(in srgb, ${d} ${i}%, transparent)`;r.style.outline=`${t} ${a(s)}`,r.style.outline=`${t} ${a(`light-dark(${s}, ${o})`)}`}var ce=new WeakMap;function N(r,e){if(!ce.has(r)){let{outline:t,outlineOffset:n,display:i,minWidth:s,minHeight:o}=r.style;ce.set(r,{outline:t,outlineOffset:n,display:i,minWidth:s,minHeight:o})}pi(r,e),r.style.outlineOffset="2px",r.setAttribute(Le,e),Se(r)}function Se(r){let e=ce.get(r);e&&(r.style.display=e.display,r.style.minWidth=e.minWidth,r.style.minHeight=e.minHeight,!(r.textContent!==""||r.querySelector("img, picture, svg, video, iframe"))&&(getComputedStyle(r).display==="inline"&&(r.style.display="inline-block"),r.style.minWidth="1ch",r.style.minHeight="1lh"))}function Bt(r){let e=ce.get(r);e&&(r.style.outline=e.outline,r.style.outlineOffset=e.outlineOffset,r.style.display=e.display,r.style.minWidth=e.minWidth,r.style.minHeight=e.minHeight,r.getAttribute("style")||r.removeAttribute("style"),ce.delete(r)),r.removeAttribute(Le)}function Ae(r){return r.split(/\n\s*\n/).map(e=>e.split(`
|
|
2
|
-
`).map(t=>t.replace(/\s+/g," ").trim()).filter(Boolean)).filter(e=>e.length>0)}function Oe(r){return Ae(r).flat()}var mi=/(https?:\/\/[^\s)]+[^\s).,;:!?]|[\w.+-]+@[\w-]+(?:\.[\w-]+)+)/g;function Rt(r){return r.split(mi).map((e,t)=>{if(e!=="")return t%2===0?{text:e}:{text:e,href:e.includes("@")&&!e.startsWith("http")?`mailto:${e}`:e}}).filter(e=>e!==void 0)}function ue(r){try{return new Intl.NumberFormat("en-GB",{style:"currency",currency:r}).resolvedOptions().maximumFractionDigits??2}catch{return 2}}function Nt(r){return r.formattedValue?r.formattedValue:Me(r.unitValue,ue(r.currencyCode))}function Dt(r){if(r.currencySymbol)return r.currencySymbol;try{return new Intl.NumberFormat("en-GB",{style:"currency",currency:r.currencyCode}).formatToParts(0).find(t=>t.type==="currency")?.value??r.currencyCode}catch{return r.currencyCode}}function Me(r,e){let t=r<0,n=String(Math.abs(Math.trunc(r)));if(e===0)return(t?"-":"")+n;let i=n.padStart(e+1,"0");return`${t?"-":""}${i.slice(0,-e)}.${i.slice(-e)}`}function lt(r,e){let t=/^\s*(-)?(\d+)(?:\.(\d*))?\s*$/.exec(r);if(!t)return;let[,n,i="0",s=""]=t;if(s.length>e)return;let o=Number(i+s.padEnd(e,"0"));if(Number.isSafeInteger(o))return n?-o:o}function M(r){return Date.parse(/[zZ]|[+-]\d\d:?\d\d$/.test(r)?r:`${r}Z`)}function Ft(r,e){let t=M(r);if(Number.isNaN(t))return r;let n={timeZone:e.timeZone??"UTC"};return e.dateStyle&&(n.dateStyle=e.dateStyle),e.timeStyle&&(n.timeStyle=e.timeStyle),!e.dateStyle&&!e.timeStyle&&(n.dateStyle="medium"),new Intl.DateTimeFormat(e.locale??"en-GB",n).format(t)}function Ut(r,e){return new Intl.NumberFormat(e??"en-GB",{maximumFractionDigits:20}).format(r)}var fi=new Set(["id","role","title","lang","dir","tabindex","itemscope","itemtype","itemid","itemref"]),vi=/^data-(placeholder|section|content-rows?|[a-z]+-(name|sort-order|urn|list))$/;function yi(r){return vi.test(r)?!1:fi.has(r)||/^(data|aria)-[a-z0-9-]+$/.test(r)}function $(r){let e={};for(let[t,n]of Object.entries(r??{}))yi(t)&&(e[t]=n);return e}function H(r,e,t){return{[`data-${r}-name`]:e.name,[`data-${r}-sort-order`]:String(e.sortOrder),[`data-${r}-urn`]:t?void 0:e.item?.urn,"data-placeholder":t?"":void 0}}function D(r,...e){return[`data-${r}-urn`,"data-placeholder",...e]}function ne(r){return{className:r.getAttribute("class")??void 0,itemProp:r.getAttribute("itemprop")??void 0}}function Vt(r,e,t){return t?r.flatMap((n,i)=>i>0?[E("br"),...e(n)]:e(n)):[r.join(" ")]}function _t(r,e){return e?Rt(r).map(t=>"href"in t?E("a",{href:t.href},t.text):t.text):[r]}var ct={type:"text",volatile:D("text"),ownsChildren:!0,render(r,e){let t=r.item?Oe(r.item.value):[],n=t.length===0,i=e.as??"span",s=n?Oe(e.placeholder):t,o=E(i,{...$(e.attributes),class:e.className,itemprop:e.itemProp,...H("text",r,n),"data-text-linkify":e.linkify?"":void 0,"data-text-unsafe-literal":e.unsafeLiteral?"":void 0},...Vt(s,a=>_t(a,e.linkify===!0),i!=="title"&&i!=="option"));return e.unsafeLiteral&&!n&&(o.html=r.item.value),o},propsFrom:r=>({...ne(r),placeholder:"",as:r.localName,linkify:r.hasAttribute("data-text-linkify"),unsafeLiteral:r.hasAttribute("data-text-unsafe-literal")})},zt={type:"text",volatile:D("text"),ownsChildren:!0,render(r,e){let t=r.item?Ae(r.item.value):[],n=t.length===0,i=n?Ae(e.placeholder):t,s=E(e.as??"div",{...$(e.attributes),class:e.className,itemprop:e.itemProp,...H("text",r,n),"data-text-layout":"paragraphs","data-text-linkify":e.linkify?"":void 0,"data-text-unsafe-literal":e.unsafeLiteral?"":void 0},...i.map(o=>E("p",{class:e.paragraphClassName},...Vt(o,a=>_t(a,e.linkify===!0),!0))));return e.unsafeLiteral&&!n&&(s.html=r.item.value),s},propsFrom:r=>({...ct.propsFrom(r),paragraphClassName:r.querySelector(":scope > p")?.getAttribute("class")??void 0})},Gt={type:"text",volatile:D("text","content"),ownsChildren:!1,render(r,e){let t=r.item?Oe(r.item.value).join(" "):"",n=t==="";return E("meta",{...$(e.attributes),name:e.name,property:e.property,content:n?e.placeholder:t,...H("text",r,n)})},propsFrom:r=>({name:r.getAttribute("name")??void 0,property:r.getAttribute("property")??void 0,placeholder:""})};function Kt(r){return{type:r,volatile:D(r),ownsChildren:!0,render(e,t){let n=e.item?.value,i=!n?.trim(),s=E(t.as??"div",{...$(t.attributes),class:t.className,itemprop:t.itemProp,...H(r,e,i)});return i?s.children=[E("p",{},t.placeholder)]:s.html=n,s},propsFrom:e=>({...ne(e),placeholder:"",as:e.localName})}}var jt=Kt("markdown"),Wt=Kt("template"),qt={type:"money",volatile:D("money","itemprop","content","data-money-currency","data-money-unit-value"),ownsChildren:!0,render(r,e){let t=r.item,n={"data-money-offer":e.offer?"":void 0,"data-money-item-prop":e.offer?void 0:e.itemProp};if(!t)return E("span",{...$(e.attributes),class:e.className,...H("money",r,!0),...n},e.placeholder);let i=Nt(t);return E("span",{...$(e.attributes),class:e.className,itemprop:e.offer?"price":e.itemProp,content:e.offer?i:void 0,...H("money",r,!1),"data-money-currency":t.currencyCode,"data-money-unit-value":String(t.unitValue),...n},E("span",{itemprop:e.offer?"priceCurrency":void 0,content:e.offer?t.currencyCode:void 0},Dt(t)),i)},propsFrom:r=>({className:r.getAttribute("class")??void 0,itemProp:r.getAttribute("data-money-item-prop")??void 0,offer:r.hasAttribute("data-money-offer"),placeholder:""})};function Yt(r){return{type:r,volatile:D(r,"value"),ownsChildren:!0,render(e,t){let n=e.item;return E("data",{...$(t.attributes),class:t.className,itemprop:t.itemProp,value:n?String(n.value):void 0,...H(r,e,!n),"data-locale":t.locale},n?Ut(n.value,t.locale):t.placeholder)},propsFrom:e=>({...ne(e),placeholder:"",locale:e.getAttribute("data-locale")??void 0})}}var Jt=Yt("long"),Zt=Yt("double"),Xt={type:"datetime",volatile:D("datetime","datetime"),ownsChildren:!0,render(r,e){let t=r.item,n=t?M(t.value):NaN;return E("time",{...$(e.attributes),class:e.className,itemprop:e.itemProp,datetime:Number.isNaN(n)?void 0:new Date(n).toISOString(),...H("datetime",r,!t),"data-locale":e.locale,"data-date-style":e.dateStyle,"data-time-style":e.timeStyle,"data-time-zone":e.timeZone},t?Ft(t.value,e):e.placeholder)},propsFrom:r=>({...ne(r),placeholder:"",locale:r.getAttribute("data-locale")??void 0,dateStyle:r.getAttribute("data-date-style")??void 0,timeStyle:r.getAttribute("data-time-style")??void 0,timeZone:r.getAttribute("data-time-zone")??void 0})},Qt={type:"boolean",volatile:D("boolean","hidden"),ownsChildren:!1,render(r,e){let t=r.item?r.item.value:e.fallback===!0,n=e.invert?!t:t;return E(e.as??"div",{...$(e.attributes),class:e.className,hidden:n?void 0:"",...H("boolean",r,!r.item),"data-boolean-value":String(t),"data-boolean-invert":e.invert?"":void 0})},propsFrom:r=>({className:r.getAttribute("class")??void 0,invert:r.hasAttribute("data-boolean-invert"),as:r.localName})},en={type:"latlong",volatile:D("latlong"),ownsChildren:!0,render(r,e){let t=r.item,n={...$(e.attributes),class:e.className,itemprop:e.itemProp,itemscope:"",itemtype:"https://schema.org/GeoCoordinates",...H("latlong",r,!t)};return t?E("span",n,E("meta",{itemprop:"latitude",content:String(t.latitude)}),E("meta",{itemprop:"longitude",content:String(t.longitude)}),`${t.latitude}, ${t.longitude}`):E("span",n,e.placeholder)},propsFrom:r=>({...ne(r),placeholder:""})},tn={type:"link",volatile:D("link","rel","hreflang"),ownsChildren:!0,render(r,e){let t=r.item,n=t?t.text||t.href:e.placeholder;return E("a",{...$(e.attributes),class:e.className,itemprop:e.itemProp,href:t?t.href:e.placeholderHref??"#",rel:t?.rel||void 0,hreflang:t?.lang||void 0,...H("link",r,!t)},e.textItemProp?E("span",{itemprop:e.textItemProp},n):n)},propsFrom:r=>({...ne(r),placeholder:"",textItemProp:r.querySelector(":scope > span[itemprop]")?.getAttribute("itemprop")??void 0})},gi="768px",bi="1024px",nn={type:"image",volatile:D("image"),ownsChildren:!0,render(r,e){let t=r.item,n={...$(e.attributes),class:e.className,...H("image",r,!t?.src),"data-image-priority":e.priority?"":void 0,"data-image-alt":e.placeholderAlt,"data-image-item-prop":e.itemProp,"data-image-img-class":e.imgClassName};return t?.src?E("picture",n,...t.largeSrc?[E("source",{media:`(min-width: ${bi})`,srcset:t.largeSrc})]:[],...t.mediumSrc?[E("source",{media:`(min-width: ${gi})`,srcset:t.mediumSrc})]:[],E("img",{src:t.src,alt:t.altText??e.placeholderAlt??"",loading:e.priority?"eager":"lazy",decoding:"async",fetchpriority:e.priority?"high":void 0,itemprop:e.itemProp,class:e.imgClassName})):E("picture",n)},propsFrom:r=>({className:r.getAttribute("class")??void 0,priority:r.hasAttribute("data-image-priority"),itemProp:r.getAttribute("data-image-item-prop")??void 0,imgClassName:r.getAttribute("data-image-img-class")??void 0,placeholderAlt:r.getAttribute("data-image-alt")??void 0})};var rn={type:"text",volatile:D("text","data-section"),ownsChildren:!1,render(r,e){let t=r.item?.value.trim();return E(e.as??"section",{...$(e.attributes),class:e.className,...H("text",r,!t),"data-section":t||e.placeholder})},propsFrom:r=>({className:r.getAttribute("class")??void 0,placeholder:r.getAttribute("data-section")??"",as:r.localName})};var A=r=>typeof r=="string"?r:"";function dn(r,e,t,n,i,s){return{type:r,label:e,attribute:r,entityArray:r==="markdown"?"markdowns":"templates",endpoint:t,historyEndpoint:n,surface:"panel",valueKeys:["value"],renderedByView:!0,component:()=>i,fromPlaceholder:o=>({value:(o.textContent??"").trim()}),find:s,defaults:()=>({value:""}),form:{fields:[{key:"value",label:r==="markdown"?"Markdown source":"Velocity template source",kind:"code"}],toForm:o=>({value:o.value}),fromForm:o=>({value:A(o.value)}),describe:()=>r==="markdown"?"The page shows the rendered result after you send.":"Templates can show other items. The page shows the result after you send."},validate:()=>[]}}var ln=dn("markdown","Markdown",w.MARKDOWN,w.MARKDOWN_HISTORY,jt,(r,e,t)=>r.markdown(e,t)),cn=dn("template","Template",w.TEMPLATE,w.TEMPLATE_HISTORY,Wt,(r,e,t)=>r.template(e,t)),un={type:"json",label:"JSON",attribute:"json",entityArray:"jsons",endpoint:w.JSON,historyEndpoint:w.JSON_HISTORY,surface:"panel",valueKeys:["value"],find:(r,e,t)=>r.json(e,t),defaults:()=>({value:{}}),form:{fields:[{key:"value",label:"JSON object",kind:"code"}],toForm:r=>({value:JSON.stringify(r.value??{},null,2)}),fromForm:r=>{try{let e=JSON.parse(A(r.value));return typeof e!="object"||e===null||Array.isArray(e)?'The value must be a JSON object, like {"key": "value"}.':{value:e}}catch(e){return`This is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}},validate:()=>[]},hn={type:"boolean",label:"Switch",attribute:"boolean",entityArray:"booleans",endpoint:w.BOOLEAN,historyEndpoint:w.BOOLEAN_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Qt,fromPlaceholder:r=>({value:r.getAttribute("data-boolean-value")==="true"}),find:(r,e,t)=>r.boolean(e,t),defaults:()=>({value:!1}),form:{fields:[{key:"value",label:"On",kind:"checkbox"}],toForm:r=>({value:r.value}),fromForm:r=>({value:r.value===!0})},validate:()=>[]};function wi(r){if(!/^\s*-?\d+\s*$/.test(r))return;let e=Number(r);return Number.isSafeInteger(e)?e:void 0}var pn={type:"long",label:"Whole number",attribute:"long",entityArray:"longs",endpoint:w.LONG,historyEndpoint:w.LONG_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Jt,find:(r,e,t)=>r.long(e,t),defaults:()=>({value:0}),form:{fields:[{key:"value",label:"Value",kind:"integer"}],toForm:r=>({value:String(r.value)}),fromForm:r=>{let e=wi(A(r.value));return e===void 0?"Enter a whole number.":{value:e}}},validate:()=>[]};function ut(r){if(!/^\s*-?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?\s*$/i.test(r))return;let e=Number(r);return Number.isFinite(e)?e:void 0}var mn={type:"double",label:"Number",attribute:"double",entityArray:"doubles",endpoint:w.DOUBLE,historyEndpoint:w.DOUBLE_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Zt,find:(r,e,t)=>r.double(e,t),defaults:()=>({value:0}),form:{fields:[{key:"value",label:"Value",kind:"decimal"}],toForm:r=>({value:String(r.value)}),fromForm:r=>{let e=ut(A(r.value));return e===void 0?"Enter a number.":{value:e}}},validate:()=>[]};function Ei(r){let e=M(r);return Number.isNaN(e)?"":new Date(e-new Date(e).getTimezoneOffset()*6e4).toISOString().slice(0,16)}function on(r){if(!/^\d{4}-\d\d-\d\dT\d\d:\d\d(:\d\d)?$/.test(r))return;let e=new Date(r).getTime();return Number.isNaN(e)?void 0:new Date(e).toISOString().replace("Z","")}var fn={type:"dateTime",label:"Date and time",attribute:"datetime",entityArray:"dateTimes",endpoint:w.DATE_TIME,historyEndpoint:w.DATE_TIME_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Xt,find:(r,e,t)=>r.date(e,t),defaults:()=>({value:new Date().toISOString().replace("Z","")}),form:{fields:[{key:"value",label:"Date and time (your local time)",kind:"datetime"}],toForm:r=>({value:Ei(r.value)}),fromForm:r=>{let e=on(A(r.value));return e===void 0?"Enter a date and time.":{value:e}},describe:r=>{let e=on(A(r.value));return e?`Stored as ${e.slice(0,16).replace("T"," ")} UTC.`:""}},validate:()=>[]},vn={type:"latLong",label:"Location",attribute:"latlong",entityArray:"latLongs",endpoint:w.LAT_LONG,historyEndpoint:w.LAT_LONG_HISTORY,surface:"popover",valueKeys:["latitude","longitude"],component:()=>en,find:(r,e,t)=>r.latLong(e,t),defaults:()=>({latitude:0,longitude:0}),form:{fields:[{key:"latitude",label:"Latitude",kind:"decimal"},{key:"longitude",label:"Longitude",kind:"decimal"}],toForm:r=>({latitude:String(r.latitude),longitude:String(r.longitude)}),fromForm:r=>{let e=ut(A(r.latitude)),t=ut(A(r.longitude));return e===void 0||Math.abs(e)>90?"Latitude must be a number from -90 to 90.":t===void 0||Math.abs(t)>180?"Longitude must be a number from -180 to 180.":{latitude:e,longitude:t}}},validate:()=>[]};function an(r){if(!/^[A-Z]{3}$/.test(r))return!1;try{return new Intl.NumberFormat("en",{style:"currency",currency:r}),!0}catch{return!1}}var yn={type:"money",label:"Money",attribute:"money",entityArray:"money",endpoint:w.MONEY,historyEndpoint:w.MONEY_HISTORY,surface:"popover",valueKeys:["currencyCode","unitValue"],derived:["formattedValue","currencySymbol"],component:()=>qt,find:(r,e,t)=>r.money(e,t),defaults:()=>({currencyCode:"GBP",unitValue:0}),form:{fields:[{key:"currencyCode",label:"Currency",kind:"currency"},{key:"amount",label:"Amount",kind:"text"}],toForm:r=>({currencyCode:r.currencyCode,amount:Me(r.unitValue,ue(r.currencyCode))}),fromForm:r=>{let e=A(r.currencyCode).trim().toUpperCase();if(!an(e))return"Enter a three-letter currency code, like GBP or JPY.";let t=ue(e),n=lt(A(r.amount),t);return n===void 0?t===0?`${e} has no minor units. Enter a whole amount.`:`Enter an amount with at most ${t} decimal places, like ${Me(1250,t)}.`:{currencyCode:e,unitValue:n}},describe:r=>{let e=A(r.currencyCode).trim().toUpperCase();if(!an(e))return"";let t=lt(A(r.amount),ue(e));return t===void 0?"":`Stored as ${t} in the smallest unit of ${e}.`}},validate:()=>[]},V=[{size:"DEFAULT",field:"src",label:"Default file"},{size:"MEDIUM",field:"mediumSrc",label:"Medium file (from 768px wide)"},{size:"LARGE",field:"largeSrc",label:"Large file (from 1024px wide)"}],gn={type:"image",label:"Image",attribute:"image",entityArray:"images",endpoint:w.IMAGE,historyEndpoint:w.IMAGE_HISTORY,surface:"popover",valueKeys:["altText","src","mediumSrc","largeSrc"],carried:["src","mediumSrc","largeSrc"],component:()=>nn,fromPlaceholder:r=>({altText:r.querySelector("img")?.alt??""}),find:(r,e,t)=>r.image(e,t),defaults:()=>({altText:""}),form:{fields:[{key:"altText",label:"Alt text",kind:"text"},...V.map(r=>({key:r.size,label:r.label,kind:"file"}))],toForm:r=>({altText:r.altText??"",...Object.fromEntries(V.flatMap(e=>[[e.size,""],[`${e.size}:current`,String(r[e.field]??"")]]))}),fromForm:r=>({altText:A(r.altText)}),describe:r=>{let e=V.filter(i=>A(r[i.size])!=="");if(e.length===0)return"Saving keeps the current files.";let t=V.filter(i=>!e.includes(i)&&A(r[`${i.size}:current`])!==""),n=`Saving creates a new version, then uploads ${e.map(i=>i.label.toLowerCase().split(" (")[0]).join(", ")}.`;return e.some(i=>i.size==="DEFAULT")&&t.length>0?`${n} The ${t.map(i=>i.size.toLowerCase()).join(" and ")} file still shows the previous picture; choose new ones too if it changed.`:n}},validate:({altText:r})=>r?[]:[{level:"warning",message:"Images need alt text unless they are decorative."}]},bn={type:"link",label:"Link",attribute:"link",entityArray:"links",endpoint:w.LINK,historyEndpoint:w.LINK_HISTORY,surface:"popover",valueKeys:["href","text","rel","lang"],component:()=>tn,fromPlaceholder:r=>{let e=r.getAttribute("href"),t=(r.textContent??"").trim();return{href:e&&e!=="#"?e:"",...t?{text:t}:{}}},find:(r,e,t)=>r.link(e,t),defaults:()=>({href:"",text:""}),form:{fields:[{key:"text",label:"Text",kind:"text"},{key:"href",label:"Address",kind:"url"},{key:"rel",label:"Relationship (rel), e.g. nofollow",kind:"text"},{key:"lang",label:"Language of the target, e.g. en",kind:"text"}],toForm:r=>({text:r.text??"",href:r.href,rel:r.rel??"",lang:r.lang??""}),fromForm:r=>{let e=A(r.href).trim();if(!e)return"Enter the address the link goes to.";if(e.length>2048)return"The address can be at most 2048 characters.";let t={href:e};for(let n of["text","rel","lang"]){let i=A(r[n]).trim();i&&(t[n]=i)}return t}},validate:({href:r})=>/^\s*javascript:/i.test(r)?[{level:"error",message:"Links cannot run scripts."}]:[]},wn={type:"reference",label:"Reference",attribute:"reference",entityArray:"references",endpoint:w.REFERENCE,historyEndpoint:w.REFERENCE_HISTORY,surface:"popover",valueKeys:["entityReference"],find:(r,e,t)=>r.reference(e,t),defaults:()=>({entityReference:{urn:""}}),form:{fields:[{key:"urn",label:"Entity referred to",kind:"entity"}],toForm:r=>({urn:r.entityReference?.urn??""}),fromForm:r=>{let e=A(r.urn).trim();return/^[0-9a-f-]{36}$/i.test(e)?{entityReference:{urn:e}}:"Choose the entity this refers to."}},validate:()=>[]};var En=[250,500,1e3,2e3,4e3],ki=3e4,Ce=class{ctx;view;saving;editing;constructor(e,t,n,i){this.ctx=e,this.view=t,this.saving=n,this.editing=i}async save(e,t){let n=pt(t).find(y=>y.level==="error");if(n)return this.ctx.popover.setError(n.message);let i=await xi(t,window.baackEditorConfig?.imageWidths),{pending:s,popover:o,store:a,feedback:d}=this.ctx,l=e.entry,u=l.form.fromForm(o.values());if(typeof u=="string")return o.setError(u);let h=e.urn?a.get(e.urn)?.item:void 0,f=ve(l,h,u);for(let y of i.keys())delete f[V.find(g=>g.size===y).field];e.urn?s.set({kind:"edit",type:l.type,urn:e.urn,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:f}):s.set({kind:"create",type:l.type,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:f});let p=e.urn?s.getEdit(e.urn):s.getCreate(P({...e,type:l.type}));o.setSending(!0),o.setError("");let v;try{v=await this.saving().commit(p)}catch(y){o.setSending(!1);let g=await d.describe(y,"save this image");o.setError(g.message,g.debug);return}o.setSending(!1);let m=new Map([...i].map(([y,g])=>[y,URL.createObjectURL(g)]));this.preview(e.entityUrn,v,m),await this.upload(e,v,i,m)}async upload(e,t,n,i){let{transport:s,feedback:o,toolbar:a}=this.ctx;this.editing().close();let d=c("div","simple-form");d.setAttribute("aria-label","Image upload");let l=new Map;d.append(c("div","title",`Uploading to a new version of ${e.name}`));for(let[b,k]of n){let B=c("p","hint",`${kn(b)}: ${k.name}: uploading\u2026`);l.set(b,B),d.append(B)}let u=this.ctx.panels.show(d,{entityUrn:e.entityUrn,focus:!1}),h=(b,k,B=!1)=>{let K=l.get(b);K.textContent=`${kn(b)}: ${n.get(b).name}: ${k}`,K.className=B?"error":"hint"},f=await Promise.allSettled([...n].map(([b,k])=>s.uploadImageFile(t.urn,b,k))),p=f.flatMap(b=>b.status==="fulfilled"?[b.value]:[]),v=new Map;for(let[b,k]of f.entries()){let[B,K]=[...n][b];k.status==="rejected"?(v.set(B,K),h(B,(await o.describe(k.reason,"upload this file")).message,!0)):h(B,"uploaded; waiting for the CDN\u2026")}let m=[...n.keys()].filter(b=>!v.has(b)),y=b=>V.find(k=>k.size===b).field,x=m.every(b=>p.some(k=>k[y(b)]))||await this.waitForAddresses(e.entry,t.urn,m);for(let b of m)h(b,x?"done":"still processing; it appears when the CDN has placed it.");if(await this.view.refresh(e.entityUrn),v.size>0){this.preview(e.entityUrn,t,new Map([...i].filter(([B])=>v.has(B))));let b=c("button","primary","Retry failed uploads");b.type="button",b.addEventListener("click",()=>{this.retry(e,t,v,i)});let k=c("div","actions");k.append(b),d.append(c("p","message","Some files were not uploaded. The new version keeps the others."),k);return}for(let b of i.values())URL.revokeObjectURL(b);u.close(),a.showMessage(`Uploaded ${n.size} ${n.size===1?"file":"files"} to a new version of ${e.name}.`,!0)}async retry(e,t,n,i){let s=await this.ctx.transport.read(e.entry,t.urn),o=new Map([...n].filter(([a])=>!s[V.find(d=>d.size===a).field]));await this.upload(e,t,o,i)}async waitForAddresses(e,t,n){if(n.length===0)return!0;let i=Date.now();for(let s=0;Date.now()-i<ki;s+=1){let o=await this.ctx.transport.read(e,t);if(n.every(a=>o[V.find(d=>d.size===a).field]))return this.ctx.store.remember(this.ctx.store.get(t)?.entityUrn??"",e,o),!0;await new Promise(a=>setTimeout(a,En[Math.min(s,En.length-1)]))}return!1}preview(e,t,n){let i={...this.ctx.store.get(t.urn)?.item??t};for(let[o,a]of n)i[V.find(d=>d.size===o).field]=a;let s=this.ctx.entry("image");for(let o of this.ctx.discovery.all())o.entry!==s||this.ctx.store.entityFor(o.scope)!==e||o.element.getAttribute(I(s))!==t.urn&&!(o.name===t.name&&o.sortOrder===t.sortOrder)||(this.ctx.live.render(o,i),N(o.element,"changed"))}};function kn(r){return V.find(e=>e.size===r).label.split(" (")[0]}async function xi(r,e){let t=r.get("DEFAULT");if(!e||!t||r.size>1)return r;let n=new Map(r);for(let i of["MEDIUM","LARGE"]){let s=e[i];s&&n.set(i,await Ti(t,s,i))}return n}async function Ti(r,e,t){try{let n=await createImageBitmap(r);if(n.width<=e)return r;let i=Math.round(n.height*e/n.width),s=document.createElement("canvas");s.width=e,s.height=i,s.getContext("2d").drawImage(n,0,0,e,i);let o=r.type==="image/png"||r.type==="image/webp"?r.type:"image/jpeg",a=await new Promise((l,u)=>s.toBlob(h=>h?l(h):u(new Error("Could not scale the image")),o,.9)),d=r.name.replace(/(\.[^.]+)?$/,`-${t.toLowerCase()}$1`);return new File([a],d,{type:o})}catch{return r}}var Li=["image/apng","image/avif","image/gif","image/jpeg","image/png","image/svg+xml","image/webp"],ht=1024*1024;function pt(r){let e=window.baackEditorConfig?.maxImageBytes??10*ht,t=window.baackEditorConfig?.warnImageBytes??2*ht,n=s=>`${(s/ht).toFixed(1)} MB`,i=[];for(let s of r.values())Li.includes(s.type)?s.size>e?i.push({level:"error",message:`${s.name} is ${n(s.size)}; the limit is ${n(e)}. Use a smaller file.`}):s.size>t&&i.push({level:"warning",message:`${s.name} is ${n(s.size)}, large for the web. Compressing it will make the page faster.`}):i.push({level:"error",message:`${s.name} is not an image type Baack accepts: JPEG, PNG, APNG, GIF, WebP, AVIF or SVG.`});return i}var xn="data-content-live",Tn="baack:item-shown",Ln="baack:live-request";function G(r){return r.closest(`[${xn}]`)!==null}var Pe=class{store;shown=new Map;previews=new Set;constructor(e){this.store=e,document.addEventListener(Ln,this.onRequest)}render(e,t){if(!G(e.element)){$t(e.entry,e.element,e,t);return}let n={...this.slot(e),item:t};this.previews.has(Y(n))||(this.shown.set(Y(n),n),Ie(n),t.urn&&e.element.setAttribute(I(e.entry),t.urn))}restore(e){if(!G(e.element))return!1;let t={...this.slot(e),restore:!0};return this.previews.has(Y(t))||(this.shown.delete(Y(t)),Ie(t)),!0}showAt(e,t,n){let i=n?{...this.slot(e),sortOrder:t,item:n}:{...this.slot(e),sortOrder:t,restore:!0};n?(this.shown.set(Y(i),i),this.previews.add(Y(i))):(this.shown.delete(Y(i)),this.previews.delete(Y(i))),Ie(i)}endPreviews(){this.previews.clear()}slot(e){return{entityUrn:this.store.entityFor(e.scope)??e.scope,type:e.entry.type,name:e.name,sortOrder:e.sortOrder}}onRequest=e=>{for(let t of this.shown.values())t.entityUrn===e.detail.entityUrn&&Ie(t)}};function Y(r){return`${r.entityUrn}\0${r.type}\0${r.name}\0${r.sortOrder}`}function Ie(r){document.dispatchEvent(new CustomEvent(Tn,{detail:r}))}var Si=/Mac|iPhone|iPad/.test(navigator.userAgent),$e=class{element;sendsOnEnter;host;callbacks;savedEditable;savedWhiteSpace;savedChildren;constructor(e,t,n,i){this.element=e,this.host=n,this.callbacks=i,this.sendsOnEnter=getComputedStyle(e).display.startsWith("inline")&&e.getAttribute("data-text-layout")!=="paragraphs",this.savedEditable=e.getAttribute("contenteditable"),this.savedWhiteSpace=e.style.whiteSpace,this.savedChildren=G(e)?[...e.childNodes]:void 0,e.textContent=t,Se(e),e.setAttribute("contenteditable","plaintext-only"),e.style.whiteSpace="pre-wrap",e.addEventListener("input",this.onInput),e.addEventListener("keydown",this.onKeyDown),e.addEventListener("blur",this.onBlur),e.focus(),Ai(e)}get hint(){let e=Si?"\u2318":"Ctrl";return this.sendsOnEnter?"Enter to save \xB7 Esc to revert":`${e}+Enter to save \xB7 Esc to revert`}close(){this.element.removeEventListener("input",this.onInput),this.element.removeEventListener("keydown",this.onKeyDown),this.element.removeEventListener("blur",this.onBlur),this.savedEditable===null?this.element.removeAttribute("contenteditable"):this.element.setAttribute("contenteditable",this.savedEditable),this.element.style.whiteSpace=this.savedWhiteSpace,this.element.getAttribute("style")||this.element.removeAttribute("style"),this.savedChildren&&this.element.replaceChildren(...this.savedChildren)}onInput=()=>{Se(this.element),this.callbacks.input()};onKeyDown=e=>{e.key==="Escape"?(e.preventDefault(),this.callbacks.revert()):e.key==="Enter"&&(e.metaKey||e.ctrlKey||this.sendsOnEnter&&!e.shiftKey)&&(e.preventDefault(),this.callbacks.send())};onBlur=e=>{e.relatedTarget!==this.host.element&&this.callbacks.blurred()}};function Ai(r){let e=window.getSelection();if(!e||e.rangeCount>0&&r.contains(e.getRangeAt(0).commonAncestorContainer))return;let t=document.createRange();t.selectNodeContents(r),t.collapse(!1),e.removeAllRanges(),e.addRange(t)}var He=class{ctx;view;save;active;constructor(e,t,n){this.ctx=e,this.view=t,this.save=n}get current(){return this.active}attach(){document.addEventListener("dblclick",this.onDoubleClick,!0),document.addEventListener("click",this.onClick,!0)}detach(){document.removeEventListener("dblclick",this.onDoubleClick,!0),document.removeEventListener("click",this.onClick,!0)}onDoubleClick=e=>{let{discovery:t,toolbar:n}=this.ctx,i=t.closest(e.target);if(!i||this.active?.target.binding?.element===i)return;let s=t.of(i)[0];if(!s)return;e.preventDefault();let o=this.targetFor(s);if(!o){n.showMessage(`The content for "${s.name}" has not loaded.`);return}this.open(o)};onClick=e=>{this.ctx.discovery.closest(e.target)&&e.preventDefault()};onPointerDown=e=>{let t=e.composedPath(),n=this.active?.target.binding?.element??this.active?.target.anchor;!this.active||t.includes(this.ctx.host.element)||n&&t.includes(n)||this.close()};targetFor(e){let{store:t}=this.ctx,n=t.entityFor(e.scope);if(!n)return;let i=e.element.getAttribute(I(e.entry))??void 0;return{entityUrn:n,entry:e.entry,name:e.name,sortOrder:e.sortOrder,urn:i&&t.get(i)?i:void 0,anchor:e.element,binding:e}}open(e){this.view.stopPreview(e);let t=e.binding&&e.binding.element.getClientRects().length>0,n=e.binding?e.entry.component?.(e.binding.element).ownsChildren!==!1:!1;if(e.urn&&e.entry.surface==="inline"&&e.binding&&t&&n)this.openInline(e);else{let i=!e.urn&&e.binding?e.entry.fromPlaceholder?.(e.binding.element):void 0;this.openForm(t?e:{...e,binding:void 0,anchor:e.anchor},i)}}openInline(e){this.close();let{store:t,pending:n,host:i,popover:s}=this.ctx,{entry:o}=e,a=e.binding.element,d=t.get(e.urn),l=n.getEdit(e.urn)?.value??O(o,d.item),u=new $e(a,String(l.value??""),i,{input:()=>this.setPending(e,o.read(a)),send:()=>{this.save(e)},revert:()=>this.revert(e),blurred:()=>this.close()});this.active={target:e,session:u},N(a,"editing"),s.show(a,o.label,`${e.name} #${e.sortOrder}`,u.hint,{send:()=>{this.save(e)},revert:()=>this.revert(e)}),s.setIssues(o.validate(o.read(a))),this.offerHistory(e)}offerHistory(e){let{hooks:t}=this.ctx;this.ctx.popover.setNameAction(()=>t.showItem(e));let n=e.urn;if(!n||e.fromVersion){this.ctx.popover.setExtras([]);return}let i=e.binding,s=[{label:"History",icon:"history",run:()=>{this.close(),t.openHistory({entityUrn:e.entityUrn,entry:e.entry,name:e.name,sortOrder:e.sortOrder,urn:n})}}];i&&t.canReorder(i)&&s.push({label:"Move up",icon:"arrow-up",menu:!0,run:()=>t.moveBy(i,-1)},{label:"Move down",icon:"arrow-down",menu:!0,run:()=>t.moveBy(i,1)},{label:"Reorder\u2026",icon:"list-ordered",menu:!0,run:()=>t.reorder(i)}),s.push({label:"Move or rename\u2026",icon:"pencil-line",menu:!0,run:()=>t.relocate(e)}),this.ctx.popover.setExtras(s)}async openForm(e,t){this.close();let{store:n,pending:i,popover:s,toolbar:o}=this.ctx,{entry:a}=e,d=a.form;if(!d)return;let l;if(e.urn){let h=await this.baseValue(e);if(!h)return;l=(e.fromVersion?void 0:i.getEdit(e.urn)?.value)??h}else{if(n.itemAt(e.entityUrn,a,e.name,e.sortOrder)){o.showMessage(`An item already exists at ${e.name} #${e.sortOrder}.`);return}l=i.getCreate(P({...e,type:a.type}))?.value??t??(e.binding?a.fromPlaceholder?.(e.binding.element):void 0)??a.defaults()}this.active={target:e,session:void 0},e.binding&&N(e.binding.element,"editing");let u=d.toForm(l);s.showForm(e.anchor,e.fromVersion?`${a.label}, from an older version`:e.urn?a.label:`New ${a.label.toLowerCase()}`,`${e.name} #${e.sortOrder}`,d.fields,u,{input:h=>this.onFormInput(e,h),send:()=>{this.save(e)},revert:()=>this.revert(e)},a.surface==="panel"),s.setDescription(this.describeForm(e,u)),s.setIssues(a.validate(l)),this.offerHistory(e),document.addEventListener("pointerdown",this.onPointerDown,!0)}describeForm(e,t){let n=[e.entry.form?.describe?.(t)??""];return!e.urn&&S(this.ctx.store.view(e.entityUrn)?.status)&&n.push("This content is published, so a new item is live as soon as it is saved."),n.filter(Boolean).join(" ")}async baseValue(e){let{store:t,sources:n,transport:i,feedback:s}=this.ctx,o=e.urn,a=t.get(o)??t.itemAt(e.entityUrn,e.entry,e.name,e.sortOrder);if(!(!a||a.item.urn!==o)){if(!e.entry.renderedByView)return O(e.entry,a.item);try{let d=n.get(o)??O(e.entry,await i.read(e.entry,o));return n.set(o,d),d}catch(d){s.report(d,"load the source",()=>{this.openForm(e)});return}}}close(){let e=this.active;if(!e)return;this.active=void 0,document.removeEventListener("pointerdown",this.onPointerDown,!0),e.session?.close(),this.ctx.popover.hide();let t=e.target.binding;this.view.isEditing&&t?.element.isConnected&&this.view.show(t)}onFormInput(e,t){let{popover:n}=this.ctx,i=e.entry.form;if(!i)return;n.setDescription(this.describeForm(e,t));let s=i.fromForm(t);if(typeof s=="string"){n.setError(s),n.setIssues([]);return}n.setError("");let o=e.entry.type==="image"?pt(n.files()):[];n.setIssues([...e.entry.validate(s),...o]),this.setPending(e,s)}setPending(e,t){let{store:n,sources:i,pending:s,popover:o}=this.ctx,{entry:a}=e,d=t;if(e.urn){let l=n.get(e.urn)??n.itemAt(e.entityUrn,a,e.name,e.sortOrder);d=ve(a,l?.item,t);let u=a.renderedByView?i.get(e.urn):l?.item;u&&ye(a,d,u)?s.clear(e.urn):s.set({kind:"edit",type:a.type,urn:e.urn,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:d,...e.fromVersion?{fromVersion:!0}:{}})}else s.set({kind:"create",type:a.type,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:d});this.view.reshow(e),e.entry.surface==="inline"&&this.active?.session&&o.setIssues(a.validate(d))}revert(e){this.ctx.pending.clear(e.urn??P({...e,type:e.entry.type})),this.close(),this.view.reshow(e)}};function ie(r,e,t){if(R(r)){let n=Mi(r);return n===void 0?Sn(r,e,t):{...Sn(r,e,t),debug:n}}return Oi(r,e)}function Sn(r,e,t){if(r.isUnauthorized||r.isNotFound&&t===!1)return{kind:"unauthorized",message:`Your session has ended. Log in again to ${e}. Your changes are kept.`};if(r.isForbidden)return{kind:"forbidden",message:`You don't have permission to ${e}.`};if(r.isNotFound)return{kind:"not-found",message:`This item no longer exists, or you don't have permission to ${e}.`};if(r.isConflict)return{kind:"conflict",message:"Someone else changed this since you opened it. Reload to see their version."};let{detail:n}=r;return{kind:"failed",message:`Couldn't ${e} (HTTP ${r.status})${n?`: ${n.replace(/\.$/,"")}`:""}. Try again.`}}function Oi(r,e){if(r instanceof Q)return{kind:"not-live",message:"This content is not published yet, so it has no live version to show. Show the latest drafts to edit it."};if(r instanceof de){let{language:t}=r.received;return{kind:"mismatch",message:`Couldn't ${e}: Baack returned a different language version (${t}) instead of the content on this page, so it can't be edited here. Reload the page and try again.`}}return r instanceof TypeError?{kind:"network",message:`Couldn't reach Baack to ${e}. Check your connection and try again.`}:{kind:"failed",message:`Couldn't ${e}: ${r instanceof Error?r.message:String(r)}`}}function Mi(r){let e=r.json();if(e===void 0)return;let t=s=>{try{return JSON.stringify(JSON.parse(s),null,2)}catch{return s}},n=(()=>{try{return new URL(r.url).pathname}catch{return r.url}})();return`${`Request: ${r.method} ${n}${r.requestBody?`
|
|
2
|
+
`).map(t=>t.replace(/\s+/g," ").trim()).filter(Boolean)).filter(e=>e.length>0)}function Oe(r){return Ae(r).flat()}var mi=/(https?:\/\/[^\s)]+[^\s).,;:!?]|[\w.+-]+@[\w-]+(?:\.[\w-]+)+)/g;function Rt(r){return r.split(mi).map((e,t)=>{if(e!=="")return t%2===0?{text:e}:{text:e,href:e.includes("@")&&!e.startsWith("http")?`mailto:${e}`:e}}).filter(e=>e!==void 0)}function ue(r){try{return new Intl.NumberFormat("en-GB",{style:"currency",currency:r}).resolvedOptions().maximumFractionDigits??2}catch{return 2}}function Nt(r){return r.formattedValue?r.formattedValue:Me(r.unitValue,ue(r.currencyCode))}function Dt(r){if(r.currencySymbol)return r.currencySymbol;try{return new Intl.NumberFormat("en-GB",{style:"currency",currency:r.currencyCode}).formatToParts(0).find(t=>t.type==="currency")?.value??r.currencyCode}catch{return r.currencyCode}}function Me(r,e){let t=r<0,n=String(Math.abs(Math.trunc(r)));if(e===0)return(t?"-":"")+n;let i=n.padStart(e+1,"0");return`${t?"-":""}${i.slice(0,-e)}.${i.slice(-e)}`}function lt(r,e){let t=/^\s*(-)?(\d+)(?:\.(\d*))?\s*$/.exec(r);if(!t)return;let[,n,i="0",s=""]=t;if(s.length>e)return;let o=Number(i+s.padEnd(e,"0"));if(Number.isSafeInteger(o))return n?-o:o}function M(r){return Date.parse(/[zZ]|[+-]\d\d:?\d\d$/.test(r)?r:`${r}Z`)}function Ft(r,e){let t=M(r);if(Number.isNaN(t))return r;let n={timeZone:e.timeZone??"UTC"};return e.dateStyle&&(n.dateStyle=e.dateStyle),e.timeStyle&&(n.timeStyle=e.timeStyle),!e.dateStyle&&!e.timeStyle&&(n.dateStyle="medium"),new Intl.DateTimeFormat(e.locale??"en-GB",n).format(t)}function Ut(r,e){return new Intl.NumberFormat(e??"en-GB",{maximumFractionDigits:20}).format(r)}var fi=new Set(["id","role","title","lang","dir","tabindex","itemscope","itemtype","itemid","itemref"]),vi=/^data-(placeholder|section|content-rows?|[a-z]+-(name|sort-order|urn|list))$/;function yi(r){return vi.test(r)?!1:fi.has(r)||/^(data|aria)-[a-z0-9-]+$/.test(r)}function $(r){let e={};for(let[t,n]of Object.entries(r??{}))yi(t)&&(e[t]=n);return e}function H(r,e,t){return{[`data-${r}-name`]:e.name,[`data-${r}-sort-order`]:String(e.sortOrder),[`data-${r}-urn`]:t?void 0:e.item?.urn,"data-placeholder":t?"":void 0}}function D(r,...e){return[`data-${r}-urn`,"data-placeholder",...e]}function ne(r){return{className:r.getAttribute("class")??void 0,itemProp:r.getAttribute("itemprop")??void 0}}function Vt(r,e,t){return t?r.flatMap((n,i)=>i>0?[E("br"),...e(n)]:e(n)):[r.join(" ")]}function _t(r,e){return e?Rt(r).map(t=>"href"in t?E("a",{href:t.href},t.text):t.text):[r]}var ct={type:"text",volatile:D("text"),ownsChildren:!0,render(r,e){let t=r.item?Oe(r.item.value):[],n=t.length===0,i=e.as??"span",s=n?Oe(e.placeholder):t,o=E(i,{...$(e.attributes),class:e.className,itemprop:e.itemProp,...H("text",r,n),"data-text-linkify":e.linkify?"":void 0,"data-text-unsafe-literal":e.unsafeLiteral?"":void 0},...Vt(s,a=>_t(a,e.linkify===!0),i!=="title"&&i!=="option"));return e.unsafeLiteral&&!n&&(o.html=r.item.value),o},propsFrom:r=>({...ne(r),placeholder:"",as:r.localName,linkify:r.hasAttribute("data-text-linkify"),unsafeLiteral:r.hasAttribute("data-text-unsafe-literal")})},zt={type:"text",volatile:D("text"),ownsChildren:!0,render(r,e){let t=r.item?Ae(r.item.value):[],n=t.length===0,i=n?Ae(e.placeholder):t,s=E(e.as??"div",{...$(e.attributes),class:e.className,itemprop:e.itemProp,...H("text",r,n),"data-text-layout":"paragraphs","data-text-linkify":e.linkify?"":void 0,"data-text-unsafe-literal":e.unsafeLiteral?"":void 0},...i.map(o=>E("p",{class:e.paragraphClassName},...Vt(o,a=>_t(a,e.linkify===!0),!0))));return e.unsafeLiteral&&!n&&(s.html=r.item.value),s},propsFrom:r=>({...ct.propsFrom(r),paragraphClassName:r.querySelector(":scope > p")?.getAttribute("class")??void 0})},Gt={type:"text",volatile:D("text","content"),ownsChildren:!1,render(r,e){let t=r.item?Oe(r.item.value).join(" "):"",n=t==="";return E("meta",{...$(e.attributes),name:e.name,property:e.property,content:n?e.placeholder:t,...H("text",r,n)})},propsFrom:r=>({name:r.getAttribute("name")??void 0,property:r.getAttribute("property")??void 0,placeholder:""})};function Kt(r){return{type:r,volatile:D(r),ownsChildren:!0,render(e,t){let n=e.item?.value,i=!n?.trim(),s=E(t.as??"div",{...$(t.attributes),class:t.className,itemprop:t.itemProp,...H(r,e,i)});return i?s.children=[E("p",{},t.placeholder)]:s.html=n,s},propsFrom:e=>({...ne(e),placeholder:"",as:e.localName})}}var jt=Kt("markdown"),Wt=Kt("template"),qt={type:"money",volatile:D("money","itemprop","content","data-money-currency","data-money-unit-value"),ownsChildren:!0,render(r,e){let t=r.item,n={"data-money-offer":e.offer?"":void 0,"data-money-item-prop":e.offer?void 0:e.itemProp};if(!t)return E("span",{...$(e.attributes),class:e.className,...H("money",r,!0),...n},e.placeholder);let i=Nt(t);return E("span",{...$(e.attributes),class:e.className,itemprop:e.offer?"price":e.itemProp,content:e.offer?i:void 0,...H("money",r,!1),"data-money-currency":t.currencyCode,"data-money-unit-value":String(t.unitValue),...n},E("span",{itemprop:e.offer?"priceCurrency":void 0,content:e.offer?t.currencyCode:void 0},Dt(t)),i)},propsFrom:r=>({className:r.getAttribute("class")??void 0,itemProp:r.getAttribute("data-money-item-prop")??void 0,offer:r.hasAttribute("data-money-offer"),placeholder:""})};function Yt(r){return{type:r,volatile:D(r,"value"),ownsChildren:!0,render(e,t){let n=e.item;return E("data",{...$(t.attributes),class:t.className,itemprop:t.itemProp,value:n?String(n.value):void 0,...H(r,e,!n),"data-locale":t.locale},n?Ut(n.value,t.locale):t.placeholder)},propsFrom:e=>({...ne(e),placeholder:"",locale:e.getAttribute("data-locale")??void 0})}}var Jt=Yt("long"),Zt=Yt("double"),Xt={type:"datetime",volatile:D("datetime","datetime"),ownsChildren:!0,render(r,e){let t=r.item,n=t?M(t.value):NaN;return E("time",{...$(e.attributes),class:e.className,itemprop:e.itemProp,datetime:Number.isNaN(n)?void 0:new Date(n).toISOString(),...H("datetime",r,!t),"data-locale":e.locale,"data-date-style":e.dateStyle,"data-time-style":e.timeStyle,"data-time-zone":e.timeZone},t?Ft(t.value,e):e.placeholder)},propsFrom:r=>({...ne(r),placeholder:"",locale:r.getAttribute("data-locale")??void 0,dateStyle:r.getAttribute("data-date-style")??void 0,timeStyle:r.getAttribute("data-time-style")??void 0,timeZone:r.getAttribute("data-time-zone")??void 0})},Qt={type:"boolean",volatile:D("boolean","hidden"),ownsChildren:!1,render(r,e){let t=r.item?r.item.value:e.fallback===!0,n=e.invert?!t:t;return E(e.as??"div",{...$(e.attributes),class:e.className,hidden:n?void 0:"",...H("boolean",r,!r.item),"data-boolean-value":String(t),"data-boolean-invert":e.invert?"":void 0})},propsFrom:r=>({className:r.getAttribute("class")??void 0,invert:r.hasAttribute("data-boolean-invert"),as:r.localName})},en={type:"latlong",volatile:D("latlong"),ownsChildren:!0,render(r,e){let t=r.item,n={...$(e.attributes),class:e.className,itemprop:e.itemProp,itemscope:"",itemtype:"https://schema.org/GeoCoordinates",...H("latlong",r,!t)};return t?E("span",n,E("meta",{itemprop:"latitude",content:String(t.latitude)}),E("meta",{itemprop:"longitude",content:String(t.longitude)}),`${t.latitude}, ${t.longitude}`):E("span",n,e.placeholder)},propsFrom:r=>({...ne(r),placeholder:""})},tn={type:"link",volatile:D("link","rel","hreflang"),ownsChildren:!0,render(r,e){let t=r.item,n=t?t.text||t.href:e.placeholder;return E("a",{...$(e.attributes),class:e.className,itemprop:e.itemProp,href:t?t.href:e.placeholderHref??"#",rel:t?.rel||void 0,hreflang:t?.lang||void 0,...H("link",r,!t)},e.textItemProp?E("span",{itemprop:e.textItemProp},n):n)},propsFrom:r=>({...ne(r),placeholder:"",textItemProp:r.querySelector(":scope > span[itemprop]")?.getAttribute("itemprop")??void 0})},gi="768px",bi="1024px",nn={type:"image",volatile:D("image"),ownsChildren:!0,render(r,e){let t=r.item,n={...$(e.attributes),class:e.className,...H("image",r,!t?.src),"data-image-priority":e.priority?"":void 0,"data-image-alt":e.placeholderAlt,"data-image-item-prop":e.itemProp,"data-image-img-class":e.imgClassName};return t?.src?E("picture",n,...t.largeSrc?[E("source",{media:`(min-width: ${bi})`,srcset:t.largeSrc})]:[],...t.mediumSrc?[E("source",{media:`(min-width: ${gi})`,srcset:t.mediumSrc})]:[],E("img",{src:t.src,alt:t.altText??e.placeholderAlt??"",loading:e.priority?"eager":"lazy",decoding:"async",fetchpriority:e.priority?"high":void 0,itemprop:e.itemProp,class:e.imgClassName})):E("picture",n)},propsFrom:r=>({className:r.getAttribute("class")??void 0,priority:r.hasAttribute("data-image-priority"),itemProp:r.getAttribute("data-image-item-prop")??void 0,imgClassName:r.getAttribute("data-image-img-class")??void 0,placeholderAlt:r.getAttribute("data-image-alt")??void 0})};var rn={type:"text",volatile:D("text","data-section"),ownsChildren:!1,render(r,e){let t=r.item?.value.trim();return E(e.as??"section",{...$(e.attributes),class:e.className,...H("text",r,!t),"data-section":t||e.placeholder})},propsFrom:r=>({className:r.getAttribute("class")??void 0,placeholder:r.getAttribute("data-section")??"",as:r.localName})};var A=r=>typeof r=="string"?r:"";function dn(r,e,t,n,i,s){return{type:r,label:e,attribute:r,entityArray:r==="markdown"?"markdowns":"templates",endpoint:t,historyEndpoint:n,surface:"panel",valueKeys:["value"],renderedByView:!0,component:()=>i,fromPlaceholder:o=>({value:(o.textContent??"").trim()}),find:s,defaults:()=>({value:""}),form:{fields:[{key:"value",label:r==="markdown"?"Markdown source":"Velocity template source",kind:"code"}],toForm:o=>({value:o.value}),fromForm:o=>({value:A(o.value)}),describe:()=>r==="markdown"?"The page shows the rendered result after you send.":"Templates can show other items. The page shows the result after you send."},validate:()=>[]}}var ln=dn("markdown","Markdown",w.MARKDOWN,w.MARKDOWN_HISTORY,jt,(r,e,t)=>r.markdown(e,t)),cn=dn("template","Template",w.TEMPLATE,w.TEMPLATE_HISTORY,Wt,(r,e,t)=>r.template(e,t)),un={type:"json",label:"JSON",attribute:"json",entityArray:"jsons",endpoint:w.JSON,historyEndpoint:w.JSON_HISTORY,surface:"panel",valueKeys:["value"],find:(r,e,t)=>r.json(e,t),defaults:()=>({value:{}}),form:{fields:[{key:"value",label:"JSON object",kind:"code"}],toForm:r=>({value:JSON.stringify(r.value??{},null,2)}),fromForm:r=>{try{let e=JSON.parse(A(r.value));return typeof e!="object"||e===null||Array.isArray(e)?'The value must be a JSON object, like {"key": "value"}.':{value:e}}catch(e){return`This is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}},validate:()=>[]},hn={type:"boolean",label:"Switch",attribute:"boolean",entityArray:"booleans",endpoint:w.BOOLEAN,historyEndpoint:w.BOOLEAN_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Qt,fromPlaceholder:r=>({value:r.getAttribute("data-boolean-value")==="true"}),find:(r,e,t)=>r.boolean(e,t),defaults:()=>({value:!1}),form:{fields:[{key:"value",label:"On",kind:"checkbox"}],toForm:r=>({value:r.value}),fromForm:r=>({value:r.value===!0})},validate:()=>[]};function wi(r){if(!/^\s*-?\d+\s*$/.test(r))return;let e=Number(r);return Number.isSafeInteger(e)?e:void 0}var pn={type:"long",label:"Whole number",attribute:"long",entityArray:"longs",endpoint:w.LONG,historyEndpoint:w.LONG_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Jt,find:(r,e,t)=>r.long(e,t),defaults:()=>({value:0}),form:{fields:[{key:"value",label:"Value",kind:"integer"}],toForm:r=>({value:String(r.value)}),fromForm:r=>{let e=wi(A(r.value));return e===void 0?"Enter a whole number.":{value:e}}},validate:()=>[]};function ut(r){if(!/^\s*-?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?\s*$/i.test(r))return;let e=Number(r);return Number.isFinite(e)?e:void 0}var mn={type:"double",label:"Number",attribute:"double",entityArray:"doubles",endpoint:w.DOUBLE,historyEndpoint:w.DOUBLE_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Zt,find:(r,e,t)=>r.double(e,t),defaults:()=>({value:0}),form:{fields:[{key:"value",label:"Value",kind:"decimal"}],toForm:r=>({value:String(r.value)}),fromForm:r=>{let e=ut(A(r.value));return e===void 0?"Enter a number.":{value:e}}},validate:()=>[]};function Ei(r){let e=M(r);return Number.isNaN(e)?"":new Date(e-new Date(e).getTimezoneOffset()*6e4).toISOString().slice(0,16)}function on(r){if(!/^\d{4}-\d\d-\d\dT\d\d:\d\d(:\d\d)?$/.test(r))return;let e=new Date(r).getTime();return Number.isNaN(e)?void 0:new Date(e).toISOString().replace("Z","")}var fn={type:"dateTime",label:"Date and time",attribute:"datetime",entityArray:"dateTimes",endpoint:w.DATE_TIME,historyEndpoint:w.DATE_TIME_HISTORY,surface:"popover",valueKeys:["value"],component:()=>Xt,find:(r,e,t)=>r.date(e,t),defaults:()=>({value:new Date().toISOString().replace("Z","")}),form:{fields:[{key:"value",label:"Date and time (your local time)",kind:"datetime"}],toForm:r=>({value:Ei(r.value)}),fromForm:r=>{let e=on(A(r.value));return e===void 0?"Enter a date and time.":{value:e}},describe:r=>{let e=on(A(r.value));return e?`Stored as ${e.slice(0,16).replace("T"," ")} UTC.`:""}},validate:()=>[]},vn={type:"latLong",label:"Location",attribute:"latlong",entityArray:"latLongs",endpoint:w.LAT_LONG,historyEndpoint:w.LAT_LONG_HISTORY,surface:"popover",valueKeys:["latitude","longitude"],component:()=>en,find:(r,e,t)=>r.latLong(e,t),defaults:()=>({latitude:0,longitude:0}),form:{fields:[{key:"latitude",label:"Latitude",kind:"decimal"},{key:"longitude",label:"Longitude",kind:"decimal"}],toForm:r=>({latitude:String(r.latitude),longitude:String(r.longitude)}),fromForm:r=>{let e=ut(A(r.latitude)),t=ut(A(r.longitude));return e===void 0||Math.abs(e)>90?"Latitude must be a number from -90 to 90.":t===void 0||Math.abs(t)>180?"Longitude must be a number from -180 to 180.":{latitude:e,longitude:t}}},validate:()=>[]};function an(r){if(!/^[A-Z]{3}$/.test(r))return!1;try{return new Intl.NumberFormat("en",{style:"currency",currency:r}),!0}catch{return!1}}var yn={type:"money",label:"Money",attribute:"money",entityArray:"money",endpoint:w.MONEY,historyEndpoint:w.MONEY_HISTORY,surface:"popover",valueKeys:["currencyCode","unitValue"],derived:["formattedValue","currencySymbol"],component:()=>qt,find:(r,e,t)=>r.money(e,t),defaults:()=>({currencyCode:"GBP",unitValue:0}),form:{fields:[{key:"currencyCode",label:"Currency",kind:"currency"},{key:"amount",label:"Amount",kind:"text"}],toForm:r=>({currencyCode:r.currencyCode,amount:Me(r.unitValue,ue(r.currencyCode))}),fromForm:r=>{let e=A(r.currencyCode).trim().toUpperCase();if(!an(e))return"Enter a three-letter currency code, like GBP or JPY.";let t=ue(e),n=lt(A(r.amount),t);return n===void 0?t===0?`${e} has no minor units. Enter a whole amount.`:`Enter an amount with at most ${t} decimal places, like ${Me(1250,t)}.`:{currencyCode:e,unitValue:n}},describe:r=>{let e=A(r.currencyCode).trim().toUpperCase();if(!an(e))return"";let t=lt(A(r.amount),ue(e));return t===void 0?"":`Stored as ${t} in the smallest unit of ${e}.`}},validate:()=>[]},V=[{size:"DEFAULT",field:"src",label:"Default file"},{size:"MEDIUM",field:"mediumSrc",label:"Medium file (from 768px wide)"},{size:"LARGE",field:"largeSrc",label:"Large file (from 1024px wide)"}],gn={type:"image",label:"Image",attribute:"image",entityArray:"images",endpoint:w.IMAGE,historyEndpoint:w.IMAGE_HISTORY,surface:"popover",valueKeys:["altText","src","mediumSrc","largeSrc"],carried:["src","mediumSrc","largeSrc"],component:()=>nn,fromPlaceholder:r=>({altText:r.querySelector("img")?.alt??""}),find:(r,e,t)=>r.image(e,t),defaults:()=>({altText:""}),form:{fields:[{key:"altText",label:"Alt text",kind:"text"},...V.map(r=>({key:r.size,label:r.label,kind:"file"}))],toForm:r=>({altText:r.altText??"",...Object.fromEntries(V.flatMap(e=>[[e.size,""],[`${e.size}:current`,String(r[e.field]??"")]]))}),fromForm:r=>({altText:A(r.altText)}),describe:r=>{let e=V.filter(i=>A(r[i.size])!=="");if(e.length===0)return"Saving keeps the current files.";let t=V.filter(i=>!e.includes(i)&&A(r[`${i.size}:current`])!==""),n=`Saving creates a new version, then uploads ${e.map(i=>i.label.toLowerCase().split(" (")[0]).join(", ")}.`;return e.some(i=>i.size==="DEFAULT")&&t.length>0?`${n} The ${t.map(i=>i.size.toLowerCase()).join(" and ")} file still shows the previous picture; choose new ones too if it changed.`:n}},validate:({altText:r})=>r?[]:[{level:"warning",message:"Images need alt text unless they are decorative."}]},bn={type:"link",label:"Link",attribute:"link",entityArray:"links",endpoint:w.LINK,historyEndpoint:w.LINK_HISTORY,surface:"popover",valueKeys:["href","text","rel","lang"],component:()=>tn,fromPlaceholder:r=>{let e=r.getAttribute("href"),t=(r.textContent??"").trim();return{href:e&&e!=="#"?e:"",...t?{text:t}:{}}},find:(r,e,t)=>r.link(e,t),defaults:()=>({href:"",text:""}),form:{fields:[{key:"text",label:"Text",kind:"text"},{key:"href",label:"Address",kind:"url"},{key:"rel",label:"Relationship (rel), e.g. nofollow",kind:"text"},{key:"lang",label:"Language of the target, e.g. en",kind:"text"}],toForm:r=>({text:r.text??"",href:r.href,rel:r.rel??"",lang:r.lang??""}),fromForm:r=>{let e=A(r.href).trim();if(!e)return"Enter the address the link goes to.";if(e.length>2048)return"The address can be at most 2048 characters.";let t={href:e};for(let n of["text","rel","lang"]){let i=A(r[n]).trim();i&&(t[n]=i)}return t}},validate:({href:r})=>/^\s*javascript:/i.test(r)?[{level:"error",message:"Links cannot run scripts."}]:[]},wn={type:"reference",label:"Reference",attribute:"reference",entityArray:"references",endpoint:w.REFERENCE,historyEndpoint:w.REFERENCE_HISTORY,surface:"popover",valueKeys:["entityReference"],find:(r,e,t)=>r.reference(e,t),defaults:()=>({entityReference:{urn:""}}),form:{fields:[{key:"urn",label:"Entity referred to",kind:"entity"}],toForm:r=>({urn:r.entityReference?.urn??""}),fromForm:r=>{let e=A(r.urn).trim();return/^[0-9a-f-]{36}$/i.test(e)?{entityReference:{urn:e}}:"Choose the entity this refers to."}},validate:()=>[]};var En=[250,500,1e3,2e3,4e3],ki=3e4,Ce=class{ctx;view;saving;editing;constructor(e,t,n,i){this.ctx=e,this.view=t,this.saving=n,this.editing=i}async save(e,t){let n=pt(t).find(y=>y.level==="error");if(n)return this.ctx.popover.setError(n.message);let i=await xi(t,window.baackEditorConfig?.imageWidths),{pending:s,popover:o,store:a,feedback:d}=this.ctx,l=e.entry,u=l.form.fromForm(o.values());if(typeof u=="string")return o.setError(u);let h=e.urn?a.get(e.urn)?.item:void 0,f=ve(l,h,u);for(let y of i.keys())delete f[V.find(g=>g.size===y).field];e.urn?s.set({kind:"edit",type:l.type,urn:e.urn,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:f}):s.set({kind:"create",type:l.type,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:f});let p=e.urn?s.getEdit(e.urn):s.getCreate(P({...e,type:l.type}));o.setSending(!0),o.setError("");let v;try{v=await this.saving().commit(p)}catch(y){o.setSending(!1);let g=await d.describe(y,"save this image");o.setError(g.message,g.debug);return}o.setSending(!1);let m=new Map([...i].map(([y,g])=>[y,URL.createObjectURL(g)]));this.preview(e.entityUrn,v,m),await this.upload(e,v,i,m)}async upload(e,t,n,i){let{transport:s,feedback:o,toolbar:a}=this.ctx;this.editing().close();let d=c("div","simple-form");d.setAttribute("aria-label","Image upload");let l=new Map;d.append(c("div","title",`Uploading to a new version of ${e.name}`));for(let[b,k]of n){let B=c("p","hint",`${kn(b)}: ${k.name}: uploading\u2026`);l.set(b,B),d.append(B)}let u=this.ctx.panels.show(d,{entityUrn:e.entityUrn,focus:!1}),h=(b,k,B=!1)=>{let K=l.get(b);K.textContent=`${kn(b)}: ${n.get(b).name}: ${k}`,K.className=B?"error":"hint"},f=await Promise.allSettled([...n].map(([b,k])=>s.uploadImageFile(t.urn,b,k))),p=f.flatMap(b=>b.status==="fulfilled"?[b.value]:[]),v=new Map;for(let[b,k]of f.entries()){let[B,K]=[...n][b];k.status==="rejected"?(v.set(B,K),h(B,(await o.describe(k.reason,"upload this file")).message,!0)):h(B,"uploaded; waiting for the CDN\u2026")}let m=[...n.keys()].filter(b=>!v.has(b)),y=b=>V.find(k=>k.size===b).field,x=m.every(b=>p.some(k=>k[y(b)]))||await this.waitForAddresses(e.entry,t.urn,m);for(let b of m)h(b,x?"done":"still processing; it appears when the CDN has placed it.");if(await this.view.refresh(e.entityUrn),v.size>0){this.preview(e.entityUrn,t,new Map([...i].filter(([B])=>v.has(B))));let b=c("button","primary","Retry failed uploads");b.type="button",b.addEventListener("click",()=>{this.retry(e,t,v,i)});let k=c("div","actions");k.append(b),d.append(c("p","message","Some files were not uploaded. The new version keeps the others."),k);return}for(let b of i.values())URL.revokeObjectURL(b);u.close(),a.showMessage(`Uploaded ${n.size} ${n.size===1?"file":"files"} to a new version of ${e.name}.`,!0)}async retry(e,t,n,i){let s=await this.ctx.transport.read(e.entry,t.urn),o=new Map([...n].filter(([a])=>!s[V.find(d=>d.size===a).field]));await this.upload(e,t,o,i)}async waitForAddresses(e,t,n){if(n.length===0)return!0;let i=Date.now();for(let s=0;Date.now()-i<ki;s+=1){let o=await this.ctx.transport.read(e,t);if(n.every(a=>o[V.find(d=>d.size===a).field]))return this.ctx.store.remember(this.ctx.store.get(t)?.entityUrn??"",e,o),!0;await new Promise(a=>setTimeout(a,En[Math.min(s,En.length-1)]))}return!1}preview(e,t,n){let i={...this.ctx.store.get(t.urn)?.item??t};for(let[o,a]of n)i[V.find(d=>d.size===o).field]=a;let s=this.ctx.entry("image");for(let o of this.ctx.discovery.all())o.entry!==s||this.ctx.store.entityFor(o.scope)!==e||o.element.getAttribute(I(s))!==t.urn&&!(o.name===t.name&&o.sortOrder===t.sortOrder)||(this.ctx.live.render(o,i),N(o.element,"changed"))}};function kn(r){return V.find(e=>e.size===r).label.split(" (")[0]}async function xi(r,e){let t=r.get("DEFAULT");if(!e||!t||r.size>1)return r;let n=new Map(r);for(let i of["MEDIUM","LARGE"]){let s=e[i];s&&n.set(i,await Ti(t,s,i))}return n}async function Ti(r,e,t){try{let n=await createImageBitmap(r);if(n.width<=e)return r;let i=Math.round(n.height*e/n.width),s=document.createElement("canvas");s.width=e,s.height=i,s.getContext("2d").drawImage(n,0,0,e,i);let o=r.type==="image/png"||r.type==="image/webp"?r.type:"image/jpeg",a=await new Promise((l,u)=>s.toBlob(h=>h?l(h):u(new Error("Could not scale the image")),o,.9)),d=r.name.replace(/(\.[^.]+)?$/,`-${t.toLowerCase()}$1`);return new File([a],d,{type:o})}catch{return r}}var Li=["image/apng","image/avif","image/gif","image/jpeg","image/png","image/svg+xml","image/webp"],ht=1024*1024;function pt(r){let e=window.baackEditorConfig?.maxImageBytes??10*ht,t=window.baackEditorConfig?.warnImageBytes??2*ht,n=s=>`${(s/ht).toFixed(1)} MB`,i=[];for(let s of r.values())Li.includes(s.type)?s.size>e?i.push({level:"error",message:`${s.name} is ${n(s.size)}; the limit is ${n(e)}. Use a smaller file.`}):s.size>t&&i.push({level:"warning",message:`${s.name} is ${n(s.size)}, large for the web. Compressing it will make the page faster.`}):i.push({level:"error",message:`${s.name} is not an image type Baack accepts: JPEG, PNG, APNG, GIF, WebP, AVIF or SVG.`});return i}var xn="data-content-live",Tn="baack:item-shown",Ln="baack:live-request";function G(r){return r.closest(`[${xn}]`)!==null}var Pe=class{store;shown=new Map;previews=new Set;constructor(e){this.store=e,document.addEventListener(Ln,this.onRequest)}render(e,t){if(!G(e.element)){$t(e.entry,e.element,e,t);return}let n={...this.slot(e),item:t};this.previews.has(Y(n))||(this.shown.set(Y(n),n),Ie(n),t.urn&&e.element.setAttribute(I(e.entry),t.urn))}restore(e){if(!G(e.element))return!1;let t={...this.slot(e),restore:!0};return this.previews.has(Y(t))||(this.shown.delete(Y(t)),Ie(t)),!0}showAt(e,t,n){let i=n?{...this.slot(e),sortOrder:t,item:n}:{...this.slot(e),sortOrder:t,restore:!0};n?(this.shown.set(Y(i),i),this.previews.add(Y(i))):(this.shown.delete(Y(i)),this.previews.delete(Y(i))),Ie(i)}endPreviews(){this.previews.clear()}slot(e){return{entityUrn:this.store.entityFor(e.scope)??e.scope,type:e.entry.type,name:e.name,sortOrder:e.sortOrder}}onRequest=e=>{for(let t of this.shown.values())t.entityUrn===e.detail.entityUrn&&Ie(t)}};function Y(r){return`${r.entityUrn}\0${r.type}\0${r.name}\0${r.sortOrder}`}function Ie(r){document.dispatchEvent(new CustomEvent(Tn,{detail:r}))}var Si=/Mac|iPhone|iPad/.test(navigator.userAgent),$e=class{element;sendsOnEnter;host;callbacks;savedEditable;savedWhiteSpace;savedChildren;constructor(e,t,n,i){this.element=e,this.host=n,this.callbacks=i,this.sendsOnEnter=getComputedStyle(e).display.startsWith("inline")&&e.getAttribute("data-text-layout")!=="paragraphs",this.savedEditable=e.getAttribute("contenteditable"),this.savedWhiteSpace=e.style.whiteSpace,this.savedChildren=G(e)?[...e.childNodes]:void 0,e.textContent=t,Se(e),e.setAttribute("contenteditable","plaintext-only"),e.style.whiteSpace="pre-wrap",e.addEventListener("input",this.onInput),e.addEventListener("keydown",this.onKeyDown),e.addEventListener("blur",this.onBlur),e.focus(),Ai(e)}get hint(){let e=Si?"\u2318":"Ctrl";return this.sendsOnEnter?"Enter to save \xB7 Esc to revert":`${e}+Enter to save \xB7 Esc to revert`}close(){this.element.removeEventListener("input",this.onInput),this.element.removeEventListener("keydown",this.onKeyDown),this.element.removeEventListener("blur",this.onBlur),this.savedEditable===null?this.element.removeAttribute("contenteditable"):this.element.setAttribute("contenteditable",this.savedEditable),this.element.style.whiteSpace=this.savedWhiteSpace,this.element.getAttribute("style")||this.element.removeAttribute("style"),this.savedChildren&&this.element.replaceChildren(...this.savedChildren)}onInput=()=>{Se(this.element),this.callbacks.input()};onKeyDown=e=>{e.key==="Escape"?(e.preventDefault(),this.callbacks.revert()):e.key==="Enter"&&(e.metaKey||e.ctrlKey||this.sendsOnEnter&&!e.shiftKey)&&(e.preventDefault(),this.callbacks.send())};onBlur=e=>{e.relatedTarget!==this.host.element&&this.callbacks.blurred()}};function Ai(r){let e=window.getSelection();if(!e||e.rangeCount>0&&r.contains(e.getRangeAt(0).commonAncestorContainer))return;let t=document.createRange();t.selectNodeContents(r),t.collapse(!1),e.removeAllRanges(),e.addRange(t)}var He=class{ctx;view;save;active;constructor(e,t,n){this.ctx=e,this.view=t,this.save=n}get current(){return this.active}attach(){document.addEventListener("dblclick",this.onDoubleClick,!0),document.addEventListener("click",this.onClick,!0)}detach(){document.removeEventListener("dblclick",this.onDoubleClick,!0),document.removeEventListener("click",this.onClick,!0)}onDoubleClick=e=>{let{discovery:t,toolbar:n}=this.ctx,i=t.closest(e.target);if(!i||this.active?.target.binding?.element===i)return;let s=t.of(i)[0];if(!s)return;e.preventDefault();let o=this.targetFor(s);if(!o){n.showMessage(`The content for "${s.name}" has not loaded.`);return}this.open(o)};onClick=e=>{this.ctx.discovery.closest(e.target)&&e.preventDefault()};onPointerDown=e=>{let t=e.composedPath(),n=this.active?.target.binding?.element??this.active?.target.anchor;!this.active||t.includes(this.ctx.host.element)||n&&t.includes(n)||this.close()};targetFor(e){let{store:t}=this.ctx,n=t.entityFor(e.scope);if(!n)return;let i=e.element.getAttribute(I(e.entry))??void 0;return{entityUrn:n,entry:e.entry,name:e.name,sortOrder:e.sortOrder,urn:i&&t.get(i)?i:void 0,anchor:e.element,binding:e}}open(e){this.view.stopPreview(e);let t=e.binding&&e.binding.element.getClientRects().length>0,n=e.binding?e.entry.component?.(e.binding.element).ownsChildren!==!1:!1;if(e.urn&&e.entry.surface==="inline"&&e.binding&&t&&n)this.openInline(e);else{let i=!e.urn&&e.binding?e.entry.fromPlaceholder?.(e.binding.element):void 0;this.openForm(t?e:{...e,binding:void 0,anchor:e.anchor},i)}}openInline(e){this.close();let{store:t,pending:n,host:i,popover:s}=this.ctx,{entry:o}=e,a=e.binding.element,d=t.get(e.urn),l=n.getEdit(e.urn)?.value??O(o,d.item),u=new $e(a,String(l.value??""),i,{input:()=>this.setPending(e,o.read(a)),send:()=>{this.save(e)},revert:()=>this.revert(e),blurred:()=>this.close()});this.active={target:e,session:u},N(a,"editing"),s.show(a,o.label,`${e.name} #${e.sortOrder}`,u.hint,{send:()=>{this.save(e)},revert:()=>this.revert(e)}),s.setIssues(o.validate(o.read(a))),this.offerHistory(e)}offerHistory(e){let{hooks:t}=this.ctx;this.ctx.popover.setNameAction(()=>t.showItem(e));let n=e.urn;if(!n||e.fromVersion){this.ctx.popover.setExtras([]);return}let i=e.binding,s=[{label:"History",icon:"history",run:()=>{this.close(),t.openHistory({entityUrn:e.entityUrn,entry:e.entry,name:e.name,sortOrder:e.sortOrder,urn:n})}}];i&&t.canReorder(i)&&s.push({label:"Move up",icon:"arrow-up",menu:!0,run:()=>t.moveBy(i,-1)},{label:"Move down",icon:"arrow-down",menu:!0,run:()=>t.moveBy(i,1)},{label:"Reorder\u2026",icon:"list-ordered",menu:!0,run:()=>t.reorder(i)}),s.push({label:"Move or rename\u2026",icon:"pencil-line",menu:!0,run:()=>t.relocate(e)}),this.ctx.popover.setExtras(s)}async openForm(e,t){this.close();let{store:n,pending:i,popover:s,toolbar:o}=this.ctx,{entry:a}=e,d=a.form;if(!d)return;let l;if(e.urn){let h=await this.baseValue(e);if(!h)return;l=(e.fromVersion?void 0:i.getEdit(e.urn)?.value)??h}else{if(n.itemAt(e.entityUrn,a,e.name,e.sortOrder)){o.showMessage(`An item already exists at ${e.name} #${e.sortOrder}.`);return}l=i.getCreate(P({...e,type:a.type}))?.value??t??(e.binding?a.fromPlaceholder?.(e.binding.element):void 0)??a.defaults()}this.active={target:e,session:void 0},e.binding&&N(e.binding.element,"editing");let u=d.toForm(l);s.showForm(e.anchor,e.fromVersion?`${a.label}, from an older version`:e.urn?a.label:`New ${a.label.toLowerCase()}`,`${e.name} #${e.sortOrder}`,d.fields,u,{input:h=>this.onFormInput(e,h),send:()=>{this.save(e)},revert:()=>this.revert(e)},a.surface==="panel"),s.setDescription(this.describeForm(e,u)),s.setIssues(a.validate(l)),this.offerHistory(e),e.fromVersion&&this.setPending(e,l),document.addEventListener("pointerdown",this.onPointerDown,!0)}describeForm(e,t){let n=[e.entry.form?.describe?.(t)??""];return!e.urn&&S(this.ctx.store.view(e.entityUrn)?.status)&&n.push("This content is published, so a new item is live as soon as it is saved."),n.filter(Boolean).join(" ")}async baseValue(e){let{store:t,sources:n,transport:i,feedback:s}=this.ctx,o=e.urn,a=t.get(o)??t.itemAt(e.entityUrn,e.entry,e.name,e.sortOrder);if(!(!a||a.item.urn!==o)){if(!e.entry.renderedByView)return O(e.entry,a.item);try{let d=n.get(o)??O(e.entry,await i.read(e.entry,o));return n.set(o,d),d}catch(d){s.report(d,"load the source",()=>{this.openForm(e)});return}}}close(){let e=this.active;if(!e)return;this.active=void 0,document.removeEventListener("pointerdown",this.onPointerDown,!0),e.session?.close(),this.ctx.popover.hide();let t=e.target.binding;this.view.isEditing&&t?.element.isConnected&&this.view.show(t)}onFormInput(e,t){let{popover:n}=this.ctx,i=e.entry.form;if(!i)return;n.setDescription(this.describeForm(e,t));let s=i.fromForm(t);if(typeof s=="string"){n.setError(s),n.setIssues([]);return}n.setError("");let o=e.entry.type==="image"?pt(n.files()):[];n.setIssues([...e.entry.validate(s),...o]),this.setPending(e,s)}setPending(e,t){let{store:n,sources:i,pending:s,popover:o}=this.ctx,{entry:a}=e,d=t;if(e.urn){let l=n.get(e.urn)??n.itemAt(e.entityUrn,a,e.name,e.sortOrder);d=ve(a,l?.item,t);let u=e.fromVersion?n.itemAt(e.entityUrn,a,e.name,e.sortOrder):l,h=a.renderedByView?i.get(u?.item.urn??e.urn):u?.item;h&&ye(a,d,h)?s.clear(e.urn):s.set({kind:"edit",type:a.type,urn:e.urn,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:d,...e.fromVersion?{fromVersion:!0}:{}})}else s.set({kind:"create",type:a.type,entityUrn:e.entityUrn,name:e.name,sortOrder:e.sortOrder,value:d});this.view.reshow(e),e.entry.surface==="inline"&&this.active?.session&&o.setIssues(a.validate(d))}revert(e){this.ctx.pending.clear(e.urn??P({...e,type:e.entry.type})),this.close(),this.view.reshow(e)}};function ie(r,e,t){if(R(r)){let n=Mi(r);return n===void 0?Sn(r,e,t):{...Sn(r,e,t),debug:n}}return Oi(r,e)}function Sn(r,e,t){if(r.isUnauthorized||r.isNotFound&&t===!1)return{kind:"unauthorized",message:`Your session has ended. Log in again to ${e}. Your changes are kept.`};if(r.isForbidden)return{kind:"forbidden",message:`You don't have permission to ${e}.`};if(r.isNotFound)return{kind:"not-found",message:`This item no longer exists, or you don't have permission to ${e}.`};if(r.isConflict)return{kind:"conflict",message:"Someone else changed this since you opened it. Reload to see their version."};let{detail:n}=r;return{kind:"failed",message:`Couldn't ${e} (HTTP ${r.status})${n?`: ${n.replace(/\.$/,"")}`:""}. Try again.`}}function Oi(r,e){if(r instanceof Q)return{kind:"not-live",message:"This content is not published yet, so it has no live version to show. Show the latest drafts to edit it."};if(r instanceof de){let{language:t}=r.received;return{kind:"mismatch",message:`Couldn't ${e}: Baack returned a different language version (${t}) instead of the content on this page, so it can't be edited here. Reload the page and try again.`}}return r instanceof TypeError?{kind:"network",message:`Couldn't reach Baack to ${e}. Check your connection and try again.`}:{kind:"failed",message:`Couldn't ${e}: ${r instanceof Error?r.message:String(r)}`}}function Mi(r){let e=r.json();if(e===void 0)return;let t=s=>{try{return JSON.stringify(JSON.parse(s),null,2)}catch{return s}},n=(()=>{try{return new URL(r.url).pathname}catch{return r.url}})();return`${`Request: ${r.method} ${n}${r.requestBody?`
|
|
3
3
|
${t(r.requestBody)}`:""}`}
|
|
4
4
|
|
|
5
5
|
Response: ${r.status}
|