@vcp-dev/site-edit-bridge 0.10.7 → 0.10.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-bootstrap.js +1 -1
- package/dist/index.js +6 -6
- package/package.json +3 -3
package/dist/auto-bootstrap.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function te(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function rn(e){if(!ar(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,p=e.tokens[u];if(typeof p!="string")throw new Error(`Missing compact document token ${u}`);let l=`${a===null?"":o(a)}${p}`;return t.set(i,l),l};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,p=u===void 0?void 0:n[u];if(u!==void 0&&!p)throw new Error(`Missing page composition unit ${u}`);return{key:o(c),...p?{pageCompositionUnitKey:p}:{},operationSummary:cr(a),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function cr(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function ar(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"||!ur(t.composition)||typeof t.routeId!="string"||t.routeId!==t.composition.routeId||!Number.isInteger(t.version)||t.version<0||!It(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||ke(o[0])&&o[0]<i)&&ke(o[1])&&o[1]<t.tokens.length)||!t.entries.every(o=>Array.isArray(o)&&(o.length===2||o.length===3)&&ke(o[0])&&o[0]<n.length&&ke(o[1])&&o[1]<=15&&(o.length===2||ke(o[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(o=>Array.isArray(o)&&o.length===2&&ke(o[0])&&o[0]<t.entries.length&&It(o[1]))}function It(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ur(e){return!It(e)||typeof e.routeId!="string"?!1:e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string"}function ke(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}var vt="SITE_EDIT_COMPOSITION_SESSION_MISMATCH",xt="SITE_EDIT_COMPOSITION_SESSION_REQUIRED";var Re=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(ie(t)&&ie(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!ie(t)||typeof t.type!="string"?!1:t.type==="request"?lr(t.payload,n):t.type==="response"||t.type==="error"?ie(t.payload)&&typeof t.payload.id=="string":t.type==="event"?ie(t.payload)&&ie(t.payload.event):t.type==="auth"?ie(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"&&ie(t.payload)&&t.payload.ok===!0}};function lr(e,t){if(!ie(e)||typeof e.id!="string"||!Re.isRequestKind(e.kind))return!1;let n=Rt(e.composition);switch(e.kind){case"initialize-session":return n&&(e.mutationContext===void 0||Ct(e.mutationContext));case"get-document":case"get-style-context":return n;case"get-object-edit-context":return typeof e.key=="string"&&n&&dr(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&&pr(e.request)&&(e.request.mutationContext===void 0||Ct(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return n&&e.mutationContext===void 0||n&&Ct(e.mutationContext)}}function dr(e){if(e===void 0)return!0;if(!ie(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 pr(e){return ie(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&Rt(e.composition)&&typeof e.kind=="string"&&ie(e.target)&&(e.target.kind!=="route"||Rt(e.target.composition))&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&ie(e.params)}function Rt(e){return ie(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 ie(e){return typeof e=="object"&&e!==null}function Ct(e){return ie(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}var mr="vcp:designer:trace",fr="designer_trace",on="__VCP_DESIGNER_TRACE__";var hr=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function gr(e=globalThis){let t=e;try{if(t.localStorage?.getItem(mr)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(fr)==="1"}catch{return!1}}function ve(e,t={},n=globalThis){if(!gr(n))return;let r={type:e,timestamp:Date.now(),payload:yr(t)},o=n,i=o[on]??[];i.push(r),i.length>1e3&&i.splice(0,i.length-1e3),o[on]=i;let s=n.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function yr(e){return Tt(e,0)}function Tt(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>Tt(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e)){if(hr.test(r)){n[r]="[redacted]";continue}n[r]=Tt(o,t+1)}return n}var Le=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===_t&&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=Ve(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(Re.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(c){s(Ve(c,"WebSocket auth failed"),"failed")}return}i()}},r.onerror=c=>{if(this.socket!==r)return;let a=Ve(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(Ir(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=Ze(t),o={...t,composition:xe(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 xe(t)}request(t,n){let r=this.socket;if(!r||r.readyState!==_t||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=xr(o,t,n);return ve("bridge.request",{id:o,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:sn(n.request,"kind"),documentVersion:sn(n.request,"documentVersion")}),new Promise((s,c)=>{let a=this.resolveRequestTimeoutMs(t),u=a>0?setTimeout(()=>{let p=this.pending.get(o);p&&(this.pending.delete(o),ve("bridge.response",{id:o,kind:t,ok:!1,timedOut:!0}),p.reject(new Error(`Bridge request timed out after ${a}ms: ${t}`)))},a):null;u?.unref?.(),this.pending.set(o,{kind:t,timeout:u,resolve:p=>s(p),reject:c});try{r.send(Re.stringifyMessage(i))}catch(p){let l=Ve(p,"WebSocket send failed");this.clearPendingRequest(o),c(l),this.cleanupSocket(r,l,"failed")}})}handleAuthHandshakeMessage(t,n,r,o){try{if(Re.parseMessage(t).type==="auth-ok"){o();return}throw new Error("Bridge authentication failed")}catch(i){let s=Ve(i,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=Re.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"){ve("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}ve("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:Cr(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"?Rr(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):Er[t]??Sr}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===br||t.readyState===_t)&&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)}},br=0,_t=1,Sr=15e3,Er={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function Ve(e,t){return e instanceof Error?e:new Error(t)}function Ir(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 sn(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function Cr(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 un(e){let t="composition"in e?xe(e.composition):xe({routeId:e.routeId});return new At({composition:t,initialDocument:e.initialDocument,client:e.client})}var At=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=!cn(t.initialDocument),this.activeCompositionContext=this.sessionInitialized?{...t.initialDocument.composition}:null}async getDocument(t){this.requireBoundComposition(t);let n=cn(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=ze(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(p=>(this.objectGeneration===a&&this.editContextCache.set(i,p.data),p)).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=Ze(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 ve("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=ze(this.composition),o=this.refreshInFlight;if(o?.compositionKey===r){ve("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}ve("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`${ze(n)}\0${t}\0${vr(r)}`}rememberServerConfirmedComposition(t){!t||typeof t.routeId!="string"||(this.serverConfirmedComposition={...t})}isAcceptedComposition(t){if(ze(t)===ze(this.composition))return!0;let n=this.serverConfirmedComposition;return n!==null&&Qe(n)===Qe(an(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??an(this.composition);return Qe(t)===Qe(n)}};function cn(e){return e.version===0&&e.entries.length===0}function Rr(e){let t=e;return{...t,data:{...t.data,document:ln(t.data.document,t.composition)}}}function ln(e,t){let n=e,r=rn(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 ze(e){return JSON.stringify([e.routeId,e.templateId??null])}function vr(e){return e?JSON.stringify([e.key,e.instanceIndex??null,e.instanceCount??null]):""}function Qe(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function an(e){return{routeId:e.routeId,...e.templateId?{effectiveTemplateId:e.templateId}:{}}}function Ze(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 xr(e,t,n){let r=xe(t==="execute"?Ze(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:Ze(n.request)??r}}}}}var dn="vcp-window-message",pn=1;function mn(e){return{source:dn,version:pn,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function Tr(e){try{return C(e)?X(e,"source",dn)&&X(e,"version",pn)&&D(e,"namespace")&&D(e,"channel")&&pe(e,"body")&&(!Pe(e,"sessionKey")||D(e,"sessionKey")):!1}catch{return!1}}var Pt="site-edit",fn="frame-runtime",_r="frame-announce",Ot=1,Ke=1,We=1,hn=24;function Ue(e,t={}){return mn({namespace:Pt,channel:fn,sessionKey:t.sessionKey,body:e})}function gn(){return mn({namespace:Pt,channel:_r,body:{type:"announce"}})}function yn(e){try{return!Tr(e)||e.namespace!==Pt||e.channel!==fn?!1:Lr(e.body)}catch{return!1}}function he(e){return C(e)&&D(e,"routeId")&&Ne(e,"templateId")&&me(e,["routeId","templateId"])}function et(e){return C(e)&&D(e,"routeId")&&Ne(e,"effectiveTemplateId")&&me(e,["routeId","effectiveTemplateId"])}function me(e,t){let n=new Set(t);return Reflect.ownKeys(e).every(r=>typeof r=="string"&&n.has(r))}var Pe=(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 d(e,t){return Object.getOwnPropertyDescriptor(e,t)?.value}function X(e,t,n){return pe(e,t)&&d(e,t)===n}function D(e,t){return pe(e,t)&&typeof d(e,t)=="string"}function nt(e,t){return pe(e,t)&&typeof d(e,t)=="boolean"}function F(e,t){let n=d(e,t);return pe(e,t)&&typeof n=="number"&&Number.isFinite(n)}function bn(e,t){let n=d(e,t);return pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>0}function Ne(e,t){return!Pe(e,t)||d(e,t)===void 0||D(e,t)}function Me(e,t){return!Pe(e,t)||d(e,t)===void 0||F(e,t)}function Ae(e,t){let n=d(e,t);return!Pe(e,t)||n===void 0||pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function U(e,t){return!Pe(e,t)||d(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 Ar(e){return C(e)&&Reflect.ownKeys(e).length===0}function tt(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 fe(e){return C(e)&&D(e,"key")&&Ae(e,"instanceIndex")&&Ae(e,"instanceCount")&&Ae(e,"textSegmentIndex")}function Nr(e){return C(e)&&D(e,"blockId")&&Ae(e,"blockIndex")&&fe(d(e,"ref"))&&$e(d(e,"rect"))&&nt(e,"targetIsSectionRoot")}function Pr(e){if(!C(e))return!1;let t=d(e,"placement"),n=d(e,"boundary");return D(e,"anchorBlockId")&&Ae(e,"positionIndex")&&fe(d(e,"anchorRef"))&&(t==="before"||t==="after")&&C(n)&&F(n,"top")&&F(n,"left")&&F(n,"width")}function $e(e){return C(e)&&["top","left","width","height"].every(t=>F(e,t))}function Sn(e){if(!C(e))return!1;let t=d(e,"rect"),n=d(e,"layout"),r=C(n)?d(n,"containingBlock"):null,o=d(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")&&D(r,"runtimeNodeId"));return X(e,"version",Ot)&&D(e,"runtimeNodeId")&&C(t)&&$e(d(t,"viewport"))&&$e(d(t,"document"))&&C(n)&&D(n,"position")&&D(n,"transform")&&i&&C(o)&&["scrollX","scrollY","viewportWidth","viewportHeight"].every(s=>F(o,s))&&pe(o,"scrollContainers")&&Or(d(o,"scrollContainers"))}function Or(e){return Array.isArray(e)&&e.every(t=>C(t)&&D(t,"runtimeNodeId")&&F(t,"scrollLeft")&&F(t,"scrollTop"))}function Nt(e){return C(e)&&(U(e,"layoutSnapshot")||Sn(d(e,"layoutSnapshot")))}function Dr(e){return C(e)&&fe(d(e,"ref"))&&pe(e,"layoutSnapshot")&&Sn(d(e,"layoutSnapshot"))&&(U(e,"childBoxes")||Br(d(e,"childBoxes")))&&(U(e,"childRects")||Mr(d(e,"childRects")))&&(U(e,"layout")||kr(d(e,"layout")))&&(U(e,"spacing")||Fr(d(e,"spacing")))}function kr(e){if(!C(e))return!1;let t=d(e,"indicatorOrientation");return D(e,"display")&&(t==="horizontal"||t==="vertical")&&Ne(e,"flexDirection")&&Ne(e,"gridAutoFlow")}function Mr(e){return Array.isArray(e)&&e.every(t=>$e(t))}function Br(e){return Array.isArray(e)&&e.every(t=>C(t)&&$e(d(t,"rect"))&&En(d(t,"margin")))}function En(e){return C(e)&&["marginTop","marginRight","marginBottom","marginLeft"].every(t=>F(e,t))}function Fr(e){return En(e)&&["paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","columnGap","rowGap"].every(t=>F(e,t))}function wr(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)||!Dr(n.value))return!1}return!0}function qr(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&(typeof d(e,t)=="string"||d(e,t)===null))}function In(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function Vr(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&In(d(e,t)))}function zr(e){if(!C(e))return!1;let t=d(e,"priority");return D(e,"property")&&pe(e,"value")&&In(d(e,"value"))&&(!Pe(e,"priority")||t===void 0||t==="important")}function Kr(e){return C(e)?(U(e,"attributes")||qr(d(e,"attributes")))&&Ne(e,"className")&&(U(e,"style")||Vr(d(e,"style")))&&(U(e,"styleDeclarations")||Array.isArray(d(e,"styleDeclarations"))&&d(e,"styleDeclarations").every(zr)):!1}function Wr(e){return C(e)&&F(e,"x")&&F(e,"y")&&(U(e,"detailLevel")||X(e,"detailLevel","summary")||X(e,"detailLevel","full"))}function $r(e){return C(e)&&fe(d(e,"ref"))}function Ur(e){if(!C(e)||!C(d(e,"variables")))return!1;let t=d(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&D(t,n))?U(e,"stylesheets")||tt(d(e,"stylesheets")):!1}function Gr(e){if(!X(e,"type","request")||!D(e,"id")||!D(e,"kind")||!pe(e,"payload"))return!1;let t=d(e,"kind"),n=d(e,"payload");switch(t){case"hit-test-at-point":case"start-text-edit-at-point":return Wr(n);case"bridge-get-source-tree":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"get-scroll-metrics":case"clear-theme-override":return Ar(n);case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"bridge-get-source-file":return C(n)&&D(n,"path")&&he(d(n,"composition"))&&me(n,["path","composition"]);case"bridge-get-object-edit-context":return C(n)&&D(n,"key")&&he(d(n,"composition"))&&Qr(d(n,"selectionRef"))&&me(n,["key","composition","selectionRef"]);case"bridge-resolve-source-location":case"bridge-get-class-name-source":return C(n)&&D(n,"key")&&he(d(n,"composition"))&&me(n,["key","composition"]);case"scroll-to":return C(n)&&F(n,"x")&&F(n,"y");case"scroll-by":return C(n)&&F(n,"deltaX")&&F(n,"deltaY");case"set-interaction-mode":return C(n)&&nt(n,"enabled");case"set-selection-visual":return C(n)&&X(n,"version",Ke)&&fe(d(n,"ref"))&&X(n,"visible",!0);case"clear-selection-visual":return C(n)&&X(n,"version",Ke);case"set-resize-visual":return C(n)&&X(n,"version",We)&&fe(d(n,"ref"))&&X(n,"visible",!0);case"clear-resize-visual":return C(n)&&X(n,"version",We);case"set-theme-override":return Ur(n);case"get-theme-variables":return C(n)&&tt(d(n,"names"));case"compute-drop-target-at-point":return C(n)&&F(n,"x")&&F(n,"y")&&(X(n,"dragKind","insert")||X(n,"dragKind","move"))&&(U(n,"movingRef")||fe(d(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return C(n)&&(U(n,"ref")||fe(d(n,"ref")));case"apply-node-patch":return C(n)&&fe(d(n,"ref"))&&Kr(d(n,"patch"))&&(U(n,"preview")||C(d(n,"preview"))&&D(d(n,"preview"),"sessionId")&&Ae(d(n,"preview"),"revision")&&Pe(d(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return $r(n);case"bridge-initialize-session":case"bridge-get-style-context":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return C(n)&&he(d(n,"composition"))&&Me(n,"minVersion")&&Me(n,"version")&&me(n,["composition","minVersion","version"]);case"bridge-execute":{if(!C(n))return!1;let r=d(n,"request"),o=d(n,"composition"),i=C(r)?d(r,"composition"):null;return!he(o)||!C(r)||!he(i)?!1:te({routeId:o.routeId,...o.templateId?{effectiveTemplateId:o.templateId}:{}})===te({routeId:i.routeId,...i.templateId?{effectiveTemplateId:i.templateId}:{}})&&me(n,["composition","request"])}case"bridge-subscribe":case"bridge-unsubscribe":return C(n)&&D(n,"subscriptionId")&&he(d(n,"composition"))&&me(n,["subscriptionId","composition"]);default:return!1}}function Hr(e){return X(e,"type","response")&&D(e,"id")&&nt(e,"ok")&&(U(e,"error")||D(e,"error"))}function jr(e){if(!C(e))return!1;let t=d(e,"type");if(typeof t!="string"||!et(d(e,"composition"))||!D(e,"siteId")||!D(e,"at"))return!1;switch(t){case"site-edit.document.changed":return D(e,"snapshotId")&&F(e,"version");case"site-edit.operation.planned":return D(e,"operationId")&&D(e,"baseSnapshotId")&&tt(d(e,"changedFiles"));case"site-edit.operation.completed":return C(d(e,"result"));case"site-edit.operation.failed":return D(e,"requestId")&&C(d(e,"error"));case"site-edit.capability.changed":return tt(d(e,"keys"));case"site-edit.graph.invalidated":return!0;case"site-edit.graph.ready":return F(e,"version");case"site-edit.graph.error":return D(e,"message");default:return!1}}var Yr=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]),Cn=new Set(["e","s","se"]);function Xr(e,t){if(U(e,"resizeSession"))return!0;let n=d(e,"resizeSession");if(!C(n))return!1;let r=d(e,"pointerId"),o=d(n,"pointerId"),i=d(n,"phase"),s=d(n,"edge"),c=t==="pointer-down"?"start":t==="pointer-up"?"commit":t==="pointer-cancel"?"cancel":null;return d(n,"version")===1&&i===c&&D(n,"sessionId")&&String(d(n,"sessionId")).length>0&&typeof r=="number"&&Number.isInteger(r)&&typeof o=="number"&&Number.isInteger(o)&&r===o&&typeof s=="string"&&Cn.has(s)&&d(e,"resizeEdge")===s&&fe(d(n,"ref"))&&["startWidth","startHeight","width","height"].every(a=>F(n,a))}function Jr(e){if(!X(e,"type","event")||!D(e,"kind")||!C(d(e,"payload")))return!1;let t=d(e,"kind"),n=d(e,"payload");switch(t){case"text-edit-commit":case"text-edit-cancel":case"text-edit-exit":case"text-edit-input":return fe(d(n,"ref"))&&Ne(n,"value")&&(U(n,"hit")||Nt(d(n,"hit")));case"node-bounds-change":return Nt(d(n,"hit"));case"geometry-batch":{let r=d(n,"reason");return bn(n,"sequence")&&F(n,"sourceEventAt")&&F(n,"captureStartedAt")&&F(n,"capturedAt")&&(r==="scroll"||r==="resize"||r==="mutation")&&wr(d(n,"snapshots"))}case"bridge-event":{let r=d(n,"event"),o=d(n,"composition");return!jr(r)||!et(o)?!1:D(n,"subscriptionId")&&te(o)===te(r.composition)}case"route-ready":return et(d(n,"composition"))&&D(n,"editEngineVersion")&&F(n,"sequence")&&F(n,"version");case"bridge-status":{let r=d(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&et(d(n,"composition"))&&F(n,"sequence")&&Me(n,"attempt")&&Me(n,"retryInMs")&&Ne(n,"messageKey")}case"scroll":{let r=d(n,"metrics");return C(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(o=>F(r,o))}default:return Yr.has(t)&&F(n,"clientX")&&F(n,"clientY")&&Me(n,"buttons")&&Me(n,"pointerId")&&(U(n,"hoverVisualOwned")||nt(n,"hoverVisualOwned"))&&(U(n,"resizeEdge")||D(n,"resizeEdge")&&Cn.has(d(n,"resizeEdge")))&&Xr(n,t)&&(d(n,"hit")===null||Nt(d(n,"hit")))&&(U(n,"section")||d(n,"section")===null||Nr(d(n,"section")))&&(U(n,"sectionGap")||d(n,"sectionGap")===null||Pr(d(n,"sectionGap")))}}function Qr(e){if(e===void 0)return!0;if(!C(e)||!me(e,["key","instanceIndex","instanceCount"])||!D(e,"key")||d(e,"key").length===0||!Ae(e,"instanceIndex")||!U(e,"instanceCount")&&!bn(e,"instanceCount"))return!1;let t=d(e,"instanceIndex"),n=d(e,"instanceCount");return!(typeof t=="number"&&typeof n=="number"&&t>=n)}function Lr(e){if(!C(e))return!1;switch(d(e,"type")){case"request":return Gr(e);case"response":return Hr(e);case"event":return Jr(e);default:return!1}}var Ft="vcp-site-edit:route-ready",wt="vcp-site-edit:bridge-status",qn="SITE_EDIT_COMPOSITION_RENDER_MISMATCH",Zr=80,eo=120,to=160,Vn="data-vcp-designer-hover-visual",no=1e3,ro="data-vcp-ui-component",zn="data-vcp-theme-preview",Rn="::repeat-item#",rt="components/ui",Dt="data-site-block-id",kt="data-vcp-runtime-site-block-id",oo=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),io=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function so(e,t){let n=Array.from(e.querySelectorAll("[data-vcp-edit-key]"));for(let c of n)c.getAttribute(kt)==="true"&&(c.removeAttribute(Dt),c.removeAttribute(kt));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(Dt)?.trim())continue;let p=c.getAttribute("data-vcp-edit-key")?.trim();if(!p)continue;let l=s.get(p)??0;s.set(p,l+1);let y=`vcp-runtime:${encodeURIComponent(p)}:${l}`;c.setAttribute(Dt,y),c.setAttribute(kt,"true")}}function Kn(e,t=""){let n=Hn(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,o=r.startsWith("/")?r:`/${r}`;return o==="/"?"/":o.replace(/\/+$/,"")}function co(e){let t=Kn(e.pathname,e.basePath??""),n=new URLSearchParams(e.search??"").getAll("template_id");return n.length===0?{routeId:t}:{routeId:t,templateId:n[n.length-1]}}function we(e){return JSON.stringify([e.routeId,e.templateId??null])}function ao(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 uo(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 us(e=window,t={}){let n=uo(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=lo({bridgeUrl:n,options:t}),o=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(o?.started){if(po(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},s,c=()=>e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__===s,a=t.create_client??(m=>new Le({url:m,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??wo,p=()=>{i.retryTimer&&(e.clearTimeout(i.retryTimer),i.retryTimer=void 0)},l=()=>co({pathname:e.location.pathname,search:e.location.search,basePath:t.basePath}),y=()=>we(l()),f=m=>{qo(e,{...m,composition:m.state==="ready"?m.composition:{routeId:m.composition.routeId},sequence:m.sequence??i.routeSequence})},_=m=>{i.currentDocument=m,i.currentEntriesByKey=new Map((m?.entries??[]).map(E=>[E.key,E])),so(e.document,!!m)},v=()=>{i.unsubscribeConnectionStatus?.(),i.unsubscribeConnectionStatus=void 0,i.unsubscribeDocument?.(),i.unsubscribeDocument=void 0},P=(m,E)=>{if(i.disposed||E!==i.routeSequence)return!1;try{return m===y()}catch{return!1}},A=async(m,E,O)=>{let R=i.activeBridge;if(!R)return null;let q=await R.getDocument(m);return P(E,O)&&_(q.data),q.data},k=()=>{v(),_(null);let m=i.activeBridge;i.activeBridge=null,m&&e.__VCP_SITE_EDIT__===m&&delete e.__VCP_SITE_EDIT__;let E=i.activeClient;i.activeClient=null,E?.disconnect()},Y=m=>m===s.compositionKey&&!!i.activeBridge&&!!(i.currentDocument&&s.composition&&zo(i.currentDocument,te(s.composition)))&&Vo(i.activeClient),W=m=>Math.min(no*2**Math.max(0,m),8e3),I=(m,E,O,R)=>{if(i.disposed)return;p();let q=W(R);f({state:"reconnecting",composition:m,attempt:R,retryInMs:q,messageKey:"studio.status.previewBridgeConnecting"}),i.retryTimer=e.setTimeout(()=>{i.retryTimer=void 0,!(i.disposed||O!==i.routeSequence||!P(E,O))&&Z(R+1).catch(ee=>{let G;try{G=y()}catch{return}if(E===G){if(Be(ee)){f({state:"reload-required",composition:m,attempt:R,messageKey:"studio.errors.previewBridgeReloadRequired"});return}I(m,E,i.routeSequence,R+1)}})},q)},J=(m,E,O)=>{if(!P(E,O)||i.activeClient===null)return;let R=i.activeClient;v(),_(null);let q=i.activeBridge;i.activeBridge=null,q&&e.__VCP_SITE_EDIT__===q&&delete e.__VCP_SITE_EDIT__,i.activeClient=null,R.disconnect(),I(m,E,O,0)},se=(m,E,O,R)=>{if(!(!P(E,O)||i.activeClient===null)){if(Be(R.message)){k(),p(),f({state:"reload-required",composition:m,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}J(m,E,O)}},ne=m=>{let E;try{E=l()}catch{return}let O=we(E),R=i.routeSequence;if(!(!P(O,R)||i.activeClient===null)){if(Be(m)){k(),p(),f({state:"reload-required",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if($o(m)){J(E,O,R);return}Un(m)&&se(E,O,R,{state:"failed",message:Te(m,"Site edit bridge request failed")})}};i.cleanupFrameRuntime=yo(e,{getCurrentDocument:()=>i.currentDocument,getDocumentEntry:m=>i.currentEntriesByKey.get(m)??null,setCurrentDocument:_,onBridgeRequestError:m=>{ne(m)}});let L=async()=>Z(0),Z=async m=>{if(i.disposed)return;let E=l(),O=we(E);if(Y(O))return;let R=i.syncInFlight;if(R?.compositionKey===O)return R.promise;let q=i.routeSequence+1,ee=re(E,O,q,m);i.syncInFlight={compositionKey:O,sequence:q,promise:ee};try{await ee}finally{i.syncInFlight?.promise===ee&&(i.syncInFlight=null)}},re=async(m,E,O,R)=>{i.routeSequence=O,p(),k(),f({state:R>0?"reconnecting":"connecting",composition:m,attempt:R,messageKey:R>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let q=a(n),ee=!1;i.activeClient=q,i.unsubscribeConnectionStatus=q.subscribeConnectionStatus?.(G=>{ee&&(G.state==="closed"||G.state==="failed")&&se(m,E,O,G)});try{if(await q.connect(),!P(E,O)){q.disconnect();return}let G=un({composition:m,client:q,initialDocument:go(m)});if(i.activeBridge=G,i.activeClient=q,i.unsubscribeDocument=G.subscribe(h=>{if(!(!s.composition||te(h.composition)!==te(s.composition))){if(h.type==="site-edit.snapshot.changed"){A(m,E,O).catch(()=>{});return}h.type==="site-edit.document.changed"&&i.currentDocument&&h.version>i.currentDocument.version?A(m,E,O).catch(()=>{}):h.type==="site-edit.graph.invalidated"&&(_(null),x())}}),c()&&(s.routeId=m.routeId,s.composition=void 0,s.compositionKey=E),t.launch_id){let h=new URL(n);h.protocol=h.protocol==="wss:"?"https:":"http:",h.pathname=h.pathname.replace(/\/bridge$/,"/health"),h.search="";let $=await e.fetch(h,{cache:"no-store"}),z=await $.json();if(!$.ok||!z.ok||z.launch?.launchId!==t.launch_id||z.launch?.snapshotId!==t.snapshot_id)throw new Error("SITE_EDIT_RUNTIME_RELOAD_REQUIRED: preview navigation belongs to a stale launch or snapshot")}let g=await G.initializeSession({composition:m}),S=g.data.document;if(t.snapshot_id&&S.snapshotId!==t.snapshot_id)throw new Error("SITE_EDIT_RUNTIME_RELOAD_REQUIRED: initialized document does not match navigation snapshot");if((m.templateId!==void 0?te(g.composition)!==E:g.composition.effectiveTemplateId!==void 0)||te(S.composition)!==te(g.composition))throw new Error(`${qn}: initialize response does not match requested selector`);if(!P(E,O)){q.disconnect();return}_(S),c()&&(e.__VCP_SITE_EDIT__=G),ee=!0,c()&&(s.composition=g.composition),f({state:"ready",composition:g.composition,attempt:R,messageKey:"studio.status.previewReady"}),ao(e,{documentVersion:S?.version??0,routeId:m.routeId,versions:t.runtime_versions}),S&&$n(e,{composition:g.composition,editEngineVersion:t.runtime_versions?.engine??"unknown",sequence:O,version:S.version})}catch(G){if(!P(E,O)){q.disconnect();return}if(v(),i.activeClient===q&&(i.activeClient=null),i.activeBridge&&e.__VCP_SITE_EDIT__===i.activeBridge&&delete e.__VCP_SITE_EDIT__,i.activeBridge=null,q.disconnect(),_(null),!P(E,O))return;throw f({state:Be(G)?"reload-required":"failed",composition:m,attempt:R,messageKey:Be(G)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),G}},ce=m=>{if(i.disposed)return;let E;try{E=l()}catch{f({state:"failed",composition:{routeId:Kn(e.location.pathname,t.basePath||"")},attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}let O=we(E);if(Be(m)){p(),f({state:"reload-required",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(Ko(m)){f({state:"failed",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}I(E,O,i.routeSequence,0)},x=()=>{i.syncScheduled||i.disposed||(i.syncScheduled=!0,u(()=>{i.syncScheduled=!1,!i.disposed&&L().catch(m=>ce(m))}))},M=()=>{i.disposed||(i.disposed=!0,i.syncScheduled=!1,i.syncInFlight=null,p(),i.routeSequence+=1,i.unbindRouteChange?.(),i.unbindRouteChange=void 0,i.unbindBootstrapLifecycle?.(),i.unbindBootstrapLifecycle=void 0,i.cleanupFrameRuntime(),k(),c()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};s={started:!0,signature:r,syncRoute:L,cleanup:M},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,i.unbindBootstrapLifecycle=fo(e,M);let w=l();if(i.unbindRouteChange=Fo(e,()=>{let m=l(),E=m.routeId===w.routeId&&m.templateId!==w.templateId;if(w=m,E){i.routeSequence+=1,k(),f({state:"connecting",composition:{routeId:m.routeId},attempt:0}),e.location.reload();return}x()},y),t.defer_initial_sync){x();return}await L()}function lo(e){return{basePath:Hn(e.options.basePath??""),bridgeUrl:e.bridgeUrl,launchId:e.options.launch_id??null,snapshotId:e.options.snapshot_id??null,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:mo(e.options.bridge_session_key)}}function po(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function mo(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 fo(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),ho(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function ho(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function go(e){return{siteId:"preview",snapshotId:"preview",composition:{routeId:e.routeId},version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function yo(e=window,t={}){let n=null,r=null,o=null,i=null,s=null,c=null,a=0,u=null,p=null,l=null,y=null,f=null,_=0,v=new Map,P=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,A=()=>{n?.(),n=null,r=null},k=()=>{let g=e.parent;if(!(!g||g===e))try{g.postMessage(gn(),"*")}catch{}},Y=()=>{o?.(),o=null,i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null},W=(g,S,h)=>{let $=u?.sessionKey!==g||u?.sourceWindow!==S||u?.targetOrigin!==h;u={sessionKey:g,sourceWindow:S,targetOrigin:h},$&&(a=0,y=null,f=null)},I=(g,S)=>{let h=e.parent&&e.parent!==e?e.parent:null;return!h||S!==h?!1:!P||g===P},J=()=>{for(let g of v.values())g();v.clear()},se=g=>JSON.stringify([te(g.composition),g.editEngineVersion,g.sequence,g.version]),ne=()=>!l||l.state==="ready",L=g=>JSON.stringify([g.state,te(g.composition),g.sequence,g.attempt??null,g.retryInMs??null,g.messageKey??null]),Z=g=>{if(!ne())return;let S=se(g);y!==S&&(i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null,m({kind:"route-ready",payload:{composition:g.composition,editEngineVersion:g.editEngineVersion,sequence:g.sequence,version:g.version}}),u&&(y=S))},re=g=>{let S=L(g);f!==S&&(g.state!=="ready"&&(y=null,p=null),m({kind:"bridge-status",payload:g}),u&&(f=S))},ce=g=>{p=g,Z(g)},x=g=>{l=g,re(g)},M=()=>{p&&Z(p)},w=()=>{l&&re(l)},m=g=>{u&&u.sourceWindow.postMessage(Ue({type:"event",...g},{sessionKey:u.sessionKey}),u.targetOrigin)},E=(g,S,h,$)=>{let z=t.getCurrentDocument?.()??null,Q=S.rawTarget&&typeof S.rawTarget.getAttribute=="function"?S.rawTarget:null,T=Q??Qo(e.document,S.clientX,S.clientY),H=Q?ht(Q):null,ae=H?.getAttribute("data-vcp-edit-key")??"",ue=S.resizeSession?null:H&&Wt(H,z,ae)?H:Ye(e.document,S.clientX,S.clientY,z),le=g==="pointer-move"&&Number(S.buttons??0)===0?"rect-only":"full",oe=ue?ge(ue,h==="full"?ye(e.document,ue,z):pt(e.document,ue,z),t.getDocumentEntry,h,void 0,le):null,Se=Lo(e.document,T,z),_e=ei(e.document,S,z,t.getDocumentEntry);$&&oe&&(g==="pointer-click"||g==="pointer-double-click")&&($.preventDefault(),$.stopPropagation(),typeof $.stopImmediatePropagation=="function"&&$.stopImmediatePropagation()),m({kind:g,payload:{clientX:S.clientX,clientY:S.clientY,buttons:Number(S.buttons??0),pointerId:S.pointerId,hoverVisualOwned:S.hoverVisualOwned,resizeEdge:S.resizeEdge,resizeSession:S.resizeSession,hit:oe,section:Se,sectionGap:_e}})},O=g=>{m({kind:"pointer-leave",payload:{clientX:g?.clientX??0,clientY:g?.clientY??0,buttons:Number(g?.buttons??0),hit:null,section:null,sectionGap:null}})},R=(g,S,h)=>{Y(),u={sessionKey:g,sourceWindow:S,targetOrigin:h};let $=zi(e.document),z=bo(e,t.getCurrentDocument),Q=null,T=null,H=null,ae=null,ue=null,le=null,oe=!1,Se=()=>{ue!==null&&(e.clearTimeout(ue),ue=null)},_e=()=>{H!==null&&(lt(e,H),H=null),Q=null},Ie=()=>{le!==null&&(e.clearTimeout(le),le=null)},bt=()=>{H=null;let b=Q;Q=null,b&&E("pointer-move",b,"summary")},N=b=>{Se(),T=b,Q=b,H===null&&(H=ut(e,bt))},B=b=>{T&&N({...T,rawTarget:null,hoverVisualOwned:b&&!oe?z?.updateAtPoint(T.clientX,T.clientY)??!1:!1})},V=()=>B(!0),Ce=()=>B(!1),Ee=e.document.documentElement,St=typeof Ee.addEventListener=="function"?Ee:e.document,Gt=b=>{if(c?.update(b)){b.preventDefault();return}N({clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),rawTarget:b.target,hoverVisualOwned:oe?!1:z?.update(b.target)??!1})},Ht=b=>{let K=Po(b.target),qe=K?c?.begin(b,K):null;qe&&(b.target?.setPointerCapture?.(b.pointerId),b.preventDefault(),b.stopPropagation()),E("pointer-down",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:Number(b.pointerId),resizeEdge:K,resizeSession:qe??void 0},"full",b)},jt=b=>{let K=c?.finish(b,"commit")??null;if(K){E("pointer-up",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:Number(b.pointerId),resizeEdge:K.edge,resizeSession:K},"summary",b);return}E("pointer-up",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"summary",b)},Yt=b=>{let K=c?.finish(b,"cancel")??null;E("pointer-cancel",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:K?.pointerId,resizeEdge:K?.edge,resizeSession:K??void 0},"summary",b)},Xt=b=>{let K=c?.finish(b,"cancel")??null;K&&E("pointer-cancel",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:K.pointerId,resizeEdge:K.edge,resizeSession:K},"summary",b)},Jt=b=>{E("pointer-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},Qt=b=>{E("pointer-double-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},Et=b=>{if(b&&b.target!==St&&b.target!==Ee)return;let K=b?{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)}:T;if(b&&K&&K.clientX>0&&K.clientX<e.innerWidth&&K.clientY>0&&K.clientY<e.innerHeight){V();return}if(_e(),b){Se(),ue=e.setTimeout(()=>{ue=null,T=null,Ie(),oe=!1,O(K??void 0)},eo);return}Se(),Ie(),oe=!1,T=null,z?.clear(),O(K??void 0)},Lt=()=>Et(),sr=()=>{ae=null,m({kind:"scroll",payload:{metrics:ct(e)}}),Ce()},De=()=>{oe=!0,z?.clear(),Ie(),T&&(le=e.setTimeout(()=>{le=null,oe=!1,V()},to)),ae===null&&(ae=ut(e,sr))};e.document.addEventListener("pointerdown",Ht,!0),e.document.addEventListener("pointermove",Gt,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",jt,!0),e.document.addEventListener("pointercancel",Yt,!0),e.document.addEventListener("lostpointercapture",Xt,!0),e.document.addEventListener("click",Jt,!0),e.document.addEventListener("dblclick",Qt,!0),e.addEventListener("scroll",De,{passive:!0}),e.document.addEventListener("scroll",De,{capture:!0,passive:!0}),e.addEventListener("resize",V,{passive:!0}),e.addEventListener("blur",Lt),e.document.addEventListener("load",V,!0),St.addEventListener("pointerleave",Et,!0);let Je=e.visualViewport;Je?.addEventListener?.("resize",V,{passive:!0}),Je?.addEventListener?.("scroll",De,{passive:!0});let Zt=e.ResizeObserver,en=typeof Zt=="function"?new Zt(V):null;en?.observe(Ee);let tn=e.MutationObserver,nn=typeof tn=="function"?new tn(b=>{b.some(qe=>qe.type!=="attributes"||qe.attributeName!==Vn)&&V()}):null;nn?.observe(Ee,{attributes:!0,childList:!0,subtree:!0}),o=()=>{_e(),Se(),Ie(),oe=!1,T=null,z?.cleanup(),en?.disconnect(),nn?.disconnect(),ae!==null&&(lt(e,ae),ae=null),$(),e.document.removeEventListener("pointerdown",Ht,!0),e.document.removeEventListener("pointermove",Gt,!0),e.document.removeEventListener("pointerup",jt,!0),e.document.removeEventListener("pointercancel",Yt,!0),e.document.removeEventListener("lostpointercapture",Xt,!0),e.document.removeEventListener("click",Jt,!0),e.document.removeEventListener("dblclick",Qt,!0),e.removeEventListener("scroll",De),e.document.removeEventListener("scroll",De,!0),e.removeEventListener("resize",V),e.removeEventListener("blur",Lt),e.document.removeEventListener("load",V,!0),St.removeEventListener("pointerleave",Et,!0),Je?.removeEventListener?.("resize",V),Je?.removeEventListener?.("scroll",De)}},q=g=>{let S=g.detail;S?.composition?.routeId&&ce(S)},ee=g=>{let S=g.detail;S?.state&&x(S)},G=g=>{let S=g.data;if(!yn(S)||S.body.type!=="request"||S.body.kind!=="apply-node-patch"&&S.body.kind!=="get-hit-by-ref"&&S.body.kind!=="get-path-by-ref"&&S.body.kind!=="get-scroll-metrics"&&S.body.kind!=="scroll-to"&&S.body.kind!=="scroll-by"&&S.body.kind!=="set-interaction-mode"&&S.body.kind!=="set-selection-visual"&&S.body.kind!=="clear-selection-visual"&&S.body.kind!=="set-resize-visual"&&S.body.kind!=="clear-resize-visual"&&S.body.kind!=="set-theme-override"&&S.body.kind!=="clear-theme-override"&&S.body.kind!=="get-theme-variables"&&S.body.kind!=="compute-drop-target-at-point"&&S.body.kind!=="observe-node-bounds"&&S.body.kind!=="clear-node-bounds-observer"&&S.body.kind!=="restore-text-edit"&&S.body.kind!=="clear-text-edit-rollback"&&S.body.kind!=="start-text-edit-at-point"&&S.body.kind!=="hit-test-at-point"&&!An(S.body))return;let h=S.body,$=typeof S.sessionKey=="string"?S.sessionKey:null,z=g.source,Q=g.origin;if(!$||!Q||!z||typeof z.postMessage!="function"||!I($,z))return;if(u){if(u.sourceWindow!==z||u.targetOrigin!==Q)return;u.sessionKey!==$&&(A(),Y(),J(),u=null)}W($,z,Q),w(),M();let T=H=>{let ae=typeof h.id=="string"?h.id:"unknown";z.postMessage(Ue({id:ae,...H},{sessionKey:$}),Q)};try{if(An(h)){ko({message:h,sendEvent:N=>{z.postMessage(Ue({type:"event",...N},{sessionKey:$}),Q)},sendResponse:T,subscriptions:v,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,nextRouteReadySequence:()=>_+=1,windowLike:e});return}if(h.kind==="apply-node-patch"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for patch target"});return}let B=h.payload.preview,V=B?Ti(B.sessionId,h.payload.ref):null;if(V&&B){let Ce=Ge.get(V)??-1;if(B.revision<Ce){T({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,stale:!0,latestRevision:Ce}});return}if(B.revision===Ce){T({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,duplicate:!0,latestRevision:Ce}});return}}if(vi(N,h.payload.patch),V&&B&&_i(V,B.revision),B?.responseDetail==="none"){T({type:"response",ok:!0,result:{applied:!0,appliedRevision:B.revision}});return}T({type:"response",ok:!0,result:ge(N,ye(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,B?.responseDetail??"full")});return}if(h.kind==="get-hit-by-ref"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for hit target"});return}T({type:"response",ok:!0,result:ge(N,ye(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(h.kind==="get-path-by-ref"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for path target"});return}let B=[],V=N;for(;V;)V.getAttribute("data-vcp-edit-key")&&B.push(ge(V,ye(e.document,V,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),V=V.parentElement;T({type:"response",ok:!0,result:B.reverse()});return}if(h.kind==="restore-text-edit"||h.kind==="clear-text-edit-rollback"){let N=h.payload.ref;if(h.kind==="clear-text-edit-rollback"){r&&Nn(r.ref,N)&&(r=null),T({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!Nn(r.ref,N)){T({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let B=Go(e.document,r,t.getCurrentDocument?.()??null);r=null,T(B?{type:"response",ok:!0,result:{restored:!0}}:{type:"response",ok:!1,error:"Failed to restore text edit snapshot"});return}if(h.kind==="get-scroll-metrics"){T({type:"response",ok:!0,result:ct(e)});return}if(h.kind==="scroll-to"){let N=Number(h.payload.x),B=Number(h.payload.y);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:N,top:B}),T({type:"response",ok:!0,result:ct(e)});return}if(h.kind==="scroll-by"){let N=Number(h.payload.deltaX),B=Number(h.payload.deltaY);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:N,top:B}),T({type:"response",ok:!0,result:{...ct(e),scrolled:!0}});return}if(h.kind==="set-interaction-mode"){h.payload.enabled?R($,z,Q):u?.sourceWindow===z&&u.targetOrigin===Q&&u.sessionKey===$&&(A(),Y()),T({type:"response",ok:!0,result:{interactionEnabled:h.payload.enabled}});return}if(h.kind==="set-selection-visual"){let N=!1;o?s?(N=s.setRef(h.payload.ref),N||(s.cleanup(),s=null)):(s=Eo(e,h.payload.ref,t.getCurrentDocument),N=!!s):(s?.cleanup(),s=null),T({type:"response",ok:!0,result:{version:Ke,active:N}});return}if(h.kind==="clear-selection-visual"){s?.cleanup(),s=null,T({type:"response",ok:!0,result:{version:Ke,active:!1}});return}if(h.kind==="set-resize-visual"){c?.cleanup(),c=null,o&&(c=Oo(e,h.payload.ref,t.getCurrentDocument,({clientX:N,clientY:B,session:V})=>{m({kind:"pointer-cancel",payload:{clientX:N,clientY:B,buttons:0,pointerId:V.pointerId,resizeEdge:V.edge,resizeSession:V,hit:null,section:null,sectionGap:null}})})),T({type:"response",ok:!0,result:{version:We,active:!!c}});return}if(h.kind==="clear-resize-visual"){c?.cleanup(),c=null,T({type:"response",ok:!0,result:{version:We,active:!1}});return}if(h.kind==="set-theme-override"){Ai(e.document,h.payload),T({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(h.kind==="clear-theme-override"){Ni(e.document),T({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(h.kind==="get-theme-variables"){T({type:"response",ok:!0,result:Pi(e.document,h.payload.names)});return}if(h.kind==="compute-drop-target-at-point"){let N=Number(h.payload?.x),B=Number(h.payload?.y);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid drop target point"});return}T({type:"response",ok:!0,result:bi(e,N,B,h.payload.dragKind,h.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(h.kind==="observe-node-bounds"){let N=h.payload.ref;if(!N){T({type:"response",ok:!1,error:"Missing bounds observer target"});return}let B=be(e.document,N,t.getCurrentDocument?.()??null);if(!B){T({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}i?.(),i=pi(e,B,N,t.getCurrentDocument,(V,Ce,Ee)=>{a+=1,m({kind:"geometry-batch",payload:{sequence:a,sourceEventAt:Ee.sourceEventAt,captureStartedAt:Ee.captureStartedAt,capturedAt:Ee.capturedAt,reason:V,snapshots:[Ce]}})}),T({type:"response",ok:!0,result:{observing:!0}}),m({kind:"node-bounds-change",payload:{hit:ge(B,N,t.getDocumentEntry,"summary",e)}});return}if(h.kind==="clear-node-bounds-observer"){i?.(),i=null,T({type:"response",ok:!0,result:{cleared:!0}});return}if(h.kind!=="hit-test-at-point"&&h.kind!=="start-text-edit-at-point")return;let H=Number(h.payload?.x),ae=Number(h.payload?.y);if(!Number.isFinite(H)||!Number.isFinite(ae)){T({type:"response",ok:!1,error:"Invalid text edit point"});return}let ue=h.kind==="hit-test-at-point"?Ye(e.document,H,ae,t.getCurrentDocument?.()??null):jo(e.document,H,ae,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!ue){T({type:"response",ok:!1,error:h.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let le=h.kind==="start-text-edit-at-point"?ue:null,oe=h.kind==="hit-test-at-point"?ue:le.element,Se=h.payload.detailLevel??"full",_e=Se==="full"?ye(e.document,oe,t.getCurrentDocument?.()??null):pt(e.document,oe,t.getCurrentDocument?.()??null),Ie=le&&typeof le.textSegmentIndex=="number"?{..._e,textSegmentIndex:le.textSegmentIndex}:_e,bt=ge(oe,Ie,t.getDocumentEntry,Se);if(h.kind==="hit-test-at-point"){T({type:"response",ok:!0,result:bt});return}A(),n=Mi(e,oe,Ie,N=>{z.postMessage(Ue({type:"event",...N},{sessionKey:$}),Q)},{...le?.textNode?{textNode:le.textNode}:{},onCommitSnapshot:N=>{r=N}}),T({type:"response",ok:!0,result:{ref:Ie}})}catch(H){T({type:"response",ok:!1,error:H instanceof Error?H.message:"Failed to start text edit"})}};return e.addEventListener("message",G),e.addEventListener(Ft,q),e.addEventListener(wt,ee),k(),()=>{A(),Y(),u=null,J(),e.removeEventListener("message",G),e.removeEventListener(Ft,q),e.removeEventListener(wt,ee)}}function bo(e,t){let n=e.document,r=n.head??n.documentElement;if(typeof r?.appendChild!="function")return null;let o=Vn,i="data-vcp-designer-selection-visual",s=n.createElement("style");s.setAttribute("data-vcp-designer-hover-visual-style","true"),s.textContent=`
|
|
1
|
+
function te(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function rn(e){if(!ar(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,p=e.tokens[u];if(typeof p!="string")throw new Error(`Missing compact document token ${u}`);let l=`${a===null?"":o(a)}${p}`;return t.set(i,l),l};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,p=u===void 0?void 0:n[u];if(u!==void 0&&!p)throw new Error(`Missing page composition unit ${u}`);return{key:o(c),...p?{pageCompositionUnitKey:p}:{},operationSummary:cr(a),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function cr(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function ar(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"||!ur(t.composition)||typeof t.routeId!="string"||t.routeId!==t.composition.routeId||!Number.isInteger(t.version)||t.version<0||!It(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||ke(o[0])&&o[0]<i)&&ke(o[1])&&o[1]<t.tokens.length)||!t.entries.every(o=>Array.isArray(o)&&(o.length===2||o.length===3)&&ke(o[0])&&o[0]<n.length&&ke(o[1])&&o[1]<=15&&(o.length===2||ke(o[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(o=>Array.isArray(o)&&o.length===2&&ke(o[0])&&o[0]<t.entries.length&&It(o[1]))}function It(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ur(e){return!It(e)||typeof e.routeId!="string"?!1:e.effectiveTemplateId===void 0||typeof e.effectiveTemplateId=="string"}function ke(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}var vt="SITE_EDIT_COMPOSITION_SESSION_MISMATCH",xt="SITE_EDIT_COMPOSITION_SESSION_REQUIRED";var Re=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(ie(t)&&ie(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!ie(t)||typeof t.type!="string"?!1:t.type==="request"?lr(t.payload,n):t.type==="response"||t.type==="error"?ie(t.payload)&&typeof t.payload.id=="string":t.type==="event"?ie(t.payload)&&ie(t.payload.event):t.type==="auth"?ie(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"&&ie(t.payload)&&t.payload.ok===!0}};function lr(e,t){if(!ie(e)||typeof e.id!="string"||!Re.isRequestKind(e.kind))return!1;let n=Rt(e.composition);switch(e.kind){case"initialize-session":return n&&(e.mutationContext===void 0||Ct(e.mutationContext));case"get-document":case"get-style-context":return n;case"get-object-edit-context":return typeof e.key=="string"&&n&&dr(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&&pr(e.request)&&(e.request.mutationContext===void 0||Ct(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return n&&e.mutationContext===void 0||n&&Ct(e.mutationContext)}}function dr(e){if(e===void 0)return!0;if(!ie(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 pr(e){return ie(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&Rt(e.composition)&&typeof e.kind=="string"&&ie(e.target)&&(e.target.kind!=="route"||Rt(e.target.composition))&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&ie(e.params)}function Rt(e){return ie(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 ie(e){return typeof e=="object"&&e!==null}function Ct(e){return ie(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}var mr="vcp:designer:trace",fr="designer_trace",on="__VCP_DESIGNER_TRACE__";var hr=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function gr(e=globalThis){let t=e;try{if(t.localStorage?.getItem(mr)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(fr)==="1"}catch{return!1}}function ve(e,t={},n=globalThis){if(!gr(n))return;let r={type:e,timestamp:Date.now(),payload:yr(t)},o=n,i=o[on]??[];i.push(r),i.length>1e3&&i.splice(0,i.length-1e3),o[on]=i;let s=n.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function yr(e){return Tt(e,0)}function Tt(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>Tt(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e)){if(hr.test(r)){n[r]="[redacted]";continue}n[r]=Tt(o,t+1)}return n}var Le=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===_t&&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=Ve(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(Re.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(c){s(Ve(c,"WebSocket auth failed"),"failed")}return}i()}},r.onerror=c=>{if(this.socket!==r)return;let a=Ve(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(Ir(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=Ze(t),o={...t,composition:xe(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 xe(t)}request(t,n){let r=this.socket;if(!r||r.readyState!==_t||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=xr(o,t,n);return ve("bridge.request",{id:o,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:sn(n.request,"kind"),documentVersion:sn(n.request,"documentVersion")}),new Promise((s,c)=>{let a=this.resolveRequestTimeoutMs(t),u=a>0?setTimeout(()=>{let p=this.pending.get(o);p&&(this.pending.delete(o),ve("bridge.response",{id:o,kind:t,ok:!1,timedOut:!0}),p.reject(new Error(`Bridge request timed out after ${a}ms: ${t}`)))},a):null;u?.unref?.(),this.pending.set(o,{kind:t,timeout:u,resolve:p=>s(p),reject:c});try{r.send(Re.stringifyMessage(i))}catch(p){let l=Ve(p,"WebSocket send failed");this.clearPendingRequest(o),c(l),this.cleanupSocket(r,l,"failed")}})}handleAuthHandshakeMessage(t,n,r,o){try{if(Re.parseMessage(t).type==="auth-ok"){o();return}throw new Error("Bridge authentication failed")}catch(i){let s=Ve(i,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=Re.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"){ve("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}ve("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:Cr(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"?Rr(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):Er[t]??Sr}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===br||t.readyState===_t)&&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)}},br=0,_t=1,Sr=15e3,Er={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function Ve(e,t){return e instanceof Error?e:new Error(t)}function Ir(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 sn(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function Cr(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 un(e){let t="composition"in e?xe(e.composition):xe({routeId:e.routeId});return new At({composition:t,initialDocument:e.initialDocument,client:e.client})}var At=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=!cn(t.initialDocument),this.activeCompositionContext=this.sessionInitialized?{...t.initialDocument.composition}:null}async getDocument(t){this.requireBoundComposition(t);let n=cn(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=ze(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(p=>(this.objectGeneration===a&&this.editContextCache.set(i,p.data),p)).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=Ze(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 ve("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=ze(this.composition),o=this.refreshInFlight;if(o?.compositionKey===r){ve("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}ve("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`${ze(n)}\0${t}\0${vr(r)}`}rememberServerConfirmedComposition(t){!t||typeof t.routeId!="string"||(this.serverConfirmedComposition={...t})}isAcceptedComposition(t){if(ze(t)===ze(this.composition))return!0;let n=this.serverConfirmedComposition;return n!==null&&Qe(n)===Qe(an(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??an(this.composition);return Qe(t)===Qe(n)}};function cn(e){return e.version===0&&e.entries.length===0}function Rr(e){let t=e;return{...t,data:{...t.data,document:ln(t.data.document,t.composition)}}}function ln(e,t){let n=e,r=rn(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 ze(e){return JSON.stringify([e.routeId,e.templateId??null])}function vr(e){return e?JSON.stringify([e.key,e.instanceIndex??null,e.instanceCount??null]):""}function Qe(e){return JSON.stringify([e.routeId,e.effectiveTemplateId??null])}function an(e){return{routeId:e.routeId,...e.templateId?{effectiveTemplateId:e.templateId}:{}}}function Ze(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 xr(e,t,n){let r=xe(t==="execute"?Ze(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:Ze(n.request)??r}}}}}var dn="vcp-window-message",pn=1;function mn(e){return{source:dn,version:pn,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function Tr(e){try{return C(e)?X(e,"source",dn)&&X(e,"version",pn)&&D(e,"namespace")&&D(e,"channel")&&pe(e,"body")&&(!Pe(e,"sessionKey")||D(e,"sessionKey")):!1}catch{return!1}}var Pt="site-edit",fn="frame-runtime",_r="frame-announce",Ot=1,Ke=1,We=1,hn=24;function Ue(e,t={}){return mn({namespace:Pt,channel:fn,sessionKey:t.sessionKey,body:e})}function gn(){return mn({namespace:Pt,channel:_r,body:{type:"announce"}})}function yn(e){try{return!Tr(e)||e.namespace!==Pt||e.channel!==fn?!1:Lr(e.body)}catch{return!1}}function he(e){return C(e)&&D(e,"routeId")&&Ne(e,"templateId")&&me(e,["routeId","templateId"])}function et(e){return C(e)&&D(e,"routeId")&&Ne(e,"effectiveTemplateId")&&me(e,["routeId","effectiveTemplateId"])}function me(e,t){let n=new Set(t);return Reflect.ownKeys(e).every(r=>typeof r=="string"&&n.has(r))}var Pe=(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 d(e,t){return Object.getOwnPropertyDescriptor(e,t)?.value}function X(e,t,n){return pe(e,t)&&d(e,t)===n}function D(e,t){return pe(e,t)&&typeof d(e,t)=="string"}function nt(e,t){return pe(e,t)&&typeof d(e,t)=="boolean"}function F(e,t){let n=d(e,t);return pe(e,t)&&typeof n=="number"&&Number.isFinite(n)}function bn(e,t){let n=d(e,t);return pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>0}function Ne(e,t){return!Pe(e,t)||d(e,t)===void 0||D(e,t)}function Me(e,t){return!Pe(e,t)||d(e,t)===void 0||F(e,t)}function Ae(e,t){let n=d(e,t);return!Pe(e,t)||n===void 0||pe(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function U(e,t){return!Pe(e,t)||d(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 Ar(e){return C(e)&&Reflect.ownKeys(e).length===0}function tt(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 fe(e){return C(e)&&D(e,"key")&&Ae(e,"instanceIndex")&&Ae(e,"instanceCount")&&Ae(e,"textSegmentIndex")}function Nr(e){return C(e)&&D(e,"blockId")&&Ae(e,"blockIndex")&&fe(d(e,"ref"))&&$e(d(e,"rect"))&&nt(e,"targetIsSectionRoot")}function Pr(e){if(!C(e))return!1;let t=d(e,"placement"),n=d(e,"boundary");return D(e,"anchorBlockId")&&Ae(e,"positionIndex")&&fe(d(e,"anchorRef"))&&(t==="before"||t==="after")&&C(n)&&F(n,"top")&&F(n,"left")&&F(n,"width")}function $e(e){return C(e)&&["top","left","width","height"].every(t=>F(e,t))}function Sn(e){if(!C(e))return!1;let t=d(e,"rect"),n=d(e,"layout"),r=C(n)?d(n,"containingBlock"):null,o=d(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")&&D(r,"runtimeNodeId"));return X(e,"version",Ot)&&D(e,"runtimeNodeId")&&C(t)&&$e(d(t,"viewport"))&&$e(d(t,"document"))&&C(n)&&D(n,"position")&&D(n,"transform")&&i&&C(o)&&["scrollX","scrollY","viewportWidth","viewportHeight"].every(s=>F(o,s))&&pe(o,"scrollContainers")&&Or(d(o,"scrollContainers"))}function Or(e){return Array.isArray(e)&&e.every(t=>C(t)&&D(t,"runtimeNodeId")&&F(t,"scrollLeft")&&F(t,"scrollTop"))}function Nt(e){return C(e)&&(U(e,"layoutSnapshot")||Sn(d(e,"layoutSnapshot")))}function Dr(e){return C(e)&&fe(d(e,"ref"))&&pe(e,"layoutSnapshot")&&Sn(d(e,"layoutSnapshot"))&&(U(e,"childBoxes")||Br(d(e,"childBoxes")))&&(U(e,"childRects")||Mr(d(e,"childRects")))&&(U(e,"layout")||kr(d(e,"layout")))&&(U(e,"spacing")||Fr(d(e,"spacing")))}function kr(e){if(!C(e))return!1;let t=d(e,"indicatorOrientation");return D(e,"display")&&(t==="horizontal"||t==="vertical")&&Ne(e,"flexDirection")&&Ne(e,"gridAutoFlow")}function Mr(e){return Array.isArray(e)&&e.every(t=>$e(t))}function Br(e){return Array.isArray(e)&&e.every(t=>C(t)&&$e(d(t,"rect"))&&En(d(t,"margin")))}function En(e){return C(e)&&["marginTop","marginRight","marginBottom","marginLeft"].every(t=>F(e,t))}function Fr(e){return En(e)&&["paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","columnGap","rowGap"].every(t=>F(e,t))}function wr(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)||!Dr(n.value))return!1}return!0}function qr(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&(typeof d(e,t)=="string"||d(e,t)===null))}function In(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function Vr(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&pe(e,t)&&In(d(e,t)))}function zr(e){if(!C(e))return!1;let t=d(e,"priority");return D(e,"property")&&pe(e,"value")&&In(d(e,"value"))&&(!Pe(e,"priority")||t===void 0||t==="important")}function Kr(e){return C(e)?(U(e,"attributes")||qr(d(e,"attributes")))&&Ne(e,"className")&&(U(e,"style")||Vr(d(e,"style")))&&(U(e,"styleDeclarations")||Array.isArray(d(e,"styleDeclarations"))&&d(e,"styleDeclarations").every(zr)):!1}function Wr(e){return C(e)&&F(e,"x")&&F(e,"y")&&(U(e,"detailLevel")||X(e,"detailLevel","summary")||X(e,"detailLevel","full"))}function $r(e){return C(e)&&fe(d(e,"ref"))}function Ur(e){if(!C(e)||!C(d(e,"variables")))return!1;let t=d(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&D(t,n))?U(e,"stylesheets")||tt(d(e,"stylesheets")):!1}function Gr(e){if(!X(e,"type","request")||!D(e,"id")||!D(e,"kind")||!pe(e,"payload"))return!1;let t=d(e,"kind"),n=d(e,"payload");switch(t){case"hit-test-at-point":case"start-text-edit-at-point":return Wr(n);case"bridge-get-source-tree":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"get-scroll-metrics":case"clear-theme-override":return Ar(n);case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"bridge-get-source-file":return C(n)&&D(n,"path")&&he(d(n,"composition"))&&me(n,["path","composition"]);case"bridge-get-object-edit-context":return C(n)&&D(n,"key")&&he(d(n,"composition"))&&Qr(d(n,"selectionRef"))&&me(n,["key","composition","selectionRef"]);case"bridge-resolve-source-location":case"bridge-get-class-name-source":return C(n)&&D(n,"key")&&he(d(n,"composition"))&&me(n,["key","composition"]);case"scroll-to":return C(n)&&F(n,"x")&&F(n,"y");case"scroll-by":return C(n)&&F(n,"deltaX")&&F(n,"deltaY");case"set-interaction-mode":return C(n)&&nt(n,"enabled");case"set-selection-visual":return C(n)&&X(n,"version",Ke)&&fe(d(n,"ref"))&&X(n,"visible",!0);case"clear-selection-visual":return C(n)&&X(n,"version",Ke);case"set-resize-visual":return C(n)&&X(n,"version",We)&&fe(d(n,"ref"))&&X(n,"visible",!0);case"clear-resize-visual":return C(n)&&X(n,"version",We);case"set-theme-override":return Ur(n);case"get-theme-variables":return C(n)&&tt(d(n,"names"));case"compute-drop-target-at-point":return C(n)&&F(n,"x")&&F(n,"y")&&(X(n,"dragKind","insert")||X(n,"dragKind","move"))&&(U(n,"movingRef")||fe(d(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return C(n)&&(U(n,"ref")||fe(d(n,"ref")));case"apply-node-patch":return C(n)&&fe(d(n,"ref"))&&Kr(d(n,"patch"))&&(U(n,"preview")||C(d(n,"preview"))&&D(d(n,"preview"),"sessionId")&&Ae(d(n,"preview"),"revision")&&Pe(d(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return $r(n);case"bridge-initialize-session":case"bridge-get-style-context":return C(n)&&he(d(n,"composition"))&&me(n,["composition"]);case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return C(n)&&he(d(n,"composition"))&&Me(n,"minVersion")&&Me(n,"version")&&me(n,["composition","minVersion","version"]);case"bridge-execute":{if(!C(n))return!1;let r=d(n,"request"),o=d(n,"composition"),i=C(r)?d(r,"composition"):null;return!he(o)||!C(r)||!he(i)?!1:te({routeId:o.routeId,...o.templateId?{effectiveTemplateId:o.templateId}:{}})===te({routeId:i.routeId,...i.templateId?{effectiveTemplateId:i.templateId}:{}})&&me(n,["composition","request"])}case"bridge-subscribe":case"bridge-unsubscribe":return C(n)&&D(n,"subscriptionId")&&he(d(n,"composition"))&&me(n,["subscriptionId","composition"]);default:return!1}}function Hr(e){return X(e,"type","response")&&D(e,"id")&&nt(e,"ok")&&(U(e,"error")||D(e,"error"))}function jr(e){if(!C(e))return!1;let t=d(e,"type");if(typeof t!="string"||!et(d(e,"composition"))||!D(e,"siteId")||!D(e,"at"))return!1;switch(t){case"site-edit.document.changed":return D(e,"snapshotId")&&F(e,"version");case"site-edit.operation.planned":return D(e,"operationId")&&D(e,"baseSnapshotId")&&tt(d(e,"changedFiles"));case"site-edit.operation.completed":return C(d(e,"result"));case"site-edit.operation.failed":return D(e,"requestId")&&C(d(e,"error"));case"site-edit.capability.changed":return tt(d(e,"keys"));case"site-edit.graph.invalidated":return!0;case"site-edit.graph.ready":return F(e,"version");case"site-edit.graph.error":return D(e,"message");default:return!1}}var Yr=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]),Cn=new Set(["e","s","se"]);function Xr(e,t){if(U(e,"resizeSession"))return!0;let n=d(e,"resizeSession");if(!C(n))return!1;let r=d(e,"pointerId"),o=d(n,"pointerId"),i=d(n,"phase"),s=d(n,"edge"),c=t==="pointer-down"?"start":t==="pointer-up"?"commit":t==="pointer-cancel"?"cancel":null;return d(n,"version")===1&&i===c&&D(n,"sessionId")&&String(d(n,"sessionId")).length>0&&typeof r=="number"&&Number.isInteger(r)&&typeof o=="number"&&Number.isInteger(o)&&r===o&&typeof s=="string"&&Cn.has(s)&&d(e,"resizeEdge")===s&&fe(d(n,"ref"))&&["startWidth","startHeight","width","height"].every(a=>F(n,a))}function Jr(e){if(!X(e,"type","event")||!D(e,"kind")||!C(d(e,"payload")))return!1;let t=d(e,"kind"),n=d(e,"payload");switch(t){case"text-edit-commit":case"text-edit-cancel":case"text-edit-exit":case"text-edit-input":return fe(d(n,"ref"))&&Ne(n,"value")&&(U(n,"hit")||Nt(d(n,"hit")));case"node-bounds-change":return Nt(d(n,"hit"));case"geometry-batch":{let r=d(n,"reason");return bn(n,"sequence")&&F(n,"sourceEventAt")&&F(n,"captureStartedAt")&&F(n,"capturedAt")&&(r==="scroll"||r==="resize"||r==="mutation")&&wr(d(n,"snapshots"))}case"bridge-event":{let r=d(n,"event"),o=d(n,"composition");return!jr(r)||!et(o)?!1:D(n,"subscriptionId")&&te(o)===te(r.composition)}case"route-ready":return et(d(n,"composition"))&&D(n,"editEngineVersion")&&F(n,"sequence")&&F(n,"version");case"bridge-status":{let r=d(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&et(d(n,"composition"))&&F(n,"sequence")&&Me(n,"attempt")&&Me(n,"retryInMs")&&Ne(n,"messageKey")}case"scroll":{let r=d(n,"metrics");return C(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(o=>F(r,o))}default:return Yr.has(t)&&F(n,"clientX")&&F(n,"clientY")&&Me(n,"buttons")&&Me(n,"pointerId")&&(U(n,"hoverVisualOwned")||nt(n,"hoverVisualOwned"))&&(U(n,"resizeEdge")||D(n,"resizeEdge")&&Cn.has(d(n,"resizeEdge")))&&Xr(n,t)&&(d(n,"hit")===null||Nt(d(n,"hit")))&&(U(n,"section")||d(n,"section")===null||Nr(d(n,"section")))&&(U(n,"sectionGap")||d(n,"sectionGap")===null||Pr(d(n,"sectionGap")))}}function Qr(e){if(e===void 0)return!0;if(!C(e)||!me(e,["key","instanceIndex","instanceCount"])||!D(e,"key")||d(e,"key").length===0||!Ae(e,"instanceIndex")||!U(e,"instanceCount")&&!bn(e,"instanceCount"))return!1;let t=d(e,"instanceIndex"),n=d(e,"instanceCount");return!(typeof t=="number"&&typeof n=="number"&&t>=n)}function Lr(e){if(!C(e))return!1;switch(d(e,"type")){case"request":return Gr(e);case"response":return Hr(e);case"event":return Jr(e);default:return!1}}var Ft="vcp-site-edit:route-ready",wt="vcp-site-edit:bridge-status",qn="SITE_EDIT_COMPOSITION_RENDER_MISMATCH",Zr=80,eo=120,to=160,Vn="data-vcp-designer-hover-visual",no=1e3,ro="data-vcp-ui-component",zn="data-vcp-theme-preview",Rn="::repeat-item#",rt="components/ui",Dt="data-site-block-id",kt="data-vcp-runtime-site-block-id",oo=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),io=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function so(e,t){let n=Array.from(e.querySelectorAll("[data-vcp-edit-key]"));for(let c of n)c.getAttribute(kt)==="true"&&(c.removeAttribute(Dt),c.removeAttribute(kt));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(Dt)?.trim())continue;let p=c.getAttribute("data-vcp-edit-key")?.trim();if(!p)continue;let l=s.get(p)??0;s.set(p,l+1);let y=`vcp-runtime:${encodeURIComponent(p)}:${l}`;c.setAttribute(Dt,y),c.setAttribute(kt,"true")}}function Kn(e,t=""){let n=Hn(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,o=r.startsWith("/")?r:`/${r}`;return o==="/"?"/":o.replace(/\/+$/,"")}function co(e){let t=Kn(e.pathname,e.basePath??""),n=new URLSearchParams(e.search??"").getAll("template_id");return n.length===0?{routeId:t}:{routeId:t,templateId:n[n.length-1]}}function we(e){return JSON.stringify([e.routeId,e.templateId??null])}function ao(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 uo(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 us(e=window,t={}){let n=uo(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=lo({bridgeUrl:n,options:t}),o=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(o?.started){if(po(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},s,c=()=>e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__===s,a=t.create_client??(m=>new Le({url:m,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??wo,p=()=>{i.retryTimer&&(e.clearTimeout(i.retryTimer),i.retryTimer=void 0)},l=()=>co({pathname:e.location.pathname,search:e.location.search,basePath:t.basePath}),y=()=>we(l()),f=m=>{qo(e,{...m,composition:m.state==="ready"?m.composition:{routeId:m.composition.routeId},sequence:m.sequence??i.routeSequence})},_=m=>{i.currentDocument=m,i.currentEntriesByKey=new Map((m?.entries??[]).map(E=>[E.key,E])),so(e.document,!!m)},v=()=>{i.unsubscribeConnectionStatus?.(),i.unsubscribeConnectionStatus=void 0,i.unsubscribeDocument?.(),i.unsubscribeDocument=void 0},P=(m,E)=>{if(i.disposed||E!==i.routeSequence)return!1;try{return m===y()}catch{return!1}},A=async(m,E,O)=>{let R=i.activeBridge;if(!R)return null;let q=await R.getDocument(m);return P(E,O)&&_(q.data),q.data},k=()=>{v(),_(null);let m=i.activeBridge;i.activeBridge=null,m&&e.__VCP_SITE_EDIT__===m&&delete e.__VCP_SITE_EDIT__;let E=i.activeClient;i.activeClient=null,E?.disconnect()},Y=m=>m===s.compositionKey&&!!i.activeBridge&&!!(i.currentDocument&&s.composition&&zo(i.currentDocument,te(s.composition)))&&Vo(i.activeClient),W=m=>Math.min(no*2**Math.max(0,m),8e3),I=(m,E,O,R)=>{if(i.disposed)return;p();let q=W(R);f({state:"reconnecting",composition:m,attempt:R,retryInMs:q,messageKey:"studio.status.previewBridgeConnecting"}),i.retryTimer=e.setTimeout(()=>{i.retryTimer=void 0,!(i.disposed||O!==i.routeSequence||!P(E,O))&&Z(R+1).catch(ee=>{let G;try{G=y()}catch{return}if(E===G){if(Be(ee)){f({state:"reload-required",composition:m,attempt:R,messageKey:"studio.errors.previewBridgeReloadRequired"});return}I(m,E,i.routeSequence,R+1)}})},q)},J=(m,E,O)=>{if(!P(E,O)||i.activeClient===null)return;let R=i.activeClient;v(),_(null);let q=i.activeBridge;i.activeBridge=null,q&&e.__VCP_SITE_EDIT__===q&&delete e.__VCP_SITE_EDIT__,i.activeClient=null,R.disconnect(),I(m,E,O,0)},se=(m,E,O,R)=>{if(!(!P(E,O)||i.activeClient===null)){if(Be(R.message)){k(),p(),f({state:"reload-required",composition:m,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}J(m,E,O)}},ne=m=>{let E;try{E=l()}catch{return}let O=we(E),R=i.routeSequence;if(!(!P(O,R)||i.activeClient===null)){if(Be(m)){k(),p(),f({state:"reload-required",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if($o(m)){J(E,O,R);return}Un(m)&&se(E,O,R,{state:"failed",message:Te(m,"Site edit bridge request failed")})}};i.cleanupFrameRuntime=yo(e,{getCurrentDocument:()=>i.currentDocument,getDocumentEntry:m=>i.currentEntriesByKey.get(m)??null,setCurrentDocument:_,onBridgeRequestError:m=>{ne(m)}});let L=async()=>Z(0),Z=async m=>{if(i.disposed)return;let E=l(),O=we(E);if(Y(O))return;let R=i.syncInFlight;if(R?.compositionKey===O)return R.promise;let q=i.routeSequence+1,ee=re(E,O,q,m);i.syncInFlight={compositionKey:O,sequence:q,promise:ee};try{await ee}finally{i.syncInFlight?.promise===ee&&(i.syncInFlight=null)}},re=async(m,E,O,R)=>{i.routeSequence=O,p(),k(),f({state:R>0?"reconnecting":"connecting",composition:m,attempt:R,messageKey:R>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let q=a(n),ee=!1;i.activeClient=q,i.unsubscribeConnectionStatus=q.subscribeConnectionStatus?.(G=>{ee&&(G.state==="closed"||G.state==="failed")&&se(m,E,O,G)});try{if(await q.connect(),!P(E,O)){q.disconnect();return}let G=un({composition:m,client:q,initialDocument:go(m)});if(i.activeBridge=G,i.activeClient=q,i.unsubscribeDocument=G.subscribe(h=>{if(!(!s.composition||te(h.composition)!==te(s.composition))){if(h.type==="site-edit.snapshot.changed"){A(m,E,O).catch(()=>{});return}h.type==="site-edit.document.changed"&&i.currentDocument&&h.version>i.currentDocument.version?A(m,E,O).catch(()=>{}):h.type==="site-edit.graph.invalidated"&&(_(null),x())}}),c()&&(s.routeId=m.routeId,s.composition=void 0,s.compositionKey=E),t.launch_id){let h=new URL(n);h.protocol=h.protocol==="wss:"?"https:":"http:",h.pathname=h.pathname.replace(/\/bridge$/,"/health"),h.search="";let $=await e.fetch(h,{cache:"no-store"}),z=await $.json();if(!$.ok||!z.ok||z.launch?.launchId!==t.launch_id)throw new Error("SITE_EDIT_RUNTIME_RELOAD_REQUIRED: preview navigation belongs to a stale launch")}let g=await G.initializeSession({composition:m}),S=g.data.document;if((m.templateId!==void 0?te(g.composition)!==E:g.composition.effectiveTemplateId!==void 0)||te(S.composition)!==te(g.composition))throw new Error(`${qn}: initialize response does not match requested selector`);if(!P(E,O)){q.disconnect();return}_(S),c()&&(e.__VCP_SITE_EDIT__=G),ee=!0,c()&&(s.composition=g.composition),f({state:"ready",composition:g.composition,attempt:R,messageKey:"studio.status.previewReady"}),ao(e,{documentVersion:S?.version??0,routeId:m.routeId,versions:t.runtime_versions}),S&&$n(e,{composition:g.composition,editEngineVersion:t.runtime_versions?.engine??"unknown",sequence:O,version:S.version})}catch(G){if(!P(E,O)){q.disconnect();return}if(v(),i.activeClient===q&&(i.activeClient=null),i.activeBridge&&e.__VCP_SITE_EDIT__===i.activeBridge&&delete e.__VCP_SITE_EDIT__,i.activeBridge=null,q.disconnect(),_(null),!P(E,O))return;throw f({state:Be(G)?"reload-required":"failed",composition:m,attempt:R,messageKey:Be(G)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),G}},ce=m=>{if(i.disposed)return;let E;try{E=l()}catch{f({state:"failed",composition:{routeId:Kn(e.location.pathname,t.basePath||"")},attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}let O=we(E);if(Be(m)){p(),f({state:"reload-required",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}if(Ko(m)){f({state:"failed",composition:E,attempt:0,messageKey:"studio.errors.previewBridgeDisconnected"});return}I(E,O,i.routeSequence,0)},x=()=>{i.syncScheduled||i.disposed||(i.syncScheduled=!0,u(()=>{i.syncScheduled=!1,!i.disposed&&L().catch(m=>ce(m))}))},M=()=>{i.disposed||(i.disposed=!0,i.syncScheduled=!1,i.syncInFlight=null,p(),i.routeSequence+=1,i.unbindRouteChange?.(),i.unbindRouteChange=void 0,i.unbindBootstrapLifecycle?.(),i.unbindBootstrapLifecycle=void 0,i.cleanupFrameRuntime(),k(),c()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};s={started:!0,signature:r,syncRoute:L,cleanup:M},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,i.unbindBootstrapLifecycle=fo(e,M);let w=l();if(i.unbindRouteChange=Fo(e,()=>{let m=l(),E=m.routeId===w.routeId&&m.templateId!==w.templateId;if(w=m,E){i.routeSequence+=1,k(),f({state:"connecting",composition:{routeId:m.routeId},attempt:0}),e.location.reload();return}x()},y),t.defer_initial_sync){x();return}await L()}function lo(e){return{basePath:Hn(e.options.basePath??""),bridgeUrl:e.bridgeUrl,launchId:e.options.launch_id??null,snapshotId:e.options.snapshot_id??null,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:mo(e.options.bridge_session_key)}}function po(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function mo(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 fo(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),ho(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function ho(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function go(e){return{siteId:"preview",snapshotId:"preview",composition:{routeId:e.routeId},version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function yo(e=window,t={}){let n=null,r=null,o=null,i=null,s=null,c=null,a=0,u=null,p=null,l=null,y=null,f=null,_=0,v=new Map,P=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,A=()=>{n?.(),n=null,r=null},k=()=>{let g=e.parent;if(!(!g||g===e))try{g.postMessage(gn(),"*")}catch{}},Y=()=>{o?.(),o=null,i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null},W=(g,S,h)=>{let $=u?.sessionKey!==g||u?.sourceWindow!==S||u?.targetOrigin!==h;u={sessionKey:g,sourceWindow:S,targetOrigin:h},$&&(a=0,y=null,f=null)},I=(g,S)=>{let h=e.parent&&e.parent!==e?e.parent:null;return!h||S!==h?!1:!P||g===P},J=()=>{for(let g of v.values())g();v.clear()},se=g=>JSON.stringify([te(g.composition),g.editEngineVersion,g.sequence,g.version]),ne=()=>!l||l.state==="ready",L=g=>JSON.stringify([g.state,te(g.composition),g.sequence,g.attempt??null,g.retryInMs??null,g.messageKey??null]),Z=g=>{if(!ne())return;let S=se(g);y!==S&&(i?.(),i=null,s?.cleanup(),s=null,c?.cleanup(),c=null,m({kind:"route-ready",payload:{composition:g.composition,editEngineVersion:g.editEngineVersion,sequence:g.sequence,version:g.version}}),u&&(y=S))},re=g=>{let S=L(g);f!==S&&(g.state!=="ready"&&(y=null,p=null),m({kind:"bridge-status",payload:g}),u&&(f=S))},ce=g=>{p=g,Z(g)},x=g=>{l=g,re(g)},M=()=>{p&&Z(p)},w=()=>{l&&re(l)},m=g=>{u&&u.sourceWindow.postMessage(Ue({type:"event",...g},{sessionKey:u.sessionKey}),u.targetOrigin)},E=(g,S,h,$)=>{let z=t.getCurrentDocument?.()??null,Q=S.rawTarget&&typeof S.rawTarget.getAttribute=="function"?S.rawTarget:null,T=Q??Qo(e.document,S.clientX,S.clientY),H=Q?ht(Q):null,ae=H?.getAttribute("data-vcp-edit-key")??"",ue=S.resizeSession?null:H&&Wt(H,z,ae)?H:Ye(e.document,S.clientX,S.clientY,z),le=g==="pointer-move"&&Number(S.buttons??0)===0?"rect-only":"full",oe=ue?ge(ue,h==="full"?ye(e.document,ue,z):pt(e.document,ue,z),t.getDocumentEntry,h,void 0,le):null,Se=Lo(e.document,T,z),_e=ei(e.document,S,z,t.getDocumentEntry);$&&oe&&(g==="pointer-click"||g==="pointer-double-click")&&($.preventDefault(),$.stopPropagation(),typeof $.stopImmediatePropagation=="function"&&$.stopImmediatePropagation()),m({kind:g,payload:{clientX:S.clientX,clientY:S.clientY,buttons:Number(S.buttons??0),pointerId:S.pointerId,hoverVisualOwned:S.hoverVisualOwned,resizeEdge:S.resizeEdge,resizeSession:S.resizeSession,hit:oe,section:Se,sectionGap:_e}})},O=g=>{m({kind:"pointer-leave",payload:{clientX:g?.clientX??0,clientY:g?.clientY??0,buttons:Number(g?.buttons??0),hit:null,section:null,sectionGap:null}})},R=(g,S,h)=>{Y(),u={sessionKey:g,sourceWindow:S,targetOrigin:h};let $=zi(e.document),z=bo(e,t.getCurrentDocument),Q=null,T=null,H=null,ae=null,ue=null,le=null,oe=!1,Se=()=>{ue!==null&&(e.clearTimeout(ue),ue=null)},_e=()=>{H!==null&&(lt(e,H),H=null),Q=null},Ie=()=>{le!==null&&(e.clearTimeout(le),le=null)},bt=()=>{H=null;let b=Q;Q=null,b&&E("pointer-move",b,"summary")},N=b=>{Se(),T=b,Q=b,H===null&&(H=ut(e,bt))},B=b=>{T&&N({...T,rawTarget:null,hoverVisualOwned:b&&!oe?z?.updateAtPoint(T.clientX,T.clientY)??!1:!1})},V=()=>B(!0),Ce=()=>B(!1),Ee=e.document.documentElement,St=typeof Ee.addEventListener=="function"?Ee:e.document,Gt=b=>{if(c?.update(b)){b.preventDefault();return}N({clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),rawTarget:b.target,hoverVisualOwned:oe?!1:z?.update(b.target)??!1})},Ht=b=>{let K=Po(b.target),qe=K?c?.begin(b,K):null;qe&&(b.target?.setPointerCapture?.(b.pointerId),b.preventDefault(),b.stopPropagation()),E("pointer-down",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:Number(b.pointerId),resizeEdge:K,resizeSession:qe??void 0},"full",b)},jt=b=>{let K=c?.finish(b,"commit")??null;if(K){E("pointer-up",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:Number(b.pointerId),resizeEdge:K.edge,resizeSession:K},"summary",b);return}E("pointer-up",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"summary",b)},Yt=b=>{let K=c?.finish(b,"cancel")??null;E("pointer-cancel",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:K?.pointerId,resizeEdge:K?.edge,resizeSession:K??void 0},"summary",b)},Xt=b=>{let K=c?.finish(b,"cancel")??null;K&&E("pointer-cancel",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons),pointerId:K.pointerId,resizeEdge:K.edge,resizeSession:K},"summary",b)},Jt=b=>{E("pointer-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},Qt=b=>{E("pointer-double-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},Et=b=>{if(b&&b.target!==St&&b.target!==Ee)return;let K=b?{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)}:T;if(b&&K&&K.clientX>0&&K.clientX<e.innerWidth&&K.clientY>0&&K.clientY<e.innerHeight){V();return}if(_e(),b){Se(),ue=e.setTimeout(()=>{ue=null,T=null,Ie(),oe=!1,O(K??void 0)},eo);return}Se(),Ie(),oe=!1,T=null,z?.clear(),O(K??void 0)},Lt=()=>Et(),sr=()=>{ae=null,m({kind:"scroll",payload:{metrics:ct(e)}}),Ce()},De=()=>{oe=!0,z?.clear(),Ie(),T&&(le=e.setTimeout(()=>{le=null,oe=!1,V()},to)),ae===null&&(ae=ut(e,sr))};e.document.addEventListener("pointerdown",Ht,!0),e.document.addEventListener("pointermove",Gt,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",jt,!0),e.document.addEventListener("pointercancel",Yt,!0),e.document.addEventListener("lostpointercapture",Xt,!0),e.document.addEventListener("click",Jt,!0),e.document.addEventListener("dblclick",Qt,!0),e.addEventListener("scroll",De,{passive:!0}),e.document.addEventListener("scroll",De,{capture:!0,passive:!0}),e.addEventListener("resize",V,{passive:!0}),e.addEventListener("blur",Lt),e.document.addEventListener("load",V,!0),St.addEventListener("pointerleave",Et,!0);let Je=e.visualViewport;Je?.addEventListener?.("resize",V,{passive:!0}),Je?.addEventListener?.("scroll",De,{passive:!0});let Zt=e.ResizeObserver,en=typeof Zt=="function"?new Zt(V):null;en?.observe(Ee);let tn=e.MutationObserver,nn=typeof tn=="function"?new tn(b=>{b.some(qe=>qe.type!=="attributes"||qe.attributeName!==Vn)&&V()}):null;nn?.observe(Ee,{attributes:!0,childList:!0,subtree:!0}),o=()=>{_e(),Se(),Ie(),oe=!1,T=null,z?.cleanup(),en?.disconnect(),nn?.disconnect(),ae!==null&&(lt(e,ae),ae=null),$(),e.document.removeEventListener("pointerdown",Ht,!0),e.document.removeEventListener("pointermove",Gt,!0),e.document.removeEventListener("pointerup",jt,!0),e.document.removeEventListener("pointercancel",Yt,!0),e.document.removeEventListener("lostpointercapture",Xt,!0),e.document.removeEventListener("click",Jt,!0),e.document.removeEventListener("dblclick",Qt,!0),e.removeEventListener("scroll",De),e.document.removeEventListener("scroll",De,!0),e.removeEventListener("resize",V),e.removeEventListener("blur",Lt),e.document.removeEventListener("load",V,!0),St.removeEventListener("pointerleave",Et,!0),Je?.removeEventListener?.("resize",V),Je?.removeEventListener?.("scroll",De)}},q=g=>{let S=g.detail;S?.composition?.routeId&&ce(S)},ee=g=>{let S=g.detail;S?.state&&x(S)},G=g=>{let S=g.data;if(!yn(S)||S.body.type!=="request"||S.body.kind!=="apply-node-patch"&&S.body.kind!=="get-hit-by-ref"&&S.body.kind!=="get-path-by-ref"&&S.body.kind!=="get-scroll-metrics"&&S.body.kind!=="scroll-to"&&S.body.kind!=="scroll-by"&&S.body.kind!=="set-interaction-mode"&&S.body.kind!=="set-selection-visual"&&S.body.kind!=="clear-selection-visual"&&S.body.kind!=="set-resize-visual"&&S.body.kind!=="clear-resize-visual"&&S.body.kind!=="set-theme-override"&&S.body.kind!=="clear-theme-override"&&S.body.kind!=="get-theme-variables"&&S.body.kind!=="compute-drop-target-at-point"&&S.body.kind!=="observe-node-bounds"&&S.body.kind!=="clear-node-bounds-observer"&&S.body.kind!=="restore-text-edit"&&S.body.kind!=="clear-text-edit-rollback"&&S.body.kind!=="start-text-edit-at-point"&&S.body.kind!=="hit-test-at-point"&&!An(S.body))return;let h=S.body,$=typeof S.sessionKey=="string"?S.sessionKey:null,z=g.source,Q=g.origin;if(!$||!Q||!z||typeof z.postMessage!="function"||!I($,z))return;if(u){if(u.sourceWindow!==z||u.targetOrigin!==Q)return;u.sessionKey!==$&&(A(),Y(),J(),u=null)}W($,z,Q),w(),M();let T=H=>{let ae=typeof h.id=="string"?h.id:"unknown";z.postMessage(Ue({id:ae,...H},{sessionKey:$}),Q)};try{if(An(h)){ko({message:h,sendEvent:N=>{z.postMessage(Ue({type:"event",...N},{sessionKey:$}),Q)},sendResponse:T,subscriptions:v,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,nextRouteReadySequence:()=>_+=1,windowLike:e});return}if(h.kind==="apply-node-patch"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for patch target"});return}let B=h.payload.preview,V=B?Ti(B.sessionId,h.payload.ref):null;if(V&&B){let Ce=Ge.get(V)??-1;if(B.revision<Ce){T({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,stale:!0,latestRevision:Ce}});return}if(B.revision===Ce){T({type:"response",ok:!0,result:{applied:!1,appliedRevision:B.revision,duplicate:!0,latestRevision:Ce}});return}}if(vi(N,h.payload.patch),V&&B&&_i(V,B.revision),B?.responseDetail==="none"){T({type:"response",ok:!0,result:{applied:!0,appliedRevision:B.revision}});return}T({type:"response",ok:!0,result:ge(N,ye(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,B?.responseDetail??"full")});return}if(h.kind==="get-hit-by-ref"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for hit target"});return}T({type:"response",ok:!0,result:ge(N,ye(e.document,N,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(h.kind==="get-path-by-ref"){let N=be(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!N){T({type:"response",ok:!1,error:"No editable element found for path target"});return}let B=[],V=N;for(;V;)V.getAttribute("data-vcp-edit-key")&&B.push(ge(V,ye(e.document,V,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),V=V.parentElement;T({type:"response",ok:!0,result:B.reverse()});return}if(h.kind==="restore-text-edit"||h.kind==="clear-text-edit-rollback"){let N=h.payload.ref;if(h.kind==="clear-text-edit-rollback"){r&&Nn(r.ref,N)&&(r=null),T({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!Nn(r.ref,N)){T({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let B=Go(e.document,r,t.getCurrentDocument?.()??null);r=null,T(B?{type:"response",ok:!0,result:{restored:!0}}:{type:"response",ok:!1,error:"Failed to restore text edit snapshot"});return}if(h.kind==="get-scroll-metrics"){T({type:"response",ok:!0,result:ct(e)});return}if(h.kind==="scroll-to"){let N=Number(h.payload.x),B=Number(h.payload.y);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:N,top:B}),T({type:"response",ok:!0,result:ct(e)});return}if(h.kind==="scroll-by"){let N=Number(h.payload.deltaX),B=Number(h.payload.deltaY);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:N,top:B}),T({type:"response",ok:!0,result:{...ct(e),scrolled:!0}});return}if(h.kind==="set-interaction-mode"){h.payload.enabled?R($,z,Q):u?.sourceWindow===z&&u.targetOrigin===Q&&u.sessionKey===$&&(A(),Y()),T({type:"response",ok:!0,result:{interactionEnabled:h.payload.enabled}});return}if(h.kind==="set-selection-visual"){let N=!1;o?s?(N=s.setRef(h.payload.ref),N||(s.cleanup(),s=null)):(s=Eo(e,h.payload.ref,t.getCurrentDocument),N=!!s):(s?.cleanup(),s=null),T({type:"response",ok:!0,result:{version:Ke,active:N}});return}if(h.kind==="clear-selection-visual"){s?.cleanup(),s=null,T({type:"response",ok:!0,result:{version:Ke,active:!1}});return}if(h.kind==="set-resize-visual"){c?.cleanup(),c=null,o&&(c=Oo(e,h.payload.ref,t.getCurrentDocument,({clientX:N,clientY:B,session:V})=>{m({kind:"pointer-cancel",payload:{clientX:N,clientY:B,buttons:0,pointerId:V.pointerId,resizeEdge:V.edge,resizeSession:V,hit:null,section:null,sectionGap:null}})})),T({type:"response",ok:!0,result:{version:We,active:!!c}});return}if(h.kind==="clear-resize-visual"){c?.cleanup(),c=null,T({type:"response",ok:!0,result:{version:We,active:!1}});return}if(h.kind==="set-theme-override"){Ai(e.document,h.payload),T({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(h.kind==="clear-theme-override"){Ni(e.document),T({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(h.kind==="get-theme-variables"){T({type:"response",ok:!0,result:Pi(e.document,h.payload.names)});return}if(h.kind==="compute-drop-target-at-point"){let N=Number(h.payload?.x),B=Number(h.payload?.y);if(!Number.isFinite(N)||!Number.isFinite(B)){T({type:"response",ok:!1,error:"Invalid drop target point"});return}T({type:"response",ok:!0,result:bi(e,N,B,h.payload.dragKind,h.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(h.kind==="observe-node-bounds"){let N=h.payload.ref;if(!N){T({type:"response",ok:!1,error:"Missing bounds observer target"});return}let B=be(e.document,N,t.getCurrentDocument?.()??null);if(!B){T({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}i?.(),i=pi(e,B,N,t.getCurrentDocument,(V,Ce,Ee)=>{a+=1,m({kind:"geometry-batch",payload:{sequence:a,sourceEventAt:Ee.sourceEventAt,captureStartedAt:Ee.captureStartedAt,capturedAt:Ee.capturedAt,reason:V,snapshots:[Ce]}})}),T({type:"response",ok:!0,result:{observing:!0}}),m({kind:"node-bounds-change",payload:{hit:ge(B,N,t.getDocumentEntry,"summary",e)}});return}if(h.kind==="clear-node-bounds-observer"){i?.(),i=null,T({type:"response",ok:!0,result:{cleared:!0}});return}if(h.kind!=="hit-test-at-point"&&h.kind!=="start-text-edit-at-point")return;let H=Number(h.payload?.x),ae=Number(h.payload?.y);if(!Number.isFinite(H)||!Number.isFinite(ae)){T({type:"response",ok:!1,error:"Invalid text edit point"});return}let ue=h.kind==="hit-test-at-point"?Ye(e.document,H,ae,t.getCurrentDocument?.()??null):jo(e.document,H,ae,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!ue){T({type:"response",ok:!1,error:h.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let le=h.kind==="start-text-edit-at-point"?ue:null,oe=h.kind==="hit-test-at-point"?ue:le.element,Se=h.payload.detailLevel??"full",_e=Se==="full"?ye(e.document,oe,t.getCurrentDocument?.()??null):pt(e.document,oe,t.getCurrentDocument?.()??null),Ie=le&&typeof le.textSegmentIndex=="number"?{..._e,textSegmentIndex:le.textSegmentIndex}:_e,bt=ge(oe,Ie,t.getDocumentEntry,Se);if(h.kind==="hit-test-at-point"){T({type:"response",ok:!0,result:bt});return}A(),n=Mi(e,oe,Ie,N=>{z.postMessage(Ue({type:"event",...N},{sessionKey:$}),Q)},{...le?.textNode?{textNode:le.textNode}:{},onCommitSnapshot:N=>{r=N}}),T({type:"response",ok:!0,result:{ref:Ie}})}catch(H){T({type:"response",ok:!1,error:H instanceof Error?H.message:"Failed to start text edit"})}};return e.addEventListener("message",G),e.addEventListener(Ft,q),e.addEventListener(wt,ee),k(),()=>{A(),Y(),u=null,J(),e.removeEventListener("message",G),e.removeEventListener(Ft,q),e.removeEventListener(wt,ee)}}function bo(e,t){let n=e.document,r=n.head??n.documentElement;if(typeof r?.appendChild!="function")return null;let o=Vn,i="data-vcp-designer-selection-visual",s=n.createElement("style");s.setAttribute("data-vcp-designer-hover-visual-style","true"),s.textContent=`
|
|
2
2
|
[${o}="true"]:not([${i}="true"]) {
|
|
3
3
|
outline: 1px dashed #4f6bff !important;
|
|
4
4
|
outline-offset: -1px !important;
|