@obelism/content 0.28.2 → 0.28.3

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
@@ -381,10 +381,13 @@ how often each block is clicked on the page itself: a label on a block
381
381
  ("24% clicked"), and a little tag on the corner of each tagged link or
382
382
  button — a cross before its first click, an hourglass while fewer than 20
383
383
  visitors saw its page, then its rate ("24%"). In the visual editor the
384
- **Show click rates on the page** switch turns them on and off. Clicking one
385
- selects its block. The rates come from Obelism Numbers over the last 30
386
- days, so tag a block's clickable element with its uid and load Numbers'
387
- script on the site (see the CMS's visual editor guide, "Click rates"):
384
+ **Show click rates on the page** switch turns them on and off. The on-site
385
+ editor shows a rate once its block is selected (or, outside the blocks, its
386
+ element clicked) and keeps it while the page is open, so a few can be
387
+ compared. Clicking one selects its block. The rates come from Obelism
388
+ Numbers over the last 30 days, so tag a block's clickable element with its
389
+ uid and load Numbers' script on the site (see the CMS's visual editor
390
+ guide, "Click rates"):
388
391
 
389
392
  ```tsx
390
393
  <a href={block.link} data-numbers-id={block._uid}>
package/dist/bridge.d.mts CHANGED
@@ -19,10 +19,11 @@ type StatsOverlay = {
19
19
  refresh(): void;
20
20
  destroy(): void;
21
21
  };
22
- declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, labels: labelOverrides, }: {
22
+ declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, shows, labels: labelOverrides, }: {
23
23
  selector: (uid: string) => string;
24
24
  onSelect: (uid: string) => void;
25
25
  checked?: ((id: string) => boolean) | undefined;
26
+ shows?: ((id: string, element: Element) => boolean) | undefined;
26
27
  labels?: Partial<StatsLabels> | undefined;
27
28
  }) => StatsOverlay;
28
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.mts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"bridge.d.mts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":"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","names":[]}
package/dist/bridge.d.ts CHANGED
@@ -19,10 +19,11 @@ type StatsOverlay = {
19
19
  refresh(): void;
20
20
  destroy(): void;
21
21
  };
22
- declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, labels: labelOverrides, }: {
22
+ declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, shows, labels: labelOverrides, }: {
23
23
  selector: (uid: string) => string;
24
24
  onSelect: (uid: string) => void;
25
25
  checked?: ((id: string) => boolean) | undefined;
26
+ shows?: ((id: string, element: Element) => boolean) | undefined;
26
27
  labels?: Partial<StatsLabels> | undefined;
27
28
  }) => StatsOverlay;
28
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"bridge.d.ts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":"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","names":[]}
@@ -37,7 +37,7 @@
37
37
  width: 12px; height: 12px; fill: none; stroke: currentColor;
38
38
  stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;
39
39
  }
40
- `,c=(e,{selector:r,onSelect:n,checked:a,labels:i})=>{let c=e.document,u={...o,...i},g=c.createElement("div");g.setAttribute("data-obelism-stats","");let h=g.attachShadow({mode:"open"}),b=c.createElement("style");b.textContent=p;let m=c.createElement("div");m.className="layer",h.append(b,m),c.body.appendChild(g);let f={},v=!1,x=null,y=(r,a,i)=>{let o,s=a.getBoundingClientRect();if(!s.width&&!s.height||s.bottom<0||s.top>e.innerHeight)return;let p=f[r],g=p&&0!==p.clicks?p.viewers<20?"counting":"rate":"none",h=c.createElement("button");h.type="button",h.dataset.uid=r,h.dataset.status=g;let b=p?Math.round(100*p.rate):0;h.title="rate"===g?d(u.title,{clickers:p.clickers,viewers:p.viewers,clicks:p.clicks}):"none"===g?u.noClicks:d(u.counting,{clicks:p.clicks,viewers:p.viewers,needed:20});let{top:v,left:x}="rate"===g&&s.height>=64?{top:Math.max(s.top,0)+8,left:s.right-8}:(o={width:e.innerWidth,height:e.innerHeight},{top:Math.min(Math.max(s.top,10),o.height-10),left:Math.min(s.right,o.width-10)});"rate"===g&&s.height>=64?(h.className="badge",h.textContent=d(u.clicked,{rate:b})):(h.className="tag","rate"===g?h.textContent=d(u.clickedShort,{rate:b}):h.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true">${l[g]}</svg>`,h.setAttribute("aria-label",h.title)),h.style.top=`${v}px`,h.style.left=`${x}px`;let y=i.has(r)?r:a.closest(`[${t}]`)?.getAttribute(t);y&&h.addEventListener("click",()=>n(y)),m.appendChild(h)},w=()=>{if(x=null,m.replaceChildren(),m.hidden=!v,!v)return;let e=new Set;for(let r of c.querySelectorAll(`[${t}]`))e.add(r.getAttribute(t)??"");let n=a??(t=>e.has(t)),i=new Set;for(let t of c.querySelectorAll(`[${s}]`)){let r=t.getAttribute(s);r&&(f[r]||n(r))&&(i.add(r),y(r,t,e))}for(let t of Object.keys(f)){if(i.has(t)||!e.has(t))continue;let n=c.querySelector(r(t));n&&y(t,n,e)}},k=()=>{null===x&&v&&(x=e.requestAnimationFrame(w))};e.addEventListener("scroll",k,{capture:!0,passive:!0}),e.addEventListener("resize",k);let E=e.MutationObserver,C="function"==typeof E?new E(k):null;return C?.observe(c.body,{childList:!0,subtree:!0}),{update(t,r){f=t,v=r,null!==x&&(e.cancelAnimationFrame?.(x),x=null),w()},refresh:k,destroy(){null!==x&&e.cancelAnimationFrame?.(x),e.removeEventListener("scroll",k,{capture:!0}),e.removeEventListener("resize",k),C?.disconnect(),g.remove()}}},u=/(-?\d*\.?\d+)(?:s|l|d)?vh\b/g,g=(e,t)=>(u.lastIndex=0,u.test(e))?e.replace(u,(e,r)=>`${Math.round(Number(r)*t/100*100)/100}px`):null,h=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.item(r),a=g(e.getPropertyValue(n),t);null!==a&&e.setProperty(n,a,e.getPropertyPriority(n))}},b=(e,t)=>{for(let r of Array.from(e)){let{style:e,cssRules:n}=r;e&&h(e,t),n&&b(n,t)}},m="obelism-content-bridge",f="#d58a1f",v=(e="")=>`${e}[${t}]{cursor:pointer;transition:outline-color .15s}${e}[${t}]:hover{outline:2px dashed ${f};outline-offset:2px}${e}[${t}][data-cms-selected]{outline:2px solid ${f};outline-offset:2px}`,x={features:[],selectedUid:null,prompting:!1,canUndo:!1,unsaved:!1,saving:!1,publishing:!1,selecting:!1,stats:{},statsVisible:!1},y=()=>{let e={update:new Set,saved:new Set,published:new Set,change:new Set};return{listeners:e,on:(t,r)=>(e[t].add(r),()=>{e[t].delete(r)}),emit(t,r){for(let n of e[t])try{n(r)}catch(e){console.error("[@obelism/content bridge]",e)}}}},w=()=>Promise.reject(Error("Save and publish in the visual editor itself")),k=()=>Promise.reject(Error("Only while signed in to edit on the site")),E={prompt:()=>Promise.reject(Error("Prompts only work inside the visual editor")),createPage:()=>Promise.reject(Error("New pages are made on the site itself")),createProductPage:()=>Promise.reject(Error("Product pages are made on the site itself")),createCollectionPage:()=>Promise.reject(Error("Collection pages are made on the site itself")),view:k,applyJson:k,openForm:(e,t={})=>(queueMicrotask(()=>t.onError?.("Only while signed in to edit on the site")),{close:()=>{}}),pages:k,openPage:()=>{},undo:()=>{},save:w,publish:w,signOut:()=>{},select:()=>{},setSelecting:()=>{}},C=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0,A=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return{};let t={};for(let[r,n]of Object.entries(e)){let{clicks:e,clickers:a,viewers:i,rate:o}=n??{};C(e)&&C(a)&&C(i)&&C(o)&&(t[r]={clicks:e,clickers:a,viewers:i,rate:o})}return t},N=e=>`[${t}="${e.replace(/["\\]/g,"\\$&")}"]`,S=(e,t)=>{let r=y();e.on("saved",()=>r.emit("saved",{})),e.on("published",()=>r.emit("published",{}));let n=!1;return{isEditing:e.isEditing,mode:e.isEditing?"editor":null,entryId:e.entryId,environment:t.get(i),product:null,collection:null,on:(t,a)=>("update"!==t||n||(n=!0,e.on("update",e=>{let t=e?.entry;t&&r.emit("update",{entry:t,selectedUid:null})})),r.on(t,a)),getState:()=>x,...E,destroy:()=>{}}},L=(e,t,r={},...n)=>{let a=e.createElement(t);for(let t of(Object.assign(a,r),n))a.appendChild("string"==typeof t?e.createTextNode(t):t);return a},P='<rect x="10" y="2" width="4" height="20"/><rect x="2" y="10" width="20" height="4"/><circle cx="6" cy="6" r="2.6"/><circle cx="18" cy="6" r="2.6"/><circle cx="6" cy="18" r="2.6"/><circle cx="18" cy="18" r="2.6"/>',$='<circle cx="6" cy="6" r="2.2"/><circle cx="18" cy="6" r="2.2"/><circle cx="12" cy="12" r="2.2" class="accent"/><circle cx="6" cy="18" r="2.2"/><circle cx="18" cy="18" r="2.2"/>',M=(e,t,r)=>{let n=L(e,"span",{className:t});return n.setAttribute("aria-hidden","true"),n.innerHTML=`<svg viewBox="0 0 24 24">${r}</svg>`,n},U=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),z={page:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',newPage:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M9 15h6"/><path d="M12 18v-6"/>',block:'<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 8h10"/><path d="M7 12h6"/>',undo:'<path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/>',close:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',minimize:'<path d="m6 9 6 6 6-6"/>',expand:'<path d="m18 15-6-6-6 6"/>',chevrons:'<path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/>',search:'<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',check:'<path d="M20 6 9 17l-5-5"/>',mark:`<g fill="currentColor" stroke="none">${P}</g>`,send:'<path d="M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"/><path d="M6 12h16"/>',arrowUp:'<path d="M12 19V5"/><path d="m5 12 7-7 7 7"/>',dash:'<path d="M5 12h14"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/>',eyeOff:'<path d="M10.7 5.1A10 10 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2"/><path d="M6.6 6.6A17 17 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6"/><path d="M9.9 9.9a3 3 0 0 0 4.2 4.2"/><path d="m2 2 20 20"/>',plus:'<path d="M5 12h14"/><path d="M12 5v14"/>',scope:'<rect x="3" y="3" width="18" height="18" rx="3" stroke-dasharray="3 3"/>',alert:'<circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/>'},O=(e,t)=>M(e,"icon",z[t]),I=(e,t,r,{onReady:n,onError:a,onEscape:i})=>{let o=null,s=!1,l=null;return{get mounted(){return null!==o},get loading(){return s},get error(){return l},mount(){s=!0,l=null;let d=e.openForm(t,{title:r,onReady:()=>{o===d&&(s=!1,n())},onError:e=>{o===d&&(s=!1,l=e,a(e))},onEscape:()=>{o===d&&i?.()}});o=d},unmount(){o?.close(),o=null,s=!1,l=null}}},j={open:"Edit with a prompt",placeholder:"Describe a change, like “make it warmer”",send:"Apply",undo:"Undo",minimize:"Minimize, to see the page",scopeEntry:"Whole page",working:"Working on it…",publish:"Publish",saving:"Saving…",publishing:"Publishing…",saved:"Saved as a draft",published:"Published",unsaved:"Unsaved changes",signOut:"Exit",viewingDrafts:"Viewing drafts",newPage:"New page",newPageCancel:"Edit this page instead",newPagePlaceholder:"Describe the new page, e.g. “a pricing page for agencies”",path:"Path",pathPlaceholder:"/pricing",creating:"Writing the page…",created:"Opening the new page…",modes:"Edit with",modePrompt:"Ask",form:"Edit fields",formTitle:"The content form",formLoading:"Opening the form…",pages:"Pages",pagesSearch:"Find a page",pagesLoading:"Loading pages…",pagesEmpty:"No pages match",pageCurrent:"This page",pageDraft:"Draft",pageChanged:"Changed",addProductPage:"Add a product page",addingProductPage:"Making the product page…",addedProductPage:"Opening the product page…",productPageHint:"This product has no page yet. Add one for what the store doesn’t say.",addCollectionPage:"Add a collection page",addingCollectionPage:"Making the collection page…",addedCollectionPage:"Opening the collection page…",collectionPageHint:"This collection has no page yet. Add one for what goes around its products."},T={...j,close:"Close",expand:"Expand",scopeNoPage:"Whole page",scopeBlock:"Selected block",clearBlock:"Edit the whole page instead",save:"Save",selectHint:"Click a block to change only that block"},R={...j,editor:"Obelism editor",editing:"Editing",hideOutlines:"Show the page without outlines",environment:"Environment",envProduction:"live",scopeNoteBlock:"Working on {name}. Click another block to switch.",scopeNotePage:"Working on the whole page. Click a block to change only that block.",scopeUp:"Up to {name}",block:"Block",previewChip:"{name} \xb7 preview",askIntro:"Describe a change and Obelism shows it on the page. Nothing is stored until you keep it and save.",you:"You",obelism:"Obelism",suggested:"Suggested by Obelism",keep:"Keep it",retry:"Try another",retryPrompt:"{prompt}\n\nWrite a different version than the last one.",kept:"Kept",undone:"Undone",before:"Before",after:"After",emptyValue:"Empty",moreChanges:"{count} more changed",keepFirst:"Keep or undo the suggestion to save",keepBeforeFields:"Keep or undo the suggestion before editing fields.",saveDraft:"Save draft",upToDate:"No unsaved changes",saveFailed:"Couldn’t save",publishFailed:"Couldn’t publish",tryAgain:"Try again"},D=(e,t,r,{onLoad:n,onClose:a})=>{let i=L(e,"input",{type:"text",placeholder:r.pagesSearch,autocomplete:"off",spellcheck:!1});i.setAttribute("role","combobox"),i.setAttribute("aria-label",r.pagesSearch),i.setAttribute("aria-autocomplete","list"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-controls","obelism-pages");let o=L(e,"label",{className:"search"},O(e,"search"),i),s=L(e,"ul",{className:"options",id:"obelism-pages"});s.setAttribute("role","listbox"),s.setAttribute("aria-label",r.pages);let l=L(e,"p",{className:"empty"}),d=null,p=null,c=null,u=0,g=()=>{let e=i.value.trim().toLowerCase();return(d??[]).filter(t=>!e||t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e)||`/${t.path}`.toLowerCase().includes(e))},h=e=>{if(e.entryId===t.entryId)return a();t.openPage(e)},b=()=>{let n=g();u=Math.max(0,Math.min(u,n.length-1)),s.textContent="",n.forEach((n,a)=>{let i=L(e,"li",{className:`option${a===u?" active":""}`,id:`obelism-page-${a}`},L(e,"span",{className:"option-text"},L(e,"span",{textContent:n.name}),L(e,"span",{className:"option-path",textContent:n.url})));if(i.setAttribute("role","option"),i.setAttribute("aria-selected",String(a===u)),"published"!==n.status&&i.appendChild(L(e,"span",{className:"badge",textContent:"draft"===n.status?r.pageDraft:r.pageChanged})),n.entryId===t.entryId){i.setAttribute("aria-current","page");let t=O(e,"check");t.removeAttribute("aria-hidden"),t.setAttribute("role","img"),t.setAttribute("aria-label",r.pageCurrent),i.appendChild(t)}i.addEventListener("click",()=>h(n)),s.appendChild(i)});let a=s.children[u];a?(i.setAttribute("aria-activedescendant",a.id),a.scrollIntoView?.({block:"nearest"})):i.removeAttribute("aria-activedescendant"),l.textContent=(c??(d?"":r.pagesLoading))||(0===n.length?r.pagesEmpty:""),l.hidden=!l.textContent,l.className=`empty${c?" error":""}`},m=()=>(p??(p=t.pages().then(e=>{d=e,c=null,b(),n()},e=>{p=null,c=e instanceof Error?e.message:String(e),b(),n()})),p);return i.addEventListener("input",()=>{u=0,b()}),i.addEventListener("keydown",e=>{let t=s.children.length;if("ArrowDown"===e.key||"ArrowUp"===e.key){if(e.preventDefault(),0===t)return;u=(u+("ArrowDown"===e.key?1:-1)+t)%t,b()}else if("Enter"!==e.key||e.isComposing)"Escape"===e.key&&(e.preventDefault(),a());else{e.preventDefault();let t=g()[u];t&&h(t)}}),{searchRow:o,search:i,list:s,note:l,get pages(){return d},get error(){return c},current:()=>d?.find(({entryId:e})=>e===t.entryId)??null,fetch:m,forget(){d=null,p=null},reset(){i.value="",u=Math.max(0,(d??[]).findIndex(({entryId:e})=>e===t.entryId)),m(),b()},render:b}},q=e=>e instanceof Error?e.message:String(e),F=(e,t,r)=>{let n="site"===e.mode,a=n&&t.features.includes("create"),i=n&&null===e.entryId,o=i&&a?e.product?"product":e.collection?"collection":null:null;return{site:n,canCreate:a,pageless:i,shopHere:o,onlyNew:i&&a&&!o&&!r}},B=(e,t)=>"collection"===t?{add:e.addCollectionPage,adding:e.addingCollectionPage,hint:e.collectionPageHint}:{add:e.addProductPage,adding:e.addingProductPage,hint:e.productPageHint},V=async(e,t)=>{try{if(e.product)return await e.createProductPage(),{text:t.addedProductPage,error:!1};return await e.createCollectionPage(),{text:t.addedCollectionPage,error:!1}}catch(e){return{text:q(e),error:!0}}},H=async(e,t)=>{try{return await e[t](),null}catch(e){return q(e)}},_="obelism-content-prompt-side",W=`
40
+ `,c=(e,{selector:r,onSelect:n,checked:a,shows:i,labels:c})=>{let u=e.document,g={...o,...c},h=u.createElement("div");h.setAttribute("data-obelism-stats","");let b=h.attachShadow({mode:"open"}),m=u.createElement("style");m.textContent=p;let f=u.createElement("div");f.className="layer",b.append(m,f),u.body.appendChild(h);let v={},x=!1,y=null,w=(r,a,i)=>{let o,s=a.getBoundingClientRect();if(!s.width&&!s.height||s.bottom<0||s.top>e.innerHeight)return;let p=v[r],c=p&&0!==p.clicks?p.viewers<20?"counting":"rate":"none",h=u.createElement("button");h.type="button",h.dataset.uid=r,h.dataset.status=c;let b=p?Math.round(100*p.rate):0;h.title="rate"===c?d(g.title,{clickers:p.clickers,viewers:p.viewers,clicks:p.clicks}):"none"===c?g.noClicks:d(g.counting,{clicks:p.clicks,viewers:p.viewers,needed:20});let{top:m,left:x}="rate"===c&&s.height>=64?{top:Math.max(s.top,0)+8,left:s.right-8}:(o={width:e.innerWidth,height:e.innerHeight},{top:Math.min(Math.max(s.top,10),o.height-10),left:Math.min(s.right,o.width-10)});"rate"===c&&s.height>=64?(h.className="badge",h.textContent=d(g.clicked,{rate:b})):(h.className="tag","rate"===c?h.textContent=d(g.clickedShort,{rate:b}):h.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true">${l[c]}</svg>`,h.setAttribute("aria-label",h.title)),h.style.top=`${m}px`,h.style.left=`${x}px`;let y=i.has(r)?r:a.closest(`[${t}]`)?.getAttribute(t);y&&h.addEventListener("click",()=>n(y)),f.appendChild(h)},k=()=>{if(y=null,f.replaceChildren(),f.hidden=!x,!x)return;let e=new Set;for(let r of u.querySelectorAll(`[${t}]`))e.add(r.getAttribute(t)??"");let n=a??(t=>e.has(t)),o=new Set;for(let t of u.querySelectorAll(`[${s}]`)){let r=t.getAttribute(s);r&&(v[r]||n(r))&&(o.add(r),(!i||i(r,t))&&w(r,t,e))}for(let t of Object.keys(v)){if(o.has(t)||!e.has(t))continue;let n=u.querySelector(r(t));n&&(!i||i(t,n))&&w(t,n,e)}},E=()=>{null===y&&x&&(y=e.requestAnimationFrame(k))};e.addEventListener("scroll",E,{capture:!0,passive:!0}),e.addEventListener("resize",E);let C=e.MutationObserver,A="function"==typeof C?new C(E):null;return A?.observe(u.body,{childList:!0,subtree:!0}),{update(t,r){v=t,x=r,null!==y&&(e.cancelAnimationFrame?.(y),y=null),k()},refresh:E,destroy(){null!==y&&e.cancelAnimationFrame?.(y),e.removeEventListener("scroll",E,{capture:!0}),e.removeEventListener("resize",E),A?.disconnect(),h.remove()}}},u=/(-?\d*\.?\d+)(?:s|l|d)?vh\b/g,g=(e,t)=>(u.lastIndex=0,u.test(e))?e.replace(u,(e,r)=>`${Math.round(Number(r)*t/100*100)/100}px`):null,h=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.item(r),a=g(e.getPropertyValue(n),t);null!==a&&e.setProperty(n,a,e.getPropertyPriority(n))}},b=(e,t)=>{for(let r of Array.from(e)){let{style:e,cssRules:n}=r;e&&h(e,t),n&&b(n,t)}},m="obelism-content-bridge",f="#d58a1f",v=(e="")=>`${e}[${t}]{cursor:pointer;transition:outline-color .15s}${e}[${t}]:hover{outline:2px dashed ${f};outline-offset:2px}${e}[${t}][data-cms-selected]{outline:2px solid ${f};outline-offset:2px}`,x={features:[],selectedUid:null,prompting:!1,canUndo:!1,unsaved:!1,saving:!1,publishing:!1,selecting:!1,stats:{},statsVisible:!1},y=()=>{let e={update:new Set,saved:new Set,published:new Set,change:new Set};return{listeners:e,on:(t,r)=>(e[t].add(r),()=>{e[t].delete(r)}),emit(t,r){for(let n of e[t])try{n(r)}catch(e){console.error("[@obelism/content bridge]",e)}}}},w=()=>Promise.reject(Error("Save and publish in the visual editor itself")),k=()=>Promise.reject(Error("Only while signed in to edit on the site")),E={prompt:()=>Promise.reject(Error("Prompts only work inside the visual editor")),createPage:()=>Promise.reject(Error("New pages are made on the site itself")),createProductPage:()=>Promise.reject(Error("Product pages are made on the site itself")),createCollectionPage:()=>Promise.reject(Error("Collection pages are made on the site itself")),view:k,applyJson:k,openForm:(e,t={})=>(queueMicrotask(()=>t.onError?.("Only while signed in to edit on the site")),{close:()=>{}}),pages:k,openPage:()=>{},undo:()=>{},save:w,publish:w,signOut:()=>{},select:()=>{},setSelecting:()=>{}},C=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0,A=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return{};let t={};for(let[r,n]of Object.entries(e)){let{clicks:e,clickers:a,viewers:i,rate:o}=n??{};C(e)&&C(a)&&C(i)&&C(o)&&(t[r]={clicks:e,clickers:a,viewers:i,rate:o})}return t},N=e=>`[${t}="${e.replace(/["\\]/g,"\\$&")}"]`,S=(e,t)=>{let r=y();e.on("saved",()=>r.emit("saved",{})),e.on("published",()=>r.emit("published",{}));let n=!1;return{isEditing:e.isEditing,mode:e.isEditing?"editor":null,entryId:e.entryId,environment:t.get(i),product:null,collection:null,on:(t,a)=>("update"!==t||n||(n=!0,e.on("update",e=>{let t=e?.entry;t&&r.emit("update",{entry:t,selectedUid:null})})),r.on(t,a)),getState:()=>x,...E,destroy:()=>{}}},L=(e,t,r={},...n)=>{let a=e.createElement(t);for(let t of(Object.assign(a,r),n))a.appendChild("string"==typeof t?e.createTextNode(t):t);return a},P='<rect x="10" y="2" width="4" height="20"/><rect x="2" y="10" width="20" height="4"/><circle cx="6" cy="6" r="2.6"/><circle cx="18" cy="6" r="2.6"/><circle cx="6" cy="18" r="2.6"/><circle cx="18" cy="18" r="2.6"/>',$='<circle cx="6" cy="6" r="2.2"/><circle cx="18" cy="6" r="2.2"/><circle cx="12" cy="12" r="2.2" class="accent"/><circle cx="6" cy="18" r="2.2"/><circle cx="18" cy="18" r="2.2"/>',M=(e,t,r)=>{let n=L(e,"span",{className:t});return n.setAttribute("aria-hidden","true"),n.innerHTML=`<svg viewBox="0 0 24 24">${r}</svg>`,n},U=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),z={page:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',newPage:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M9 15h6"/><path d="M12 18v-6"/>',block:'<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 8h10"/><path d="M7 12h6"/>',undo:'<path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/>',close:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',minimize:'<path d="m6 9 6 6 6-6"/>',expand:'<path d="m18 15-6-6-6 6"/>',chevrons:'<path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/>',search:'<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',check:'<path d="M20 6 9 17l-5-5"/>',mark:`<g fill="currentColor" stroke="none">${P}</g>`,send:'<path d="M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"/><path d="M6 12h16"/>',arrowUp:'<path d="M12 19V5"/><path d="m5 12 7-7 7 7"/>',dash:'<path d="M5 12h14"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/>',eyeOff:'<path d="M10.7 5.1A10 10 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2"/><path d="M6.6 6.6A17 17 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6"/><path d="M9.9 9.9a3 3 0 0 0 4.2 4.2"/><path d="m2 2 20 20"/>',plus:'<path d="M5 12h14"/><path d="M12 5v14"/>',scope:'<rect x="3" y="3" width="18" height="18" rx="3" stroke-dasharray="3 3"/>',alert:'<circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/>'},O=(e,t)=>M(e,"icon",z[t]),I=(e,t,r,{onReady:n,onError:a,onEscape:i})=>{let o=null,s=!1,l=null;return{get mounted(){return null!==o},get loading(){return s},get error(){return l},mount(){s=!0,l=null;let d=e.openForm(t,{title:r,onReady:()=>{o===d&&(s=!1,n())},onError:e=>{o===d&&(s=!1,l=e,a(e))},onEscape:()=>{o===d&&i?.()}});o=d},unmount(){o?.close(),o=null,s=!1,l=null}}},j={open:"Edit with a prompt",placeholder:"Describe a change, like “make it warmer”",send:"Apply",undo:"Undo",minimize:"Minimize, to see the page",scopeEntry:"Whole page",working:"Working on it…",publish:"Publish",saving:"Saving…",publishing:"Publishing…",saved:"Saved as a draft",published:"Published",unsaved:"Unsaved changes",signOut:"Exit",viewingDrafts:"Viewing drafts",newPage:"New page",newPageCancel:"Edit this page instead",newPagePlaceholder:"Describe the new page, e.g. “a pricing page for agencies”",path:"Path",pathPlaceholder:"/pricing",creating:"Writing the page…",created:"Opening the new page…",modes:"Edit with",modePrompt:"Ask",form:"Edit fields",formTitle:"The content form",formLoading:"Opening the form…",pages:"Pages",pagesSearch:"Find a page",pagesLoading:"Loading pages…",pagesEmpty:"No pages match",pageCurrent:"This page",pageDraft:"Draft",pageChanged:"Changed",addProductPage:"Add a product page",addingProductPage:"Making the product page…",addedProductPage:"Opening the product page…",productPageHint:"This product has no page yet. Add one for what the store doesn’t say.",addCollectionPage:"Add a collection page",addingCollectionPage:"Making the collection page…",addedCollectionPage:"Opening the collection page…",collectionPageHint:"This collection has no page yet. Add one for what goes around its products."},T={...j,close:"Close",expand:"Expand",scopeNoPage:"Whole page",scopeBlock:"Selected block",clearBlock:"Edit the whole page instead",save:"Save",selectHint:"Click a block to change only that block"},R={...j,editor:"Obelism editor",editing:"Editing",hideOutlines:"Show the page without outlines",environment:"Environment",envProduction:"live",scopeNoteBlock:"Working on {name}. Click another block to switch.",scopeNotePage:"Working on the whole page. Click a block to change only that block.",scopeUp:"Up to {name}",block:"Block",previewChip:"{name} \xb7 preview",askIntro:"Describe a change and Obelism shows it on the page. Nothing is stored until you keep it and save.",you:"You",obelism:"Obelism",suggested:"Suggested by Obelism",keep:"Keep it",retry:"Try another",retryPrompt:"{prompt}\n\nWrite a different version than the last one.",kept:"Kept",undone:"Undone",before:"Before",after:"After",emptyValue:"Empty",moreChanges:"{count} more changed",keepFirst:"Keep or undo the suggestion to save",keepBeforeFields:"Keep or undo the suggestion before editing fields.",saveDraft:"Save draft",upToDate:"No unsaved changes",saveFailed:"Couldn’t save",publishFailed:"Couldn’t publish",tryAgain:"Try again"},D=(e,t,r,{onLoad:n,onClose:a})=>{let i=L(e,"input",{type:"text",placeholder:r.pagesSearch,autocomplete:"off",spellcheck:!1});i.setAttribute("role","combobox"),i.setAttribute("aria-label",r.pagesSearch),i.setAttribute("aria-autocomplete","list"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-controls","obelism-pages");let o=L(e,"label",{className:"search"},O(e,"search"),i),s=L(e,"ul",{className:"options",id:"obelism-pages"});s.setAttribute("role","listbox"),s.setAttribute("aria-label",r.pages);let l=L(e,"p",{className:"empty"}),d=null,p=null,c=null,u=0,g=()=>{let e=i.value.trim().toLowerCase();return(d??[]).filter(t=>!e||t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e)||`/${t.path}`.toLowerCase().includes(e))},h=e=>{if(e.entryId===t.entryId)return a();t.openPage(e)},b=()=>{let n=g();u=Math.max(0,Math.min(u,n.length-1)),s.textContent="",n.forEach((n,a)=>{let i=L(e,"li",{className:`option${a===u?" active":""}`,id:`obelism-page-${a}`},L(e,"span",{className:"option-text"},L(e,"span",{textContent:n.name}),L(e,"span",{className:"option-path",textContent:n.url})));if(i.setAttribute("role","option"),i.setAttribute("aria-selected",String(a===u)),"published"!==n.status&&i.appendChild(L(e,"span",{className:"badge",textContent:"draft"===n.status?r.pageDraft:r.pageChanged})),n.entryId===t.entryId){i.setAttribute("aria-current","page");let t=O(e,"check");t.removeAttribute("aria-hidden"),t.setAttribute("role","img"),t.setAttribute("aria-label",r.pageCurrent),i.appendChild(t)}i.addEventListener("click",()=>h(n)),s.appendChild(i)});let a=s.children[u];a?(i.setAttribute("aria-activedescendant",a.id),a.scrollIntoView?.({block:"nearest"})):i.removeAttribute("aria-activedescendant"),l.textContent=(c??(d?"":r.pagesLoading))||(0===n.length?r.pagesEmpty:""),l.hidden=!l.textContent,l.className=`empty${c?" error":""}`},m=()=>(p??(p=t.pages().then(e=>{d=e,c=null,b(),n()},e=>{p=null,c=e instanceof Error?e.message:String(e),b(),n()})),p);return i.addEventListener("input",()=>{u=0,b()}),i.addEventListener("keydown",e=>{let t=s.children.length;if("ArrowDown"===e.key||"ArrowUp"===e.key){if(e.preventDefault(),0===t)return;u=(u+("ArrowDown"===e.key?1:-1)+t)%t,b()}else if("Enter"!==e.key||e.isComposing)"Escape"===e.key&&(e.preventDefault(),a());else{e.preventDefault();let t=g()[u];t&&h(t)}}),{searchRow:o,search:i,list:s,note:l,get pages(){return d},get error(){return c},current:()=>d?.find(({entryId:e})=>e===t.entryId)??null,fetch:m,forget(){d=null,p=null},reset(){i.value="",u=Math.max(0,(d??[]).findIndex(({entryId:e})=>e===t.entryId)),m(),b()},render:b}},q=e=>e instanceof Error?e.message:String(e),F=(e,t,r)=>{let n="site"===e.mode,a=n&&t.features.includes("create"),i=n&&null===e.entryId,o=i&&a?e.product?"product":e.collection?"collection":null:null;return{site:n,canCreate:a,pageless:i,shopHere:o,onlyNew:i&&a&&!o&&!r}},B=(e,t)=>"collection"===t?{add:e.addCollectionPage,adding:e.addingCollectionPage,hint:e.collectionPageHint}:{add:e.addProductPage,adding:e.addingProductPage,hint:e.productPageHint},V=async(e,t)=>{try{if(e.product)return await e.createProductPage(),{text:t.addedProductPage,error:!1};return await e.createCollectionPage(),{text:t.addedCollectionPage,error:!1}}catch(e){return{text:q(e),error:!0}}},H=async(e,t)=>{try{return await e[t](),null}catch(e){return q(e)}},_="obelism-content-prompt-side",W=`
41
41
  :host { all: initial; }
42
42
  * { box-sizing: border-box; font: inherit; color: inherit; margin: 0; }
43
43
  .root {
@@ -591,4 +591,4 @@ textarea:disabled, .path input:disabled { opacity: .6; }
591
591
  .chips .accent-chip .mark { color: rgb(23 22 20); }
592
592
  .chips .accent-chip .mark svg { width: 11px; height: 11px; }
593
593
  .chips .ink-chip { background: rgb(23 22 20); color: rgb(255 255 255); font-weight: 500; }
594
- `,ee=e=>{let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},et=e=>!!e&&"object"==typeof e&&!Array.isArray(e),er=(e,t,r,n)=>{if(null!=e&&""!==e){if("object"!=typeof e)return void n.set(r,{label:t,text:String(e)});if(Array.isArray(e)){if(e.every(e=>null===e||"object"!=typeof e)){e.length&&n.set(r,{label:t,text:e.join(", ")});return}e.forEach((e,a)=>{let i=et(e)&&"string"==typeof e._uid?e._uid:a,o=et(e)&&"string"==typeof e._type?e._type:null;er(e,o?ee(o):t,`${r}/${i}`,n)});return}for(let[a,i]of Object.entries(e))"_uid"!==a&&"_type"!==a&&er(i,t?`${t} \xb7 ${ee(a)}`:ee(a),`${r}/${a}`,n)}},en=(e,n,a={})=>{let i,o={...R,...a.labels},s=e.defaultView,l=e.documentElement,d=(t,...r)=>L(e,"button",{className:t,type:"button"},...r),p=L(e,"div");p.setAttribute("data-obelism-content-editor","");let c=p.attachShadow({mode:"open"}),u=L(e,"style",{textContent:(i=`[${t}]`,`html[data-obelism-editor]{transition:margin-right .3s cubic-bezier(.2,.8,.2,1)}html[data-obelism-docked]{margin-right:436px!important}html[data-obelism-docked] [data-obelism-dock]{right:436px!important;max-width:calc(100vw - 436px)!important}html[data-obelism-editor][data-cms-selecting] ${i}:hover:not([data-cms-selected]){outline:none}html[data-obelism-editor][data-cms-selecting] ${i}[data-cms-selected]{outline:2px solid rgb(212 130 30);outline-offset:2px}@media (prefers-reduced-motion:reduce){html[data-obelism-editor]{transition:none}}`)}),g=L(e,"span",{className:"tile"},M(e,"mark",P)),h=L(e,"span"),b=d("page-button hit",h,L(e,"span",{className:"visually-hidden",textContent:`, ${o.pages}`}),O(e,"chevrons"));b.setAttribute("aria-haspopup","listbox"),b.setAttribute("aria-expanded","false"),b.setAttribute("aria-controls","obelism-pages");let m=L(e,"span",{className:"page-name"}),f=L(e,"span"),v=L(e,"span",{className:"env"},L(e,"span",{className:"visually-hidden",textContent:`${o.environment}: `}),f),x=d("icon-button hit",O(e,"dash"));x.setAttribute("aria-label",o.minimize),x.title=o.minimize;let y=d("mode hit",M(e,"mark",P),o.modePrompt);y.setAttribute("aria-pressed","false");let w=L(e,"div",{className:"head"},g,b,m,v,L(e,"span",{className:"spacer"}),y,x),k=D(e,n,o,{onLoad:()=>td(),onClose:()=>tb(!1)}),E=d("button quiet new-page",O(e,"plus"),o.newPage),C=L(e,"div",{className:"pages"},k.searchRow,k.list,k.note,E),A=d("button primary",o.keep),S=d("button quiet",o.undo),z=L(e,"div",{className:"gate"},L(e,"p",{textContent:o.keepBeforeFields}),L(e,"div",{className:"actions"},A,S));z.setAttribute("role","alert");let j=L(e,"span"),T=d("",o.scopeEntry),_=d("",o.newPageCancel),W=L(e,"div",{className:"note"},O(e,"scope"),j,T,_),Y=L(e,"p",{className:"intro",textContent:o.askIntro}),X=L(e,"p",{className:"summary"}),K=L(e,"span"),J=d("button primary",O(e,"plus"),K),Z=L(e,"div",{className:"shop"},X,J),en=L(e,"div",{className:"log"});en.setAttribute("role","log");let ea=L(e,"div",{className:"scroll"},W,Y,Z,en),ei=L(e,"input",{type:"text",placeholder:o.pathPlaceholder,autocomplete:"off",spellcheck:!1}),eo=L(e,"label",{className:"path"},L(e,"span",{textContent:o.path}),ei),es=L(e,"textarea",{rows:1});es.setAttribute("aria-label",o.open);let el=O(e,"arrowUp"),ed=M(e,"working",$),ep=L(e,"button",{className:"send",type:"submit",title:o.send},L(e,"span",{className:"visually-hidden",textContent:o.send}),el,ed),ec=L(e,"div",{className:"bar"},M(e,"mark",P),es,ep),eu=L(e,"form",{className:"composer"},eo,ec),eg=L(e,"div",{className:"ask",id:"obelism-ask"},ea,eu);eg.setAttribute("role","tabpanel"),eg.setAttribute("aria-label",o.modePrompt);let eh=L(e,"p",{className:"form-note"});eh.setAttribute("role","status");let eb=L(e,"div",{className:"form"},eh),em=L(e,"span"),ef=d("",o.scopeEntry),ev=L(e,"div",{className:"note"},O(e,"scope"),em,ef),ex=L(e,"div",{className:"fields",id:"obelism-fields"},ev,eb);ex.setAttribute("role","tabpanel"),ex.setAttribute("aria-label",o.form);let ey=L(e,"p",{className:"save-state"});ey.setAttribute("aria-live","polite");let ew=L(e,"slot");ew.name="actions-footer";let ek=d("button quiet",O(e,"undo"),o.undo),eE=d("button secondary",o.saveDraft),eC=d("button primary",o.publish),eA=L(e,"div",{className:"foot"},ey,ew,ek,eE,eC),eN=L(e,"p",{className:"visually-hidden"});eN.setAttribute("role","status");let eS=L(e,"aside",{className:"panel",id:"obelism-editor"},w,C,z,eg,ex,eA,eN);eS.setAttribute("aria-label",o.editor);let eL=d("launch",L(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.editing);eL.setAttribute("aria-controls",eS.id);let eP=L(e,"span",{className:"reading"},L(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.viewingDrafts),e$=O(e,"eye"),eM=O(e,"eyeOff"),eU=d("eye",e$,eM);eU.setAttribute("aria-label",o.hideOutlines),eU.title=o.hideOutlines;let ez=L(e,"slot");ez.name="actions-bar";let eO=d("exit",o.signOut),eI=L(e,"div",{className:"launcher"},eL,eP,eU,ez,eO);a.actions&&p.appendChild(a.actions);let ej=L(e,"div",{className:"layer"});ej.setAttribute("aria-hidden","true");let eT=L(e,"div",{className:"wash"});eT.setAttribute("aria-hidden","true");let eR=L(e,"div",{className:"root"},eT,ej,eS,eI);c.append(L(e,"style",{textContent:Q}),eR);let eD=(e=>{try{return e?.localStorage.getItem(G)!=="minimised"}catch{return!0}})(s),eq="fields",eF="fields",eB=!1,eV=!1,eH=!0,e_=!1,eW=null,eY=!1,eX=null,eK=[],eJ=!0,eZ=null,eG=new Map,eQ=new Map,e0="idle",e1=!1,e2=I(n,eb,o.formTitle,{onReady:()=>{td(),eD&&"fields"===eF&&e4()},onError:()=>td(),onEscape:()=>tf()}),e4=()=>eb.querySelector("iframe")?.focus(),e5=()=>eK.filter(({status:e})=>"pending"===e),e6=()=>e5().slice(-1)[0]??null,e3=()=>eK.some(({status:e})=>"working"===e)?null:e6(),e8=e=>(eG.has(e)||"loading"===e0||(eG.set(e,null),n.view({uid:e}).then(t=>{"string"==typeof t._type&&eG.set(e,ee(t._type)),td()},()=>{})),eG.get(e)??o.block),e7=(e,t=null)=>{if(Array.isArray(e))e.forEach(e=>e7(e,t));else if(et(e)){let r=t;"string"==typeof e._uid&&"string"==typeof e._type&&(r=e._uid,eQ.set(r,t),eG.set(r,ee(e._type))),Object.values(e).forEach(e=>e7(e,r))}},e9=r=>e.querySelector(N(r))?.parentElement?.closest(`[${t}]`)?.getAttribute(t)??eQ.get(r)??null,te=()=>k.current()?.name||e.title.trim(),tt=null,tr=()=>{null===tt&&s&&(tt=s.requestAnimationFrame(()=>{tt=null,(t=>{if(ej.replaceChildren(),eT.replaceChildren(),!ta(t))return;let n=t=>{let r=e.querySelector(t),n=r?.getBoundingClientRect();return n&&(n.width||n.height)?n:null},a=(t,r,n=ej)=>{let a=L(e,"div",{className:`box ${r}`});Object.assign(a.style,{top:`${t.top-3}px`,left:`${t.left-3}px`,width:`${t.width+6}px`,height:`${t.height+6}px`}),n.appendChild(a)},i=(t,...r)=>{let n=L(e,"div",{className:"chips"},...r),a=t.top-34<0?t.top+6:t.top-34;Object.assign(n.style,{top:`${a}px`,left:`${t.left-3}px`}),ej.appendChild(n)},s=(t,r)=>{let n=L(e,"span",{className:"accent-chip"});return r&&n.appendChild(M(e,"mark",P)),n.appendChild(e.createTextNode(t)),n},l=e6(),d=l?l.uid?N(l.uid):`[${r}]`:null,p=d?n(d):null;if(p&&a(p,"fill",eT),eZ&&eZ!==t.selectedUid){let t=n(N(eZ));if(t){a(t,"hover");let r=t.top-23<0,n=L(e,"span",{className:`name-tab${r?" inside":""}`,textContent:e8(eZ)});Object.assign(n.style,{top:`${r?t.top-1.5:t.top-23}px`,left:`${t.left-3}px`}),ej.appendChild(n)}}let c=!!l&&l.uid===t.selectedUid;if(t.selectedUid){let r=n(N(t.selectedUid));if(r){let n=e8(t.selectedUid),a=te();i(r,s(c?U(o.previewChip,{name:n}):n,c),...a?[L(e,"span",{className:"ink-chip",textContent:a})]:[])}}if(p&&!c){a(p,"preview");let e=l.uid?e8(l.uid):te()||o.pages;i(p,s(U(o.previewChip,{name:e}),!0))}})(n.getState())}))},tn=e=>e.features.includes("prompt")&&eD,ta=e=>tn(e)&&eH&&!eV,ti=t=>L(e,"span",{className:`value${t?"":" none"}`,textContent:t||o.emptyValue}),to=t=>{let r=t.node.querySelector(".card");if(r.querySelector(".status-line")?.remove(),"failed"===t.status)return void r.appendChild(L(e,"p",{className:"failure"},O(e,"alert"),t.summary));for(let n of(r.appendChild(t.eyebrow),t.summary&&r.appendChild(L(e,"p",{className:"summary",textContent:t.summary})),t.diffs.slice(0,3))){let a=L(e,"div",{className:"diff-field"},L(e,"span",{className:"diff-label",textContent:n.label}),L(e,"div",{className:"diff"},L(e,"div",{className:"before"},L(e,"span",{className:"tag",textContent:o.before}),ti(n.before)),L(e,"div",{className:"after"},L(e,"span",{className:"tag",textContent:o.after}),ti(n.after))));t.details.push(a),r.appendChild(a)}if(t.diffs.length>3){let n=L(e,"p",{className:"more",textContent:U(o.moreChanges,{count:t.diffs.length-3})});t.details.push(n),r.appendChild(n)}if("pending"===t.status){let n=d("button primary",o.keep),a=d("button secondary",o.retry),i=d("button quiet",o.undo);n.addEventListener("click",()=>tv()),a.addEventListener("click",()=>void tw(t)),i.addEventListener("click",()=>tx(t)),t.actions=L(e,"div",{className:"actions"},n,a,i),r.appendChild(t.actions)}},ts=(t,r)=>{let n=L(e,"div",{className:"card"},L(e,"span",{className:"visually-hidden",textContent:`${o.obelism}: `}),L(e,"p",{className:"status-line"},M(e,"working",$),eV?o.creating:o.working)),a=L(e,"div",{className:"answer"},L(e,"span",{className:"chip"},M(e,"mark",P)),n);a.dataset.status="working";let i={prompt:t,uid:r,status:"working",summary:"",diffs:[],step:null,node:a,eyebrow:L(e,"p",{className:"eyebrow"}),actions:null,details:[]};return eK.push(i),en.appendChild(a),i},tl=t=>{if(e1)return;let r=t.features.includes("prompt"),i=t.saving||t.publishing,s=t.prompting||i,p=r&&eD,{site:c,canCreate:u,pageless:g,shopHere:x,onlyNew:w}=F(n,t,a.promptWithoutPage);u||(eV=!1),w&&(eV=!0);let N=c&&!eV&&!g&&t.features.includes("form");eF=N?eq:"ask";let P=e5().length>0;for(let e of(P&&"fields"!==eF||(eB=!1),eK))null!==e.step&&e.step>(t.undoSteps??0)&&(e.step=null);eR.hidden=!r&&!c,eS.toggleAttribute("data-closed",!p),eS.inert=!p,eL.hidden=!r,eL.setAttribute("aria-expanded",String(p)),eP.hidden=r,eU.hidden=!p,eU.setAttribute("aria-pressed",String(!eH)),e$.hidden=!eH,eM.hidden=eH,eO.hidden=!1===a.signOut;let I=p&&eJ;l.toggleAttribute("data-obelism-docked",I),l.style.setProperty("--obelism-dock",`${436*!!I}px`);let R=p&&eH&&!eV;t.selecting!==R&&n.setSelecting(R);let D=p&&"fields"===eF;D&&!e2.mounted?e2.mount():!D&&e2.mounted&&e2.unmount(),e_&&!p&&(e_=!1),h.textContent=te()||o.pages,b.hidden=null===k.pages&&null!==k.error,m.hidden=!b.hidden,m.textContent=te()||o.pages,b.setAttribute("aria-expanded",String(e_)),C.hidden=!e_,E.hidden=!u||eV,E.disabled=s;let q=n.environment;v.hidden=!q,v.dataset.env=q??"",f.textContent="production"===q?o.envProduction:q??"",y.hidden=!N,y.setAttribute("aria-pressed",String("ask"===eF)),y.disabled=s,z.hidden=!eB,A.disabled=S.disabled=s,eg.hidden="ask"!==eF,ex.hidden="fields"!==eF;let V=null!==x&&!eV;if(eV)j.textContent=o.newPage;else if(t.selectedUid){let[r,n=""]=o.scopeNoteBlock.split("{name}");for(let a of[j,em])a.replaceChildren(r??"",L(e,"strong",{textContent:e8(t.selectedUid)}),n)}else j.textContent=o.scopeNotePage;let H=t.selectedUid?e9(t.selectedUid):null,G=H?U(o.scopeUp,{name:e8(H)}):o.scopeEntry;for(let e of[T,ef])e.textContent!==G&&(e.textContent=G);ev.hidden=eV||!t.selectedUid,W.hidden=V||g&&!eV&&!a.promptWithoutPage,T.hidden=eV||!t.selectedUid,_.hidden=!eV||w,Y.hidden=eK.length>0||V||eV,Z.hidden=!V;let Q=B(o,x);K.textContent=t.prompting&&V?Q.adding:Q.add,J.disabled=s,X.textContent=eX?.text??Q.hint,X.className=eX?.error?"failure":"summary",eu.hidden=V,eo.hidden=!eV,ei.disabled=s,es.placeholder=eV?o.newPagePlaceholder:o.placeholder,es.disabled=s,ep.disabled=s||""===es.value.trim()||eV&&""===ei.value.trim(),ep.setAttribute("aria-busy",String(t.prompting)),el.hidden=t.prompting,ed.hidden=!t.prompting,ek.hidden=P||!t.canUndo||eV,ek.disabled=s,eE.hidden=!t.features.includes("save")||g,eE.disabled=s||P||!t.unsaved,eC.hidden=!t.features.includes("publish")||g,eC.disabled=s||P,a.actions&&(a.actions.slot=p?"actions-footer":"actions-bar"),eA.hidden=!c,t.unsaved&&!eY&&(eW=null),eY=t.unsaved;let ee=i?M(e,"working",$):eW?.kind==="error"?O(e,"alert"):P||t.unsaved?L(e,"span",{className:"dot"}):O(e,"check"),et=t.saving?o.saving:t.publishing?o.publishing:eW?.kind==="error"?`${"save"===eW.action?o.saveFailed:o.publishFailed}: ${eW.text}`:P?o.keepFirst:t.unsaved?o.unsaved:eW?.kind==="saved"?o.saved:eW?.kind==="published"?o.published:o.upToDate,er=i?"saving":eW?.kind==="error"?"error":P||t.unsaved?"unsaved":"saved";if((ey.dataset.state!==er||ey.dataset.text!==et)&&(ey.dataset.state=er,ey.dataset.text=et,ey.replaceChildren(ee,L(e,"span",{textContent:et})),eW?.kind==="error"&&!i)){let e=eW.action,t=d("link",o.tryAgain);t.addEventListener("click",()=>void tE(e)),ey.appendChild(t)}eb.classList.toggle("loading",e2.loading||null!==e2.error),eh.hidden=!e2.loading&&null===e2.error,eh.className=`form-note${null!==e2.error?" error":""}`,eh.textContent=e2.error??o.formLoading;let en=e3();for(let e of eK){if("working"===e.status||"failed"===e.status)continue;e.node.dataset.status=e.status;let t="pending"===e.status?o.suggested:"kept"===e.status?o.kept:o.undone;for(let r of(e.eyebrow.textContent!==t&&(e.eyebrow.textContent=t),e.actions&&(e.actions.hidden=e!==en),e.details))r.hidden="undone"===e.status}p&&((()=>{if("idle"!==e0||null===n.entryId)return;e0="loading";let e=()=>{e0="done",td()};n.view({uid:null}).then(t=>{e7(t),e()},e)})(),null===k.pages&&null===k.error&&k.fetch()),tr()},td=()=>tl(n.getState()),tp=()=>{es.style.height="auto",es.style.height=`${es.scrollHeight}px`},tc=()=>{ea.scrollTop=ea.scrollHeight},tu=e=>{eD=e;try{s?.localStorage.setItem(G,eD?"open":"minimised")}catch{}eD||(e_=!1),td(),eD?eV?ei.focus():"fields"===eF?e4():es.focus():eL.focus()},tg=e=>{if("fields"===e&&e5().length>0){eB=!0,td(),A.focus();return}if(eB=!1,eq===e)return td();eq=e,td()},th=e=>{e_=!1,(eV=e)&&n.select(null),td(),(eV?ei:es).focus()},tb=e=>{(e_=e)&&k.reset(),td(),(e_?k.search:b).focus()},tm=()=>{let{selectedUid:e}=n.getState();return e&&n.select(e9(e)),!n.getState().selectedUid},tf=()=>{let e=n.getState();if(!tn(e))return!1;if(e_)tb(!1);else{if(!e.selectedUid)return!1;tm()}return!0},tv=(e=!0)=>{let t=e5();t.length&&e3()&&(t.forEach(e=>{e.status="kept"}),td(),e&&es.focus())},tx=(e,t=!0)=>{e===e3()&&(n.undo(),e.status="undone",td(),t&&es.focus())},ty=async(e,t)=>{let r={uid:e.uid},a=await n.view(r).catch(()=>null);try{let{summary:i}=await n.prompt(t,r);e.step=n.getState().undoSteps??null;let o=a?await n.view(r).catch(()=>null):null;e.summary=i,e.diffs=a&&o?((e,t)=>{let r=new Map,n=new Map;er(e,"","",r),er(t,"","",n);let a=[];for(let e of new Set([...r.keys(),...n.keys()])){let t=r.get(e),i=n.get(e);t?.text!==i?.text&&a.push({label:(i??t).label,before:t?.text??"",after:i?.text??""})}return a})(a,o):[],e.status="pending"}catch(t){e.summary=q(t),e.status="failed"}to(e),td(),tc()},tw=async e=>{if(e!==e3())return;n.undo(),e.status="undone";let t=ts(e.prompt,e.uid);td(),tc(),es.focus(),await ty(t,U(o.retryPrompt,{prompt:e.prompt}))},tk=async()=>{let t=es.value.trim(),r=n.getState();if(!t||r.prompting)return;let a=ei.value.trim();if(eV&&!a)return ei.focus();let i=eV?null:r.selectedUid,s=eV?`${o.newPage} \xb7 ${a}`:i?e8(i):o.scopeEntry;en.appendChild(L(e,"p",{className:"bubble"},L(e,"span",{className:"visually-hidden",textContent:`${o.you} (${s}): `}),t)),es.value="",tp();let l=ts(t,i);if(td(),tc(),eV){try{await n.createPage(a,t),k.forget(),l.summary=o.created,l.status="kept"}catch(e){l.summary=q(e),l.status="failed"}to(l),td()}else await ty(l,t);es.focus()},tE=async e=>{eW=null;let t=await H(n,e);eW=t?{kind:"error",action:e,text:t}:{kind:"save"===e?"saved":"published"},td()};eL.addEventListener("click",()=>tu(!eD)),x.addEventListener("click",()=>tu(!1)),eU.addEventListener("click",()=>{eH=!eH,td()}),eO.addEventListener("click",()=>n.signOut()),b.addEventListener("click",()=>tb(!e_)),E.addEventListener("click",()=>th(!0)),_.addEventListener("click",()=>th(!1)),T.addEventListener("click",()=>{tm()&&es.focus()}),ef.addEventListener("click",()=>{tm()&&e4()}),J.addEventListener("click",async()=>{eX=null,eX=await V(n,o),td()}),y.addEventListener("click",()=>tg("ask"===eq?"fields":"ask")),A.addEventListener("click",()=>{tv(!1),tg("fields"),e4()}),S.addEventListener("click",()=>{for(let e=e3();e;e=e3())tx(e,!1);tg("fields"),e4()}),ek.addEventListener("click",()=>{let e=n.getState().undoSteps,t=void 0===e?void 0:eK.find(t=>"kept"===t.status&&t.step===e);if(n.undo(),t){var r;t.status="undone",td(),r=`${o.undone}: ${t.summary}`,eN.textContent="",eN.textContent=r}ek.hidden&&es.focus()}),eE.addEventListener("click",()=>void tE("save")),eC.addEventListener("click",()=>void tE("publish")),eu.addEventListener("submit",e=>{e.preventDefault(),tk()}),es.addEventListener("input",()=>{tp(),td()}),es.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||e.isComposing||(e.preventDefault(),tk())}),ei.addEventListener("input",td),ei.addEventListener("keydown",e=>{"Enter"!==e.key||e.isComposing||(e.preventDefault(),es.focus())});let tC=e=>{"Escape"===e.key&&!e.defaultPrevented&&tf()&&e.preventDefault()};e.addEventListener("keydown",tC);let tA=e=>{let r=e.target,n=r?.closest?.(`[${t}]`),a=n?.getAttribute(t)??null;a!==eZ&&(eZ=a,tr())},tN=()=>{eZ=null,tr()};e.addEventListener("pointerover",tA),l.addEventListener("pointerleave",tN),s?.addEventListener("scroll",tr,{capture:!0,passive:!0}),s?.addEventListener("resize",tr);let tS=s?.MutationObserver,tL="function"==typeof tS?new tS(tr):null;tL?.observe(e.body,{childList:!0,subtree:!0});let tP=s?.ResizeObserver,t$="function"==typeof tP?new tP(tr):null;t$?.observe(l);let tM=s?.matchMedia?.("(min-width: 768px)")??null;eJ=tM?.matches??!0;let tU=()=>{eJ=tM?.matches??!0,td()};tM?.addEventListener?.("change",tU);let tz=n.on("change",tl);return l.setAttribute("data-obelism-editor",""),e.head.appendChild(u),e.body.appendChild(p),td(),()=>{e1=!0,tz(),e2.unmount(),null!==tt&&s?.cancelAnimationFrame?.(tt),e.removeEventListener("keydown",tC),e.removeEventListener("pointerover",tA),l.removeEventListener("pointerleave",tN),s?.removeEventListener("scroll",tr,{capture:!0}),s?.removeEventListener("resize",tr),tM?.removeEventListener?.("change",tU),tL?.disconnect(),t$?.disconnect(),n.setSelecting(!1),l.removeAttribute("data-obelism-editor"),l.removeAttribute("data-obelism-docked"),l.style.removeProperty("--obelism-dock"),u.remove(),p.remove()}},ea=Symbol.for("@obelism/content/bridge"),ei=S({isEditing:!1,entryId:null,on:()=>{}},new URLSearchParams),eo=({url:e,prompt:o=!0,pagePath:l,productPath:d,collectionPath:p}={})=>{let u;if("u"<typeof window)return ei;let g=window;if(g[ea])return g[ea];if(g.ObelismBridge)u=S(g.ObelismBridge,new URLSearchParams(g.location.search));else{let f=(u=((e,r)=>{let n,a,o,s,l,d=new URLSearchParams(e.location.search),p=e.parent!==e&&d.has("cms_preview"),u=y(),g=[],f={...x,selecting:!0},w=e=>{f={...f,...e},u.emit("change",f)},k={isEditing:p,mode:p?"editor":null,entryId:d.get("cms_entry"),environment:d.get(i),product:null,collection:null,on:u.on,getState:()=>f,...E,destroy:()=>{g.splice(0).forEach(e=>e())}};if(!p)return k;let C=e.document,S=(t,n={})=>{e.parent.postMessage({source:m,type:t,...n},r)},L=C.createElement("style");L.textContent=v(),C.head.appendChild(L),g.push(()=>L.remove());let P=(e,t)=>{if(C.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),f.selectedUid!==(e??null)&&w({selectedUid:e??null}),!e)return;let r=C.querySelector(N(e));r&&(r.setAttribute("data-cms-selected",""),t&&r.scrollIntoView({behavior:"smooth",block:"center"}))},$=e=>{let r=e.target,n=r?.closest?.(`[${t}]`);if(!n)return;e.preventDefault(),e.stopPropagation();let a=n.getAttribute(t);P(a,!1),S("select",{uid:a})};C.addEventListener("click",$,!0),g.push(()=>C.removeEventListener("click",$,!0));let M=()=>Math.ceil(Math.max(C.documentElement.scrollHeight,C.body?.scrollHeight??0)),U=0,z=()=>{U=M(),S("ready",{url:e.location.href,height:U})},O=e.ResizeObserver;if("function"==typeof O){let e=new O(()=>{let e=M();e!==U&&(U=e,S("size",{height:e}))});e.observe(C.documentElement),C.body&&e.observe(C.body),g.push(()=>e.disconnect())}let I=new Map,j=0,T=e=>{let t=I.get(e);return t?(clearTimeout(t.timer),I.delete(e),0===I.size&&w({prompting:!1}),t):null};k.prompt=(e,t={})=>{let r=e.trim();if(!r)return Promise.reject(Error("Say what to change"));if(!f.features.includes("prompt"))return Promise.reject(Error("The editor does not offer prompts here"));let n=`prompt_${++j}`,a=void 0===t.uid?f.selectedUid:t.uid;return new Promise((e,t)=>{let i=setTimeout(()=>{T(n)?.reject(Error("The editor did not answer in time"))},12e4);I.set(n,{resolve:e,reject:t,timer:i}),w({prompting:!0}),S("prompt",{id:n,prompt:r,uid:a})})},k.undo=()=>S("undo"),k.select=e=>{P(e,!1),S("select",{uid:e})};let R=null;g.push(()=>R?.destroy()),g.push(()=>{for(let e of I.keys())T(e)?.reject(Error("The bridge was destroyed"))});let D=(n=new WeakSet,a=null,o=null,s=!1,l=()=>{if(null!==a){for(let e of Array.from(C.styleSheets)){let t;if(!n.has(e)){try{t=e.cssRules}catch{continue}n.add(e),b(t,a)}}C.querySelectorAll('[style*="vh"]').forEach(e=>{h(e.style,a)})}},{freeze(e){if(null!==a||!(e>0))return;a=e,l();let t=C.defaultView?.MutationObserver;t&&(o=new t(()=>{if(s)return;s=!0;let e=()=>{s=!1,l()};C.defaultView?.requestAnimationFrame?C.defaultView.requestAnimationFrame(e):e()})).observe(C.documentElement,{childList:!0,subtree:!0})},destroy(){o?.disconnect()}});g.push(()=>D.destroy());let q=t=>{if(t.origin!==r||t.source!==e.parent)return;let n=t.data;if(n&&"obelism-content-editor"===n.source){if("connect"===n.type)z();else if("update"===n.type&&n.entry)u.emit("update",{entry:n.entry,selectedUid:n.selectedUid??null}),e.requestAnimationFrame(()=>P(n.selectedUid,!1)),R?.refresh();else if("select"===n.type)P(n.uid,!0);else if("saved"===n.type||"published"===n.type)u.emit(n.type,{}),0===u.listeners.update.size&&e.location.reload();else if("features"===n.type&&Array.isArray(n.features))w({features:n.features.filter(e=>"string"==typeof e)});else if("stats"===n.type)w({stats:A(n.stats),statsVisible:!1!==n.visible}),(R||Object.keys(f.stats).length)&&(R??(R=c(e,{selector:N,onSelect:e=>k.select(e)})),R.update(f.stats,f.statsVisible));else if("viewport"===n.type&&"number"==typeof n.height)D.freeze(n.height);else if("promptState"===n.type)w({canUndo:!0===n.canUndo});else if("promptResult"===n.type&&"string"==typeof n.id){let e=T(n.id);if(!e)return;!0===n.ok?e.resolve({summary:"string"==typeof n.summary?n.summary:""}):e.reject(Error("string"==typeof n.error?n.error:"The prompt failed"))}}};return e.addEventListener("message",q),g.push(()=>e.removeEventListener("message",q)),"loading"===C.readyState?(C.addEventListener("DOMContentLoaded",z,{once:!0}),g.push(()=>C.removeEventListener("DOMContentLoaded",z))):z(),k})(g,new URL(e||X).origin)).isEditing||g.parent!==g?null:(e=>{for(let t of e.cookie.split(";")){let[e,...r]=t.trim().split("=");if("obelism_content_editing"===e)try{let e=decodeURIComponent(r.join("="));return K.test(e)?e:null}catch{break}}return null})(g.document);if(f&&(u=((e,i,{pagePath:o=e=>`/${e.replace(/^\/+/,"")}`,productPath:l,collectionPath:d}={})=>{let p=e.document,u=y(),g=[],h=new Map,b=[],f=new Set,w=null,k=null,E=-1/0,C=new Map,S=x,L=e=>{S={...S,...e},u.emit("change",S)},P=()=>L({unsaved:[...h.values()].some(({content:e,saved:t})=>!Z(e,t)),canUndo:b.length>0,undoSteps:b.length}),$=async(t,r)=>{let n=await e.fetch(`${i}/api/${t}`,void 0===r?{credentials:"same-origin"}:{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","x-obelism-content":"1"},body:JSON.stringify(r)}),a=await n.json().catch(()=>({}));if(401===n.status)throw L({features:[]}),Error("You were signed out. Sign in again to edit.");if(!n.ok)throw Error("string"==typeof a.error?a.error:`Obelism Content answered ${n.status}`);return a},M=()=>p.querySelector(`[${r}]`)?.getAttribute(r)??null,U=()=>{let e=p.querySelector(`[${n}]`),t=e?.getAttribute(n),r=e?.getAttribute("data-cms-product-handle");return t&&r?{id:t,handle:r}:null},z=()=>{let e=p.querySelector(`[${a}]`),t=e?.getAttribute(a),r=e?.getAttribute("data-cms-collection-handle");return t&&r?{id:t,handle:r}:null},O=e=>{let t=e?p.querySelector(N(e)):null;return t?.closest(`[${r}]`)?.getAttribute(r)??M()},I=()=>{if(!w)return;let e=w.space.locales.map(({code:e})=>e),t=p.documentElement.lang;if(e.includes(t))return t;let r=t.split("-")[0]??"";return e.includes(r)?r:w.space.defaultLocale},j=new Map,T=async e=>{let t=h.get(e);if(t)return t;let r=j.get(e);return r||(r=$(`entries/${encodeURIComponent(e)}`).then(t=>{let r=h.get(e)??{content:t.content,saved:t.content,revision:t.draftRevision};return h.set(e,r),r}).finally(()=>j.delete(e)),j.set(e,r)),r},R=e=>{let t=void 0===e?S.selectedUid:e,r=O(t);if(!r)throw Error("Nothing on this page is marked as an entry: add editable(entry)");return{uid:t,entryId:r}},D=e=>{p.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),S.selectedUid!==e&&L({selectedUid:e}),e&&p.querySelector(N(e))?.setAttribute("data-cms-selected","")},q=async t=>{if(0===u.listeners.update.size)return;let r=h.get(t)?.content,{entry:n}=await $(`entries/${encodeURIComponent(t)}/preview`,{content:r,locale:I()});u.emit("update",{entry:n,selectedUid:S.selectedUid}),e.requestAnimationFrame(()=>D(S.selectedUid))},F=e=>console.error("[@obelism/content bridge]",e),B=t=>{u.emit(t,{}),0===u.listeners.update.size&&e.location.reload()},V=async()=>{for(let[e,t]of h){if(Z(t.content,t.saved))continue;let{draftRevision:r}=await $(`entries/${encodeURIComponent(e)}/save`,{content:t.content,baseRevision:t.revision});t.saved=t.content,t.revision=r,f.add(e)}b.length=0,E=-1/0,P()},H={isEditing:!0,mode:"site",get entryId(){return M()},get product(){return U()},get collection(){return z()},get environment(){return w?.environment??null},on:u.on,getState:()=>S,async prompt(e,t={}){let r=e.trim();if(!r)throw Error("Say what to change");if(!S.features.includes("prompt"))throw Error("You may not edit content here");let{uid:n,entryId:a}=R(t.uid);L({prompting:!0});try{let e=await T(a),t=await $(`entries/${encodeURIComponent(a)}/prompt`,{prompt:r,content:e.content,locale:I(),uid:n});return b.push({entryId:a,content:e.content}),E=-1/0,e.content=t.content,P(),await q(a),{summary:t.summary}}finally{L({prompting:!1})}},async createPage(t,r){let n=r.trim();if(!n)throw Error("Say what the page is for");if(!t.trim())throw Error("Say where the page goes, like /pricing");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("entries",{path:t,prompt:n,locale:I(),from:M()}),a=o(r.path,I()??"");return e.location.assign(J(a)),{summary:r.summary,entryId:r.entryId,path:r.path,url:a}}finally{L({prompting:!1})}},async createProductPage(t=U()??void 0){if(!t)throw Error("Nothing on this page is marked as a product: add editableProduct(product)");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("product-pages",{product:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{L({prompting:!1})}},async createCollectionPage(t=z()??void 0){if(!t)throw Error("Nothing on this page is marked as a collection: add editableCollection(collection)");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("collection-pages",{collection:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{L({prompting:!1})}},async view(e={}){let{uid:t,entryId:r}=R(e.uid),n=await T(r),{view:a}=await $(`entries/${encodeURIComponent(r)}/view`,{content:n.content,locale:I(),uid:t});return a},async applyJson(e,t={}){if(!S.features.includes("prompt"))throw Error("You may not edit content here");if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Send the fields to change as an object");let{uid:r,entryId:n}=R(t.uid);L({prompting:!0});try{let t=await T(n),a=await $(`entries/${encodeURIComponent(n)}/apply`,{changes:e,content:t.content,locale:I(),uid:r});return Z(a.content,t.content)||(b.push({entryId:n,content:t.content}),E=-1/0,t.content=a.content,P(),await q(n)),{changed:a.changed??[],...a.view&&{view:a.view}}}finally{L({prompting:!1})}},openForm(t,r={}){let{title:n="Content form",onReady:a,onError:i,onEscape:o}=r;k?.();let s=!1,l=null,d=null,p=()=>{},c=e=>{s||i?.(e instanceof Error?e.message:String(e))},g=()=>{s||(s=!0,p(),l?.destroy(),k===g&&(k=null))};k=g;let f=()=>{if(s||!l)return;let e=O(S.selectedUid);if(!e)return;let t=h.get(e);if(!t)return void T(e).then(f,c);let r={entryId:e,content:t.content,locale:I(),selectedUid:S.selectedUid};d&&d.entryId===r.entryId&&d.content===r.content&&d.locale===r.locale&&d.selectedUid===r.selectedUid||(d=r,l.show(r))},v=(e,t)=>{let r=t??d?.entryId,n=void 0===r?void 0:h.get(r);if(s||void 0===r||!n||Z(e,n.content))return;let a=Date.now();a-E>=1e3&&b.push({entryId:r,content:n.content}),E=a,n.content=e,d?.entryId===r&&(d={...d,content:e}),P(),clearTimeout(C.get(r)),C.set(r,setTimeout(()=>{C.delete(r),q(r).catch(F)},300))};return(async()=>{if(!S.features.includes("form"))throw Error("You may not edit content here");await T(R(void 0).entryId);let{url:r}=await $("form",{});s||(l=((e,t,r,n,a)=>{let i=null;try{i=new URL(r)}catch{}if(!i||!/^https?:$/.test(i.protocol))throw Error("Obelism Content sent no form to open");let o=i.origin,s=t.ownerDocument.createElement("iframe");s.title=n,s.src=r;let l=!1,d=!1,p=null,c=()=>{l&&p&&s.contentWindow?.postMessage({source:m,type:"content",...p},o)},u=setTimeout(()=>{d||a.onError("The form did not open")},3e4),g=()=>{d=!0,clearTimeout(u),a.onReady()},h=e=>{if(e.origin!==o||!s.contentWindow||e.source!==s.contentWindow)return;let t=e.data;if(t&&"obelism-content-form"===t.source)if("ready"===t.type)l=!0,c(),!0!==t.loading&&g();else if("loaded"===t.type)l&&g();else{let e;if("change"!==t.type||!(e=t.content)||"object"!=typeof e||Array.isArray(e))if("height"===t.type){let e=t.height;if("number"==typeof e&&Number.isFinite(e)){let t=Math.round(Math.min(Math.max(e,80),4e3));s.style.height=`min(${t}px, 60vh)`}}else"escape"===t.type?a.onEscape?.():"error"===t.type&&a.onError("string"==typeof t.message&&t.message?t.message:"The form failed");else a.onChange(t.content,"string"==typeof t.entryId?t.entryId:void 0)}};return e.addEventListener("message",h),t.appendChild(s),{show(e){p=e,c()},destroy(){clearTimeout(u),e.removeEventListener("message",h),s.remove()}}})(e,t,"string"==typeof r?r:"",n,{onReady:()=>a?.(),onChange:v,onError:e=>i?.(e),onEscape:()=>o?.()}),p=u.on("change",f),f())})().catch(c),{close:g}},async pages(){let{pages:e}=await $("pages"),t=[I(),w?.space.defaultLocale];return e.flatMap(e=>{let r,n,a=t.find(t=>void 0!==t&&void 0!==e.paths[t])??Object.keys(e.paths)[0],i=void 0===a?void 0:e.paths[a];return void 0===a||void 0===i?[]:[{entryId:e.entryId,name:e.name,contentType:e.contentType,status:e.status,path:i,url:e.product?(r=e.product.handle,l?l(r,a):(w?.productPath??"/products/{handle}").replaceAll("{handle}",encodeURIComponent(r))):e.collection?(n=e.collection.handle,d?d(n,a):(w?.collectionPath??"/collections/{handle}").replaceAll("{handle}",encodeURIComponent(n))):o(i,a),product:e.product??null,collection:e.collection??null}]})},openPage(t){(!S.unsaved||e.confirm("Leave this page and lose the changes you have not saved?"))&&(h.clear(),b.length=0,P(),e.location.assign(J(t.url)))},undo(){let e=b.pop(),t=e&&h.get(e.entryId);e&&t&&(E=-1/0,t.content=e.content,P(),q(e.entryId).catch(F))},async save(){if(!S.features.includes("save"))throw Error("You may not edit content here");L({saving:!0});try{await V()}finally{L({saving:!1})}B("saved")},async publish(){if(!S.features.includes("publish"))throw Error("You may not publish here");L({publishing:!0});try{await V();let e=M(),t=f.size>0?[...f]:e?[e]:[];if(0===t.length)throw Error("Nothing on this page is marked as an entry: add editable(entry)");for(let e of t)await $(`entries/${encodeURIComponent(e)}/publish`,{}),f.delete(e)}finally{L({publishing:!1})}B("published")},signOut(){if(S.unsaved&&!e.confirm("Sign out and lose the changes you have not saved?"))return;h.clear(),P();let t=e.location.pathname+e.location.search;e.location.href=`${i}/logout?return_to=${encodeURIComponent(t)}`},select(e){D(e)},setSelecting(e){e?p.documentElement.setAttribute("data-cms-selecting",""):p.documentElement.removeAttribute("data-cms-selecting"),L({selecting:e,statsVisible:e}),et()},destroy(){k?.(),C.forEach(e=>clearTimeout(e)),C.clear(),g.splice(0).forEach(e=>e())}},_=p.createElement("style");_.textContent=v("html[data-cms-selecting] "),p.head.appendChild(_),g.push(()=>_.remove()),g.push(()=>p.documentElement.removeAttribute("data-cms-selecting"));let W=e=>{if(!S.selecting)return;let r=e.target,n=r?.closest?.(`[${t}]`);n&&(e.preventDefault(),e.stopPropagation(),D(n.getAttribute(t)))};p.addEventListener("click",W,!0),g.push(()=>p.removeEventListener("click",W,!0));let Y=e=>{S.unsaved&&(e.preventDefault(),e.returnValue="")};e.addEventListener("beforeunload",Y),g.push(()=>e.removeEventListener("beforeunload",Y));let X=new Set,K=new Set,G=!1,Q=null,ee=null,et=()=>Q?.update(S.stats,S.statsVisible),er=async()=>{if(G)return;let t=[...new Set([...p.querySelectorAll(`[${s}]`)].map(e=>e.getAttribute(s)??""))].filter(e=>e&&!X.has(e)),n=t.slice(0,500);if(!n.length)return;n.forEach(e=>X.add(e));let a=[...new Set([...p.querySelectorAll(`[${r}]`)].map(e=>e.getAttribute(r)??""))].filter(Boolean).slice(0,20);try{let{stats:e}=await $("stats",{uids:n,...a.length>0&&{entries:a}});n.forEach(e=>K.add(e)),L({stats:{...S.stats,...A(e)}})}catch{G=!0;return}Q??(Q=c(e,{selector:N,onSelect:e=>D(e),checked:e=>K.has(e)})),et(),t.length>n.length&&en()},en=()=>{null!==ee||G||(ee=setTimeout(()=>{ee=null,er()},1e3))},ea=e.MutationObserver,ei="function"==typeof ea?new ea(en):null;return g.push(()=>{ei?.disconnect(),null!==ee&&clearTimeout(ee),Q?.destroy()}),$("session").then(e=>{w=e,L({features:e.features}),er(),ei?.observe(p.body,{childList:!0,subtree:!0})}).catch(e=>console.error("[@obelism/content bridge]",e)),H})(g,f,{pagePath:l,productPath:d,collectionPath:p})),u.isEditing&&o){let e=g.document,t=()=>{},r=!1,n=f?en:Y,a=()=>{r||(t=n(e,u,!0===o?{}:o))};e.body?a():e.addEventListener("DOMContentLoaded",a,{once:!0});let i=u.destroy;u.destroy=()=>{r=!0,e.removeEventListener("DOMContentLoaded",a),t(),i()}}}return g[ea]=u,u};(e=window).ObelismBridge=eo((e=>{let t=e?.dataset.url,r=t||X;if(!t&&e?.src){let t=new URL(e.src);"/bridge.js"===t.pathname&&(r=t.origin)}return{url:r,prompt:e?.dataset.prompt!=="false"}})(document.currentScript)),e.ObelismContent={getContentBridge:eo,mountPromptBox:Y,mountSiteEditor:en}}();
594
+ `,ee=e=>{let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},et=e=>!!e&&"object"==typeof e&&!Array.isArray(e),er=(e,t,r,n)=>{if(null!=e&&""!==e){if("object"!=typeof e)return void n.set(r,{label:t,text:String(e)});if(Array.isArray(e)){if(e.every(e=>null===e||"object"!=typeof e)){e.length&&n.set(r,{label:t,text:e.join(", ")});return}e.forEach((e,a)=>{let i=et(e)&&"string"==typeof e._uid?e._uid:a,o=et(e)&&"string"==typeof e._type?e._type:null;er(e,o?ee(o):t,`${r}/${i}`,n)});return}for(let[a,i]of Object.entries(e))"_uid"!==a&&"_type"!==a&&er(i,t?`${t} \xb7 ${ee(a)}`:ee(a),`${r}/${a}`,n)}},en=(e,n,a={})=>{let i,o={...R,...a.labels},s=e.defaultView,l=e.documentElement,d=(t,...r)=>L(e,"button",{className:t,type:"button"},...r),p=L(e,"div");p.setAttribute("data-obelism-content-editor","");let c=p.attachShadow({mode:"open"}),u=L(e,"style",{textContent:(i=`[${t}]`,`html[data-obelism-editor]{transition:margin-right .3s cubic-bezier(.2,.8,.2,1)}html[data-obelism-docked]{margin-right:436px!important}html[data-obelism-docked] [data-obelism-dock]{right:436px!important;max-width:calc(100vw - 436px)!important}html[data-obelism-editor][data-cms-selecting] ${i}:hover:not([data-cms-selected]){outline:none}html[data-obelism-editor][data-cms-selecting] ${i}[data-cms-selected]{outline:2px solid rgb(212 130 30);outline-offset:2px}@media (prefers-reduced-motion:reduce){html[data-obelism-editor]{transition:none}}`)}),g=L(e,"span",{className:"tile"},M(e,"mark",P)),h=L(e,"span"),b=d("page-button hit",h,L(e,"span",{className:"visually-hidden",textContent:`, ${o.pages}`}),O(e,"chevrons"));b.setAttribute("aria-haspopup","listbox"),b.setAttribute("aria-expanded","false"),b.setAttribute("aria-controls","obelism-pages");let m=L(e,"span",{className:"page-name"}),f=L(e,"span"),v=L(e,"span",{className:"env"},L(e,"span",{className:"visually-hidden",textContent:`${o.environment}: `}),f),x=d("icon-button hit",O(e,"dash"));x.setAttribute("aria-label",o.minimize),x.title=o.minimize;let y=d("mode hit",M(e,"mark",P),o.modePrompt);y.setAttribute("aria-pressed","false");let w=L(e,"div",{className:"head"},g,b,m,v,L(e,"span",{className:"spacer"}),y,x),k=D(e,n,o,{onLoad:()=>td(),onClose:()=>tb(!1)}),E=d("button quiet new-page",O(e,"plus"),o.newPage),C=L(e,"div",{className:"pages"},k.searchRow,k.list,k.note,E),A=d("button primary",o.keep),S=d("button quiet",o.undo),z=L(e,"div",{className:"gate"},L(e,"p",{textContent:o.keepBeforeFields}),L(e,"div",{className:"actions"},A,S));z.setAttribute("role","alert");let j=L(e,"span"),T=d("",o.scopeEntry),_=d("",o.newPageCancel),W=L(e,"div",{className:"note"},O(e,"scope"),j,T,_),Y=L(e,"p",{className:"intro",textContent:o.askIntro}),X=L(e,"p",{className:"summary"}),K=L(e,"span"),J=d("button primary",O(e,"plus"),K),Z=L(e,"div",{className:"shop"},X,J),en=L(e,"div",{className:"log"});en.setAttribute("role","log");let ea=L(e,"div",{className:"scroll"},W,Y,Z,en),ei=L(e,"input",{type:"text",placeholder:o.pathPlaceholder,autocomplete:"off",spellcheck:!1}),eo=L(e,"label",{className:"path"},L(e,"span",{textContent:o.path}),ei),es=L(e,"textarea",{rows:1});es.setAttribute("aria-label",o.open);let el=O(e,"arrowUp"),ed=M(e,"working",$),ep=L(e,"button",{className:"send",type:"submit",title:o.send},L(e,"span",{className:"visually-hidden",textContent:o.send}),el,ed),ec=L(e,"div",{className:"bar"},M(e,"mark",P),es,ep),eu=L(e,"form",{className:"composer"},eo,ec),eg=L(e,"div",{className:"ask",id:"obelism-ask"},ea,eu);eg.setAttribute("role","tabpanel"),eg.setAttribute("aria-label",o.modePrompt);let eh=L(e,"p",{className:"form-note"});eh.setAttribute("role","status");let eb=L(e,"div",{className:"form"},eh),em=L(e,"span"),ef=d("",o.scopeEntry),ev=L(e,"div",{className:"note"},O(e,"scope"),em,ef),ex=L(e,"div",{className:"fields",id:"obelism-fields"},ev,eb);ex.setAttribute("role","tabpanel"),ex.setAttribute("aria-label",o.form);let ey=L(e,"p",{className:"save-state"});ey.setAttribute("aria-live","polite");let ew=L(e,"slot");ew.name="actions-footer";let ek=d("button quiet",O(e,"undo"),o.undo),eE=d("button secondary",o.saveDraft),eC=d("button primary",o.publish),eA=L(e,"div",{className:"foot"},ey,ew,ek,eE,eC),eN=L(e,"p",{className:"visually-hidden"});eN.setAttribute("role","status");let eS=L(e,"aside",{className:"panel",id:"obelism-editor"},w,C,z,eg,ex,eA,eN);eS.setAttribute("aria-label",o.editor);let eL=d("launch",L(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.editing);eL.setAttribute("aria-controls",eS.id);let eP=L(e,"span",{className:"reading"},L(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.viewingDrafts),e$=O(e,"eye"),eM=O(e,"eyeOff"),eU=d("eye",e$,eM);eU.setAttribute("aria-label",o.hideOutlines),eU.title=o.hideOutlines;let ez=L(e,"slot");ez.name="actions-bar";let eO=d("exit",o.signOut),eI=L(e,"div",{className:"launcher"},eL,eP,eU,ez,eO);a.actions&&p.appendChild(a.actions);let ej=L(e,"div",{className:"layer"});ej.setAttribute("aria-hidden","true");let eT=L(e,"div",{className:"wash"});eT.setAttribute("aria-hidden","true");let eR=L(e,"div",{className:"root"},eT,ej,eS,eI);c.append(L(e,"style",{textContent:Q}),eR);let eD=(e=>{try{return e?.localStorage.getItem(G)!=="minimised"}catch{return!0}})(s),eq="fields",eF="fields",eB=!1,eV=!1,eH=!0,e_=!1,eW=null,eY=!1,eX=null,eK=[],eJ=!0,eZ=null,eG=new Map,eQ=new Map,e0="idle",e1=!1,e2=I(n,eb,o.formTitle,{onReady:()=>{td(),eD&&"fields"===eF&&e4()},onError:()=>td(),onEscape:()=>tf()}),e4=()=>eb.querySelector("iframe")?.focus(),e5=()=>eK.filter(({status:e})=>"pending"===e),e6=()=>e5().slice(-1)[0]??null,e3=()=>eK.some(({status:e})=>"working"===e)?null:e6(),e8=e=>(eG.has(e)||"loading"===e0||(eG.set(e,null),n.view({uid:e}).then(t=>{"string"==typeof t._type&&eG.set(e,ee(t._type)),td()},()=>{})),eG.get(e)??o.block),e7=(e,t=null)=>{if(Array.isArray(e))e.forEach(e=>e7(e,t));else if(et(e)){let r=t;"string"==typeof e._uid&&"string"==typeof e._type&&(r=e._uid,eQ.set(r,t),eG.set(r,ee(e._type))),Object.values(e).forEach(e=>e7(e,r))}},e9=r=>e.querySelector(N(r))?.parentElement?.closest(`[${t}]`)?.getAttribute(t)??eQ.get(r)??null,te=()=>k.current()?.name||e.title.trim(),tt=null,tr=()=>{null===tt&&s&&(tt=s.requestAnimationFrame(()=>{tt=null,(t=>{if(ej.replaceChildren(),eT.replaceChildren(),!ta(t))return;let n=t=>{let r=e.querySelector(t),n=r?.getBoundingClientRect();return n&&(n.width||n.height)?n:null},a=(t,r,n=ej)=>{let a=L(e,"div",{className:`box ${r}`});Object.assign(a.style,{top:`${t.top-3}px`,left:`${t.left-3}px`,width:`${t.width+6}px`,height:`${t.height+6}px`}),n.appendChild(a)},i=(t,...r)=>{let n=L(e,"div",{className:"chips"},...r),a=t.top-34<0?t.top+6:t.top-34;Object.assign(n.style,{top:`${a}px`,left:`${t.left-3}px`}),ej.appendChild(n)},s=(t,r)=>{let n=L(e,"span",{className:"accent-chip"});return r&&n.appendChild(M(e,"mark",P)),n.appendChild(e.createTextNode(t)),n},l=e6(),d=l?l.uid?N(l.uid):`[${r}]`:null,p=d?n(d):null;if(p&&a(p,"fill",eT),eZ&&eZ!==t.selectedUid){let t=n(N(eZ));if(t){a(t,"hover");let r=t.top-23<0,n=L(e,"span",{className:`name-tab${r?" inside":""}`,textContent:e8(eZ)});Object.assign(n.style,{top:`${r?t.top-1.5:t.top-23}px`,left:`${t.left-3}px`}),ej.appendChild(n)}}let c=!!l&&l.uid===t.selectedUid;if(t.selectedUid){let r=n(N(t.selectedUid));if(r){let n=e8(t.selectedUid),a=te();i(r,s(c?U(o.previewChip,{name:n}):n,c),...a?[L(e,"span",{className:"ink-chip",textContent:a})]:[])}}if(p&&!c){a(p,"preview");let e=l.uid?e8(l.uid):te()||o.pages;i(p,s(U(o.previewChip,{name:e}),!0))}})(n.getState())}))},tn=e=>e.features.includes("prompt")&&eD,ta=e=>tn(e)&&eH&&!eV,ti=t=>L(e,"span",{className:`value${t?"":" none"}`,textContent:t||o.emptyValue}),to=t=>{let r=t.node.querySelector(".card");if(r.querySelector(".status-line")?.remove(),"failed"===t.status)return void r.appendChild(L(e,"p",{className:"failure"},O(e,"alert"),t.summary));for(let n of(r.appendChild(t.eyebrow),t.summary&&r.appendChild(L(e,"p",{className:"summary",textContent:t.summary})),t.diffs.slice(0,3))){let a=L(e,"div",{className:"diff-field"},L(e,"span",{className:"diff-label",textContent:n.label}),L(e,"div",{className:"diff"},L(e,"div",{className:"before"},L(e,"span",{className:"tag",textContent:o.before}),ti(n.before)),L(e,"div",{className:"after"},L(e,"span",{className:"tag",textContent:o.after}),ti(n.after))));t.details.push(a),r.appendChild(a)}if(t.diffs.length>3){let n=L(e,"p",{className:"more",textContent:U(o.moreChanges,{count:t.diffs.length-3})});t.details.push(n),r.appendChild(n)}if("pending"===t.status){let n=d("button primary",o.keep),a=d("button secondary",o.retry),i=d("button quiet",o.undo);n.addEventListener("click",()=>tv()),a.addEventListener("click",()=>void tw(t)),i.addEventListener("click",()=>tx(t)),t.actions=L(e,"div",{className:"actions"},n,a,i),r.appendChild(t.actions)}},ts=(t,r)=>{let n=L(e,"div",{className:"card"},L(e,"span",{className:"visually-hidden",textContent:`${o.obelism}: `}),L(e,"p",{className:"status-line"},M(e,"working",$),eV?o.creating:o.working)),a=L(e,"div",{className:"answer"},L(e,"span",{className:"chip"},M(e,"mark",P)),n);a.dataset.status="working";let i={prompt:t,uid:r,status:"working",summary:"",diffs:[],step:null,node:a,eyebrow:L(e,"p",{className:"eyebrow"}),actions:null,details:[]};return eK.push(i),en.appendChild(a),i},tl=t=>{if(e1)return;let r=t.features.includes("prompt"),i=t.saving||t.publishing,s=t.prompting||i,p=r&&eD,{site:c,canCreate:u,pageless:g,shopHere:x,onlyNew:w}=F(n,t,a.promptWithoutPage);u||(eV=!1),w&&(eV=!0);let N=c&&!eV&&!g&&t.features.includes("form");eF=N?eq:"ask";let P=e5().length>0;for(let e of(P&&"fields"!==eF||(eB=!1),eK))null!==e.step&&e.step>(t.undoSteps??0)&&(e.step=null);eR.hidden=!r&&!c,eS.toggleAttribute("data-closed",!p),eS.inert=!p,eL.hidden=!r,eL.setAttribute("aria-expanded",String(p)),eP.hidden=r,eU.hidden=!p,eU.setAttribute("aria-pressed",String(!eH)),e$.hidden=!eH,eM.hidden=eH,eO.hidden=!1===a.signOut;let I=p&&eJ;l.toggleAttribute("data-obelism-docked",I),l.style.setProperty("--obelism-dock",`${436*!!I}px`);let R=p&&eH&&!eV;t.selecting!==R&&n.setSelecting(R);let D=p&&"fields"===eF;D&&!e2.mounted?e2.mount():!D&&e2.mounted&&e2.unmount(),e_&&!p&&(e_=!1),h.textContent=te()||o.pages,b.hidden=null===k.pages&&null!==k.error,m.hidden=!b.hidden,m.textContent=te()||o.pages,b.setAttribute("aria-expanded",String(e_)),C.hidden=!e_,E.hidden=!u||eV,E.disabled=s;let q=n.environment;v.hidden=!q,v.dataset.env=q??"",f.textContent="production"===q?o.envProduction:q??"",y.hidden=!N,y.setAttribute("aria-pressed",String("ask"===eF)),y.disabled=s,z.hidden=!eB,A.disabled=S.disabled=s,eg.hidden="ask"!==eF,ex.hidden="fields"!==eF;let V=null!==x&&!eV;if(eV)j.textContent=o.newPage;else if(t.selectedUid){let[r,n=""]=o.scopeNoteBlock.split("{name}");for(let a of[j,em])a.replaceChildren(r??"",L(e,"strong",{textContent:e8(t.selectedUid)}),n)}else j.textContent=o.scopeNotePage;let H=t.selectedUid?e9(t.selectedUid):null,G=H?U(o.scopeUp,{name:e8(H)}):o.scopeEntry;for(let e of[T,ef])e.textContent!==G&&(e.textContent=G);ev.hidden=eV||!t.selectedUid,W.hidden=V||g&&!eV&&!a.promptWithoutPage,T.hidden=eV||!t.selectedUid,_.hidden=!eV||w,Y.hidden=eK.length>0||V||eV,Z.hidden=!V;let Q=B(o,x);K.textContent=t.prompting&&V?Q.adding:Q.add,J.disabled=s,X.textContent=eX?.text??Q.hint,X.className=eX?.error?"failure":"summary",eu.hidden=V,eo.hidden=!eV,ei.disabled=s,es.placeholder=eV?o.newPagePlaceholder:o.placeholder,es.disabled=s,ep.disabled=s||""===es.value.trim()||eV&&""===ei.value.trim(),ep.setAttribute("aria-busy",String(t.prompting)),el.hidden=t.prompting,ed.hidden=!t.prompting,ek.hidden=P||!t.canUndo||eV,ek.disabled=s,eE.hidden=!t.features.includes("save")||g,eE.disabled=s||P||!t.unsaved,eC.hidden=!t.features.includes("publish")||g,eC.disabled=s||P,a.actions&&(a.actions.slot=p?"actions-footer":"actions-bar"),eA.hidden=!c,t.unsaved&&!eY&&(eW=null),eY=t.unsaved;let ee=i?M(e,"working",$):eW?.kind==="error"?O(e,"alert"):P||t.unsaved?L(e,"span",{className:"dot"}):O(e,"check"),et=t.saving?o.saving:t.publishing?o.publishing:eW?.kind==="error"?`${"save"===eW.action?o.saveFailed:o.publishFailed}: ${eW.text}`:P?o.keepFirst:t.unsaved?o.unsaved:eW?.kind==="saved"?o.saved:eW?.kind==="published"?o.published:o.upToDate,er=i?"saving":eW?.kind==="error"?"error":P||t.unsaved?"unsaved":"saved";if((ey.dataset.state!==er||ey.dataset.text!==et)&&(ey.dataset.state=er,ey.dataset.text=et,ey.replaceChildren(ee,L(e,"span",{textContent:et})),eW?.kind==="error"&&!i)){let e=eW.action,t=d("link",o.tryAgain);t.addEventListener("click",()=>void tE(e)),ey.appendChild(t)}eb.classList.toggle("loading",e2.loading||null!==e2.error),eh.hidden=!e2.loading&&null===e2.error,eh.className=`form-note${null!==e2.error?" error":""}`,eh.textContent=e2.error??o.formLoading;let en=e3();for(let e of eK){if("working"===e.status||"failed"===e.status)continue;e.node.dataset.status=e.status;let t="pending"===e.status?o.suggested:"kept"===e.status?o.kept:o.undone;for(let r of(e.eyebrow.textContent!==t&&(e.eyebrow.textContent=t),e.actions&&(e.actions.hidden=e!==en),e.details))r.hidden="undone"===e.status}p&&((()=>{if("idle"!==e0||null===n.entryId)return;e0="loading";let e=()=>{e0="done",td()};n.view({uid:null}).then(t=>{e7(t),e()},e)})(),null===k.pages&&null===k.error&&k.fetch()),tr()},td=()=>tl(n.getState()),tp=()=>{es.style.height="auto",es.style.height=`${es.scrollHeight}px`},tc=()=>{ea.scrollTop=ea.scrollHeight},tu=e=>{eD=e;try{s?.localStorage.setItem(G,eD?"open":"minimised")}catch{}eD||(e_=!1),td(),eD?eV?ei.focus():"fields"===eF?e4():es.focus():eL.focus()},tg=e=>{if("fields"===e&&e5().length>0){eB=!0,td(),A.focus();return}if(eB=!1,eq===e)return td();eq=e,td()},th=e=>{e_=!1,(eV=e)&&n.select(null),td(),(eV?ei:es).focus()},tb=e=>{(e_=e)&&k.reset(),td(),(e_?k.search:b).focus()},tm=()=>{let{selectedUid:e}=n.getState();return e&&n.select(e9(e)),!n.getState().selectedUid},tf=()=>{let e=n.getState();if(!tn(e))return!1;if(e_)tb(!1);else{if(!e.selectedUid)return!1;tm()}return!0},tv=(e=!0)=>{let t=e5();t.length&&e3()&&(t.forEach(e=>{e.status="kept"}),td(),e&&es.focus())},tx=(e,t=!0)=>{e===e3()&&(n.undo(),e.status="undone",td(),t&&es.focus())},ty=async(e,t)=>{let r={uid:e.uid},a=await n.view(r).catch(()=>null);try{let{summary:i}=await n.prompt(t,r);e.step=n.getState().undoSteps??null;let o=a?await n.view(r).catch(()=>null):null;e.summary=i,e.diffs=a&&o?((e,t)=>{let r=new Map,n=new Map;er(e,"","",r),er(t,"","",n);let a=[];for(let e of new Set([...r.keys(),...n.keys()])){let t=r.get(e),i=n.get(e);t?.text!==i?.text&&a.push({label:(i??t).label,before:t?.text??"",after:i?.text??""})}return a})(a,o):[],e.status="pending"}catch(t){e.summary=q(t),e.status="failed"}to(e),td(),tc()},tw=async e=>{if(e!==e3())return;n.undo(),e.status="undone";let t=ts(e.prompt,e.uid);td(),tc(),es.focus(),await ty(t,U(o.retryPrompt,{prompt:e.prompt}))},tk=async()=>{let t=es.value.trim(),r=n.getState();if(!t||r.prompting)return;let a=ei.value.trim();if(eV&&!a)return ei.focus();let i=eV?null:r.selectedUid,s=eV?`${o.newPage} \xb7 ${a}`:i?e8(i):o.scopeEntry;en.appendChild(L(e,"p",{className:"bubble"},L(e,"span",{className:"visually-hidden",textContent:`${o.you} (${s}): `}),t)),es.value="",tp();let l=ts(t,i);if(td(),tc(),eV){try{await n.createPage(a,t),k.forget(),l.summary=o.created,l.status="kept"}catch(e){l.summary=q(e),l.status="failed"}to(l),td()}else await ty(l,t);es.focus()},tE=async e=>{eW=null;let t=await H(n,e);eW=t?{kind:"error",action:e,text:t}:{kind:"save"===e?"saved":"published"},td()};eL.addEventListener("click",()=>tu(!eD)),x.addEventListener("click",()=>tu(!1)),eU.addEventListener("click",()=>{eH=!eH,td()}),eO.addEventListener("click",()=>n.signOut()),b.addEventListener("click",()=>tb(!e_)),E.addEventListener("click",()=>th(!0)),_.addEventListener("click",()=>th(!1)),T.addEventListener("click",()=>{tm()&&es.focus()}),ef.addEventListener("click",()=>{tm()&&e4()}),J.addEventListener("click",async()=>{eX=null,eX=await V(n,o),td()}),y.addEventListener("click",()=>tg("ask"===eq?"fields":"ask")),A.addEventListener("click",()=>{tv(!1),tg("fields"),e4()}),S.addEventListener("click",()=>{for(let e=e3();e;e=e3())tx(e,!1);tg("fields"),e4()}),ek.addEventListener("click",()=>{let e=n.getState().undoSteps,t=void 0===e?void 0:eK.find(t=>"kept"===t.status&&t.step===e);if(n.undo(),t){var r;t.status="undone",td(),r=`${o.undone}: ${t.summary}`,eN.textContent="",eN.textContent=r}ek.hidden&&es.focus()}),eE.addEventListener("click",()=>void tE("save")),eC.addEventListener("click",()=>void tE("publish")),eu.addEventListener("submit",e=>{e.preventDefault(),tk()}),es.addEventListener("input",()=>{tp(),td()}),es.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||e.isComposing||(e.preventDefault(),tk())}),ei.addEventListener("input",td),ei.addEventListener("keydown",e=>{"Enter"!==e.key||e.isComposing||(e.preventDefault(),es.focus())});let tC=e=>{"Escape"===e.key&&!e.defaultPrevented&&tf()&&e.preventDefault()};e.addEventListener("keydown",tC);let tA=e=>{let r=e.target,n=r?.closest?.(`[${t}]`),a=n?.getAttribute(t)??null;a!==eZ&&(eZ=a,tr())},tN=()=>{eZ=null,tr()};e.addEventListener("pointerover",tA),l.addEventListener("pointerleave",tN),s?.addEventListener("scroll",tr,{capture:!0,passive:!0}),s?.addEventListener("resize",tr);let tS=s?.MutationObserver,tL="function"==typeof tS?new tS(tr):null;tL?.observe(e.body,{childList:!0,subtree:!0});let tP=s?.ResizeObserver,t$="function"==typeof tP?new tP(tr):null;t$?.observe(l);let tM=s?.matchMedia?.("(min-width: 768px)")??null;eJ=tM?.matches??!0;let tU=()=>{eJ=tM?.matches??!0,td()};tM?.addEventListener?.("change",tU);let tz=n.on("change",tl);return l.setAttribute("data-obelism-editor",""),e.head.appendChild(u),e.body.appendChild(p),td(),()=>{e1=!0,tz(),e2.unmount(),null!==tt&&s?.cancelAnimationFrame?.(tt),e.removeEventListener("keydown",tC),e.removeEventListener("pointerover",tA),l.removeEventListener("pointerleave",tN),s?.removeEventListener("scroll",tr,{capture:!0}),s?.removeEventListener("resize",tr),tM?.removeEventListener?.("change",tU),tL?.disconnect(),t$?.disconnect(),n.setSelecting(!1),l.removeAttribute("data-obelism-editor"),l.removeAttribute("data-obelism-docked"),l.style.removeProperty("--obelism-dock"),u.remove(),p.remove()}},ea=Symbol.for("@obelism/content/bridge"),ei=S({isEditing:!1,entryId:null,on:()=>{}},new URLSearchParams),eo=({url:e,prompt:o=!0,pagePath:l,productPath:d,collectionPath:p}={})=>{let u;if("u"<typeof window)return ei;let g=window;if(g[ea])return g[ea];if(g.ObelismBridge)u=S(g.ObelismBridge,new URLSearchParams(g.location.search));else{let f=(u=((e,r)=>{let n,a,o,s,l,d=new URLSearchParams(e.location.search),p=e.parent!==e&&d.has("cms_preview"),u=y(),g=[],f={...x,selecting:!0},w=e=>{f={...f,...e},u.emit("change",f)},k={isEditing:p,mode:p?"editor":null,entryId:d.get("cms_entry"),environment:d.get(i),product:null,collection:null,on:u.on,getState:()=>f,...E,destroy:()=>{g.splice(0).forEach(e=>e())}};if(!p)return k;let C=e.document,S=(t,n={})=>{e.parent.postMessage({source:m,type:t,...n},r)},L=C.createElement("style");L.textContent=v(),C.head.appendChild(L),g.push(()=>L.remove());let P=(e,t)=>{if(C.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),f.selectedUid!==(e??null)&&w({selectedUid:e??null}),!e)return;let r=C.querySelector(N(e));r&&(r.setAttribute("data-cms-selected",""),t&&r.scrollIntoView({behavior:"smooth",block:"center"}))},$=e=>{let r=e.target,n=r?.closest?.(`[${t}]`);if(!n)return;e.preventDefault(),e.stopPropagation();let a=n.getAttribute(t);P(a,!1),S("select",{uid:a})};C.addEventListener("click",$,!0),g.push(()=>C.removeEventListener("click",$,!0));let M=()=>Math.ceil(Math.max(C.documentElement.scrollHeight,C.body?.scrollHeight??0)),U=0,z=()=>{U=M(),S("ready",{url:e.location.href,height:U})},O=e.ResizeObserver;if("function"==typeof O){let e=new O(()=>{let e=M();e!==U&&(U=e,S("size",{height:e}))});e.observe(C.documentElement),C.body&&e.observe(C.body),g.push(()=>e.disconnect())}let I=new Map,j=0,T=e=>{let t=I.get(e);return t?(clearTimeout(t.timer),I.delete(e),0===I.size&&w({prompting:!1}),t):null};k.prompt=(e,t={})=>{let r=e.trim();if(!r)return Promise.reject(Error("Say what to change"));if(!f.features.includes("prompt"))return Promise.reject(Error("The editor does not offer prompts here"));let n=`prompt_${++j}`,a=void 0===t.uid?f.selectedUid:t.uid;return new Promise((e,t)=>{let i=setTimeout(()=>{T(n)?.reject(Error("The editor did not answer in time"))},12e4);I.set(n,{resolve:e,reject:t,timer:i}),w({prompting:!0}),S("prompt",{id:n,prompt:r,uid:a})})},k.undo=()=>S("undo"),k.select=e=>{P(e,!1),S("select",{uid:e})};let R=null;g.push(()=>R?.destroy()),g.push(()=>{for(let e of I.keys())T(e)?.reject(Error("The bridge was destroyed"))});let D=(n=new WeakSet,a=null,o=null,s=!1,l=()=>{if(null!==a){for(let e of Array.from(C.styleSheets)){let t;if(!n.has(e)){try{t=e.cssRules}catch{continue}n.add(e),b(t,a)}}C.querySelectorAll('[style*="vh"]').forEach(e=>{h(e.style,a)})}},{freeze(e){if(null!==a||!(e>0))return;a=e,l();let t=C.defaultView?.MutationObserver;t&&(o=new t(()=>{if(s)return;s=!0;let e=()=>{s=!1,l()};C.defaultView?.requestAnimationFrame?C.defaultView.requestAnimationFrame(e):e()})).observe(C.documentElement,{childList:!0,subtree:!0})},destroy(){o?.disconnect()}});g.push(()=>D.destroy());let q=t=>{if(t.origin!==r||t.source!==e.parent)return;let n=t.data;if(n&&"obelism-content-editor"===n.source){if("connect"===n.type)z();else if("update"===n.type&&n.entry)u.emit("update",{entry:n.entry,selectedUid:n.selectedUid??null}),e.requestAnimationFrame(()=>P(n.selectedUid,!1)),R?.refresh();else if("select"===n.type)P(n.uid,!0);else if("saved"===n.type||"published"===n.type)u.emit(n.type,{}),0===u.listeners.update.size&&e.location.reload();else if("features"===n.type&&Array.isArray(n.features))w({features:n.features.filter(e=>"string"==typeof e)});else if("stats"===n.type)w({stats:A(n.stats),statsVisible:!1!==n.visible}),(R||Object.keys(f.stats).length)&&(R??(R=c(e,{selector:N,onSelect:e=>k.select(e)})),R.update(f.stats,f.statsVisible));else if("viewport"===n.type&&"number"==typeof n.height)D.freeze(n.height);else if("promptState"===n.type)w({canUndo:!0===n.canUndo});else if("promptResult"===n.type&&"string"==typeof n.id){let e=T(n.id);if(!e)return;!0===n.ok?e.resolve({summary:"string"==typeof n.summary?n.summary:""}):e.reject(Error("string"==typeof n.error?n.error:"The prompt failed"))}}};return e.addEventListener("message",q),g.push(()=>e.removeEventListener("message",q)),"loading"===C.readyState?(C.addEventListener("DOMContentLoaded",z,{once:!0}),g.push(()=>C.removeEventListener("DOMContentLoaded",z))):z(),k})(g,new URL(e||X).origin)).isEditing||g.parent!==g?null:(e=>{for(let t of e.cookie.split(";")){let[e,...r]=t.trim().split("=");if("obelism_content_editing"===e)try{let e=decodeURIComponent(r.join("="));return K.test(e)?e:null}catch{break}}return null})(g.document);if(f&&(u=((e,i,{pagePath:o=e=>`/${e.replace(/^\/+/,"")}`,productPath:l,collectionPath:d}={})=>{let p=e.document,u=y(),g=[],h=new Map,b=[],f=new Set,w=null,k=null,E=-1/0,C=new Map,S=x,L=e=>{S={...S,...e},u.emit("change",S)},P=()=>L({unsaved:[...h.values()].some(({content:e,saved:t})=>!Z(e,t)),canUndo:b.length>0,undoSteps:b.length}),$=async(t,r)=>{let n=await e.fetch(`${i}/api/${t}`,void 0===r?{credentials:"same-origin"}:{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","x-obelism-content":"1"},body:JSON.stringify(r)}),a=await n.json().catch(()=>({}));if(401===n.status)throw L({features:[]}),Error("You were signed out. Sign in again to edit.");if(!n.ok)throw Error("string"==typeof a.error?a.error:`Obelism Content answered ${n.status}`);return a},M=()=>p.querySelector(`[${r}]`)?.getAttribute(r)??null,U=()=>{let e=p.querySelector(`[${n}]`),t=e?.getAttribute(n),r=e?.getAttribute("data-cms-product-handle");return t&&r?{id:t,handle:r}:null},z=()=>{let e=p.querySelector(`[${a}]`),t=e?.getAttribute(a),r=e?.getAttribute("data-cms-collection-handle");return t&&r?{id:t,handle:r}:null},O=e=>{let t=e?p.querySelector(N(e)):null;return t?.closest(`[${r}]`)?.getAttribute(r)??M()},I=()=>{if(!w)return;let e=w.space.locales.map(({code:e})=>e),t=p.documentElement.lang;if(e.includes(t))return t;let r=t.split("-")[0]??"";return e.includes(r)?r:w.space.defaultLocale},j=new Map,T=async e=>{let t=h.get(e);if(t)return t;let r=j.get(e);return r||(r=$(`entries/${encodeURIComponent(e)}`).then(t=>{let r=h.get(e)??{content:t.content,saved:t.content,revision:t.draftRevision};return h.set(e,r),r}).finally(()=>j.delete(e)),j.set(e,r)),r},R=e=>{let t=void 0===e?S.selectedUid:e,r=O(t);if(!r)throw Error("Nothing on this page is marked as an entry: add editable(entry)");return{uid:t,entryId:r}},D=new Set,q=null,F=new Set,B=new Set,V=e=>{p.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),S.selectedUid!==e&&L({selectedUid:e}),e&&(p.querySelector(N(e))?.setAttribute("data-cms-selected",""),D.has(e)||(D.add(e),q?.refresh()))},H=async t=>{if(0===u.listeners.update.size)return;let r=h.get(t)?.content,{entry:n}=await $(`entries/${encodeURIComponent(t)}/preview`,{content:r,locale:I()});u.emit("update",{entry:n,selectedUid:S.selectedUid}),e.requestAnimationFrame(()=>V(S.selectedUid))},_=e=>console.error("[@obelism/content bridge]",e),W=t=>{u.emit(t,{}),0===u.listeners.update.size&&e.location.reload()},Y=async()=>{for(let[e,t]of h){if(Z(t.content,t.saved))continue;let{draftRevision:r}=await $(`entries/${encodeURIComponent(e)}/save`,{content:t.content,baseRevision:t.revision});t.saved=t.content,t.revision=r,f.add(e)}b.length=0,E=-1/0,P()},X={isEditing:!0,mode:"site",get entryId(){return M()},get product(){return U()},get collection(){return z()},get environment(){return w?.environment??null},on:u.on,getState:()=>S,async prompt(e,t={}){let r=e.trim();if(!r)throw Error("Say what to change");if(!S.features.includes("prompt"))throw Error("You may not edit content here");let{uid:n,entryId:a}=R(t.uid);L({prompting:!0});try{let e=await T(a),t=await $(`entries/${encodeURIComponent(a)}/prompt`,{prompt:r,content:e.content,locale:I(),uid:n});return b.push({entryId:a,content:e.content}),E=-1/0,e.content=t.content,P(),await H(a),{summary:t.summary}}finally{L({prompting:!1})}},async createPage(t,r){let n=r.trim();if(!n)throw Error("Say what the page is for");if(!t.trim())throw Error("Say where the page goes, like /pricing");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("entries",{path:t,prompt:n,locale:I(),from:M()}),a=o(r.path,I()??"");return e.location.assign(J(a)),{summary:r.summary,entryId:r.entryId,path:r.path,url:a}}finally{L({prompting:!1})}},async createProductPage(t=U()??void 0){if(!t)throw Error("Nothing on this page is marked as a product: add editableProduct(product)");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("product-pages",{product:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{L({prompting:!1})}},async createCollectionPage(t=z()??void 0){if(!t)throw Error("Nothing on this page is marked as a collection: add editableCollection(collection)");if(!S.features.includes("create"))throw Error("You may not add pages here");if(S.unsaved)throw Error("Save or undo your changes before adding a page");L({prompting:!0});try{let r=await $("collection-pages",{collection:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{L({prompting:!1})}},async view(e={}){let{uid:t,entryId:r}=R(e.uid),n=await T(r),{view:a}=await $(`entries/${encodeURIComponent(r)}/view`,{content:n.content,locale:I(),uid:t});return a},async applyJson(e,t={}){if(!S.features.includes("prompt"))throw Error("You may not edit content here");if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Send the fields to change as an object");let{uid:r,entryId:n}=R(t.uid);L({prompting:!0});try{let t=await T(n),a=await $(`entries/${encodeURIComponent(n)}/apply`,{changes:e,content:t.content,locale:I(),uid:r});return Z(a.content,t.content)||(b.push({entryId:n,content:t.content}),E=-1/0,t.content=a.content,P(),await H(n)),{changed:a.changed??[],...a.view&&{view:a.view}}}finally{L({prompting:!1})}},openForm(t,r={}){let{title:n="Content form",onReady:a,onError:i,onEscape:o}=r;k?.();let s=!1,l=null,d=null,p=()=>{},c=e=>{s||i?.(e instanceof Error?e.message:String(e))},g=()=>{s||(s=!0,p(),l?.destroy(),k===g&&(k=null))};k=g;let f=()=>{if(s||!l)return;let e=O(S.selectedUid);if(!e)return;let t=h.get(e);if(!t)return void T(e).then(f,c);let r={entryId:e,content:t.content,locale:I(),selectedUid:S.selectedUid};d&&d.entryId===r.entryId&&d.content===r.content&&d.locale===r.locale&&d.selectedUid===r.selectedUid||(d=r,l.show(r))},v=(e,t)=>{let r=t??d?.entryId,n=void 0===r?void 0:h.get(r);if(s||void 0===r||!n||Z(e,n.content))return;let a=Date.now();a-E>=1e3&&b.push({entryId:r,content:n.content}),E=a,n.content=e,d?.entryId===r&&(d={...d,content:e}),P(),clearTimeout(C.get(r)),C.set(r,setTimeout(()=>{C.delete(r),H(r).catch(_)},300))};return(async()=>{if(!S.features.includes("form"))throw Error("You may not edit content here");await T(R(void 0).entryId);let{url:r}=await $("form",{});s||(l=((e,t,r,n,a)=>{let i=null;try{i=new URL(r)}catch{}if(!i||!/^https?:$/.test(i.protocol))throw Error("Obelism Content sent no form to open");let o=i.origin,s=t.ownerDocument.createElement("iframe");s.title=n,s.src=r;let l=!1,d=!1,p=null,c=()=>{l&&p&&s.contentWindow?.postMessage({source:m,type:"content",...p},o)},u=setTimeout(()=>{d||a.onError("The form did not open")},3e4),g=()=>{d=!0,clearTimeout(u),a.onReady()},h=e=>{if(e.origin!==o||!s.contentWindow||e.source!==s.contentWindow)return;let t=e.data;if(t&&"obelism-content-form"===t.source)if("ready"===t.type)l=!0,c(),!0!==t.loading&&g();else if("loaded"===t.type)l&&g();else{let e;if("change"!==t.type||!(e=t.content)||"object"!=typeof e||Array.isArray(e))if("height"===t.type){let e=t.height;if("number"==typeof e&&Number.isFinite(e)){let t=Math.round(Math.min(Math.max(e,80),4e3));s.style.height=`min(${t}px, 60vh)`}}else"escape"===t.type?a.onEscape?.():"error"===t.type&&a.onError("string"==typeof t.message&&t.message?t.message:"The form failed");else a.onChange(t.content,"string"==typeof t.entryId?t.entryId:void 0)}};return e.addEventListener("message",h),t.appendChild(s),{show(e){p=e,c()},destroy(){clearTimeout(u),e.removeEventListener("message",h),s.remove()}}})(e,t,"string"==typeof r?r:"",n,{onReady:()=>a?.(),onChange:v,onError:e=>i?.(e),onEscape:()=>o?.()}),p=u.on("change",f),f())})().catch(c),{close:g}},async pages(){let{pages:e}=await $("pages"),t=[I(),w?.space.defaultLocale];return e.flatMap(e=>{let r,n,a=t.find(t=>void 0!==t&&void 0!==e.paths[t])??Object.keys(e.paths)[0],i=void 0===a?void 0:e.paths[a];return void 0===a||void 0===i?[]:[{entryId:e.entryId,name:e.name,contentType:e.contentType,status:e.status,path:i,url:e.product?(r=e.product.handle,l?l(r,a):(w?.productPath??"/products/{handle}").replaceAll("{handle}",encodeURIComponent(r))):e.collection?(n=e.collection.handle,d?d(n,a):(w?.collectionPath??"/collections/{handle}").replaceAll("{handle}",encodeURIComponent(n))):o(i,a),product:e.product??null,collection:e.collection??null}]})},openPage(t){(!S.unsaved||e.confirm("Leave this page and lose the changes you have not saved?"))&&(h.clear(),b.length=0,P(),e.location.assign(J(t.url)))},undo(){let e=b.pop(),t=e&&h.get(e.entryId);e&&t&&(E=-1/0,t.content=e.content,P(),H(e.entryId).catch(_))},async save(){if(!S.features.includes("save"))throw Error("You may not edit content here");L({saving:!0});try{await Y()}finally{L({saving:!1})}W("saved")},async publish(){if(!S.features.includes("publish"))throw Error("You may not publish here");L({publishing:!0});try{await Y();let e=M(),t=f.size>0?[...f]:e?[e]:[];if(0===t.length)throw Error("Nothing on this page is marked as an entry: add editable(entry)");for(let e of t)await $(`entries/${encodeURIComponent(e)}/publish`,{}),f.delete(e)}finally{L({publishing:!1})}W("published")},signOut(){if(S.unsaved&&!e.confirm("Sign out and lose the changes you have not saved?"))return;h.clear(),P();let t=e.location.pathname+e.location.search;e.location.href=`${i}/logout?return_to=${encodeURIComponent(t)}`},select(e){V(e)},setSelecting(e){e?p.documentElement.setAttribute("data-cms-selecting",""):p.documentElement.removeAttribute("data-cms-selecting"),L({selecting:e,statsVisible:e}),er()},destroy(){k?.(),C.forEach(e=>clearTimeout(e)),C.clear(),g.splice(0).forEach(e=>e())}},K=p.createElement("style");K.textContent=v("html[data-cms-selecting] "),p.head.appendChild(K),g.push(()=>K.remove()),g.push(()=>p.documentElement.removeAttribute("data-cms-selecting"));let G=e=>{if(!S.selecting)return;let r=e.target,n=r?.closest?.(`[${t}]`),a=n?null:r?.closest?.(`[${s}]`),i=a?.getAttribute(s);if(i&&B.has(i)){e.preventDefault(),e.stopPropagation(),D.has(i)||(D.add(i),q?.refresh());return}n&&(e.preventDefault(),e.stopPropagation(),V(n.getAttribute(t)))};p.addEventListener("click",G,!0),g.push(()=>p.removeEventListener("click",G,!0));let Q=e=>{S.unsaved&&(e.preventDefault(),e.returnValue="")};e.addEventListener("beforeunload",Q),g.push(()=>e.removeEventListener("beforeunload",Q));let ee=!1,et=null,er=()=>q?.update(S.stats,S.statsVisible),en=async()=>{if(ee)return;let n=[...new Set([...p.querySelectorAll(`[${s}]`)].map(e=>e.getAttribute(s)??""))].filter(e=>e&&!F.has(e)),a=n.slice(0,500);if(!a.length)return;a.forEach(e=>F.add(e));let i=[...new Set([...p.querySelectorAll(`[${r}]`)].map(e=>e.getAttribute(r)??""))].filter(Boolean).slice(0,20);try{let{stats:e}=await $("stats",{uids:a,...i.length>0&&{entries:i}});a.forEach(e=>B.add(e)),L({stats:{...S.stats,...A(e)}})}catch{ee=!0;return}q??(q=c(e,{selector:N,onSelect:e=>V(e),checked:e=>B.has(e),shows:(e,r)=>D.has(r.closest(`[${t}]`)?.getAttribute(t)??e)})),er(),n.length>a.length&&ea()},ea=()=>{null!==et||ee||(et=setTimeout(()=>{et=null,en()},1e3))},ei=e.MutationObserver,eo="function"==typeof ei?new ei(ea):null;return g.push(()=>{eo?.disconnect(),null!==et&&clearTimeout(et),q?.destroy()}),$("session").then(e=>{w=e,L({features:e.features}),en(),eo?.observe(p.body,{childList:!0,subtree:!0})}).catch(e=>console.error("[@obelism/content bridge]",e)),X})(g,f,{pagePath:l,productPath:d,collectionPath:p})),u.isEditing&&o){let e=g.document,t=()=>{},r=!1,n=f?en:Y,a=()=>{r||(t=n(e,u,!0===o?{}:o))};e.body?a():e.addEventListener("DOMContentLoaded",a,{once:!0});let i=u.destroy;u.destroy=()=>{r=!0,e.removeEventListener("DOMContentLoaded",a),t(),i()}}}return g[ea]=u,u};(e=window).ObelismBridge=eo((e=>{let t=e?.dataset.url,r=t||X;if(!t&&e?.src){let t=new URL(e.src);"/bridge.js"===t.pathname&&(r=t.origin)}return{url:r,prompt:e?.dataset.prompt!=="false"}})(document.currentScript)),e.ObelismContent={getContentBridge:eo,mountPromptBox:Y,mountSiteEditor:en}}();
package/dist/bridge.js CHANGED
@@ -79,7 +79,7 @@ const placeTag = (rect, viewport)=>({
79
79
  top: Math.min(Math.max(rect.top, 10), viewport.height - 10),
80
80
  left: Math.min(rect.right, viewport.width - 10)
81
81
  });
82
- const mountStatsOverlay = (win, { selector, onSelect, checked, labels: labelOverrides })=>{
82
+ const mountStatsOverlay = (win, { selector, onSelect, checked, shows, labels: labelOverrides })=>{
83
83
  const doc = win.document;
84
84
  const labels = {
85
85
  ...DEFAULT_STATS_LABELS,
@@ -157,13 +157,14 @@ const mountStatsOverlay = (win, { selector, onSelect, checked, labels: labelOver
157
157
  const id = element.getAttribute(TAG_ATTRIBUTE);
158
158
  if (!id || !stats[id] && !isChecked(id)) continue;
159
159
  tagged.add(id);
160
+ if (shows && !shows(id, element)) continue;
160
161
  draw(id, element, blocks);
161
162
  }
162
163
  // Rates of blocks the site doesn't tag an element of.
163
164
  for (const id of Object.keys(stats)){
164
165
  if (tagged.has(id) || !blocks.has(id)) continue;
165
166
  const element = doc.querySelector(selector(id));
166
- if (element) draw(id, element, blocks);
167
+ if (element && (!shows || shows(id, element))) draw(id, element, blocks);
167
168
  }
168
169
  };
169
170
  // At most once a frame, however many scroll and mutation events come in.
@@ -2155,6 +2156,13 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2155
2156
  entryId
2156
2157
  };
2157
2158
  };
2159
+ // The blocks selected on this page, and the tags clicked outside the
2160
+ // blocks: only their rates show (statsOverlay.ts), so a few can be
2161
+ // compared without every tag at once.
2162
+ const revealed = new Set();
2163
+ let overlay = null;
2164
+ const asked = new Set();
2165
+ const answered = new Set();
2158
2166
  const highlight = (uid)=>{
2159
2167
  doc.querySelectorAll('[data-cms-selected]').forEach((element)=>{
2160
2168
  element.removeAttribute('data-cms-selected');
@@ -2162,7 +2170,13 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2162
2170
  if (state.selectedUid !== uid) setState({
2163
2171
  selectedUid: uid
2164
2172
  });
2165
- if (uid) doc.querySelector(blockSelector(uid))?.setAttribute('data-cms-selected', '');
2173
+ if (uid) {
2174
+ doc.querySelector(blockSelector(uid))?.setAttribute('data-cms-selected', '');
2175
+ if (!revealed.has(uid)) {
2176
+ revealed.add(uid);
2177
+ overlay?.refresh();
2178
+ }
2179
+ }
2166
2180
  };
2167
2181
  // Shows the in-memory content through `update`, shaped like the delivery
2168
2182
  // API. A page without `update` listeners shows it once saved (it reloads).
@@ -2607,6 +2621,19 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2607
2621
  if (!state.selecting) return;
2608
2622
  const target = event.target;
2609
2623
  const element = target?.closest?.(`[${preview.UID_ATTRIBUTE}]`);
2624
+ // A tagged element outside the blocks (a menu button) can't be
2625
+ // selected: a click shows its rate, when the CMS answered for it.
2626
+ const tag = element ? null : target?.closest?.(`[${TAG_ATTRIBUTE}]`);
2627
+ const tagId = tag?.getAttribute(TAG_ATTRIBUTE);
2628
+ if (tagId && answered.has(tagId)) {
2629
+ event.preventDefault();
2630
+ event.stopPropagation();
2631
+ if (!revealed.has(tagId)) {
2632
+ revealed.add(tagId);
2633
+ overlay?.refresh();
2634
+ }
2635
+ return;
2636
+ }
2610
2637
  if (!element) return;
2611
2638
  event.preventDefault();
2612
2639
  event.stopPropagation();
@@ -2621,12 +2648,10 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2621
2648
  };
2622
2649
  win.addEventListener('beforeunload', onBeforeUnload);
2623
2650
  cleanup.push(()=>win.removeEventListener('beforeunload', onBeforeUnload));
2624
- // The tags on the page's links (statsOverlay.ts) while blocks are
2625
- // outlined: the rates of the ids the page tags, asked for as they appear.
2626
- const asked = new Set();
2627
- const answered = new Set();
2651
+ // The tags on the page's links (statsOverlay.ts) of what was selected,
2652
+ // while blocks are outlined: the rates of the ids the page tags, asked for
2653
+ // as they appear.
2628
2654
  let statsOff = false;
2629
- let overlay = null;
2630
2655
  let statsTimer = null;
2631
2656
  const showStats = ()=>overlay?.update(state.stats, state.statsVisible);
2632
2657
  const loadStats = async ()=>{
@@ -2667,7 +2692,8 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2667
2692
  overlay ??= mountStatsOverlay(win, {
2668
2693
  selector: blockSelector,
2669
2694
  onSelect: (uid)=>highlight(uid),
2670
- checked: (id)=>answered.has(id)
2695
+ checked: (id)=>answered.has(id),
2696
+ shows: (id, element)=>revealed.has(element.closest(`[${preview.UID_ATTRIBUTE}]`)?.getAttribute(preview.UID_ATTRIBUTE) ?? id)
2671
2697
  });
2672
2698
  showStats();
2673
2699
  if (ids.length > batch.length) scheduleStats();
package/dist/bridge.mjs CHANGED
@@ -77,7 +77,7 @@ const placeTag = (rect, viewport)=>({
77
77
  top: Math.min(Math.max(rect.top, 10), viewport.height - 10),
78
78
  left: Math.min(rect.right, viewport.width - 10)
79
79
  });
80
- const mountStatsOverlay = (win, { selector, onSelect, checked, labels: labelOverrides })=>{
80
+ const mountStatsOverlay = (win, { selector, onSelect, checked, shows, labels: labelOverrides })=>{
81
81
  const doc = win.document;
82
82
  const labels = {
83
83
  ...DEFAULT_STATS_LABELS,
@@ -155,13 +155,14 @@ const mountStatsOverlay = (win, { selector, onSelect, checked, labels: labelOver
155
155
  const id = element.getAttribute(TAG_ATTRIBUTE);
156
156
  if (!id || !stats[id] && !isChecked(id)) continue;
157
157
  tagged.add(id);
158
+ if (shows && !shows(id, element)) continue;
158
159
  draw(id, element, blocks);
159
160
  }
160
161
  // Rates of blocks the site doesn't tag an element of.
161
162
  for (const id of Object.keys(stats)){
162
163
  if (tagged.has(id) || !blocks.has(id)) continue;
163
164
  const element = doc.querySelector(selector(id));
164
- if (element) draw(id, element, blocks);
165
+ if (element && (!shows || shows(id, element))) draw(id, element, blocks);
165
166
  }
166
167
  };
167
168
  // At most once a frame, however many scroll and mutation events come in.
@@ -2153,6 +2154,13 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2153
2154
  entryId
2154
2155
  };
2155
2156
  };
2157
+ // The blocks selected on this page, and the tags clicked outside the
2158
+ // blocks: only their rates show (statsOverlay.ts), so a few can be
2159
+ // compared without every tag at once.
2160
+ const revealed = new Set();
2161
+ let overlay = null;
2162
+ const asked = new Set();
2163
+ const answered = new Set();
2156
2164
  const highlight = (uid)=>{
2157
2165
  doc.querySelectorAll('[data-cms-selected]').forEach((element)=>{
2158
2166
  element.removeAttribute('data-cms-selected');
@@ -2160,7 +2168,13 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2160
2168
  if (state.selectedUid !== uid) setState({
2161
2169
  selectedUid: uid
2162
2170
  });
2163
- if (uid) doc.querySelector(blockSelector(uid))?.setAttribute('data-cms-selected', '');
2171
+ if (uid) {
2172
+ doc.querySelector(blockSelector(uid))?.setAttribute('data-cms-selected', '');
2173
+ if (!revealed.has(uid)) {
2174
+ revealed.add(uid);
2175
+ overlay?.refresh();
2176
+ }
2177
+ }
2164
2178
  };
2165
2179
  // Shows the in-memory content through `update`, shaped like the delivery
2166
2180
  // API. A page without `update` listeners shows it once saved (it reloads).
@@ -2605,6 +2619,19 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2605
2619
  if (!state.selecting) return;
2606
2620
  const target = event.target;
2607
2621
  const element = target?.closest?.(`[${UID_ATTRIBUTE}]`);
2622
+ // A tagged element outside the blocks (a menu button) can't be
2623
+ // selected: a click shows its rate, when the CMS answered for it.
2624
+ const tag = element ? null : target?.closest?.(`[${TAG_ATTRIBUTE}]`);
2625
+ const tagId = tag?.getAttribute(TAG_ATTRIBUTE);
2626
+ if (tagId && answered.has(tagId)) {
2627
+ event.preventDefault();
2628
+ event.stopPropagation();
2629
+ if (!revealed.has(tagId)) {
2630
+ revealed.add(tagId);
2631
+ overlay?.refresh();
2632
+ }
2633
+ return;
2634
+ }
2608
2635
  if (!element) return;
2609
2636
  event.preventDefault();
2610
2637
  event.stopPropagation();
@@ -2619,12 +2646,10 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2619
2646
  };
2620
2647
  win.addEventListener('beforeunload', onBeforeUnload);
2621
2648
  cleanup.push(()=>win.removeEventListener('beforeunload', onBeforeUnload));
2622
- // The tags on the page's links (statsOverlay.ts) while blocks are
2623
- // outlined: the rates of the ids the page tags, asked for as they appear.
2624
- const asked = new Set();
2625
- const answered = new Set();
2649
+ // The tags on the page's links (statsOverlay.ts) of what was selected,
2650
+ // while blocks are outlined: the rates of the ids the page tags, asked for
2651
+ // as they appear.
2626
2652
  let statsOff = false;
2627
- let overlay = null;
2628
2653
  let statsTimer = null;
2629
2654
  const showStats = ()=>overlay?.update(state.stats, state.statsVisible);
2630
2655
  const loadStats = async ()=>{
@@ -2665,7 +2690,8 @@ const createSiteBridge = (win, basePath, { pagePath = (path)=>`/${path.replace(/
2665
2690
  overlay ??= mountStatsOverlay(win, {
2666
2691
  selector: blockSelector,
2667
2692
  onSelect: (uid)=>highlight(uid),
2668
- checked: (id)=>answered.has(id)
2693
+ checked: (id)=>answered.has(id),
2694
+ shows: (id, element)=>revealed.has(element.closest(`[${UID_ATTRIBUTE}]`)?.getAttribute(UID_ATTRIBUTE) ?? id)
2669
2695
  });
2670
2696
  showStats();
2671
2697
  if (ids.length > batch.length) scheduleStats();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@obelism/content",
3
3
  "description": "Obelism Content SDK: the delivery API client, the visual editor bridge with prompt editing, editing on your own site, webhook verification, and the content model CLI",
4
- "version": "0.28.2",
4
+ "version": "0.28.3",
5
5
  "keywords": [
6
6
  "cms",
7
7
  "headless-cms",