@vcp-dev/site-edit-bridge 0.10.3 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-bootstrap.js +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/auto-bootstrap.js
CHANGED
|
@@ -38,4 +38,4 @@ function ee(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}fu
|
|
|
38
38
|
[${f}="e"] { left: anchor(right); top: anchor(center); }
|
|
39
39
|
[${f}="se"] { left: anchor(right); top: anchor(bottom); }
|
|
40
40
|
[${f}="s"] { left: anchor(center); top: anchor(bottom); }
|
|
41
|
-
`,a.appendChild(_);let x=_o.map(T=>{let k=c.createElement("div");return k.setAttribute(f,T),k.setAttribute("aria-hidden","true"),u.appendChild(k),k}),N=null,P=null,B=()=>{N?.removeAttribute(y),P?.(),P=null,N=null},j=T=>{B(),N=T,P=ct(T,o),T.setAttribute(y,"true"),x.forEach(k=>k.style.removeProperty("display"))};j(l);let W=!1,I=null,X=()=>{if(!I||!l)return;let T=(k,w,m)=>{w?l.style.setProperty(k,w,m):l.style.removeProperty(k)};T("width",I.widthValue,I.widthPriority),T("height",I.heightValue,I.heightPriority)},ie=(T,k,w)=>I?{version:1,phase:T,sessionId:I.sessionId,pointerId:I.pointerId,edge:I.edge,ref:t,startWidth:I.startWidth,startHeight:I.startHeight,width:k,height:w,baselineStyleDeclarations:[{property:"width",value:I.widthValue||null,...I.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:I.heightValue||null,...I.heightPriority==="important"?{priority:"important"}:{}}]}:null,te=()=>{if(!I)return null;let T=ie("cancel",I.startWidth,I.startHeight),k=I.captureTarget,w=I.pointerId,m=I.currentX,S=I.currentY;return X(),I=null,k?.releasePointerCapture?.(w),T&&r?.({clientX:m,clientY:S,session:T}),T},Q=T=>{if(!I||!l?.isConnected||T.pointerId!==I.pointerId)return!1;I.currentX=Number(T.clientX),I.currentY=Number(T.clientY);let k=I.currentX-I.startX,w=I.currentY-I.startY,m=Math.max(1,Math.round(I.startWidth+k)),S=Math.max(1,Math.round(I.startHeight+w));return(I.edge==="e"||I.edge==="se")&&l.style.setProperty("width",`${m}px`,"important"),(I.edge==="s"||I.edge==="se")&&l.style.setProperty("height",`${S}px`,"important"),!0},L=()=>{if(W)return;let T=p();T===l&&T?.isConnected||(te(),B(),l=T,l?.isConnected?j(l):x.forEach(k=>k.style.setProperty("display","none","important")))},ne=e.MutationObserver,se=typeof ne=="function"?new ne(L):null;return se?.observe(c.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(T,k){if(W||I||!l?.isConnected)return null;let w=l.getBoundingClientRect();return I={sessionId:`resize-${i}-${T.pointerId}`,pointerId:T.pointerId,edge:k,startX:Number(T.clientX),startY:Number(T.clientY),currentX:Number(T.clientX),currentY:Number(T.clientY),startWidth:w.width,startHeight:w.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:T.target},ie("start",w.width,w.height)},update:Q,finish(T,k){if(!I||T.pointerId!==I.pointerId)return null;k==="commit"&&Q(T);let w=Math.max(1,Math.round(I.startWidth+Number(T.clientX)-I.startX)),m=Math.max(1,Math.round(I.startHeight+Number(T.clientY)-I.startY)),S=ie(k,k==="commit"?w:I.startWidth,k==="commit"?m:I.startHeight),O=I.captureTarget,R=I.pointerId;return k==="cancel"&&X(),I=null,O?.releasePointerCapture?.(R),S},cleanup(){W||(W=!0,se?.disconnect(),te(),B(),l=null,x.forEach(T=>T.remove()),_.remove())}}}function _n(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function Oo(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function Do({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:i,setCurrentDocument:o,onBridgeRequestError:s,nextRouteReadySequence:c,windowLike:a}){let u=a.__VCP_SITE_EDIT__;if(!u){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}let p=()=>{if(a.__VCP_SITE_EDIT__!==u)throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed while reading the document")};try{switch(e.kind){case"bridge-initialize-session":{let l=a.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(l?.compositionKey&&Fe(e.payload.composition)!==l.compositionKey&&(!l.composition||Fe(e.payload.composition)!==ee(l.composition)))throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed");let y,f=!1;if(l?.composition)try{let _=await u.getDocument(e.payload.composition),x=await u.getHistoryStatus(e.payload.composition);y={..._,composition:_.data.composition,data:{document:_.data,historyStatus:x.data}},f=!0}catch(_){if(!xe(_,"").includes("SITE_EDIT_COMPOSITION_SESSION_REQUIRED"))throw _}y??=await u.initializeSession({composition:e.payload.composition}),p(),o?.(y.data.document),f||Kn(a,{composition:y.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:y.data.document.version}),n({type:"response",ok:!0,result:y});return}case"bridge-get-document":{let l=await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await u.getHistoryStatus(e.payload.composition)});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await u.getStyleContext(e.payload.composition)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=u.ensureDocumentVersion?await u.ensureDocumentVersion(e.payload.composition,Number(e.payload.minVersion)):await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=u.acknowledgeDocumentVersion?await u.acknowledgeDocumentVersion(e.payload.composition,Number(e.payload.version)):await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await u.getObjectEditContext(e.payload.key,e.payload.composition,e.payload.selectionRef)});return;case"bridge-get-class-name-source":{let l=await u.getClassNameSource(e.payload.key,e.payload.composition);n({type:"response",ok:!0,result:ko(l,e.payload.key,a.document,i?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await u.getSourceTree(e.payload.composition)});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await u.getSourceFile({path:e.payload.path,composition:e.payload.composition})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await u.resolveSourceLocation({key:e.payload.key,composition:e.payload.composition})});return;case"bridge-execute":{let l=await u.execute(e.payload.request);if(l.ok&&u.acknowledgeDocumentVersion&&Oo(e.payload.request)){let y=await u.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);p(),o?.(y.data)}n({type:"response",ok:!0,result:l});return}case"bridge-undo":n({type:"response",ok:!0,result:await u.undo(e.payload.composition)});return;case"bridge-redo":n({type:"response",ok:!0,result:await u.redo(e.payload.composition)});return;case"bridge-subscribe":{let l=e.payload.subscriptionId;r.get(l)?.();let y=u.subscribe(f=>{t({kind:"bridge-event",payload:{composition:f.composition,event:f,subscriptionId:l}})});r.set(l,y),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let l=e.payload.subscriptionId;r.get(l)?.(),r.delete(l),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(l){a.__VCP_SITE_EDIT__===u&&s?.(l,e),n({type:"response",ok:!1,error:Ko(l)})}}function ko(e,t,n,r){if(!e.ok)return e;let i=be(n,{key:t},r),o=i?Mo(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function Mo(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function Bo(e,t,n=()=>e.location.pathname){let r=e.history.pushState,i=e.history.replaceState,o=n(),s=()=>{let u=n();u!==o&&(o=u,t())},c=()=>s(),a=()=>s();return e.history.pushState=function(...p){let l=r.apply(this,p);return s(),l},e.history.replaceState=function(...p){let l=i.apply(this,p);return s(),l},e.addEventListener("popstate",c),e.addEventListener("hashchange",a),()=>{e.history.pushState=r,e.history.replaceState=i,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",a)}}function Fo(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function at(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function ut(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Kn(e,t){e.dispatchEvent(new CustomEvent(Mt,{detail:t}))}function wo(e,t){e.dispatchEvent(new CustomEvent(Bt,{detail:t}))}function qo(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function Vo(e,t){return ee(e.composition)===t}function zo(e){return xe(e,"").includes(wn)}function xe(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function Wn(e){let t=xe(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Ko(e){let t=xe(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":Wn(t)?"Site edit bridge disconnected":t}function $n(e){if(!e||typeof e!="object"||!("code"in e))return null;let t=e.code;return typeof t=="string"&&t.length>0?t:null}function Wo(e){let t=$n(e);if(t)return t===Rt||t===Ct;let n=xe(e,"");return n.includes(Rt)||n.includes(Ct)}function Me(e){if(xe(e,"").includes("SITE_EDIT_RUNTIME_RELOAD_REQUIRED"))return!0;if($n(e))return!1;let t=xe(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function Un(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function qt(e){return ro.has(Hn(e))}function $o(e){return oo.has(Hn(e))}function Gn(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:$o(e.tagName),canInsertChild:qt(e.tagName),canMove:!1,canRemove:!1}}function Hn(e){return e?.trim().toLowerCase()??""}function An(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function Uo(e,t,n){let r=be(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=Go(r,t.ref.textSegmentIndex);return i?(i.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function Go(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!lt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function Ho(e,t,n,r,i){let o=je(e,t,n,r),s=Vt(o);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",a=ye(e,s,r),u=i?.(a.key)??i?.(c);if(!Gn({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let l=jo(e,t,n,s);if(l){let y=Xo(s,l);if(y!==null)return{element:s,textNode:l,textSegmentIndex:y}}return ht(s)?null:{element:s}}function jo(e,t,n,r){let i=Yo(e,t,n);return!i||i.parentElement!==r?null:i}function Yo(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(lt(o))return o;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return lt(c)?c:null}function Xo(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!lt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function lt(e){return e?.nodeType===3}function Jo(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function Qo(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let i=r.getAttribute("data-site-block-id")??"",o=r.getAttribute("data-vcp-edit-key")??"";return!i||!o?null:{blockId:i,blockIndex:Lo(e,r),ref:dt(e,r,n),rect:Pe(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function Lo(e,t){let n=t.getAttribute("data-site-block-order"),r=n===null?Number.NaN:Number(n);return Number.isInteger(r)&&r>=0?r:Math.max(0,jn(e,null).findIndex(i=>i.element===t))}function jn(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:dt(e,n,t),rect:Pe(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function Zo(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let i=jn(e,n),o=i[0],s=i.at(-1);if(!o||!s)return null;let c=new Set(n.pageComposition.placements.map(f=>`${f.placementUnitKey}\0${f.relation}`)),a=f=>r?.(f)??n.entries.find(_=>_.key===f)??null,u=(f,_,x)=>{let N=a(f.ref.key)?.pageCompositionUnitKey;return!N||!c.has(`${N}\0${_}`)?null:{anchorBlockId:f.blockId,positionIndex:x,anchorRef:f.ref,placement:_,boundary:{top:_==="before"?f.rect.top:f.rect.top+f.rect.height,left:f.rect.left,width:f.rect.width}}},p=[],l=u(o,"before",0);l&&p.push(l),i.slice(1).forEach((f,_)=>{let x=_+1,N=u(f,"before",x);if(N){p.push(N);return}let P=i[_],B=P?u(P,"after",x):null;B&&p.push(B)});let y=u(s,"after",i.length);return y&&p.push(y),p.find(({boundary:f})=>t.clientX>=f.left&&t.clientX<=f.left+f.width&&Math.abs(t.clientY-f.top)<=fn)??null}function je(e,t,n,r=null){let i=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let o of i){let s=Vt(o),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Jn(s,r,c))return s}return null}function Vt(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(zt(t))return n??t;!ei(r)&&!n&&(n=t)}t=t.parentElement}return n}function zt(e){return e.getAttribute(no)!==null}function ei(e){return ti(e.split("::")[0]??"")}function ti(e){if(!e)return!1;let t=ni(e);return t===nt||t.startsWith(`${nt}/`)||t.includes(`/${nt}/`)||t.endsWith(`/${nt}`)}function ni(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(i)}return r.join("/")}function ye(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",i=Xn(Ln(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${or(r)}"]`))),n,r);if(i.length<=1)return{key:Nn(n,r,0)};let o=i.indexOf(t);return o>=0?{key:Nn(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function dt(e,t,n){return ye(e,t,n)}function be(e,t,n){let r=pt(t.key)??t.key,i=Xn(Ln(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${or(r)}"]`))),n,t.key);if(i.length===0)return null;let o=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<i.length?t.instanceIndex:null,s=(pt(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let c=ri(n,t.key);return c!==null&&c>=0&&c<i.length?i[c]??null:o!==null?i[o]??null:i[0]??null}function Nn(e,t,n){return Yn(e,t)[n]?.key??t}function ri(e,t){let n=pt(t);if(!n)return null;let i=Yn(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function Yn(e,t){return(e?.entries??[]).filter(n=>(pt(n.key)??n.key)===t)}function Xn(e,t,n){let r=Qn(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Jn(e,t,n){let r=Qn(t,n);return!r||e.tagName.toLowerCase()===r}function Qn(e,t){return null}var oi=2,ii=4;function Ln(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&ii)!==0?-1:(r&oi)!==0?1:0})}function pt(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(Cn);if(n<0)break;let r=Number(t.slice(n+Cn.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function ft(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...Kt(n),paddingTop:ae(n?.paddingTop),paddingRight:ae(n?.paddingRight),paddingBottom:ae(n?.paddingBottom),paddingLeft:ae(n?.paddingLeft),borderTopWidth:ae(n?.borderTopWidth),borderRightWidth:ae(n?.borderRightWidth),borderBottomWidth:ae(n?.borderBottomWidth),borderLeftWidth:ae(n?.borderLeftWidth),columnGap:ae(n?.columnGap),rowGap:ae(n?.rowGap)}}function Kt(e){return{marginTop:ae(e?.marginTop,!0),marginRight:ae(e?.marginRight,!0),marginBottom:ae(e?.marginBottom,!0),marginLeft:ae(e?.marginLeft,!0)}}function ae(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function Wt(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:Pe(n.getBoundingClientRect()),margin:Kt(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function si(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>Pe(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var Pn=new WeakMap,On=0;function Ge(e){let t=Pn.get(e);if(t)return t;On+=1;let n=`runtime-node-${On}`;return Pn.set(e,n),n}function Zn(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=Pe(t),s=H(r?.scrollX),c=H(r?.scrollY),a=i?.position||"static";return{version:Nt,runtimeNodeId:Ge(e),rect:{viewport:o,document:{top:o.top+c,left:o.left+s,width:o.width,height:o.height}},layout:{position:a,transform:i?.transform||"none",containingBlock:ai(e,a)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:H(r?.innerWidth),viewportHeight:H(r?.innerHeight),scrollContainers:ci(e)}}}function ci(e){let t=e.ownerDocument,n=t?.defaultView,r=[],i=e.parentElement;for(;i;){if(i!==t?.body&&i!==t?.documentElement){let o=n?.getComputedStyle(i),s=o?.overflowX||o?.overflow||"visible",c=o?.overflowY||o?.overflow||"visible",a=H(i.scrollLeft),u=H(i.scrollTop),p=a!==0||Dn(s)&&H(i.scrollWidth)>H(i.clientWidth),l=u!==0||Dn(c)&&H(i.scrollHeight)>H(i.clientHeight);(p||l)&&r.push({runtimeNodeId:Ge(i),scrollLeft:a,scrollTop:u})}i=i.parentElement}return r}function Dn(e){return["auto","scroll","overlay","hidden"].includes(e)}function ai(e,t){if(t==="fixed"){let r=kn(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:Ge(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=ui(r)??kn(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:Ge(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:Ge(n)}:{kind:"document"}}function kn(e,t){let n=e;for(;n;){let r=n.ownerDocument?.defaultView?.getComputedStyle(n);if(!!(r?.transform&&r.transform!=="none")||!!(r?.perspective&&r.perspective!=="none")||!!(r?.filter&&r.filter!=="none")||(r?.willChange??"").split(",").some(o=>["transform","perspective","filter"].includes(o.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function ui(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function ge(e,t,n,r="full",i){let o=e.getBoundingClientRect(),s=n?.(t.key)??null,c=e.tagName.toLowerCase(),a=Ye(e),u=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:li(e),attributes:Object.fromEntries(e.getAttributeNames().map(N=>[N,e.getAttribute(N)??""]))}:{},p=Gn({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),l=zt(e),y=!0,f=er(e)?.getAttribute("data-vcp-edit-key")??null,_=Wt(e),x=Zn(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...f?{parentKey:f}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...u,runtimeFlags:{selectable:!0,movable:p.canMove,removable:p.canRemove,textEditable:p.canUpdateText,container:l?!1:!!ht(e)||p.canInsertChild||y&&qt(c)},layoutSnapshot:x,layout:a,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:_,childRects:_.map(({rect:N})=>N),spacing:ft(e)}}function li(e){let t=Object.fromEntries(Object.entries(e.dataset).map(([r,i])=>[r,i??""])),n=e;for(;n;){for(let r of["cmsRecord","cmsField","cmsMediaIndex"]){let i=n.dataset[r];t[r]===void 0&&i!==void 0&&(t[r]=i)}n=n.parentElement}return t}function Mn(e,t,n,r){let i=e.getBoundingClientRect(),o=Zn(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:si(e)};let s=Wt(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:Ye(e),spacing:ft(e)}}function Bn(e){let t=e.layout?.display??"",n=e.spacing;return["flex","inline-flex","grid","inline-grid"].includes(t)&&!!(n&&(n.columnGap>0||n.rowGap>0)&&(e.childRects?.length??0)>=2)}function di(e,t,n,r,i){let o=t,s=Mn(o,n,e,"detailed"),c=Bn(s),a=null,u=null,p="mutation",l=Be(e),y=l,f=!1,_=!1,x=({reason:L,sourceEventAt:ne,forceEmit:se=!1,includeDetailedGeometry:T=!1})=>{(a===null||(L==="scroll"?0:1)>=(p==="scroll"?0:1))&&(p=L,l=ne),f=f||se,_=_||T,a===null&&(a=at(e,N))},N=()=>{let L=Be(e);a=null;let ne=p,se=l,T=f,k=_;f=!1,_=!1;let w=be(e.document,n,r?.()??null);if(!w)return;w!==o&&(X?.unobserve(o),o=w,X?.observe(o),k=!0);let m=k?"detailed":c?"child-rects":"light",S=Mn(o,n,e,m),O=S.layoutSnapshot.rect.viewport;O.width<=0||O.height<=0||!T&&!pi(s,S)||(s=S,m==="detailed"&&(c=Bn(S)),i(ne,S,{sourceEventAt:se,captureStartedAt:L,capturedAt:Be(e)}))},P=()=>{u!==null&&(e.clearTimeout(u),u=null)},B=()=>{P(),x({reason:"resize",sourceEventAt:Be(e),includeDetailedGeometry:!0})},j=()=>{P(),x({reason:"mutation",sourceEventAt:Be(e),includeDetailedGeometry:!0})},W=()=>{y=Be(e),x({reason:"scroll",sourceEventAt:y}),P(),u=e.setTimeout(()=>{u=null,x({reason:"scroll",sourceEventAt:y,forceEmit:!0,includeDetailedGeometry:!0})},Lr)},I=e.ResizeObserver,X=typeof I=="function"?new I(B):null;X?.observe(o);let ie=e.MutationObserver,te=typeof ie=="function"?new ie(j):null;te?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",B,{passive:!0}),e.addEventListener("scroll",W,{passive:!0});let Q=e.visualViewport;return Q?.addEventListener?.("resize",B,{passive:!0}),Q?.addEventListener?.("scroll",W,{passive:!0}),e.document.addEventListener("scroll",W,{capture:!0,passive:!0}),e.document.addEventListener("load",j,!0),()=>{a!==null&&(ut(e,a),a=null),P(),X?.disconnect(),te?.disconnect(),e.removeEventListener("resize",B),e.removeEventListener("scroll",W),Q?.removeEventListener?.("resize",B),Q?.removeEventListener?.("scroll",W),e.document.removeEventListener("scroll",W,!0),e.document.removeEventListener("load",j,!0)}}function Be(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function pi(e,t){return mi(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&hi(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&gi(e.childRects,t.childRects)||t.layout!==void 0&&Ft(e.layout,t.layout)||t.spacing!==void 0&&Ft(e.spacing,t.spacing)}function mi(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||mt(e.rect.viewport,t.rect.viewport)||mt(e.rect.document,t.rect.document)||e.layout.position!==t.layout.position||e.layout.transform!==t.layout.transform||e.layout.containingBlock.kind!==t.layout.containingBlock.kind||e.layout.containingBlock.kind==="element"&&t.layout.containingBlock.kind==="element"&&e.layout.containingBlock.runtimeNodeId!==t.layout.containingBlock.runtimeNodeId||e.scrollContext.scrollX!==t.scrollContext.scrollX||e.scrollContext.scrollY!==t.scrollContext.scrollY||e.scrollContext.viewportWidth!==t.scrollContext.viewportWidth||e.scrollContext.viewportHeight!==t.scrollContext.viewportHeight||fi(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function fi(e,t){return e.length!==t.length||e.some((n,r)=>{let i=t[r];return!i||n.runtimeNodeId!==i.runtimeNodeId||n.scrollLeft!==i.scrollLeft||n.scrollTop!==i.scrollTop})}function hi(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||mt(i.rect,s.rect)||Ft(i.margin,s.margin)})}function gi(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>mt(i,r[o]??i))}function Ft(e,t){let n=e??{},r=t??{},i=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(i).some(o=>n[o]!==r[o])}function Pe(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function mt(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function yi(e,t,n,r,i,o,s){let c=e.document,a=je(c,t,n,o);if(!a)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let u=i?be(c,i,o):null;if(u&&wt(a,u))return ot(c,a,"self-or-descendant",o,s);if(r==="move"&&u){let x=Ii(c,a,u,o,s);if(x){let N=Dt(x.child,x.targetParent,t,n,"nearest");if(N)return it(c,x.child,x.targetParent,N,o,s)}}let p=null,l=!1,y=a,f=a.parentElement;for(;f;){if(f.getAttribute("data-vcp-edit-key")){if(u&&wt(f,u))return ot(c,a,"self-or-descendant",o,s);let x=Fn(f,r,s);if(x==="accept"){p={child:y,targetParent:f};break}x==="blocked"&&(l=!0),y=f}f=f.parentElement}let _=Fn(a,r,s);if(_==="accept"){if(p){let x=Dt(p.child,p.targetParent,t,n,"edge");if(x)return it(c,p.child,p.targetParent,x,o,s)}return it(c,a,a,bi(a,t,n),o,s)}if(p){let x=Dt(p.child,p.targetParent,t,n,"nearest");return it(c,p.child,p.targetParent,x??"after",o,s)}return _==="blocked"||l?ot(c,a,"operation-boundary-blocked",o,s):ot(c,a,"no-accepting-parent",o,s)}function ot(e,t,n,r,i){return{anchorHit:ge(t,ye(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function it(e,t,n,r,i,o){let s=ge(t,ye(e,t,i),o,"summary"),c=ge(n,ye(e,n,i),o,"summary"),a=Ye(n).indicatorOrientation,u=r==="append"||r==="prepend"?Si(n.getBoundingClientRect(),a,r):Ei(t.getBoundingClientRect(),a,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:a,indicatorBounds:u}}function Fn(e,t,n){if(zt(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":ht(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return qt(o)?"accept":"not-container"}function Dt(e,t,n,r,i){let o=Ye(t).indicatorOrientation,s=e.getBoundingClientRect(),c=o==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return i==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function bi(e,t,n){let r=Ye(e).indicatorOrientation,i=e.getBoundingClientRect();return(r==="vertical"?i.width>0?(t-i.left)/i.width:.5:i.height>0?(n-i.top)/i.height:.5)<.5?"prepend":"append"}function Ye(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",i=n?.flexDirection,o=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(i??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(o??"row").includes("column")?"vertical":"horizontal"),{display:r,...i?{flexDirection:i}:{},...o?{gridAutoFlow:o}:{},indicatorOrientation:s}}function Si(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Ei(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function wt(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function Ii(e,t,n,r,i){let o=Ci(e,t,n,r,i);if(o)return o;let s=er(n);if(!s||t===s)return null;let c=t,a=t.getAttribute("data-vcp-edit-key")?t:null;for(;c&&c!==s;)c.getAttribute("data-vcp-edit-key")&&(a=c),c=c.parentElement;return c!==s||!a||a===s||a===n||wt(a,n)?null:{child:a,targetParent:s}}function Ci(e,t,n,r,i){return null}function er(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function ht(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=ht(n);if(r)return r}return null}function st(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:H(e.scrollX),scrollY:H(e.scrollY),scrollWidth:Math.max(H(t?.scrollWidth),H(n?.scrollWidth),H(e.innerWidth)),scrollHeight:Math.max(H(t?.scrollHeight),H(n?.scrollHeight),H(e.innerHeight)),viewportWidth:H(e.innerWidth),viewportHeight:H(e.innerHeight)}}function Ri(e,t){Object.entries(t.attributes??{}).forEach(([r,i])=>{if(i===null){e.removeAttribute(r);return}e.setAttribute(r,i)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,i])=>{if(n.has(r))return;let o=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(i==null||i===""){o.removeProperty(s);return}o.setProperty(s,String(i))}),t.styleDeclarations?.forEach(r=>{let i=e.style,o=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){i.removeProperty(o);return}i.setProperty(o,String(s),r.priority)})}var vi=500,Ue=new Map;function xi(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function Ti(e,t){if(Ue.size>=vi){let n=Ue.keys().next().value;n&&Ue.delete(n)}Ue.set(e,t)}var He=new Set;function _i(e,t){let n=e.documentElement?.style,r=new Set;for(let[i,o]of Object.entries(t.variables??{}))i.startsWith("--")&&(r.add(i),n?.setProperty(i,o));for(let i of He)r.has(i)||n?.removeProperty(i);He.clear();for(let i of r)He.add(i);Di(e,t.stylesheets??[])}function Ai(e){let t=e.documentElement?.style;for(let n of He)t?.removeProperty(n);He.clear();for(let n of rr(e))n.remove()}function Ni(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,i=r?e.defaultView?.getComputedStyle(r):null,o={};for(let s of n){let c=tr(i,s);c&&(o[s]=c)}return o}function tr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return nr(e,r,n)}function nr(e,t,n){if(!t)return null;let r=Pi(t);if(!r)return t;let i=tr(e,r.name,n);return i||(r.fallback?nr(e,r.fallback,n)??r.fallback:null)}function Pi(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=Oi(n),i=r>=0?n.slice(0,r).trim():n;if(!i.startsWith("--"))return null;let o=r>=0?n.slice(r+1).trim():null;return{name:i,fallback:o||null}}function Oi(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function Di(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of rr(e)){let s=o.getAttribute("href")??"";if(!n.has(s)||r.has(s)){o.remove();continue}r.set(s,o)}let i=e.head;if(i)for(let o of n){if(r.has(o))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(qn,"true"),s.setAttribute("href",o),i.appendChild(s)}}function rr(e){return Array.from(e.querySelectorAll(`link[${qn}]`))}function ki(e,t,n,r,i={}){let o=i.textNode?Mi(e.document,i.textNode):null;if(i.textNode&&!o)throw new Error("Failed to prepare text segment editor");let s=o?.element??t,c=s.textContent??"",a=o?void 0:t.innerHTML,u=Bi(s),p=!1,l=()=>{e.document.removeEventListener("pointerdown",f,!0),s.removeEventListener("keydown",_),s.removeEventListener("blur",x),s.removeEventListener("input",N),wi(s,u)},y=P=>{if(p)return;p=!0;let B=s.textContent??"";if(l(),P==="cancel"){o?.restore(c),o||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(B),P==="commit"&&B!==c){i.onCommitSnapshot?.({ref:n,initialText:c,...a!==void 0?{initialHtml:a}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:B}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function f(P){let B=P.target;B&&s.contains(B)||y("commit")}function _(P){if(P.key==="Escape"){P.preventDefault(),y("cancel");return}P.key==="Enter"&&(P.metaKey||P.ctrlKey)&&(P.preventDefault(),y("commit"))}function x(){y("commit")}function N(){r({kind:"text-edit-input",payload:{ref:n,hit:ge(t,n,void 0,"full")}})}return Fi(s),e.document.addEventListener("pointerdown",f,!0),s.addEventListener("keydown",_),s.addEventListener("blur",x),s.addEventListener("input",N),zi(s),Ki(s,e.document),l}function Mi(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(i){t.nodeValue=i,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function Bi(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function Fi(e){qi(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function wi(e,t){kt(e,"contenteditable",t.contentEditable),kt(e,"spellcheck",t.spellcheck),kt(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function qi(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function kt(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function Vi(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function zi(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function Ki(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function or(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function H(e){let t=Number(e);return Number.isFinite(t)?t:0}export{wn as SITE_EDIT_COMPOSITION_RENDER_MISMATCH,Bt as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,Mt as VCP_SITE_EDIT_ROUTE_READY_EVENT,so as resolveBrowserCompositionSelector,Vn as resolveSiteEditRouteId,ao as resolveSiteEditWebSocketUrl,as as startSiteEditAutoBootstrap,go as startSiteEditFrameRuntime,io as syncRuntimeSiteBlockIds};
|
|
41
|
+
`,a.appendChild(_);let x=_o.map(T=>{let k=c.createElement("div");return k.setAttribute(f,T),k.setAttribute("aria-hidden","true"),u.appendChild(k),k}),N=null,P=null,B=()=>{N?.removeAttribute(y),P?.(),P=null,N=null},j=T=>{B(),N=T,P=ct(T,o),T.setAttribute(y,"true"),x.forEach(k=>k.style.removeProperty("display"))};j(l);let W=!1,I=null,X=()=>{if(!I||!l)return;let T=(k,w,m)=>{w?l.style.setProperty(k,w,m):l.style.removeProperty(k)};T("width",I.widthValue,I.widthPriority),T("height",I.heightValue,I.heightPriority)},ie=(T,k,w)=>I?{version:1,phase:T,sessionId:I.sessionId,pointerId:I.pointerId,edge:I.edge,ref:t,startWidth:I.startWidth,startHeight:I.startHeight,width:k,height:w,baselineStyleDeclarations:[{property:"width",value:I.widthValue||null,...I.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:I.heightValue||null,...I.heightPriority==="important"?{priority:"important"}:{}}]}:null,te=()=>{if(!I)return null;let T=ie("cancel",I.startWidth,I.startHeight),k=I.captureTarget,w=I.pointerId,m=I.currentX,S=I.currentY;return X(),I=null,k?.releasePointerCapture?.(w),T&&r?.({clientX:m,clientY:S,session:T}),T},Q=T=>{if(!I||!l?.isConnected||T.pointerId!==I.pointerId)return!1;I.currentX=Number(T.clientX),I.currentY=Number(T.clientY);let k=I.currentX-I.startX,w=I.currentY-I.startY,m=Math.max(1,Math.round(I.startWidth+k)),S=Math.max(1,Math.round(I.startHeight+w));return(I.edge==="e"||I.edge==="se")&&l.style.setProperty("width",`${m}px`,"important"),(I.edge==="s"||I.edge==="se")&&l.style.setProperty("height",`${S}px`,"important"),!0},L=()=>{if(W)return;let T=p();T===l&&T?.isConnected||(te(),B(),l=T,l?.isConnected?j(l):x.forEach(k=>k.style.setProperty("display","none","important")))},ne=e.MutationObserver,se=typeof ne=="function"?new ne(L):null;return se?.observe(c.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(T,k){if(W||I||!l?.isConnected)return null;let w=l.getBoundingClientRect();return I={sessionId:`resize-${i}-${T.pointerId}`,pointerId:T.pointerId,edge:k,startX:Number(T.clientX),startY:Number(T.clientY),currentX:Number(T.clientX),currentY:Number(T.clientY),startWidth:w.width,startHeight:w.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:T.target},ie("start",w.width,w.height)},update:Q,finish(T,k){if(!I||T.pointerId!==I.pointerId)return null;k==="commit"&&Q(T);let w=Math.max(1,Math.round(I.startWidth+Number(T.clientX)-I.startX)),m=Math.max(1,Math.round(I.startHeight+Number(T.clientY)-I.startY)),S=ie(k,k==="commit"?w:I.startWidth,k==="commit"?m:I.startHeight),O=I.captureTarget,R=I.pointerId;return k==="cancel"&&X(),I=null,O?.releasePointerCapture?.(R),S},cleanup(){W||(W=!0,se?.disconnect(),te(),B(),l=null,x.forEach(T=>T.remove()),_.remove())}}}function _n(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function Oo(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function Do({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:i,setCurrentDocument:o,onBridgeRequestError:s,nextRouteReadySequence:c,windowLike:a}){let u=a.__VCP_SITE_EDIT__;if(!u){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}let p=()=>{if(a.__VCP_SITE_EDIT__!==u)throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed while reading the document")};try{switch(e.kind){case"bridge-initialize-session":{let l=a.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(l?.compositionKey&&Fe(e.payload.composition)!==l.compositionKey&&(!l.composition||Fe(e.payload.composition)!==ee(l.composition)))throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed");let y,f=!1;if(l?.composition)try{let _=await u.getDocument(e.payload.composition),x=await u.getHistoryStatus(e.payload.composition);y={..._,composition:_.data.composition,data:{document:_.data,historyStatus:x.data}},f=!0}catch(_){if(!xe(_,"").includes("SITE_EDIT_COMPOSITION_SESSION_REQUIRED"))throw _}y??=await u.initializeSession({composition:e.payload.composition}),p(),o?.(y.data.document),f||Kn(a,{composition:y.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:y.data.document.version}),n({type:"response",ok:!0,result:y});return}case"bridge-get-document":{let l=await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await u.getHistoryStatus(e.payload.composition)});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await u.getStyleContext(e.payload.composition)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=u.ensureDocumentVersion?await u.ensureDocumentVersion(e.payload.composition,Number(e.payload.minVersion)):await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=u.acknowledgeDocumentVersion?await u.acknowledgeDocumentVersion(e.payload.composition,Number(e.payload.version)):await u.getDocument(e.payload.composition);p(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await u.getObjectEditContext(e.payload.key,e.payload.composition,e.payload.selectionRef)});return;case"bridge-get-class-name-source":{let l=await u.getClassNameSource(e.payload.key,e.payload.composition);n({type:"response",ok:!0,result:ko(l,e.payload.key,a.document,i?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await u.getSourceTree(e.payload.composition)});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await u.getSourceFile({path:e.payload.path,composition:e.payload.composition})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await u.resolveSourceLocation({key:e.payload.key,composition:e.payload.composition})});return;case"bridge-execute":{let l=await u.execute(e.payload.request);if(l.ok&&u.acknowledgeDocumentVersion&&Oo(e.payload.request)){let y=await u.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);p(),o?.(y.data)}n({type:"response",ok:!0,result:l});return}case"bridge-undo":n({type:"response",ok:!0,result:await u.undo(e.payload.composition)});return;case"bridge-redo":n({type:"response",ok:!0,result:await u.redo(e.payload.composition)});return;case"bridge-subscribe":{let l=e.payload.subscriptionId;r.get(l)?.();let y=u.subscribe(f=>{t({kind:"bridge-event",payload:{composition:f.composition,event:f,subscriptionId:l}})});r.set(l,y),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let l=e.payload.subscriptionId;r.get(l)?.(),r.delete(l),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(l){a.__VCP_SITE_EDIT__===u&&s?.(l,e),n({type:"response",ok:!1,error:Ko(l)})}}function ko(e,t,n,r){if(!e.ok)return e;let i=be(n,{key:t},r),o=i?Mo(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function Mo(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function Bo(e,t,n=()=>e.location.pathname){let r=e.history.pushState,i=e.history.replaceState,o=n(),s=()=>{let u=n();u!==o&&(o=u,t())},c=()=>s(),a=()=>s();return e.history.pushState=function(...p){let l=r.apply(this,p);return s(),l},e.history.replaceState=function(...p){let l=i.apply(this,p);return s(),l},e.addEventListener("popstate",c),e.addEventListener("hashchange",a),()=>{e.history.pushState=r,e.history.replaceState=i,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",a)}}function Fo(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function at(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function ut(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Kn(e,t){e.dispatchEvent(new CustomEvent(Mt,{detail:t}))}function wo(e,t){e.dispatchEvent(new CustomEvent(Bt,{detail:t}))}function qo(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function Vo(e,t){return ee(e.composition)===t}function zo(e){return xe(e,"").includes(wn)}function xe(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function Wn(e){let t=xe(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Ko(e){let t=xe(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":Wn(t)?"Site edit bridge disconnected":t}function $n(e){if(!e||typeof e!="object"||!("code"in e))return null;let t=e.code;return typeof t=="string"&&t.length>0?t:null}function Wo(e){let t=$n(e);if(t)return t===Rt||t===Ct;let n=xe(e,"");return n.includes(Rt)||n.includes(Ct)}function Me(e){if(xe(e,"").includes("SITE_EDIT_RUNTIME_RELOAD_REQUIRED"))return!0;if($n(e))return!1;let t=xe(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function Un(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function qt(e){return ro.has(Hn(e))}function $o(e){return oo.has(Hn(e))}function Gn(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:$o(e.tagName),canInsertChild:qt(e.tagName),canMove:!1,canRemove:!1}}function Hn(e){return e?.trim().toLowerCase()??""}function An(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function Uo(e,t,n){let r=be(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=Go(r,t.ref.textSegmentIndex);return i?(i.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function Go(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!lt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function Ho(e,t,n,r,i){let o=je(e,t,n,r),s=Vt(o);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",a=ye(e,s,r),u=i?.(a.key)??i?.(c);if(!Gn({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let l=jo(e,t,n,s);if(l){let y=Xo(s,l);if(y!==null)return{element:s,textNode:l,textSegmentIndex:y}}return ht(s)?null:{element:s}}function jo(e,t,n,r){let i=Yo(e,t,n);return!i||i.parentElement!==r?null:i}function Yo(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(lt(o))return o;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return lt(c)?c:null}function Xo(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!lt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function lt(e){return e?.nodeType===3}function Jo(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function Qo(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let i=r.getAttribute("data-site-block-id")??"",o=r.getAttribute("data-vcp-edit-key")??"";return!i||!o?null:{blockId:i,blockIndex:Lo(e,r),ref:dt(e,r,n),rect:Pe(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function Lo(e,t){let n=t.getAttribute("data-site-block-order"),r=n===null?Number.NaN:Number(n);return Number.isInteger(r)&&r>=0?r:Math.max(0,jn(e,null).findIndex(i=>i.element===t))}function jn(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:dt(e,n,t),rect:Pe(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function Zo(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let i=jn(e,n),o=i[0],s=i.at(-1);if(!o||!s)return null;let c=new Set(n.pageComposition.placements.map(f=>`${f.placementUnitKey}\0${f.relation}`)),a=f=>r?.(f)??n.entries.find(_=>_.key===f)??null,u=(f,_,x)=>{let N=a(f.ref.key)?.pageCompositionUnitKey;return!N||!c.has(`${N}\0${_}`)?null:{anchorBlockId:f.blockId,positionIndex:x,anchorRef:f.ref,placement:_,boundary:{top:_==="before"?f.rect.top:f.rect.top+f.rect.height,left:f.rect.left,width:f.rect.width}}},p=[],l=u(o,"before",0);l&&p.push(l),i.slice(1).forEach((f,_)=>{let x=_+1,N=u(f,"before",x);if(N){p.push(N);return}let P=i[_],B=P?u(P,"after",x):null;B&&p.push(B)});let y=u(s,"after",i.length);return y&&p.push(y),p.find(({boundary:f})=>t.clientX>=f.left&&t.clientX<=f.left+f.width&&Math.abs(t.clientY-f.top)<=fn)??null}function je(e,t,n,r=null){let i=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let o of i){let s=Vt(o),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Jn(s,r,c))return s}return null}function Vt(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(zt(t))return n??t;!ei(r)&&!n&&(n=t)}t=t.parentElement}return n}function zt(e){return e.getAttribute(no)!==null}function ei(e){return ti(e.split("::")[0]??"")}function ti(e){if(!e)return!1;let t=ni(e);return t===nt||t.startsWith(`${nt}/`)||t.includes(`/${nt}/`)||t.endsWith(`/${nt}`)}function ni(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(i)}return r.join("/")}function ye(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",i=Xn(Ln(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${or(r)}"]`))),n,r);if(i.length<=1)return{key:Nn(n,r,0)};let o=i.indexOf(t);return o>=0?{key:Nn(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function dt(e,t,n){return ye(e,t,n)}function be(e,t,n){let r=pt(t.key)??t.key,i=Xn(Ln(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${or(r)}"]`))),n,t.key);if(i.length===0)return null;let o=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<i.length?t.instanceIndex:null,s=(pt(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let c=ri(n,t.key);return c!==null&&c>=0&&c<i.length?i[c]??null:o!==null?i[o]??null:i[0]??null}function Nn(e,t,n){return Yn(e,t)[n]?.key??t}function ri(e,t){let n=pt(t);if(!n)return null;let i=Yn(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function Yn(e,t){return(e?.entries??[]).filter(n=>(pt(n.key)??n.key)===t)}function Xn(e,t,n){let r=Qn(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Jn(e,t,n){let r=Qn(t,n);return!r||e.tagName.toLowerCase()===r}function Qn(e,t){return null}var oi=2,ii=4;function Ln(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&ii)!==0?-1:(r&oi)!==0?1:0})}function pt(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(Cn);if(n<0)break;let r=Number(t.slice(n+Cn.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function ft(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...Kt(n),paddingTop:ae(n?.paddingTop),paddingRight:ae(n?.paddingRight),paddingBottom:ae(n?.paddingBottom),paddingLeft:ae(n?.paddingLeft),borderTopWidth:ae(n?.borderTopWidth),borderRightWidth:ae(n?.borderRightWidth),borderBottomWidth:ae(n?.borderBottomWidth),borderLeftWidth:ae(n?.borderLeftWidth),columnGap:ae(n?.columnGap),rowGap:ae(n?.rowGap)}}function Kt(e){return{marginTop:ae(e?.marginTop,!0),marginRight:ae(e?.marginRight,!0),marginBottom:ae(e?.marginBottom,!0),marginLeft:ae(e?.marginLeft,!0)}}function ae(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function Wt(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:Pe(n.getBoundingClientRect()),margin:Kt(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function si(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>Pe(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var Pn=new WeakMap,On=0;function Ge(e){let t=Pn.get(e);if(t)return t;On+=1;let n=`runtime-node-${On}`;return Pn.set(e,n),n}function Zn(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=Pe(t),s=H(r?.scrollX),c=H(r?.scrollY),a=i?.position||"static";return{version:Nt,runtimeNodeId:Ge(e),rect:{viewport:o,document:{top:o.top+c,left:o.left+s,width:o.width,height:o.height}},layout:{position:a,transform:i?.transform||"none",containingBlock:ai(e,a)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:H(r?.innerWidth),viewportHeight:H(r?.innerHeight),scrollContainers:ci(e)}}}function ci(e){let t=e.ownerDocument,n=t?.defaultView,r=[],i=e.parentElement;for(;i;){if(i!==t?.body&&i!==t?.documentElement){let o=n?.getComputedStyle(i),s=o?.overflowX||o?.overflow||"visible",c=o?.overflowY||o?.overflow||"visible",a=H(i.scrollLeft),u=H(i.scrollTop),p=a!==0||Dn(s)&&H(i.scrollWidth)>H(i.clientWidth),l=u!==0||Dn(c)&&H(i.scrollHeight)>H(i.clientHeight);(p||l)&&r.push({runtimeNodeId:Ge(i),scrollLeft:a,scrollTop:u})}i=i.parentElement}return r}function Dn(e){return["auto","scroll","overlay","hidden"].includes(e)}function ai(e,t){if(t==="fixed"){let r=kn(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:Ge(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=ui(r)??kn(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:Ge(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:Ge(n)}:{kind:"document"}}function kn(e,t){let n=e;for(;n;){let r=n.ownerDocument?.defaultView?.getComputedStyle(n);if(!!(r?.transform&&r.transform!=="none")||!!(r?.perspective&&r.perspective!=="none")||!!(r?.filter&&r.filter!=="none")||(r?.willChange??"").split(",").some(o=>["transform","perspective","filter"].includes(o.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function ui(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function ge(e,t,n,r="full",i){let o=e.getBoundingClientRect(),s=n?.(t.key)??null,c=e.tagName.toLowerCase(),a=Ye(e),u=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:li(e),attributes:Object.fromEntries(e.getAttributeNames().map(N=>[N,e.getAttribute(N)??""]))}:{},p=Gn({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),l=zt(e),y=!0,f=er(e)?.getAttribute("data-vcp-edit-key")??null,_=Wt(e),x=Zn(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...f?{parentKey:f}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...u,runtimeFlags:{selectable:!0,movable:p.canMove,removable:p.canRemove,textEditable:p.canUpdateText,container:l?!1:!!ht(e)||p.canInsertChild||y&&qt(c)},layoutSnapshot:x,layout:a,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:_,childRects:_.map(({rect:N})=>N),spacing:ft(e)}}function li(e){let t=Object.fromEntries(Object.entries(e.dataset).map(([r,i])=>[r,i??""])),n=e;for(;n;){for(let r of["cmsCollection","cmsRecord","cmsField","cmsMediaIndex"]){let i=n.dataset[r];t[r]===void 0&&i!==void 0&&(t[r]=i)}n=n.parentElement}return t}function Mn(e,t,n,r){let i=e.getBoundingClientRect(),o=Zn(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:si(e)};let s=Wt(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:Ye(e),spacing:ft(e)}}function Bn(e){let t=e.layout?.display??"",n=e.spacing;return["flex","inline-flex","grid","inline-grid"].includes(t)&&!!(n&&(n.columnGap>0||n.rowGap>0)&&(e.childRects?.length??0)>=2)}function di(e,t,n,r,i){let o=t,s=Mn(o,n,e,"detailed"),c=Bn(s),a=null,u=null,p="mutation",l=Be(e),y=l,f=!1,_=!1,x=({reason:L,sourceEventAt:ne,forceEmit:se=!1,includeDetailedGeometry:T=!1})=>{(a===null||(L==="scroll"?0:1)>=(p==="scroll"?0:1))&&(p=L,l=ne),f=f||se,_=_||T,a===null&&(a=at(e,N))},N=()=>{let L=Be(e);a=null;let ne=p,se=l,T=f,k=_;f=!1,_=!1;let w=be(e.document,n,r?.()??null);if(!w)return;w!==o&&(X?.unobserve(o),o=w,X?.observe(o),k=!0);let m=k?"detailed":c?"child-rects":"light",S=Mn(o,n,e,m),O=S.layoutSnapshot.rect.viewport;O.width<=0||O.height<=0||!T&&!pi(s,S)||(s=S,m==="detailed"&&(c=Bn(S)),i(ne,S,{sourceEventAt:se,captureStartedAt:L,capturedAt:Be(e)}))},P=()=>{u!==null&&(e.clearTimeout(u),u=null)},B=()=>{P(),x({reason:"resize",sourceEventAt:Be(e),includeDetailedGeometry:!0})},j=()=>{P(),x({reason:"mutation",sourceEventAt:Be(e),includeDetailedGeometry:!0})},W=()=>{y=Be(e),x({reason:"scroll",sourceEventAt:y}),P(),u=e.setTimeout(()=>{u=null,x({reason:"scroll",sourceEventAt:y,forceEmit:!0,includeDetailedGeometry:!0})},Lr)},I=e.ResizeObserver,X=typeof I=="function"?new I(B):null;X?.observe(o);let ie=e.MutationObserver,te=typeof ie=="function"?new ie(j):null;te?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",B,{passive:!0}),e.addEventListener("scroll",W,{passive:!0});let Q=e.visualViewport;return Q?.addEventListener?.("resize",B,{passive:!0}),Q?.addEventListener?.("scroll",W,{passive:!0}),e.document.addEventListener("scroll",W,{capture:!0,passive:!0}),e.document.addEventListener("load",j,!0),()=>{a!==null&&(ut(e,a),a=null),P(),X?.disconnect(),te?.disconnect(),e.removeEventListener("resize",B),e.removeEventListener("scroll",W),Q?.removeEventListener?.("resize",B),Q?.removeEventListener?.("scroll",W),e.document.removeEventListener("scroll",W,!0),e.document.removeEventListener("load",j,!0)}}function Be(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function pi(e,t){return mi(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&hi(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&gi(e.childRects,t.childRects)||t.layout!==void 0&&Ft(e.layout,t.layout)||t.spacing!==void 0&&Ft(e.spacing,t.spacing)}function mi(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||mt(e.rect.viewport,t.rect.viewport)||mt(e.rect.document,t.rect.document)||e.layout.position!==t.layout.position||e.layout.transform!==t.layout.transform||e.layout.containingBlock.kind!==t.layout.containingBlock.kind||e.layout.containingBlock.kind==="element"&&t.layout.containingBlock.kind==="element"&&e.layout.containingBlock.runtimeNodeId!==t.layout.containingBlock.runtimeNodeId||e.scrollContext.scrollX!==t.scrollContext.scrollX||e.scrollContext.scrollY!==t.scrollContext.scrollY||e.scrollContext.viewportWidth!==t.scrollContext.viewportWidth||e.scrollContext.viewportHeight!==t.scrollContext.viewportHeight||fi(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function fi(e,t){return e.length!==t.length||e.some((n,r)=>{let i=t[r];return!i||n.runtimeNodeId!==i.runtimeNodeId||n.scrollLeft!==i.scrollLeft||n.scrollTop!==i.scrollTop})}function hi(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||mt(i.rect,s.rect)||Ft(i.margin,s.margin)})}function gi(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>mt(i,r[o]??i))}function Ft(e,t){let n=e??{},r=t??{},i=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(i).some(o=>n[o]!==r[o])}function Pe(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function mt(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function yi(e,t,n,r,i,o,s){let c=e.document,a=je(c,t,n,o);if(!a)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let u=i?be(c,i,o):null;if(u&&wt(a,u))return ot(c,a,"self-or-descendant",o,s);if(r==="move"&&u){let x=Ii(c,a,u,o,s);if(x){let N=Dt(x.child,x.targetParent,t,n,"nearest");if(N)return it(c,x.child,x.targetParent,N,o,s)}}let p=null,l=!1,y=a,f=a.parentElement;for(;f;){if(f.getAttribute("data-vcp-edit-key")){if(u&&wt(f,u))return ot(c,a,"self-or-descendant",o,s);let x=Fn(f,r,s);if(x==="accept"){p={child:y,targetParent:f};break}x==="blocked"&&(l=!0),y=f}f=f.parentElement}let _=Fn(a,r,s);if(_==="accept"){if(p){let x=Dt(p.child,p.targetParent,t,n,"edge");if(x)return it(c,p.child,p.targetParent,x,o,s)}return it(c,a,a,bi(a,t,n),o,s)}if(p){let x=Dt(p.child,p.targetParent,t,n,"nearest");return it(c,p.child,p.targetParent,x??"after",o,s)}return _==="blocked"||l?ot(c,a,"operation-boundary-blocked",o,s):ot(c,a,"no-accepting-parent",o,s)}function ot(e,t,n,r,i){return{anchorHit:ge(t,ye(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function it(e,t,n,r,i,o){let s=ge(t,ye(e,t,i),o,"summary"),c=ge(n,ye(e,n,i),o,"summary"),a=Ye(n).indicatorOrientation,u=r==="append"||r==="prepend"?Si(n.getBoundingClientRect(),a,r):Ei(t.getBoundingClientRect(),a,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:a,indicatorBounds:u}}function Fn(e,t,n){if(zt(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":ht(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return qt(o)?"accept":"not-container"}function Dt(e,t,n,r,i){let o=Ye(t).indicatorOrientation,s=e.getBoundingClientRect(),c=o==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return i==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function bi(e,t,n){let r=Ye(e).indicatorOrientation,i=e.getBoundingClientRect();return(r==="vertical"?i.width>0?(t-i.left)/i.width:.5:i.height>0?(n-i.top)/i.height:.5)<.5?"prepend":"append"}function Ye(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",i=n?.flexDirection,o=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(i??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(o??"row").includes("column")?"vertical":"horizontal"),{display:r,...i?{flexDirection:i}:{},...o?{gridAutoFlow:o}:{},indicatorOrientation:s}}function Si(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Ei(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function wt(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function Ii(e,t,n,r,i){let o=Ci(e,t,n,r,i);if(o)return o;let s=er(n);if(!s||t===s)return null;let c=t,a=t.getAttribute("data-vcp-edit-key")?t:null;for(;c&&c!==s;)c.getAttribute("data-vcp-edit-key")&&(a=c),c=c.parentElement;return c!==s||!a||a===s||a===n||wt(a,n)?null:{child:a,targetParent:s}}function Ci(e,t,n,r,i){return null}function er(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function ht(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=ht(n);if(r)return r}return null}function st(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:H(e.scrollX),scrollY:H(e.scrollY),scrollWidth:Math.max(H(t?.scrollWidth),H(n?.scrollWidth),H(e.innerWidth)),scrollHeight:Math.max(H(t?.scrollHeight),H(n?.scrollHeight),H(e.innerHeight)),viewportWidth:H(e.innerWidth),viewportHeight:H(e.innerHeight)}}function Ri(e,t){Object.entries(t.attributes??{}).forEach(([r,i])=>{if(i===null){e.removeAttribute(r);return}e.setAttribute(r,i)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,i])=>{if(n.has(r))return;let o=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(i==null||i===""){o.removeProperty(s);return}o.setProperty(s,String(i))}),t.styleDeclarations?.forEach(r=>{let i=e.style,o=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){i.removeProperty(o);return}i.setProperty(o,String(s),r.priority)})}var vi=500,Ue=new Map;function xi(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function Ti(e,t){if(Ue.size>=vi){let n=Ue.keys().next().value;n&&Ue.delete(n)}Ue.set(e,t)}var He=new Set;function _i(e,t){let n=e.documentElement?.style,r=new Set;for(let[i,o]of Object.entries(t.variables??{}))i.startsWith("--")&&(r.add(i),n?.setProperty(i,o));for(let i of He)r.has(i)||n?.removeProperty(i);He.clear();for(let i of r)He.add(i);Di(e,t.stylesheets??[])}function Ai(e){let t=e.documentElement?.style;for(let n of He)t?.removeProperty(n);He.clear();for(let n of rr(e))n.remove()}function Ni(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,i=r?e.defaultView?.getComputedStyle(r):null,o={};for(let s of n){let c=tr(i,s);c&&(o[s]=c)}return o}function tr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return nr(e,r,n)}function nr(e,t,n){if(!t)return null;let r=Pi(t);if(!r)return t;let i=tr(e,r.name,n);return i||(r.fallback?nr(e,r.fallback,n)??r.fallback:null)}function Pi(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=Oi(n),i=r>=0?n.slice(0,r).trim():n;if(!i.startsWith("--"))return null;let o=r>=0?n.slice(r+1).trim():null;return{name:i,fallback:o||null}}function Oi(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function Di(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of rr(e)){let s=o.getAttribute("href")??"";if(!n.has(s)||r.has(s)){o.remove();continue}r.set(s,o)}let i=e.head;if(i)for(let o of n){if(r.has(o))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(qn,"true"),s.setAttribute("href",o),i.appendChild(s)}}function rr(e){return Array.from(e.querySelectorAll(`link[${qn}]`))}function ki(e,t,n,r,i={}){let o=i.textNode?Mi(e.document,i.textNode):null;if(i.textNode&&!o)throw new Error("Failed to prepare text segment editor");let s=o?.element??t,c=s.textContent??"",a=o?void 0:t.innerHTML,u=Bi(s),p=!1,l=()=>{e.document.removeEventListener("pointerdown",f,!0),s.removeEventListener("keydown",_),s.removeEventListener("blur",x),s.removeEventListener("input",N),wi(s,u)},y=P=>{if(p)return;p=!0;let B=s.textContent??"";if(l(),P==="cancel"){o?.restore(c),o||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(B),P==="commit"&&B!==c){i.onCommitSnapshot?.({ref:n,initialText:c,...a!==void 0?{initialHtml:a}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:B}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function f(P){let B=P.target;B&&s.contains(B)||y("commit")}function _(P){if(P.key==="Escape"){P.preventDefault(),y("cancel");return}P.key==="Enter"&&(P.metaKey||P.ctrlKey)&&(P.preventDefault(),y("commit"))}function x(){y("commit")}function N(){r({kind:"text-edit-input",payload:{ref:n,hit:ge(t,n,void 0,"full")}})}return Fi(s),e.document.addEventListener("pointerdown",f,!0),s.addEventListener("keydown",_),s.addEventListener("blur",x),s.addEventListener("input",N),zi(s),Ki(s,e.document),l}function Mi(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(i){t.nodeValue=i,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function Bi(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function Fi(e){qi(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function wi(e,t){kt(e,"contenteditable",t.contentEditable),kt(e,"spellcheck",t.spellcheck),kt(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function qi(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function kt(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function Vi(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function zi(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function Ki(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function or(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function H(e){let t=Number(e);return Number.isFinite(t)?t:0}export{wn as SITE_EDIT_COMPOSITION_RENDER_MISMATCH,Bt as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,Mt as VCP_SITE_EDIT_ROUTE_READY_EVENT,so as resolveBrowserCompositionSelector,Vn as resolveSiteEditRouteId,ao as resolveSiteEditWebSocketUrl,as as startSiteEditAutoBootstrap,go as startSiteEditFrameRuntime,io as syncRuntimeSiteBlockIds};
|
package/dist/client.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ export declare class SiteEditWebSocketClient implements SiteEditBridgeClient {
|
|
|
88
88
|
dynamicDataSummary?: {
|
|
89
89
|
hasDynamicData: boolean;
|
|
90
90
|
sourceKinds: ("vcp-cms-collection" | "vcp-cms-form" | "vcp-cms-settings" | "vcp-cms-navigation" | "site-api-route" | "external-api" | "unknown-api")[];
|
|
91
|
+
collections?: string[] | undefined;
|
|
91
92
|
primaryEndpoint?: string | undefined;
|
|
92
93
|
primaryCollection?: string | undefined;
|
|
93
94
|
primaryFieldPath?: string | undefined;
|
package/dist/index.js
CHANGED
|
@@ -38,7 +38,7 @@ function zn(e){let t=new Map,n=[],r=new Map,i=[],o=e.pageComposition.status==="s
|
|
|
38
38
|
[${h}="e"] { left: anchor(right); top: anchor(center); }
|
|
39
39
|
[${h}="se"] { left: anchor(right); top: anchor(bottom); }
|
|
40
40
|
[${h}="s"] { left: anchor(center); top: anchor(bottom); }
|
|
41
|
-
`,u.appendChild(R);let v=is.map(x=>{let w=c.createElement("div");return w.setAttribute(h,x),w.setAttribute("aria-hidden","true"),a.appendChild(w),w}),A=null,P=null,O=()=>{A?.removeAttribute(f),P?.(),P=null,A=null},K=x=>{O(),A=x,P=Rt(x,o),x.setAttribute(f,"true"),v.forEach(w=>w.style.removeProperty("display"))};K(l);let H=!1,I=null,U=()=>{if(!I||!l)return;let x=(w,M,m)=>{M?l.style.setProperty(w,M,m):l.style.removeProperty(w)};x("width",I.widthValue,I.widthPriority),x("height",I.heightValue,I.heightPriority)},re=(x,w,M)=>I?{version:1,phase:x,sessionId:I.sessionId,pointerId:I.pointerId,edge:I.edge,ref:t,startWidth:I.startWidth,startHeight:I.startHeight,width:w,height:M,baselineStyleDeclarations:[{property:"width",value:I.widthValue||null,...I.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:I.heightValue||null,...I.heightPriority==="important"?{priority:"important"}:{}}]}:null,W=()=>{if(!I)return null;let x=re("cancel",I.startWidth,I.startHeight),w=I.captureTarget,M=I.pointerId,m=I.currentX,S=I.currentY;return U(),I=null,w?.releasePointerCapture?.(M),x&&r?.({clientX:m,clientY:S,session:x}),x},L=x=>{if(!I||!l?.isConnected||x.pointerId!==I.pointerId)return!1;I.currentX=Number(x.clientX),I.currentY=Number(x.clientY);let w=I.currentX-I.startX,M=I.currentY-I.startY,m=Math.max(1,Math.round(I.startWidth+w)),S=Math.max(1,Math.round(I.startHeight+M));return(I.edge==="e"||I.edge==="se")&&l.style.setProperty("width",`${m}px`,"important"),(I.edge==="s"||I.edge==="se")&&l.style.setProperty("height",`${S}px`,"important"),!0},G=()=>{if(H)return;let x=d();x===l&&x?.isConnected||(W(),O(),l=x,l?.isConnected?K(l):v.forEach(w=>w.style.setProperty("display","none","important")))},ee=e.MutationObserver,te=typeof ee=="function"?new ee(G):null;return te?.observe(c.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(x,w){if(H||I||!l?.isConnected)return null;let M=l.getBoundingClientRect();return I={sessionId:`resize-${i}-${x.pointerId}`,pointerId:x.pointerId,edge:w,startX:Number(x.clientX),startY:Number(x.clientY),currentX:Number(x.clientX),currentY:Number(x.clientY),startWidth:M.width,startHeight:M.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:x.target},re("start",M.width,M.height)},update:L,finish(x,w){if(!I||x.pointerId!==I.pointerId)return null;w==="commit"&&L(x);let M=Math.max(1,Math.round(I.startWidth+Number(x.clientX)-I.startX)),m=Math.max(1,Math.round(I.startHeight+Number(x.clientY)-I.startY)),S=re(w,w==="commit"?M:I.startWidth,w==="commit"?m:I.startHeight),D=I.captureTarget,_=I.pointerId;return w==="cancel"&&U(),I=null,D?.releasePointerCapture?.(_),S},cleanup(){H||(H=!0,te?.disconnect(),W(),O(),l=null,v.forEach(x=>x.remove()),R.remove())}}}function Er(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function us(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function ls({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:i,setCurrentDocument:o,onBridgeRequestError:s,nextRouteReadySequence:c,windowLike:u}){let a=u.__VCP_SITE_EDIT__;if(!a){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}let d=()=>{if(u.__VCP_SITE_EDIT__!==a)throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed while reading the document")};try{switch(e.kind){case"bridge-initialize-session":{let l=u.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(l?.compositionKey&&Ue(e.payload.composition)!==l.compositionKey&&(!l.composition||Ue(e.payload.composition)!==ie(l.composition)))throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed");let f,h=!1;if(l?.composition)try{let R=await a.getDocument(e.payload.composition),v=await a.getHistoryStatus(e.payload.composition);f={...R,composition:R.data.composition,data:{document:R.data,historyStatus:v.data}},h=!0}catch(R){if(!Ae(R,"").includes("SITE_EDIT_COMPOSITION_SESSION_REQUIRED"))throw R}f??=await a.initializeSession({composition:e.payload.composition}),d(),o?.(f.data.document),h||Or(u,{composition:f.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:f.data.document.version}),n({type:"response",ok:!0,result:f});return}case"bridge-get-document":{let l=await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await a.getHistoryStatus(e.payload.composition)});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await a.getStyleContext(e.payload.composition)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=a.ensureDocumentVersion?await a.ensureDocumentVersion(e.payload.composition,Number(e.payload.minVersion)):await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=a.acknowledgeDocumentVersion?await a.acknowledgeDocumentVersion(e.payload.composition,Number(e.payload.version)):await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await a.getObjectEditContext(e.payload.key,e.payload.composition,e.payload.selectionRef)});return;case"bridge-get-class-name-source":{let l=await a.getClassNameSource(e.payload.key,e.payload.composition);n({type:"response",ok:!0,result:ds(l,e.payload.key,u.document,i?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await a.getSourceTree(e.payload.composition)});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await a.getSourceFile({path:e.payload.path,composition:e.payload.composition})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await a.resolveSourceLocation({key:e.payload.key,composition:e.payload.composition})});return;case"bridge-execute":{let l=await a.execute(e.payload.request);if(l.ok&&a.acknowledgeDocumentVersion&&us(e.payload.request)){let f=await a.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);d(),o?.(f.data)}n({type:"response",ok:!0,result:l});return}case"bridge-undo":n({type:"response",ok:!0,result:await a.undo(e.payload.composition)});return;case"bridge-redo":n({type:"response",ok:!0,result:await a.redo(e.payload.composition)});return;case"bridge-subscribe":{let l=e.payload.subscriptionId;r.get(l)?.();let f=a.subscribe(h=>{t({kind:"bridge-event",payload:{composition:h.composition,event:h,subscriptionId:l}})});r.set(l,f),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let l=e.payload.subscriptionId;r.get(l)?.(),r.delete(l),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(l){u.__VCP_SITE_EDIT__===a&&s?.(l,e),n({type:"response",ok:!1,error:Ss(l)})}}function ds(e,t,n,r){if(!e.ok)return e;let i=Se(n,{key:t},r),o=i?ps(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function ps(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function fs(e,t,n=()=>e.location.pathname){let r=e.history.pushState,i=e.history.replaceState,o=n(),s=()=>{let a=n();a!==o&&(o=a,t())},c=()=>s(),u=()=>s();return e.history.pushState=function(...d){let l=r.apply(this,d);return s(),l},e.history.replaceState=function(...d){let l=i.apply(this,d);return s(),l},e.addEventListener("popstate",c),e.addEventListener("hashchange",u),()=>{e.history.pushState=r,e.history.replaceState=i,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",u)}}function hs(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function xt(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function _t(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Or(e,t){e.dispatchEvent(new CustomEvent(sn,{detail:t}))}function ms(e,t){e.dispatchEvent(new CustomEvent(cn,{detail:t}))}function gs(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function ys(e,t){return ie(e.composition)===t}function bs(e){return Ae(e,"").includes(Nr)}function Ae(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function Br(e){let t=Ae(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Ss(e){let t=Ae(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":Br(t)?"Site edit bridge disconnected":t}function Mr(e){if(!e||typeof e!="object"||!("code"in e))return null;let t=e.code;return typeof t=="string"&&t.length>0?t:null}function Es(e){let t=Mr(e);if(t)return t===qe||t===Ge;let n=Ae(e,"");return n.includes(qe)||n.includes(Ge)}function He(e){if(Ae(e,"").includes("SITE_EDIT_RUNTIME_RELOAD_REQUIRED"))return!0;if(Mr(e))return!1;let t=Ae(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function Fr(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function ln(e){return Mi.has(qr(e))}function Is(e){return Fi.has(qr(e))}function Vr(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:Is(e.tagName),canInsertChild:ln(e.tagName),canMove:!1,canRemove:!1}}function qr(e){return e?.trim().toLowerCase()??""}function Ir(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function Cs(e,t,n){let r=Se(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=vs(r,t.ref.textSegmentIndex);return i?(i.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function vs(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Tt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function Rs(e,t,n,r,i){let o=ot(e,t,n,r),s=dn(o);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",u=be(e,s,r),a=i?.(u.key)??i?.(c);if(!Vr({operationSummary:a?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let l=xs(e,t,n,s);if(l){let f=Ts(s,l);if(f!==null)return{element:s,textNode:l,textSegmentIndex:f}}return Dt(s)?null:{element:s}}function xs(e,t,n,r){let i=_s(e,t,n);return!i||i.parentElement!==r?null:i}function _s(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Tt(o))return o;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Tt(c)?c:null}function Ts(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Tt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Tt(e){return e?.nodeType===3}function As(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function Ps(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let i=r.getAttribute("data-site-block-id")??"",o=r.getAttribute("data-vcp-edit-key")??"";return!i||!o?null:{blockId:i,blockIndex:Ns(e,r),ref:At(e,r,n),rect:Be(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function Ns(e,t){let n=t.getAttribute("data-site-block-order"),r=n===null?Number.NaN:Number(n);return Number.isInteger(r)&&r>=0?r:Math.max(0,zr(e,null).findIndex(i=>i.element===t))}function zr(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:At(e,n,t),rect:Be(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function ws(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let i=zr(e,n),o=i[0],s=i.at(-1);if(!o||!s)return null;let c=new Set(n.pageComposition.placements.map(h=>`${h.placementUnitKey}\0${h.relation}`)),u=h=>r?.(h)??n.entries.find(R=>R.key===h)??null,a=(h,R,v)=>{let A=u(h.ref.key)?.pageCompositionUnitKey;return!A||!c.has(`${A}\0${R}`)?null:{anchorBlockId:h.blockId,positionIndex:v,anchorRef:h.ref,placement:R,boundary:{top:R==="before"?h.rect.top:h.rect.top+h.rect.height,left:h.rect.left,width:h.rect.width}}},d=[],l=a(o,"before",0);l&&d.push(l),i.slice(1).forEach((h,R)=>{let v=R+1,A=a(h,"before",v);if(A){d.push(A);return}let P=i[R],O=P?a(P,"after",v):null;O&&d.push(O)});let f=a(s,"after",i.length);return f&&d.push(f),d.find(({boundary:h})=>t.clientX>=h.left&&t.clientX<=h.left+h.width&&Math.abs(t.clientY-h.top)<=cr)??null}function ot(e,t,n,r=null){let i=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let o of i){let s=dn(o),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Ur(s,r,c))return s}return null}function dn(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(pn(t))return n??t;!Ds(r)&&!n&&(n=t)}t=t.parentElement}return n}function pn(e){return e.getAttribute(Bi)!==null}function Ds(e){return ks(e.split("::")[0]??"")}function ks(e){if(!e)return!1;let t=Os(e);return t===St||t.startsWith(`${St}/`)||t.includes(`/${St}/`)||t.endsWith(`/${St}`)}function Os(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(i)}return r.join("/")}function be(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",i=$r(Wr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Jr(r)}"]`))),n,r);if(i.length<=1)return{key:Cr(n,r,0)};let o=i.indexOf(t);return o>=0?{key:Cr(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function At(e,t,n){return be(e,t,n)}function Se(e,t,n){let r=Pt(t.key)??t.key,i=$r(Wr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Jr(r)}"]`))),n,t.key);if(i.length===0)return null;let o=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<i.length?t.instanceIndex:null,s=(Pt(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let c=Bs(n,t.key);return c!==null&&c>=0&&c<i.length?i[c]??null:o!==null?i[o]??null:i[0]??null}function Cr(e,t,n){return Hr(e,t)[n]?.key??t}function Bs(e,t){let n=Pt(t);if(!n)return null;let i=Hr(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function Hr(e,t){return(e?.entries??[]).filter(n=>(Pt(n.key)??n.key)===t)}function $r(e,t,n){let r=Kr(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Ur(e,t,n){let r=Kr(t,n);return!r||e.tagName.toLowerCase()===r}function Kr(e,t){return null}var Ms=2,Fs=4;function Wr(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&Fs)!==0?-1:(r&Ms)!==0?1:0})}function Pt(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(mr);if(n<0)break;let r=Number(t.slice(n+mr.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function wt(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...fn(n),paddingTop:ue(n?.paddingTop),paddingRight:ue(n?.paddingRight),paddingBottom:ue(n?.paddingBottom),paddingLeft:ue(n?.paddingLeft),borderTopWidth:ue(n?.borderTopWidth),borderRightWidth:ue(n?.borderRightWidth),borderBottomWidth:ue(n?.borderBottomWidth),borderLeftWidth:ue(n?.borderLeftWidth),columnGap:ue(n?.columnGap),rowGap:ue(n?.rowGap)}}function fn(e){return{marginTop:ue(e?.marginTop,!0),marginRight:ue(e?.marginRight,!0),marginBottom:ue(e?.marginBottom,!0),marginLeft:ue(e?.marginLeft,!0)}}function ue(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function hn(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:Be(n.getBoundingClientRect()),margin:fn(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function Vs(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>Be(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var vr=new WeakMap,Rr=0;function nt(e){let t=vr.get(e);if(t)return t;Rr+=1;let n=`runtime-node-${Rr}`;return vr.set(e,n),n}function jr(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=Be(t),s=Z(r?.scrollX),c=Z(r?.scrollY),u=i?.position||"static";return{version:en,runtimeNodeId:nt(e),rect:{viewport:o,document:{top:o.top+c,left:o.left+s,width:o.width,height:o.height}},layout:{position:u,transform:i?.transform||"none",containingBlock:zs(e,u)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:Z(r?.innerWidth),viewportHeight:Z(r?.innerHeight),scrollContainers:qs(e)}}}function qs(e){let t=e.ownerDocument,n=t?.defaultView,r=[],i=e.parentElement;for(;i;){if(i!==t?.body&&i!==t?.documentElement){let o=n?.getComputedStyle(i),s=o?.overflowX||o?.overflow||"visible",c=o?.overflowY||o?.overflow||"visible",u=Z(i.scrollLeft),a=Z(i.scrollTop),d=u!==0||xr(s)&&Z(i.scrollWidth)>Z(i.clientWidth),l=a!==0||xr(c)&&Z(i.scrollHeight)>Z(i.clientHeight);(d||l)&&r.push({runtimeNodeId:nt(i),scrollLeft:u,scrollTop:a})}i=i.parentElement}return r}function xr(e){return["auto","scroll","overlay","hidden"].includes(e)}function zs(e,t){if(t==="fixed"){let r=_r(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:nt(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=Hs(r)??_r(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:nt(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:nt(n)}:{kind:"document"}}function _r(e,t){let n=e;for(;n;){let r=n.ownerDocument?.defaultView?.getComputedStyle(n);if(!!(r?.transform&&r.transform!=="none")||!!(r?.perspective&&r.perspective!=="none")||!!(r?.filter&&r.filter!=="none")||(r?.willChange??"").split(",").some(o=>["transform","perspective","filter"].includes(o.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function Hs(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function ye(e,t,n,r="full",i){let o=e.getBoundingClientRect(),s=n?.(t.key)??null,c=e.tagName.toLowerCase(),u=it(e),a=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:$s(e),attributes:Object.fromEntries(e.getAttributeNames().map(A=>[A,e.getAttribute(A)??""]))}:{},d=Vr({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),l=pn(e),f=!0,h=Gr(e)?.getAttribute("data-vcp-edit-key")??null,R=hn(e),v=jr(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...h?{parentKey:h}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...a,runtimeFlags:{selectable:!0,movable:d.canMove,removable:d.canRemove,textEditable:d.canUpdateText,container:l?!1:!!Dt(e)||d.canInsertChild||f&&ln(c)},layoutSnapshot:v,layout:u,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:R,childRects:R.map(({rect:A})=>A),spacing:wt(e)}}function $s(e){let t=Object.fromEntries(Object.entries(e.dataset).map(([r,i])=>[r,i??""])),n=e;for(;n;){for(let r of["cmsRecord","cmsField","cmsMediaIndex"]){let i=n.dataset[r];t[r]===void 0&&i!==void 0&&(t[r]=i)}n=n.parentElement}return t}function Tr(e,t,n,r){let i=e.getBoundingClientRect(),o=jr(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:Vs(e)};let s=hn(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:it(e),spacing:wt(e)}}function Ar(e){let t=e.layout?.display??"",n=e.spacing;return["flex","inline-flex","grid","inline-grid"].includes(t)&&!!(n&&(n.columnGap>0||n.rowGap>0)&&(e.childRects?.length??0)>=2)}function Us(e,t,n,r,i){let o=t,s=Tr(o,n,e,"detailed"),c=Ar(s),u=null,a=null,d="mutation",l=$e(e),f=l,h=!1,R=!1,v=({reason:G,sourceEventAt:ee,forceEmit:te=!1,includeDetailedGeometry:x=!1})=>{(u===null||(G==="scroll"?0:1)>=(d==="scroll"?0:1))&&(d=G,l=ee),h=h||te,R=R||x,u===null&&(u=xt(e,A))},A=()=>{let G=$e(e);u=null;let ee=d,te=l,x=h,w=R;h=!1,R=!1;let M=Se(e.document,n,r?.()??null);if(!M)return;M!==o&&(U?.unobserve(o),o=M,U?.observe(o),w=!0);let m=w?"detailed":c?"child-rects":"light",S=Tr(o,n,e,m),D=S.layoutSnapshot.rect.viewport;D.width<=0||D.height<=0||!x&&!Ks(s,S)||(s=S,m==="detailed"&&(c=Ar(S)),i(ee,S,{sourceEventAt:te,captureStartedAt:G,capturedAt:$e(e)}))},P=()=>{a!==null&&(e.clearTimeout(a),a=null)},O=()=>{P(),v({reason:"resize",sourceEventAt:$e(e),includeDetailedGeometry:!0})},K=()=>{P(),v({reason:"mutation",sourceEventAt:$e(e),includeDetailedGeometry:!0})},H=()=>{f=$e(e),v({reason:"scroll",sourceEventAt:f}),P(),a=e.setTimeout(()=>{a=null,v({reason:"scroll",sourceEventAt:f,forceEmit:!0,includeDetailedGeometry:!0})},wi)},I=e.ResizeObserver,U=typeof I=="function"?new I(O):null;U?.observe(o);let re=e.MutationObserver,W=typeof re=="function"?new re(K):null;W?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",O,{passive:!0}),e.addEventListener("scroll",H,{passive:!0});let L=e.visualViewport;return L?.addEventListener?.("resize",O,{passive:!0}),L?.addEventListener?.("scroll",H,{passive:!0}),e.document.addEventListener("scroll",H,{capture:!0,passive:!0}),e.document.addEventListener("load",K,!0),()=>{u!==null&&(_t(e,u),u=null),P(),U?.disconnect(),W?.disconnect(),e.removeEventListener("resize",O),e.removeEventListener("scroll",H),L?.removeEventListener?.("resize",O),L?.removeEventListener?.("scroll",H),e.document.removeEventListener("scroll",H,!0),e.document.removeEventListener("load",K,!0)}}function $e(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function Ks(e,t){return Ws(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&Gs(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&Ys(e.childRects,t.childRects)||t.layout!==void 0&&an(e.layout,t.layout)||t.spacing!==void 0&&an(e.spacing,t.spacing)}function Ws(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||Nt(e.rect.viewport,t.rect.viewport)||Nt(e.rect.document,t.rect.document)||e.layout.position!==t.layout.position||e.layout.transform!==t.layout.transform||e.layout.containingBlock.kind!==t.layout.containingBlock.kind||e.layout.containingBlock.kind==="element"&&t.layout.containingBlock.kind==="element"&&e.layout.containingBlock.runtimeNodeId!==t.layout.containingBlock.runtimeNodeId||e.scrollContext.scrollX!==t.scrollContext.scrollX||e.scrollContext.scrollY!==t.scrollContext.scrollY||e.scrollContext.viewportWidth!==t.scrollContext.viewportWidth||e.scrollContext.viewportHeight!==t.scrollContext.viewportHeight||js(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function js(e,t){return e.length!==t.length||e.some((n,r)=>{let i=t[r];return!i||n.runtimeNodeId!==i.runtimeNodeId||n.scrollLeft!==i.scrollLeft||n.scrollTop!==i.scrollTop})}function Gs(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||Nt(i.rect,s.rect)||an(i.margin,s.margin)})}function Ys(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>Nt(i,r[o]??i))}function an(e,t){let n=e??{},r=t??{},i=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(i).some(o=>n[o]!==r[o])}function Be(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function Nt(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function Xs(e,t,n,r,i,o,s){let c=e.document,u=ot(c,t,n,o);if(!u)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let a=i?Se(c,i,o):null;if(a&&un(u,a))return It(c,u,"self-or-descendant",o,s);if(r==="move"&&a){let v=Zs(c,u,a,o,s);if(v){let A=rn(v.child,v.targetParent,t,n,"nearest");if(A)return Ct(c,v.child,v.targetParent,A,o,s)}}let d=null,l=!1,f=u,h=u.parentElement;for(;h;){if(h.getAttribute("data-vcp-edit-key")){if(a&&un(h,a))return It(c,u,"self-or-descendant",o,s);let v=Pr(h,r,s);if(v==="accept"){d={child:f,targetParent:h};break}v==="blocked"&&(l=!0),f=h}h=h.parentElement}let R=Pr(u,r,s);if(R==="accept"){if(d){let v=rn(d.child,d.targetParent,t,n,"edge");if(v)return Ct(c,d.child,d.targetParent,v,o,s)}return Ct(c,u,u,Ls(u,t,n),o,s)}if(d){let v=rn(d.child,d.targetParent,t,n,"nearest");return Ct(c,d.child,d.targetParent,v??"after",o,s)}return R==="blocked"||l?It(c,u,"operation-boundary-blocked",o,s):It(c,u,"no-accepting-parent",o,s)}function It(e,t,n,r,i){return{anchorHit:ye(t,be(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function Ct(e,t,n,r,i,o){let s=ye(t,be(e,t,i),o,"summary"),c=ye(n,be(e,n,i),o,"summary"),u=it(n).indicatorOrientation,a=r==="append"||r==="prepend"?Js(n.getBoundingClientRect(),u,r):Qs(t.getBoundingClientRect(),u,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:u,indicatorBounds:a}}function Pr(e,t,n){if(pn(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":Dt(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return ln(o)?"accept":"not-container"}function rn(e,t,n,r,i){let o=it(t).indicatorOrientation,s=e.getBoundingClientRect(),c=o==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return i==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function Ls(e,t,n){let r=it(e).indicatorOrientation,i=e.getBoundingClientRect();return(r==="vertical"?i.width>0?(t-i.left)/i.width:.5:i.height>0?(n-i.top)/i.height:.5)<.5?"prepend":"append"}function it(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",i=n?.flexDirection,o=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(i??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(o??"row").includes("column")?"vertical":"horizontal"),{display:r,...i?{flexDirection:i}:{},...o?{gridAutoFlow:o}:{},indicatorOrientation:s}}function Js(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Qs(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function un(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function Zs(e,t,n,r,i){let o=ec(e,t,n,r,i);if(o)return o;let s=Gr(n);if(!s||t===s)return null;let c=t,u=t.getAttribute("data-vcp-edit-key")?t:null;for(;c&&c!==s;)c.getAttribute("data-vcp-edit-key")&&(u=c),c=c.parentElement;return c!==s||!u||u===s||u===n||un(u,n)?null:{child:u,targetParent:s}}function ec(e,t,n,r,i){return null}function Gr(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function Dt(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=Dt(n);if(r)return r}return null}function vt(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:Z(e.scrollX),scrollY:Z(e.scrollY),scrollWidth:Math.max(Z(t?.scrollWidth),Z(n?.scrollWidth),Z(e.innerWidth)),scrollHeight:Math.max(Z(t?.scrollHeight),Z(n?.scrollHeight),Z(e.innerHeight)),viewportWidth:Z(e.innerWidth),viewportHeight:Z(e.innerHeight)}}function tc(e,t){Object.entries(t.attributes??{}).forEach(([r,i])=>{if(i===null){e.removeAttribute(r);return}e.setAttribute(r,i)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,i])=>{if(n.has(r))return;let o=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(i==null||i===""){o.removeProperty(s);return}o.setProperty(s,String(i))}),t.styleDeclarations?.forEach(r=>{let i=e.style,o=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){i.removeProperty(o);return}i.setProperty(o,String(s),r.priority)})}var nc=500,tt=new Map;function rc(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function oc(e,t){if(tt.size>=nc){let n=tt.keys().next().value;n&&tt.delete(n)}tt.set(e,t)}var rt=new Set;function ic(e,t){let n=e.documentElement?.style,r=new Set;for(let[i,o]of Object.entries(t.variables??{}))i.startsWith("--")&&(r.add(i),n?.setProperty(i,o));for(let i of rt)r.has(i)||n?.removeProperty(i);rt.clear();for(let i of r)rt.add(i);lc(e,t.stylesheets??[])}function sc(e){let t=e.documentElement?.style;for(let n of rt)t?.removeProperty(n);rt.clear();for(let n of Lr(e))n.remove()}function cc(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,i=r?e.defaultView?.getComputedStyle(r):null,o={};for(let s of n){let c=Yr(i,s);c&&(o[s]=c)}return o}function Yr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return Xr(e,r,n)}function Xr(e,t,n){if(!t)return null;let r=ac(t);if(!r)return t;let i=Yr(e,r.name,n);return i||(r.fallback?Xr(e,r.fallback,n)??r.fallback:null)}function ac(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=uc(n),i=r>=0?n.slice(0,r).trim():n;if(!i.startsWith("--"))return null;let o=r>=0?n.slice(r+1).trim():null;return{name:i,fallback:o||null}}function uc(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function lc(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of Lr(e)){let s=o.getAttribute("href")??"";if(!n.has(s)||r.has(s)){o.remove();continue}r.set(s,o)}let i=e.head;if(i)for(let o of n){if(r.has(o))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(wr,"true"),s.setAttribute("href",o),i.appendChild(s)}}function Lr(e){return Array.from(e.querySelectorAll(`link[${wr}]`))}function dc(e,t,n,r,i={}){let o=i.textNode?pc(e.document,i.textNode):null;if(i.textNode&&!o)throw new Error("Failed to prepare text segment editor");let s=o?.element??t,c=s.textContent??"",u=o?void 0:t.innerHTML,a=fc(s),d=!1,l=()=>{e.document.removeEventListener("pointerdown",h,!0),s.removeEventListener("keydown",R),s.removeEventListener("blur",v),s.removeEventListener("input",A),mc(s,a)},f=P=>{if(d)return;d=!0;let O=s.textContent??"";if(l(),P==="cancel"){o?.restore(c),o||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(O),P==="commit"&&O!==c){i.onCommitSnapshot?.({ref:n,initialText:c,...u!==void 0?{initialHtml:u}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:O}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function h(P){let O=P.target;O&&s.contains(O)||f("commit")}function R(P){if(P.key==="Escape"){P.preventDefault(),f("cancel");return}P.key==="Enter"&&(P.metaKey||P.ctrlKey)&&(P.preventDefault(),f("commit"))}function v(){f("commit")}function A(){r({kind:"text-edit-input",payload:{ref:n,hit:ye(t,n,void 0,"full")}})}return hc(s),e.document.addEventListener("pointerdown",h,!0),s.addEventListener("keydown",R),s.addEventListener("blur",v),s.addEventListener("input",A),bc(s),Sc(s,e.document),l}function pc(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(i){t.nodeValue=i,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function fc(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function hc(e){gc(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function mc(e,t){on(e,"contenteditable",t.contentEditable),on(e,"spellcheck",t.spellcheck),on(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function gc(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function on(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function yc(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function bc(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function Sc(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function Jr(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Z(e){let t=Number(e);return Number.isFinite(t)?t:0}import Ec from"node:http";import st from"node:fs";import{createHash as no,randomBytes as Ic,timingSafeEqual as Cc}from"node:crypto";import Ee from"node:path";import{WebSocket as ro,WebSocketServer as vc}from"ws";import{createPreviewSiteEditEngineRuntime as Rc,openFileHistoryStore as xc,resolveManagedPageTemplateComposition as _c,scanSiteEditCompositionsFromFiles as Tc}from"@vcp-dev/site-edit-engine";import{resolveNextAppRouteId as Ac,scanNextAppRouterRoutesFromFiles as Pc}from"@vcp-dev/site-edit-engine/next-app-router";import{SiteEditSourceWatcher as Nc}from"@vcp-dev/site-edit-engine/source-watcher";var kt=class{constructor(){this.tail=Promise.resolve()}run(t){let n=this.tail.then(t,t);return this.tail=n.then(()=>{},()=>{}),n}};import{SiteEditOperationRequestSchema as wc,computeSiteEditCompositionKey as Me}from"@vcp-dev/contracts";var Dc="127.0.0.1",kc=30218,Oc="/__vcp/site-edit/bridge",oo=6*1024*1024,Bc=oo*2,Mc=3e3,Qr=50,yn=".vcp/current-snapshot.json",Zr="__VCP_SITE_EDIT_BRIDGE_SERVERS__";function xu(e){let t=so(e),n=ao(t),r=co(),i=r.get(n);if(i)return i;let o=new Ot(t);r.set(n,o);try{o.start()}catch(s){throw r.delete(n),o.stop(),s}return o}function io(e,t,n={}){let r=new Ot(so(t),e,!1,n);return r.start({listen:!1}),r}var Ot=class{constructor(t,n=Ec.createServer((o,s)=>{s.writeHead(404),s.end("VCP site edit bridge server")}),r=!0,i={}){this.options=t,this.server=n,this.closeHttpServerOnStop=r,this.dependencies=i,this.runtime=null,this.activeHistorySessionId=null,this.historySessionTransition=Promise.resolve(),this.mutationQueue=new kt,this.eventListeners=new Set,this.routes=[],this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=null,this.launchCandidateEntries=null,this.stopWatching=null,this.stopWebSocketServer=null,this.pendingChangedFiles=new Set,this.fileChangeTimer=null,this.isStarted=!1,this.stopping=!1,this.runtimeVersionFloors=new Map,this.activeHistoryStore=null,this.versionPersistence=Promise.resolve()}start(t={}){if(this.isStarted)return;this.stopping=!1;try{st.mkdirSync(Ee.join(this.options.projectRoot,".vcp"),{recursive:!0})}catch(r){console.warn(`[vcp-site-edit] failed to ensure .vcp directory: ${r instanceof Error?r.message:String(r)}`)}this.refreshCompositions(!0),this.isStarted=!0,this.createRuntime();let n=Hc({server:this.server,path:this.options.path,sessionKey:this.options.sessionKey,host:this.options.host,allowedOrigins:this.options.allowedOrigins,engine:this.createBridgeEngine()});this.stopWebSocketServer=n.stop,this.stopWatching=new Nc({projectRoot:this.options.projectRoot,watch_dirs:Fc(this.options.runtime.watch_dirs),interval_ms:this.options.runtime.watch_interval_ms,debounce_ms:this.options.runtime.watch_debounce_ms??Qr,max_dirs:this.options.runtime.watch_max_dirs,max_files:this.options.runtime.watch_max_files,max_depth:this.options.runtime.watch_max_depth,max_startup_ms:this.options.runtime.watch_max_startup_ms,on_change:r=>this.handleFileChanged(r),on_batch_change:r=>this.handleFilesChanged(r)}).start(),t.listen!==!1&&this.server.listen(this.options.port,this.options.host)}getHealth(){let t=!!this.runtime&&!this.compositionResolutionError;return{ok:this.isStarted&&t,bridgePath:this.options.path,runtimeReady:t,routesIndexed:this.routes.length,sessionRequired:!!this.options.sessionKey}}stop(){this.stopping=!0,this.stopWatching?.(),this.stopWatching=null,this.flushChangedFiles(),this.fileChangeTimer&&(clearTimeout(this.fileChangeTimer),this.fileChangeTimer=null),this.stopWebSocketServer?.(),this.stopWebSocketServer=null,this.runtime?.dispose(),this.runtime=null,this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=null,this.closeHttpServerOnStop&&this.server.close();let t=co(),n=ao(this.options);t.get(n)===this&&t.delete(n),this.isStarted=!1}createRuntime(t,n=null){let r=this.runtime;this.activeHistoryStore=t??null;let i=(this.dependencies.createRuntime??Rc)({...this.options.tenantId?{tenantId:this.options.tenantId}:{},siteId:this.options.siteId,snapshotId:this.options.snapshotId,projectRoot:this.options.projectRoot,compositions:this.compositions,onEvent:o=>{"version"in o&&typeof o.version=="number"&&this.recordRuntimeVersion(o.version,"composition"in o?o.composition:void 0);for(let s of this.eventListeners)s(o)},...t?{historyStore:t}:{},...this.getInitialDocumentVersions().length>0?{initialDocumentVersions:this.getInitialDocumentVersions()}:{}});this.runtime=i,this.activeHistorySessionId=n,r?.dispose()}createBridgeEngine(){return{resolveComposition:t=>this.resolveComposition(t),initializeSession:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)throw new Error(`${n.code}: ${n.message}`);let r=qc(t.composition),i=this.getRuntime(),o=Ce(r);await i.initializeComposition(o);let c=i.getDocument(o).data;await this.recordRuntimeVersion(c.version,r);let u=(await i.getHistoryStatus()).data;return{ok:!0,composition:r,data:{document:c,historyStatus:u}}}),getDocument:async t=>{let n=this.getRuntime(),r=Ce(t);await n.initializeComposition(r);let i=n.getDocument(r);return await this.recordRuntimeVersion(i.data.version,t),{...i,composition:t}},getHistoryStatus:async t=>({...await this.getRuntime().getHistoryStatus(),composition:t}),getStyleContext:async t=>this.getRuntime().getStyleContext(Ce(t)),getObjectEditContext:async(t,n,r)=>this.getRuntime().getObjectEditContext(t,Ce(n),r),getClassNameSource:async(t,n)=>this.getRuntime().getClassNameSource(t,Ce(n)),getSourceTree:async t=>this.getRuntime().getSourceTree(Ce(t)),getSourceFile:async t=>this.getRuntime().getSourceFile({path:t.path,composition:Ce(t.composition)}),resolveSourceLocation:async t=>this.getRuntime().resolveSourceLocation({key:t.key,composition:Ce(t.composition)}),execute:(t,n)=>this.mutationQueue.run(async()=>{let r=await this.bindHistorySession(this.options.snapshotId);if(!r.ok)return mn(r,t);let i=await this.getRuntime().executeOperation(t);return i.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(i.data.resultVersion,i.composition),i}),undo:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)return mn(n,void 0,t);let r=await this.getRuntime().undo();return r.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(r.data.resultVersion,r.composition??t),r.composition?r:{...r,composition:t}}),redo:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)return mn(n,void 0,t);let r=await this.getRuntime().redo();return r.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(r.data.resultVersion,r.composition??t),r.composition?r:{...r,composition:t}}),subscribe:t=>(this.eventListeners.add(t),()=>this.eventListeners.delete(t))}}async bindHistorySession(t){if(!this.options.historyRoot)return{ok:!1,code:"RECOVERY_PERSIST_FAILED",message:"Durable edit history is not configured."};if(this.activeHistorySessionId===t)return{ok:!0};let n=this.historySessionTransition.then(async()=>{if(this.activeHistorySessionId===t)return;let r=await(this.dependencies.openHistoryStore??xc)(zc({root:this.options.historyRoot,siteId:this.options.siteId,snapshotId:this.options.snapshotId,editingSessionId:t}));if(!this.isStarted)return;let i=r.readDocumentVersion?await r.readDocumentVersion():0,o=this.compositions[0]?.context;if(o){let s=Me(o);this.runtimeVersionFloors.set(s,Math.max(this.runtimeVersionFloors.get(s)??0,i))}this.createRuntime(r,t)});this.historySessionTransition=n.catch(()=>{});try{return await n,{ok:!0}}catch{return{ok:!1,code:"RECOVERY_PERSIST_FAILED",message:"Durable edit history could not be opened."}}}recordRuntimeVersion(t,n){let r=n?Me(n):null;r&&this.runtimeVersionFloors.set(r,Math.max(this.runtimeVersionFloors.get(r)??0,t));let i=this.activeHistoryStore;if(!i?.writeDocumentVersion)return Promise.resolve();let o=r?this.runtimeVersionFloors.get(r)??t:t;return this.versionPersistence=this.versionPersistence.then(()=>i.writeDocumentVersion(o)).catch(()=>{}),this.versionPersistence}handleFileChanged(t){this.handleFilesChanged([t])}handleFilesChanged(t){for(let r of t)this.pendingChangedFiles.add(r);this.fileChangeTimer&&clearTimeout(this.fileChangeTimer);let n=this.options.runtime.watch_debounce_ms??Qr;this.fileChangeTimer=setTimeout(()=>{this.fileChangeTimer=null,this.flushChangedFiles()},n),this.fileChangeTimer?.unref?.()}flushChangedFiles(){if(this.fileChangeTimer&&(clearTimeout(this.fileChangeTimer),this.fileChangeTimer=null),this.pendingChangedFiles.size===0)return;let t=[...this.pendingChangedFiles].sort((n,r)=>n.localeCompare(r));if(this.pendingChangedFiles.clear(),t.some(Xc)&&this.scheduleSnapshotIdentityAdvance(),!!this.refreshCompositions(!1))for(let n of t)this.runtime?.notifyFileChanged(n)}scheduleSnapshotIdentityAdvance(){if(this.stopping||!this.isStarted)return;let t=this.readCurrentSnapshotMarker();!t||t===this.options.snapshotId||this.mutationQueue.run(()=>this.advanceSnapshotId(t)).catch(n=>{console.warn(`[vcp-site-edit] snapshot identity advance failed: ${n instanceof Error?n.message:String(n)}`)})}readCurrentSnapshotMarker(){try{let t=st.readFileSync(Ee.join(this.options.projectRoot,yn),"utf8"),n=JSON.parse(t),r=typeof n.snapshot_id=="string"?n.snapshot_id:"";return!r||bn(r)!==r?(console.warn("[vcp-site-edit] current-snapshot marker has no valid snapshot_id"),null):r}catch(t){return console.warn(`[vcp-site-edit] current-snapshot marker unreadable: ${t instanceof Error?t.message:String(t)}`),null}}async advanceSnapshotId(t){if(this.stopping||!this.isStarted||t===this.options.snapshotId)return;let n=this.options.snapshotId;this.options.snapshotId=t;try{if(this.options.historyRoot){let i=await this.bindHistorySession(t);if(!i.ok)throw new Error(`${i.code}: ${i.message}`)}else this.createRuntime()}catch(i){this.options.snapshotId=n,console.warn(`[vcp-site-edit] snapshot identity advance rolled back to ${n}: ${i instanceof Error?i.message:String(i)}`);return}let r=new Date().toISOString();for(let i of this.compositions){let o={type:"site-edit.snapshot.changed",siteId:this.options.siteId,composition:i.context,snapshotId:t,previousSnapshotId:n,at:r};for(let s of this.eventListeners)try{s(o)}catch(c){console.warn(`[vcp-site-edit] snapshot.changed listener failed: ${c instanceof Error?c.message:String(c)}`)}}try{this.options.onSnapshotIdChanged?.(t,n)}catch(i){console.warn(`[vcp-site-edit] onSnapshotIdChanged callback failed: ${i instanceof Error?i.message:String(i)}`)}}refreshCompositions(t=!1){try{let n=Vc(this.options.projectRoot),r=Pc(n),i=r.length>0?r:(this.options.runtime.routes??[]).map(a=>({...a})),o=Tc({files:n});if(o.length===0)throw new Error("No canonical App Router composition is indexed by the preview bridge.");let s=JSON.stringify(o.filter(a=>a.context.effectiveTemplateId!==void 0).map(a=>a.entryFile).sort());if(t&&(this.launchCandidateEntries=s),this.launchCandidateEntries!==s)throw new Error("SITE_EDIT_RUNTIME_RELOAD_REQUIRED: Candidate route collection changed since preview launch");let c=new Map(this.compositions.map(a=>[Me(a.context),a])),u=new Map(o.map(a=>[Me(a.context),a]));if(this.runtime){for(let[a,d]of c){let l=u.get(a);(!l||l.entryFile!==d.entryFile)&&this.runtime.unregisterComposition(Ce(d.context))}for(let[a,d]of u){let l=c.get(a);(!l||l.entryFile!==d.entryFile)&&this.runtime.registerComposition(d.context,d.entryFile)}}return this.routes=i,this.compositions=o,this.compositionFiles=n,this.compositionResolutionError=null,!0}catch(n){let r=n instanceof Error?n:new Error(String(n));if(this.compositionResolutionError=r,t)throw r;return!1}}resolveComposition(t){if(this.compositionResolutionError)throw this.compositionResolutionError;let n=Ac(t.routeId,this.routes,this.options.basePath);if(!n)throw new Error(`Route is not indexed by the preview bridge: ${t.routeId}`);let r=this.routes.find(s=>s.routeId===n);if(!r)throw new Error(`Route is not indexed by the preview bridge: ${t.routeId}`);let i=_c({selector:{routeId:n,...t.templateId!==void 0?{templateId:t.templateId}:{}},files:this.compositionFiles,canonicalEntryFile:r.entryFile}),o=Me(i.context);if(!this.compositions.some(s=>Me(s.context)===o))throw new Error(`Composition is not registered by the preview bridge: ${o}`);return i}getInitialDocumentVersions(){return this.compositions.flatMap(t=>{let n=this.runtimeVersionFloors.get(Me(t.context));return n===void 0?[]:[{composition:t.context,version:n}]})}getRuntime(){if(!this.runtime)throw new Error("VCP site edit preview bridge runtime is not ready");return this.runtime}};function so(e){return{tenantId:e.tenantId,siteId:e.siteId,snapshotId:e.snapshotId,projectRoot:Ee.resolve(e.projectRoot??process.cwd()),basePath:e.basePath??"",host:e.host??Dc,port:e.port??kc,path:e.path??Oc,sessionKey:e.sessionKey??Yc(),historyRoot:e.historyRoot,allowedOrigins:e.allowedOrigins??[],runtime:e.runtime??{},onSnapshotIdChanged:e.onSnapshotIdChanged}}function Fc(e){let t=["app","src/app","components/site","src/components/site","lib/generated","src/lib/generated","public"];return[...new Set([...e?.length?e:t,".vcp"])]}function Vc(e){let t=[],n=["app","src/app",".vcp"],r=new Set([".git",".next",".turbo","coverage","dist","node_modules","output","snapshot-store"]),i=o=>{if(!st.existsSync(o))return;let s;try{s=st.readdirSync(o,{withFileTypes:!0})}catch{return}for(let c of s){if(c.name.startsWith(".")&&c.name!==".vcp")continue;if(c.isDirectory()){if(r.has(c.name))continue;i(Ee.join(o,c.name));continue}if(!c.isFile())continue;let u=Ee.join(o,c.name),a="";try{a=st.readFileSync(u,"utf8")}catch{}t.push({path:Ee.relative(e,u).replaceAll(Ee.sep,"/"),content:a})}};for(let o of n)i(Ee.join(e,o));return t.sort((o,s)=>o.path.localeCompare(s.path))}function qc(e){if(!e||typeof e!="object"||typeof e.routeId!="string")throw new Error("Normalized composition context is required.");if("effectiveTemplateId"in e)return e;let t=e;return{routeId:t.routeId,...t.templateId?{effectiveTemplateId:t.templateId}:{}}}function Ce(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function zc(e){return Ee.join(Ee.resolve(e.root),bn(e.siteId),bn(e.snapshotId),no("sha256").update(e.editingSessionId).digest("hex").slice(0,32))}function bn(e){return/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)&&e!=="."&&e!==".."?e:no("sha256").update(e).digest("hex").slice(0,32)}function co(){let e=globalThis;return e[Zr]??=new Map,e[Zr]}function ao(e){return`${e.projectRoot}:${e.host}:${e.port}:${e.path}:${e.historyRoot??""}`}function mn(e,t,n){let r=n??(t?.composition?{routeId:t.composition.routeId,...t.composition.templateId?{effectiveTemplateId:t.composition.templateId}:{}}:void 0);if(!r)throw new Error("A normalized composition is required to construct a mutation result.");return{ok:!1,composition:r,error:{code:e.code,message:e.message},data:{requestId:t?.id??"mutation-context",kind:t?.kind??"update-text",composition:r,target:t?.target??{kind:"node",key:""},resultVersion:t?.documentVersion??0}}}function Hc(e){let t=new vc({maxPayload:oo,noServer:!0}),n=new WeakSet,r=o=>{new dt({socket:new Sn(o),engine:e.engine,validateOperationRequest:s=>wc.safeParse(s).success})},i=(o,s,c)=>{if(!$c(o,e))return;let u=Uc(o,e);if(!u){s.write(`HTTP/1.1 401 Unauthorized\r
|
|
41
|
+
`,u.appendChild(R);let v=is.map(x=>{let w=c.createElement("div");return w.setAttribute(h,x),w.setAttribute("aria-hidden","true"),a.appendChild(w),w}),A=null,P=null,O=()=>{A?.removeAttribute(f),P?.(),P=null,A=null},K=x=>{O(),A=x,P=Rt(x,o),x.setAttribute(f,"true"),v.forEach(w=>w.style.removeProperty("display"))};K(l);let H=!1,I=null,U=()=>{if(!I||!l)return;let x=(w,M,m)=>{M?l.style.setProperty(w,M,m):l.style.removeProperty(w)};x("width",I.widthValue,I.widthPriority),x("height",I.heightValue,I.heightPriority)},re=(x,w,M)=>I?{version:1,phase:x,sessionId:I.sessionId,pointerId:I.pointerId,edge:I.edge,ref:t,startWidth:I.startWidth,startHeight:I.startHeight,width:w,height:M,baselineStyleDeclarations:[{property:"width",value:I.widthValue||null,...I.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:I.heightValue||null,...I.heightPriority==="important"?{priority:"important"}:{}}]}:null,W=()=>{if(!I)return null;let x=re("cancel",I.startWidth,I.startHeight),w=I.captureTarget,M=I.pointerId,m=I.currentX,S=I.currentY;return U(),I=null,w?.releasePointerCapture?.(M),x&&r?.({clientX:m,clientY:S,session:x}),x},L=x=>{if(!I||!l?.isConnected||x.pointerId!==I.pointerId)return!1;I.currentX=Number(x.clientX),I.currentY=Number(x.clientY);let w=I.currentX-I.startX,M=I.currentY-I.startY,m=Math.max(1,Math.round(I.startWidth+w)),S=Math.max(1,Math.round(I.startHeight+M));return(I.edge==="e"||I.edge==="se")&&l.style.setProperty("width",`${m}px`,"important"),(I.edge==="s"||I.edge==="se")&&l.style.setProperty("height",`${S}px`,"important"),!0},G=()=>{if(H)return;let x=d();x===l&&x?.isConnected||(W(),O(),l=x,l?.isConnected?K(l):v.forEach(w=>w.style.setProperty("display","none","important")))},ee=e.MutationObserver,te=typeof ee=="function"?new ee(G):null;return te?.observe(c.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(x,w){if(H||I||!l?.isConnected)return null;let M=l.getBoundingClientRect();return I={sessionId:`resize-${i}-${x.pointerId}`,pointerId:x.pointerId,edge:w,startX:Number(x.clientX),startY:Number(x.clientY),currentX:Number(x.clientX),currentY:Number(x.clientY),startWidth:M.width,startHeight:M.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:x.target},re("start",M.width,M.height)},update:L,finish(x,w){if(!I||x.pointerId!==I.pointerId)return null;w==="commit"&&L(x);let M=Math.max(1,Math.round(I.startWidth+Number(x.clientX)-I.startX)),m=Math.max(1,Math.round(I.startHeight+Number(x.clientY)-I.startY)),S=re(w,w==="commit"?M:I.startWidth,w==="commit"?m:I.startHeight),D=I.captureTarget,_=I.pointerId;return w==="cancel"&&U(),I=null,D?.releasePointerCapture?.(_),S},cleanup(){H||(H=!0,te?.disconnect(),W(),O(),l=null,v.forEach(x=>x.remove()),R.remove())}}}function Er(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function us(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function ls({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:i,setCurrentDocument:o,onBridgeRequestError:s,nextRouteReadySequence:c,windowLike:u}){let a=u.__VCP_SITE_EDIT__;if(!a){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}let d=()=>{if(u.__VCP_SITE_EDIT__!==a)throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed while reading the document")};try{switch(e.kind){case"bridge-initialize-session":{let l=u.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(l?.compositionKey&&Ue(e.payload.composition)!==l.compositionKey&&(!l.composition||Ue(e.payload.composition)!==ie(l.composition)))throw new Error("SITE_EDIT_COMPOSITION_SESSION_MISMATCH: navigation changed");let f,h=!1;if(l?.composition)try{let R=await a.getDocument(e.payload.composition),v=await a.getHistoryStatus(e.payload.composition);f={...R,composition:R.data.composition,data:{document:R.data,historyStatus:v.data}},h=!0}catch(R){if(!Ae(R,"").includes("SITE_EDIT_COMPOSITION_SESSION_REQUIRED"))throw R}f??=await a.initializeSession({composition:e.payload.composition}),d(),o?.(f.data.document),h||Or(u,{composition:f.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:f.data.document.version}),n({type:"response",ok:!0,result:f});return}case"bridge-get-document":{let l=await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await a.getHistoryStatus(e.payload.composition)});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await a.getStyleContext(e.payload.composition)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=a.ensureDocumentVersion?await a.ensureDocumentVersion(e.payload.composition,Number(e.payload.minVersion)):await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let l=a.acknowledgeDocumentVersion?await a.acknowledgeDocumentVersion(e.payload.composition,Number(e.payload.version)):await a.getDocument(e.payload.composition);d(),o?.(l.data),n({type:"response",ok:!0,result:l});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await a.getObjectEditContext(e.payload.key,e.payload.composition,e.payload.selectionRef)});return;case"bridge-get-class-name-source":{let l=await a.getClassNameSource(e.payload.key,e.payload.composition);n({type:"response",ok:!0,result:ds(l,e.payload.key,u.document,i?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await a.getSourceTree(e.payload.composition)});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await a.getSourceFile({path:e.payload.path,composition:e.payload.composition})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await a.resolveSourceLocation({key:e.payload.key,composition:e.payload.composition})});return;case"bridge-execute":{let l=await a.execute(e.payload.request);if(l.ok&&a.acknowledgeDocumentVersion&&us(e.payload.request)){let f=await a.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);d(),o?.(f.data)}n({type:"response",ok:!0,result:l});return}case"bridge-undo":n({type:"response",ok:!0,result:await a.undo(e.payload.composition)});return;case"bridge-redo":n({type:"response",ok:!0,result:await a.redo(e.payload.composition)});return;case"bridge-subscribe":{let l=e.payload.subscriptionId;r.get(l)?.();let f=a.subscribe(h=>{t({kind:"bridge-event",payload:{composition:h.composition,event:h,subscriptionId:l}})});r.set(l,f),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let l=e.payload.subscriptionId;r.get(l)?.(),r.delete(l),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(l){u.__VCP_SITE_EDIT__===a&&s?.(l,e),n({type:"response",ok:!1,error:Ss(l)})}}function ds(e,t,n,r){if(!e.ok)return e;let i=Se(n,{key:t},r),o=i?ps(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function ps(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function fs(e,t,n=()=>e.location.pathname){let r=e.history.pushState,i=e.history.replaceState,o=n(),s=()=>{let a=n();a!==o&&(o=a,t())},c=()=>s(),u=()=>s();return e.history.pushState=function(...d){let l=r.apply(this,d);return s(),l},e.history.replaceState=function(...d){let l=i.apply(this,d);return s(),l},e.addEventListener("popstate",c),e.addEventListener("hashchange",u),()=>{e.history.pushState=r,e.history.replaceState=i,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",u)}}function hs(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function xt(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function _t(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Or(e,t){e.dispatchEvent(new CustomEvent(sn,{detail:t}))}function ms(e,t){e.dispatchEvent(new CustomEvent(cn,{detail:t}))}function gs(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function ys(e,t){return ie(e.composition)===t}function bs(e){return Ae(e,"").includes(Nr)}function Ae(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function Br(e){let t=Ae(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Ss(e){let t=Ae(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":Br(t)?"Site edit bridge disconnected":t}function Mr(e){if(!e||typeof e!="object"||!("code"in e))return null;let t=e.code;return typeof t=="string"&&t.length>0?t:null}function Es(e){let t=Mr(e);if(t)return t===qe||t===Ge;let n=Ae(e,"");return n.includes(qe)||n.includes(Ge)}function He(e){if(Ae(e,"").includes("SITE_EDIT_RUNTIME_RELOAD_REQUIRED"))return!0;if(Mr(e))return!1;let t=Ae(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function Fr(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function ln(e){return Mi.has(qr(e))}function Is(e){return Fi.has(qr(e))}function Vr(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:Is(e.tagName),canInsertChild:ln(e.tagName),canMove:!1,canRemove:!1}}function qr(e){return e?.trim().toLowerCase()??""}function Ir(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function Cs(e,t,n){let r=Se(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=vs(r,t.ref.textSegmentIndex);return i?(i.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function vs(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Tt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function Rs(e,t,n,r,i){let o=ot(e,t,n,r),s=dn(o);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",u=be(e,s,r),a=i?.(u.key)??i?.(c);if(!Vr({operationSummary:a?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let l=xs(e,t,n,s);if(l){let f=Ts(s,l);if(f!==null)return{element:s,textNode:l,textSegmentIndex:f}}return Dt(s)?null:{element:s}}function xs(e,t,n,r){let i=_s(e,t,n);return!i||i.parentElement!==r?null:i}function _s(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Tt(o))return o;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Tt(c)?c:null}function Ts(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Tt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Tt(e){return e?.nodeType===3}function As(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function Ps(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let i=r.getAttribute("data-site-block-id")??"",o=r.getAttribute("data-vcp-edit-key")??"";return!i||!o?null:{blockId:i,blockIndex:Ns(e,r),ref:At(e,r,n),rect:Be(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function Ns(e,t){let n=t.getAttribute("data-site-block-order"),r=n===null?Number.NaN:Number(n);return Number.isInteger(r)&&r>=0?r:Math.max(0,zr(e,null).findIndex(i=>i.element===t))}function zr(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:At(e,n,t),rect:Be(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function ws(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let i=zr(e,n),o=i[0],s=i.at(-1);if(!o||!s)return null;let c=new Set(n.pageComposition.placements.map(h=>`${h.placementUnitKey}\0${h.relation}`)),u=h=>r?.(h)??n.entries.find(R=>R.key===h)??null,a=(h,R,v)=>{let A=u(h.ref.key)?.pageCompositionUnitKey;return!A||!c.has(`${A}\0${R}`)?null:{anchorBlockId:h.blockId,positionIndex:v,anchorRef:h.ref,placement:R,boundary:{top:R==="before"?h.rect.top:h.rect.top+h.rect.height,left:h.rect.left,width:h.rect.width}}},d=[],l=a(o,"before",0);l&&d.push(l),i.slice(1).forEach((h,R)=>{let v=R+1,A=a(h,"before",v);if(A){d.push(A);return}let P=i[R],O=P?a(P,"after",v):null;O&&d.push(O)});let f=a(s,"after",i.length);return f&&d.push(f),d.find(({boundary:h})=>t.clientX>=h.left&&t.clientX<=h.left+h.width&&Math.abs(t.clientY-h.top)<=cr)??null}function ot(e,t,n,r=null){let i=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let o of i){let s=dn(o),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Ur(s,r,c))return s}return null}function dn(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(pn(t))return n??t;!Ds(r)&&!n&&(n=t)}t=t.parentElement}return n}function pn(e){return e.getAttribute(Bi)!==null}function Ds(e){return ks(e.split("::")[0]??"")}function ks(e){if(!e)return!1;let t=Os(e);return t===St||t.startsWith(`${St}/`)||t.includes(`/${St}/`)||t.endsWith(`/${St}`)}function Os(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(i)}return r.join("/")}function be(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",i=$r(Wr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Jr(r)}"]`))),n,r);if(i.length<=1)return{key:Cr(n,r,0)};let o=i.indexOf(t);return o>=0?{key:Cr(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function At(e,t,n){return be(e,t,n)}function Se(e,t,n){let r=Pt(t.key)??t.key,i=$r(Wr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Jr(r)}"]`))),n,t.key);if(i.length===0)return null;let o=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<i.length?t.instanceIndex:null,s=(Pt(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let c=Bs(n,t.key);return c!==null&&c>=0&&c<i.length?i[c]??null:o!==null?i[o]??null:i[0]??null}function Cr(e,t,n){return Hr(e,t)[n]?.key??t}function Bs(e,t){let n=Pt(t);if(!n)return null;let i=Hr(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function Hr(e,t){return(e?.entries??[]).filter(n=>(Pt(n.key)??n.key)===t)}function $r(e,t,n){let r=Kr(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Ur(e,t,n){let r=Kr(t,n);return!r||e.tagName.toLowerCase()===r}function Kr(e,t){return null}var Ms=2,Fs=4;function Wr(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&Fs)!==0?-1:(r&Ms)!==0?1:0})}function Pt(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(mr);if(n<0)break;let r=Number(t.slice(n+mr.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function wt(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...fn(n),paddingTop:ue(n?.paddingTop),paddingRight:ue(n?.paddingRight),paddingBottom:ue(n?.paddingBottom),paddingLeft:ue(n?.paddingLeft),borderTopWidth:ue(n?.borderTopWidth),borderRightWidth:ue(n?.borderRightWidth),borderBottomWidth:ue(n?.borderBottomWidth),borderLeftWidth:ue(n?.borderLeftWidth),columnGap:ue(n?.columnGap),rowGap:ue(n?.rowGap)}}function fn(e){return{marginTop:ue(e?.marginTop,!0),marginRight:ue(e?.marginRight,!0),marginBottom:ue(e?.marginBottom,!0),marginLeft:ue(e?.marginLeft,!0)}}function ue(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function hn(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:Be(n.getBoundingClientRect()),margin:fn(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function Vs(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>Be(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var vr=new WeakMap,Rr=0;function nt(e){let t=vr.get(e);if(t)return t;Rr+=1;let n=`runtime-node-${Rr}`;return vr.set(e,n),n}function jr(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=Be(t),s=Z(r?.scrollX),c=Z(r?.scrollY),u=i?.position||"static";return{version:en,runtimeNodeId:nt(e),rect:{viewport:o,document:{top:o.top+c,left:o.left+s,width:o.width,height:o.height}},layout:{position:u,transform:i?.transform||"none",containingBlock:zs(e,u)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:Z(r?.innerWidth),viewportHeight:Z(r?.innerHeight),scrollContainers:qs(e)}}}function qs(e){let t=e.ownerDocument,n=t?.defaultView,r=[],i=e.parentElement;for(;i;){if(i!==t?.body&&i!==t?.documentElement){let o=n?.getComputedStyle(i),s=o?.overflowX||o?.overflow||"visible",c=o?.overflowY||o?.overflow||"visible",u=Z(i.scrollLeft),a=Z(i.scrollTop),d=u!==0||xr(s)&&Z(i.scrollWidth)>Z(i.clientWidth),l=a!==0||xr(c)&&Z(i.scrollHeight)>Z(i.clientHeight);(d||l)&&r.push({runtimeNodeId:nt(i),scrollLeft:u,scrollTop:a})}i=i.parentElement}return r}function xr(e){return["auto","scroll","overlay","hidden"].includes(e)}function zs(e,t){if(t==="fixed"){let r=_r(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:nt(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=Hs(r)??_r(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:nt(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:nt(n)}:{kind:"document"}}function _r(e,t){let n=e;for(;n;){let r=n.ownerDocument?.defaultView?.getComputedStyle(n);if(!!(r?.transform&&r.transform!=="none")||!!(r?.perspective&&r.perspective!=="none")||!!(r?.filter&&r.filter!=="none")||(r?.willChange??"").split(",").some(o=>["transform","perspective","filter"].includes(o.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function Hs(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function ye(e,t,n,r="full",i){let o=e.getBoundingClientRect(),s=n?.(t.key)??null,c=e.tagName.toLowerCase(),u=it(e),a=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:$s(e),attributes:Object.fromEntries(e.getAttributeNames().map(A=>[A,e.getAttribute(A)??""]))}:{},d=Vr({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),l=pn(e),f=!0,h=Gr(e)?.getAttribute("data-vcp-edit-key")??null,R=hn(e),v=jr(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...h?{parentKey:h}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...a,runtimeFlags:{selectable:!0,movable:d.canMove,removable:d.canRemove,textEditable:d.canUpdateText,container:l?!1:!!Dt(e)||d.canInsertChild||f&&ln(c)},layoutSnapshot:v,layout:u,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:R,childRects:R.map(({rect:A})=>A),spacing:wt(e)}}function $s(e){let t=Object.fromEntries(Object.entries(e.dataset).map(([r,i])=>[r,i??""])),n=e;for(;n;){for(let r of["cmsCollection","cmsRecord","cmsField","cmsMediaIndex"]){let i=n.dataset[r];t[r]===void 0&&i!==void 0&&(t[r]=i)}n=n.parentElement}return t}function Tr(e,t,n,r){let i=e.getBoundingClientRect(),o=jr(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:Vs(e)};let s=hn(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:it(e),spacing:wt(e)}}function Ar(e){let t=e.layout?.display??"",n=e.spacing;return["flex","inline-flex","grid","inline-grid"].includes(t)&&!!(n&&(n.columnGap>0||n.rowGap>0)&&(e.childRects?.length??0)>=2)}function Us(e,t,n,r,i){let o=t,s=Tr(o,n,e,"detailed"),c=Ar(s),u=null,a=null,d="mutation",l=$e(e),f=l,h=!1,R=!1,v=({reason:G,sourceEventAt:ee,forceEmit:te=!1,includeDetailedGeometry:x=!1})=>{(u===null||(G==="scroll"?0:1)>=(d==="scroll"?0:1))&&(d=G,l=ee),h=h||te,R=R||x,u===null&&(u=xt(e,A))},A=()=>{let G=$e(e);u=null;let ee=d,te=l,x=h,w=R;h=!1,R=!1;let M=Se(e.document,n,r?.()??null);if(!M)return;M!==o&&(U?.unobserve(o),o=M,U?.observe(o),w=!0);let m=w?"detailed":c?"child-rects":"light",S=Tr(o,n,e,m),D=S.layoutSnapshot.rect.viewport;D.width<=0||D.height<=0||!x&&!Ks(s,S)||(s=S,m==="detailed"&&(c=Ar(S)),i(ee,S,{sourceEventAt:te,captureStartedAt:G,capturedAt:$e(e)}))},P=()=>{a!==null&&(e.clearTimeout(a),a=null)},O=()=>{P(),v({reason:"resize",sourceEventAt:$e(e),includeDetailedGeometry:!0})},K=()=>{P(),v({reason:"mutation",sourceEventAt:$e(e),includeDetailedGeometry:!0})},H=()=>{f=$e(e),v({reason:"scroll",sourceEventAt:f}),P(),a=e.setTimeout(()=>{a=null,v({reason:"scroll",sourceEventAt:f,forceEmit:!0,includeDetailedGeometry:!0})},wi)},I=e.ResizeObserver,U=typeof I=="function"?new I(O):null;U?.observe(o);let re=e.MutationObserver,W=typeof re=="function"?new re(K):null;W?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",O,{passive:!0}),e.addEventListener("scroll",H,{passive:!0});let L=e.visualViewport;return L?.addEventListener?.("resize",O,{passive:!0}),L?.addEventListener?.("scroll",H,{passive:!0}),e.document.addEventListener("scroll",H,{capture:!0,passive:!0}),e.document.addEventListener("load",K,!0),()=>{u!==null&&(_t(e,u),u=null),P(),U?.disconnect(),W?.disconnect(),e.removeEventListener("resize",O),e.removeEventListener("scroll",H),L?.removeEventListener?.("resize",O),L?.removeEventListener?.("scroll",H),e.document.removeEventListener("scroll",H,!0),e.document.removeEventListener("load",K,!0)}}function $e(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function Ks(e,t){return Ws(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&Gs(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&Ys(e.childRects,t.childRects)||t.layout!==void 0&&an(e.layout,t.layout)||t.spacing!==void 0&&an(e.spacing,t.spacing)}function Ws(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||Nt(e.rect.viewport,t.rect.viewport)||Nt(e.rect.document,t.rect.document)||e.layout.position!==t.layout.position||e.layout.transform!==t.layout.transform||e.layout.containingBlock.kind!==t.layout.containingBlock.kind||e.layout.containingBlock.kind==="element"&&t.layout.containingBlock.kind==="element"&&e.layout.containingBlock.runtimeNodeId!==t.layout.containingBlock.runtimeNodeId||e.scrollContext.scrollX!==t.scrollContext.scrollX||e.scrollContext.scrollY!==t.scrollContext.scrollY||e.scrollContext.viewportWidth!==t.scrollContext.viewportWidth||e.scrollContext.viewportHeight!==t.scrollContext.viewportHeight||js(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function js(e,t){return e.length!==t.length||e.some((n,r)=>{let i=t[r];return!i||n.runtimeNodeId!==i.runtimeNodeId||n.scrollLeft!==i.scrollLeft||n.scrollTop!==i.scrollTop})}function Gs(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||Nt(i.rect,s.rect)||an(i.margin,s.margin)})}function Ys(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>Nt(i,r[o]??i))}function an(e,t){let n=e??{},r=t??{},i=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(i).some(o=>n[o]!==r[o])}function Be(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function Nt(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function Xs(e,t,n,r,i,o,s){let c=e.document,u=ot(c,t,n,o);if(!u)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let a=i?Se(c,i,o):null;if(a&&un(u,a))return It(c,u,"self-or-descendant",o,s);if(r==="move"&&a){let v=Zs(c,u,a,o,s);if(v){let A=rn(v.child,v.targetParent,t,n,"nearest");if(A)return Ct(c,v.child,v.targetParent,A,o,s)}}let d=null,l=!1,f=u,h=u.parentElement;for(;h;){if(h.getAttribute("data-vcp-edit-key")){if(a&&un(h,a))return It(c,u,"self-or-descendant",o,s);let v=Pr(h,r,s);if(v==="accept"){d={child:f,targetParent:h};break}v==="blocked"&&(l=!0),f=h}h=h.parentElement}let R=Pr(u,r,s);if(R==="accept"){if(d){let v=rn(d.child,d.targetParent,t,n,"edge");if(v)return Ct(c,d.child,d.targetParent,v,o,s)}return Ct(c,u,u,Ls(u,t,n),o,s)}if(d){let v=rn(d.child,d.targetParent,t,n,"nearest");return Ct(c,d.child,d.targetParent,v??"after",o,s)}return R==="blocked"||l?It(c,u,"operation-boundary-blocked",o,s):It(c,u,"no-accepting-parent",o,s)}function It(e,t,n,r,i){return{anchorHit:ye(t,be(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function Ct(e,t,n,r,i,o){let s=ye(t,be(e,t,i),o,"summary"),c=ye(n,be(e,n,i),o,"summary"),u=it(n).indicatorOrientation,a=r==="append"||r==="prepend"?Js(n.getBoundingClientRect(),u,r):Qs(t.getBoundingClientRect(),u,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:u,indicatorBounds:a}}function Pr(e,t,n){if(pn(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":Dt(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return ln(o)?"accept":"not-container"}function rn(e,t,n,r,i){let o=it(t).indicatorOrientation,s=e.getBoundingClientRect(),c=o==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return i==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function Ls(e,t,n){let r=it(e).indicatorOrientation,i=e.getBoundingClientRect();return(r==="vertical"?i.width>0?(t-i.left)/i.width:.5:i.height>0?(n-i.top)/i.height:.5)<.5?"prepend":"append"}function it(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",i=n?.flexDirection,o=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(i??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(o??"row").includes("column")?"vertical":"horizontal"),{display:r,...i?{flexDirection:i}:{},...o?{gridAutoFlow:o}:{},indicatorOrientation:s}}function Js(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Qs(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function un(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function Zs(e,t,n,r,i){let o=ec(e,t,n,r,i);if(o)return o;let s=Gr(n);if(!s||t===s)return null;let c=t,u=t.getAttribute("data-vcp-edit-key")?t:null;for(;c&&c!==s;)c.getAttribute("data-vcp-edit-key")&&(u=c),c=c.parentElement;return c!==s||!u||u===s||u===n||un(u,n)?null:{child:u,targetParent:s}}function ec(e,t,n,r,i){return null}function Gr(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function Dt(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=Dt(n);if(r)return r}return null}function vt(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:Z(e.scrollX),scrollY:Z(e.scrollY),scrollWidth:Math.max(Z(t?.scrollWidth),Z(n?.scrollWidth),Z(e.innerWidth)),scrollHeight:Math.max(Z(t?.scrollHeight),Z(n?.scrollHeight),Z(e.innerHeight)),viewportWidth:Z(e.innerWidth),viewportHeight:Z(e.innerHeight)}}function tc(e,t){Object.entries(t.attributes??{}).forEach(([r,i])=>{if(i===null){e.removeAttribute(r);return}e.setAttribute(r,i)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,i])=>{if(n.has(r))return;let o=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(i==null||i===""){o.removeProperty(s);return}o.setProperty(s,String(i))}),t.styleDeclarations?.forEach(r=>{let i=e.style,o=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){i.removeProperty(o);return}i.setProperty(o,String(s),r.priority)})}var nc=500,tt=new Map;function rc(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function oc(e,t){if(tt.size>=nc){let n=tt.keys().next().value;n&&tt.delete(n)}tt.set(e,t)}var rt=new Set;function ic(e,t){let n=e.documentElement?.style,r=new Set;for(let[i,o]of Object.entries(t.variables??{}))i.startsWith("--")&&(r.add(i),n?.setProperty(i,o));for(let i of rt)r.has(i)||n?.removeProperty(i);rt.clear();for(let i of r)rt.add(i);lc(e,t.stylesheets??[])}function sc(e){let t=e.documentElement?.style;for(let n of rt)t?.removeProperty(n);rt.clear();for(let n of Lr(e))n.remove()}function cc(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,i=r?e.defaultView?.getComputedStyle(r):null,o={};for(let s of n){let c=Yr(i,s);c&&(o[s]=c)}return o}function Yr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return Xr(e,r,n)}function Xr(e,t,n){if(!t)return null;let r=ac(t);if(!r)return t;let i=Yr(e,r.name,n);return i||(r.fallback?Xr(e,r.fallback,n)??r.fallback:null)}function ac(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=uc(n),i=r>=0?n.slice(0,r).trim():n;if(!i.startsWith("--"))return null;let o=r>=0?n.slice(r+1).trim():null;return{name:i,fallback:o||null}}function uc(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function lc(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of Lr(e)){let s=o.getAttribute("href")??"";if(!n.has(s)||r.has(s)){o.remove();continue}r.set(s,o)}let i=e.head;if(i)for(let o of n){if(r.has(o))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(wr,"true"),s.setAttribute("href",o),i.appendChild(s)}}function Lr(e){return Array.from(e.querySelectorAll(`link[${wr}]`))}function dc(e,t,n,r,i={}){let o=i.textNode?pc(e.document,i.textNode):null;if(i.textNode&&!o)throw new Error("Failed to prepare text segment editor");let s=o?.element??t,c=s.textContent??"",u=o?void 0:t.innerHTML,a=fc(s),d=!1,l=()=>{e.document.removeEventListener("pointerdown",h,!0),s.removeEventListener("keydown",R),s.removeEventListener("blur",v),s.removeEventListener("input",A),mc(s,a)},f=P=>{if(d)return;d=!0;let O=s.textContent??"";if(l(),P==="cancel"){o?.restore(c),o||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(O),P==="commit"&&O!==c){i.onCommitSnapshot?.({ref:n,initialText:c,...u!==void 0?{initialHtml:u}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:O}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function h(P){let O=P.target;O&&s.contains(O)||f("commit")}function R(P){if(P.key==="Escape"){P.preventDefault(),f("cancel");return}P.key==="Enter"&&(P.metaKey||P.ctrlKey)&&(P.preventDefault(),f("commit"))}function v(){f("commit")}function A(){r({kind:"text-edit-input",payload:{ref:n,hit:ye(t,n,void 0,"full")}})}return hc(s),e.document.addEventListener("pointerdown",h,!0),s.addEventListener("keydown",R),s.addEventListener("blur",v),s.addEventListener("input",A),bc(s),Sc(s,e.document),l}function pc(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(i){t.nodeValue=i,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function fc(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function hc(e){gc(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function mc(e,t){on(e,"contenteditable",t.contentEditable),on(e,"spellcheck",t.spellcheck),on(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function gc(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function on(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function yc(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function bc(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function Sc(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function Jr(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Z(e){let t=Number(e);return Number.isFinite(t)?t:0}import Ec from"node:http";import st from"node:fs";import{createHash as no,randomBytes as Ic,timingSafeEqual as Cc}from"node:crypto";import Ee from"node:path";import{WebSocket as ro,WebSocketServer as vc}from"ws";import{createPreviewSiteEditEngineRuntime as Rc,openFileHistoryStore as xc,resolveManagedPageTemplateComposition as _c,scanSiteEditCompositionsFromFiles as Tc}from"@vcp-dev/site-edit-engine";import{resolveNextAppRouteId as Ac,scanNextAppRouterRoutesFromFiles as Pc}from"@vcp-dev/site-edit-engine/next-app-router";import{SiteEditSourceWatcher as Nc}from"@vcp-dev/site-edit-engine/source-watcher";var kt=class{constructor(){this.tail=Promise.resolve()}run(t){let n=this.tail.then(t,t);return this.tail=n.then(()=>{},()=>{}),n}};import{SiteEditOperationRequestSchema as wc,computeSiteEditCompositionKey as Me}from"@vcp-dev/contracts";var Dc="127.0.0.1",kc=30218,Oc="/__vcp/site-edit/bridge",oo=6*1024*1024,Bc=oo*2,Mc=3e3,Qr=50,yn=".vcp/current-snapshot.json",Zr="__VCP_SITE_EDIT_BRIDGE_SERVERS__";function xu(e){let t=so(e),n=ao(t),r=co(),i=r.get(n);if(i)return i;let o=new Ot(t);r.set(n,o);try{o.start()}catch(s){throw r.delete(n),o.stop(),s}return o}function io(e,t,n={}){let r=new Ot(so(t),e,!1,n);return r.start({listen:!1}),r}var Ot=class{constructor(t,n=Ec.createServer((o,s)=>{s.writeHead(404),s.end("VCP site edit bridge server")}),r=!0,i={}){this.options=t,this.server=n,this.closeHttpServerOnStop=r,this.dependencies=i,this.runtime=null,this.activeHistorySessionId=null,this.historySessionTransition=Promise.resolve(),this.mutationQueue=new kt,this.eventListeners=new Set,this.routes=[],this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=null,this.launchCandidateEntries=null,this.stopWatching=null,this.stopWebSocketServer=null,this.pendingChangedFiles=new Set,this.fileChangeTimer=null,this.isStarted=!1,this.stopping=!1,this.runtimeVersionFloors=new Map,this.activeHistoryStore=null,this.versionPersistence=Promise.resolve()}start(t={}){if(this.isStarted)return;this.stopping=!1;try{st.mkdirSync(Ee.join(this.options.projectRoot,".vcp"),{recursive:!0})}catch(r){console.warn(`[vcp-site-edit] failed to ensure .vcp directory: ${r instanceof Error?r.message:String(r)}`)}this.refreshCompositions(!0),this.isStarted=!0,this.createRuntime();let n=Hc({server:this.server,path:this.options.path,sessionKey:this.options.sessionKey,host:this.options.host,allowedOrigins:this.options.allowedOrigins,engine:this.createBridgeEngine()});this.stopWebSocketServer=n.stop,this.stopWatching=new Nc({projectRoot:this.options.projectRoot,watch_dirs:Fc(this.options.runtime.watch_dirs),interval_ms:this.options.runtime.watch_interval_ms,debounce_ms:this.options.runtime.watch_debounce_ms??Qr,max_dirs:this.options.runtime.watch_max_dirs,max_files:this.options.runtime.watch_max_files,max_depth:this.options.runtime.watch_max_depth,max_startup_ms:this.options.runtime.watch_max_startup_ms,on_change:r=>this.handleFileChanged(r),on_batch_change:r=>this.handleFilesChanged(r)}).start(),t.listen!==!1&&this.server.listen(this.options.port,this.options.host)}getHealth(){let t=!!this.runtime&&!this.compositionResolutionError;return{ok:this.isStarted&&t,bridgePath:this.options.path,runtimeReady:t,routesIndexed:this.routes.length,sessionRequired:!!this.options.sessionKey}}stop(){this.stopping=!0,this.stopWatching?.(),this.stopWatching=null,this.flushChangedFiles(),this.fileChangeTimer&&(clearTimeout(this.fileChangeTimer),this.fileChangeTimer=null),this.stopWebSocketServer?.(),this.stopWebSocketServer=null,this.runtime?.dispose(),this.runtime=null,this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=null,this.closeHttpServerOnStop&&this.server.close();let t=co(),n=ao(this.options);t.get(n)===this&&t.delete(n),this.isStarted=!1}createRuntime(t,n=null){let r=this.runtime;this.activeHistoryStore=t??null;let i=(this.dependencies.createRuntime??Rc)({...this.options.tenantId?{tenantId:this.options.tenantId}:{},siteId:this.options.siteId,snapshotId:this.options.snapshotId,projectRoot:this.options.projectRoot,compositions:this.compositions,onEvent:o=>{"version"in o&&typeof o.version=="number"&&this.recordRuntimeVersion(o.version,"composition"in o?o.composition:void 0);for(let s of this.eventListeners)s(o)},...t?{historyStore:t}:{},...this.getInitialDocumentVersions().length>0?{initialDocumentVersions:this.getInitialDocumentVersions()}:{}});this.runtime=i,this.activeHistorySessionId=n,r?.dispose()}createBridgeEngine(){return{resolveComposition:t=>this.resolveComposition(t),initializeSession:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)throw new Error(`${n.code}: ${n.message}`);let r=qc(t.composition),i=this.getRuntime(),o=Ce(r);await i.initializeComposition(o);let c=i.getDocument(o).data;await this.recordRuntimeVersion(c.version,r);let u=(await i.getHistoryStatus()).data;return{ok:!0,composition:r,data:{document:c,historyStatus:u}}}),getDocument:async t=>{let n=this.getRuntime(),r=Ce(t);await n.initializeComposition(r);let i=n.getDocument(r);return await this.recordRuntimeVersion(i.data.version,t),{...i,composition:t}},getHistoryStatus:async t=>({...await this.getRuntime().getHistoryStatus(),composition:t}),getStyleContext:async t=>this.getRuntime().getStyleContext(Ce(t)),getObjectEditContext:async(t,n,r)=>this.getRuntime().getObjectEditContext(t,Ce(n),r),getClassNameSource:async(t,n)=>this.getRuntime().getClassNameSource(t,Ce(n)),getSourceTree:async t=>this.getRuntime().getSourceTree(Ce(t)),getSourceFile:async t=>this.getRuntime().getSourceFile({path:t.path,composition:Ce(t.composition)}),resolveSourceLocation:async t=>this.getRuntime().resolveSourceLocation({key:t.key,composition:Ce(t.composition)}),execute:(t,n)=>this.mutationQueue.run(async()=>{let r=await this.bindHistorySession(this.options.snapshotId);if(!r.ok)return mn(r,t);let i=await this.getRuntime().executeOperation(t);return i.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(i.data.resultVersion,i.composition),i}),undo:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)return mn(n,void 0,t);let r=await this.getRuntime().undo();return r.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(r.data.resultVersion,r.composition??t),r.composition?r:{...r,composition:t}}),redo:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)return mn(n,void 0,t);let r=await this.getRuntime().redo();return r.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(r.data.resultVersion,r.composition??t),r.composition?r:{...r,composition:t}}),subscribe:t=>(this.eventListeners.add(t),()=>this.eventListeners.delete(t))}}async bindHistorySession(t){if(!this.options.historyRoot)return{ok:!1,code:"RECOVERY_PERSIST_FAILED",message:"Durable edit history is not configured."};if(this.activeHistorySessionId===t)return{ok:!0};let n=this.historySessionTransition.then(async()=>{if(this.activeHistorySessionId===t)return;let r=await(this.dependencies.openHistoryStore??xc)(zc({root:this.options.historyRoot,siteId:this.options.siteId,snapshotId:this.options.snapshotId,editingSessionId:t}));if(!this.isStarted)return;let i=r.readDocumentVersion?await r.readDocumentVersion():0,o=this.compositions[0]?.context;if(o){let s=Me(o);this.runtimeVersionFloors.set(s,Math.max(this.runtimeVersionFloors.get(s)??0,i))}this.createRuntime(r,t)});this.historySessionTransition=n.catch(()=>{});try{return await n,{ok:!0}}catch{return{ok:!1,code:"RECOVERY_PERSIST_FAILED",message:"Durable edit history could not be opened."}}}recordRuntimeVersion(t,n){let r=n?Me(n):null;r&&this.runtimeVersionFloors.set(r,Math.max(this.runtimeVersionFloors.get(r)??0,t));let i=this.activeHistoryStore;if(!i?.writeDocumentVersion)return Promise.resolve();let o=r?this.runtimeVersionFloors.get(r)??t:t;return this.versionPersistence=this.versionPersistence.then(()=>i.writeDocumentVersion(o)).catch(()=>{}),this.versionPersistence}handleFileChanged(t){this.handleFilesChanged([t])}handleFilesChanged(t){for(let r of t)this.pendingChangedFiles.add(r);this.fileChangeTimer&&clearTimeout(this.fileChangeTimer);let n=this.options.runtime.watch_debounce_ms??Qr;this.fileChangeTimer=setTimeout(()=>{this.fileChangeTimer=null,this.flushChangedFiles()},n),this.fileChangeTimer?.unref?.()}flushChangedFiles(){if(this.fileChangeTimer&&(clearTimeout(this.fileChangeTimer),this.fileChangeTimer=null),this.pendingChangedFiles.size===0)return;let t=[...this.pendingChangedFiles].sort((n,r)=>n.localeCompare(r));if(this.pendingChangedFiles.clear(),t.some(Xc)&&this.scheduleSnapshotIdentityAdvance(),!!this.refreshCompositions(!1))for(let n of t)this.runtime?.notifyFileChanged(n)}scheduleSnapshotIdentityAdvance(){if(this.stopping||!this.isStarted)return;let t=this.readCurrentSnapshotMarker();!t||t===this.options.snapshotId||this.mutationQueue.run(()=>this.advanceSnapshotId(t)).catch(n=>{console.warn(`[vcp-site-edit] snapshot identity advance failed: ${n instanceof Error?n.message:String(n)}`)})}readCurrentSnapshotMarker(){try{let t=st.readFileSync(Ee.join(this.options.projectRoot,yn),"utf8"),n=JSON.parse(t),r=typeof n.snapshot_id=="string"?n.snapshot_id:"";return!r||bn(r)!==r?(console.warn("[vcp-site-edit] current-snapshot marker has no valid snapshot_id"),null):r}catch(t){return console.warn(`[vcp-site-edit] current-snapshot marker unreadable: ${t instanceof Error?t.message:String(t)}`),null}}async advanceSnapshotId(t){if(this.stopping||!this.isStarted||t===this.options.snapshotId)return;let n=this.options.snapshotId;this.options.snapshotId=t;try{if(this.options.historyRoot){let i=await this.bindHistorySession(t);if(!i.ok)throw new Error(`${i.code}: ${i.message}`)}else this.createRuntime()}catch(i){this.options.snapshotId=n,console.warn(`[vcp-site-edit] snapshot identity advance rolled back to ${n}: ${i instanceof Error?i.message:String(i)}`);return}let r=new Date().toISOString();for(let i of this.compositions){let o={type:"site-edit.snapshot.changed",siteId:this.options.siteId,composition:i.context,snapshotId:t,previousSnapshotId:n,at:r};for(let s of this.eventListeners)try{s(o)}catch(c){console.warn(`[vcp-site-edit] snapshot.changed listener failed: ${c instanceof Error?c.message:String(c)}`)}}try{this.options.onSnapshotIdChanged?.(t,n)}catch(i){console.warn(`[vcp-site-edit] onSnapshotIdChanged callback failed: ${i instanceof Error?i.message:String(i)}`)}}refreshCompositions(t=!1){try{let n=Vc(this.options.projectRoot),r=Pc(n),i=r.length>0?r:(this.options.runtime.routes??[]).map(a=>({...a})),o=Tc({files:n});if(o.length===0)throw new Error("No canonical App Router composition is indexed by the preview bridge.");let s=JSON.stringify(o.filter(a=>a.context.effectiveTemplateId!==void 0).map(a=>a.entryFile).sort());if(t&&(this.launchCandidateEntries=s),this.launchCandidateEntries!==s)throw new Error("SITE_EDIT_RUNTIME_RELOAD_REQUIRED: Candidate route collection changed since preview launch");let c=new Map(this.compositions.map(a=>[Me(a.context),a])),u=new Map(o.map(a=>[Me(a.context),a]));if(this.runtime){for(let[a,d]of c){let l=u.get(a);(!l||l.entryFile!==d.entryFile)&&this.runtime.unregisterComposition(Ce(d.context))}for(let[a,d]of u){let l=c.get(a);(!l||l.entryFile!==d.entryFile)&&this.runtime.registerComposition(d.context,d.entryFile)}}return this.routes=i,this.compositions=o,this.compositionFiles=n,this.compositionResolutionError=null,!0}catch(n){let r=n instanceof Error?n:new Error(String(n));if(this.compositionResolutionError=r,t)throw r;return!1}}resolveComposition(t){if(this.compositionResolutionError)throw this.compositionResolutionError;let n=Ac(t.routeId,this.routes,this.options.basePath);if(!n)throw new Error(`Route is not indexed by the preview bridge: ${t.routeId}`);let r=this.routes.find(s=>s.routeId===n);if(!r)throw new Error(`Route is not indexed by the preview bridge: ${t.routeId}`);let i=_c({selector:{routeId:n,...t.templateId!==void 0?{templateId:t.templateId}:{}},files:this.compositionFiles,canonicalEntryFile:r.entryFile}),o=Me(i.context);if(!this.compositions.some(s=>Me(s.context)===o))throw new Error(`Composition is not registered by the preview bridge: ${o}`);return i}getInitialDocumentVersions(){return this.compositions.flatMap(t=>{let n=this.runtimeVersionFloors.get(Me(t.context));return n===void 0?[]:[{composition:t.context,version:n}]})}getRuntime(){if(!this.runtime)throw new Error("VCP site edit preview bridge runtime is not ready");return this.runtime}};function so(e){return{tenantId:e.tenantId,siteId:e.siteId,snapshotId:e.snapshotId,projectRoot:Ee.resolve(e.projectRoot??process.cwd()),basePath:e.basePath??"",host:e.host??Dc,port:e.port??kc,path:e.path??Oc,sessionKey:e.sessionKey??Yc(),historyRoot:e.historyRoot,allowedOrigins:e.allowedOrigins??[],runtime:e.runtime??{},onSnapshotIdChanged:e.onSnapshotIdChanged}}function Fc(e){let t=["app","src/app","components/site","src/components/site","lib/generated","src/lib/generated","public"];return[...new Set([...e?.length?e:t,".vcp"])]}function Vc(e){let t=[],n=["app","src/app",".vcp"],r=new Set([".git",".next",".turbo","coverage","dist","node_modules","output","snapshot-store"]),i=o=>{if(!st.existsSync(o))return;let s;try{s=st.readdirSync(o,{withFileTypes:!0})}catch{return}for(let c of s){if(c.name.startsWith(".")&&c.name!==".vcp")continue;if(c.isDirectory()){if(r.has(c.name))continue;i(Ee.join(o,c.name));continue}if(!c.isFile())continue;let u=Ee.join(o,c.name),a="";try{a=st.readFileSync(u,"utf8")}catch{}t.push({path:Ee.relative(e,u).replaceAll(Ee.sep,"/"),content:a})}};for(let o of n)i(Ee.join(e,o));return t.sort((o,s)=>o.path.localeCompare(s.path))}function qc(e){if(!e||typeof e!="object"||typeof e.routeId!="string")throw new Error("Normalized composition context is required.");if("effectiveTemplateId"in e)return e;let t=e;return{routeId:t.routeId,...t.templateId?{effectiveTemplateId:t.templateId}:{}}}function Ce(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function zc(e){return Ee.join(Ee.resolve(e.root),bn(e.siteId),bn(e.snapshotId),no("sha256").update(e.editingSessionId).digest("hex").slice(0,32))}function bn(e){return/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)&&e!=="."&&e!==".."?e:no("sha256").update(e).digest("hex").slice(0,32)}function co(){let e=globalThis;return e[Zr]??=new Map,e[Zr]}function ao(e){return`${e.projectRoot}:${e.host}:${e.port}:${e.path}:${e.historyRoot??""}`}function mn(e,t,n){let r=n??(t?.composition?{routeId:t.composition.routeId,...t.composition.templateId?{effectiveTemplateId:t.composition.templateId}:{}}:void 0);if(!r)throw new Error("A normalized composition is required to construct a mutation result.");return{ok:!1,composition:r,error:{code:e.code,message:e.message},data:{requestId:t?.id??"mutation-context",kind:t?.kind??"update-text",composition:r,target:t?.target??{kind:"node",key:""},resultVersion:t?.documentVersion??0}}}function Hc(e){let t=new vc({maxPayload:oo,noServer:!0}),n=new WeakSet,r=o=>{new dt({socket:new Sn(o),engine:e.engine,validateOperationRequest:s=>wc.safeParse(s).success})},i=(o,s,c)=>{if(!$c(o,e))return;let u=Uc(o,e);if(!u){s.write(`HTTP/1.1 401 Unauthorized\r
|
|
42
42
|
Connection: close\r
|
|
43
43
|
\r
|
|
44
44
|
`),s.destroy();return}u.authenticatedByHeader&&n.add(o),t.handleUpgrade(o,s,c,a=>{t.emit("connection",a,o)})};return e.server.on("upgrade",i),t.on("connection",(o,s)=>{if(n.has(s)){r(o);return}Kc(o,e.sessionKey,()=>{r(o)})}),t.stop=()=>{e.server.off("upgrade",i);for(let o of t.clients)o.close(1001,"bridge stopped");t.close()},t}var Sn=class{constructor(t){this.socket=t,this.onmessage=null,this.onclose=null,t.on("error",()=>{}),t.on("message",n=>{this.onmessage?.({data:n.toString()})}),t.on("close",()=>{this.onclose?.()})}send(t){if(this.socket.readyState===ro.OPEN){if(this.socket.bufferedAmount+Buffer.byteLength(t,"utf8")>Bc){this.socket.close(1013,"bridge backpressure");return}this.socket.send(t)}}close(t,n){this.socket.close(t,n)}};function $c(e,t){return new URL(e.url??"/","http://localhost").pathname===t.path}function Uc(e,t){if(new URL(e.url??"/","http://localhost").searchParams.has("vcp_bridge_key"))return null;let r=gn(e.headers["x-vcp-site-edit-key"]),i=uo(r,t.sessionKey),o=gn(e.headers.host),s=gn(e.headers.origin);return o&&!Wc(o,t.host,s)?null:s?Gc(s,o,t.allowedOrigins)?{authenticatedByHeader:i}:null:i?{authenticatedByHeader:!0}:null}function Kc(e,t,n){let r=setTimeout(()=>{e.close(1008,"bridge authentication timeout")},Mc),i,o=()=>{clearTimeout(r),e.off("message",i),e.off("close",o)},s=()=>{o(),e.close(1008,"bridge authentication failed")};i=c=>{try{let u=ce.parseMessage(c.toString());if(u.type!=="auth"||!uo(u.payload.key,t)){s();return}o(),e.readyState===ro.OPEN&&e.send(ce.stringifyMessage({type:"auth-ok",payload:{ok:!0}})),n()}catch{s()}},e.on("message",i),e.on("close",o)}function uo(e,t){if(!e)return!1;let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&Cc(n,r)}function Wc(e,t,n){let r=to(e),i=to(t);return r===i||eo(i)&&eo(r)&&(!n||En(n,e))||jc(i)&&(!n||En(n,e))}function jc(e){return e==="0.0.0.0"||e==="::"}function eo(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Gc(e,t,n){return n.includes(e)||(t?En(e,t):!1)}function En(e,t){try{return new URL(e).host===lo(t)}catch{return!1}}function to(e){let t=lo(e);return t.startsWith("[")?t.slice(1,t.indexOf("]")):t.split(":").length-1===1?t.split(":",1)[0]??"":t}function lo(e){return e.trim().toLowerCase()}function gn(e){return Array.isArray(e)?e[0]:e}function Yc(){return Ic(32).toString("base64url")}function Xc(e){let t=e.replaceAll("\\","/");return t===yn||t.endsWith(`/${yn}`)}import Rn from"node:http";import{existsSync as We,readFileSync as Ke}from"node:fs";import{randomUUID as Lc}from"node:crypto";import{createRequire as mo}from"node:module";import{Socket as po}from"node:net";import ct from"node:path";import{basename as go,dirname as at,join as ut}from"node:path";import{fileURLToPath as yo}from"node:url";var Jc="next",bo="127.0.0.1",Qc=3e3,Ft="/__vcp/site-edit/bridge",So="/__vcp/site-edit/health",Zc="probe",ea="render",fo="/_error",Vt="/__vcp/site-edit/client/",ta=`${Vt}auto-bootstrap.js`,Eo='data-vcp-site-edit-bootstrap="true"',na=["next.config.ts","next.config.mts","next.config.cts","next.config.js","next.config.mjs","next.config.cjs"],ra="@vcp-dev/site-edit-engine/webpack-loader",oa=/@vcp\/site-edit-engine\/(?:webpack-loader|site-edit-instrumentation-loader)/,ia=[/\bconfig\.webpack\s*=/,/\bwebpack\s*\([^)]*\)\s*\{/,/\bwebpack\s*:\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)?\s*=>/,/\bwebpack\s*:\s*(?:async\s+)?function\b/],sa=new Set(["auto-bootstrap.js","client.js","composition-key.js","designer-trace.js","document-codec.js","property-preview.js","protocol.js","window-message.js"]);async function Mu(e={},t={}){let n=t.process??process,r=t.createServer??Rn.createServer,i=t.attachBridgeServer??io,o=t.loadNext??Fa,s=ct.resolve(e.projectRoot??process.cwd()),c=e.host??bo,u=e.port??Ha(n.env.PORT)??Qc,a=e.bridgePath??Ft,d=fa(a),l=Da(),f=e.basePath??n.env.VCP_SITE_PREVIEW_BASE_PATH??"/",h=(e.tenantId??n.env.VCP_TENANT_ID)?.trim()||void 0,R=await o(s),v=ca(s),A=R({dev:!0,dir:s,hostname:c,port:u,...aa(v)}),P=A.getRequestHandler(),O=e.siteId??n.env.VCP_SITE_ID??"018f6f4d-a9b8-7120-8000-000000000120",K=e.snapshotId??n.env.VCP_SNAPSHOT_ID??za(s),H=e.historyRoot??n.env.VCP_SITE_EDIT_HISTORY_ROOT,I=H?.trim()?ct.resolve(H):void 0,U=null,re={launchId:Lc(),pid:process.pid,snapshotId:K},W=r((x,w)=>{Ea({basePath:f,bridgePath:a,bridgeHealthPath:d,bridgeSessionKey:l,getBridgeHealth:()=>U?.getHealth()??_a(a),launch:re,runRenderProbe:()=>va(A),handle:P,request:x,response:w}).catch(M=>{console.error(M),w.headersSent||(w.statusCode=500),w.end("site edit preview request failed")})}),L=null,G=null,ee=()=>G||(Mt(()=>n.off("SIGINT",te)),Mt(()=>n.off("SIGTERM",te)),Mt(()=>L?.()),L=null,Mt(()=>U?.stop()),U=null,G=Promise.allSettled([Ua(W),Ka(()=>A.close())]).then(()=>{}),G),te=()=>{ee()};try{return await A.prepare(),U=i(W,{...h?{tenantId:h}:{},siteId:O,snapshotId:K,projectRoot:s,basePath:f,host:c,port:u,path:a,sessionKey:l,...I?{historyRoot:I}:{},onSnapshotIdChanged:x=>{re.snapshotId=x}}),L=da({server:W,bridgePath:a,handleUpgrade:A.getUpgradeHandler()}),n.on("SIGINT",te),n.on("SIGTERM",te),await $a(W,u,c),{bundler:v,close:ee,host:c,port:Wa(W,u),server:W}}catch(x){throw await ee(),x}}function ca(e){let t=ua(e);return t&&la(t)?"webpack":"turbopack"}function aa(e){return e==="webpack"?{webpack:!0}:{turbopack:!0}}function ua(e){for(let t of na){let n=ut(e,t);if(We(n))return Ke(n,"utf8")}return null}function la(e){return e.includes(ra)?!0:oa.test(e)&&ia.some(t=>t.test(e))}function da(e){let t=(n,r,i)=>{pa(n.url,e.bridgePath)||e.handleUpgrade(n,r,i).catch(o=>{console.error(o),r.destroyed||r.destroy()})};return e.server.on("upgrade",t),()=>e.server.off("upgrade",t)}function pa(e,t){return new URL(e??"/","http://localhost").pathname===t}function fa(e=Ft){if(e===Ft)return So;let t=(e.startsWith("/")?e:`/${e}`).replace(/\/+$/,"");return t.endsWith("/bridge")?`${t.slice(0,-7)}/health`:t?`${t}/health`:"/health"}function ha(e){let t=JSON.stringify({basePath:e.basePath,launch_id:e.launch?.launchId,snapshot_id:e.launch?.snapshotId,wsPath:e.bridgePath,bridge_session_key:e.bridgeSessionKey,defer_initial_sync:!0,runtime_versions:e.runtimeVersions??ma()});return`<script type="module" ${Eo}>import { startSiteEditAutoBootstrap } from ${JSON.stringify(ta)};void startSiteEditAutoBootstrap(window, ${t}).catch(() => undefined);</script>`}function ma(){return{bridge:In("@vcp-dev/site-edit-bridge"),contracts:In("@vcp-dev/contracts"),engine:In("@vcp-dev/site-edit-engine")}}function In(e){let t=mo(import.meta.url);try{let n=t.resolve(e),r=ga(n,e);if(!r)return;let i=JSON.parse(Ke(r,"utf8"));return typeof i.version=="string"?i.version:void 0}catch{return}}function ga(e,t){let n=ct.parse(e).root,r=at(e);for(;r&&r!==n;){let i=ut(r,"package.json");if(We(i))try{if(JSON.parse(Ke(i,"utf8")).name===t)return i}catch{return}r=at(r)}}function ya(e,t){if(e.includes(Eo))return e;let n=ha(t),r=/<\/body\s*>/i.exec(e);return r?`${e.slice(0,r.index)}${n}${e.slice(r.index)}`:`${e}${n}`}function Fu(e,t=at(yo(import.meta.url)),n=We){return Io(e,t,n)?.path??null}function Io(e,t=at(yo(import.meta.url)),n=We){let r=new URL(e??"/","http://localhost").pathname;if(!r.startsWith(Vt))return null;let i=r.slice(Vt.length);if(!sa.has(i))return null;let o=xn(Va(t),i);if(go(t)!=="src")return{path:o,requiresTranspile:!1};let s=xn(t,i.replace(/\.js$/,".ts"));return n(s)?{path:s,requiresTranspile:!0}:{path:o,requiresTranspile:!1}}async function ba(e,t){let n=Io(e.url);if(!n)return!1;if(!We(n.path))return t.writeHead(404),t.end("site edit client asset not found"),!0;let r=n.requiresTranspile?await Sa(Ke(n.path,"utf8")):Ke(n.path);return t.writeHead(200,{"cache-control":"no-store","content-type":"text/javascript; charset=utf-8"}),t.end(r),!0}async function Sa(e){let t=await import("typescript");return t.transpileModule(e,{compilerOptions:{module:t.ModuleKind.ES2022,target:t.ScriptTarget.ES2022}}).outputText}async function Ea({basePath:e,bridgePath:t,bridgeHealthPath:n,bridgeSessionKey:r,getBridgeHealth:i,launch:o,runRenderProbe:s,handle:c,request:u,response:a}){if(Ia(u.url,e)){a.statusCode=404,a.end();return}if(await xa(u,a,n,i,o,s)||await ba(u,a))return;let d=Ta(u),l=Aa(u),f=d||l?wa(a,{basePath:e,bridgePath:t,bridgeSessionKey:r,patchNextDevChunk:l,launch:{...o}}):()=>{};try{await c(u,a)}catch(h){throw f(),h}}function Ia(e,t){let n=(e??"/").split(/[?#]/,1)[0]??"/";if(!/(\\|\/\/)/.test(n))return!1;let r;try{r=decodeURIComponent(n).replace(/\\/g,"/").replace(/\/{2,}/g,"/")}catch{return!1}let i=new URL(r,"http://namespace.invalid").pathname,o=t.replace(/\/+$/,"");return(o&&(i===o||i.startsWith(o+"/"))?i.slice(o.length)||"/":i).startsWith("/.vcp")}function Ca(e){let t=e instanceof Error?e.message:String(e),n=e&&typeof e=="object"&&"code"in e?e.code:void 0;return/\.next[/\\]/.test(t)||/chunks[/\\]ssr[/\\]/.test(t)?n==="ENOENT"||n==="MODULE_NOT_FOUND"?{verdict:"artifact_broken",detail:t}:t.includes("Cannot find module")?{verdict:"artifact_broken",detail:t}:{verdict:"inconclusive",detail:t}:{verdict:"inconclusive",detail:t}}async function va(e){let t=new Rn.IncomingMessage(new po);t.method="GET",t.url=fo,t.headers={host:bo};let n=new Rn.ServerResponse(t);n.assignSocket(new po);try{return await e.renderToHTML(t,n,fo,{}),{verdict:"ok"}}catch(r){return Ca(r)}finally{try{let r=n.socket;r&&(n.detachSocket(r),r.destroy())}catch{}}}function Ra(e){return new URL(e??"/","http://localhost").searchParams.get(Zc)===ea}async function xa(e,t,n,r,i,o){if(e.method!=="GET"||new URL(e.url??"/","http://localhost").pathname!==n)return!1;let c=r(),u=Ra(e.url)?await o():void 0,a={...c,launch:i,...u?{render:u}:{}};return t.writeHead(c.ok?200:503,{"cache-control":"no-store","content-type":"application/json; charset=utf-8"}),t.end(JSON.stringify(a)),!0}function _a(e){return{ok:!1,bridgePath:e,runtimeReady:!1,routesIndexed:0,sessionRequired:!0}}function Ta(e){return Pa(e)?(e.headers["accept-encoding"]="identity",!0):!1}function Aa(e){return Na(e)?(e.headers["accept-encoding"]="identity",!0):!1}function Pa(e){if(e.method!=="GET")return!1;let t=new URL(e.url??"/","http://localhost");if(e.headers["x-template-id"]!==void 0&&!t.searchParams.has("template_id"))return!1;let n=t.pathname;if(n.startsWith("/_next/")||n.startsWith(Vt)||n===Ft||n===So)return!1;let r=e.headers.accept??"";return r===""||r.includes("text/html")}function Na(e){if(e.method!=="GET"||!String(e.headers["user-agent"]??"").includes("Firefox"))return!1;let n=new URL(e.url??"/","http://localhost").pathname;return n.startsWith("/_next/static/chunks/")&&n.endsWith(".js")}function wa(e,t){let n=[],r=e,i=r.flushHeaders.bind(e),o=r.write.bind(e),s=r.end.bind(e),c=!1;r.flushHeaders=()=>{};let u=()=>{if(t.patchNextDevChunk||c)return!1;let a=Buffer.concat(n);if(!/<body\b[^>]*>/iu.test(a.toString("utf8")))return!1;let d=ho(e,a,t);return d!==a&&!e.headersSent&&e.removeHeader("content-length"),o(d),n.length=0,c=!0,!0};return r.write=(a,d,l)=>c?(a!==void 0&&o(Cn(a,vn(d))),Bt(d),Bt(l),!0):(a!==void 0&&(n.push(Cn(a,vn(d))),u()),Bt(d),Bt(l),!0),r.end=(a,d,l)=>{let f=typeof a=="function"?void 0:a;if(c)return r.write=o,r.end=s,r.flushHeaders=i,f===void 0?typeof a=="function"?s(a):typeof d=="function"?s(d):typeof l=="function"?s(l):s():typeof d=="function"?s(f,d):typeof l=="function"?s(f,d,l):s(f,d);f!==void 0&&n.push(Cn(f,vn(d))),r.write=o,r.end=s,r.flushHeaders=i;let h=Buffer.concat(n),R=ho(e,h,t);R!==h&&!e.headersSent&&e.removeHeader("content-length");let v=typeof a=="function"?a:typeof d=="function"?d:typeof l=="function"?l:void 0;return v?s(R,v):s(R)},()=>{r.write=o,r.end=s,r.flushHeaders=i}}function ho(e,t,n){if(ka(e,t))return Buffer.from(ya(t.toString("utf8"),n));if(n.patchNextDevChunk&&Oa(e)){let r=t.toString("utf8"),i=Ba(r);if(i!==r)return Buffer.from(i)}return t}function Da(){let e=new Uint8Array(32);return globalThis.crypto.getRandomValues(e),Buffer.from(e).toString("base64url")}function ka(e,t){if(e.statusCode<200||e.statusCode>=300)return!1;let n=e.getHeader("content-type"),r=Array.isArray(n)?n.join(";"):String(n??"");return t.toString("utf8",0,256).includes("<html")&&(r===""||r.includes("text/html"))}function Oa(e){if(e.statusCode<200||e.statusCode>=300)return!1;let t=e.getHeader("content-type"),n=Array.isArray(t)?t.join(";"):String(t??"");return n===""||n.includes("javascript")||n.includes("ecmascript")}function Ba(e){return[["debugChannel = createDebugChannel(undefined);","debugChannel = undefined;"],["if (isStreamErrorOrUnfinished(ctr)) {","if (false) {"],["return ctr.desiredSize === null || ctr.desiredSize < 0;","return false;"],[["findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,"," debugChannel,"," startTime: 0"].join(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vcp-dev/site-edit-bridge",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -74,8 +74,8 @@
|
|
|
74
74
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@vcp-dev/contracts": "0.10.
|
|
78
|
-
"@vcp-dev/site-edit-engine": "0.10.
|
|
77
|
+
"@vcp-dev/contracts": "0.10.5",
|
|
78
|
+
"@vcp-dev/site-edit-engine": "0.10.5",
|
|
79
79
|
"@types/ws": "^8.18.1",
|
|
80
80
|
"ws": "^8.20.1"
|
|
81
81
|
},
|