@vcp-dev/site-edit-bridge 0.9.5 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- function Kn(e){let t=new Map,n=[],r=new Map,i=[],o=e.pageComposition.status==="supported"?e.pageComposition.placementUnitKeys:[],s=new Map(o.map((d,h)=>[d,h])),c=e.pageComposition.status==="supported"?{status:"supported",containerKey:e.pageComposition.containerKey,hasBusinessMembers:e.pageComposition.hasBusinessMembers,placementUnitKeys:e.pageComposition.placementUnitKeys,placements:e.pageComposition.placements.map(d=>({placementKey:d.placementKey,placementUnitKey:d.placementUnitKey,relation:d.relation}))}:{status:"unsupported",reason:e.pageComposition.reason,diagnostics:e.pageComposition.diagnostics},a=e.entries.flatMap((d,h)=>d.dynamicDataSummary?[[h,d.dynamicDataSummary]]:[]),u=d=>{let h=t.get(d);if(typeof h=="number")return h;let g=n.length;return n.push(d),t.set(d,g),g},l=d=>{let h=null;for(let g of vo(d)){let N=`${h??"root"}\0${g}`,E=r.get(N);if(typeof E=="number"){h=E;continue}let _=i.length;i.push([h,u(g)]),r.set(N,_),h=_}if(h===null)throw new Error("Document key must not be empty");return h};return{encoding:"segment-trie-v1",siteId:e.siteId,snapshotId:e.snapshotId,composition:{...e.composition},routeId:e.composition.routeId,version:e.version,pageComposition:c,tokens:n,nodes:i,entries:e.entries.map(d=>{let h=d.pageCompositionUnitKey?s.get(d.pageCompositionUnitKey)??-1:-1;if(d.pageCompositionUnitKey&&h<0)throw new Error(`Render entry ${d.key} references unknown page composition unit ${d.pageCompositionUnitKey}`);return[l(d.key),So(d.operationSummary),...h>=0?[h]:[]]}),...a.length>0?{dynamicDataSummaries:a}:{}}}function $n(e){if(!Io(e))return e;let t=new Map,n=e.pageComposition.status==="supported"?e.pageComposition.placementUnitKeys:[],r=new Map(e.dynamicDataSummaries??[]),i=o=>{let s=t.get(o);if(s)return s;let c=e.nodes[o];if(!c)throw new Error(`Missing compact document node ${o}`);let[a,u]=c,l=e.tokens[u];if(typeof l!="string")throw new Error(`Missing compact document token ${u}`);let d=`${a===null?"":i(a)}${l}`;return t.set(o,d),d};return{siteId:e.siteId,snapshotId:e.snapshotId,composition:{...e.composition},routeId:e.composition.routeId,version:e.version,pageComposition:e.pageComposition,entries:e.entries.map((o,s)=>{let[c,a,u]=o,l=u===void 0?void 0:n[u];if(u!==void 0&&!l)throw new Error(`Missing page composition unit ${u}`);return{key:i(c),...l?{pageCompositionUnitKey:l}:{},operationSummary:Eo(a),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function So(e){return(e.canUpdateText?1:0)|(e.canInsertChild?2:0)|(e.canMove?4:0)|(e.canRemove?8:0)}function Eo(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function Io(e){if(typeof e!="object"||e===null)return!1;let t=e;if(t.encoding!=="segment-trie-v1"||typeof t.siteId!="string"||typeof t.snapshotId!="string"||!Co(t.composition)||typeof t.routeId!="string"||t.routeId!==t.composition.routeId||!Number.isInteger(t.version)||t.version<0||!Wt(t.pageComposition)||!Array.isArray(t.tokens)||!t.tokens.every(i=>typeof i=="string")||!Array.isArray(t.nodes)||!Array.isArray(t.entries))return!1;let n=t.nodes;if(!n.every((i,o)=>Array.isArray(i)&&i.length===2&&(i[0]===null||Me(i[0])&&i[0]<o)&&Me(i[1])&&i[1]<t.tokens.length)||!t.entries.every(i=>Array.isArray(i)&&(i.length===2||i.length===3)&&Me(i[0])&&i[0]<n.length&&Me(i[1])&&i[1]<=15&&(i.length===2||Me(i[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(i=>Array.isArray(i)&&i.length===2&&Me(i[0])&&i[0]<t.entries.length&&Wt(i[1]))}function Wt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Co(e){return!Wt(e)||typeof e.routeId!="string"?!1:e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string"}function Me(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}function vo(e){if(!e)return[];let t=[],n=0,r=qn(e,n);if(r<0)return t.push(e),t;for(t.push(e.slice(0,r)),n=r;n<e.length;){if(r=qn(e,n+(e.startsWith("::",n)?2:1)),r<0){t.push(e.slice(n));break}t.push(e.slice(n,r)),n=r}return t}function qn(e,t){let n=e.indexOf("/",t),r=e.indexOf("::",t);return n<0?r:r<0?n:Math.min(n,r)}var He="SITE_EDIT_COMPOSITION_SESSION_MISMATCH",Fe="SITE_EDIT_COMPOSITION_SESSION_REQUIRED",Da="SITE_EDIT_COMPOSITION_REINITIALIZE_REQUIRED",ce=class e{constructor(){}static parseMessage(t,n={}){let r=JSON.parse(t);if(!e.isMessage(r,n))throw new Error("Invalid site edit bridge message");return r}static stringifyMessage(t){return JSON.stringify(t)}static extractRequestInfo(t){if(Y(t)&&Y(t.payload)){let n=typeof t.payload.id=="string"?t.payload.id:"unknown",r=this.isRequestKind(t.payload.kind)?t.payload.kind:"get-document";return{id:n,kind:r}}return{id:"unknown",kind:"get-document"}}static isRequestKind(t){return t==="initialize-session"||t==="get-document"||t==="get-history-status"||t==="get-style-context"||t==="get-object-edit-context"||t==="get-class-name-source"||t==="get-source-tree"||t==="get-source-file"||t==="resolve-source-location"||t==="execute"||t==="undo"||t==="redo"}static isMessage(t,n={}){return!Y(t)||typeof t.type!="string"?!1:t.type==="request"?Ro(t.payload,n):t.type==="response"||t.type==="error"?Y(t.payload)&&typeof t.payload.id=="string":t.type==="event"?Y(t.payload)&&Y(t.payload.event):t.type==="auth"?Y(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"&&Y(t.payload)&&t.payload.ok===!0}},lt=class{constructor(t){this.options=t,this.session={subscribedCompositionKeys:new Set},this.messageQueue=new Xt,this.eventDispatcher=new Yt(n=>{this.sendJson(n)}),this.unsubscribe=t.engine.subscribe(n=>{this.handleEngineEvent(n)}),t.socket.onmessage=n=>{try{this.messageQueue.enqueue(()=>this.handleRawMessage(n.data))}catch(r){this.sendJson({type:"error",payload:{id:"unknown",kind:"get-document",message:r instanceof Error?r.message:"Bridge queue overflow"}}),t.socket.close(1013,"bridge busy")}},t.socket.onclose=()=>{this.unsubscribe(),this.session.activeComposition=void 0,this.session.subscribedCompositionKeys.clear()}}async handleMessage(t){try{let n=t;if(n.type!=="request")return;let r=n.payload,{id:i}=r;switch(r.kind){case"initialize-session":{let o=Ht(r),s=await this.resolve(o),c=await this.options.engine.initializeSession({composition:s.context,...r.mutationContext?{mutationContext:r.mutationContext}:{}});this.activateSession(s.context),this.sendJson({type:"response",payload:{id:i,kind:r.kind,result:ve({...c,data:{...c.data,document:Wn(c.data.document)}},s.context)}});return}case"get-document":{let o=await this.resolveWireContext(r),s=await this.options.engine.getDocument(o);this.sendResult(i,r.kind,Po(s,o));return}case"get-history-status":{let o=await this.resolveWireContext(r),s=await this.options.engine.getHistoryStatus(o);this.sendResult(i,r.kind,ve(s,o));return}case"get-style-context":{let o=await this.resolveWireContext(r);this.sendResult(i,r.kind,ve(await this.options.engine.getStyleContext(o),o));return}case"get-object-edit-context":{let o=await this.resolveWireContext(r);this.sendResult(i,r.kind,ve(await this.options.engine.getObjectEditContext(r.key,o),o));return}case"get-class-name-source":{let o=await this.resolveWireContext(r);this.sendResult(i,r.kind,ve(await this.options.engine.getClassNameSource(r.key,o),o));return}case"get-source-tree":{let o=await this.resolveWireContext(r);this.sendResult(i,r.kind,ve(await this.options.engine.getSourceTree(o),o));return}case"get-source-file":{let o=await this.resolveWireContext(r);this.sendResult(i,r.kind,ve(await this.options.engine.getSourceFile({path:r.path,composition:o}),o));return}case"resolve-source-location":{let o=await this.resolveWireContext(r),s=ve(await this.options.engine.resolveSourceLocation({key:r.key,composition:o}),o);this.sendResult(i,r.kind,s);return}case"execute":{let o=await this.resolveOperationWireContext(r.request),s=await this.resolveWireContext(r);if(Ae(o)!==Ae(s))throw new Pe(He,"The execute request composition does not match its operation composition.");let c=await this.normalizeOperationRequest(r.request,o);await this.handleBufferedOperation(i,r.kind,()=>this.options.engine.execute(c));return}case"undo":case"redo":{let o=await this.resolveWireContext(r);await this.handleBufferedOperation(i,r.kind,()=>r.kind==="undo"?this.options.engine.undo(o):this.options.engine.redo(o));return}}}catch(n){let r=ce.extractRequestInfo(t);this.sendJson({type:"error",payload:{...r,message:Gt(n),code:jt(n)}})}}async resolve(t){return this.options.engine.resolveComposition(t)}async resolveAndAssert(t){let n=await this.resolve(t),r=this.session.activeComposition;if(!r)throw new Pe(Fe,"Initialize a composition session before issuing this request.");if(Ae(r)!==Ae(n.context))throw new Pe(He,"The request composition does not match the active socket session.");return n.context}async resolveWireContext(t){let n=Ht(t);return this.resolveAndAssert(n)}async resolveOperationWireContext(t){let n=_o(t);return this.resolveAndAssert(n)}activateSession(t){this.session.activeComposition=t,this.session.subscribedCompositionKeys.clear(),this.session.subscribedCompositionKeys.add(Ae(t))}async normalizeOperationRequest(t,n){let r={...t,composition:zn(n)};if(r.target.kind==="route"){let i=r.target,o=Ht(i),s=await this.resolveAndAssert(o);r.target={...i,composition:zn(s)}}return r}handleEngineEvent(t){let n=t?.composition;if(!To(n))return;let r=Ae(n);this.session.subscribedCompositionKeys.has(r)&&(this.eventDispatcher.push(t),t.type==="site-edit.graph.invalidated"&&r===Ao(this.session)&&(this.session.activeComposition=void 0,this.session.subscribedCompositionKeys.delete(r)))}sendResult(t,n,r){this.sendJson({type:"response",payload:{id:t,kind:n,result:r}})}async handleRawMessage(t){try{await this.handleMessage(ce.parseMessage(t,{validateOperationRequest:this.options.validateOperationRequest}))}catch(n){let r=No(t);this.sendJson({type:"error",payload:{...r,message:Gt(n),code:jt(n)}})}}sendJson(t){this.options.socket.send(ce.stringifyMessage(t))}async handleBufferedOperation(t,n,r){this.eventDispatcher.beginBuffering();try{let i=await r();this.sendResult(t,n,i)}catch(i){this.sendJson({type:"error",payload:{id:t,kind:n,message:Gt(i),code:jt(i)}})}finally{this.eventDispatcher.flush()}}},Pe=class extends Error{constructor(t,n){super(n),this.code=t,this.name="BridgeProtocolError"}},Yt=class{constructor(t){this.send=t,this.bufferedEvents=null}push(t){let n={type:"event",payload:{event:t}};if(this.bufferedEvents){this.bufferedEvents.push(n);return}this.send(n)}beginBuffering(){this.bufferedEvents=[]}flush(){let t=this.bufferedEvents??[];this.bufferedEvents=null,t.forEach(n=>this.send(n))}},Xt=class{constructor(t=64){this.maxQueued=t,this.queue=Promise.resolve(),this.queued=0}enqueue(t){if(this.queued>=this.maxQueued)throw new Error("Bridge request queue is full");this.queued+=1;let n=async()=>{this.queued-=1,await t()},r=this.queue.then(n,n);return this.queue=r.then(()=>{},()=>{}),r}};function Ro(e,t){if(!Y(e)||typeof e.id!="string"||!ce.isRequestKind(e.kind))return!1;let n=Ue(e.composition);switch(e.kind){case"initialize-session":return n&&(e.mutationContext===void 0||Ut(e.mutationContext));case"get-document":case"get-style-context":return n;case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return typeof e.key=="string"&&n;case"get-history-status":return n;case"get-source-tree":return n;case"get-source-file":return typeof e.path=="string"&&n;case"execute":return n&&xo(e.request)&&(e.request.mutationContext===void 0||Ut(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return n&&e.mutationContext===void 0||n&&Ut(e.mutationContext)}}function xo(e){return Y(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&Ue(e.composition)&&typeof e.kind=="string"&&Y(e.target)&&(e.target.kind!=="route"||Ue(e.target.composition))&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&Y(e.params)}function Ue(e){return Y(e)&&typeof e.routeId=="string"&&e.routeId.length>0&&(e.templateId===void 0||typeof e.templateId=="string"&&e.templateId.length>0)&&Object.keys(e).every(t=>t==="routeId"||t==="templateId")}function To(e){return Y(e)&&typeof e.routeId=="string"&&(e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string")}function Ht(e){if(Ue(e.composition))return e.composition;throw new Pe(Fe,"A composition selector is required for this request.")}function _o(e){if(Y(e)&&Ue(e.composition))return e.composition;throw new Pe(Fe,"A composition selector is required for execute.")}function zn(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function Ao(e){return e.activeComposition?Ae(e.activeComposition):null}function Ae(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function ve(e,t){return Y(e)&&e.ok===!0?{...e,composition:t}:e}function Po(e,t){return!Y(e)||e.ok!==!0?e:{...e,...t?{composition:t}:{},data:Wn(e.data)}}function Wn(e){let t=e;return Kn(t.routeId?t:{...t,routeId:t.composition.routeId})}function Y(e){return typeof e=="object"&&e!==null}function Ut(e){return Y(e)&&typeof e.editingSessionId=="string"&&e.editingSessionId.length>0&&typeof e.lockId=="string"&&e.lockId.length>0&&typeof e.ownerId=="string"&&e.ownerId.length>0&&typeof e.leaseAssertion=="string"&&e.leaseAssertion.length>0}function jt(e){if(!(!Y(e)||typeof e.code!="string"||e.code.length===0))return e.code}function Gt(e){return e instanceof Error||Y(e)&&typeof e.message=="string"&&e.message.length>0?e.message:"Unknown websocket operation failure"}function No(e){try{return ce.extractRequestInfo(JSON.parse(e))}catch{return{id:"unknown",kind:"get-document"}}}var ko="vcp:designer:trace",wo="designer_trace",Hn="__VCP_DESIGNER_TRACE__";var Do=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function Bo(e=globalThis){let t=e;try{if(t.localStorage?.getItem(ko)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(wo)==="1"}catch{return!1}}function Re(e,t={},n=globalThis){if(!Bo(n))return;let r={type:e,timestamp:Date.now(),payload:Oo(t)},i=n,o=i[Hn]??[];o.push(r),o.length>1e3&&o.splice(0,o.length-1e3),i[Hn]=o;let s=n.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function Oo(e){return Lt(e,0)}function Lt(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>Lt(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,i]of Object.entries(e)){if(Do.test(r)){n[r]="[redacted]";continue}n[r]=Lt(i,t+1)}return n}var pt=class{constructor(t){this.options=t,this.socket=null,this.connectPromise=null,this.connectAttempt=null,this.connectionState="idle",this.intentionalClose=!1,this.sequence=0,this.pending=new Map,this.listeners=new Set,this.connectionStatusListeners=new Set}connect(){return this.socket?.readyState===Jt&&this.connectionState==="open"?(this.setConnectionState("open"),Promise.resolve()):this.connectPromise?this.connectPromise:(this.intentionalClose=!1,this.setConnectionState("connecting"),this.connectPromise=new Promise((t,n)=>{let r;try{r=this.createSocket(this.options.url)}catch(c){let a=je(c,"WebSocket failed");this.socket=null,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("failed",a.message),n(a);return}let i={socket:r,settled:!1,reject:n};this.connectAttempt=i,this.socket=r;let o=()=>{this.socket!==r||this.connectAttempt!==i||(i.settled=!0,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("open"),t())},s=(c,a)=>{this.cleanupSocket(r,c,a)};r.onopen=()=>{if(!(this.socket!==r||this.connectAttempt!==i)){if(this.options.authKey){try{r.send(ce.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(c){s(je(c,"WebSocket auth failed"),"failed")}return}o()}},r.onerror=c=>{if(this.socket!==r)return;let a=je(c,"WebSocket failed");s(a,"failed")},r.onmessage=c=>{if(this.socket===r){if(this.options.authKey&&this.connectAttempt===i&&!i.settled){this.handleAuthHandshakeMessage(c.data,r,i,()=>{o()});return}this.handleMessage(c.data)}},r.onclose=c=>{if(this.socket!==r)return;let a=this.intentionalClose,u=new Error(qo(c,{intentional:a}));s(u,a?"closed":"failed")}}),this.connectPromise)}disconnect(){this.intentionalClose=!0,this.setConnectionState("closing");let t=this.socket;if(!t){this.rejectAll(new Error("WebSocket disconnected")),this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("closed");return}this.cleanupSocket(t,new Error("WebSocket disconnected"),"closed")}getConnectionState(){return this.connectionState}subscribeConnectionStatus(t){return this.connectionStatusListeners.add(t),t({state:this.connectionState}),()=>{this.connectionStatusListeners.delete(t)}}getDocument(t){let n=this.selector(t);return this.request("get-document",{composition:n})}async initializeSession(t){let n=this.selector(t.composition);return await this.request("initialize-session",{composition:n,...t.mutationContext?{mutationContext:t.mutationContext}:{}})}getHistoryStatus(t){return this.request("get-history-status",{composition:this.selector(t)})}getStyleContext(t){let n=this.selector(t);return this.request("get-style-context",{composition:n})}getObjectEditContext(t,n){let r=this.selector(n);return this.request("get-object-edit-context",{key:t,composition:r})}getClassNameSource(t,n){let r=this.selector(n);return this.request("get-class-name-source",{key:t,composition:r})}getSourceTree(t){return this.request("get-source-tree",{composition:this.selector(t)})}getSourceFile(t){return this.request("get-source-file",{path:t.path,composition:this.selector(t.composition)})}resolveSourceLocation(t){return this.request("resolve-source-location",{key:t.key,composition:this.selector(t.composition)})}execute(t,n){let r=ht(t),i={...t,composition:xe(r)};return this.request("execute",{request:i})}undo(t,n){return this.request("undo",{composition:this.selector(t)})}redo(t,n){return this.request("redo",{composition:this.selector(t)})}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}selector(t){return xe(t)}request(t,n){let r=this.socket;if(!r||r.readyState!==Jt||this.connectionState!=="open")return Promise.reject(new Error(`WebSocket is not open (state: ${this.connectionState}, readyState: ${r?.readyState??"none"})`));let i=`${t}-${this.sequence+=1}`,o=zo(i,t,n);return Re("bridge.request",{id:i,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:Un(n.request,"kind"),documentVersion:Un(n.request,"documentVersion")}),new Promise((s,c)=>{let a=this.resolveRequestTimeoutMs(t),u=a>0?setTimeout(()=>{let l=this.pending.get(i);l&&(this.pending.delete(i),Re("bridge.response",{id:i,kind:t,ok:!1,timedOut:!0}),l.reject(new Error(`Bridge request timed out after ${a}ms: ${t}`)))},a):null;u?.unref?.(),this.pending.set(i,{kind:t,timeout:u,resolve:l=>s(l),reject:c});try{r.send(ce.stringifyMessage(o))}catch(l){let d=je(l,"WebSocket send failed");this.clearPendingRequest(i),c(d),this.cleanupSocket(r,d,"failed")}})}handleAuthHandshakeMessage(t,n,r,i){try{if(ce.parseMessage(t).type==="auth-ok"){i();return}throw new Error("Bridge authentication failed")}catch(o){let s=je(o,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=ce.parseMessage(t);if(n.type==="event"){for(let i of this.listeners)i(n.payload.event);return}if(n.type!=="response"&&n.type!=="error")return;let r=this.pending.get(n.payload.id);if(r){if(this.clearPendingRequest(n.payload.id),n.type==="error"){Re("bridge.response",{id:n.payload.id,kind:r.kind,ok:!1});let i=new Error(n.payload.message);n.payload.code&&(i.code=n.payload.code),r.reject(i);return}Re("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:Ko(n.payload.result)}),r.resolve(r.kind==="get-document"?{...n.payload.result,data:Xn(n.payload.result.data,n.payload.result.composition)}:r.kind==="initialize-session"?$o(n.payload.result):n.payload.result)}}rejectAll(t){for(let[n,r]of[...this.pending])this.clearPendingRequest(n),r.reject(t)}clearPendingRequest(t){let n=this.pending.get(t);n&&(n.timeout&&clearTimeout(n.timeout),this.pending.delete(t))}resolveRequestTimeoutMs(t){let n=this.options.requestTimeoutMsByKind?.[t];return typeof n=="number"?Math.max(0,n):typeof this.options.requestTimeoutMs=="number"?Math.max(0,this.options.requestTimeoutMs):Vo[t]??Fo}cleanupSocket(t,n,r){if(this.socket===t&&(this.socket=null),this.connectAttempt?.socket===t){let i=this.connectAttempt;this.connectAttempt=null,i.settled||(i.settled=!0,i.reject(n))}this.connectPromise=null,this.rejectAll(n),this.setConnectionState(r,n.message),t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null;try{(t.readyState===Mo||t.readyState===Jt)&&t.close()}catch{}}setConnectionState(t,n){if(this.connectionState===t&&!n)return;this.connectionState=t;let r={state:t,...n?{message:n}:{}};this.options.onConnectionStatus?.(r);for(let i of this.connectionStatusListeners)i(r)}createSocket(t){if(this.options.createSocket)return this.options.createSocket(t);if(typeof WebSocket>"u")throw new Error("Site edit preview bridge requires WebSocket");return new WebSocket(t)}},Mo=0,Jt=1,Fo=15e3,Vo={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function je(e,t){return e instanceof Error?e:new Error(t)}function qo(e,t){return t.intentional?"WebSocket disconnected":e?.code===1008?e.reason?`Bridge session authentication failed: ${e.reason}`:"Bridge session authentication failed":e?.reason?`WebSocket closed: ${e.reason}`:typeof e?.code=="number"&&e.code!==1005?`WebSocket closed with code ${e.code}`:"WebSocket closed"}function Un(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function Ko(e){if(!e||typeof e!="object")return null;let t=e,n=t.data?.resultVersion??t.data?.version??null;return typeof n=="number"?n:null}function Yn(e){let t="composition"in e?xe(e.composition):xe({routeId:e.routeId});return new Qt({composition:t,initialDocument:e.initialDocument,client:e.client})}var Qt=class{constructor(t){this.params=t,this.serverConfirmedComposition=null,this.refreshInFlight=null,this.objectGeneration=0,this.styleGeneration=0,this.editContextCache=new Map,this.editContextInFlight=new Map,this.classNameSourceCache=new Map,this.classNameSourceInFlight=new Map,this.styleContextCache=new Map,this.styleContextInFlight=new Map,this.snapshotIdentityStale=!1,this.composition=xe(t.composition);let n=t.initialDocument.composition.effectiveTemplateId;if(n!==void 0&&(this.composition.templateId===void 0||this.composition.templateId!==n))throw new Error(`Site edit bridge requires a matching templateId for initial document composition ${JSON.stringify(t.initialDocument.composition)}`);this.currentDocument=t.initialDocument,this.observedDocumentVersion=t.initialDocument.version,this.sessionInitialized=!jn(t.initialDocument),this.activeCompositionContext=this.sessionInitialized?{...t.initialDocument.composition}:null}async getDocument(t){this.requireBoundComposition(t);let n=jn(this.currentDocument)||this.snapshotIdentityStale;return(n||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(n?void 0:this.observedDocumentVersion,"get-document"),this.snapshotIdentityStale=!1,this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(t){let n=this.requireBoundComposition(t.composition);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let r=await this.params.client.initializeSession({...t,composition:n});return this.currentDocument=r.data.document,this.observedDocumentVersion=r.data.document.version,this.activeCompositionContext={...r.composition},this.rememberServerConfirmedComposition(r.composition),this.sessionInitialized=!0,this.clearObjectCaches(),r}async getHistoryStatus(t){return this.params.client.getHistoryStatus(this.requireBoundComposition(t))}async getStyleContext(t){let n=this.requireBoundComposition(t),r=Ge(n),i=this.styleContextCache.get(r);if(i?.generation===this.styleGeneration)return{ok:!0,data:i.value};let o=this.styleContextInFlight.get(r);if(o?.generation===this.styleGeneration)return o.request;let s=this.styleGeneration,c=this.params.client.getStyleContext(n).then(a=>(this.styleGeneration===s&&this.styleContextCache.set(r,{generation:s,value:a.data}),a)).finally(()=>{this.styleContextInFlight.get(r)?.request===c&&this.styleContextInFlight.delete(r)});return this.styleContextInFlight.set(r,{generation:s,request:c}),c}async ensureDocumentVersion(t,n){this.requireBoundComposition(t);let r=await this.refreshSnapshot(n,"ensure-version");if(r.version<n)throw new Error(`Document refresh returned version ${r.version}, expected at least ${n}`);return{ok:!0,data:r}}async acknowledgeDocumentVersion(t,n){if(this.requireBoundComposition(t),n>this.currentDocument.version){if(this.currentDocument.pageComposition.status==="supported"){let r=await this.refreshSnapshot(n,"ensure-version");if(r.version<n)throw new Error(`Document refresh returned version ${r.version}, expected at least ${n}`);return{ok:!0,data:r}}this.currentDocument={...this.currentDocument,version:n},this.clearObjectCaches({preserveStyleContext:!0})}return this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n),{ok:!0,data:this.currentDocument}}async getObjectEditContext(t,n){let r=this.requireBoundComposition(n),i=this.objectCacheKey(t,r),o=this.editContextCache.get(i);if(o)return{ok:!0,data:o};let s=this.editContextInFlight.get(i);if(s)return s;let c=this.objectGeneration,a=this.params.client.getObjectEditContext(t,r).then(u=>(this.objectGeneration===c&&this.editContextCache.set(i,u.data),u)).finally(()=>{this.editContextInFlight.get(i)===a&&this.editContextInFlight.delete(i)});return this.editContextInFlight.set(i,a),a}async getClassNameSource(t,n){let r=this.requireBoundComposition(n),i=this.objectCacheKey(t,r),o=this.classNameSourceCache.get(i);if(o)return o;let s=this.classNameSourceInFlight.get(i);if(s)return s;let c=this.objectGeneration,a=this.params.client.getClassNameSource(t,r).then(u=>(this.objectGeneration===c&&this.classNameSourceCache.set(i,u),u)).finally(()=>{this.classNameSourceInFlight.get(i)===a&&this.classNameSourceInFlight.delete(i)});return this.classNameSourceInFlight.set(i,a),a}async getSourceTree(t){return this.params.client.getSourceTree(this.requireBoundComposition(t))}async getSourceFile(t){return this.params.client.getSourceFile({path:t.path,composition:this.requireBoundComposition(t.composition)})}async resolveSourceLocation(t){return this.params.client.resolveSourceLocation({key:t.key,composition:this.requireBoundComposition(t.composition)})}async execute(t,n){let r=ht(t);r&&this.composition.templateId!==void 0&&this.requireBoundComposition(r);let i={...t,composition:r??this.composition};return this.params.client.execute(i)}async undo(t,n){return this.params.client.undo(this.requireBoundComposition(t))}async redo(t,n){return this.params.client.redo(this.requireBoundComposition(t))}subscribe(t){return this.params.client.subscribe(n=>{if(n.type==="site-edit.snapshot.changed"&&this.sessionInitialized&&this.isActiveComposition(n.composition)){this.snapshotIdentityStale=!0,this.clearObjectCaches(),t(n);return}if(n.type==="site-edit.document.changed"&&this.sessionInitialized&&this.isActiveComposition(n.composition)){this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n.version),n.version>this.currentDocument.version&&this.clearObjectCaches(),t(n);return}t(n)})}async refreshSnapshot(t,n="ensure-version"){if(typeof t=="number"&&this.currentDocument.version>=t)return Re("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:n}),this.currentDocument;let r=Ge(this.composition),i=this.refreshInFlight;if(i?.compositionKey===r){Re("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,source:n});let s=await i.request;if(typeof t!="number"||s.version>=t||this.currentDocument.version>=t)return this.currentDocument}Re("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!1,source:n});let o=this.params.client.getDocument(this.composition).then(s=>(this.currentDocument=s.data,this.activeCompositionContext={...s.data.composition},this.rememberServerConfirmedComposition(s.data.composition),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,s.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight={compositionKey:r,request:o};try{return await o}finally{this.refreshInFlight?.request===o&&(this.refreshInFlight=null)}}clearObjectCaches(t){this.objectGeneration+=1,this.editContextCache.clear(),this.editContextInFlight.clear(),this.classNameSourceCache.clear(),this.classNameSourceInFlight.clear(),!t?.preserveStyleContext&&(this.styleGeneration+=1,this.styleContextCache.clear(),this.styleContextInFlight.clear())}objectCacheKey(t,n){return`${Ge(n)}\0${t}`}rememberServerConfirmedComposition(t){!t||typeof t.routeId!="string"||(this.serverConfirmedComposition={...t})}isAcceptedComposition(t){if(Ge(t)===Ge(this.composition))return!0;let n=this.serverConfirmedComposition;return n!==null&&dt(n)===dt(Gn(t))}requireBoundComposition(t){let n=t===void 0?this.composition:xe(t);if(!this.isAcceptedComposition(n))throw new Error(`Site edit bridge is bound to composition ${JSON.stringify(this.composition)}, received ${JSON.stringify(n)}`);return xe(n)}isActiveComposition(t){let n=this.activeCompositionContext??Gn(this.composition);return dt(t)===dt(n)}};function jn(e){return e.version===0&&e.entries.length===0}function $o(e){let t=e;return{...t,data:{...t.data,document:Xn(t.data.document,t.composition)}}}function Xn(e,t){let n=e,r=$n(n.routeId?n:{...n,routeId:t?.routeId??n.composition?.routeId});return t?{...r,composition:t}:r}function xe(e){if(e&&typeof e=="object"&&typeof e.routeId=="string"){let t="effectiveTemplateId"in e?e.effectiveTemplateId:"templateId"in e?e.templateId:void 0;return{routeId:e.routeId,...typeof t=="string"?{templateId:t}:{}}}throw new Error("SITE_EDIT_COMPOSITION_SESSION_REQUIRED: a composition selector is required")}function Ge(e){return JSON.stringify([e.routeId,e.templateId??null])}function dt(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function Gn(e){return{routeId:e.routeId,...e.templateId?{effectiveTemplateId:e.templateId}:{}}}function ht(e){if(e&&typeof e=="object"){let t=e;if(t.composition&&typeof t.composition=="object"){let n=t.composition;if(typeof n.routeId=="string")return{routeId:n.routeId,...typeof n.templateId=="string"?{templateId:n.templateId}:{}}}}}function zo(e,t,n){let r=xe(t==="execute"?ht(n.request):n.composition),i={id:e,kind:t,composition:r};switch(t){case"initialize-session":case"get-document":case"get-history-status":case"get-style-context":case"get-source-tree":case"undo":case"redo":return{type:"request",payload:{...i,...n.mutationContext?{mutationContext:n.mutationContext}:{}}};case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return{type:"request",payload:{...i,key:String(n.key)}};case"get-source-file":return{type:"request",payload:{...i,path:String(n.path)}};case"execute":return{type:"request",payload:{...i,request:{...n.request,composition:ht(n.request)??r}}}}}function oe(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}var Ln="vcp-window-message",Jn=1;function Qn(e){return{source:Ln,version:Jn,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function Zn(e){try{return C(e)?X(e,"source",Ln)&&X(e,"version",Jn)&&w(e,"namespace")&&w(e,"channel")&&de(e,"body")&&(!ke(e,"sessionKey")||w(e,"sessionKey")):!1}catch{return!1}}var yt="site-edit",er="frame-runtime",tr="frame-announce",en=1,Ye=1,Xe=1,nr=24;function Je(e,t={}){return Qn({namespace:yt,channel:er,sessionKey:t.sessionKey,body:e})}function rr(){return Qn({namespace:yt,channel:tr,body:{type:"announce"}})}function za(e){try{return!Zn(e)||e.namespace!==yt||e.channel!==tr?!1:C(e.body)&&X(e.body,"type","announce")&&fe(e.body,["type"])}catch{return!1}}function or(e){try{return!Zn(e)||e.namespace!==yt||e.channel!==er?!1:hi(e.body)}catch{return!1}}function Ie(e){return C(e)&&w(e,"routeId")&&Ne(e,"templateId")&&fe(e,["routeId","templateId"])}function ft(e){return C(e)&&w(e,"routeId")&&Ne(e,"effectiveTemplateId")&&fe(e,["routeId","effectiveTemplateId"])}function fe(e,t){let n=new Set(t);return Reflect.ownKeys(e).every(r=>typeof r=="string"&&n.has(r))}var ke=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function de(e,t){let n=Object.getOwnPropertyDescriptor(e,t);return n!==void 0&&"value"in n}function p(e,t){return Object.getOwnPropertyDescriptor(e,t)?.value}function X(e,t,n){return de(e,t)&&p(e,t)===n}function w(e,t){return de(e,t)&&typeof p(e,t)=="string"}function bt(e,t){return de(e,t)&&typeof p(e,t)=="boolean"}function V(e,t){let n=p(e,t);return de(e,t)&&typeof n=="number"&&Number.isFinite(n)}function Wo(e,t){let n=p(e,t);return de(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>0}function Ne(e,t){return!ke(e,t)||p(e,t)===void 0||w(e,t)}function Ve(e,t){return!ke(e,t)||p(e,t)===void 0||V(e,t)}function mt(e,t){let n=p(e,t);return!ke(e,t)||n===void 0||de(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function L(e,t){return!ke(e,t)||p(e,t)===void 0}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ho(e){return C(e)&&Reflect.ownKeys(e).length===0}function gt(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t+=1){let n=Object.getOwnPropertyDescriptor(e,String(t));if(n===void 0||!("value"in n)||typeof n.value!="string")return!1}return!0}function me(e){return C(e)&&w(e,"key")&&mt(e,"instanceIndex")&&mt(e,"instanceCount")&&mt(e,"textSegmentIndex")}function Uo(e){return C(e)&&w(e,"blockId")&&me(p(e,"ref"))&&Le(p(e,"rect"))&&bt(e,"targetIsSectionRoot")}function jo(e){if(!C(e))return!1;let t=p(e,"placement"),n=p(e,"boundary");return w(e,"anchorBlockId")&&me(p(e,"anchorRef"))&&(t==="before"||t==="after")&&C(n)&&V(n,"top")&&V(n,"left")&&V(n,"width")}function Le(e){return C(e)&&["top","left","width","height"].every(t=>V(e,t))}function ir(e){if(!C(e))return!1;let t=p(e,"rect"),n=p(e,"layout"),r=C(n)?p(n,"containingBlock"):null,i=p(e,"scrollContext"),o=C(r)&&(X(r,"kind","viewport")&&Reflect.ownKeys(r).length===1||X(r,"kind","document")&&Reflect.ownKeys(r).length===1||X(r,"kind","element")&&w(r,"runtimeNodeId"));return X(e,"version",en)&&w(e,"runtimeNodeId")&&C(t)&&Le(p(t,"viewport"))&&Le(p(t,"document"))&&C(n)&&w(n,"position")&&w(n,"transform")&&o&&C(i)&&["scrollX","scrollY","viewportWidth","viewportHeight"].every(s=>V(i,s))&&de(i,"scrollContainers")&&Go(p(i,"scrollContainers"))}function Go(e){return Array.isArray(e)&&e.every(t=>C(t)&&w(t,"runtimeNodeId")&&V(t,"scrollLeft")&&V(t,"scrollTop"))}function Zt(e){return C(e)&&(L(e,"layoutSnapshot")||ir(p(e,"layoutSnapshot")))}function Yo(e){return C(e)&&me(p(e,"ref"))&&de(e,"layoutSnapshot")&&ir(p(e,"layoutSnapshot"))&&(L(e,"childBoxes")||Jo(p(e,"childBoxes")))&&(L(e,"childRects")||Lo(p(e,"childRects")))&&(L(e,"layout")||Xo(p(e,"layout")))&&(L(e,"spacing")||Qo(p(e,"spacing")))}function Xo(e){if(!C(e))return!1;let t=p(e,"indicatorOrientation");return w(e,"display")&&(t==="horizontal"||t==="vertical")&&Ne(e,"flexDirection")&&Ne(e,"gridAutoFlow")}function Lo(e){return Array.isArray(e)&&e.every(t=>Le(t))}function Jo(e){return Array.isArray(e)&&e.every(t=>C(t)&&Le(p(t,"rect"))&&sr(p(t,"margin")))}function sr(e){return C(e)&&["marginTop","marginRight","marginBottom","marginLeft"].every(t=>V(e,t))}function Qo(e){return sr(e)&&["paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","columnGap","rowGap"].every(t=>V(e,t))}function Zo(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t+=1){let n=Object.getOwnPropertyDescriptor(e,String(t));if(n===void 0||!("value"in n)||!Yo(n.value))return!1}return!0}function ei(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&de(e,t)&&(typeof p(e,t)=="string"||p(e,t)===null))}function cr(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function ti(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&de(e,t)&&cr(p(e,t)))}function ni(e){if(!C(e))return!1;let t=p(e,"priority");return w(e,"property")&&de(e,"value")&&cr(p(e,"value"))&&(!ke(e,"priority")||t===void 0||t==="important")}function ri(e){return C(e)?(L(e,"attributes")||ei(p(e,"attributes")))&&Ne(e,"className")&&(L(e,"style")||ti(p(e,"style")))&&(L(e,"styleDeclarations")||Array.isArray(p(e,"styleDeclarations"))&&p(e,"styleDeclarations").every(ni)):!1}function oi(e){return C(e)&&V(e,"x")&&V(e,"y")&&(L(e,"detailLevel")||X(e,"detailLevel","summary")||X(e,"detailLevel","full"))}function ii(e){return C(e)&&me(p(e,"ref"))}function si(e){if(!C(e)||!C(p(e,"variables")))return!1;let t=p(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&w(t,n))?L(e,"stylesheets")||gt(p(e,"stylesheets")):!1}function ci(e){if(!X(e,"type","request")||!w(e,"id")||!w(e,"kind")||!de(e,"payload"))return!1;let t=p(e,"kind"),n=p(e,"payload");switch(t){case"hit-test-at-point":case"start-text-edit-at-point":return oi(n);case"bridge-get-source-tree":return C(n)&&Ie(p(n,"composition"))&&fe(n,["composition"]);case"get-scroll-metrics":case"clear-theme-override":return Ho(n);case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return C(n)&&Ie(p(n,"composition"))&&fe(n,["composition"]);case"bridge-get-source-file":return C(n)&&w(n,"path")&&Ie(p(n,"composition"))&&fe(n,["path","composition"]);case"bridge-resolve-source-location":case"bridge-get-object-edit-context":case"bridge-get-class-name-source":return C(n)&&w(n,"key")&&Ie(p(n,"composition"))&&fe(n,["key","composition"]);case"scroll-to":return C(n)&&V(n,"x")&&V(n,"y");case"scroll-by":return C(n)&&V(n,"deltaX")&&V(n,"deltaY");case"set-interaction-mode":return C(n)&&bt(n,"enabled");case"set-selection-visual":return C(n)&&X(n,"version",Ye)&&me(p(n,"ref"))&&X(n,"visible",!0);case"clear-selection-visual":return C(n)&&X(n,"version",Ye);case"set-resize-visual":return C(n)&&X(n,"version",Xe)&&me(p(n,"ref"))&&X(n,"visible",!0);case"clear-resize-visual":return C(n)&&X(n,"version",Xe);case"set-theme-override":return si(n);case"get-theme-variables":return C(n)&&gt(p(n,"names"));case"compute-drop-target-at-point":return C(n)&&V(n,"x")&&V(n,"y")&&(X(n,"dragKind","insert")||X(n,"dragKind","move"))&&(L(n,"movingRef")||me(p(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return C(n)&&(L(n,"ref")||me(p(n,"ref")));case"apply-node-patch":return C(n)&&me(p(n,"ref"))&&ri(p(n,"patch"))&&(L(n,"preview")||C(p(n,"preview"))&&w(p(n,"preview"),"sessionId")&&mt(p(n,"preview"),"revision")&&ke(p(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return ii(n);case"bridge-initialize-session":case"bridge-get-style-context":return C(n)&&Ie(p(n,"composition"))&&fe(n,["composition"]);case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return C(n)&&Ie(p(n,"composition"))&&Ve(n,"minVersion")&&Ve(n,"version")&&fe(n,["composition","minVersion","version"]);case"bridge-execute":{if(!C(n))return!1;let r=p(n,"request"),i=p(n,"composition"),o=C(r)?p(r,"composition"):null;return!Ie(i)||!C(r)||!Ie(o)?!1:oe({routeId:i.routeId,...i.templateId?{effectiveTemplateId:i.templateId}:{}})===oe({routeId:o.routeId,...o.templateId?{effectiveTemplateId:o.templateId}:{}})&&fe(n,["composition","request"])}case"bridge-subscribe":case"bridge-unsubscribe":return C(n)&&w(n,"subscriptionId")&&Ie(p(n,"composition"))&&fe(n,["subscriptionId","composition"]);default:return!1}}function ai(e){return X(e,"type","response")&&w(e,"id")&&bt(e,"ok")&&(L(e,"error")||w(e,"error"))}function ui(e){if(!C(e))return!1;let t=p(e,"type");if(typeof t!="string"||!ft(p(e,"composition"))||!w(e,"siteId")||!w(e,"at"))return!1;switch(t){case"site-edit.document.changed":return w(e,"snapshotId")&&V(e,"version");case"site-edit.operation.planned":return w(e,"operationId")&&w(e,"baseSnapshotId")&&gt(p(e,"changedFiles"));case"site-edit.operation.completed":return C(p(e,"result"));case"site-edit.operation.failed":return w(e,"requestId")&&C(p(e,"error"));case"site-edit.capability.changed":return gt(p(e,"keys"));case"site-edit.graph.invalidated":return!0;case"site-edit.graph.ready":return V(e,"version");case"site-edit.graph.error":return w(e,"message");default:return!1}}var li=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]),ar=new Set(["e","s","se"]);function di(e,t){if(L(e,"resizeSession"))return!0;let n=p(e,"resizeSession");if(!C(n))return!1;let r=p(e,"pointerId"),i=p(n,"pointerId"),o=p(n,"phase"),s=p(n,"edge"),c=t==="pointer-down"?"start":t==="pointer-up"?"commit":t==="pointer-cancel"?"cancel":null;return p(n,"version")===1&&o===c&&w(n,"sessionId")&&String(p(n,"sessionId")).length>0&&typeof r=="number"&&Number.isInteger(r)&&typeof i=="number"&&Number.isInteger(i)&&r===i&&typeof s=="string"&&ar.has(s)&&p(e,"resizeEdge")===s&&me(p(n,"ref"))&&["startWidth","startHeight","width","height"].every(a=>V(n,a))}function pi(e){if(!X(e,"type","event")||!w(e,"kind")||!C(p(e,"payload")))return!1;let t=p(e,"kind"),n=p(e,"payload");switch(t){case"text-edit-commit":case"text-edit-cancel":case"text-edit-exit":case"text-edit-input":return me(p(n,"ref"))&&Ne(n,"value")&&(L(n,"hit")||Zt(p(n,"hit")));case"node-bounds-change":return Zt(p(n,"hit"));case"geometry-batch":{let r=p(n,"reason");return Wo(n,"sequence")&&V(n,"sourceEventAt")&&V(n,"captureStartedAt")&&V(n,"capturedAt")&&(r==="scroll"||r==="resize"||r==="mutation")&&Zo(p(n,"snapshots"))}case"bridge-event":{let r=p(n,"event"),i=p(n,"composition");return!ui(r)||!ft(i)?!1:w(n,"subscriptionId")&&oe(i)===oe(r.composition)}case"route-ready":return ft(p(n,"composition"))&&w(n,"editEngineVersion")&&V(n,"sequence")&&V(n,"version");case"bridge-status":{let r=p(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&ft(p(n,"composition"))&&V(n,"sequence")&&Ve(n,"attempt")&&Ve(n,"retryInMs")&&Ne(n,"messageKey")}case"scroll":{let r=p(n,"metrics");return C(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(i=>V(r,i))}default:return li.has(t)&&V(n,"clientX")&&V(n,"clientY")&&Ve(n,"buttons")&&Ve(n,"pointerId")&&(L(n,"hoverVisualOwned")||bt(n,"hoverVisualOwned"))&&(L(n,"resizeEdge")||w(n,"resizeEdge")&&ar.has(p(n,"resizeEdge")))&&di(n,t)&&(p(n,"hit")===null||Zt(p(n,"hit")))&&(L(n,"section")||p(n,"section")===null||Uo(p(n,"section")))&&(L(n,"sectionGap")||p(n,"sectionGap")===null||jo(p(n,"sectionGap")))}}function hi(e){if(!C(e))return!1;switch(p(e,"type")){case"request":return ci(e);case"response":return ai(e);case"event":return pi(e);default:return!1}}var sn="vcp-site-edit:route-ready",cn="vcp-site-edit:bridge-status",Dt="data-vcp-page-template-context",ln="1",dn="data-vcp-route-id",pn="data-vcp-effective-template-id",Tr=`[${Dt}="${ln}"]`,Ze="SITE_EDIT_COMPOSITION_MARKER_INVALID",_r="SITE_EDIT_COMPOSITION_RENDER_MISMATCH",fi=80,mi=120,gi=1e3,yi="data-vcp-ui-component",Ar="data-vcp-theme-preview",ur="::repeat-item#",St="components/ui",tn="data-site-block-id",nn="data-vcp-runtime-site-block-id",bi=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),Si=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function Ei(e,t){let n=Array.from(e.querySelectorAll("[data-vcp-edit-key]"));for(let c of n)c.getAttribute(nn)==="true"&&(c.removeAttribute(tn),c.removeAttribute(nn));if(!t)return;let r=n.filter(c=>c.tagName.toLowerCase()==="section"),i=r.length>0?r:n.filter(c=>c.tagName.toLowerCase()==="main"),o=new Set(i),s=new Map;for(let c of i){let a=c.parentElement,u=!1;for(;a;){if(o.has(a)){u=!0;break}a=a.parentElement}if(u||c.getAttribute(tn)?.trim())continue;let l=c.getAttribute("data-vcp-edit-key")?.trim();if(!l)continue;let d=s.get(l)??0;s.set(l,d+1);let h=`vcp-runtime:${encodeURIComponent(l)}:${d}`;c.setAttribute(tn,h),c.setAttribute(nn,"true")}}function xt(e,t=""){let n=Dr(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,i=r.startsWith("/")?r:`/${r}`;return i==="/"?"/":i.replace(/\/+$/,"")}function Ii(e){let t=Array.from(e.querySelectorAll(Tr)).filter(s=>s.getAttribute(Dt)===ln);if(t.length===0)return null;if(t.length!==1)throw new Error(`${Ze}: expected exactly one marker`);let n=t[0],r=n.getAttribute(dn),i=n.getAttribute(pn);if(!r?.trim()||!i?.trim())throw new Error(`${Ze}: marker fields are required`);let o=vi(r);if(!o)throw new Error(`${Ze}: marker route is invalid`);return{routeId:o,effectiveTemplateId:i}}function Ci(e){let t=xt(e.pathname,e.basePath??""),n=Ii(e.document);if(!n)return{routeId:t};if(n.routeId!==t)throw new Error(`${Ze}: marker route ${n.routeId} does not match pathname ${t}`);return n}function vi(e){return!e.startsWith("/")||e.includes("?")||e.includes("#")?null:xt(e)}function lr(e,t){return oe(e)===oe(t)}function Et(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function Ri(e,t){if(e.__VCP_SITE_EDIT_VERSION_LOGGED__)return;let n=e.console?.info;typeof n=="function"&&(e.__VCP_SITE_EDIT_VERSION_LOGGED__=!0,n.call(e.console,"[VCP Site Edit] runtime loaded",{bridge:t.versions?.bridge??"unknown",contracts:t.versions?.contracts??"unknown",documentVersion:t.documentVersion,engine:t.versions?.engine??"unknown",routeId:t.routeId}))}function xi(e,t={}){if(t.explicit_ws_url)return t.explicit_ws_url.startsWith("/")?`${e.location.protocol==="https:"?"wss:":"ws:"}//${e.location.host}${t.explicit_ws_url}`:t.explicit_ws_url;let n=e.location.protocol==="https:"?"wss:":"ws:",r=t.port?`${e.location.hostname}:${t.port}`:e.location.host;return`${n}//${r}${t.path??"/__vcp/site-edit/bridge"}`}async function Ya(e=window,t={}){let n=xi(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=Ti({bridgeUrl:n,options:t}),i=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(i?.started){if(_i(i.signature,r)){await i.syncRoute?.();return}i.cleanup?.()}let o={activeClient:null,activeBridge:null,cleanupFrameRuntime:(()=>{}),retryTimer:void 0,routeSequence:0,syncInFlight:null,syncScheduled:!1,disposed:!1,currentDocument:null,currentEntriesByKey:new Map,unsubscribeDocument:void 0,unsubscribeConnectionStatus:void 0,unbindBootstrapLifecycle:void 0,unbindRouteChange:void 0,unbindCompositionMarker:void 0},s,c=()=>e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__===s,a=t.create_client??(m=>new pt({url:m,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??Zi,l=()=>{o.retryTimer&&(e.clearTimeout(o.retryTimer),o.retryTimer=void 0)},d=()=>Ci({pathname:e.location.pathname,document:e.document,basePath:t.basePath}),h=()=>oe(d()),g=()=>xt(e.location.pathname,t.basePath||""),N=!!e.parent&&e.parent!==e,E=m=>{es(e,{...m,sequence:m.sequence??o.routeSequence})},_=m=>{o.currentDocument=m,o.currentEntriesByKey=new Map((m?.entries??[]).map(T=>[T.key,T])),Ei(e.document,!!m)},A=()=>{o.unsubscribeConnectionStatus?.(),o.unsubscribeConnectionStatus=void 0,o.unsubscribeDocument?.(),o.unsubscribeDocument=void 0},B=(m,T)=>{if(o.disposed||T!==o.routeSequence)return!1;try{return m===h()}catch{return!1}},q=async(m,T,v)=>{let M=o.activeBridge;if(!M)return null;let F=await M.getDocument(m);return B(T,v)&&_(F.data),F.data},b=()=>{A(),_(null);let m=o.activeBridge;o.activeBridge=null,m&&e.__VCP_SITE_EDIT__===m&&delete e.__VCP_SITE_EDIT__;let T=o.activeClient;o.activeClient=null,T?.disconnect()},ie=m=>m===s.compositionKey&&!!o.activeBridge&&(N||!!(o.currentDocument&&ns(o.currentDocument,m)))&&ts(o.activeClient),z=m=>Math.min(gi*2**Math.max(0,m),8e3),te=(m,T,v,M)=>{if(o.disposed)return;l();let F=z(M);E({state:"reconnecting",composition:m,attempt:M,retryInMs:F,messageKey:"studio.status.previewBridgeConnecting"}),o.retryTimer=e.setTimeout(()=>{o.retryTimer=void 0,!(o.disposed||v!==o.routeSequence||!B(T,v))&&P(M+1).catch(le=>{let f;try{f=h()}catch{return}if(T===f){if(qe(le)){E({state:"reload-required",composition:m,attempt:M,messageKey:"studio.errors.previewBridgeReloadRequired"});return}te(m,T,o.routeSequence,M+1)}})},F)},W=(m,T,v)=>{if(!B(T,v)||o.activeClient===null)return;let M=o.activeClient;A(),_(null);let F=o.activeBridge;o.activeBridge=null,F&&e.__VCP_SITE_EDIT__===F&&delete e.__VCP_SITE_EDIT__,o.activeClient=null,M.disconnect(),te(m,T,v,0)},Q=(m,T,v,M)=>{if(!(!B(T,v)||o.activeClient===null)){if(qe(M.message)){b(),l(),E({state:"reload-required",composition:m,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}W(m,T,v)}},U=m=>{let T;try{T=d()}catch{return}let v=oe(T),M=o.routeSequence;if(!(!B(v,M)||o.activeClient===null)){if(qe(m)){b(),l(),E({state:"reload-required",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(ss(m)){W(T,v,M);return}kr(m)&&Q(T,v,M,{state:"failed",message:we(m,"Site edit bridge request failed")})}};o.cleanupFrameRuntime=wi(e,{getCurrentDocument:()=>o.currentDocument,getDocumentEntry:m=>o.currentEntriesByKey.get(m)??null,setCurrentDocument:_,onBridgeRequestError:m=>{U(m)}});let x=async()=>P(0),P=async m=>{if(o.disposed)return;let T=d(),v=oe(T);if(ie(v))return;let M=o.syncInFlight;if(M?.compositionKey===v)return M.promise;let F=o.routeSequence+1,le=D(T,v,F,m);o.syncInFlight={compositionKey:v,sequence:F,promise:le};try{await le}finally{o.syncInFlight?.promise===le&&(o.syncInFlight=null)}},D=async(m,T,v,M)=>{o.routeSequence=v,l(),b(),E({state:M>0?"reconnecting":"connecting",composition:m,attempt:M,messageKey:M>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let F=a(n),le=!1;o.activeClient=F,o.unsubscribeConnectionStatus=F.subscribeConnectionStatus?.(f=>{le&&(f.state==="closed"||f.state==="failed")&&Q(m,T,v,f)});try{if(await F.connect(),!B(T,v)){F.disconnect();return}let f=Yn({composition:Et(m),client:F,initialDocument:ki(m)});o.activeBridge=f,c()&&(e.__VCP_SITE_EDIT__=f),o.activeClient=F,o.unsubscribeDocument=f.subscribe(K=>{if(oe(K.composition)===T){if(K.type==="site-edit.snapshot.changed"){q(Et(m),T,v).catch(()=>{});return}K.type==="site-edit.document.changed"&&o.currentDocument&&K.version>o.currentDocument.version?q(Et(m),T,v).catch(()=>{}):K.type==="site-edit.graph.invalidated"&&G()}}),c()&&(s.routeId=m.routeId,s.composition=m,s.compositionKey=T);let I=N?null:await f.initializeSession({composition:Et(m)}),y=I?.data.document??null;if(I&&(!lr(I.composition,m)||!lr(I.data.document.composition,m)))throw new Error(`${_r}: initialize response does not match marker`);if(y&&_(y),!B(T,v)){F.disconnect();return}le=!0,E({state:"ready",composition:m,attempt:M,messageKey:"studio.status.previewReady"}),Ri(e,{documentVersion:y?.version??0,routeId:m.routeId,versions:t.runtime_versions}),y&&Nr(e,{composition:m,editEngineVersion:t.runtime_versions?.engine??"unknown",sequence:v,version:y.version})}catch(f){if(A(),o.activeClient===F&&(o.activeClient=null),o.activeBridge&&e.__VCP_SITE_EDIT__===o.activeBridge&&delete e.__VCP_SITE_EDIT__,o.activeBridge=null,F.disconnect(),_(null),!B(T,v))return;throw E({state:qe(f)?"reload-required":"failed",composition:m,attempt:M,messageKey:qe(f)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),f}},H=m=>{if(o.disposed)return;let T;try{T=d()}catch{E({state:"failed",composition:{routeId:xt(e.location.pathname,t.basePath||"")},attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}let v=oe(T);if(qe(m)){l(),E({state:"reload-required",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(os(m)||rs(m)){E({state:"failed",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}te(T,v,o.routeSequence,0)},G=()=>{o.syncScheduled||o.disposed||(o.syncScheduled=!0,u(()=>{o.syncScheduled=!1,!o.disposed&&x().catch(m=>H(m))}))},Z=()=>{o.disposed||(o.disposed=!0,o.syncScheduled=!1,o.syncInFlight=null,l(),o.routeSequence+=1,o.unbindRouteChange?.(),o.unbindRouteChange=void 0,o.unbindCompositionMarker?.(),o.unbindCompositionMarker=void 0,o.unbindBootstrapLifecycle?.(),o.unbindBootstrapLifecycle=void 0,o.cleanupFrameRuntime(),b(),c()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};if(s={started:!0,signature:r,syncRoute:x,cleanup:Z},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,o.unbindBootstrapLifecycle=Pi(e,Z),o.unbindRouteChange=Ji(e,G,g),o.unbindCompositionMarker=Qi(e,G),t.defer_initial_sync){G();return}await x()}function Ti(e){return{basePath:Dr(e.options.basePath??""),bridgeUrl:e.bridgeUrl,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:Ai(e.options.bridge_session_key)}}function _i(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function Ai(e){if(!e)return null;let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return`${e.length}:${t.toString(36)}`}function Pi(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),Ni(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function Ni(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function ki(e){return{siteId:"preview",snapshotId:"preview",composition:e,version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function wi(e=window,t={}){let n=null,r=null,i=null,o=null,s=null,c=null,a=0,u=null,l=null,d=null,h=null,g=null,N=0,E=new Map,_=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,A=()=>{n?.(),n=null,r=null},B=()=>{let f=e.parent;if(!(!f||f===e))try{f.postMessage(rr(),"*")}catch{}},q=()=>{i?.(),i=null,o?.(),o=null,s?.cleanup(),s=null,c?.cleanup(),c=null},b=(f,I,y)=>{let K=u?.sessionKey!==f||u?.sourceWindow!==I||u?.targetOrigin!==y;u={sessionKey:f,sourceWindow:I,targetOrigin:y},K&&(a=0,h=null,g=null)},ie=(f,I)=>{let y=e.parent&&e.parent!==e?e.parent:null;return!y||I!==y?!1:!_||f===_},z=()=>{for(let f of E.values())f();E.clear()},te=f=>JSON.stringify([oe(f.composition),f.editEngineVersion,f.sequence,f.version]),W=()=>!d||d.state==="ready",Q=f=>JSON.stringify([f.state,oe(f.composition),f.sequence,f.attempt??null,f.retryInMs??null,f.messageKey??null]),U=f=>{if(!W())return;let I=te(f);h!==I&&(o?.(),o=null,s?.cleanup(),s=null,c?.cleanup(),c=null,Z({kind:"route-ready",payload:{composition:f.composition,editEngineVersion:f.editEngineVersion,sequence:f.sequence,version:f.version}}),u&&(h=I))},x=f=>{let I=Q(f);g!==I&&(f.state!=="ready"&&(h=null,l=null),Z({kind:"bridge-status",payload:f}),u&&(g=I))},P=f=>{l=f,U(f)},D=f=>{d=f,x(f)},H=()=>{l&&U(l)},G=()=>{d&&x(d)},Z=f=>{u&&u.sourceWindow.postMessage(Je({type:"event",...f},{sessionKey:u.sessionKey}),u.targetOrigin)},m=(f,I,y,K)=>{let j=t.getCurrentDocument?.()??null,se=fs(e.document,I.clientX,I.clientY),R=I.resizeSession?null:nt(e.document,I.clientX,I.clientY,j),ee=R?ge(R,y==="full"?ye(e.document,R,j):Nt(e.document,R,j),t.getDocumentEntry,y):null,ae=ms(e.document,se,j),pe=ys(e.document,I,j,t.getDocumentEntry);K&&ee&&(f==="pointer-click"||f==="pointer-double-click")&&(K.preventDefault(),K.stopPropagation(),typeof K.stopImmediatePropagation=="function"&&K.stopImmediatePropagation()),Z({kind:f,payload:{clientX:I.clientX,clientY:I.clientY,buttons:Number(I.buttons??0),pointerId:I.pointerId,hoverVisualOwned:I.hoverVisualOwned,resizeEdge:I.resizeEdge,resizeSession:I.resizeSession,hit:ee,section:ae,sectionGap:pe}})},T=f=>{Z({kind:"pointer-leave",payload:{clientX:f?.clientX??0,clientY:f?.clientY??0,buttons:Number(f?.buttons??0),hit:null,section:null,sectionGap:null}})},v=(f,I,y)=>{q(),u={sessionKey:f,sourceWindow:I,targetOrigin:y};let K=rc(e.document),j=Di(e,t.getCurrentDocument),se=null,R=null,ee=null,ae=null,pe=null,he=()=>{pe!==null&&(e.clearTimeout(pe),pe=null)},Te=()=>{ee!==null&&(At(e,ee),ee=null),se=null},at=()=>{ee=null;let S=se;se=null,S&&m("pointer-move",S,"summary")},We=S=>{he(),R=S,se=S,ee===null&&(ee=_t(e,at))},ne=()=>{R&&We({...R,hoverVisualOwned:j?.updateAtPoint(R.clientX,R.clientY)??!1})},_e=e.document.documentElement,k=typeof _e.addEventListener=="function"?_e:e.document,O=S=>{if(c?.update(S)){S.preventDefault();return}We({clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),hoverVisualOwned:j?.update(S.target)??!1})},re=S=>{let $=Ui(S.target),Vn=$?c?.begin(S,$):null;Vn&&(S.target?.setPointerCapture?.(S.pointerId),S.preventDefault(),S.stopPropagation()),m("pointer-down",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:Number(S.pointerId),resizeEdge:$,resizeSession:Vn??void 0},"full",S)},Ee=S=>{let $=c?.finish(S,"commit")??null;if($){m("pointer-up",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:Number(S.pointerId),resizeEdge:$.edge,resizeSession:$},"summary",S);return}m("pointer-up",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"summary",S)},Oe=S=>{let $=c?.finish(S,"cancel")??null;m("pointer-cancel",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:$?.pointerId,resizeEdge:$?.edge,resizeSession:$??void 0},"summary",S)},Pn=S=>{let $=c?.finish(S,"cancel")??null;$&&m("pointer-cancel",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:$.pointerId,resizeEdge:$.edge,resizeSession:$},"summary",S)},Nn=S=>{m("pointer-click",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"full",S)},kn=S=>{m("pointer-double-click",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"full",S)},zt=S=>{if(S&&S.target!==k&&S.target!==_e)return;let $=S?{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)}:R;if(S&&$&&$.clientX>0&&$.clientX<e.innerWidth&&$.clientY>0&&$.clientY<e.innerHeight){ne();return}if(Te(),S){he(),pe=e.setTimeout(()=>{pe=null,R=null,T($??void 0)},mi);return}he(),R=null,j?.clear(),T($??void 0)},wn=()=>zt(),bo=()=>{ae=null,Z({kind:"scroll",payload:{metrics:Rt(e)}}),ne()},Dn=()=>{ae===null&&(ae=_t(e,bo))};e.document.addEventListener("pointerdown",re,!0),e.document.addEventListener("pointermove",O,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",Ee,!0),e.document.addEventListener("pointercancel",Oe,!0),e.document.addEventListener("lostpointercapture",Pn,!0),e.document.addEventListener("click",Nn,!0),e.document.addEventListener("dblclick",kn,!0),e.addEventListener("scroll",Dn,{passive:!0}),e.addEventListener("resize",ne,{passive:!0}),e.addEventListener("blur",wn),e.document.addEventListener("load",ne,!0),k.addEventListener("pointerleave",zt,!0);let ut=e.visualViewport;ut?.addEventListener?.("resize",ne,{passive:!0}),ut?.addEventListener?.("scroll",ne,{passive:!0});let Bn=e.ResizeObserver,On=typeof Bn=="function"?new Bn(ne):null;On?.observe(_e);let Mn=e.MutationObserver,Fn=typeof Mn=="function"?new Mn(ne):null;Fn?.observe(_e,{attributes:!0,childList:!0,subtree:!0}),i=()=>{Te(),he(),R=null,j?.cleanup(),On?.disconnect(),Fn?.disconnect(),ae!==null&&(At(e,ae),ae=null),K(),e.document.removeEventListener("pointerdown",re,!0),e.document.removeEventListener("pointermove",O,!0),e.document.removeEventListener("pointerup",Ee,!0),e.document.removeEventListener("pointercancel",Oe,!0),e.document.removeEventListener("lostpointercapture",Pn,!0),e.document.removeEventListener("click",Nn,!0),e.document.removeEventListener("dblclick",kn,!0),e.removeEventListener("scroll",Dn),e.removeEventListener("resize",ne),e.removeEventListener("blur",wn),e.document.removeEventListener("load",ne,!0),k.removeEventListener("pointerleave",zt,!0),ut?.removeEventListener?.("resize",ne),ut?.removeEventListener?.("scroll",ne)}},M=f=>{let I=f.detail;I?.composition?.routeId&&P(I)},F=f=>{let I=f.detail;I?.state&&D(I)},le=f=>{let I=f.data;if(!or(I)||I.body.type!=="request"||I.body.kind!=="apply-node-patch"&&I.body.kind!=="get-hit-by-ref"&&I.body.kind!=="get-path-by-ref"&&I.body.kind!=="get-scroll-metrics"&&I.body.kind!=="scroll-to"&&I.body.kind!=="scroll-by"&&I.body.kind!=="set-interaction-mode"&&I.body.kind!=="set-selection-visual"&&I.body.kind!=="clear-selection-visual"&&I.body.kind!=="set-resize-visual"&&I.body.kind!=="clear-resize-visual"&&I.body.kind!=="set-theme-override"&&I.body.kind!=="clear-theme-override"&&I.body.kind!=="get-theme-variables"&&I.body.kind!=="compute-drop-target-at-point"&&I.body.kind!=="observe-node-bounds"&&I.body.kind!=="clear-node-bounds-observer"&&I.body.kind!=="restore-text-edit"&&I.body.kind!=="clear-text-edit-rollback"&&I.body.kind!=="start-text-edit-at-point"&&I.body.kind!=="hit-test-at-point"&&!mr(I.body))return;let y=I.body,K=typeof I.sessionKey=="string"?I.sessionKey:null,j=f.source,se=f.origin;if(!K||!se||!j||typeof j.postMessage!="function"||!ie(K,j))return;if(u){if(u.sourceWindow!==j||u.targetOrigin!==se)return;u.sessionKey!==K&&(A(),q(),z(),u=null)}b(K,j,se),G(),H();let R=ee=>{let ae=typeof y.id=="string"?y.id:"unknown";j.postMessage(Je({id:ae,...ee},{sessionKey:K}),se)};try{if(mr(y)){Yi({message:y,sendEvent:k=>{j.postMessage(Je({type:"event",...k},{sessionKey:K}),se)},sendResponse:R,subscriptions:E,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,nextRouteReadySequence:()=>N+=1,windowLike:e});return}if(y.kind==="apply-node-patch"){let k=be(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!k){R({type:"response",ok:!1,error:"No editable element found for patch target"});return}let O=y.payload.preview,re=O?Ws(O.sessionId,y.payload.ref):null;if(re&&O){let Ee=Qe.get(re)??-1;if(O.revision<Ee){R({type:"response",ok:!0,result:{applied:!1,appliedRevision:O.revision,stale:!0,latestRevision:Ee}});return}if(O.revision===Ee){R({type:"response",ok:!0,result:{applied:!1,appliedRevision:O.revision,duplicate:!0,latestRevision:Ee}});return}}if($s(k,y.payload.patch),re&&O&&Hs(re,O.revision),O?.responseDetail==="none"){R({type:"response",ok:!0,result:{applied:!0,appliedRevision:O.revision}});return}R({type:"response",ok:!0,result:ge(k,ye(e.document,k,t.getCurrentDocument?.()??null),t.getDocumentEntry,O?.responseDetail??"full")});return}if(y.kind==="get-hit-by-ref"){let k=be(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!k){R({type:"response",ok:!1,error:"No editable element found for hit target"});return}R({type:"response",ok:!0,result:ge(k,ye(e.document,k,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(y.kind==="get-path-by-ref"){let k=be(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!k){R({type:"response",ok:!1,error:"No editable element found for path target"});return}let O=[],re=k;for(;re;)re.getAttribute("data-vcp-edit-key")&&O.push(ge(re,ye(e.document,re,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),re=re.parentElement;R({type:"response",ok:!0,result:O.reverse()});return}if(y.kind==="restore-text-edit"||y.kind==="clear-text-edit-rollback"){let k=y.payload.ref;if(y.kind==="clear-text-edit-rollback"){r&&yr(r.ref,k)&&(r=null),R({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!yr(r.ref,k)){R({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let O=as(e.document,r,t.getCurrentDocument?.()??null);r=null,R(O?{type:"response",ok:!0,result:{restored:!0}}:{type:"response",ok:!1,error:"Failed to restore text edit snapshot"});return}if(y.kind==="get-scroll-metrics"){R({type:"response",ok:!0,result:Rt(e)});return}if(y.kind==="scroll-to"){let k=Number(y.payload.x),O=Number(y.payload.y);if(!Number.isFinite(k)||!Number.isFinite(O)){R({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:k,top:O}),R({type:"response",ok:!0,result:Rt(e)});return}if(y.kind==="scroll-by"){let k=Number(y.payload.deltaX),O=Number(y.payload.deltaY);if(!Number.isFinite(k)||!Number.isFinite(O)){R({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:k,top:O}),R({type:"response",ok:!0,result:{...Rt(e),scrolled:!0}});return}if(y.kind==="set-interaction-mode"){y.payload.enabled?v(K,j,se):u?.sourceWindow===j&&u.targetOrigin===se&&u.sessionKey===K&&(A(),q()),R({type:"response",ok:!0,result:{interactionEnabled:y.payload.enabled}});return}if(y.kind==="set-selection-visual"){let k=!1;i?s?(k=s.setRef(y.payload.ref),k||(s.cleanup(),s=null)):(s=Oi(e,y.payload.ref,t.getCurrentDocument),k=!!s):(s?.cleanup(),s=null),R({type:"response",ok:!0,result:{version:Ye,active:k}});return}if(y.kind==="clear-selection-visual"){s?.cleanup(),s=null,R({type:"response",ok:!0,result:{version:Ye,active:!1}});return}if(y.kind==="set-resize-visual"){c?.cleanup(),c=null,i&&(c=ji(e,y.payload.ref,t.getCurrentDocument)),R({type:"response",ok:!0,result:{version:Xe,active:!!c}});return}if(y.kind==="clear-resize-visual"){c?.cleanup(),c=null,R({type:"response",ok:!0,result:{version:Xe,active:!1}});return}if(y.kind==="set-theme-override"){Us(e.document,y.payload),R({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(y.kind==="clear-theme-override"){js(e.document),R({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(y.kind==="get-theme-variables"){R({type:"response",ok:!0,result:Gs(e.document,y.payload.names)});return}if(y.kind==="compute-drop-target-at-point"){let k=Number(y.payload?.x),O=Number(y.payload?.y);if(!Number.isFinite(k)||!Number.isFinite(O)){R({type:"response",ok:!1,error:"Invalid drop target point"});return}R({type:"response",ok:!0,result:Os(e,k,O,y.payload.dragKind,y.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(y.kind==="observe-node-bounds"){let k=y.payload.ref;if(!k){R({type:"response",ok:!1,error:"Missing bounds observer target"});return}let O=be(e.document,k,t.getCurrentDocument?.()??null);if(!O){R({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}o?.(),o=Ps(e,O,k,t.getCurrentDocument,(re,Ee,Oe)=>{a+=1,Z({kind:"geometry-batch",payload:{sequence:a,sourceEventAt:Oe.sourceEventAt,captureStartedAt:Oe.captureStartedAt,capturedAt:Oe.capturedAt,reason:re,snapshots:[Ee]}})}),R({type:"response",ok:!0,result:{observing:!0}}),Z({kind:"node-bounds-change",payload:{hit:ge(O,k,t.getDocumentEntry,"summary",e)}});return}if(y.kind==="clear-node-bounds-observer"){o?.(),o=null,R({type:"response",ok:!0,result:{cleared:!0}});return}if(y.kind!=="hit-test-at-point"&&y.kind!=="start-text-edit-at-point")return;let ee=Number(y.payload?.x),ae=Number(y.payload?.y);if(!Number.isFinite(ee)||!Number.isFinite(ae)){R({type:"response",ok:!1,error:"Invalid text edit point"});return}let pe=y.kind==="hit-test-at-point"?nt(e.document,ee,ae,t.getCurrentDocument?.()??null):ls(e.document,ee,ae,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!pe){R({type:"response",ok:!1,error:y.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let he=y.kind==="start-text-edit-at-point"?pe:null,Te=y.kind==="hit-test-at-point"?pe:he.element,at=y.payload.detailLevel??"full",We=at==="full"?ye(e.document,Te,t.getCurrentDocument?.()??null):Nt(e.document,Te,t.getCurrentDocument?.()??null),ne=he&&typeof he.textSegmentIndex=="number"?{...We,textSegmentIndex:he.textSegmentIndex}:We,_e=ge(Te,ne,t.getDocumentEntry,at);if(y.kind==="hit-test-at-point"){R({type:"response",ok:!0,result:_e});return}A(),n=Js(e,Te,ne,k=>{j.postMessage(Je({type:"event",...k},{sessionKey:K}),se)},{...he?.textNode?{textNode:he.textNode}:{},onCommitSnapshot:k=>{r=k}}),R({type:"response",ok:!0,result:{ref:ne}})}catch(ee){R({type:"response",ok:!1,error:ee instanceof Error?ee.message:"Failed to start text edit"})}};return e.addEventListener("message",le),e.addEventListener(sn,M),e.addEventListener(cn,F),B(),()=>{A(),q(),u=null,z(),e.removeEventListener("message",le),e.removeEventListener(sn,M),e.removeEventListener(cn,F)}}function Di(e,t){let n=e.document,r=n.head??n.documentElement;if(typeof r?.appendChild!="function")return null;let i="data-vcp-designer-hover-visual",o="data-vcp-designer-selection-visual",s=n.createElement("style");s.setAttribute("data-vcp-designer-hover-visual-style","true"),s.textContent=`
2
- [${i}="true"]:not([${o}="true"]) {
1
+ function Kn(e){let t=new Map,n=[],r=new Map,o=[],i=e.pageComposition.status==="supported"?e.pageComposition.placementUnitKeys:[],s=new Map(i.map((d,f)=>[d,f])),c=e.pageComposition.status==="supported"?{status:"supported",containerKey:e.pageComposition.containerKey,hasBusinessMembers:e.pageComposition.hasBusinessMembers,placementUnitKeys:e.pageComposition.placementUnitKeys,placements:e.pageComposition.placements.map(d=>({placementKey:d.placementKey,placementUnitKey:d.placementUnitKey,relation:d.relation}))}:{status:"unsupported",reason:e.pageComposition.reason,diagnostics:e.pageComposition.diagnostics},a=e.entries.flatMap((d,f)=>d.dynamicDataSummary?[[f,d.dynamicDataSummary]]:[]),u=d=>{let f=t.get(d);if(typeof f=="number")return f;let g=n.length;return n.push(d),t.set(d,g),g},l=d=>{let f=null;for(let g of Po(d)){let k=`${f??"root"}\0${g}`,E=r.get(k);if(typeof E=="number"){f=E;continue}let _=o.length;o.push([f,u(g)]),r.set(k,_),f=_}if(f===null)throw new Error("Document key must not be empty");return f};return{encoding:"segment-trie-v1",siteId:e.siteId,snapshotId:e.snapshotId,composition:{...e.composition},routeId:e.composition.routeId,version:e.version,pageComposition:c,tokens:n,nodes:o,entries:e.entries.map(d=>{let f=d.pageCompositionUnitKey?s.get(d.pageCompositionUnitKey)??-1:-1;if(d.pageCompositionUnitKey&&f<0)throw new Error(`Render entry ${d.key} references unknown page composition unit ${d.pageCompositionUnitKey}`);return[l(d.key),xo(d.operationSummary),...f>=0?[f]:[]]}),...a.length>0?{dynamicDataSummaries:a}:{}}}function zn(e){if(!_o(e))return e;let t=new Map,n=e.pageComposition.status==="supported"?e.pageComposition.placementUnitKeys:[],r=new Map(e.dynamicDataSummaries??[]),o=i=>{let s=t.get(i);if(s)return s;let c=e.nodes[i];if(!c)throw new Error(`Missing compact document node ${i}`);let[a,u]=c,l=e.tokens[u];if(typeof l!="string")throw new Error(`Missing compact document token ${u}`);let d=`${a===null?"":o(a)}${l}`;return t.set(i,d),d};return{siteId:e.siteId,snapshotId:e.snapshotId,composition:{...e.composition},routeId:e.composition.routeId,version:e.version,pageComposition:e.pageComposition,entries:e.entries.map((i,s)=>{let[c,a,u]=i,l=u===void 0?void 0:n[u];if(u!==void 0&&!l)throw new Error(`Missing page composition unit ${u}`);return{key:o(c),...l?{pageCompositionUnitKey:l}:{},operationSummary:To(a),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function xo(e){return(e.canUpdateText?1:0)|(e.canInsertChild?2:0)|(e.canMove?4:0)|(e.canRemove?8:0)}function To(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function _o(e){if(typeof e!="object"||e===null)return!1;let t=e;if(t.encoding!=="segment-trie-v1"||typeof t.siteId!="string"||typeof t.snapshotId!="string"||!Ao(t.composition)||typeof t.routeId!="string"||t.routeId!==t.composition.routeId||!Number.isInteger(t.version)||t.version<0||!Ht(t.pageComposition)||!Array.isArray(t.tokens)||!t.tokens.every(o=>typeof o=="string")||!Array.isArray(t.nodes)||!Array.isArray(t.entries))return!1;let n=t.nodes;if(!n.every((o,i)=>Array.isArray(o)&&o.length===2&&(o[0]===null||Me(o[0])&&o[0]<i)&&Me(o[1])&&o[1]<t.tokens.length)||!t.entries.every(o=>Array.isArray(o)&&(o.length===2||o.length===3)&&Me(o[0])&&o[0]<n.length&&Me(o[1])&&o[1]<=15&&(o.length===2||Me(o[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(o=>Array.isArray(o)&&o.length===2&&Me(o[0])&&o[0]<t.entries.length&&Ht(o[1]))}function Ht(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ao(e){return!Ht(e)||typeof e.routeId!="string"?!1:e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string"}function Me(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}function Po(e){if(!e)return[];let t=[],n=0,r=$n(e,n);if(r<0)return t.push(e),t;for(t.push(e.slice(0,r)),n=r;n<e.length;){if(r=$n(e,n+(e.startsWith("::",n)?2:1)),r<0){t.push(e.slice(n));break}t.push(e.slice(n,r)),n=r}return t}function $n(e,t){let n=e.indexOf("/",t),r=e.indexOf("::",t);return n<0?r:r<0?n:Math.min(n,r)}var We="SITE_EDIT_COMPOSITION_SESSION_MISMATCH",Fe="SITE_EDIT_COMPOSITION_SESSION_REQUIRED",La="SITE_EDIT_COMPOSITION_REINITIALIZE_REQUIRED",ce=class e{constructor(){}static parseMessage(t,n={}){let r=JSON.parse(t);if(!e.isMessage(r,n))throw new Error("Invalid site edit bridge message");return r}static stringifyMessage(t){return JSON.stringify(t)}static extractRequestInfo(t){if(G(t)&&G(t.payload)){let n=typeof t.payload.id=="string"?t.payload.id:"unknown",r=this.isRequestKind(t.payload.kind)?t.payload.kind:"get-document";return{id:n,kind:r}}return{id:"unknown",kind:"get-document"}}static isRequestKind(t){return t==="initialize-session"||t==="get-document"||t==="get-history-status"||t==="get-style-context"||t==="get-object-edit-context"||t==="get-class-name-source"||t==="get-source-tree"||t==="get-source-file"||t==="resolve-source-location"||t==="execute"||t==="undo"||t==="redo"}static isMessage(t,n={}){return!G(t)||typeof t.type!="string"?!1:t.type==="request"?ko(t.payload,n):t.type==="response"||t.type==="error"?G(t.payload)&&typeof t.payload.id=="string":t.type==="event"?G(t.payload)&&G(t.payload.event):t.type==="auth"?G(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"&&G(t.payload)&&t.payload.ok===!0}},lt=class{constructor(t){this.options=t,this.session={subscribedCompositionKeys:new Set},this.messageQueue=new Xt,this.eventDispatcher=new Yt(n=>{this.sendJson(n)}),this.unsubscribe=t.engine.subscribe(n=>{this.handleEngineEvent(n)}),t.socket.onmessage=n=>{try{this.messageQueue.enqueue(()=>this.handleRawMessage(n.data))}catch(r){this.sendJson({type:"error",payload:{id:"unknown",kind:"get-document",message:r instanceof Error?r.message:"Bridge queue overflow"}}),t.socket.close(1013,"bridge busy")}},t.socket.onclose=()=>{this.unsubscribe(),this.session.activeComposition=void 0,this.session.subscribedCompositionKeys.clear()}}async handleMessage(t){try{let n=t;if(n.type!=="request")return;let r=n.payload,{id:o}=r;switch(r.kind){case"initialize-session":{let i=Wt(r),s=await this.resolve(i),c=await this.options.engine.initializeSession({composition:s.context,...r.mutationContext?{mutationContext:r.mutationContext}:{}});this.activateSession(s.context),this.sendJson({type:"response",payload:{id:o,kind:r.kind,result:Re({...c,data:{...c.data,document:Wn(c.data.document)}},s.context)}});return}case"get-document":{let i=await this.resolveWireContext(r),s=await this.options.engine.getDocument(i);this.sendResult(o,r.kind,Mo(s,i));return}case"get-history-status":{let i=await this.resolveWireContext(r),s=await this.options.engine.getHistoryStatus(i);this.sendResult(o,r.kind,Re(s,i));return}case"get-style-context":{let i=await this.resolveWireContext(r);this.sendResult(o,r.kind,Re(await this.options.engine.getStyleContext(i),i));return}case"get-object-edit-context":{let i=await this.resolveWireContext(r);this.sendResult(o,r.kind,Re(await this.options.engine.getObjectEditContext(r.key,i,r.selectionRef),i));return}case"get-class-name-source":{let i=await this.resolveWireContext(r);this.sendResult(o,r.kind,Re(await this.options.engine.getClassNameSource(r.key,i),i));return}case"get-source-tree":{let i=await this.resolveWireContext(r);this.sendResult(o,r.kind,Re(await this.options.engine.getSourceTree(i),i));return}case"get-source-file":{let i=await this.resolveWireContext(r);this.sendResult(o,r.kind,Re(await this.options.engine.getSourceFile({path:r.path,composition:i}),i));return}case"resolve-source-location":{let i=await this.resolveWireContext(r),s=Re(await this.options.engine.resolveSourceLocation({key:r.key,composition:i}),i);this.sendResult(o,r.kind,s);return}case"execute":{let i=await this.resolveOperationWireContext(r.request),s=await this.resolveWireContext(r);if(Pe(i)!==Pe(s))throw new ke(We,"The execute request composition does not match its operation composition.");let c=await this.normalizeOperationRequest(r.request,i);await this.handleBufferedOperation(o,r.kind,()=>this.options.engine.execute(c));return}case"undo":case"redo":{let i=await this.resolveWireContext(r);await this.handleBufferedOperation(o,r.kind,()=>r.kind==="undo"?this.options.engine.undo(i):this.options.engine.redo(i));return}}}catch(n){let r=ce.extractRequestInfo(t);this.sendJson({type:"error",payload:{...r,message:Gt(n),code:jt(n)}})}}async resolve(t){return this.options.engine.resolveComposition(t)}async resolveAndAssert(t){let n=await this.resolve(t),r=this.session.activeComposition;if(!r)throw new ke(Fe,"Initialize a composition session before issuing this request.");if(Pe(r)!==Pe(n.context))throw new ke(We,"The request composition does not match the active socket session.");return n.context}async resolveWireContext(t){let n=Wt(t);return this.resolveAndAssert(n)}async resolveOperationWireContext(t){let n=Oo(t);return this.resolveAndAssert(n)}activateSession(t){this.session.activeComposition=t,this.session.subscribedCompositionKeys.clear(),this.session.subscribedCompositionKeys.add(Pe(t))}async normalizeOperationRequest(t,n){let r={...t,composition:Hn(n)};if(r.target.kind==="route"){let o=r.target,i=Wt(o),s=await this.resolveAndAssert(i);r.target={...o,composition:Hn(s)}}return r}handleEngineEvent(t){let n=t?.composition;if(!Do(n))return;let r=Pe(n);this.session.subscribedCompositionKeys.has(r)&&(this.eventDispatcher.push(t),t.type==="site-edit.graph.invalidated"&&r===Bo(this.session)&&(this.session.activeComposition=void 0,this.session.subscribedCompositionKeys.delete(r)))}sendResult(t,n,r){this.sendJson({type:"response",payload:{id:t,kind:n,result:r}})}async handleRawMessage(t){try{await this.handleMessage(ce.parseMessage(t,{validateOperationRequest:this.options.validateOperationRequest}))}catch(n){let r=Fo(t);this.sendJson({type:"error",payload:{...r,message:Gt(n),code:jt(n)}})}}sendJson(t){this.options.socket.send(ce.stringifyMessage(t))}async handleBufferedOperation(t,n,r){this.eventDispatcher.beginBuffering();try{let o=await r();this.sendResult(t,n,o)}catch(o){this.sendJson({type:"error",payload:{id:t,kind:n,message:Gt(o),code:jt(o)}})}finally{this.eventDispatcher.flush()}}},ke=class extends Error{constructor(t,n){super(n),this.code=t,this.name="BridgeProtocolError"}},Yt=class{constructor(t){this.send=t,this.bufferedEvents=null}push(t){let n={type:"event",payload:{event:t}};if(this.bufferedEvents){this.bufferedEvents.push(n);return}this.send(n)}beginBuffering(){this.bufferedEvents=[]}flush(){let t=this.bufferedEvents??[];this.bufferedEvents=null,t.forEach(n=>this.send(n))}},Xt=class{constructor(t=64){this.maxQueued=t,this.queue=Promise.resolve(),this.queued=0}enqueue(t){if(this.queued>=this.maxQueued)throw new Error("Bridge request queue is full");this.queued+=1;let n=async()=>{this.queued-=1,await t()},r=this.queue.then(n,n);return this.queue=r.then(()=>{},()=>{}),r}};function ko(e,t){if(!G(e)||typeof e.id!="string"||!ce.isRequestKind(e.kind))return!1;let n=Ue(e.composition);switch(e.kind){case"initialize-session":return n&&(e.mutationContext===void 0||Ut(e.mutationContext));case"get-document":case"get-style-context":return n;case"get-object-edit-context":return typeof e.key=="string"&&n&&No(e.selectionRef);case"get-class-name-source":case"resolve-source-location":return typeof e.key=="string"&&n;case"get-history-status":return n;case"get-source-tree":return n;case"get-source-file":return typeof e.path=="string"&&n;case"execute":return n&&wo(e.request)&&(e.request.mutationContext===void 0||Ut(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return n&&e.mutationContext===void 0||n&&Ut(e.mutationContext)}}function No(e){if(e===void 0)return!0;if(!G(e)||typeof e.key!="string"||e.key.length===0)return!1;let t=e.instanceIndex,n=e.instanceCount;return t!==void 0&&(typeof t!="number"||!Number.isInteger(t)||t<0)||n!==void 0&&(typeof n!="number"||!Number.isInteger(n)||n<=0)||typeof t=="number"&&typeof n=="number"&&t>=n?!1:Object.keys(e).every(r=>r==="key"||r==="instanceIndex"||r==="instanceCount")}function wo(e){return G(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&Ue(e.composition)&&typeof e.kind=="string"&&G(e.target)&&(e.target.kind!=="route"||Ue(e.target.composition))&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&G(e.params)}function Ue(e){return G(e)&&typeof e.routeId=="string"&&e.routeId.length>0&&(e.templateId===void 0||typeof e.templateId=="string"&&e.templateId.length>0)&&Object.keys(e).every(t=>t==="routeId"||t==="templateId")}function Do(e){return G(e)&&typeof e.routeId=="string"&&(e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string")}function Wt(e){if(Ue(e.composition))return e.composition;throw new ke(Fe,"A composition selector is required for this request.")}function Oo(e){if(G(e)&&Ue(e.composition))return e.composition;throw new ke(Fe,"A composition selector is required for execute.")}function Hn(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function Bo(e){return e.activeComposition?Pe(e.activeComposition):null}function Pe(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function Re(e,t){return G(e)&&e.ok===!0?{...e,composition:t}:e}function Mo(e,t){return!G(e)||e.ok!==!0?e:{...e,...t?{composition:t}:{},data:Wn(e.data)}}function Wn(e){let t=e;return Kn(t.routeId?t:{...t,routeId:t.composition.routeId})}function G(e){return typeof e=="object"&&e!==null}function Ut(e){return G(e)&&typeof e.editingSessionId=="string"&&e.editingSessionId.length>0&&typeof e.lockId=="string"&&e.lockId.length>0&&typeof e.ownerId=="string"&&e.ownerId.length>0&&typeof e.leaseAssertion=="string"&&e.leaseAssertion.length>0}function jt(e){if(!(!G(e)||typeof e.code!="string"||e.code.length===0))return e.code}function Gt(e){return e instanceof Error||G(e)&&typeof e.message=="string"&&e.message.length>0?e.message:"Unknown websocket operation failure"}function Fo(e){try{return ce.extractRequestInfo(JSON.parse(e))}catch{return{id:"unknown",kind:"get-document"}}}var Vo="vcp:designer:trace",qo="designer_trace",Un="__VCP_DESIGNER_TRACE__";var $o=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function Ko(e=globalThis){let t=e;try{if(t.localStorage?.getItem(Vo)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(qo)==="1"}catch{return!1}}function xe(e,t={},n=globalThis){if(!Ko(n))return;let r={type:e,timestamp:Date.now(),payload:zo(t)},o=n,i=o[Un]??[];i.push(r),i.length>1e3&&i.splice(0,i.length-1e3),o[Un]=i;let s=n.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function zo(e){return Lt(e,0)}function Lt(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>Lt(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e)){if($o.test(r)){n[r]="[redacted]";continue}n[r]=Lt(o,t+1)}return n}var pt=class{constructor(t){this.options=t,this.socket=null,this.connectPromise=null,this.connectAttempt=null,this.connectionState="idle",this.intentionalClose=!1,this.sequence=0,this.pending=new Map,this.listeners=new Set,this.connectionStatusListeners=new Set}connect(){return this.socket?.readyState===Jt&&this.connectionState==="open"?(this.setConnectionState("open"),Promise.resolve()):this.connectPromise?this.connectPromise:(this.intentionalClose=!1,this.setConnectionState("connecting"),this.connectPromise=new Promise((t,n)=>{let r;try{r=this.createSocket(this.options.url)}catch(c){let a=je(c,"WebSocket failed");this.socket=null,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("failed",a.message),n(a);return}let o={socket:r,settled:!1,reject:n};this.connectAttempt=o,this.socket=r;let i=()=>{this.socket!==r||this.connectAttempt!==o||(o.settled=!0,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("open"),t())},s=(c,a)=>{this.cleanupSocket(r,c,a)};r.onopen=()=>{if(!(this.socket!==r||this.connectAttempt!==o)){if(this.options.authKey){try{r.send(ce.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(c){s(je(c,"WebSocket auth failed"),"failed")}return}i()}},r.onerror=c=>{if(this.socket!==r)return;let a=je(c,"WebSocket failed");s(a,"failed")},r.onmessage=c=>{if(this.socket===r){if(this.options.authKey&&this.connectAttempt===o&&!o.settled){this.handleAuthHandshakeMessage(c.data,r,o,()=>{i()});return}this.handleMessage(c.data)}},r.onclose=c=>{if(this.socket!==r)return;let a=this.intentionalClose,u=new Error(jo(c,{intentional:a}));s(u,a?"closed":"failed")}}),this.connectPromise)}disconnect(){this.intentionalClose=!0,this.setConnectionState("closing");let t=this.socket;if(!t){this.rejectAll(new Error("WebSocket disconnected")),this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("closed");return}this.cleanupSocket(t,new Error("WebSocket disconnected"),"closed")}getConnectionState(){return this.connectionState}subscribeConnectionStatus(t){return this.connectionStatusListeners.add(t),t({state:this.connectionState}),()=>{this.connectionStatusListeners.delete(t)}}getDocument(t){let n=this.selector(t);return this.request("get-document",{composition:n})}async initializeSession(t){let n=this.selector(t.composition);return await this.request("initialize-session",{composition:n,...t.mutationContext?{mutationContext:t.mutationContext}:{}})}getHistoryStatus(t){return this.request("get-history-status",{composition:this.selector(t)})}getStyleContext(t){let n=this.selector(t);return this.request("get-style-context",{composition:n})}getObjectEditContext(t,n,r){let o=this.selector(n);return this.request("get-object-edit-context",{key:t,composition:o,...r?{selectionRef:r}:{}})}getClassNameSource(t,n){let r=this.selector(n);return this.request("get-class-name-source",{key:t,composition:r})}getSourceTree(t){return this.request("get-source-tree",{composition:this.selector(t)})}getSourceFile(t){return this.request("get-source-file",{path:t.path,composition:this.selector(t.composition)})}resolveSourceLocation(t){return this.request("resolve-source-location",{key:t.key,composition:this.selector(t.composition)})}execute(t,n){let r=ft(t),o={...t,composition:Te(r)};return this.request("execute",{request:o})}undo(t,n){return this.request("undo",{composition:this.selector(t)})}redo(t,n){return this.request("redo",{composition:this.selector(t)})}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}selector(t){return Te(t)}request(t,n){let r=this.socket;if(!r||r.readyState!==Jt||this.connectionState!=="open")return Promise.reject(new Error(`WebSocket is not open (state: ${this.connectionState}, readyState: ${r?.readyState??"none"})`));let o=`${t}-${this.sequence+=1}`,i=Lo(o,t,n);return xe("bridge.request",{id:o,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:jn(n.request,"kind"),documentVersion:jn(n.request,"documentVersion")}),new Promise((s,c)=>{let a=this.resolveRequestTimeoutMs(t),u=a>0?setTimeout(()=>{let l=this.pending.get(o);l&&(this.pending.delete(o),xe("bridge.response",{id:o,kind:t,ok:!1,timedOut:!0}),l.reject(new Error(`Bridge request timed out after ${a}ms: ${t}`)))},a):null;u?.unref?.(),this.pending.set(o,{kind:t,timeout:u,resolve:l=>s(l),reject:c});try{r.send(ce.stringifyMessage(i))}catch(l){let d=je(l,"WebSocket send failed");this.clearPendingRequest(o),c(d),this.cleanupSocket(r,d,"failed")}})}handleAuthHandshakeMessage(t,n,r,o){try{if(ce.parseMessage(t).type==="auth-ok"){o();return}throw new Error("Bridge authentication failed")}catch(i){let s=je(i,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=ce.parseMessage(t);if(n.type==="event"){for(let o of this.listeners)o(n.payload.event);return}if(n.type!=="response"&&n.type!=="error")return;let r=this.pending.get(n.payload.id);if(r){if(this.clearPendingRequest(n.payload.id),n.type==="error"){xe("bridge.response",{id:n.payload.id,kind:r.kind,ok:!1});let o=new Error(n.payload.message);n.payload.code&&(o.code=n.payload.code),r.reject(o);return}xe("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:Go(n.payload.result)}),r.resolve(r.kind==="get-document"?{...n.payload.result,data:Ln(n.payload.result.data,n.payload.result.composition)}:r.kind==="initialize-session"?Yo(n.payload.result):n.payload.result)}}rejectAll(t){for(let[n,r]of[...this.pending])this.clearPendingRequest(n),r.reject(t)}clearPendingRequest(t){let n=this.pending.get(t);n&&(n.timeout&&clearTimeout(n.timeout),this.pending.delete(t))}resolveRequestTimeoutMs(t){let n=this.options.requestTimeoutMsByKind?.[t];return typeof n=="number"?Math.max(0,n):typeof this.options.requestTimeoutMs=="number"?Math.max(0,this.options.requestTimeoutMs):Uo[t]??Wo}cleanupSocket(t,n,r){if(this.socket===t&&(this.socket=null),this.connectAttempt?.socket===t){let o=this.connectAttempt;this.connectAttempt=null,o.settled||(o.settled=!0,o.reject(n))}this.connectPromise=null,this.rejectAll(n),this.setConnectionState(r,n.message),t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null;try{(t.readyState===Ho||t.readyState===Jt)&&t.close()}catch{}}setConnectionState(t,n){if(this.connectionState===t&&!n)return;this.connectionState=t;let r={state:t,...n?{message:n}:{}};this.options.onConnectionStatus?.(r);for(let o of this.connectionStatusListeners)o(r)}createSocket(t){if(this.options.createSocket)return this.options.createSocket(t);if(typeof WebSocket>"u")throw new Error("Site edit preview bridge requires WebSocket");return new WebSocket(t)}},Ho=0,Jt=1,Wo=15e3,Uo={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function je(e,t){return e instanceof Error?e:new Error(t)}function jo(e,t){return t.intentional?"WebSocket disconnected":e?.code===1008?e.reason?`Bridge session authentication failed: ${e.reason}`:"Bridge session authentication failed":e?.reason?`WebSocket closed: ${e.reason}`:typeof e?.code=="number"&&e.code!==1005?`WebSocket closed with code ${e.code}`:"WebSocket closed"}function jn(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function Go(e){if(!e||typeof e!="object")return null;let t=e,n=t.data?.resultVersion??t.data?.version??null;return typeof n=="number"?n:null}function Xn(e){let t="composition"in e?Te(e.composition):Te({routeId:e.routeId});return new Qt({composition:t,initialDocument:e.initialDocument,client:e.client})}var Qt=class{constructor(t){this.params=t,this.serverConfirmedComposition=null,this.refreshInFlight=null,this.objectGeneration=0,this.styleGeneration=0,this.editContextCache=new Map,this.editContextInFlight=new Map,this.classNameSourceCache=new Map,this.classNameSourceInFlight=new Map,this.styleContextCache=new Map,this.styleContextInFlight=new Map,this.snapshotIdentityStale=!1,this.composition=Te(t.composition);let n=t.initialDocument.composition.effectiveTemplateId;if(n!==void 0&&(this.composition.templateId===void 0||this.composition.templateId!==n))throw new Error(`Site edit bridge requires a matching templateId for initial document composition ${JSON.stringify(t.initialDocument.composition)}`);this.currentDocument=t.initialDocument,this.observedDocumentVersion=t.initialDocument.version,this.sessionInitialized=!Gn(t.initialDocument),this.activeCompositionContext=this.sessionInitialized?{...t.initialDocument.composition}:null}async getDocument(t){this.requireBoundComposition(t);let n=Gn(this.currentDocument)||this.snapshotIdentityStale;return(n||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(n?void 0:this.observedDocumentVersion,"get-document"),this.snapshotIdentityStale=!1,this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(t){let n=this.requireBoundComposition(t.composition);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let r=await this.params.client.initializeSession({...t,composition:n});return this.currentDocument=r.data.document,this.observedDocumentVersion=r.data.document.version,this.activeCompositionContext={...r.composition},this.rememberServerConfirmedComposition(r.composition),this.sessionInitialized=!0,this.clearObjectCaches(),r}async getHistoryStatus(t){return this.params.client.getHistoryStatus(this.requireBoundComposition(t))}async getStyleContext(t){let n=this.requireBoundComposition(t),r=Ge(n),o=this.styleContextCache.get(r);if(o?.generation===this.styleGeneration)return{ok:!0,data:o.value};let i=this.styleContextInFlight.get(r);if(i?.generation===this.styleGeneration)return i.request;let s=this.styleGeneration,c=this.params.client.getStyleContext(n).then(a=>(this.styleGeneration===s&&this.styleContextCache.set(r,{generation:s,value:a.data}),a)).finally(()=>{this.styleContextInFlight.get(r)?.request===c&&this.styleContextInFlight.delete(r)});return this.styleContextInFlight.set(r,{generation:s,request:c}),c}async ensureDocumentVersion(t,n){this.requireBoundComposition(t);let r=await this.refreshSnapshot(n,"ensure-version");if(r.version<n)throw new Error(`Document refresh returned version ${r.version}, expected at least ${n}`);return{ok:!0,data:r}}async acknowledgeDocumentVersion(t,n){if(this.requireBoundComposition(t),n>this.currentDocument.version){if(this.currentDocument.pageComposition.status==="supported"){let r=await this.refreshSnapshot(n,"ensure-version");if(r.version<n)throw new Error(`Document refresh returned version ${r.version}, expected at least ${n}`);return{ok:!0,data:r}}this.currentDocument={...this.currentDocument,version:n},this.clearObjectCaches({preserveStyleContext:!0})}return this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n),{ok:!0,data:this.currentDocument}}async getObjectEditContext(t,n,r){let o=this.requireBoundComposition(n),i=this.objectCacheKey(t,o,r),s=this.editContextCache.get(i);if(s)return{ok:!0,data:s};let c=this.editContextInFlight.get(i);if(c)return c;let a=this.objectGeneration,u=this.params.client.getObjectEditContext(t,o,...r?[r]:[]).then(l=>(this.objectGeneration===a&&this.editContextCache.set(i,l.data),l)).finally(()=>{this.editContextInFlight.get(i)===u&&this.editContextInFlight.delete(i)});return this.editContextInFlight.set(i,u),u}async getClassNameSource(t,n){let r=this.requireBoundComposition(n),o=this.objectCacheKey(t,r),i=this.classNameSourceCache.get(o);if(i)return i;let s=this.classNameSourceInFlight.get(o);if(s)return s;let c=this.objectGeneration,a=this.params.client.getClassNameSource(t,r).then(u=>(this.objectGeneration===c&&this.classNameSourceCache.set(o,u),u)).finally(()=>{this.classNameSourceInFlight.get(o)===a&&this.classNameSourceInFlight.delete(o)});return this.classNameSourceInFlight.set(o,a),a}async getSourceTree(t){return this.params.client.getSourceTree(this.requireBoundComposition(t))}async getSourceFile(t){return this.params.client.getSourceFile({path:t.path,composition:this.requireBoundComposition(t.composition)})}async resolveSourceLocation(t){return this.params.client.resolveSourceLocation({key:t.key,composition:this.requireBoundComposition(t.composition)})}async execute(t,n){let r=ft(t);r&&this.composition.templateId!==void 0&&this.requireBoundComposition(r);let o={...t,composition:r??this.composition};return this.params.client.execute(o)}async undo(t,n){return this.params.client.undo(this.requireBoundComposition(t))}async redo(t,n){return this.params.client.redo(this.requireBoundComposition(t))}subscribe(t){return this.params.client.subscribe(n=>{if(n.type==="site-edit.snapshot.changed"&&this.sessionInitialized&&this.isActiveComposition(n.composition)){this.snapshotIdentityStale=!0,this.clearObjectCaches(),t(n);return}if(n.type==="site-edit.document.changed"&&this.sessionInitialized&&this.isActiveComposition(n.composition)){this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n.version),n.version>this.currentDocument.version&&this.clearObjectCaches(),t(n);return}t(n)})}async refreshSnapshot(t,n="ensure-version"){if(typeof t=="number"&&this.currentDocument.version>=t)return xe("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:n}),this.currentDocument;let r=Ge(this.composition),o=this.refreshInFlight;if(o?.compositionKey===r){xe("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,source:n});let s=await o.request;if(typeof t!="number"||s.version>=t||this.currentDocument.version>=t)return this.currentDocument}xe("bridge.document-refresh",{composition:this.composition,routeId:this.composition.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!1,source:n});let i=this.params.client.getDocument(this.composition).then(s=>(this.currentDocument=s.data,this.activeCompositionContext={...s.data.composition},this.rememberServerConfirmedComposition(s.data.composition),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,s.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight={compositionKey:r,request:i};try{return await i}finally{this.refreshInFlight?.request===i&&(this.refreshInFlight=null)}}clearObjectCaches(t){this.objectGeneration+=1,this.editContextCache.clear(),this.editContextInFlight.clear(),this.classNameSourceCache.clear(),this.classNameSourceInFlight.clear(),!t?.preserveStyleContext&&(this.styleGeneration+=1,this.styleContextCache.clear(),this.styleContextInFlight.clear())}objectCacheKey(t,n,r){return`${Ge(n)}\0${t}\0${Xo(r)}`}rememberServerConfirmedComposition(t){!t||typeof t.routeId!="string"||(this.serverConfirmedComposition={...t})}isAcceptedComposition(t){if(Ge(t)===Ge(this.composition))return!0;let n=this.serverConfirmedComposition;return n!==null&&dt(n)===dt(Yn(t))}requireBoundComposition(t){let n=t===void 0?this.composition:Te(t);if(!this.isAcceptedComposition(n))throw new Error(`Site edit bridge is bound to composition ${JSON.stringify(this.composition)}, received ${JSON.stringify(n)}`);return Te(n)}isActiveComposition(t){let n=this.activeCompositionContext??Yn(this.composition);return dt(t)===dt(n)}};function Gn(e){return e.version===0&&e.entries.length===0}function Yo(e){let t=e;return{...t,data:{...t.data,document:Ln(t.data.document,t.composition)}}}function Ln(e,t){let n=e,r=zn(n.routeId?n:{...n,routeId:t?.routeId??n.composition?.routeId});return t?{...r,composition:t}:r}function Te(e){if(e&&typeof e=="object"&&typeof e.routeId=="string"){let t="effectiveTemplateId"in e?e.effectiveTemplateId:"templateId"in e?e.templateId:void 0;return{routeId:e.routeId,...typeof t=="string"?{templateId:t}:{}}}throw new Error("SITE_EDIT_COMPOSITION_SESSION_REQUIRED: a composition selector is required")}function Ge(e){return JSON.stringify([e.routeId,e.templateId??null])}function Xo(e){return e?JSON.stringify([e.key,e.instanceIndex??null,e.instanceCount??null]):""}function dt(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function Yn(e){return{routeId:e.routeId,...e.templateId?{effectiveTemplateId:e.templateId}:{}}}function ft(e){if(e&&typeof e=="object"){let t=e;if(t.composition&&typeof t.composition=="object"){let n=t.composition;if(typeof n.routeId=="string")return{routeId:n.routeId,...typeof n.templateId=="string"?{templateId:n.templateId}:{}}}}}function Lo(e,t,n){let r=Te(t==="execute"?ft(n.request):n.composition),o={id:e,kind:t,composition:r};switch(t){case"initialize-session":case"get-document":case"get-history-status":case"get-style-context":case"get-source-tree":case"undo":case"redo":return{type:"request",payload:{...o,...n.mutationContext?{mutationContext:n.mutationContext}:{}}};case"get-object-edit-context":return{type:"request",payload:{...o,key:String(n.key),...n.selectionRef?{selectionRef:n.selectionRef}:{}}};case"get-class-name-source":case"resolve-source-location":return{type:"request",payload:{...o,key:String(n.key)}};case"get-source-file":return{type:"request",payload:{...o,path:String(n.path)}};case"execute":return{type:"request",payload:{...o,request:{...n.request,composition:ft(n.request)??r}}}}}function oe(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}import{SiteEditOperationSelectionRefSchema as oi}from"@vcp-dev/contracts";import{SiteEditSetPropsParamsSchema as Jo,classifySiteEditPropertyName as Jn}from"@vcp-dev/contracts";var Qo={allowFullScreen:"allowfullscreen",acceptCharset:"accept-charset",autoComplete:"autocomplete",autoFocus:"autofocus",autoPlay:"autoplay",cellPadding:"cellpadding",cellSpacing:"cellspacing",charSet:"charset",colSpan:"colspan",crossOrigin:"crossorigin",dateTime:"datetime",encType:"enctype",formAction:"formaction",formEncType:"formenctype",formMethod:"formmethod",formNoValidate:"formnovalidate",formTarget:"formtarget",hrefLang:"hreflang",htmlFor:"for",httpEquiv:"http-equiv",inputMode:"inputmode",itemID:"itemid",itemProp:"itemprop",itemRef:"itemref",itemScope:"itemscope",itemType:"itemtype",keyParams:"keyparams",keyType:"keytype",noModule:"nomodule",playsInline:"playsinline",readOnly:"readonly",rowSpan:"rowspan",srcDoc:"srcdoc",srcLang:"srclang",srcSet:"srcset",tabIndex:"tabindex",useMap:"usemap"},Qn=new Set(["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","formNoValidate","hidden","inert","itemScope","loop","multiple","muted","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless"]),Zn=new Set(["checked","selected","value"]),er=new Set(["accept","alt","action","cite","color","content","coords","crossOrigin","dateTime","formAction","formMethod","formTarget","headers","href","hrefLang","id","kind","label","lang","list","max","media","method","min","name","pattern","poster","property","referrerPolicy","rel","role","scope","slot","src","srcDoc","srcLang","srcSet","step","target","title","type","useMap","width","height"]);function Zo(e){let t=Jo.safeParse({kind:"set-props",scope:e.scope,changes:e.changes});if(!t.success)return Zt("Typed property changes are not previewable");if(e.element.kind!=="host")return Zt(`The '${e.element.tagName}' component may transform its props before rendering`);let n={};for(let r of t.data.changes){let o=ei(r);if(!o)return Zt(`The DOM result for '${r.name}' cannot be proven equivalent`);n[o.name]=o.value}return e.runtimeAttributes,{mode:"dom",patch:{attributes:n}}}function ei(e){if(Jn(e.name).owner!=="generic")return null;let n=e.name,r=tr(n);if(!r||Zn.has(n))return null;if(e.operation==="remove")return{name:r,value:null};let o=e.value;return n==="download"?ni(r,o):Qn.has(n)?ti(r,o):/^(aria|data)-[A-Za-z0-9_.:-]+$/u.test(n)?ri(r,o):er.has(n)?typeof o=="string"?{name:r,value:o}:typeof o=="number"&&Number.isFinite(o)?{name:r,value:String(o)}:o===null?{name:r,value:null}:null:null}function tr(e){return Jn(e).owner!=="generic"?null:e==="download"||Zn.has(e)||Qn.has(e)||er.has(e)||/^(aria|data)-[A-Za-z0-9_.:-]+$/u.test(e)?Qo[e]??e:null}function ti(e,t){return t===null||t===!1?{name:e,value:null}:t===!0?{name:e,value:""}:null}function ni(e,t){return t===null||t===!1?{name:e,value:null}:t===!0?{name:e,value:""}:typeof t=="string"?{name:e,value:t}:null}function ri(e,t){return t===null?{name:e,value:null}:typeof t=="string"||typeof t=="boolean"||typeof t=="number"&&Number.isFinite(t)?{name:e,value:String(t)}:null}function Zt(e){return{mode:"after-render",reason:e}}var nr="vcp-window-message",rr=1;function or(e){return{source:nr,version:rr,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function ir(e){try{return C(e)?X(e,"source",nr)&&X(e,"version",rr)&&w(e,"namespace")&&w(e,"channel")&&pe(e,"body")&&(!Ce(e,"sessionKey")||w(e,"sessionKey")):!1}catch{return!1}}var yt="site-edit",sr="frame-runtime",cr="frame-announce",tn=1,Ye=1,Xe=1,ar=24;function Je(e,t={}){return or({namespace:yt,channel:sr,sessionKey:t.sessionKey,body:e})}function ur(){return or({namespace:yt,channel:cr,body:{type:"announce"}})}function au(e){try{return!ir(e)||e.namespace!==yt||e.channel!==cr?!1:C(e.body)&&X(e.body,"type","announce")&&de(e.body,["type"])}catch{return!1}}function lr(e){try{return!ir(e)||e.namespace!==yt||e.channel!==sr?!1:ki(e.body)}catch{return!1}}function ge(e){return C(e)&&w(e,"routeId")&&Ne(e,"templateId")&&de(e,["routeId","templateId"])}function ht(e){return C(e)&&w(e,"routeId")&&Ne(e,"effectiveTemplateId")&&de(e,["routeId","effectiveTemplateId"])}function de(e,t){let n=new Set(t);return Reflect.ownKeys(e).every(r=>typeof r=="string"&&n.has(r))}var Ce=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function pe(e,t){let n=Object.getOwnPropertyDescriptor(e,t);return n!==void 0&&"value"in n}function p(e,t){return Object.getOwnPropertyDescriptor(e,t)?.value}function X(e,t,n){return pe(e,t)&&p(e,t)===n}function w(e,t){return pe(e,t)&&typeof p(e,t)=="string"}function bt(e,t){return pe(e,t)&&typeof p(e,t)=="boolean"}function V(e,t){let n=p(e,t);return pe(e,t)&&typeof n=="number"&&Number.isFinite(n)}function ii(e,t){let n=p(e,t);return pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>0}function Ne(e,t){return!Ce(e,t)||p(e,t)===void 0||w(e,t)}function Ve(e,t){return!Ce(e,t)||p(e,t)===void 0||V(e,t)}function mt(e,t){let n=p(e,t);return!Ce(e,t)||n===void 0||pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function L(e,t){return!Ce(e,t)||p(e,t)===void 0}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function si(e){return C(e)&&Reflect.ownKeys(e).length===0}function gt(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t+=1){let n=Object.getOwnPropertyDescriptor(e,String(t));if(n===void 0||!("value"in n)||typeof n.value!="string")return!1}return!0}function me(e){return C(e)&&w(e,"key")&&mt(e,"instanceIndex")&&mt(e,"instanceCount")&&mt(e,"textSegmentIndex")}function ci(e){return C(e)&&w(e,"blockId")&&me(p(e,"ref"))&&Le(p(e,"rect"))&&bt(e,"targetIsSectionRoot")}function ai(e){if(!C(e))return!1;let t=p(e,"placement"),n=p(e,"boundary");return w(e,"anchorBlockId")&&me(p(e,"anchorRef"))&&(t==="before"||t==="after")&&C(n)&&V(n,"top")&&V(n,"left")&&V(n,"width")}function Le(e){return C(e)&&["top","left","width","height"].every(t=>V(e,t))}function dr(e){if(!C(e))return!1;let t=p(e,"rect"),n=p(e,"layout"),r=C(n)?p(n,"containingBlock"):null,o=p(e,"scrollContext"),i=C(r)&&(X(r,"kind","viewport")&&Reflect.ownKeys(r).length===1||X(r,"kind","document")&&Reflect.ownKeys(r).length===1||X(r,"kind","element")&&w(r,"runtimeNodeId"));return X(e,"version",tn)&&w(e,"runtimeNodeId")&&C(t)&&Le(p(t,"viewport"))&&Le(p(t,"document"))&&C(n)&&w(n,"position")&&w(n,"transform")&&i&&C(o)&&["scrollX","scrollY","viewportWidth","viewportHeight"].every(s=>V(o,s))&&pe(o,"scrollContainers")&&ui(p(o,"scrollContainers"))}function ui(e){return Array.isArray(e)&&e.every(t=>C(t)&&w(t,"runtimeNodeId")&&V(t,"scrollLeft")&&V(t,"scrollTop"))}function en(e){return C(e)&&(L(e,"layoutSnapshot")||dr(p(e,"layoutSnapshot")))}function li(e){return C(e)&&me(p(e,"ref"))&&pe(e,"layoutSnapshot")&&dr(p(e,"layoutSnapshot"))&&(L(e,"childBoxes")||fi(p(e,"childBoxes")))&&(L(e,"childRects")||pi(p(e,"childRects")))&&(L(e,"layout")||di(p(e,"layout")))&&(L(e,"spacing")||hi(p(e,"spacing")))}function di(e){if(!C(e))return!1;let t=p(e,"indicatorOrientation");return w(e,"display")&&(t==="horizontal"||t==="vertical")&&Ne(e,"flexDirection")&&Ne(e,"gridAutoFlow")}function pi(e){return Array.isArray(e)&&e.every(t=>Le(t))}function fi(e){return Array.isArray(e)&&e.every(t=>C(t)&&Le(p(t,"rect"))&&pr(p(t,"margin")))}function pr(e){return C(e)&&["marginTop","marginRight","marginBottom","marginLeft"].every(t=>V(e,t))}function hi(e){return pr(e)&&["paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","columnGap","rowGap"].every(t=>V(e,t))}function mi(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t+=1){let n=Object.getOwnPropertyDescriptor(e,String(t));if(n===void 0||!("value"in n)||!li(n.value))return!1}return!0}function gi(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&(typeof p(e,t)=="string"||p(e,t)===null))}function fr(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function yi(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&fr(p(e,t)))}function bi(e){if(!C(e))return!1;let t=p(e,"priority");return w(e,"property")&&pe(e,"value")&&fr(p(e,"value"))&&(!Ce(e,"priority")||t===void 0||t==="important")}function Si(e){return C(e)?(L(e,"attributes")||gi(p(e,"attributes")))&&Ne(e,"className")&&(L(e,"style")||yi(p(e,"style")))&&(L(e,"styleDeclarations")||Array.isArray(p(e,"styleDeclarations"))&&p(e,"styleDeclarations").every(bi)):!1}function Ei(e){return C(e)&&V(e,"x")&&V(e,"y")&&(L(e,"detailLevel")||X(e,"detailLevel","summary")||X(e,"detailLevel","full"))}function Ii(e){return C(e)&&me(p(e,"ref"))}function Ci(e){if(!C(e)||!C(p(e,"variables")))return!1;let t=p(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&w(t,n))?L(e,"stylesheets")||gt(p(e,"stylesheets")):!1}function vi(e){if(!X(e,"type","request")||!w(e,"id")||!w(e,"kind")||!pe(e,"payload"))return!1;let t=p(e,"kind"),n=p(e,"payload");switch(t){case"hit-test-at-point":case"start-text-edit-at-point":return Ei(n);case"bridge-get-source-tree":return C(n)&&ge(p(n,"composition"))&&de(n,["composition"]);case"get-scroll-metrics":case"clear-theme-override":return si(n);case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return C(n)&&ge(p(n,"composition"))&&de(n,["composition"]);case"bridge-get-source-file":return C(n)&&w(n,"path")&&ge(p(n,"composition"))&&de(n,["path","composition"]);case"bridge-get-object-edit-context":return C(n)&&w(n,"key")&&ge(p(n,"composition"))&&Pi(p(n,"selectionRef"))&&de(n,["key","composition","selectionRef"]);case"bridge-resolve-source-location":case"bridge-get-class-name-source":return C(n)&&w(n,"key")&&ge(p(n,"composition"))&&de(n,["key","composition"]);case"scroll-to":return C(n)&&V(n,"x")&&V(n,"y");case"scroll-by":return C(n)&&V(n,"deltaX")&&V(n,"deltaY");case"set-interaction-mode":return C(n)&&bt(n,"enabled");case"set-selection-visual":return C(n)&&X(n,"version",Ye)&&me(p(n,"ref"))&&X(n,"visible",!0);case"clear-selection-visual":return C(n)&&X(n,"version",Ye);case"set-resize-visual":return C(n)&&X(n,"version",Xe)&&me(p(n,"ref"))&&X(n,"visible",!0);case"clear-resize-visual":return C(n)&&X(n,"version",Xe);case"set-theme-override":return Ci(n);case"get-theme-variables":return C(n)&&gt(p(n,"names"));case"compute-drop-target-at-point":return C(n)&&V(n,"x")&&V(n,"y")&&(X(n,"dragKind","insert")||X(n,"dragKind","move"))&&(L(n,"movingRef")||me(p(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return C(n)&&(L(n,"ref")||me(p(n,"ref")));case"apply-node-patch":return C(n)&&me(p(n,"ref"))&&Si(p(n,"patch"))&&(L(n,"preview")||C(p(n,"preview"))&&w(p(n,"preview"),"sessionId")&&mt(p(n,"preview"),"revision")&&Ce(p(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return Ii(n);case"bridge-initialize-session":case"bridge-get-style-context":return C(n)&&ge(p(n,"composition"))&&de(n,["composition"]);case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return C(n)&&ge(p(n,"composition"))&&Ve(n,"minVersion")&&Ve(n,"version")&&de(n,["composition","minVersion","version"]);case"bridge-execute":{if(!C(n))return!1;let r=p(n,"request"),o=p(n,"composition"),i=C(r)?p(r,"composition"):null;return!ge(o)||!C(r)||!ge(i)?!1:oe({routeId:o.routeId,...o.templateId?{effectiveTemplateId:o.templateId}:{}})===oe({routeId:i.routeId,...i.templateId?{effectiveTemplateId:i.templateId}:{}})&&de(n,["composition","request"])}case"bridge-subscribe":case"bridge-unsubscribe":return C(n)&&w(n,"subscriptionId")&&ge(p(n,"composition"))&&de(n,["subscriptionId","composition"]);default:return!1}}function Ri(e){return X(e,"type","response")&&w(e,"id")&&bt(e,"ok")&&(L(e,"error")||w(e,"error"))}function xi(e){if(!C(e))return!1;let t=p(e,"type");if(typeof t!="string"||!ht(p(e,"composition"))||!w(e,"siteId")||!w(e,"at"))return!1;switch(t){case"site-edit.document.changed":return w(e,"snapshotId")&&V(e,"version");case"site-edit.operation.planned":return w(e,"operationId")&&w(e,"baseSnapshotId")&&gt(p(e,"changedFiles"));case"site-edit.operation.completed":return C(p(e,"result"));case"site-edit.operation.failed":return w(e,"requestId")&&C(p(e,"error"));case"site-edit.capability.changed":return gt(p(e,"keys"));case"site-edit.graph.invalidated":return!0;case"site-edit.graph.ready":return V(e,"version");case"site-edit.graph.error":return w(e,"message");default:return!1}}var Ti=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]),hr=new Set(["e","s","se"]);function _i(e,t){if(L(e,"resizeSession"))return!0;let n=p(e,"resizeSession");if(!C(n))return!1;let r=p(e,"pointerId"),o=p(n,"pointerId"),i=p(n,"phase"),s=p(n,"edge"),c=t==="pointer-down"?"start":t==="pointer-up"?"commit":t==="pointer-cancel"?"cancel":null;return p(n,"version")===1&&i===c&&w(n,"sessionId")&&String(p(n,"sessionId")).length>0&&typeof r=="number"&&Number.isInteger(r)&&typeof o=="number"&&Number.isInteger(o)&&r===o&&typeof s=="string"&&hr.has(s)&&p(e,"resizeEdge")===s&&me(p(n,"ref"))&&["startWidth","startHeight","width","height"].every(a=>V(n,a))}function Ai(e){if(!X(e,"type","event")||!w(e,"kind")||!C(p(e,"payload")))return!1;let t=p(e,"kind"),n=p(e,"payload");switch(t){case"text-edit-commit":case"text-edit-cancel":case"text-edit-exit":case"text-edit-input":return me(p(n,"ref"))&&Ne(n,"value")&&(L(n,"hit")||en(p(n,"hit")));case"node-bounds-change":return en(p(n,"hit"));case"geometry-batch":{let r=p(n,"reason");return ii(n,"sequence")&&V(n,"sourceEventAt")&&V(n,"captureStartedAt")&&V(n,"capturedAt")&&(r==="scroll"||r==="resize"||r==="mutation")&&mi(p(n,"snapshots"))}case"bridge-event":{let r=p(n,"event"),o=p(n,"composition");return!xi(r)||!ht(o)?!1:w(n,"subscriptionId")&&oe(o)===oe(r.composition)}case"route-ready":return ht(p(n,"composition"))&&w(n,"editEngineVersion")&&V(n,"sequence")&&V(n,"version");case"bridge-status":{let r=p(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&ht(p(n,"composition"))&&V(n,"sequence")&&Ve(n,"attempt")&&Ve(n,"retryInMs")&&Ne(n,"messageKey")}case"scroll":{let r=p(n,"metrics");return C(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(o=>V(r,o))}default:return Ti.has(t)&&V(n,"clientX")&&V(n,"clientY")&&Ve(n,"buttons")&&Ve(n,"pointerId")&&(L(n,"hoverVisualOwned")||bt(n,"hoverVisualOwned"))&&(L(n,"resizeEdge")||w(n,"resizeEdge")&&hr.has(p(n,"resizeEdge")))&&_i(n,t)&&(p(n,"hit")===null||en(p(n,"hit")))&&(L(n,"section")||p(n,"section")===null||ci(p(n,"section")))&&(L(n,"sectionGap")||p(n,"sectionGap")===null||ai(p(n,"sectionGap")))}}function Pi(e){if(e===void 0)return!0;if(!C(e)||!de(e,["key","instanceIndex","instanceCount"]))return!1;let t={key:p(e,"key"),...Ce(e,"instanceIndex")?{instanceIndex:p(e,"instanceIndex")}:{},...Ce(e,"instanceCount")?{instanceCount:p(e,"instanceCount")}:{}};if(!oi.safeParse(t).success)return!1;let n=p(e,"instanceIndex"),r=p(e,"instanceCount");return!(typeof n=="number"&&typeof r=="number"&&n>=r)}function ki(e){if(!C(e))return!1;switch(p(e,"type")){case"request":return vi(e);case"response":return Ri(e);case"event":return Ai(e);default:return!1}}var cn="vcp-site-edit:route-ready",an="vcp-site-edit:bridge-status",Dt="data-vcp-page-template-context",dn="1",pn="data-vcp-route-id",fn="data-vcp-effective-template-id",wr=`[${Dt}="${dn}"]`,Ze="SITE_EDIT_COMPOSITION_MARKER_INVALID",Dr="SITE_EDIT_COMPOSITION_RENDER_MISMATCH",Ni=80,wi=120,Di=1e3,Oi="data-vcp-ui-component",Or="data-vcp-theme-preview",mr="::repeat-item#",St="components/ui",nn="data-site-block-id",rn="data-vcp-runtime-site-block-id",Bi=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),Mi=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function Fi(e,t){let n=Array.from(e.querySelectorAll("[data-vcp-edit-key]"));for(let c of n)c.getAttribute(rn)==="true"&&(c.removeAttribute(nn),c.removeAttribute(rn));if(!t)return;let r=n.filter(c=>c.tagName.toLowerCase()==="section"),o=r.length>0?r:n.filter(c=>c.tagName.toLowerCase()==="main"),i=new Set(o),s=new Map;for(let c of o){let a=c.parentElement,u=!1;for(;a;){if(i.has(a)){u=!0;break}a=a.parentElement}if(u||c.getAttribute(nn)?.trim())continue;let l=c.getAttribute("data-vcp-edit-key")?.trim();if(!l)continue;let d=s.get(l)??0;s.set(l,d+1);let f=`vcp-runtime:${encodeURIComponent(l)}:${d}`;c.setAttribute(nn,f),c.setAttribute(rn,"true")}}function xt(e,t=""){let n=qr(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,o=r.startsWith("/")?r:`/${r}`;return o==="/"?"/":o.replace(/\/+$/,"")}function Vi(e){let t=Array.from(e.querySelectorAll(wr)).filter(s=>s.getAttribute(Dt)===dn);if(t.length===0)return null;if(t.length!==1)throw new Error(`${Ze}: expected exactly one marker`);let n=t[0],r=n.getAttribute(pn),o=n.getAttribute(fn);if(!r?.trim()||!o?.trim())throw new Error(`${Ze}: marker fields are required`);let i=$i(r);if(!i)throw new Error(`${Ze}: marker route is invalid`);return{routeId:i,effectiveTemplateId:o}}function qi(e){let t=xt(e.pathname,e.basePath??""),n=Vi(e.document);if(!n)return{routeId:t};if(n.routeId!==t)throw new Error(`${Ze}: marker route ${n.routeId} does not match pathname ${t}`);return n}function $i(e){return!e.startsWith("/")||e.includes("?")||e.includes("#")?null:xt(e)}function gr(e,t){return oe(e)===oe(t)}function Et(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function Ki(e,t){if(e.__VCP_SITE_EDIT_VERSION_LOGGED__)return;let n=e.console?.info;typeof n=="function"&&(e.__VCP_SITE_EDIT_VERSION_LOGGED__=!0,n.call(e.console,"[VCP Site Edit] runtime loaded",{bridge:t.versions?.bridge??"unknown",contracts:t.versions?.contracts??"unknown",documentVersion:t.documentVersion,engine:t.versions?.engine??"unknown",routeId:t.routeId}))}function zi(e,t={}){if(t.explicit_ws_url)return t.explicit_ws_url.startsWith("/")?`${e.location.protocol==="https:"?"wss:":"ws:"}//${e.location.host}${t.explicit_ws_url}`:t.explicit_ws_url;let n=e.location.protocol==="https:"?"wss:":"ws:",r=t.port?`${e.location.hostname}:${t.port}`:e.location.host;return`${n}//${r}${t.path??"/__vcp/site-edit/bridge"}`}async function mu(e=window,t={}){let n=zi(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=Hi({bridgeUrl:n,options:t}),o=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(o?.started){if(Wi(o.signature,r)){await o.syncRoute?.();return}o.cleanup?.()}let i={activeClient:null,activeBridge:null,cleanupFrameRuntime:(()=>{}),retryTimer:void 0,routeSequence:0,syncInFlight:null,syncScheduled:!1,disposed:!1,currentDocument:null,currentEntriesByKey:new Map,unsubscribeDocument:void 0,unsubscribeConnectionStatus:void 0,unbindBootstrapLifecycle:void 0,unbindRouteChange:void 0,unbindCompositionMarker:void 0},s,c=()=>e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__===s,a=t.create_client??(m=>new pt({url:m,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??gs,l=()=>{i.retryTimer&&(e.clearTimeout(i.retryTimer),i.retryTimer=void 0)},d=()=>qi({pathname:e.location.pathname,document:e.document,basePath:t.basePath}),f=()=>oe(d()),g=()=>xt(e.location.pathname,t.basePath||""),k=!!e.parent&&e.parent!==e,E=m=>{ys(e,{...m,sequence:m.sequence??i.routeSequence})},_=m=>{i.currentDocument=m,i.currentEntriesByKey=new Map((m?.entries??[]).map(T=>[T.key,T])),Fi(e.document,!!m)},A=()=>{i.unsubscribeConnectionStatus?.(),i.unsubscribeConnectionStatus=void 0,i.unsubscribeDocument?.(),i.unsubscribeDocument=void 0},O=(m,T)=>{if(i.disposed||T!==i.routeSequence)return!1;try{return m===f()}catch{return!1}},q=async(m,T,v)=>{let M=i.activeBridge;if(!M)return null;let F=await M.getDocument(m);return O(T,v)&&_(F.data),F.data},b=()=>{A(),_(null);let m=i.activeBridge;i.activeBridge=null,m&&e.__VCP_SITE_EDIT__===m&&delete e.__VCP_SITE_EDIT__;let T=i.activeClient;i.activeClient=null,T?.disconnect()},ie=m=>m===s.compositionKey&&!!i.activeBridge&&(k||!!(i.currentDocument&&Ss(i.currentDocument,m)))&&bs(i.activeClient),z=m=>Math.min(Di*2**Math.max(0,m),8e3),te=(m,T,v,M)=>{if(i.disposed)return;l();let F=z(M);E({state:"reconnecting",composition:m,attempt:M,retryInMs:F,messageKey:"studio.status.previewBridgeConnecting"}),i.retryTimer=e.setTimeout(()=>{i.retryTimer=void 0,!(i.disposed||v!==i.routeSequence||!O(T,v))&&P(M+1).catch(le=>{let h;try{h=f()}catch{return}if(T===h){if(qe(le)){E({state:"reload-required",composition:m,attempt:M,messageKey:"studio.errors.previewBridgeReloadRequired"});return}te(m,T,i.routeSequence,M+1)}})},F)},H=(m,T,v)=>{if(!O(T,v)||i.activeClient===null)return;let M=i.activeClient;A(),_(null);let F=i.activeBridge;i.activeBridge=null,F&&e.__VCP_SITE_EDIT__===F&&delete e.__VCP_SITE_EDIT__,i.activeClient=null,M.disconnect(),te(m,T,v,0)},Q=(m,T,v,M)=>{if(!(!O(T,v)||i.activeClient===null)){if(qe(M.message)){b(),l(),E({state:"reload-required",composition:m,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}H(m,T,v)}},U=m=>{let T;try{T=d()}catch{return}let v=oe(T),M=i.routeSequence;if(!(!O(v,M)||i.activeClient===null)){if(qe(m)){b(),l(),E({state:"reload-required",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(vs(m)){H(T,v,M);return}Fr(m)&&Q(T,v,M,{state:"failed",message:we(m,"Site edit bridge request failed")})}};i.cleanupFrameRuntime=Xi(e,{getCurrentDocument:()=>i.currentDocument,getDocumentEntry:m=>i.currentEntriesByKey.get(m)??null,setCurrentDocument:_,onBridgeRequestError:m=>{U(m)}});let x=async()=>P(0),P=async m=>{if(i.disposed)return;let T=d(),v=oe(T);if(ie(v))return;let M=i.syncInFlight;if(M?.compositionKey===v)return M.promise;let F=i.routeSequence+1,le=D(T,v,F,m);i.syncInFlight={compositionKey:v,sequence:F,promise:le};try{await le}finally{i.syncInFlight?.promise===le&&(i.syncInFlight=null)}},D=async(m,T,v,M)=>{i.routeSequence=v,l(),b(),E({state:M>0?"reconnecting":"connecting",composition:m,attempt:M,messageKey:M>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let F=a(n),le=!1;i.activeClient=F,i.unsubscribeConnectionStatus=F.subscribeConnectionStatus?.(h=>{le&&(h.state==="closed"||h.state==="failed")&&Q(m,T,v,h)});try{if(await F.connect(),!O(T,v)){F.disconnect();return}let h=Xn({composition:Et(m),client:F,initialDocument:Yi(m)});i.activeBridge=h,c()&&(e.__VCP_SITE_EDIT__=h),i.activeClient=F,i.unsubscribeDocument=h.subscribe($=>{if(oe($.composition)===T){if($.type==="site-edit.snapshot.changed"){q(Et(m),T,v).catch(()=>{});return}$.type==="site-edit.document.changed"&&i.currentDocument&&$.version>i.currentDocument.version?q(Et(m),T,v).catch(()=>{}):$.type==="site-edit.graph.invalidated"&&Y()}}),c()&&(s.routeId=m.routeId,s.composition=m,s.compositionKey=T);let I=k?null:await h.initializeSession({composition:Et(m)}),y=I?.data.document??null;if(I&&(!gr(I.composition,m)||!gr(I.data.document.composition,m)))throw new Error(`${Dr}: initialize response does not match marker`);if(y&&_(y),!O(T,v)){F.disconnect();return}le=!0,E({state:"ready",composition:m,attempt:M,messageKey:"studio.status.previewReady"}),Ki(e,{documentVersion:y?.version??0,routeId:m.routeId,versions:t.runtime_versions}),y&&Mr(e,{composition:m,editEngineVersion:t.runtime_versions?.engine??"unknown",sequence:v,version:y.version})}catch(h){if(A(),i.activeClient===F&&(i.activeClient=null),i.activeBridge&&e.__VCP_SITE_EDIT__===i.activeBridge&&delete e.__VCP_SITE_EDIT__,i.activeBridge=null,F.disconnect(),_(null),!O(T,v))return;throw E({state:qe(h)?"reload-required":"failed",composition:m,attempt:M,messageKey:qe(h)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),h}},W=m=>{if(i.disposed)return;let T;try{T=d()}catch{E({state:"failed",composition:{routeId:xt(e.location.pathname,t.basePath||"")},attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}let v=oe(T);if(qe(m)){l(),E({state:"reload-required",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(Is(m)||Es(m)){E({state:"failed",composition:T,attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}te(T,v,i.routeSequence,0)},Y=()=>{i.syncScheduled||i.disposed||(i.syncScheduled=!0,u(()=>{i.syncScheduled=!1,!i.disposed&&x().catch(m=>W(m))}))},Z=()=>{i.disposed||(i.disposed=!0,i.syncScheduled=!1,i.syncInFlight=null,l(),i.routeSequence+=1,i.unbindRouteChange?.(),i.unbindRouteChange=void 0,i.unbindCompositionMarker?.(),i.unbindCompositionMarker=void 0,i.unbindBootstrapLifecycle?.(),i.unbindBootstrapLifecycle=void 0,i.cleanupFrameRuntime(),b(),c()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};if(s={started:!0,signature:r,syncRoute:x,cleanup:Z},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,i.unbindBootstrapLifecycle=ji(e,Z),i.unbindRouteChange=hs(e,Y,g),i.unbindCompositionMarker=ms(e,Y),t.defer_initial_sync){Y();return}await x()}function Hi(e){return{basePath:qr(e.options.basePath??""),bridgeUrl:e.bridgeUrl,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:Ui(e.options.bridge_session_key)}}function Wi(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function Ui(e){if(!e)return null;let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return`${e.length}:${t.toString(36)}`}function ji(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),Gi(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function Gi(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function Yi(e){return{siteId:"preview",snapshotId:"preview",composition:e,version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function Xi(e=window,t={}){let n=null,r=null,o=null,i=null,s=null,c=null,a=0,u=null,l=null,d=null,f=null,g=null,k=0,E=new Map,_=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,A=()=>{n?.(),n=null,r=null},O=()=>{let h=e.parent;if(!(!h||h===e))try{h.postMessage(ur(),"*")}catch{}},q=()=>{o?.(),o=null,i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null},b=(h,I,y)=>{let $=u?.sessionKey!==h||u?.sourceWindow!==I||u?.targetOrigin!==y;u={sessionKey:h,sourceWindow:I,targetOrigin:y},$&&(a=0,f=null,g=null)},ie=(h,I)=>{let y=e.parent&&e.parent!==e?e.parent:null;return!y||I!==y?!1:!_||h===_},z=()=>{for(let h of E.values())h();E.clear()},te=h=>JSON.stringify([oe(h.composition),h.editEngineVersion,h.sequence,h.version]),H=()=>!d||d.state==="ready",Q=h=>JSON.stringify([h.state,oe(h.composition),h.sequence,h.attempt??null,h.retryInMs??null,h.messageKey??null]),U=h=>{if(!H())return;let I=te(h);f!==I&&(i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null,Z({kind:"route-ready",payload:{composition:h.composition,editEngineVersion:h.editEngineVersion,sequence:h.sequence,version:h.version}}),u&&(f=I))},x=h=>{let I=Q(h);g!==I&&(h.state!=="ready"&&(f=null,l=null),Z({kind:"bridge-status",payload:h}),u&&(g=I))},P=h=>{l=h,U(h)},D=h=>{d=h,x(h)},W=()=>{l&&U(l)},Y=()=>{d&&x(d)},Z=h=>{u&&u.sourceWindow.postMessage(Je({type:"event",...h},{sessionKey:u.sessionKey}),u.targetOrigin)},m=(h,I,y,$)=>{let j=t.getCurrentDocument?.()??null,se=Ns(e.document,I.clientX,I.clientY),R=I.resizeSession?null:nt(e.document,I.clientX,I.clientY,j),ee=R?ye(R,y==="full"?be(e.document,R,j):kt(e.document,R,j),t.getDocumentEntry,y):null,ae=ws(e.document,se,j),fe=Os(e.document,I,j,t.getDocumentEntry);$&&ee&&(h==="pointer-click"||h==="pointer-double-click")&&($.preventDefault(),$.stopPropagation(),typeof $.stopImmediatePropagation=="function"&&$.stopImmediatePropagation()),Z({kind:h,payload:{clientX:I.clientX,clientY:I.clientY,buttons:Number(I.buttons??0),pointerId:I.pointerId,hoverVisualOwned:I.hoverVisualOwned,resizeEdge:I.resizeEdge,resizeSession:I.resizeSession,hit:ee,section:ae,sectionGap:fe}})},T=h=>{Z({kind:"pointer-leave",payload:{clientX:h?.clientX??0,clientY:h?.clientY??0,buttons:Number(h?.buttons??0),hit:null,section:null,sectionGap:null}})},v=(h,I,y)=>{q(),u={sessionKey:h,sourceWindow:I,targetOrigin:y};let $=Ec(e.document),j=Li(e,t.getCurrentDocument),se=null,R=null,ee=null,ae=null,fe=null,he=()=>{fe!==null&&(e.clearTimeout(fe),fe=null)},_e=()=>{ee!==null&&(At(e,ee),ee=null),se=null},at=()=>{ee=null;let S=se;se=null,S&&m("pointer-move",S,"summary")},He=S=>{he(),R=S,se=S,ee===null&&(ee=_t(e,at))},ne=()=>{R&&He({...R,hoverVisualOwned:j?.updateAtPoint(R.clientX,R.clientY)??!1})},Ae=e.document.documentElement,N=typeof Ae.addEventListener=="function"?Ae:e.document,B=S=>{if(c?.update(S)){S.preventDefault();return}He({clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),hoverVisualOwned:j?.update(S.target)??!1})},re=S=>{let K=as(S.target),qn=K?c?.begin(S,K):null;qn&&(S.target?.setPointerCapture?.(S.pointerId),S.preventDefault(),S.stopPropagation()),m("pointer-down",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:Number(S.pointerId),resizeEdge:K,resizeSession:qn??void 0},"full",S)},Ie=S=>{let K=c?.finish(S,"commit")??null;if(K){m("pointer-up",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:Number(S.pointerId),resizeEdge:K.edge,resizeSession:K},"summary",S);return}m("pointer-up",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"summary",S)},Be=S=>{let K=c?.finish(S,"cancel")??null;m("pointer-cancel",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:K?.pointerId,resizeEdge:K?.edge,resizeSession:K??void 0},"summary",S)},kn=S=>{let K=c?.finish(S,"cancel")??null;K&&m("pointer-cancel",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons),pointerId:K.pointerId,resizeEdge:K.edge,resizeSession:K},"summary",S)},Nn=S=>{m("pointer-click",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"full",S)},wn=S=>{m("pointer-double-click",{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)},"full",S)},zt=S=>{if(S&&S.target!==N&&S.target!==Ae)return;let K=S?{clientX:Number(S.clientX),clientY:Number(S.clientY),buttons:Number(S.buttons)}:R;if(S&&K&&K.clientX>0&&K.clientX<e.innerWidth&&K.clientY>0&&K.clientY<e.innerHeight){ne();return}if(_e(),S){he(),fe=e.setTimeout(()=>{fe=null,R=null,T(K??void 0)},wi);return}he(),R=null,j?.clear(),T(K??void 0)},Dn=()=>zt(),Ro=()=>{ae=null,Z({kind:"scroll",payload:{metrics:Rt(e)}}),ne()},On=()=>{ae===null&&(ae=_t(e,Ro))};e.document.addEventListener("pointerdown",re,!0),e.document.addEventListener("pointermove",B,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",Ie,!0),e.document.addEventListener("pointercancel",Be,!0),e.document.addEventListener("lostpointercapture",kn,!0),e.document.addEventListener("click",Nn,!0),e.document.addEventListener("dblclick",wn,!0),e.addEventListener("scroll",On,{passive:!0}),e.addEventListener("resize",ne,{passive:!0}),e.addEventListener("blur",Dn),e.document.addEventListener("load",ne,!0),N.addEventListener("pointerleave",zt,!0);let ut=e.visualViewport;ut?.addEventListener?.("resize",ne,{passive:!0}),ut?.addEventListener?.("scroll",ne,{passive:!0});let Bn=e.ResizeObserver,Mn=typeof Bn=="function"?new Bn(ne):null;Mn?.observe(Ae);let Fn=e.MutationObserver,Vn=typeof Fn=="function"?new Fn(ne):null;Vn?.observe(Ae,{attributes:!0,childList:!0,subtree:!0}),o=()=>{_e(),he(),R=null,j?.cleanup(),Mn?.disconnect(),Vn?.disconnect(),ae!==null&&(At(e,ae),ae=null),$(),e.document.removeEventListener("pointerdown",re,!0),e.document.removeEventListener("pointermove",B,!0),e.document.removeEventListener("pointerup",Ie,!0),e.document.removeEventListener("pointercancel",Be,!0),e.document.removeEventListener("lostpointercapture",kn,!0),e.document.removeEventListener("click",Nn,!0),e.document.removeEventListener("dblclick",wn,!0),e.removeEventListener("scroll",On),e.removeEventListener("resize",ne),e.removeEventListener("blur",Dn),e.document.removeEventListener("load",ne,!0),N.removeEventListener("pointerleave",zt,!0),ut?.removeEventListener?.("resize",ne),ut?.removeEventListener?.("scroll",ne)}},M=h=>{let I=h.detail;I?.composition?.routeId&&P(I)},F=h=>{let I=h.detail;I?.state&&D(I)},le=h=>{let I=h.data;if(!lr(I)||I.body.type!=="request"||I.body.kind!=="apply-node-patch"&&I.body.kind!=="get-hit-by-ref"&&I.body.kind!=="get-path-by-ref"&&I.body.kind!=="get-scroll-metrics"&&I.body.kind!=="scroll-to"&&I.body.kind!=="scroll-by"&&I.body.kind!=="set-interaction-mode"&&I.body.kind!=="set-selection-visual"&&I.body.kind!=="clear-selection-visual"&&I.body.kind!=="set-resize-visual"&&I.body.kind!=="clear-resize-visual"&&I.body.kind!=="set-theme-override"&&I.body.kind!=="clear-theme-override"&&I.body.kind!=="get-theme-variables"&&I.body.kind!=="compute-drop-target-at-point"&&I.body.kind!=="observe-node-bounds"&&I.body.kind!=="clear-node-bounds-observer"&&I.body.kind!=="restore-text-edit"&&I.body.kind!=="clear-text-edit-rollback"&&I.body.kind!=="start-text-edit-at-point"&&I.body.kind!=="hit-test-at-point"&&!Ir(I.body))return;let y=I.body,$=typeof I.sessionKey=="string"?I.sessionKey:null,j=h.source,se=h.origin;if(!$||!se||!j||typeof j.postMessage!="function"||!ie($,j))return;if(u){if(u.sourceWindow!==j||u.targetOrigin!==se)return;u.sessionKey!==$&&(A(),q(),z(),u=null)}b($,j,se),Y(),W();let R=ee=>{let ae=typeof y.id=="string"?y.id:"unknown";j.postMessage(Je({id:ae,...ee},{sessionKey:$}),se)};try{if(Ir(y)){ds({message:y,sendEvent:N=>{j.postMessage(Je({type:"event",...N},{sessionKey:$}),se)},sendResponse:R,subscriptions:E,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,nextRouteReadySequence:()=>k+=1,windowLike:e});return}if(y.kind==="apply-node-patch"){let N=Se(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!N){R({type:"response",ok:!1,error:"No editable element found for patch target"});return}let B=y.payload.preview,re=B?sc(B.sessionId,y.payload.ref):null;if(re&&B){let Ie=Qe.get(re)??-1;if(B.revision<Ie){R({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,stale:!0,latestRevision:Ie}});return}if(B.revision===Ie){R({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,duplicate:!0,latestRevision:Ie}});return}}if(oc(N,y.payload.patch),re&&B&&cc(re,B.revision),B?.responseDetail==="none"){R({type:"response",ok:!0,result:{applied:!0,appliedRevision:B.revision}});return}R({type:"response",ok:!0,result:ye(N,be(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,B?.responseDetail??"full")});return}if(y.kind==="get-hit-by-ref"){let N=Se(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!N){R({type:"response",ok:!1,error:"No editable element found for hit target"});return}R({type:"response",ok:!0,result:ye(N,be(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(y.kind==="get-path-by-ref"){let N=Se(e.document,y.payload.ref,t.getCurrentDocument?.()??null);if(!N){R({type:"response",ok:!1,error:"No editable element found for path target"});return}let B=[],re=N;for(;re;)re.getAttribute("data-vcp-edit-key")&&B.push(ye(re,be(e.document,re,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),re=re.parentElement;R({type:"response",ok:!0,result:B.reverse()});return}if(y.kind==="restore-text-edit"||y.kind==="clear-text-edit-rollback"){let N=y.payload.ref;if(y.kind==="clear-text-edit-rollback"){r&&vr(r.ref,N)&&(r=null),R({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!vr(r.ref,N)){R({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let B=xs(e.document,r,t.getCurrentDocument?.()??null);r=null,R(B?{type:"response",ok:!0,result:{restored:!0}}:{type:"response",ok:!1,error:"Failed to restore text edit snapshot"});return}if(y.kind==="get-scroll-metrics"){R({type:"response",ok:!0,result:Rt(e)});return}if(y.kind==="scroll-to"){let N=Number(y.payload.x),B=Number(y.payload.y);if(!Number.isFinite(N)||!Number.isFinite(B)){R({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:N,top:B}),R({type:"response",ok:!0,result:Rt(e)});return}if(y.kind==="scroll-by"){let N=Number(y.payload.deltaX),B=Number(y.payload.deltaY);if(!Number.isFinite(N)||!Number.isFinite(B)){R({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:N,top:B}),R({type:"response",ok:!0,result:{...Rt(e),scrolled:!0}});return}if(y.kind==="set-interaction-mode"){y.payload.enabled?v($,j,se):u?.sourceWindow===j&&u.targetOrigin===se&&u.sessionKey===$&&(A(),q()),R({type:"response",ok:!0,result:{interactionEnabled:y.payload.enabled}});return}if(y.kind==="set-selection-visual"){let N=!1;o?s?(N=s.setRef(y.payload.ref),N||(s.cleanup(),s=null)):(s=Qi(e,y.payload.ref,t.getCurrentDocument),N=!!s):(s?.cleanup(),s=null),R({type:"response",ok:!0,result:{version:Ye,active:N}});return}if(y.kind==="clear-selection-visual"){s?.cleanup(),s=null,R({type:"response",ok:!0,result:{version:Ye,active:!1}});return}if(y.kind==="set-resize-visual"){c?.cleanup(),c=null,o&&(c=us(e,y.payload.ref,t.getCurrentDocument)),R({type:"response",ok:!0,result:{version:Xe,active:!!c}});return}if(y.kind==="clear-resize-visual"){c?.cleanup(),c=null,R({type:"response",ok:!0,result:{version:Xe,active:!1}});return}if(y.kind==="set-theme-override"){ac(e.document,y.payload),R({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(y.kind==="clear-theme-override"){uc(e.document),R({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(y.kind==="get-theme-variables"){R({type:"response",ok:!0,result:lc(e.document,y.payload.names)});return}if(y.kind==="compute-drop-target-at-point"){let N=Number(y.payload?.x),B=Number(y.payload?.y);if(!Number.isFinite(N)||!Number.isFinite(B)){R({type:"response",ok:!1,error:"Invalid drop target point"});return}R({type:"response",ok:!0,result:Qs(e,N,B,y.payload.dragKind,y.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(y.kind==="observe-node-bounds"){let N=y.payload.ref;if(!N){R({type:"response",ok:!1,error:"Missing bounds observer target"});return}let B=Se(e.document,N,t.getCurrentDocument?.()??null);if(!B){R({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}i?.(),i=js(e,B,N,t.getCurrentDocument,(re,Ie,Be)=>{a+=1,Z({kind:"geometry-batch",payload:{sequence:a,sourceEventAt:Be.sourceEventAt,captureStartedAt:Be.captureStartedAt,capturedAt:Be.capturedAt,reason:re,snapshots:[Ie]}})}),R({type:"response",ok:!0,result:{observing:!0}}),Z({kind:"node-bounds-change",payload:{hit:ye(B,N,t.getDocumentEntry,"summary",e)}});return}if(y.kind==="clear-node-bounds-observer"){i?.(),i=null,R({type:"response",ok:!0,result:{cleared:!0}});return}if(y.kind!=="hit-test-at-point"&&y.kind!=="start-text-edit-at-point")return;let ee=Number(y.payload?.x),ae=Number(y.payload?.y);if(!Number.isFinite(ee)||!Number.isFinite(ae)){R({type:"response",ok:!1,error:"Invalid text edit point"});return}let fe=y.kind==="hit-test-at-point"?nt(e.document,ee,ae,t.getCurrentDocument?.()??null):_s(e.document,ee,ae,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!fe){R({type:"response",ok:!1,error:y.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let he=y.kind==="start-text-edit-at-point"?fe:null,_e=y.kind==="hit-test-at-point"?fe:he.element,at=y.payload.detailLevel??"full",He=at==="full"?be(e.document,_e,t.getCurrentDocument?.()??null):kt(e.document,_e,t.getCurrentDocument?.()??null),ne=he&&typeof he.textSegmentIndex=="number"?{...He,textSegmentIndex:he.textSegmentIndex}:He,Ae=ye(_e,ne,t.getDocumentEntry,at);if(y.kind==="hit-test-at-point"){R({type:"response",ok:!0,result:Ae});return}A(),n=hc(e,_e,ne,N=>{j.postMessage(Je({type:"event",...N},{sessionKey:$}),se)},{...he?.textNode?{textNode:he.textNode}:{},onCommitSnapshot:N=>{r=N}}),R({type:"response",ok:!0,result:{ref:ne}})}catch(ee){R({type:"response",ok:!1,error:ee instanceof Error?ee.message:"Failed to start text edit"})}};return e.addEventListener("message",le),e.addEventListener(cn,M),e.addEventListener(an,F),O(),()=>{A(),q(),u=null,z(),e.removeEventListener("message",le),e.removeEventListener(cn,M),e.removeEventListener(an,F)}}function Li(e,t){let n=e.document,r=n.head??n.documentElement;if(typeof r?.appendChild!="function")return null;let o="data-vcp-designer-hover-visual",i="data-vcp-designer-selection-visual",s=n.createElement("style");s.setAttribute("data-vcp-designer-hover-visual-style","true"),s.textContent=`
2
+ [${o}="true"]:not([${i}="true"]) {
3
3
  outline: 1px dashed #4f6bff !important;
4
4
  outline-offset: -1px !important;
5
- }`,r.appendChild(s);let c=null,a=()=>{c?.removeAttribute(i),c=null},u=h=>{let g=fn(h),N=g?.getAttribute("data-vcp-edit-key")??"",E=g&&Vr(g,t?.()??null,N)?g:null;return E===c||(a(),c=E,c?.setAttribute(i,"true")),!0};return{clear:a,cleanup:()=>{a(),s.remove()},update:u,updateAtPoint:(h,g)=>u(nt(n,h,g,t?.()??null))}}var Bi=0;function Oi(e,t,n){let r=e.document,i=r.head??r.documentElement,o=++Bi,s=`--vcp-designer-selection-target-${o}`,c=`--vcp-designer-spacing-gap-${o}`,a=e.CSS;if(typeof a?.supports!="function"||!a.supports(`anchor-name: ${s}`)||!a.supports(`position-anchor: ${s}`)||!a.supports("left: anchor(left)")||!a.supports("top: anchor(top)")||!a.supports("left: anchor(right)")||!a.supports("top: anchor(bottom)")||!a.supports("width: anchor-size(width)")||!a.supports("height: anchor-size(height)"))return null;let u=t,l=(v=u)=>be(r,v,n?.()??null),d=l();if(!d||!d.isConnected||typeof i?.appendChild!="function"||typeof r.documentElement?.appendChild!="function")return null;let h="data-vcp-designer-selection-visual",g="data-vcp-designer-visual-layer",N="data-vcp-designer-resize-handle",E=r.createElement("style");E.setAttribute("data-vcp-designer-selection-visual-style","true"),E.textContent=`
5
+ }`,r.appendChild(s);let c=null,a=()=>{c?.removeAttribute(o),c=null},u=f=>{let g=mn(f),k=g?.getAttribute("data-vcp-edit-key")??"",E=g&&Wr(g,t?.()??null,k)?g:null;return E===c||(a(),c=E,c?.setAttribute(o,"true")),!0};return{clear:a,cleanup:()=>{a(),s.remove()},update:u,updateAtPoint:(f,g)=>u(nt(n,f,g,t?.()??null))}}var Ji=0;function Qi(e,t,n){let r=e.document,o=r.head??r.documentElement,i=++Ji,s=`--vcp-designer-selection-target-${i}`,c=`--vcp-designer-spacing-gap-${i}`,a=e.CSS;if(typeof a?.supports!="function"||!a.supports(`anchor-name: ${s}`)||!a.supports(`position-anchor: ${s}`)||!a.supports("left: anchor(left)")||!a.supports("top: anchor(top)")||!a.supports("left: anchor(right)")||!a.supports("top: anchor(bottom)")||!a.supports("width: anchor-size(width)")||!a.supports("height: anchor-size(height)"))return null;let u=t,l=(v=u)=>Se(r,v,n?.()??null),d=l();if(!d||!d.isConnected||typeof o?.appendChild!="function"||typeof r.documentElement?.appendChild!="function")return null;let f="data-vcp-designer-selection-visual",g="data-vcp-designer-visual-layer",k="data-vcp-designer-resize-handle",E=r.createElement("style");E.setAttribute("data-vcp-designer-selection-visual-style","true"),E.textContent=`
6
6
  [${g}="true"] {
7
7
  position: fixed !important;
8
8
  position-anchor: ${s} !important;
@@ -16,10 +16,10 @@ function Kn(e){let t=new Map,n=[],r=new Map,i=[],o=e.pageComposition.status==="s
16
16
  padding: 0 !important;
17
17
  pointer-events: none !important;
18
18
  z-index: 2147483647 !important;
19
- }`,i.appendChild(E);let _=r.createElement("div");_.setAttribute(g,"true"),_.setAttribute("aria-hidden","true"),r.documentElement.appendChild(_);for(let v of Array.from(r.documentElement.children))v.getAttribute(N)!==null&&(v.remove(),r.documentElement.appendChild(v));let A=r.createElement("div");A.setAttribute("data-vcp-designer-spacing-visual-layer","true"),A.setAttribute("aria-hidden","true"),A.style.setProperty("position","fixed","important"),A.style.setProperty("inset","0","important"),A.style.setProperty("overflow","hidden","important"),A.style.setProperty("pointer-events","none","important"),A.style.setProperty("z-index","2147483645","important"),r.documentElement.appendChild(A),d.setAttribute(h,"true");let B=Tt(d,s),q=!1,b=null,ie=[],z=[],te=()=>{b=null,z.forEach(v=>v()),z=Fi(A,ie,d,s,c)},W=()=>{q||b!==null||(b=_t(e,te))};te();let Q=e.ResizeObserver,U=typeof Q=="function"?new Q(W):null,x=[];function P(){x.forEach(v=>U?.unobserve(v)),x=d?.isConnected?[d,...Array.from(d.children)].filter(v=>typeof v.getBoundingClientRect=="function"):[],x.forEach(v=>U?.observe(v))}P();let D=v=>{v===d&&v?.isConnected||(d?.removeAttribute(h),B?.(),B=null,d=v,d?.isConnected?(d.setAttribute(h,"true"),B=Tt(d,s),_.style.removeProperty("display")):_.style.setProperty("display","none","important"),P(),W())},H=()=>{q||D(l())},G=e.MutationObserver,Z=typeof G=="function"?new G(v=>{let M=d;H();let F=M!==d,le=v.some(f=>f.type!=="attributes"||f.attributeName!=="class"&&f.attributeName!=="style"?!1:f.target===d?!0:d?.contains?.(f.target)===!0&&f.target!==A&&f.target!==_);!F&&!le||(P(),W())}):null;return Z?.observe(r.documentElement,{attributeFilter:["data-vcp-edit-key","class","style"],attributes:!0,childList:!0,subtree:!0}),e.addEventListener("resize",W),{setRef:v=>{if(q)return!1;if(Mi(u,v)&&d?.isConnected)return!0;let F=l(v);return F?.isConnected?(u=v,D(F),!0):!1},cleanup:()=>{q||(q=!0,b!==null&&(At(e,b),b=null),e.removeEventListener("resize",W),Z?.disconnect(),U?.disconnect(),d?.removeAttribute(h),z.forEach(v=>v()),z=[],B?.(),B=null,d=null,_.remove(),A.remove(),E.remove())}}}function Mi(e,t){return e.key===t.key&&(e.instanceIndex??null)===(t.instanceIndex??null)&&(e.instanceCount??null)===(t.instanceCount??null)}function Fi(e,t,n,r,i){if(n?.isConnected===!0&&r)return Vi(e,t,n,r,i);let o=n?.isConnected===!0?qi(n):[];return o.forEach((s,c)=>{let a=t[c]??e.ownerDocument.createElement("div");t[c]||(a.style.setProperty("position","fixed","important"),a.style.setProperty("pointer-events","none","important"),e.appendChild(a),t[c]=a),a.setAttribute("data-vcp-designer-spacing-kind",s.kind),a.style.setProperty("background",s.kind==="margin"?"rgba(245, 158, 11, 0.24)":s.kind==="padding"?"rgba(56, 189, 248, 0.22)":"rgba(34, 197, 94, 0.22)","important"),a.style.setProperty("display","block","important"),a.style.setProperty("left",`${s.left}px`,"important"),a.style.setProperty("top",`${s.top}px`,"important"),a.style.setProperty("width",`${s.width}px`,"important"),a.style.setProperty("height",`${s.height}px`,"important")}),t.slice(o.length).forEach(s=>{s.style.setProperty("display","none","important")}),[]}function Vi(e,t,n,r,i){let o=Bt(n),s=[{kind:"margin",left:"anchor(left)",top:`calc(anchor(top) - ${o.marginTop}px)`,width:"anchor-size(width)",height:`${o.marginTop}px`},{kind:"margin",left:"anchor(right)",top:"anchor(top)",width:`${o.marginRight}px`,height:"anchor-size(height)"},{kind:"margin",left:"anchor(left)",top:"anchor(bottom)",width:"anchor-size(width)",height:`${o.marginBottom}px`},{kind:"margin",left:`calc(anchor(left) - ${o.marginLeft}px)`,top:"anchor(top)",width:`${o.marginLeft}px`,height:"anchor-size(height)"},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(top) + ${o.borderTopWidth}px)`,width:`calc(anchor-size(width) - ${o.borderLeftWidth+o.borderRightWidth}px)`,height:`${o.paddingTop}px`},{kind:"padding",left:`calc(anchor(right) - ${o.borderRightWidth+o.paddingRight}px)`,top:`calc(anchor(top) + ${o.borderTopWidth+o.paddingTop}px)`,width:`${o.paddingRight}px`,height:`calc(anchor-size(height) - ${o.borderTopWidth+o.borderBottomWidth+o.paddingTop+o.paddingBottom}px)`},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(bottom) - ${o.borderBottomWidth+o.paddingBottom}px)`,width:`calc(anchor-size(width) - ${o.borderLeftWidth+o.borderRightWidth}px)`,height:`${o.paddingBottom}px`},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(top) + ${o.borderTopWidth+o.paddingTop}px)`,width:`${o.paddingLeft}px`,height:`calc(anchor-size(height) - ${o.borderTopWidth+o.borderBottomWidth+o.paddingTop+o.paddingBottom}px)`}];s.forEach((u,l)=>{let d=dr(e,t,l);d.setAttribute("data-vcp-designer-spacing-kind",u.kind),d.style.setProperty("position-anchor",r,"important"),d.style.setProperty("left",u.left,"important"),d.style.setProperty("top",u.top,"important"),d.style.setProperty("width",u.width,"important"),d.style.setProperty("height",u.height,"important"),d.style.setProperty("background",u.kind==="margin"?"rgba(245, 158, 11, 0.24)":"rgba(56, 189, 248, 0.22)","important");let h=u.kind==="margin"?[o.marginTop,o.marginRight,o.marginBottom,o.marginLeft][l]:[o.paddingTop,o.paddingRight,o.paddingBottom,o.paddingLeft][l-4];d.style.setProperty("display",(h??0)>.5?"block":"none","important")});let c=$i(n,o),a=c.map((u,l)=>{let d=dr(e,t,s.length+l),h=`${i}-${l}`,g=Tt(u.anchorElement,h);return d.setAttribute("data-vcp-designer-spacing-kind","gap"),d.style.setProperty("position-anchor",h,"important"),d.style.setProperty("background","rgba(34, 197, 94, 0.22)","important"),d.style.setProperty("display","block","important"),d.style.setProperty("left",`calc(anchor(left) + ${u.leftOffset}px)`,"important"),d.style.setProperty("top",`calc(anchor(top) + ${u.topOffset}px)`,"important"),d.style.setProperty("width",`${u.width}px`,"important"),d.style.setProperty("height",`${u.height}px`,"important"),g});return t.slice(s.length+c.length).forEach(u=>{u.style.setProperty("display","none","important")}),a}function dr(e,t,n){let r=t[n];if(r)return r;let i=e.ownerDocument.createElement("div");return i.style.setProperty("position","fixed","important"),i.style.setProperty("pointer-events","none","important"),e.appendChild(i),t[n]=i,i}function qi(e){let t=De(e.getBoundingClientRect()),n=Bt(e),r=t.left+n.borderLeftWidth,i=t.top+n.borderTopWidth,o=t.width-n.borderLeftWidth-n.borderRightWidth,s=t.height-n.borderTopWidth-n.borderBottomWidth,c=i+n.paddingTop,a=s-n.paddingTop-n.paddingBottom,u=[{kind:"margin",left:t.left,top:t.top-n.marginTop,width:t.width,height:n.marginTop},{kind:"margin",left:t.left+t.width,top:t.top,width:n.marginRight,height:t.height},{kind:"margin",left:t.left,top:t.top+t.height,width:t.width,height:n.marginBottom},{kind:"margin",left:t.left-n.marginLeft,top:t.top,width:n.marginLeft,height:t.height}];return o>0&&s>0&&u.push({kind:"padding",left:r,top:i,width:o,height:n.paddingTop},{kind:"padding",left:r+o-n.paddingRight,top:c,width:n.paddingRight,height:a},{kind:"padding",left:r,top:i+s-n.paddingBottom,width:o,height:n.paddingBottom},{kind:"padding",left:r,top:c,width:n.paddingLeft,height:a}),u.push(...Ki(e,n)),u.filter(l=>l.width>.5&&l.height>.5)}function Ki(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=yn(e);return[...hr(r,"horizontal",t.columnGap),...hr(r,"vertical",t.rowGap)]}function $i(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=e.ownerDocument?.defaultView,i=Array.from(e.children).filter(o=>typeof o.getBoundingClientRect=="function").map(o=>({element:o,rect:De(o.getBoundingClientRect()),margin:gn(r?.getComputedStyle(o))})).filter(({rect:o})=>o.width>0&&o.height>0);return[...pr(i,"horizontal",t.columnGap),...pr(i,"vertical",t.rowGap)].filter(o=>o.width>.5&&o.height>.5)}function pr(e,t,n){if(n<=0||e.length<2)return[];let r=Pr(e,t==="horizontal"?"y":"x"),i=[];return r.forEach(o=>{let s=[...o].sort((c,a)=>t==="horizontal"?c.rect.left-a.rect.left:c.rect.top-a.rect.top);for(let c=0;c<s.length-1;c+=1){let a=s[c],u=s[c+1];if(t==="horizontal"){let l=a.rect.left+a.rect.width+a.margin.marginRight,d=u.rect.left-u.margin.marginLeft-l,h=Math.min(n,d);i.push({anchorElement:a.element,leftOffset:l+Math.max(0,(d-h)/2)-a.rect.left,topOffset:Math.max(a.rect.top,u.rect.top)-a.rect.top,width:h,height:Math.min(a.rect.top+a.rect.height,u.rect.top+u.rect.height)-Math.max(a.rect.top,u.rect.top)})}else{let l=a.rect.top+a.rect.height+a.margin.marginBottom,d=u.rect.top-u.margin.marginTop-l,h=Math.min(n,d);i.push({anchorElement:a.element,leftOffset:Math.max(a.rect.left,u.rect.left)-a.rect.left,topOffset:l+Math.max(0,(d-h)/2)-a.rect.top,width:Math.min(a.rect.left+a.rect.width,u.rect.left+u.rect.width)-Math.max(a.rect.left,u.rect.left),height:h})}}}),i}function hr(e,t,n){if(n<=0||e.length<2)return[];let r=Pr(e,t==="horizontal"?"y":"x"),i=[];return r.forEach(o=>{let s=[...o].sort((c,a)=>t==="horizontal"?c.rect.left-a.rect.left:c.rect.top-a.rect.top);for(let c=0;c<s.length-1;c+=1){let a=s[c],u=s[c+1];if(t==="horizontal"){let l=a.rect.left+a.rect.width+a.margin.marginRight,d=u.rect.left-u.margin.marginLeft-l,h=Math.min(n,d);i.push({kind:"gap",left:l+Math.max(0,(d-h)/2),top:Math.max(a.rect.top,u.rect.top),width:h,height:Math.min(a.rect.top+a.rect.height,u.rect.top+u.rect.height)-Math.max(a.rect.top,u.rect.top)})}else{let l=a.rect.top+a.rect.height+a.margin.marginBottom,d=u.rect.top-u.margin.marginTop-l,h=Math.min(n,d);i.push({kind:"gap",left:Math.max(a.rect.left,u.rect.left),top:l+Math.max(0,(d-h)/2),width:Math.min(a.rect.left+a.rect.width,u.rect.left+u.rect.width)-Math.max(a.rect.left,u.rect.left),height:h})}}}),i}function Pr(e,t){let n=[...e].sort((i,o)=>t==="x"?i.rect.left-o.rect.left||i.rect.top-o.rect.top:i.rect.top-o.rect.top||i.rect.left-o.rect.left),r=[];return n.forEach(i=>{let o=r.find(s=>s.some(c=>zi(c.rect,i.rect,t)>.5));o?o.push(i):r.push([i])}),r}function zi(e,t,n){return n==="x"?Math.min(e.left+e.width,t.left+t.width)-Math.max(e.left,t.left):Math.min(e.top+e.height,t.top+t.height)-Math.max(e.top,t.top)}var It=new WeakMap;function Tt(e,t){let n=It.get(e);if(!n){let i=e.style.getPropertyValue("anchor-name"),o=e.ownerDocument?.defaultView?.getComputedStyle(e).getPropertyValue?.("anchor-name").trim()??"";n={names:new Set,originalValue:i,originalPriority:e.style.getPropertyPriority("anchor-name"),computedValue:o==="none"?"":o},It.set(e,n)}n.names.add(t),fr(e,n);let r=!1;return()=>{if(r)return;r=!0;let i=It.get(e);if(i){if(i.names.delete(t),i.names.size>0){fr(e,i);return}i.originalValue?e.style.setProperty("anchor-name",i.originalValue,i.originalPriority):e.style.removeProperty("anchor-name"),It.delete(e)}}}function fr(e,t){let n=t.originalValue.trim()||t.computedValue;e.style.setProperty("anchor-name",[...n?[n]:[],...t.names].join(", "),"important")}var Wi=["e","se","s"],Hi=0;function Ui(e){let t=e,i=(t?.getAttribute?.("data-vcp-designer-resize-handle")?t:t?.closest?.("[data-vcp-designer-resize-handle]"))?.getAttribute?.("data-vcp-designer-resize-handle");return i==="e"||i==="s"||i==="se"?i:void 0}function ji(e,t,n){let r=++Hi,i=`--vcp-designer-resize-target-${r}`,o=e.CSS;if(typeof o?.supports!="function"||!o.supports(`anchor-name: ${i}`)||!o.supports(`position-anchor: ${i}`)||!o.supports("left: anchor(left)")||!o.supports("top: anchor(top)"))return null;let s=e.document,c=s.head??s.documentElement,a=s.documentElement,u=()=>be(s,t,n?.()??null),l=u();if(!l||!l.isConnected||typeof c?.appendChild!="function"||typeof a?.appendChild!="function")return null;let d="data-vcp-designer-resize-visual",h="data-vcp-designer-resize-handle",g=s.createElement("style");g.setAttribute("data-vcp-designer-resize-visual-style","true"),g.textContent=`
20
- [${h}] {
19
+ }`,o.appendChild(E);let _=r.createElement("div");_.setAttribute(g,"true"),_.setAttribute("aria-hidden","true"),r.documentElement.appendChild(_);for(let v of Array.from(r.documentElement.children))v.getAttribute(k)!==null&&(v.remove(),r.documentElement.appendChild(v));let A=r.createElement("div");A.setAttribute("data-vcp-designer-spacing-visual-layer","true"),A.setAttribute("aria-hidden","true"),A.style.setProperty("position","fixed","important"),A.style.setProperty("inset","0","important"),A.style.setProperty("overflow","hidden","important"),A.style.setProperty("pointer-events","none","important"),A.style.setProperty("z-index","2147483645","important"),r.documentElement.appendChild(A),d.setAttribute(f,"true");let O=Tt(d,s),q=!1,b=null,ie=[],z=[],te=()=>{b=null,z.forEach(v=>v()),z=es(A,ie,d,s,c)},H=()=>{q||b!==null||(b=_t(e,te))};te();let Q=e.ResizeObserver,U=typeof Q=="function"?new Q(H):null,x=[];function P(){x.forEach(v=>U?.unobserve(v)),x=d?.isConnected?[d,...Array.from(d.children)].filter(v=>typeof v.getBoundingClientRect=="function"):[],x.forEach(v=>U?.observe(v))}P();let D=v=>{v===d&&v?.isConnected||(d?.removeAttribute(f),O?.(),O=null,d=v,d?.isConnected?(d.setAttribute(f,"true"),O=Tt(d,s),_.style.removeProperty("display")):_.style.setProperty("display","none","important"),P(),H())},W=()=>{q||D(l())},Y=e.MutationObserver,Z=typeof Y=="function"?new Y(v=>{let M=d;W();let F=M!==d,le=v.some(h=>h.type!=="attributes"||h.attributeName!=="class"&&h.attributeName!=="style"?!1:h.target===d?!0:d?.contains?.(h.target)===!0&&h.target!==A&&h.target!==_);!F&&!le||(P(),H())}):null;return Z?.observe(r.documentElement,{attributeFilter:["data-vcp-edit-key","class","style"],attributes:!0,childList:!0,subtree:!0}),e.addEventListener("resize",H),{setRef:v=>{if(q)return!1;if(Zi(u,v)&&d?.isConnected)return!0;let F=l(v);return F?.isConnected?(u=v,D(F),!0):!1},cleanup:()=>{q||(q=!0,b!==null&&(At(e,b),b=null),e.removeEventListener("resize",H),Z?.disconnect(),U?.disconnect(),d?.removeAttribute(f),z.forEach(v=>v()),z=[],O?.(),O=null,d=null,_.remove(),A.remove(),E.remove())}}}function Zi(e,t){return e.key===t.key&&(e.instanceIndex??null)===(t.instanceIndex??null)&&(e.instanceCount??null)===(t.instanceCount??null)}function es(e,t,n,r,o){if(n?.isConnected===!0&&r)return ts(e,t,n,r,o);let i=n?.isConnected===!0?ns(n):[];return i.forEach((s,c)=>{let a=t[c]??e.ownerDocument.createElement("div");t[c]||(a.style.setProperty("position","fixed","important"),a.style.setProperty("pointer-events","none","important"),e.appendChild(a),t[c]=a),a.setAttribute("data-vcp-designer-spacing-kind",s.kind),a.style.setProperty("background",s.kind==="margin"?"rgba(245, 158, 11, 0.24)":s.kind==="padding"?"rgba(56, 189, 248, 0.22)":"rgba(34, 197, 94, 0.22)","important"),a.style.setProperty("display","block","important"),a.style.setProperty("left",`${s.left}px`,"important"),a.style.setProperty("top",`${s.top}px`,"important"),a.style.setProperty("width",`${s.width}px`,"important"),a.style.setProperty("height",`${s.height}px`,"important")}),t.slice(i.length).forEach(s=>{s.style.setProperty("display","none","important")}),[]}function ts(e,t,n,r,o){let i=Ot(n),s=[{kind:"margin",left:"anchor(left)",top:`calc(anchor(top) - ${i.marginTop}px)`,width:"anchor-size(width)",height:`${i.marginTop}px`},{kind:"margin",left:"anchor(right)",top:"anchor(top)",width:`${i.marginRight}px`,height:"anchor-size(height)"},{kind:"margin",left:"anchor(left)",top:"anchor(bottom)",width:"anchor-size(width)",height:`${i.marginBottom}px`},{kind:"margin",left:`calc(anchor(left) - ${i.marginLeft}px)`,top:"anchor(top)",width:`${i.marginLeft}px`,height:"anchor-size(height)"},{kind:"padding",left:`calc(anchor(left) + ${i.borderLeftWidth}px)`,top:`calc(anchor(top) + ${i.borderTopWidth}px)`,width:`calc(anchor-size(width) - ${i.borderLeftWidth+i.borderRightWidth}px)`,height:`${i.paddingTop}px`},{kind:"padding",left:`calc(anchor(right) - ${i.borderRightWidth+i.paddingRight}px)`,top:`calc(anchor(top) + ${i.borderTopWidth+i.paddingTop}px)`,width:`${i.paddingRight}px`,height:`calc(anchor-size(height) - ${i.borderTopWidth+i.borderBottomWidth+i.paddingTop+i.paddingBottom}px)`},{kind:"padding",left:`calc(anchor(left) + ${i.borderLeftWidth}px)`,top:`calc(anchor(bottom) - ${i.borderBottomWidth+i.paddingBottom}px)`,width:`calc(anchor-size(width) - ${i.borderLeftWidth+i.borderRightWidth}px)`,height:`${i.paddingBottom}px`},{kind:"padding",left:`calc(anchor(left) + ${i.borderLeftWidth}px)`,top:`calc(anchor(top) + ${i.borderTopWidth+i.paddingTop}px)`,width:`${i.paddingLeft}px`,height:`calc(anchor-size(height) - ${i.borderTopWidth+i.borderBottomWidth+i.paddingTop+i.paddingBottom}px)`}];s.forEach((u,l)=>{let d=yr(e,t,l);d.setAttribute("data-vcp-designer-spacing-kind",u.kind),d.style.setProperty("position-anchor",r,"important"),d.style.setProperty("left",u.left,"important"),d.style.setProperty("top",u.top,"important"),d.style.setProperty("width",u.width,"important"),d.style.setProperty("height",u.height,"important"),d.style.setProperty("background",u.kind==="margin"?"rgba(245, 158, 11, 0.24)":"rgba(56, 189, 248, 0.22)","important");let f=u.kind==="margin"?[i.marginTop,i.marginRight,i.marginBottom,i.marginLeft][l]:[i.paddingTop,i.paddingRight,i.paddingBottom,i.paddingLeft][l-4];d.style.setProperty("display",(f??0)>.5?"block":"none","important")});let c=os(n,i),a=c.map((u,l)=>{let d=yr(e,t,s.length+l),f=`${o}-${l}`,g=Tt(u.anchorElement,f);return d.setAttribute("data-vcp-designer-spacing-kind","gap"),d.style.setProperty("position-anchor",f,"important"),d.style.setProperty("background","rgba(34, 197, 94, 0.22)","important"),d.style.setProperty("display","block","important"),d.style.setProperty("left",`calc(anchor(left) + ${u.leftOffset}px)`,"important"),d.style.setProperty("top",`calc(anchor(top) + ${u.topOffset}px)`,"important"),d.style.setProperty("width",`${u.width}px`,"important"),d.style.setProperty("height",`${u.height}px`,"important"),g});return t.slice(s.length+c.length).forEach(u=>{u.style.setProperty("display","none","important")}),a}function yr(e,t,n){let r=t[n];if(r)return r;let o=e.ownerDocument.createElement("div");return o.style.setProperty("position","fixed","important"),o.style.setProperty("pointer-events","none","important"),e.appendChild(o),t[n]=o,o}function ns(e){let t=De(e.getBoundingClientRect()),n=Ot(e),r=t.left+n.borderLeftWidth,o=t.top+n.borderTopWidth,i=t.width-n.borderLeftWidth-n.borderRightWidth,s=t.height-n.borderTopWidth-n.borderBottomWidth,c=o+n.paddingTop,a=s-n.paddingTop-n.paddingBottom,u=[{kind:"margin",left:t.left,top:t.top-n.marginTop,width:t.width,height:n.marginTop},{kind:"margin",left:t.left+t.width,top:t.top,width:n.marginRight,height:t.height},{kind:"margin",left:t.left,top:t.top+t.height,width:t.width,height:n.marginBottom},{kind:"margin",left:t.left-n.marginLeft,top:t.top,width:n.marginLeft,height:t.height}];return i>0&&s>0&&u.push({kind:"padding",left:r,top:o,width:i,height:n.paddingTop},{kind:"padding",left:r+i-n.paddingRight,top:c,width:n.paddingRight,height:a},{kind:"padding",left:r,top:o+s-n.paddingBottom,width:i,height:n.paddingBottom},{kind:"padding",left:r,top:c,width:n.paddingLeft,height:a}),u.push(...rs(e,n)),u.filter(l=>l.width>.5&&l.height>.5)}function rs(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=bn(e);return[...Sr(r,"horizontal",t.columnGap),...Sr(r,"vertical",t.rowGap)]}function os(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=e.ownerDocument?.defaultView,o=Array.from(e.children).filter(i=>typeof i.getBoundingClientRect=="function").map(i=>({element:i,rect:De(i.getBoundingClientRect()),margin:yn(r?.getComputedStyle(i))})).filter(({rect:i})=>i.width>0&&i.height>0);return[...br(o,"horizontal",t.columnGap),...br(o,"vertical",t.rowGap)].filter(i=>i.width>.5&&i.height>.5)}function br(e,t,n){if(n<=0||e.length<2)return[];let r=Br(e,t==="horizontal"?"y":"x"),o=[];return r.forEach(i=>{let s=[...i].sort((c,a)=>t==="horizontal"?c.rect.left-a.rect.left:c.rect.top-a.rect.top);for(let c=0;c<s.length-1;c+=1){let a=s[c],u=s[c+1];if(t==="horizontal"){let l=a.rect.left+a.rect.width+a.margin.marginRight,d=u.rect.left-u.margin.marginLeft-l,f=Math.min(n,d);o.push({anchorElement:a.element,leftOffset:l+Math.max(0,(d-f)/2)-a.rect.left,topOffset:Math.max(a.rect.top,u.rect.top)-a.rect.top,width:f,height:Math.min(a.rect.top+a.rect.height,u.rect.top+u.rect.height)-Math.max(a.rect.top,u.rect.top)})}else{let l=a.rect.top+a.rect.height+a.margin.marginBottom,d=u.rect.top-u.margin.marginTop-l,f=Math.min(n,d);o.push({anchorElement:a.element,leftOffset:Math.max(a.rect.left,u.rect.left)-a.rect.left,topOffset:l+Math.max(0,(d-f)/2)-a.rect.top,width:Math.min(a.rect.left+a.rect.width,u.rect.left+u.rect.width)-Math.max(a.rect.left,u.rect.left),height:f})}}}),o}function Sr(e,t,n){if(n<=0||e.length<2)return[];let r=Br(e,t==="horizontal"?"y":"x"),o=[];return r.forEach(i=>{let s=[...i].sort((c,a)=>t==="horizontal"?c.rect.left-a.rect.left:c.rect.top-a.rect.top);for(let c=0;c<s.length-1;c+=1){let a=s[c],u=s[c+1];if(t==="horizontal"){let l=a.rect.left+a.rect.width+a.margin.marginRight,d=u.rect.left-u.margin.marginLeft-l,f=Math.min(n,d);o.push({kind:"gap",left:l+Math.max(0,(d-f)/2),top:Math.max(a.rect.top,u.rect.top),width:f,height:Math.min(a.rect.top+a.rect.height,u.rect.top+u.rect.height)-Math.max(a.rect.top,u.rect.top)})}else{let l=a.rect.top+a.rect.height+a.margin.marginBottom,d=u.rect.top-u.margin.marginTop-l,f=Math.min(n,d);o.push({kind:"gap",left:Math.max(a.rect.left,u.rect.left),top:l+Math.max(0,(d-f)/2),width:Math.min(a.rect.left+a.rect.width,u.rect.left+u.rect.width)-Math.max(a.rect.left,u.rect.left),height:f})}}}),o}function Br(e,t){let n=[...e].sort((o,i)=>t==="x"?o.rect.left-i.rect.left||o.rect.top-i.rect.top:o.rect.top-i.rect.top||o.rect.left-i.rect.left),r=[];return n.forEach(o=>{let i=r.find(s=>s.some(c=>is(c.rect,o.rect,t)>.5));i?i.push(o):r.push([o])}),r}function is(e,t,n){return n==="x"?Math.min(e.left+e.width,t.left+t.width)-Math.max(e.left,t.left):Math.min(e.top+e.height,t.top+t.height)-Math.max(e.top,t.top)}var It=new WeakMap;function Tt(e,t){let n=It.get(e);if(!n){let o=e.style.getPropertyValue("anchor-name"),i=e.ownerDocument?.defaultView?.getComputedStyle(e).getPropertyValue?.("anchor-name").trim()??"";n={names:new Set,originalValue:o,originalPriority:e.style.getPropertyPriority("anchor-name"),computedValue:i==="none"?"":i},It.set(e,n)}n.names.add(t),Er(e,n);let r=!1;return()=>{if(r)return;r=!0;let o=It.get(e);if(o){if(o.names.delete(t),o.names.size>0){Er(e,o);return}o.originalValue?e.style.setProperty("anchor-name",o.originalValue,o.originalPriority):e.style.removeProperty("anchor-name"),It.delete(e)}}}function Er(e,t){let n=t.originalValue.trim()||t.computedValue;e.style.setProperty("anchor-name",[...n?[n]:[],...t.names].join(", "),"important")}var ss=["e","se","s"],cs=0;function as(e){let t=e,o=(t?.getAttribute?.("data-vcp-designer-resize-handle")?t:t?.closest?.("[data-vcp-designer-resize-handle]"))?.getAttribute?.("data-vcp-designer-resize-handle");return o==="e"||o==="s"||o==="se"?o:void 0}function us(e,t,n){let r=++cs,o=`--vcp-designer-resize-target-${r}`,i=e.CSS;if(typeof i?.supports!="function"||!i.supports(`anchor-name: ${o}`)||!i.supports(`position-anchor: ${o}`)||!i.supports("left: anchor(left)")||!i.supports("top: anchor(top)"))return null;let s=e.document,c=s.head??s.documentElement,a=s.documentElement,u=()=>Se(s,t,n?.()??null),l=u();if(!l||!l.isConnected||typeof c?.appendChild!="function"||typeof a?.appendChild!="function")return null;let d="data-vcp-designer-resize-visual",f="data-vcp-designer-resize-handle",g=s.createElement("style");g.setAttribute("data-vcp-designer-resize-visual-style","true"),g.textContent=`
20
+ [${f}] {
21
21
  position: fixed !important;
22
- position-anchor: ${i};
22
+ position-anchor: ${o};
23
23
  z-index: 2147483647 !important;
24
24
  box-sizing: border-box !important;
25
25
  width: 8px !important;
@@ -32,15 +32,15 @@ function Kn(e){let t=new Map,n=[],r=new Map,i=[],o=e.pageComposition.status==="s
32
32
  pointer-events: auto !important;
33
33
  translate: -50% -50%;
34
34
  }
35
- [${h}="e"] { cursor: ew-resize !important; }
36
- [${h}="s"] { cursor: ns-resize !important; }
37
- [${h}="se"] { cursor: nwse-resize !important; }
38
- [${h}="e"] { left: anchor(right); top: anchor(center); }
39
- [${h}="se"] { left: anchor(right); top: anchor(bottom); }
40
- [${h}="s"] { left: anchor(center); top: anchor(bottom); }
41
- `,c.appendChild(g);let N=Wi.map(x=>{let P=s.createElement("div");return P.setAttribute(h,x),P.setAttribute("aria-hidden","true"),a.appendChild(P),P}),E=null,_=null,A=()=>{E?.removeAttribute(d),_?.(),_=null,E=null},B=x=>{A(),E=x,_=Tt(x,i),x.setAttribute(d,"true"),N.forEach(P=>P.style.removeProperty("display"))};B(l);let q=!1,b=null,ie=()=>{if(!b||!l)return;let x=(P,D,H)=>{D?l.style.setProperty(P,D,H):l.style.removeProperty(P)};x("width",b.widthValue,b.widthPriority),x("height",b.heightValue,b.heightPriority)},z=(x,P,D)=>b?{version:1,phase:x,sessionId:b.sessionId,pointerId:b.pointerId,edge:b.edge,ref:t,startWidth:b.startWidth,startHeight:b.startHeight,width:P,height:D,baselineStyleDeclarations:[{property:"width",value:b.widthValue||null,...b.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:b.heightValue||null,...b.heightPriority==="important"?{priority:"important"}:{}}]}:null,te=x=>{if(!b||!l?.isConnected||x.pointerId!==b.pointerId)return!1;let P=Number(x.clientX)-b.startX,D=Number(x.clientY)-b.startY,H=Math.max(1,Math.round(b.startWidth+P)),G=Math.max(1,Math.round(b.startHeight+D));return(b.edge==="e"||b.edge==="se")&&l.style.setProperty("width",`${H}px`,"important"),(b.edge==="s"||b.edge==="se")&&l.style.setProperty("height",`${G}px`,"important"),!0},W=()=>{if(q)return;let x=u();if(x===l&&x?.isConnected)return;ie();let P=b?.captureTarget,D=b?.pointerId;b=null,D!==void 0&&P?.releasePointerCapture?.(D),A(),l=x,l?.isConnected?B(l):N.forEach(H=>H.style.setProperty("display","none","important"))},Q=e.MutationObserver,U=typeof Q=="function"?new Q(W):null;return U?.observe(s.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(x,P){if(q||b||!l?.isConnected)return null;let D=l.getBoundingClientRect();return b={sessionId:`resize-${r}-${x.pointerId}`,pointerId:x.pointerId,edge:P,startX:Number(x.clientX),startY:Number(x.clientY),startWidth:D.width,startHeight:D.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:x.target},z("start",D.width,D.height)},update:te,finish(x,P){if(!b||x.pointerId!==b.pointerId)return null;P==="commit"&&te(x);let D=Math.max(1,Math.round(b.startWidth+Number(x.clientX)-b.startX)),H=Math.max(1,Math.round(b.startHeight+Number(x.clientY)-b.startY)),G=z(P,P==="commit"?D:b.startWidth,P==="commit"?H:b.startHeight),Z=b.captureTarget,m=b.pointerId;return P==="cancel"&&ie(),b=null,Z?.releasePointerCapture?.(m),G},cleanup(){if(q)return;q=!0,U?.disconnect(),ie();let x=b?.captureTarget,P=b?.pointerId;b=null,P!==void 0&&x?.releasePointerCapture?.(P),A(),l=null,N.forEach(D=>D.remove()),g.remove()}}}function mr(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 Gi(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 Yi({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}try{switch(e.kind){case"bridge-initialize-session":{let l=await u.initializeSession({composition:e.payload.composition});o?.(l.data.document),Nr(a,{composition:l.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:l.data.document.version}),n({type:"response",ok:!0,result:l});return}case"bridge-get-document":{let l=await u.getDocument(e.payload.composition);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);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);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)});return;case"bridge-get-class-name-source":{let l=await u.getClassNameSource(e.payload.key,e.payload.composition);n({type:"response",ok:!0,result:Xi(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&&Gi(e.payload.request)){let d=await u.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);o?.(d.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 d=u.subscribe(h=>{t({kind:"bridge-event",payload:{composition:h.composition,event:h,subscriptionId:l}})});r.set(l,d),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){s?.(l,e),n({type:"response",ok:!1,error:is(l)})}}function Xi(e,t,n,r){if(!e.ok)return e;let i=be(n,{key:t},r),o=i?Li(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function Li(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 Ji(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(...l){let d=r.apply(this,l);return s(),d},e.history.replaceState=function(...l){let d=i.apply(this,l);return s(),d},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 Qi(e,t){let n=e.MutationObserver;if(typeof n!="function")return()=>{};let r=gr(e.document),i=new n(()=>{let o=gr(e.document);o!==r&&(r=o,t())});return i.observe(e.document.documentElement,{attributes:!0,attributeFilter:[Dt,dn,pn],childList:!0,subtree:!0}),()=>i.disconnect()}function gr(e){let t=Array.from(e.querySelectorAll(Tr)).filter(n=>n.getAttribute(Dt)===ln);return JSON.stringify(t.map(n=>[n.getAttribute(dn),n.getAttribute(pn)]))}function Zi(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function _t(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function At(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Nr(e,t){e.dispatchEvent(new CustomEvent(sn,{detail:t}))}function es(e,t){e.dispatchEvent(new CustomEvent(cn,{detail:t}))}function ts(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function ns(e,t){return oe(e.composition)===t}function rs(e){return we(e,"").includes(Ze)}function os(e){return we(e,"").includes(_r)}function we(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function kr(e){let t=we(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function is(e){let t=we(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":kr(t)?"Site edit bridge disconnected":t}function wr(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 ss(e){let t=wr(e);if(t)return t===Fe||t===He;let n=we(e,"");return n.includes(Fe)||n.includes(He)}function qe(e){if(wr(e))return!1;let t=we(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function Dr(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function hn(e){return bi.has(Or(e))}function cs(e){return Si.has(Or(e))}function Br(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:cs(e.tagName),canInsertChild:hn(e.tagName),canMove:!1,canRemove:!1}}function Or(e){return e?.trim().toLowerCase()??""}function yr(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 as(e,t,n){let r=be(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=us(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 us(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Pt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function ls(e,t,n,r,i){let o=nt(e,t,n,r),s=fn(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(!Br({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let d=ds(e,t,n,s);if(d){let h=hs(s,d);if(h!==null)return{element:s,textNode:d,textSegmentIndex:h}}return Ot(s)?null:{element:s}}function ds(e,t,n,r){let i=ps(e,t,n);return!i||i.parentElement!==r?null:i}function ps(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Pt(o))return o;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Pt(c)?c:null}function hs(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Pt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Pt(e){return e?.nodeType===3}function fs(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function ms(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,ref:Nt(e,r,n),rect:De(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function gs(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:Nt(e,n,t),rect:De(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 ys(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let i=gs(e,n),o=i[0],s=i.at(-1);if(!o||!s)return null;let c=new Set(n.pageComposition.placements.map(g=>`${g.placementUnitKey}\0${g.relation}`)),a=g=>r?.(g)??n.entries.find(N=>N.key===g)??null,u=(g,N)=>{let E=a(g.ref.key)?.pageCompositionUnitKey;return!E||!c.has(`${E}\0${N}`)?null:{anchorBlockId:g.blockId,anchorRef:g.ref,placement:N,boundary:{top:N==="before"?g.rect.top:g.rect.top+g.rect.height,left:g.rect.left,width:g.rect.width}}},l=[],d=u(o,"before");d&&l.push(d),i.slice(1).forEach((g,N)=>{let E=u(g,"before");if(E){l.push(E);return}let _=i[N],A=_?u(_,"after"):null;A&&l.push(A)});let h=u(s,"after");return h&&l.push(h),l.find(({boundary:g})=>t.clientX>=g.left&&t.clientX<=g.left+g.width&&Math.abs(t.clientY-g.top)<=nr)??null}function nt(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=fn(o),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Vr(s,r,c))return s}return null}function fn(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(mn(t))return n??t;!bs(r)&&!n&&(n=t)}t=t.parentElement}return n}function mn(e){return e.getAttribute(yi)!==null}function bs(e){return Ss(e.split("::")[0]??"")}function Ss(e){if(!e)return!1;let t=Es(e);return t===St||t.startsWith(`${St}/`)||t.includes(`/${St}/`)||t.endsWith(`/${St}`)}function Es(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=Fr(Kr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${jr(r)}"]`))),n,r);if(i.length<=1)return{key:br(n,r,0)};let o=i.indexOf(t);return o>=0?{key:br(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function Nt(e,t,n){return ye(e,t,n)}function be(e,t,n){let r=kt(t.key)??t.key,i=Fr(Kr(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=(kt(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let c=Is(n,t.key);return c!==null&&c>=0&&c<i.length?i[c]??null:o!==null?i[o]??null:i[0]??null}function br(e,t,n){return Mr(e,t)[n]?.key??t}function Is(e,t){let n=kt(t);if(!n)return null;let i=Mr(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function Mr(e,t){return(e?.entries??[]).filter(n=>(kt(n.key)??n.key)===t)}function Fr(e,t,n){let r=qr(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Vr(e,t,n){let r=qr(t,n);return!r||e.tagName.toLowerCase()===r}function qr(e,t){return null}var Cs=2,vs=4;function Kr(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&vs)!==0?-1:(r&Cs)!==0?1:0})}function kt(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(ur);if(n<0)break;let r=Number(t.slice(n+ur.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function Bt(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...gn(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 gn(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 yn(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:De(n.getBoundingClientRect()),margin:gn(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function Rs(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>De(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var Sr=new WeakMap,Er=0;function et(e){let t=Sr.get(e);if(t)return t;Er+=1;let n=`runtime-node-${Er}`;return Sr.set(e,n),n}function $r(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=De(t),s=J(r?.scrollX),c=J(r?.scrollY),a=i?.position||"static";return{version:en,runtimeNodeId:et(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:Ts(e,a)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:J(r?.innerWidth),viewportHeight:J(r?.innerHeight),scrollContainers:xs(e)}}}function xs(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=J(i.scrollLeft),u=J(i.scrollTop),l=a!==0||Ir(s)&&J(i.scrollWidth)>J(i.clientWidth),d=u!==0||Ir(c)&&J(i.scrollHeight)>J(i.clientHeight);(l||d)&&r.push({runtimeNodeId:et(i),scrollLeft:a,scrollTop:u})}i=i.parentElement}return r}function Ir(e){return["auto","scroll","overlay","hidden"].includes(e)}function Ts(e,t){if(t==="fixed"){let r=Cr(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:et(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=_s(r)??Cr(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:et(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:et(n)}:{kind:"document"}}function Cr(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 _s(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=rt(e),u=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:As(e),attributes:Object.fromEntries(e.getAttributeNames().map(_=>[_,e.getAttribute(_)??""]))}:{},l=Br({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),d=mn(e),h=!0,g=zr(e)?.getAttribute("data-vcp-edit-key")??null,N=yn(e),E=$r(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...g?{parentKey:g}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...u,runtimeFlags:{selectable:!0,movable:l.canMove,removable:l.canRemove,textEditable:l.canUpdateText,container:d?!1:!!Ot(e)||l.canInsertChild||h&&hn(c)},layoutSnapshot:E,layout:a,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:N,childRects:N.map(({rect:_})=>_),spacing:Bt(e)}}function As(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 vr(e,t,n,r){let i=e.getBoundingClientRect(),o=$r(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:Rs(e)};let s=yn(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:rt(e),spacing:Bt(e)}}function Rr(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 Ps(e,t,n,r,i){let o=t,s=vr(o,n,e,"detailed"),c=Rr(s),a=null,u=null,l="mutation",d=Ke(e),h=d,g=!1,N=!1,E=({reason:U,sourceEventAt:x,forceEmit:P=!1,includeDetailedGeometry:D=!1})=>{(a===null||(U==="scroll"?0:1)>=(l==="scroll"?0:1))&&(l=U,d=x),g=g||P,N=N||D,a===null&&(a=_t(e,_))},_=()=>{let U=Ke(e);a=null;let x=l,P=d,D=g,H=N;g=!1,N=!1;let G=be(e.document,n,r?.()??null);if(!G)return;G!==o&&(z?.unobserve(o),o=G,z?.observe(o),H=!0);let Z=H?"detailed":c?"child-rects":"light",m=vr(o,n,e,Z),T=m.layoutSnapshot.rect.viewport;T.width<=0||T.height<=0||!D&&!Ns(s,m)||(s=m,Z==="detailed"&&(c=Rr(m)),i(x,m,{sourceEventAt:P,captureStartedAt:U,capturedAt:Ke(e)}))},A=()=>{u!==null&&(e.clearTimeout(u),u=null)},B=()=>{A(),E({reason:"resize",sourceEventAt:Ke(e),includeDetailedGeometry:!0})},q=()=>{A(),E({reason:"mutation",sourceEventAt:Ke(e),includeDetailedGeometry:!0})},b=()=>{h=Ke(e),E({reason:"scroll",sourceEventAt:h}),A(),u=e.setTimeout(()=>{u=null,E({reason:"scroll",sourceEventAt:h,forceEmit:!0,includeDetailedGeometry:!0})},fi)},ie=e.ResizeObserver,z=typeof ie=="function"?new ie(B):null;z?.observe(o);let te=e.MutationObserver,W=typeof te=="function"?new te(q):null;W?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",B,{passive:!0}),e.addEventListener("scroll",b,{passive:!0});let Q=e.visualViewport;return Q?.addEventListener?.("resize",B,{passive:!0}),Q?.addEventListener?.("scroll",b,{passive:!0}),e.document.addEventListener("scroll",b,{capture:!0,passive:!0}),e.document.addEventListener("load",q,!0),()=>{a!==null&&(At(e,a),a=null),A(),z?.disconnect(),W?.disconnect(),e.removeEventListener("resize",B),e.removeEventListener("scroll",b),Q?.removeEventListener?.("resize",B),Q?.removeEventListener?.("scroll",b),e.document.removeEventListener("scroll",b,!0),e.document.removeEventListener("load",q,!0)}}function Ke(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function Ns(e,t){return ks(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&Ds(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&Bs(e.childRects,t.childRects)||t.layout!==void 0&&an(e.layout,t.layout)||t.spacing!==void 0&&an(e.spacing,t.spacing)}function ks(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||wt(e.rect.viewport,t.rect.viewport)||wt(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||ws(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function ws(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 Ds(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||wt(i.rect,s.rect)||an(i.margin,s.margin)})}function Bs(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>wt(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 De(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function wt(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 Os(e,t,n,r,i,o,s){let c=e.document,a=nt(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&&un(a,u))return Ct(c,a,"self-or-descendant",o,s);if(r==="move"&&u){let E=qs(c,a,u,o,s);if(E){let _=rn(E.child,E.targetParent,t,n,"nearest");if(_)return vt(c,E.child,E.targetParent,_,o,s)}}let l=null,d=!1,h=a,g=a.parentElement;for(;g;){if(g.getAttribute("data-vcp-edit-key")){if(u&&un(g,u))return Ct(c,a,"self-or-descendant",o,s);let E=xr(g,r,s);if(E==="accept"){l={child:h,targetParent:g};break}E==="blocked"&&(d=!0),h=g}g=g.parentElement}let N=xr(a,r,s);if(N==="accept"){if(l){let E=rn(l.child,l.targetParent,t,n,"edge");if(E)return vt(c,l.child,l.targetParent,E,o,s)}return vt(c,a,a,Ms(a,t,n),o,s)}if(l){let E=rn(l.child,l.targetParent,t,n,"nearest");return vt(c,l.child,l.targetParent,E??"after",o,s)}return N==="blocked"||d?Ct(c,a,"operation-boundary-blocked",o,s):Ct(c,a,"no-accepting-parent",o,s)}function Ct(e,t,n,r,i){return{anchorHit:ge(t,ye(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function vt(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=rt(n).indicatorOrientation,u=r==="append"||r==="prepend"?Fs(n.getBoundingClientRect(),a,r):Vs(t.getBoundingClientRect(),a,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:a,indicatorBounds:u}}function xr(e,t,n){if(mn(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":Ot(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return hn(o)?"accept":"not-container"}function rn(e,t,n,r,i){let o=rt(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 Ms(e,t,n){let r=rt(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 rt(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 Fs(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 Vs(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 qs(e,t,n,r,i){let o=Ks(e,t,n,r,i);if(o)return o;let s=zr(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||un(a,n)?null:{child:a,targetParent:s}}function Ks(e,t,n,r,i){return null}function zr(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function Ot(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=Ot(n);if(r)return r}return null}function Rt(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:J(e.scrollX),scrollY:J(e.scrollY),scrollWidth:Math.max(J(t?.scrollWidth),J(n?.scrollWidth),J(e.innerWidth)),scrollHeight:Math.max(J(t?.scrollHeight),J(n?.scrollHeight),J(e.innerHeight)),viewportWidth:J(e.innerWidth),viewportHeight:J(e.innerHeight)}}function $s(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 zs=500,Qe=new Map;function Ws(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function Hs(e,t){if(Qe.size>=zs){let n=Qe.keys().next().value;n&&Qe.delete(n)}Qe.set(e,t)}var tt=new Set;function Us(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 tt)r.has(i)||n?.removeProperty(i);tt.clear();for(let i of r)tt.add(i);Ls(e,t.stylesheets??[])}function js(e){let t=e.documentElement?.style;for(let n of tt)t?.removeProperty(n);tt.clear();for(let n of Ur(e))n.remove()}function Gs(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=Wr(i,s);c&&(o[s]=c)}return o}function Wr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return Hr(e,r,n)}function Hr(e,t,n){if(!t)return null;let r=Ys(t);if(!r)return t;let i=Wr(e,r.name,n);return i||(r.fallback?Hr(e,r.fallback,n)??r.fallback:null)}function Ys(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=Xs(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 Xs(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 Ls(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of Ur(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(Ar,"true"),s.setAttribute("href",o),i.appendChild(s)}}function Ur(e){return Array.from(e.querySelectorAll(`link[${Ar}]`))}function Js(e,t,n,r,i={}){let o=i.textNode?Qs(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=Zs(s),l=!1,d=()=>{e.document.removeEventListener("pointerdown",g,!0),s.removeEventListener("keydown",N),s.removeEventListener("blur",E),s.removeEventListener("input",_),tc(s,u)},h=A=>{if(l)return;l=!0;let B=s.textContent??"";if(d(),A==="cancel"){o?.restore(c),o||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(B),A==="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 g(A){let B=A.target;B&&s.contains(B)||h("commit")}function N(A){if(A.key==="Escape"){A.preventDefault(),h("cancel");return}A.key==="Enter"&&(A.metaKey||A.ctrlKey)&&(A.preventDefault(),h("commit"))}function E(){h("commit")}function _(){r({kind:"text-edit-input",payload:{ref:n,hit:ge(t,n,void 0,"full")}})}return ec(s),e.document.addEventListener("pointerdown",g,!0),s.addEventListener("keydown",N),s.addEventListener("blur",E),s.addEventListener("input",_),oc(s),ic(s,e.document),d}function Qs(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 Zs(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 ec(e){nc(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 tc(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 nc(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 rc(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 oc(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function ic(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 J(e){let t=Number(e);return Number.isFinite(t)?t:0}import sc from"node:http";import ot from"node:fs";import{createHash as Jr,randomBytes as cc,timingSafeEqual as ac}from"node:crypto";import Se from"node:path";import{WebSocket as Qr,WebSocketServer as uc}from"ws";import{createPreviewSiteEditEngineRuntime as lc,openFileHistoryStore as dc,resolveManagedPageTemplateComposition as pc,scanSiteEditCompositionsFromFiles as hc}from"@vcp-dev/site-edit-engine";import{resolveNextAppRouteId as fc,scanNextAppRouterRoutesFromFiles as mc}from"@vcp-dev/site-edit-engine/next-app-router";import{SiteEditSourceWatcher as gc}from"@vcp-dev/site-edit-engine/source-watcher";var Mt=class{constructor(){this.tail=Promise.resolve()}run(t){let n=this.tail.then(t,t);return this.tail=n.then(()=>{},()=>{}),n}};import{SiteEditOperationRequestSchema as yc,computeSiteEditCompositionKey as Be}from"@vcp-dev/contracts";var bc="127.0.0.1",Sc=30218,Ec="/__vcp/site-edit/bridge",Zr=6*1024*1024,Ic=Zr*2,Cc=3e3,Gr=50,En=".vcp/current-snapshot.json",Yr="__VCP_SITE_EDIT_BRIDGE_SERVERS__";function au(e){let t=to(e),n=ro(t),r=no(),i=r.get(n);if(i)return i;let o=new Ft(t);r.set(n,o);try{o.start()}catch(s){throw r.delete(n),o.stop(),s}return o}function eo(e,t,n={}){let r=new Ft(to(t),e,!1,n);return r.start({listen:!1}),r}var Ft=class{constructor(t,n=sc.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 Mt,this.eventListeners=new Set,this.routes=[],this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=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{ot.mkdirSync(Se.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=_c({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 gc({projectRoot:this.options.projectRoot,watch_dirs:vc(this.options.runtime.watch_dirs),interval_ms:this.options.runtime.watch_interval_ms,debounce_ms:this.options.runtime.watch_debounce_ms??Gr,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=no(),n=ro(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??lc)({...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=xc(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 a=(await i.getHistoryStatus()).data;return{ok:!0,composition:r,data:{document:c,historyStatus:a}}}),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)=>this.getRuntime().getObjectEditContext(t,Ce(n)),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 bn(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 bn(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 bn(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??dc)(Tc({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=Be(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?Be(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??Gr;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(Oc)&&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=ot.readFileSync(Se.join(this.options.projectRoot,En),"utf8"),n=JSON.parse(t),r=typeof n.snapshot_id=="string"?n.snapshot_id:"";return!r||In(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=Rc(this.options.projectRoot),r=mc(n),i=r.length>0?r:(this.options.runtime.routes??[]).map(a=>({...a})),o=hc({files:n});if(o.length===0)throw new Error("No canonical App Router composition is indexed by the preview bridge.");let s=new Map(this.compositions.map(a=>[Be(a.context),a])),c=new Map(o.map(a=>[Be(a.context),a]));if(this.runtime){for(let[a,u]of s){let l=c.get(a);(!l||l.entryFile!==u.entryFile)&&this.runtime.unregisterComposition(Ce(u.context))}for(let[a,u]of c){let l=s.get(a);(!l||l.entryFile!==u.entryFile)&&this.runtime.registerComposition(u.context,u.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=fc(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=pc({selector:{routeId:n,...t.templateId?{templateId:t.templateId}:{}},files:this.compositionFiles,canonicalEntryFile:r.entryFile}),o=Be(i.context);if(!this.compositions.some(s=>Be(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(Be(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 to(e){return{tenantId:e.tenantId,siteId:e.siteId,snapshotId:e.snapshotId,projectRoot:Se.resolve(e.projectRoot??process.cwd()),basePath:e.basePath??"",host:e.host??bc,port:e.port??Sc,path:e.path??Ec,sessionKey:e.sessionKey??Bc(),historyRoot:e.historyRoot,allowedOrigins:e.allowedOrigins??[],runtime:e.runtime??{},onSnapshotIdChanged:e.onSnapshotIdChanged}}function vc(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 Rc(e){let t=[],n=["app","src/app",".vcp"],r=new Set([".git",".next",".turbo","coverage","dist","node_modules","output","snapshot-store"]),i=o=>{if(!ot.existsSync(o))return;let s;try{s=ot.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(Se.join(o,c.name));continue}if(!c.isFile())continue;let a=Se.join(o,c.name),u="";try{u=ot.readFileSync(a,"utf8")}catch{}t.push({path:Se.relative(e,a).replaceAll(Se.sep,"/"),content:u})}};for(let o of n)i(Se.join(e,o));return t.sort((o,s)=>o.path.localeCompare(s.path))}function xc(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 Tc(e){return Se.join(Se.resolve(e.root),In(e.siteId),In(e.snapshotId),Jr("sha256").update(e.editingSessionId).digest("hex").slice(0,32))}function In(e){return/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)&&e!=="."&&e!==".."?e:Jr("sha256").update(e).digest("hex").slice(0,32)}function no(){let e=globalThis;return e[Yr]??=new Map,e[Yr]}function ro(e){return`${e.projectRoot}:${e.host}:${e.port}:${e.path}:${e.historyRoot??""}`}function bn(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 _c(e){let t=new uc({maxPayload:Zr,noServer:!0}),n=new WeakSet,r=o=>{new lt({socket:new Cn(o),engine:e.engine,validateOperationRequest:s=>yc.safeParse(s).success})},i=(o,s,c)=>{if(!Ac(o,e))return;let a=Pc(o,e);if(!a){s.write(`HTTP/1.1 401 Unauthorized\r
35
+ [${f}="e"] { cursor: ew-resize !important; }
36
+ [${f}="s"] { cursor: ns-resize !important; }
37
+ [${f}="se"] { cursor: nwse-resize !important; }
38
+ [${f}="e"] { left: anchor(right); top: anchor(center); }
39
+ [${f}="se"] { left: anchor(right); top: anchor(bottom); }
40
+ [${f}="s"] { left: anchor(center); top: anchor(bottom); }
41
+ `,c.appendChild(g);let k=ss.map(x=>{let P=s.createElement("div");return P.setAttribute(f,x),P.setAttribute("aria-hidden","true"),a.appendChild(P),P}),E=null,_=null,A=()=>{E?.removeAttribute(d),_?.(),_=null,E=null},O=x=>{A(),E=x,_=Tt(x,o),x.setAttribute(d,"true"),k.forEach(P=>P.style.removeProperty("display"))};O(l);let q=!1,b=null,ie=()=>{if(!b||!l)return;let x=(P,D,W)=>{D?l.style.setProperty(P,D,W):l.style.removeProperty(P)};x("width",b.widthValue,b.widthPriority),x("height",b.heightValue,b.heightPriority)},z=(x,P,D)=>b?{version:1,phase:x,sessionId:b.sessionId,pointerId:b.pointerId,edge:b.edge,ref:t,startWidth:b.startWidth,startHeight:b.startHeight,width:P,height:D,baselineStyleDeclarations:[{property:"width",value:b.widthValue||null,...b.widthPriority==="important"?{priority:"important"}:{}},{property:"height",value:b.heightValue||null,...b.heightPriority==="important"?{priority:"important"}:{}}]}:null,te=x=>{if(!b||!l?.isConnected||x.pointerId!==b.pointerId)return!1;let P=Number(x.clientX)-b.startX,D=Number(x.clientY)-b.startY,W=Math.max(1,Math.round(b.startWidth+P)),Y=Math.max(1,Math.round(b.startHeight+D));return(b.edge==="e"||b.edge==="se")&&l.style.setProperty("width",`${W}px`,"important"),(b.edge==="s"||b.edge==="se")&&l.style.setProperty("height",`${Y}px`,"important"),!0},H=()=>{if(q)return;let x=u();if(x===l&&x?.isConnected)return;ie();let P=b?.captureTarget,D=b?.pointerId;b=null,D!==void 0&&P?.releasePointerCapture?.(D),A(),l=x,l?.isConnected?O(l):k.forEach(W=>W.style.setProperty("display","none","important"))},Q=e.MutationObserver,U=typeof Q=="function"?new Q(H):null;return U?.observe(s.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(x,P){if(q||b||!l?.isConnected)return null;let D=l.getBoundingClientRect();return b={sessionId:`resize-${r}-${x.pointerId}`,pointerId:x.pointerId,edge:P,startX:Number(x.clientX),startY:Number(x.clientY),startWidth:D.width,startHeight:D.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:x.target},z("start",D.width,D.height)},update:te,finish(x,P){if(!b||x.pointerId!==b.pointerId)return null;P==="commit"&&te(x);let D=Math.max(1,Math.round(b.startWidth+Number(x.clientX)-b.startX)),W=Math.max(1,Math.round(b.startHeight+Number(x.clientY)-b.startY)),Y=z(P,P==="commit"?D:b.startWidth,P==="commit"?W:b.startHeight),Z=b.captureTarget,m=b.pointerId;return P==="cancel"&&ie(),b=null,Z?.releasePointerCapture?.(m),Y},cleanup(){if(q)return;q=!0,U?.disconnect(),ie();let x=b?.captureTarget,P=b?.pointerId;b=null,P!==void 0&&x?.releasePointerCapture?.(P),A(),l=null,k.forEach(D=>D.remove()),g.remove()}}}function Ir(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 ls(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 ds({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:o,setCurrentDocument:i,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}try{switch(e.kind){case"bridge-initialize-session":{let l=await u.initializeSession({composition:e.payload.composition});i?.(l.data.document),Mr(a,{composition:l.data.document.composition,editEngineVersion:"unknown",sequence:c(),version:l.data.document.version}),n({type:"response",ok:!0,result:l});return}case"bridge-get-document":{let l=await u.getDocument(e.payload.composition);i?.(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);i?.(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);i?.(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:ps(l,e.payload.key,a.document,o?.()??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&&ls(e.payload.request)){let d=await u.acknowledgeDocumentVersion(e.payload.composition,l.data.resultVersion);i?.(d.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 d=u.subscribe(f=>{t({kind:"bridge-event",payload:{composition:f.composition,event:f,subscriptionId:l}})});r.set(l,d),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){s?.(l,e),n({type:"response",ok:!1,error:Cs(l)})}}function ps(e,t,n,r){if(!e.ok)return e;let o=Se(n,{key:t},r),i=o?fs(o):null;return i?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...i}}}:e}function fs(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 hs(e,t,n=()=>e.location.pathname){let r=e.history.pushState,o=e.history.replaceState,i=n(),s=()=>{let u=n();u!==i&&(i=u,t())},c=()=>s(),a=()=>s();return e.history.pushState=function(...l){let d=r.apply(this,l);return s(),d},e.history.replaceState=function(...l){let d=o.apply(this,l);return s(),d},e.addEventListener("popstate",c),e.addEventListener("hashchange",a),()=>{e.history.pushState=r,e.history.replaceState=o,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",a)}}function ms(e,t){let n=e.MutationObserver;if(typeof n!="function")return()=>{};let r=Cr(e.document),o=new n(()=>{let i=Cr(e.document);i!==r&&(r=i,t())});return o.observe(e.document.documentElement,{attributes:!0,attributeFilter:[Dt,pn,fn],childList:!0,subtree:!0}),()=>o.disconnect()}function Cr(e){let t=Array.from(e.querySelectorAll(wr)).filter(n=>n.getAttribute(Dt)===dn);return JSON.stringify(t.map(n=>[n.getAttribute(pn),n.getAttribute(fn)]))}function gs(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function _t(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function At(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Mr(e,t){e.dispatchEvent(new CustomEvent(cn,{detail:t}))}function ys(e,t){e.dispatchEvent(new CustomEvent(an,{detail:t}))}function bs(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function Ss(e,t){return oe(e.composition)===t}function Es(e){return we(e,"").includes(Ze)}function Is(e){return we(e,"").includes(Dr)}function we(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function Fr(e){let t=we(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Cs(e){let t=we(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":Fr(t)?"Site edit bridge disconnected":t}function Vr(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 vs(e){let t=Vr(e);if(t)return t===Fe||t===We;let n=we(e,"");return n.includes(Fe)||n.includes(We)}function qe(e){if(Vr(e))return!1;let t=we(e,"");return/\b(?:bridge(?: session)?|websocket)\s+authentication\b|\bbridge\s+(?:session\s+)?key\b/i.test(t)}function qr(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function hn(e){return Bi.has(Kr(e))}function Rs(e){return Mi.has(Kr(e))}function $r(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:Rs(e.tagName),canInsertChild:hn(e.tagName),canMove:!1,canRemove:!1}}function Kr(e){return e?.trim().toLowerCase()??""}function vr(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 xs(e,t,n){let r=Se(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let o=Ts(r,t.ref.textSegmentIndex);return o?(o.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function Ts(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Pt(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function _s(e,t,n,r,o){let i=nt(e,t,n,r),s=mn(i);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",a=be(e,s,r),u=o?.(a.key)??o?.(c);if(!$r({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let d=As(e,t,n,s);if(d){let f=ks(s,d);if(f!==null)return{element:s,textNode:d,textSegmentIndex:f}}return Bt(s)?null:{element:s}}function As(e,t,n,r){let o=Ps(e,t,n);return!o||o.parentElement!==r?null:o}function Ps(e,t,n){let r=e,i=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Pt(i))return i;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Pt(c)?c:null}function ks(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Pt(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Pt(e){return e?.nodeType===3}function Ns(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function ws(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let o=r.getAttribute("data-site-block-id")??"",i=r.getAttribute("data-vcp-edit-key")??"";return!o||!i?null:{blockId:o,ref:kt(e,r,n),rect:De(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function Ds(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:kt(e,n,t),rect:De(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 Os(e,t,n,r){if(n?.pageComposition.status!=="supported")return null;let o=Ds(e,n),i=o[0],s=o.at(-1);if(!i||!s)return null;let c=new Set(n.pageComposition.placements.map(g=>`${g.placementUnitKey}\0${g.relation}`)),a=g=>r?.(g)??n.entries.find(k=>k.key===g)??null,u=(g,k)=>{let E=a(g.ref.key)?.pageCompositionUnitKey;return!E||!c.has(`${E}\0${k}`)?null:{anchorBlockId:g.blockId,anchorRef:g.ref,placement:k,boundary:{top:k==="before"?g.rect.top:g.rect.top+g.rect.height,left:g.rect.left,width:g.rect.width}}},l=[],d=u(i,"before");d&&l.push(d),o.slice(1).forEach((g,k)=>{let E=u(g,"before");if(E){l.push(E);return}let _=o[k],A=_?u(_,"after"):null;A&&l.push(A)});let f=u(s,"after");return f&&l.push(f),l.find(({boundary:g})=>t.clientX>=g.left&&t.clientX<=g.left+g.width&&Math.abs(t.clientY-g.top)<=ar)??null}function nt(e,t,n,r=null){let o=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let i of o){let s=mn(i),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Wr(s,r,c))return s}return null}function mn(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(gn(t))return n??t;!Bs(r)&&!n&&(n=t)}t=t.parentElement}return n}function gn(e){return e.getAttribute(Oi)!==null}function Bs(e){return Ms(e.split("::")[0]??"")}function Ms(e){if(!e)return!1;let t=Fs(e);return t===St||t.startsWith(`${St}/`)||t.includes(`/${St}/`)||t.endsWith(`/${St}`)}function Fs(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let o of n.split("/"))if(!(!o||o===".")){if(o===".."){r.pop();continue}r.push(o)}return r.join("/")}function be(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",o=Hr(jr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Qr(r)}"]`))),n,r);if(o.length<=1)return{key:Rr(n,r,0)};let i=o.indexOf(t);return i>=0?{key:Rr(n,r,i),instanceIndex:i,instanceCount:o.length}:{key:r}}function kt(e,t,n){return be(e,t,n)}function Se(e,t,n){let r=Nt(t.key)??t.key,o=Hr(jr(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${Qr(r)}"]`))),n,t.key);if(o.length===0)return null;let i=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<o.length?t.instanceIndex:null,s=(Nt(t.key)??t.key)!==t.key;if(i!==null&&!s)return o[i]??null;let c=Vs(n,t.key);return c!==null&&c>=0&&c<o.length?o[c]??null:i!==null?o[i]??null:o[0]??null}function Rr(e,t,n){return zr(e,t)[n]?.key??t}function Vs(e,t){let n=Nt(t);if(!n)return null;let o=zr(e,n).findIndex(i=>i.key===t);return o>=0?o:null}function zr(e,t){return(e?.entries??[]).filter(n=>(Nt(n.key)??n.key)===t)}function Hr(e,t,n){let r=Ur(t,n);return r?e.filter(o=>o.tagName.toLowerCase()===r):e}function Wr(e,t,n){let r=Ur(t,n);return!r||e.tagName.toLowerCase()===r}function Ur(e,t){return null}var qs=2,$s=4;function jr(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&$s)!==0?-1:(r&qs)!==0?1:0})}function Nt(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 Ot(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...yn(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 yn(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 bn(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:De(n.getBoundingClientRect()),margin:yn(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function Ks(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>De(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var xr=new WeakMap,Tr=0;function et(e){let t=xr.get(e);if(t)return t;Tr+=1;let n=`runtime-node-${Tr}`;return xr.set(e,n),n}function Gr(e,t,n){let r=n??e.ownerDocument?.defaultView,o=e.ownerDocument?.defaultView?.getComputedStyle(e),i=De(t),s=J(r?.scrollX),c=J(r?.scrollY),a=o?.position||"static";return{version:tn,runtimeNodeId:et(e),rect:{viewport:i,document:{top:i.top+c,left:i.left+s,width:i.width,height:i.height}},layout:{position:a,transform:o?.transform||"none",containingBlock:Hs(e,a)},scrollContext:{scrollX:s,scrollY:c,viewportWidth:J(r?.innerWidth),viewportHeight:J(r?.innerHeight),scrollContainers:zs(e)}}}function zs(e){let t=e.ownerDocument,n=t?.defaultView,r=[],o=e.parentElement;for(;o;){if(o!==t?.body&&o!==t?.documentElement){let i=n?.getComputedStyle(o),s=i?.overflowX||i?.overflow||"visible",c=i?.overflowY||i?.overflow||"visible",a=J(o.scrollLeft),u=J(o.scrollTop),l=a!==0||_r(s)&&J(o.scrollWidth)>J(o.clientWidth),d=u!==0||_r(c)&&J(o.scrollHeight)>J(o.clientHeight);(l||d)&&r.push({runtimeNodeId:et(o),scrollLeft:a,scrollTop:u})}o=o.parentElement}return r}function _r(e){return["auto","scroll","overlay","hidden"].includes(e)}function Hs(e,t){if(t==="fixed"){let r=Ar(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:et(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,o=Ws(r)??Ar(e.parentElement,!1);return o?{kind:"element",runtimeNodeId:et(o)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:et(n)}:{kind:"document"}}function Ar(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(i=>["transform","perspective","filter"].includes(i.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function Ws(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function ye(e,t,n,r="full",o){let i=e.getBoundingClientRect(),s=n?.(t.key)??null,c=e.tagName.toLowerCase(),a=rt(e),u=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:Us(e),attributes:Object.fromEntries(e.getAttributeNames().map(_=>[_,e.getAttribute(_)??""]))}:{},l=$r({operationSummary:s?.operationSummary,tagName:c,fallbackMode:"preview"}),d=gn(e),f=!0,g=Yr(e)?.getAttribute("data-vcp-edit-key")??null,k=bn(e),E=Gr(e,i,o);return{ref:t,key:t.key,detailLevel:r,tagName:c,...s?{sourceKind:"jsx"}:{},...g?{parentKey:g}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...u,runtimeFlags:{selectable:!0,movable:l.canMove,removable:l.canRemove,textEditable:l.canUpdateText,container:d?!1:!!Bt(e)||l.canInsertChild||f&&hn(c)},layoutSnapshot:E,layout:a,rect:{top:i.top,left:i.left,width:i.width,height:i.height},childBoxes:k,childRects:k.map(({rect:_})=>_),spacing:Ot(e)}}function Us(e){let t=Object.fromEntries(Object.entries(e.dataset).map(([r,o])=>[r,o??""])),n=e;for(;n;){for(let r of["cmsRecord","cmsField","cmsMediaIndex"]){let o=n.dataset[r];t[r]===void 0&&o!==void 0&&(t[r]=o)}n=n.parentElement}return t}function Pr(e,t,n,r){let o=e.getBoundingClientRect(),i=Gr(e,o,n);if(r==="light")return{ref:t,layoutSnapshot:i};if(r==="child-rects")return{ref:t,layoutSnapshot:i,childRects:Ks(e)};let s=bn(e);return{ref:t,layoutSnapshot:i,childBoxes:s,childRects:s.map(({rect:c})=>c),layout:rt(e),spacing:Ot(e)}}function kr(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 js(e,t,n,r,o){let i=t,s=Pr(i,n,e,"detailed"),c=kr(s),a=null,u=null,l="mutation",d=$e(e),f=d,g=!1,k=!1,E=({reason:U,sourceEventAt:x,forceEmit:P=!1,includeDetailedGeometry:D=!1})=>{(a===null||(U==="scroll"?0:1)>=(l==="scroll"?0:1))&&(l=U,d=x),g=g||P,k=k||D,a===null&&(a=_t(e,_))},_=()=>{let U=$e(e);a=null;let x=l,P=d,D=g,W=k;g=!1,k=!1;let Y=Se(e.document,n,r?.()??null);if(!Y)return;Y!==i&&(z?.unobserve(i),i=Y,z?.observe(i),W=!0);let Z=W?"detailed":c?"child-rects":"light",m=Pr(i,n,e,Z),T=m.layoutSnapshot.rect.viewport;T.width<=0||T.height<=0||!D&&!Gs(s,m)||(s=m,Z==="detailed"&&(c=kr(m)),o(x,m,{sourceEventAt:P,captureStartedAt:U,capturedAt:$e(e)}))},A=()=>{u!==null&&(e.clearTimeout(u),u=null)},O=()=>{A(),E({reason:"resize",sourceEventAt:$e(e),includeDetailedGeometry:!0})},q=()=>{A(),E({reason:"mutation",sourceEventAt:$e(e),includeDetailedGeometry:!0})},b=()=>{f=$e(e),E({reason:"scroll",sourceEventAt:f}),A(),u=e.setTimeout(()=>{u=null,E({reason:"scroll",sourceEventAt:f,forceEmit:!0,includeDetailedGeometry:!0})},Ni)},ie=e.ResizeObserver,z=typeof ie=="function"?new ie(O):null;z?.observe(i);let te=e.MutationObserver,H=typeof te=="function"?new te(q):null;H?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",O,{passive:!0}),e.addEventListener("scroll",b,{passive:!0});let Q=e.visualViewport;return Q?.addEventListener?.("resize",O,{passive:!0}),Q?.addEventListener?.("scroll",b,{passive:!0}),e.document.addEventListener("scroll",b,{capture:!0,passive:!0}),e.document.addEventListener("load",q,!0),()=>{a!==null&&(At(e,a),a=null),A(),z?.disconnect(),H?.disconnect(),e.removeEventListener("resize",O),e.removeEventListener("scroll",b),Q?.removeEventListener?.("resize",O),Q?.removeEventListener?.("scroll",b),e.document.removeEventListener("scroll",b,!0),e.document.removeEventListener("load",q,!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 Gs(e,t){return Ys(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&Ls(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&Js(e.childRects,t.childRects)||t.layout!==void 0&&un(e.layout,t.layout)||t.spacing!==void 0&&un(e.spacing,t.spacing)}function Ys(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||wt(e.rect.viewport,t.rect.viewport)||wt(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||Xs(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function Xs(e,t){return e.length!==t.length||e.some((n,r)=>{let o=t[r];return!o||n.runtimeNodeId!==o.runtimeNodeId||n.scrollLeft!==o.scrollLeft||n.scrollTop!==o.scrollTop})}function Ls(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((o,i)=>{let s=r[i];return!s||wt(o.rect,s.rect)||un(o.margin,s.margin)})}function Js(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((o,i)=>wt(o,r[i]??o))}function un(e,t){let n=e??{},r=t??{},o=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(o).some(i=>n[i]!==r[i])}function De(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function wt(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 Qs(e,t,n,r,o,i,s){let c=e.document,a=nt(c,t,n,i);if(!a)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let u=o?Se(c,o,i):null;if(u&&ln(a,u))return Ct(c,a,"self-or-descendant",i,s);if(r==="move"&&u){let E=nc(c,a,u,i,s);if(E){let _=on(E.child,E.targetParent,t,n,"nearest");if(_)return vt(c,E.child,E.targetParent,_,i,s)}}let l=null,d=!1,f=a,g=a.parentElement;for(;g;){if(g.getAttribute("data-vcp-edit-key")){if(u&&ln(g,u))return Ct(c,a,"self-or-descendant",i,s);let E=Nr(g,r,s);if(E==="accept"){l={child:f,targetParent:g};break}E==="blocked"&&(d=!0),f=g}g=g.parentElement}let k=Nr(a,r,s);if(k==="accept"){if(l){let E=on(l.child,l.targetParent,t,n,"edge");if(E)return vt(c,l.child,l.targetParent,E,i,s)}return vt(c,a,a,Zs(a,t,n),i,s)}if(l){let E=on(l.child,l.targetParent,t,n,"nearest");return vt(c,l.child,l.targetParent,E??"after",i,s)}return k==="blocked"||d?Ct(c,a,"operation-boundary-blocked",i,s):Ct(c,a,"no-accepting-parent",i,s)}function Ct(e,t,n,r,o){return{anchorHit:ye(t,be(e,t,r),o,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function vt(e,t,n,r,o,i){let s=ye(t,be(e,t,o),i,"summary"),c=ye(n,be(e,n,o),i,"summary"),a=rt(n).indicatorOrientation,u=r==="append"||r==="prepend"?ec(n.getBoundingClientRect(),a,r):tc(t.getBoundingClientRect(),a,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:a,indicatorBounds:u}}function Nr(e,t,n){if(gn(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",o=n?.(r)??null;if(o)return o.operationSummary.canInsertChild===!0?"accept":Bt(e)?"blocked":"not-container";let i=e.tagName.toLowerCase();return hn(i)?"accept":"not-container"}function on(e,t,n,r,o){let i=rt(t).indicatorOrientation,s=e.getBoundingClientRect(),c=i==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return o==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function Zs(e,t,n){let r=rt(e).indicatorOrientation,o=e.getBoundingClientRect();return(r==="vertical"?o.width>0?(t-o.left)/o.width:.5:o.height>0?(n-o.top)/o.height:.5)<.5?"prepend":"append"}function rt(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",o=n?.flexDirection,i=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(o??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(i??"row").includes("column")?"vertical":"horizontal"),{display:r,...o?{flexDirection:o}:{},...i?{gridAutoFlow:i}:{},indicatorOrientation:s}}function ec(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 tc(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 ln(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function nc(e,t,n,r,o){let i=rc(e,t,n,r,o);if(i)return i;let s=Yr(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||ln(a,n)?null:{child:a,targetParent:s}}function rc(e,t,n,r,o){return null}function Yr(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function Bt(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=Bt(n);if(r)return r}return null}function Rt(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:J(e.scrollX),scrollY:J(e.scrollY),scrollWidth:Math.max(J(t?.scrollWidth),J(n?.scrollWidth),J(e.innerWidth)),scrollHeight:Math.max(J(t?.scrollHeight),J(n?.scrollHeight),J(e.innerHeight)),viewportWidth:J(e.innerWidth),viewportHeight:J(e.innerHeight)}}function oc(e,t){Object.entries(t.attributes??{}).forEach(([r,o])=>{if(o===null){e.removeAttribute(r);return}e.setAttribute(r,o)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,o])=>{if(n.has(r))return;let i=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(o==null||o===""){i.removeProperty(s);return}i.setProperty(s,String(o))}),t.styleDeclarations?.forEach(r=>{let o=e.style,i=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){o.removeProperty(i);return}o.setProperty(i,String(s),r.priority)})}var ic=500,Qe=new Map;function sc(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function cc(e,t){if(Qe.size>=ic){let n=Qe.keys().next().value;n&&Qe.delete(n)}Qe.set(e,t)}var tt=new Set;function ac(e,t){let n=e.documentElement?.style,r=new Set;for(let[o,i]of Object.entries(t.variables??{}))o.startsWith("--")&&(r.add(o),n?.setProperty(o,i));for(let o of tt)r.has(o)||n?.removeProperty(o);tt.clear();for(let o of r)tt.add(o);fc(e,t.stylesheets??[])}function uc(e){let t=e.documentElement?.style;for(let n of tt)t?.removeProperty(n);tt.clear();for(let n of Jr(e))n.remove()}function lc(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,o=r?e.defaultView?.getComputedStyle(r):null,i={};for(let s of n){let c=Xr(o,s);c&&(i[s]=c)}return i}function Xr(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return Lr(e,r,n)}function Lr(e,t,n){if(!t)return null;let r=dc(t);if(!r)return t;let o=Xr(e,r.name,n);return o||(r.fallback?Lr(e,r.fallback,n)??r.fallback:null)}function dc(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=pc(n),o=r>=0?n.slice(0,r).trim():n;if(!o.startsWith("--"))return null;let i=r>=0?n.slice(r+1).trim():null;return{name:o,fallback:i||null}}function pc(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 fc(e,t){let n=new Set(t.filter(i=>typeof i=="string"&&i.length>0)),r=new Map;for(let i of Jr(e)){let s=i.getAttribute("href")??"";if(!n.has(s)||r.has(s)){i.remove();continue}r.set(s,i)}let o=e.head;if(o)for(let i of n){if(r.has(i))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(Or,"true"),s.setAttribute("href",i),o.appendChild(s)}}function Jr(e){return Array.from(e.querySelectorAll(`link[${Or}]`))}function hc(e,t,n,r,o={}){let i=o.textNode?mc(e.document,o.textNode):null;if(o.textNode&&!i)throw new Error("Failed to prepare text segment editor");let s=i?.element??t,c=s.textContent??"",a=i?void 0:t.innerHTML,u=gc(s),l=!1,d=()=>{e.document.removeEventListener("pointerdown",g,!0),s.removeEventListener("keydown",k),s.removeEventListener("blur",E),s.removeEventListener("input",_),bc(s,u)},f=A=>{if(l)return;l=!0;let O=s.textContent??"";if(d(),A==="cancel"){i?.restore(c),i||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(i?.restore(O),A==="commit"&&O!==c){o.onCommitSnapshot?.({ref:n,initialText:c,...a!==void 0?{initialHtml:a}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:O}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function g(A){let O=A.target;O&&s.contains(O)||f("commit")}function k(A){if(A.key==="Escape"){A.preventDefault(),f("cancel");return}A.key==="Enter"&&(A.metaKey||A.ctrlKey)&&(A.preventDefault(),f("commit"))}function E(){f("commit")}function _(){r({kind:"text-edit-input",payload:{ref:n,hit:ye(t,n,void 0,"full")}})}return yc(s),e.document.addEventListener("pointerdown",g,!0),s.addEventListener("keydown",k),s.addEventListener("blur",E),s.addEventListener("input",_),Ic(s),Cc(s,e.document),d}function mc(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(o){t.nodeValue=o,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function gc(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 yc(e){Sc(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 bc(e,t){sn(e,"contenteditable",t.contentEditable),sn(e,"spellcheck",t.spellcheck),sn(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function Sc(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 sn(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function Ec(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 Ic(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function Cc(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function Qr(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function J(e){let t=Number(e);return Number.isFinite(t)?t:0}import vc from"node:http";import ot from"node:fs";import{createHash as ro,randomBytes as Rc,timingSafeEqual as xc}from"node:crypto";import Ee from"node:path";import{WebSocket as oo,WebSocketServer as Tc}from"ws";import{createPreviewSiteEditEngineRuntime as _c,openFileHistoryStore as Ac,resolveManagedPageTemplateComposition as Pc,scanSiteEditCompositionsFromFiles as kc}from"@vcp-dev/site-edit-engine";import{resolveNextAppRouteId as Nc,scanNextAppRouterRoutesFromFiles as wc}from"@vcp-dev/site-edit-engine/next-app-router";import{SiteEditSourceWatcher as Dc}from"@vcp-dev/site-edit-engine/source-watcher";var Mt=class{constructor(){this.tail=Promise.resolve()}run(t){let n=this.tail.then(t,t);return this.tail=n.then(()=>{},()=>{}),n}};import{SiteEditOperationRequestSchema as Oc,computeSiteEditCompositionKey as Oe}from"@vcp-dev/contracts";var Bc="127.0.0.1",Mc=30218,Fc="/__vcp/site-edit/bridge",io=6*1024*1024,Vc=io*2,qc=3e3,Zr=50,In=".vcp/current-snapshot.json",eo="__VCP_SITE_EDIT_BRIDGE_SERVERS__";function Pu(e){let t=co(e),n=uo(t),r=ao(),o=r.get(n);if(o)return o;let i=new Ft(t);r.set(n,i);try{i.start()}catch(s){throw r.delete(n),i.stop(),s}return i}function so(e,t,n={}){let r=new Ft(co(t),e,!1,n);return r.start({listen:!1}),r}var Ft=class{constructor(t,n=vc.createServer((i,s)=>{s.writeHead(404),s.end("VCP site edit bridge server")}),r=!0,o={}){this.options=t,this.server=n,this.closeHttpServerOnStop=r,this.dependencies=o,this.runtime=null,this.activeHistorySessionId=null,this.historySessionTransition=Promise.resolve(),this.mutationQueue=new Mt,this.eventListeners=new Set,this.routes=[],this.compositions=[],this.compositionFiles=[],this.compositionResolutionError=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{ot.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=Wc({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 Dc({projectRoot:this.options.projectRoot,watch_dirs:$c(this.options.runtime.watch_dirs),interval_ms:this.options.runtime.watch_interval_ms,debounce_ms:this.options.runtime.watch_debounce_ms??Zr,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=ao(),n=uo(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 o=(this.dependencies.createRuntime??_c)({...this.options.tenantId?{tenantId:this.options.tenantId}:{},siteId:this.options.siteId,snapshotId:this.options.snapshotId,projectRoot:this.options.projectRoot,compositions:this.compositions,onEvent:i=>{"version"in i&&typeof i.version=="number"&&this.recordRuntimeVersion(i.version,"composition"in i?i.composition:void 0);for(let s of this.eventListeners)s(i)},...t?{historyStore:t}:{},...this.getInitialDocumentVersions().length>0?{initialDocumentVersions:this.getInitialDocumentVersions()}:{}});this.runtime=o,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=zc(t.composition),o=this.getRuntime(),i=ve(r);await o.initializeComposition(i);let c=o.getDocument(i).data;await this.recordRuntimeVersion(c.version,r);let a=(await o.getHistoryStatus()).data;return{ok:!0,composition:r,data:{document:c,historyStatus:a}}}),getDocument:async t=>{let n=this.getRuntime(),r=ve(t);await n.initializeComposition(r);let o=n.getDocument(r);return await this.recordRuntimeVersion(o.data.version,t),{...o,composition:t}},getHistoryStatus:async t=>({...await this.getRuntime().getHistoryStatus(),composition:t}),getStyleContext:async t=>this.getRuntime().getStyleContext(ve(t)),getObjectEditContext:async(t,n,r)=>this.getRuntime().getObjectEditContext(t,ve(n),r),getClassNameSource:async(t,n)=>this.getRuntime().getClassNameSource(t,ve(n)),getSourceTree:async t=>this.getRuntime().getSourceTree(ve(t)),getSourceFile:async t=>this.getRuntime().getSourceFile({path:t.path,composition:ve(t.composition)}),resolveSourceLocation:async t=>this.getRuntime().resolveSourceLocation({key:t.key,composition:ve(t.composition)}),execute:(t,n)=>this.mutationQueue.run(async()=>{let r=await this.bindHistorySession(this.options.snapshotId);if(!r.ok)return Sn(r,t);let o=await this.getRuntime().executeOperation(t);return o.data?.resultVersion!==void 0&&await this.recordRuntimeVersion(o.data.resultVersion,o.composition),o}),undo:t=>this.mutationQueue.run(async()=>{let n=await this.bindHistorySession(this.options.snapshotId);if(!n.ok)return Sn(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 Sn(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??Ac)(Hc({root:this.options.historyRoot,siteId:this.options.siteId,snapshotId:this.options.snapshotId,editingSessionId:t}));if(!this.isStarted)return;let o=r.readDocumentVersion?await r.readDocumentVersion():0,i=this.compositions[0]?.context;if(i){let s=Oe(i);this.runtimeVersionFloors.set(s,Math.max(this.runtimeVersionFloors.get(s)??0,o))}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?Oe(n):null;r&&this.runtimeVersionFloors.set(r,Math.max(this.runtimeVersionFloors.get(r)??0,t));let o=this.activeHistoryStore;if(!o?.writeDocumentVersion)return Promise.resolve();let i=r?this.runtimeVersionFloors.get(r)??t:t;return this.versionPersistence=this.versionPersistence.then(()=>o.writeDocumentVersion(i)).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??Zr;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(Qc)&&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=ot.readFileSync(Ee.join(this.options.projectRoot,In),"utf8"),n=JSON.parse(t),r=typeof n.snapshot_id=="string"?n.snapshot_id:"";return!r||Cn(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 o=await this.bindHistorySession(t);if(!o.ok)throw new Error(`${o.code}: ${o.message}`)}else this.createRuntime()}catch(o){this.options.snapshotId=n,console.warn(`[vcp-site-edit] snapshot identity advance rolled back to ${n}: ${o instanceof Error?o.message:String(o)}`);return}let r=new Date().toISOString();for(let o of this.compositions){let i={type:"site-edit.snapshot.changed",siteId:this.options.siteId,composition:o.context,snapshotId:t,previousSnapshotId:n,at:r};for(let s of this.eventListeners)try{s(i)}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(o){console.warn(`[vcp-site-edit] onSnapshotIdChanged callback failed: ${o instanceof Error?o.message:String(o)}`)}}refreshCompositions(t=!1){try{let n=Kc(this.options.projectRoot),r=wc(n),o=r.length>0?r:(this.options.runtime.routes??[]).map(a=>({...a})),i=kc({files:n});if(i.length===0)throw new Error("No canonical App Router composition is indexed by the preview bridge.");let s=new Map(this.compositions.map(a=>[Oe(a.context),a])),c=new Map(i.map(a=>[Oe(a.context),a]));if(this.runtime){for(let[a,u]of s){let l=c.get(a);(!l||l.entryFile!==u.entryFile)&&this.runtime.unregisterComposition(ve(u.context))}for(let[a,u]of c){let l=s.get(a);(!l||l.entryFile!==u.entryFile)&&this.runtime.registerComposition(u.context,u.entryFile)}}return this.routes=o,this.compositions=i,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=Nc(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 o=Pc({selector:{routeId:n,...t.templateId?{templateId:t.templateId}:{}},files:this.compositionFiles,canonicalEntryFile:r.entryFile}),i=Oe(o.context);if(!this.compositions.some(s=>Oe(s.context)===i))throw new Error(`Composition is not registered by the preview bridge: ${i}`);return o}getInitialDocumentVersions(){return this.compositions.flatMap(t=>{let n=this.runtimeVersionFloors.get(Oe(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 co(e){return{tenantId:e.tenantId,siteId:e.siteId,snapshotId:e.snapshotId,projectRoot:Ee.resolve(e.projectRoot??process.cwd()),basePath:e.basePath??"",host:e.host??Bc,port:e.port??Mc,path:e.path??Fc,sessionKey:e.sessionKey??Jc(),historyRoot:e.historyRoot,allowedOrigins:e.allowedOrigins??[],runtime:e.runtime??{},onSnapshotIdChanged:e.onSnapshotIdChanged}}function $c(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 Kc(e){let t=[],n=["app","src/app",".vcp"],r=new Set([".git",".next",".turbo","coverage","dist","node_modules","output","snapshot-store"]),o=i=>{if(!ot.existsSync(i))return;let s;try{s=ot.readdirSync(i,{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;o(Ee.join(i,c.name));continue}if(!c.isFile())continue;let a=Ee.join(i,c.name),u="";try{u=ot.readFileSync(a,"utf8")}catch{}t.push({path:Ee.relative(e,a).replaceAll(Ee.sep,"/"),content:u})}};for(let i of n)o(Ee.join(e,i));return t.sort((i,s)=>i.path.localeCompare(s.path))}function zc(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 ve(e){return{routeId:e.routeId,...e.effectiveTemplateId?{templateId:e.effectiveTemplateId}:{}}}function Hc(e){return Ee.join(Ee.resolve(e.root),Cn(e.siteId),Cn(e.snapshotId),ro("sha256").update(e.editingSessionId).digest("hex").slice(0,32))}function Cn(e){return/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)&&e!=="."&&e!==".."?e:ro("sha256").update(e).digest("hex").slice(0,32)}function ao(){let e=globalThis;return e[eo]??=new Map,e[eo]}function uo(e){return`${e.projectRoot}:${e.host}:${e.port}:${e.path}:${e.historyRoot??""}`}function Sn(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 Wc(e){let t=new Tc({maxPayload:io,noServer:!0}),n=new WeakSet,r=i=>{new lt({socket:new vn(i),engine:e.engine,validateOperationRequest:s=>Oc.safeParse(s).success})},o=(i,s,c)=>{if(!Uc(i,e))return;let a=jc(i,e);if(!a){s.write(`HTTP/1.1 401 Unauthorized\r
42
42
  Connection: close\r
43
43
  \r
44
- `),s.destroy();return}a.authenticatedByHeader&&n.add(o),t.handleUpgrade(o,s,c,u=>{t.emit("connection",u,o)})};return e.server.on("upgrade",i),t.on("connection",(o,s)=>{if(n.has(s)){r(o);return}Nc(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 Cn=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===Qr.OPEN){if(this.socket.bufferedAmount+Buffer.byteLength(t,"utf8")>Ic){this.socket.close(1013,"bridge backpressure");return}this.socket.send(t)}}close(t,n){this.socket.close(t,n)}};function Ac(e,t){return new URL(e.url??"/","http://localhost").pathname===t.path}function Pc(e,t){if(new URL(e.url??"/","http://localhost").searchParams.has("vcp_bridge_key"))return null;let r=Sn(e.headers["x-vcp-site-edit-key"]),i=oo(r,t.sessionKey),o=Sn(e.headers.host),s=Sn(e.headers.origin);return o&&!kc(o,t.host,s)?null:s?Dc(s,o,t.allowedOrigins)?{authenticatedByHeader:i}:null:i?{authenticatedByHeader:!0}:null}function Nc(e,t,n){let r=setTimeout(()=>{e.close(1008,"bridge authentication timeout")},Cc),i,o=()=>{clearTimeout(r),e.off("message",i),e.off("close",o)},s=()=>{o(),e.close(1008,"bridge authentication failed")};i=c=>{try{let a=ce.parseMessage(c.toString());if(a.type!=="auth"||!oo(a.payload.key,t)){s();return}o(),e.readyState===Qr.OPEN&&e.send(ce.stringifyMessage({type:"auth-ok",payload:{ok:!0}})),n()}catch{s()}},e.on("message",i),e.on("close",o)}function oo(e,t){if(!e)return!1;let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&ac(n,r)}function kc(e,t,n){let r=Lr(e),i=Lr(t);return r===i||Xr(i)&&Xr(r)&&(!n||vn(n,e))||wc(i)&&(!n||vn(n,e))}function wc(e){return e==="0.0.0.0"||e==="::"}function Xr(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Dc(e,t,n){return n.includes(e)||(t?vn(e,t):!1)}function vn(e,t){try{return new URL(e).host===io(t)}catch{return!1}}function Lr(e){let t=io(e);return t.startsWith("[")?t.slice(1,t.indexOf("]")):t.split(":").length-1===1?t.split(":",1)[0]??"":t}function io(e){return e.trim().toLowerCase()}function Sn(e){return Array.isArray(e)?e[0]:e}function Bc(){return cc(32).toString("base64url")}function Oc(e){let t=e.replaceAll("\\","/");return t===En||t.endsWith(`/${En}`)}import _n from"node:http";import{existsSync as ze,readFileSync as $e}from"node:fs";import{randomUUID as Mc}from"node:crypto";import{createRequire as uo}from"node:module";import{Socket as so}from"node:net";import it from"node:path";import{basename as lo,dirname as st,join as ct}from"node:path";import{fileURLToPath as po}from"node:url";var Fc="next",ho="127.0.0.1",Vc=3e3,Kt="/__vcp/site-edit/bridge",fo="/__vcp/site-edit/health",qc="probe",Kc="render",co="/_error",$t="/__vcp/site-edit/client/",$c=`${$t}auto-bootstrap.js`,mo='data-vcp-site-edit-bootstrap="true"',zc=["next.config.ts","next.config.mts","next.config.cts","next.config.js","next.config.mjs","next.config.cjs"],Wc="@vcp-dev/site-edit-engine/webpack-loader",Hc=/@vcp\/site-edit-engine\/(?:webpack-loader|site-edit-instrumentation-loader)/,Uc=[/\bconfig\.webpack\s*=/,/\bwebpack\s*\([^)]*\)\s*\{/,/\bwebpack\s*:\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)?\s*=>/,/\bwebpack\s*:\s*(?:async\s+)?function\b/],jc=new Set(["auto-bootstrap.js","client.js","composition-key.js","designer-trace.js","document-codec.js","protocol.js","window-message.js"]);async function Su(e={},t={}){let n=t.process??process,r=t.createServer??_n.createServer,i=t.attachBridgeServer??eo,o=t.loadNext??Ca,s=it.resolve(e.projectRoot??process.cwd()),c=e.host??ho,a=e.port??Ta(n.env.PORT)??Vc,u=e.bridgePath??Kt,l=Zc(u),d=ya(),h=e.basePath??n.env.VCP_SITE_PREVIEW_BASE_PATH??"/",g=(e.tenantId??n.env.VCP_TENANT_ID)?.trim()||void 0,N=await o(s),E=Gc(s),_=N({dev:!0,dir:s,hostname:c,port:a,...Yc(E)}),A=_.getRequestHandler(),B=e.siteId??n.env.VCP_SITE_ID??"018f6f4d-a9b8-7120-8000-000000000120",q=e.snapshotId??n.env.VCP_SNAPSHOT_ID??xa(s),b=e.historyRoot??n.env.VCP_SITE_EDIT_HISTORY_ROOT,ie=b?.trim()?it.resolve(b):void 0,z=null,te={launchId:Mc(),pid:process.pid,snapshotId:q},W=r((D,H)=>{sa({basePath:h,bridgePath:u,bridgeHealthPath:l,bridgeSessionKey:d,getBridgeHealth:()=>z?.getHealth()??da(u),launch:te,runRenderProbe:()=>aa(_),handle:A,request:D,response:H}).catch(G=>{console.error(G),H.headersSent||(H.statusCode=500),H.end("site edit preview request failed")})}),Q=null,U=null,x=()=>U||(qt(()=>n.off("SIGINT",P)),qt(()=>n.off("SIGTERM",P)),qt(()=>Q?.()),Q=null,qt(()=>z?.stop()),z=null,U=Promise.allSettled([Aa(W),Pa(()=>_.close())]).then(()=>{}),U),P=()=>{x()};try{return await _.prepare(),z=i(W,{...g?{tenantId:g}:{},siteId:B,snapshotId:q,projectRoot:s,basePath:h,host:c,port:a,path:u,sessionKey:d,...ie?{historyRoot:ie}:{},onSnapshotIdChanged:D=>{te.snapshotId=D}}),Q=Jc({server:W,bridgePath:u,handleUpgrade:_.getUpgradeHandler()}),n.on("SIGINT",P),n.on("SIGTERM",P),await _a(W,a,c),{bundler:E,close:x,host:c,port:Na(W,a),server:W}}catch(D){throw await x(),D}}function Gc(e){let t=Xc(e);return t&&Lc(t)?"webpack":"turbopack"}function Yc(e){return e==="webpack"?{webpack:!0}:{turbopack:!0}}function Xc(e){for(let t of zc){let n=ct(e,t);if(ze(n))return $e(n,"utf8")}return null}function Lc(e){return e.includes(Wc)?!0:Hc.test(e)&&Uc.some(t=>t.test(e))}function Jc(e){let t=(n,r,i)=>{Qc(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 Qc(e,t){return new URL(e??"/","http://localhost").pathname===t}function Zc(e=Kt){if(e===Kt)return fo;let t=(e.startsWith("/")?e:`/${e}`).replace(/\/+$/,"");return t.endsWith("/bridge")?`${t.slice(0,-7)}/health`:t?`${t}/health`:"/health"}function ea(e){let t=JSON.stringify({basePath:e.basePath,wsPath:e.bridgePath,bridge_session_key:e.bridgeSessionKey,defer_initial_sync:!0,runtime_versions:e.runtimeVersions??ta()});return`<script type="module" ${mo}>import { startSiteEditAutoBootstrap } from ${JSON.stringify($c)};void startSiteEditAutoBootstrap(window, ${t}).catch(() => undefined);</script>`}function ta(){return{bridge:Rn("@vcp-dev/site-edit-bridge"),contracts:Rn("@vcp-dev/contracts"),engine:Rn("@vcp-dev/site-edit-engine")}}function Rn(e){let t=uo(import.meta.url);try{let n=t.resolve(e),r=na(n,e);if(!r)return;let i=JSON.parse($e(r,"utf8"));return typeof i.version=="string"?i.version:void 0}catch{return}}function na(e,t){let n=it.parse(e).root,r=st(e);for(;r&&r!==n;){let i=ct(r,"package.json");if(ze(i))try{if(JSON.parse($e(i,"utf8")).name===t)return i}catch{return}r=st(r)}}function ra(e,t){if(e.includes(mo))return e;let n=ea(t),r=/<\/body\s*>/i.exec(e);return r?`${e.slice(0,r.index)}${n}${e.slice(r.index)}`:`${e}${n}`}function Eu(e,t=st(po(import.meta.url)),n=ze){return go(e,t,n)?.path??null}function go(e,t=st(po(import.meta.url)),n=ze){let r=new URL(e??"/","http://localhost").pathname;if(!r.startsWith($t))return null;let i=r.slice($t.length);if(!jc.has(i))return null;let o=An(va(t),i);if(lo(t)!=="src")return{path:o,requiresTranspile:!1};let s=An(t,i.replace(/\.js$/,".ts"));return n(s)?{path:s,requiresTranspile:!0}:{path:o,requiresTranspile:!1}}async function oa(e,t){let n=go(e.url);if(!n)return!1;if(!ze(n.path))return t.writeHead(404),t.end("site edit client asset not found"),!0;let r=n.requiresTranspile?await ia($e(n.path,"utf8")):$e(n.path);return t.writeHead(200,{"cache-control":"no-store","content-type":"text/javascript; charset=utf-8"}),t.end(r),!0}async function ia(e){let t=await import("typescript");return t.transpileModule(e,{compilerOptions:{module:t.ModuleKind.ES2022,target:t.ScriptTarget.ES2022}}).outputText}async function sa({basePath:e,bridgePath:t,bridgeHealthPath:n,bridgeSessionKey:r,getBridgeHealth:i,launch:o,runRenderProbe:s,handle:c,request:a,response:u}){if(await la(a,u,n,i,o,s)||await oa(a,u))return;let l=pa(a),d=ha(a),h=l||d?ga(u,{basePath:e,bridgePath:t,bridgeSessionKey:r,patchNextDevChunk:d}):()=>{};try{await c(a,u)}catch(g){throw h(),g}}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 aa(e){let t=new _n.IncomingMessage(new so);t.method="GET",t.url=co,t.headers={host:ho};let n=new _n.ServerResponse(t);n.assignSocket(new so);try{return await e.renderToHTML(t,n,co,{}),{verdict:"ok"}}catch(r){return ca(r)}finally{try{let r=n.socket;r&&(n.detachSocket(r),r.destroy())}catch{}}}function ua(e){return new URL(e??"/","http://localhost").searchParams.get(qc)===Kc}async function la(e,t,n,r,i,o){if(e.method!=="GET"||new URL(e.url??"/","http://localhost").pathname!==n)return!1;let c=r(),a=ua(e.url)?await o():void 0,u={...c,launch:i,...a?{render:a}:{}};return t.writeHead(c.ok?200:503,{"cache-control":"no-store","content-type":"application/json; charset=utf-8"}),t.end(JSON.stringify(u)),!0}function da(e){return{ok:!1,bridgePath:e,runtimeReady:!1,routesIndexed:0,sessionRequired:!0}}function pa(e){return fa(e)?(e.headers["accept-encoding"]="identity",!0):!1}function ha(e){return ma(e)?(e.headers["accept-encoding"]="identity",!0):!1}function fa(e){if(e.method!=="GET")return!1;let t=new URL(e.url??"/","http://localhost").pathname;if(t.startsWith("/_next/")||t.startsWith($t)||t===Kt||t===fo)return!1;let n=e.headers.accept??"";return n===""||n.includes("text/html")}function ma(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 ga(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 a=()=>{if(t.patchNextDevChunk||c)return!1;let u=Buffer.concat(n);if(!/<body\b[^>]*>/iu.test(u.toString("utf8")))return!1;let l=ao(e,u,t);return l!==u&&!e.headersSent&&e.removeHeader("content-length"),o(l),n.length=0,c=!0,!0};return r.write=(u,l,d)=>c?(u!==void 0&&o(xn(u,Tn(l))),Vt(l),Vt(d),!0):(u!==void 0&&(n.push(xn(u,Tn(l))),a()),Vt(l),Vt(d),!0),r.end=(u,l,d)=>{let h=typeof u=="function"?void 0:u;if(c)return r.write=o,r.end=s,r.flushHeaders=i,h===void 0?typeof u=="function"?s(u):typeof l=="function"?s(l):typeof d=="function"?s(d):s():typeof l=="function"?s(h,l):typeof d=="function"?s(h,l,d):s(h,l);h!==void 0&&n.push(xn(h,Tn(l))),r.write=o,r.end=s,r.flushHeaders=i;let g=Buffer.concat(n),N=ao(e,g,t);N!==g&&!e.headersSent&&e.removeHeader("content-length");let E=typeof u=="function"?u:typeof l=="function"?l:typeof d=="function"?d:void 0;return E?s(N,E):s(N)},()=>{r.write=o,r.end=s,r.flushHeaders=i}}function ao(e,t,n){if(ba(e,t))return Buffer.from(ra(t.toString("utf8"),n));if(n.patchNextDevChunk&&Sa(e)){let r=t.toString("utf8"),i=Ea(r);if(i!==r)return Buffer.from(i)}return t}function ya(){let e=new Uint8Array(32);return globalThis.crypto.getRandomValues(e),Buffer.from(e).toString("base64url")}function ba(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 Sa(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 Ea(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(`
44
+ `),s.destroy();return}a.authenticatedByHeader&&n.add(i),t.handleUpgrade(i,s,c,u=>{t.emit("connection",u,i)})};return e.server.on("upgrade",o),t.on("connection",(i,s)=>{if(n.has(s)){r(i);return}Gc(i,e.sessionKey,()=>{r(i)})}),t.stop=()=>{e.server.off("upgrade",o);for(let i of t.clients)i.close(1001,"bridge stopped");t.close()},t}var vn=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===oo.OPEN){if(this.socket.bufferedAmount+Buffer.byteLength(t,"utf8")>Vc){this.socket.close(1013,"bridge backpressure");return}this.socket.send(t)}}close(t,n){this.socket.close(t,n)}};function Uc(e,t){return new URL(e.url??"/","http://localhost").pathname===t.path}function jc(e,t){if(new URL(e.url??"/","http://localhost").searchParams.has("vcp_bridge_key"))return null;let r=En(e.headers["x-vcp-site-edit-key"]),o=lo(r,t.sessionKey),i=En(e.headers.host),s=En(e.headers.origin);return i&&!Yc(i,t.host,s)?null:s?Lc(s,i,t.allowedOrigins)?{authenticatedByHeader:o}:null:o?{authenticatedByHeader:!0}:null}function Gc(e,t,n){let r=setTimeout(()=>{e.close(1008,"bridge authentication timeout")},qc),o,i=()=>{clearTimeout(r),e.off("message",o),e.off("close",i)},s=()=>{i(),e.close(1008,"bridge authentication failed")};o=c=>{try{let a=ce.parseMessage(c.toString());if(a.type!=="auth"||!lo(a.payload.key,t)){s();return}i(),e.readyState===oo.OPEN&&e.send(ce.stringifyMessage({type:"auth-ok",payload:{ok:!0}})),n()}catch{s()}},e.on("message",o),e.on("close",i)}function lo(e,t){if(!e)return!1;let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&xc(n,r)}function Yc(e,t,n){let r=no(e),o=no(t);return r===o||to(o)&&to(r)&&(!n||Rn(n,e))||Xc(o)&&(!n||Rn(n,e))}function Xc(e){return e==="0.0.0.0"||e==="::"}function to(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Lc(e,t,n){return n.includes(e)||(t?Rn(e,t):!1)}function Rn(e,t){try{return new URL(e).host===po(t)}catch{return!1}}function no(e){let t=po(e);return t.startsWith("[")?t.slice(1,t.indexOf("]")):t.split(":").length-1===1?t.split(":",1)[0]??"":t}function po(e){return e.trim().toLowerCase()}function En(e){return Array.isArray(e)?e[0]:e}function Jc(){return Rc(32).toString("base64url")}function Qc(e){let t=e.replaceAll("\\","/");return t===In||t.endsWith(`/${In}`)}import An from"node:http";import{existsSync as ze,readFileSync as Ke}from"node:fs";import{randomUUID as Zc}from"node:crypto";import{createRequire as go}from"node:module";import{Socket as fo}from"node:net";import it from"node:path";import{basename as yo,dirname as st,join as ct}from"node:path";import{fileURLToPath as bo}from"node:url";var ea="next",So="127.0.0.1",ta=3e3,$t="/__vcp/site-edit/bridge",Eo="/__vcp/site-edit/health",na="probe",ra="render",ho="/_error",Kt="/__vcp/site-edit/client/",oa=`${Kt}auto-bootstrap.js`,Io='data-vcp-site-edit-bootstrap="true"',ia=["next.config.ts","next.config.mts","next.config.cts","next.config.js","next.config.mjs","next.config.cjs"],sa="@vcp-dev/site-edit-engine/webpack-loader",ca=/@vcp\/site-edit-engine\/(?:webpack-loader|site-edit-instrumentation-loader)/,aa=[/\bconfig\.webpack\s*=/,/\bwebpack\s*\([^)]*\)\s*\{/,/\bwebpack\s*:\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)?\s*=>/,/\bwebpack\s*:\s*(?:async\s+)?function\b/],ua=new Set(["auto-bootstrap.js","client.js","composition-key.js","designer-trace.js","document-codec.js","protocol.js","window-message.js"]);async function $u(e={},t={}){let n=t.process??process,r=t.createServer??An.createServer,o=t.attachBridgeServer??so,i=t.loadNext??qa,s=it.resolve(e.projectRoot??process.cwd()),c=e.host??So,a=e.port??Ha(n.env.PORT)??ta,u=e.bridgePath??$t,l=ga(u),d=Oa(),f=e.basePath??n.env.VCP_SITE_PREVIEW_BASE_PATH??"/",g=(e.tenantId??n.env.VCP_TENANT_ID)?.trim()||void 0,k=await i(s),E=la(s),_=k({dev:!0,dir:s,hostname:c,port:a,...da(E)}),A=_.getRequestHandler(),O=e.siteId??n.env.VCP_SITE_ID??"018f6f4d-a9b8-7120-8000-000000000120",q=e.snapshotId??n.env.VCP_SNAPSHOT_ID??za(s),b=e.historyRoot??n.env.VCP_SITE_EDIT_HISTORY_ROOT,ie=b?.trim()?it.resolve(b):void 0,z=null,te={launchId:Zc(),pid:process.pid,snapshotId:q},H=r((D,W)=>{va({basePath:f,bridgePath:u,bridgeHealthPath:l,bridgeSessionKey:d,getBridgeHealth:()=>z?.getHealth()??Aa(u),launch:te,runRenderProbe:()=>xa(_),handle:A,request:D,response:W}).catch(Y=>{console.error(Y),W.headersSent||(W.statusCode=500),W.end("site edit preview request failed")})}),Q=null,U=null,x=()=>U||(qt(()=>n.off("SIGINT",P)),qt(()=>n.off("SIGTERM",P)),qt(()=>Q?.()),Q=null,qt(()=>z?.stop()),z=null,U=Promise.allSettled([Ua(H),ja(()=>_.close())]).then(()=>{}),U),P=()=>{x()};try{return await _.prepare(),z=o(H,{...g?{tenantId:g}:{},siteId:O,snapshotId:q,projectRoot:s,basePath:f,host:c,port:a,path:u,sessionKey:d,...ie?{historyRoot:ie}:{},onSnapshotIdChanged:D=>{te.snapshotId=D}}),Q=ha({server:H,bridgePath:u,handleUpgrade:_.getUpgradeHandler()}),n.on("SIGINT",P),n.on("SIGTERM",P),await Wa(H,a,c),{bundler:E,close:x,host:c,port:Ga(H,a),server:H}}catch(D){throw await x(),D}}function la(e){let t=pa(e);return t&&fa(t)?"webpack":"turbopack"}function da(e){return e==="webpack"?{webpack:!0}:{turbopack:!0}}function pa(e){for(let t of ia){let n=ct(e,t);if(ze(n))return Ke(n,"utf8")}return null}function fa(e){return e.includes(sa)?!0:ca.test(e)&&aa.some(t=>t.test(e))}function ha(e){let t=(n,r,o)=>{ma(n.url,e.bridgePath)||e.handleUpgrade(n,r,o).catch(i=>{console.error(i),r.destroyed||r.destroy()})};return e.server.on("upgrade",t),()=>e.server.off("upgrade",t)}function ma(e,t){return new URL(e??"/","http://localhost").pathname===t}function ga(e=$t){if(e===$t)return Eo;let t=(e.startsWith("/")?e:`/${e}`).replace(/\/+$/,"");return t.endsWith("/bridge")?`${t.slice(0,-7)}/health`:t?`${t}/health`:"/health"}function ya(e){let t=JSON.stringify({basePath:e.basePath,wsPath:e.bridgePath,bridge_session_key:e.bridgeSessionKey,defer_initial_sync:!0,runtime_versions:e.runtimeVersions??ba()});return`<script type="module" ${Io}>import { startSiteEditAutoBootstrap } from ${JSON.stringify(oa)};void startSiteEditAutoBootstrap(window, ${t}).catch(() => undefined);</script>`}function ba(){return{bridge:xn("@vcp-dev/site-edit-bridge"),contracts:xn("@vcp-dev/contracts"),engine:xn("@vcp-dev/site-edit-engine")}}function xn(e){let t=go(import.meta.url);try{let n=t.resolve(e),r=Sa(n,e);if(!r)return;let o=JSON.parse(Ke(r,"utf8"));return typeof o.version=="string"?o.version:void 0}catch{return}}function Sa(e,t){let n=it.parse(e).root,r=st(e);for(;r&&r!==n;){let o=ct(r,"package.json");if(ze(o))try{if(JSON.parse(Ke(o,"utf8")).name===t)return o}catch{return}r=st(r)}}function Ea(e,t){if(e.includes(Io))return e;let n=ya(t),r=/<\/body\s*>/i.exec(e);return r?`${e.slice(0,r.index)}${n}${e.slice(r.index)}`:`${e}${n}`}function Ku(e,t=st(bo(import.meta.url)),n=ze){return Co(e,t,n)?.path??null}function Co(e,t=st(bo(import.meta.url)),n=ze){let r=new URL(e??"/","http://localhost").pathname;if(!r.startsWith(Kt))return null;let o=r.slice(Kt.length);if(!ua.has(o))return null;let i=Pn($a(t),o);if(yo(t)!=="src")return{path:i,requiresTranspile:!1};let s=Pn(t,o.replace(/\.js$/,".ts"));return n(s)?{path:s,requiresTranspile:!0}:{path:i,requiresTranspile:!1}}async function Ia(e,t){let n=Co(e.url);if(!n)return!1;if(!ze(n.path))return t.writeHead(404),t.end("site edit client asset not found"),!0;let r=n.requiresTranspile?await Ca(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 Ca(e){let t=await import("typescript");return t.transpileModule(e,{compilerOptions:{module:t.ModuleKind.ES2022,target:t.ScriptTarget.ES2022}}).outputText}async function va({basePath:e,bridgePath:t,bridgeHealthPath:n,bridgeSessionKey:r,getBridgeHealth:o,launch:i,runRenderProbe:s,handle:c,request:a,response:u}){if(await _a(a,u,n,o,i,s)||await Ia(a,u))return;let l=Pa(a),d=ka(a),f=l||d?Da(u,{basePath:e,bridgePath:t,bridgeSessionKey:r,patchNextDevChunk:d}):()=>{};try{await c(a,u)}catch(g){throw f(),g}}function Ra(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 xa(e){let t=new An.IncomingMessage(new fo);t.method="GET",t.url=ho,t.headers={host:So};let n=new An.ServerResponse(t);n.assignSocket(new fo);try{return await e.renderToHTML(t,n,ho,{}),{verdict:"ok"}}catch(r){return Ra(r)}finally{try{let r=n.socket;r&&(n.detachSocket(r),r.destroy())}catch{}}}function Ta(e){return new URL(e??"/","http://localhost").searchParams.get(na)===ra}async function _a(e,t,n,r,o,i){if(e.method!=="GET"||new URL(e.url??"/","http://localhost").pathname!==n)return!1;let c=r(),a=Ta(e.url)?await i():void 0,u={...c,launch:o,...a?{render:a}:{}};return t.writeHead(c.ok?200:503,{"cache-control":"no-store","content-type":"application/json; charset=utf-8"}),t.end(JSON.stringify(u)),!0}function Aa(e){return{ok:!1,bridgePath:e,runtimeReady:!1,routesIndexed:0,sessionRequired:!0}}function Pa(e){return Na(e)?(e.headers["accept-encoding"]="identity",!0):!1}function ka(e){return wa(e)?(e.headers["accept-encoding"]="identity",!0):!1}function Na(e){if(e.method!=="GET")return!1;let t=new URL(e.url??"/","http://localhost").pathname;if(t.startsWith("/_next/")||t.startsWith(Kt)||t===$t||t===Eo)return!1;let n=e.headers.accept??"";return n===""||n.includes("text/html")}function wa(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 Da(e,t){let n=[],r=e,o=r.flushHeaders.bind(e),i=r.write.bind(e),s=r.end.bind(e),c=!1;r.flushHeaders=()=>{};let a=()=>{if(t.patchNextDevChunk||c)return!1;let u=Buffer.concat(n);if(!/<body\b[^>]*>/iu.test(u.toString("utf8")))return!1;let l=mo(e,u,t);return l!==u&&!e.headersSent&&e.removeHeader("content-length"),i(l),n.length=0,c=!0,!0};return r.write=(u,l,d)=>c?(u!==void 0&&i(Tn(u,_n(l))),Vt(l),Vt(d),!0):(u!==void 0&&(n.push(Tn(u,_n(l))),a()),Vt(l),Vt(d),!0),r.end=(u,l,d)=>{let f=typeof u=="function"?void 0:u;if(c)return r.write=i,r.end=s,r.flushHeaders=o,f===void 0?typeof u=="function"?s(u):typeof l=="function"?s(l):typeof d=="function"?s(d):s():typeof l=="function"?s(f,l):typeof d=="function"?s(f,l,d):s(f,l);f!==void 0&&n.push(Tn(f,_n(l))),r.write=i,r.end=s,r.flushHeaders=o;let g=Buffer.concat(n),k=mo(e,g,t);k!==g&&!e.headersSent&&e.removeHeader("content-length");let E=typeof u=="function"?u:typeof l=="function"?l:typeof d=="function"?d:void 0;return E?s(k,E):s(k)},()=>{r.write=i,r.end=s,r.flushHeaders=o}}function mo(e,t,n){if(Ba(e,t))return Buffer.from(Ea(t.toString("utf8"),n));if(n.patchNextDevChunk&&Ma(e)){let r=t.toString("utf8"),o=Fa(r);if(o!==r)return Buffer.from(o)}return t}function Oa(){let e=new Uint8Array(32);return globalThis.crypto.getRandomValues(e),Buffer.from(e).toString("base64url")}function Ba(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 Ma(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 Fa(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(`
45
45
  `),["unstable_allowPartialStream: true,"," debugChannel,"," startTime: 0"].join(`
46
- `)],[["findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,"," debugChannel,"," startTime: 0"].join("\\n"),["unstable_allowPartialStream: true,"," debugChannel,"," startTime: 0"].join("\\n")],["debugChannel: createDebugChannel && createDebugChannel(requestHeaders)","debugChannel: undefined"],["debugChannel: createDebugChannel && createDebugChannel(headers)","debugChannel: undefined"]].reduce((n,[r,i])=>Ia(n,r,i),e)}function Ia(e,t,n){if(n.length>t.length)throw new Error("Replacement must not be longer than the search string.");return e.replaceAll(t,n.padEnd(t.length," "))}function xn(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):Buffer.from(String(e),t)}function Tn(e){return typeof e=="string"?e:void 0}function Vt(e){typeof e=="function"&&e()}async function Ca(e){let n=uo(ct(e,"package.json"))(Fc);return n.default??n}function va(e){return lo(e)!=="src"?e:An(Ra(e),"dist")}function Ra(e){return yo(e)?it.posix.dirname(e):st(e)}function An(e,t){return yo(e)?it.posix.join(e,t):ct(e,t)}function yo(e){return e.includes("/")&&!e.includes("\\")}function xa(e){let t=ct(e,".vcp/current-snapshot.json");if(!ze(t))return"sandbox_worktree";try{let n=JSON.parse($e(t,"utf8"));return typeof n.snapshot_id=="string"&&n.snapshot_id?n.snapshot_id:typeof n.snapshotId=="string"&&n.snapshotId?n.snapshotId:"sandbox_worktree"}catch{return"sandbox_worktree"}}function Ta(e){if(!e)return null;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0&&t<=65535?t:null}function _a(e,t,n){return new Promise((r,i)=>{e.once("error",i),e.listen(t,n,()=>{e.off("error",i),r()})})}function Aa(e){return new Promise(t=>{e.close(()=>t())})}function qt(e){try{e()}catch{}}function Pa(e){try{return e()}catch(t){return Promise.reject(t)}}function Na(e,t){let n=e.address();return typeof n=="object"&&n?n.port:t}export{Ic as SITE_EDIT_BRIDGE_MAX_BUFFERED_BYTES,Zr as SITE_EDIT_BRIDGE_MAX_PAYLOAD_BYTES,Ze as SITE_EDIT_COMPOSITION_MARKER_INVALID,Da as SITE_EDIT_COMPOSITION_REINITIALIZE_REQUIRED,_r as SITE_EDIT_COMPOSITION_RENDER_MISMATCH,He as SITE_EDIT_COMPOSITION_SESSION_MISMATCH,Fe as SITE_EDIT_COMPOSITION_SESSION_REQUIRED,tr as SITE_EDIT_FRAME_ANNOUNCE_CHANNEL,er as SITE_EDIT_FRAME_RUNTIME_CHANNEL,en as SITE_EDIT_FRAME_RUNTIME_LAYOUT_SNAPSHOT_VERSION,Xe as SITE_EDIT_FRAME_RUNTIME_RESIZE_VISUAL_VERSION,Ye as SITE_EDIT_FRAME_RUNTIME_SELECTION_VISUAL_VERSION,nr as SITE_EDIT_FRAME_SECTION_GAP_RADIUS_PX,yt as SITE_EDIT_WINDOW_MESSAGE_NAMESPACE,Ft as SiteEditBridgeServer,lt as SiteEditBridgeSocketServer,ce as SiteEditBridgeTransport,pt as SiteEditWebSocketClient,Dt as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_ATTRIBUTE,Tr as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_SELECTOR,ln as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_VALUE,pn as VCP_PAGE_TEMPLATE_EFFECTIVE_TEMPLATE_ID_ATTRIBUTE,dn as VCP_PAGE_TEMPLATE_ROUTE_ID_ATTRIBUTE,cn as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,sn as VCP_SITE_EDIT_ROUTE_READY_EVENT,Ln as VCP_WINDOW_MESSAGE_SOURCE,Jn as VCP_WINDOW_MESSAGE_VERSION,Jc as attachNextDevUpgradeHandler,eo as attachSiteEditBridgeServer,_c as attachSiteEditWebSocketServer,ca as classifySiteEditRenderProbeError,ea as createSiteEditAutoBootstrapHtmlSnippet,Yn as createSiteEditBridge,rr as createSiteEditFrameAnnounceMessage,Je as createSiteEditFrameRuntimeMessage,Qn as createVcpWindowMessageEnvelope,$n as decodeRenderDocument,Kn as encodeRenderDocument,au as ensureSiteEditBridgeServerStarted,ra as injectSiteEditAutoBootstrap,Io as isCompactRenderDocument,Bo as isDesignerTraceEnabled,za as isSiteEditFrameAnnounceMessage,ir as isSiteEditFrameRuntimeLayoutSnapshot,or as isSiteEditFrameRuntimeMessage,ua as isSiteEditRenderProbeRequested,Zn as isVcpWindowMessageEnvelope,Ea as patchNextFirefoxDevChunk,ha as prepareFirefoxNextDevChunkPatchRequest,pa as prepareSiteEditHtmlInjectionRequest,Ii as readVcpPageTemplateContextMarker,Ci as resolveBrowserCompositionContext,Zc as resolveSiteEditBridgeHealthPath,go as resolveSiteEditClientAsset,Eu as resolveSiteEditClientAssetPath,Gc as resolveSiteEditNextDevBundler,xt as resolveSiteEditRouteId,xi as resolveSiteEditWebSocketUrl,aa as runSiteEditRenderProbe,Oo as sanitizeTracePayload,Ya as startSiteEditAutoBootstrap,wi as startSiteEditFrameRuntime,Su as startSiteEditNextDevServer,Ei as syncRuntimeSiteBlockIds,Re as traceDesignerEvent,ia as transpileSiteEditClientSource};
46
+ `)],[["findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,"," debugChannel,"," startTime: 0"].join("\\n"),["unstable_allowPartialStream: true,"," debugChannel,"," startTime: 0"].join("\\n")],["debugChannel: createDebugChannel && createDebugChannel(requestHeaders)","debugChannel: undefined"],["debugChannel: createDebugChannel && createDebugChannel(headers)","debugChannel: undefined"]].reduce((n,[r,o])=>Va(n,r,o),e)}function Va(e,t,n){if(n.length>t.length)throw new Error("Replacement must not be longer than the search string.");return e.replaceAll(t,n.padEnd(t.length," "))}function Tn(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):Buffer.from(String(e),t)}function _n(e){return typeof e=="string"?e:void 0}function Vt(e){typeof e=="function"&&e()}async function qa(e){let n=go(ct(e,"package.json"))(ea);return n.default??n}function $a(e){return yo(e)!=="src"?e:Pn(Ka(e),"dist")}function Ka(e){return vo(e)?it.posix.dirname(e):st(e)}function Pn(e,t){return vo(e)?it.posix.join(e,t):ct(e,t)}function vo(e){return e.includes("/")&&!e.includes("\\")}function za(e){let t=ct(e,".vcp/current-snapshot.json");if(!ze(t))return"sandbox_worktree";try{let n=JSON.parse(Ke(t,"utf8"));return typeof n.snapshot_id=="string"&&n.snapshot_id?n.snapshot_id:typeof n.snapshotId=="string"&&n.snapshotId?n.snapshotId:"sandbox_worktree"}catch{return"sandbox_worktree"}}function Ha(e){if(!e)return null;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0&&t<=65535?t:null}function Wa(e,t,n){return new Promise((r,o)=>{e.once("error",o),e.listen(t,n,()=>{e.off("error",o),r()})})}function Ua(e){return new Promise(t=>{e.close(()=>t())})}function qt(e){try{e()}catch{}}function ja(e){try{return e()}catch(t){return Promise.reject(t)}}function Ga(e,t){let n=e.address();return typeof n=="object"&&n?n.port:t}export{Vc as SITE_EDIT_BRIDGE_MAX_BUFFERED_BYTES,io as SITE_EDIT_BRIDGE_MAX_PAYLOAD_BYTES,Ze as SITE_EDIT_COMPOSITION_MARKER_INVALID,La as SITE_EDIT_COMPOSITION_REINITIALIZE_REQUIRED,Dr as SITE_EDIT_COMPOSITION_RENDER_MISMATCH,We as SITE_EDIT_COMPOSITION_SESSION_MISMATCH,Fe as SITE_EDIT_COMPOSITION_SESSION_REQUIRED,cr as SITE_EDIT_FRAME_ANNOUNCE_CHANNEL,sr as SITE_EDIT_FRAME_RUNTIME_CHANNEL,tn as SITE_EDIT_FRAME_RUNTIME_LAYOUT_SNAPSHOT_VERSION,Xe as SITE_EDIT_FRAME_RUNTIME_RESIZE_VISUAL_VERSION,Ye as SITE_EDIT_FRAME_RUNTIME_SELECTION_VISUAL_VERSION,ar as SITE_EDIT_FRAME_SECTION_GAP_RADIUS_PX,yt as SITE_EDIT_WINDOW_MESSAGE_NAMESPACE,Ft as SiteEditBridgeServer,lt as SiteEditBridgeSocketServer,ce as SiteEditBridgeTransport,pt as SiteEditWebSocketClient,Dt as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_ATTRIBUTE,wr as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_SELECTOR,dn as VCP_PAGE_TEMPLATE_CONTEXT_MARKER_VALUE,fn as VCP_PAGE_TEMPLATE_EFFECTIVE_TEMPLATE_ID_ATTRIBUTE,pn as VCP_PAGE_TEMPLATE_ROUTE_ID_ATTRIBUTE,an as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,cn as VCP_SITE_EDIT_ROUTE_READY_EVENT,nr as VCP_WINDOW_MESSAGE_SOURCE,rr as VCP_WINDOW_MESSAGE_VERSION,ha as attachNextDevUpgradeHandler,so as attachSiteEditBridgeServer,Wc as attachSiteEditWebSocketServer,Ra as classifySiteEditRenderProbeError,ya as createSiteEditAutoBootstrapHtmlSnippet,Xn as createSiteEditBridge,ur as createSiteEditFrameAnnounceMessage,Je as createSiteEditFrameRuntimeMessage,or as createVcpWindowMessageEnvelope,zn as decodeRenderDocument,Kn as encodeRenderDocument,Pu as ensureSiteEditBridgeServerStarted,tr as getPropertyPreviewDomAttributeName,Ea as injectSiteEditAutoBootstrap,_o as isCompactRenderDocument,Ko as isDesignerTraceEnabled,au as isSiteEditFrameAnnounceMessage,dr as isSiteEditFrameRuntimeLayoutSnapshot,lr as isSiteEditFrameRuntimeMessage,Ta as isSiteEditRenderProbeRequested,ir as isVcpWindowMessageEnvelope,Fa as patchNextFirefoxDevChunk,Zo as planPropertyPreview,ka as prepareFirefoxNextDevChunkPatchRequest,Pa as prepareSiteEditHtmlInjectionRequest,Vi as readVcpPageTemplateContextMarker,qi as resolveBrowserCompositionContext,ga as resolveSiteEditBridgeHealthPath,Co as resolveSiteEditClientAsset,Ku as resolveSiteEditClientAssetPath,la as resolveSiteEditNextDevBundler,xt as resolveSiteEditRouteId,zi as resolveSiteEditWebSocketUrl,xa as runSiteEditRenderProbe,zo as sanitizeTracePayload,mu as startSiteEditAutoBootstrap,Xi as startSiteEditFrameRuntime,$u as startSiteEditNextDevServer,Fi as syncRuntimeSiteBlockIds,xe as traceDesignerEvent,Ca as transpileSiteEditClientSource};