@vcp-dev/site-edit-bridge 0.6.5 → 0.6.6
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 +31 -1
- package/dist/client.js +1 -1
- package/dist/designer-trace.js +1 -1
- package/dist/index.js +33 -3
- package/dist/next-dev-server.js +3 -3
- package/dist/server.d.ts +1 -0
- package/dist/server.js +1 -1
- package/dist/window-message.d.ts +121 -1
- package/dist/window-message.js +1 -1
- package/package.json +4 -4
package/dist/auto-bootstrap.js
CHANGED
|
@@ -1 +1,31 @@
|
|
|
1
|
-
function Ue(e){if(!zt(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,h=e.tokens[u];if(typeof h!="string")throw new Error(`Missing compact document token ${u}`);let y=`${a===null?"":o(a)}${h}`;return t.set(i,y),y};return{siteId:e.siteId,snapshotId:e.snapshotId,routeId:e.routeId,version:e.version,pageComposition:e.pageComposition,entries:e.entries.map((i,s)=>{let[c,a,u]=i,h=u===void 0?void 0:n[u];if(u!==void 0&&!h)throw new Error(`Missing page composition unit ${u}`);return{key:o(c),...h?{pageCompositionUnitKey:h}:{},operationSummary:$t(a),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function $t(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function zt(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"||typeof t.routeId!="string"||!Number.isInteger(t.version)||t.version<0||!at(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||ce(o[0])&&o[0]<i)&&ce(o[1])&&o[1]<t.tokens.length)||!t.entries.every(o=>Array.isArray(o)&&(o.length===2||o.length===3)&&ce(o[0])&&o[0]<n.length&&ce(o[1])&&o[1]<=15&&(o.length===2||ce(o[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(o=>Array.isArray(o)&&o.length===2&&ce(o[0])&&o[0]<t.entries.length&&at(o[1]))}function at(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ce(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}var ne=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(typeof t=="object"&&t!==null&&"payload"in t&&typeof t.payload=="object"&&t.payload!==null){let n=t.payload,r=typeof n.id=="string"?n.id:"unknown",o=e.isRequestKind(n.kind)?n.kind:"get-document";return{id:r,kind:o}}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!j(t)||typeof t.type!="string"?!1:t.type==="request"?e.isRequestPayload(t.payload,n):t.type==="response"||t.type==="error"?j(t.payload)&&typeof t.payload.id=="string":t.type==="event"?j(t.payload)&&j(t.payload.event):t.type==="auth"?j(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"?j(t.payload)&&t.payload.ok===!0:!1}static isRequestPayload(t,n={}){if(!j(t)||typeof t.id!="string"||!e.isRequestKind(t.kind))return!1;switch(t.kind){case"initialize-session":return typeof t.routeId=="string"&&(t.mutationContext===void 0||We(t.mutationContext));case"get-document":case"get-style-context":return typeof t.routeId=="string";case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return typeof t.key=="string"&&(t.routeId===void 0||typeof t.routeId=="string");case"get-history-status":return t.mutationContext===void 0;case"get-source-tree":return!0;case"get-source-file":return typeof t.path=="string";case"execute":return Gt(t.request)&&(t.request.mutationContext===void 0||We(t.request.mutationContext))&&(n.validateOperationRequest?.(t.request)??!0);case"undo":case"redo":return t.mutationContext===void 0||We(t.mutationContext)}}};function j(e){return typeof e=="object"&&e!==null}function Gt(e){return j(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&(e.routeId===void 0||typeof e.routeId=="string")&&typeof e.kind=="string"&&j(e.target)&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&j(e.params)}function We(e){return Ht(e)}function Ht(e){return j(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:!1}var Yt="vcp:designer:trace",Xt="designer_trace",ut="__VCP_DESIGNER_TRACE__";var Jt=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function Qt(e=globalThis){let t=e;try{if(t.localStorage?.getItem(Yt)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(Xt)==="1"}catch{return!1}}function Z(e,t={},n=globalThis){if(!Qt(n))return;let r={type:e,timestamp:Date.now(),payload:Zt(t)},o=n,i=o[ut]??[];i.push(r),i.length>200&&i.splice(0,i.length-200),o[ut]=i;let s=n.console?.debug;typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function Zt(e){return je(e,0)}function je(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>je(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e)){if(Jt.test(r)){n[r]="[redacted]";continue}n[r]=je(o,t+1)}return n}var xe=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===we&&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=me(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(ne.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(c){s(me(c,"WebSocket auth failed"),"failed")}return}i()}},r.onerror=c=>{if(this.socket!==r)return;let a=me(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(nn(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){return this.request("get-document",{routeId:t})}initializeSession(t){return this.request("initialize-session",t)}getHistoryStatus(){return this.request("get-history-status",{})}getStyleContext(t){return this.request("get-style-context",{routeId:t})}getObjectEditContext(t,n){return this.request("get-object-edit-context",{key:t,routeId:n})}getClassNameSource(t,n){return this.request("get-class-name-source",{key:t,routeId:n})}getSourceTree(){return this.request("get-source-tree",{})}getSourceFile(t){return this.request("get-source-file",t)}resolveSourceLocation(t){return this.request("resolve-source-location",t)}execute(t,n){return this.request("execute",{request:t})}undo(t){return this.request("undo",{})}redo(t){return this.request("redo",{})}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}request(t,n){let r=this.socket;if(!r||r.readyState!==we||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=sn(o,t,n);return Z("bridge.request",{id:o,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:lt(n.request,"kind"),documentVersion:lt(n.request,"documentVersion")}),new Promise((s,c)=>{let a=this.resolveRequestTimeoutMs(t),u=a>0?setTimeout(()=>{let h=this.pending.get(o);h&&(this.pending.delete(o),Z("bridge.response",{id:o,kind:t,ok:!1,timedOut:!0}),h.reject(new Error(`Bridge request timed out after ${a}ms: ${t}`)))},a):null;u?.unref?.(),this.pending.set(o,{kind:t,timeout:u,resolve:h=>s(h),reject:c});try{r.send(ne.stringifyMessage(i))}catch(h){let y=me(h,"WebSocket send failed");this.clearPendingRequest(o),c(y),this.cleanupSocket(r,y,"failed")}})}handleAuthHandshakeMessage(t,n,r,o){try{if(ne.parseMessage(t).type==="auth-ok"){o();return}throw new Error("Bridge authentication failed")}catch(i){let s=me(i,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=ne.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"){Z("bridge.response",{id:n.payload.id,kind:r.kind,ok:!1}),r.reject(new Error(n.payload.message));return}Z("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:rn(n.payload.result)}),r.resolve(r.kind==="get-document"?{...n.payload.result,data:Ue(n.payload.result.data)}:r.kind==="initialize-session"?on(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):tn[t]??en}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===Lt||t.readyState===we)&&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)}},Lt=0,we=1,en=15e3,tn={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function me(e,t){return e instanceof Error?e:new Error(t)}function nn(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 lt(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function rn(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 pt(e){return new $e(e)}var $e=class{constructor(t){this.params=t,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=null,this.styleContextInFlight=null,this.currentDocument=t.initialDocument,this.observedDocumentVersion=t.initialDocument.version,this.sessionInitialized=!dt(t.initialDocument)}async getDocument(t){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);let n=dt(this.currentDocument);return(n||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(n?void 0:this.observedDocumentVersion,"get-document"),this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(t){if(t.routeId!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t.routeId}`);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let n=await this.params.client.initializeSession(t);return this.currentDocument=n.data.document,this.observedDocumentVersion=n.data.document.version,this.sessionInitialized=!0,this.clearObjectCaches(),n}async getHistoryStatus(){return this.params.client.getHistoryStatus()}async getStyleContext(t){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);let n=this.styleContextCache;if(n?.generation===this.styleGeneration)return{ok:!0,data:n.value};let r=this.styleContextInFlight;if(r?.generation===this.styleGeneration)return r.request;let o=this.styleGeneration,i=this.params.client.getStyleContext(t).then(s=>(this.styleGeneration===o&&(this.styleContextCache={generation:o,value:s.data}),s)).finally(()=>{this.styleContextInFlight?.request===i&&(this.styleContextInFlight=null)});return this.styleContextInFlight={generation:o,request:i},i}async ensureDocumentVersion(t,n){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${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(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);return n>this.currentDocument.version&&(this.currentDocument={...this.currentDocument,version:n},this.clearObjectCaches({preserveStyleContext:!0})),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n),{ok:!0,data:this.currentDocument}}async getObjectEditContext(t,n){let r=this.objectCacheKey(t,n),o=this.editContextCache.get(r);if(o)return{ok:!0,data:o};let i=this.editContextInFlight.get(r);if(i)return i;let s=this.objectGeneration,c=this.params.client.getObjectEditContext(t,n??this.params.routeId).then(a=>(this.objectGeneration===s&&this.editContextCache.set(r,a.data),a)).finally(()=>{this.editContextInFlight.get(r)===c&&this.editContextInFlight.delete(r)});return this.editContextInFlight.set(r,c),c}async getClassNameSource(t,n){let r=this.objectCacheKey(t,n),o=this.classNameSourceCache.get(r);if(o)return o;let i=this.classNameSourceInFlight.get(r);if(i)return i;let s=this.objectGeneration,c=this.params.client.getClassNameSource(t,n??this.params.routeId).then(a=>(this.objectGeneration===s&&this.classNameSourceCache.set(r,a),a)).finally(()=>{this.classNameSourceInFlight.get(r)===c&&this.classNameSourceInFlight.delete(r)});return this.classNameSourceInFlight.set(r,c),c}async getSourceTree(){return this.params.client.getSourceTree()}async getSourceFile(t){return this.params.client.getSourceFile(t)}async resolveSourceLocation(t){return this.params.client.resolveSourceLocation({...t,routeId:t.routeId??this.params.routeId})}async execute(t,n){let r=t.target.kind==="node"&&!t.routeId?{...t,routeId:this.params.routeId}:t;return this.params.client.execute(r)}async undo(t){return this.params.client.undo()}async redo(t){return this.params.client.redo()}subscribe(t){return this.params.client.subscribe(n=>{if(n.type==="site-edit.document.changed"&&n.routeId===this.params.routeId&&this.sessionInitialized){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 Z("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:n}),this.currentDocument;if(this.refreshInFlight){Z("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,source:n});let o=await this.refreshInFlight;if(typeof t!="number"||o.version>=t||this.currentDocument.version>=t)return this.currentDocument}Z("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!1,source:n});let r=this.params.client.getDocument(this.params.routeId).then(o=>(this.currentDocument=o.data,this.observedDocumentVersion=Math.max(this.observedDocumentVersion,o.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight=r;try{return await r}finally{this.refreshInFlight===r&&(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=null,this.styleContextInFlight=null)}objectCacheKey(t,n){return`${n??this.params.routeId}\0${t}`}};function dt(e){return e.version===0&&e.entries.length===0}function on(e){let t=e;return{...t,data:{...t.data,document:Ue(t.data.document)}}}function sn(e,t,n){switch(t){case"initialize-session":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId),...n.mutationContext?{mutationContext:n.mutationContext}:{}}};case"get-document":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId)}};case"get-history-status":return{type:"request",payload:{id:e,kind:t}};case"get-style-context":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId)}};case"get-object-edit-context":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"get-class-name-source":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"get-source-tree":return{type:"request",payload:{id:e,kind:t}};case"get-source-file":return{type:"request",payload:{id:e,kind:t,path:String(n.path)}};case"resolve-source-location":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"execute":return{type:"request",payload:{id:e,kind:t,request:n.request}};case"undo":case"redo":return{type:"request",payload:{id:e,kind:t,mutationContext:n.mutationContext}}}}var ft="vcp-window-message";function cn(e){return{source:ft,version:1,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function an(e){try{return E(e)?J(e,"source",ft)&&J(e,"version",1)&&P(e,"namespace")&&P(e,"channel")&&$(e,"body")&&(!oe(e,"sessionKey")||P(e,"sessionKey")):!1}catch{return!1}}var mt="site-edit",ht="frame-runtime";function ge(e,t={}){return cn({namespace:mt,channel:ht,sessionKey:t.sessionKey,body:e})}function gt(e){try{return!an(e)||e.namespace!==mt||e.channel!==ht?!1:xn(e.body)}catch{return!1}}var oe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function $(e,t){let n=Object.getOwnPropertyDescriptor(e,t);return n!==void 0&&"value"in n}function m(e,t){return Object.getOwnPropertyDescriptor(e,t)?.value}function J(e,t,n){return $(e,t)&&m(e,t)===n}function P(e,t){return $(e,t)&&typeof m(e,t)=="string"}function ze(e,t){return $(e,t)&&typeof m(e,t)=="boolean"}function F(e,t){let n=m(e,t);return $(e,t)&&typeof n=="number"&&Number.isFinite(n)}function he(e,t){return!oe(e,t)||m(e,t)===void 0||P(e,t)}function ae(e,t){return!oe(e,t)||m(e,t)===void 0||F(e,t)}function Re(e,t){let n=m(e,t);return!oe(e,t)||n===void 0||$(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function w(e,t){return!oe(e,t)||m(e,t)===void 0}function E(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function un(e){return E(e)&&Reflect.ownKeys(e).length===0}function yt(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 re(e){return E(e)&&P(e,"key")&&Re(e,"instanceIndex")&&Re(e,"instanceCount")&&Re(e,"textSegmentIndex")}function ln(e){return E(e)&&F(e,"top")&&F(e,"left")&&F(e,"width")&&F(e,"height")}function dn(e){return E(e)&&P(e,"blockId")&&re(m(e,"ref"))&&ln(m(e,"rect"))&&ze(e,"targetIsSectionRoot")}function pn(e){if(!E(e))return!1;let t=m(e,"placement"),n=m(e,"boundary");return P(e,"anchorBlockId")&&re(m(e,"anchorRef"))&&(t==="before"||t==="after")&&E(n)&&F(n,"top")&&F(n,"left")&&F(n,"width")}function fn(e){return E(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&$(e,t)&&(typeof m(e,t)=="string"||m(e,t)===null))}function bt(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function mn(e){return E(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&$(e,t)&&bt(m(e,t)))}function hn(e){if(!E(e))return!1;let t=m(e,"priority");return P(e,"property")&&$(e,"value")&&bt(m(e,"value"))&&(!oe(e,"priority")||t===void 0||t==="important")}function gn(e){return E(e)?(w(e,"attributes")||fn(m(e,"attributes")))&&he(e,"className")&&(w(e,"style")||mn(m(e,"style")))&&(w(e,"styleDeclarations")||Array.isArray(m(e,"styleDeclarations"))&&m(e,"styleDeclarations").every(hn)):!1}function yn(e){return E(e)&&F(e,"x")&&F(e,"y")&&(w(e,"detailLevel")||J(e,"detailLevel","summary")||J(e,"detailLevel","full"))}function bn(e){return E(e)&&re(m(e,"ref"))}function Sn(e){if(!E(e)||!E(m(e,"variables")))return!1;let t=m(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&P(t,n))?w(e,"stylesheets")||yt(m(e,"stylesheets")):!1}function En(e){if(!J(e,"type","request")||!P(e,"id")||!P(e,"kind")||!$(e,"payload"))return!1;let t=m(e,"kind"),n=m(e,"payload");switch(t){case"hit-test-at-point":case"start-text-edit-at-point":return yn(n);case"bridge-get-source-tree":case"get-scroll-metrics":case"clear-theme-override":case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return un(n);case"bridge-get-source-file":return E(n)&&P(n,"path");case"bridge-resolve-source-location":case"bridge-get-object-edit-context":case"bridge-get-class-name-source":return E(n)&&P(n,"key")&&he(n,"routeId");case"scroll-to":return E(n)&&F(n,"x")&&F(n,"y");case"scroll-by":return E(n)&&F(n,"deltaX")&&F(n,"deltaY");case"set-interaction-mode":return E(n)&&ze(n,"enabled");case"set-theme-override":return Sn(n);case"get-theme-variables":return E(n)&&yt(m(n,"names"));case"compute-drop-target-at-point":return E(n)&&F(n,"x")&&F(n,"y")&&(J(n,"dragKind","insert")||J(n,"dragKind","move"))&&(w(n,"movingRef")||re(m(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return E(n)&&(w(n,"ref")||re(m(n,"ref")));case"apply-node-patch":return E(n)&&re(m(n,"ref"))&&gn(m(n,"patch"))&&(w(n,"preview")||E(m(n,"preview"))&&P(m(n,"preview"),"sessionId")&&Re(m(n,"preview"),"revision")&&oe(m(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return bn(n);case"bridge-initialize-session":case"bridge-get-style-context":return E(n)&&P(n,"routeId");case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return E(n)&&P(n,"routeId")&&ae(n,"minVersion")&&ae(n,"version");case"bridge-execute":return E(n)&&E(m(n,"request"));case"bridge-subscribe":case"bridge-unsubscribe":return E(n)&&P(n,"subscriptionId");default:return!1}}function In(e){return J(e,"type","response")&&P(e,"id")&&ze(e,"ok")&&(w(e,"error")||P(e,"error"))}var Cn=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]);function vn(e){if(!J(e,"type","event")||!P(e,"kind")||!E(m(e,"payload")))return!1;let t=m(e,"kind"),n=m(e,"payload");switch(t){case"text-edit-commit":case"text-edit-cancel":case"text-edit-exit":case"text-edit-input":return re(m(n,"ref"))&&he(n,"value")&&(w(n,"hit")||E(m(n,"hit")));case"node-bounds-change":return E(m(n,"hit"));case"bridge-event":return P(n,"subscriptionId")&&E(m(n,"event"));case"route-ready":return P(n,"routeId")&&ae(n,"version");case"bridge-status":{let r=m(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&he(n,"routeId")&&ae(n,"attempt")&&ae(n,"retryInMs")&&he(n,"messageKey")}case"scroll":{let r=m(n,"metrics");return E(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(o=>F(r,o))}default:return Cn.has(t)&&F(n,"clientX")&&F(n,"clientY")&&ae(n,"buttons")&&(m(n,"hit")===null||E(m(n,"hit")))&&(m(n,"section")===null||dn(m(n,"section")))&&(m(n,"sectionGap")===null||pn(m(n,"sectionGap")))}}function xn(e){if(!E(e))return!1;switch(m(e,"type")){case"request":return En(e);case"response":return In(e);case"event":return vn(e);default:return!1}}var Ye="vcp-site-edit:route-ready",Xe="vcp-site-edit:bridge-status",Rn=1e3,_n="data-vcp-ui-component",xt="data-vcp-theme-preview",St="::repeat-item#",_e="components/ui",Tn=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),kn=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function Dn(e,t=""){let n=Dt(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,o=r.startsWith("/")?r:`/${r}`;return o==="/"?"/":o.replace(/\/+$/,"")}function Nn(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 An(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 no(e=window,t={}){let n=An(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=Pn({bridgeUrl:n,options:t}),o=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(o?.started){if(Fn(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??(f=>new xe({url:f,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??$n,h=()=>{i.retryTimer&&(e.clearTimeout(i.retryTimer),i.retryTimer=void 0)},y=()=>Dn(e.location.pathname,t.basePath||""),D=!!e.parent&&e.parent!==e,v=f=>{zn(e,f)},x=f=>{i.currentDocument=f,i.currentEntriesByKey=new Map((f?.entries??[]).map(I=>[I.key,I]))},R=()=>{i.unsubscribeConnectionStatus?.(),i.unsubscribeConnectionStatus=void 0,i.unsubscribeDocument?.(),i.unsubscribeDocument=void 0},B=(f,I)=>!i.disposed&&I===i.routeSequence&&f===y(),A=async(f,I)=>{let _=i.activeBridge;if(!_)return null;let N=await _.getDocument(f);return B(f,I)&&x(N.data),N.data},U=()=>{R(),x(null);let f=i.activeBridge;i.activeBridge=null,f&&e.__VCP_SITE_EDIT__===f&&delete e.__VCP_SITE_EDIT__;let I=i.activeClient;i.activeClient=null,I?.disconnect()},Me=f=>f===s.routeId&&!!i.activeBridge&&(D||!!(i.currentDocument&&Hn(i.currentDocument,f)))&&Gn(i.activeClient),qe=f=>Math.min(Rn*2**Math.max(0,f),8e3),ie=(f,I,_)=>{if(i.disposed)return;h();let N=qe(_);v({state:"reconnecting",routeId:f,attempt:_,retryInMs:N,messageKey:"studio.status.previewBridgeConnecting"}),i.retryTimer=e.setTimeout(()=>{i.retryTimer=void 0,!(i.disposed||I!==i.routeSequence)&&Se(_+1).catch(p=>{let l=y();if(f===l){if(ue(p)){v({state:"reload-required",routeId:f,attempt:_,messageKey:"studio.errors.previewBridgeReloadRequired"});return}ie(f,i.routeSequence,_+1)}})},N)},le=(f,I,_)=>{if(!B(f,I)||i.activeClient===null)return;if(ue(_.message)){U(),h(),v({state:"reload-required",routeId:f,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}let N=i.activeClient;R(),x(null);let p=i.activeBridge;i.activeBridge=null,p&&e.__VCP_SITE_EDIT__===p&&delete e.__VCP_SITE_EDIT__,i.activeClient=null,N?.disconnect(),ie(f,I,0)},Ke=f=>{let I=y(),_=i.routeSequence;if(!(!B(I,_)||i.activeClient===null)){if(ue(f)){U(),h(),v({state:"reload-required",routeId:I,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}kt(f)&&le(I,_,{state:"failed",message:Ze(f,"Site edit bridge request failed")})}};i.cleanupFrameRuntime=Kn(e,{getCurrentDocument:()=>i.currentDocument,getDocumentEntry:f=>i.currentEntriesByKey.get(f)??null,setCurrentDocument:x,onBridgeRequestError:f=>{Ke(f)}});let de=async()=>Se(0),Se=async f=>{if(i.disposed)return;let I=y();if(Me(I))return;let _=i.syncInFlight;if(_?.routeId===I)return _.promise;let N=i.routeSequence+1,p=Ve(I,N,f);i.syncInFlight={routeId:I,sequence:N,promise:p};try{await p}finally{i.syncInFlight?.promise===p&&(i.syncInFlight=null)}},Ve=async(f,I,_)=>{i.routeSequence=I,h(),U(),v({state:_>0?"reconnecting":"connecting",routeId:f,attempt:_,messageKey:_>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let N=a(n),p=!1;i.activeClient=N,i.unsubscribeConnectionStatus=N.subscribeConnectionStatus?.(l=>{p&&(l.state==="closed"||l.state==="failed")&&le(f,I,l)});try{if(await N.connect(),!B(f,I)){N.disconnect();return}let l=pt({routeId:f,client:N,initialDocument:qn(f)});i.activeBridge=l,c()&&(e.__VCP_SITE_EDIT__=l),i.activeClient=N,i.unsubscribeDocument=l.subscribe(k=>{k.type==="site-edit.document.changed"&&k.routeId===f&&i.currentDocument&&k.version>i.currentDocument.version&&A(f,I).catch(()=>{})}),c()&&(s.routeId=f);let T=(D?null:await l.initializeSession({routeId:f}))?.data.document??null;if(T&&x(T),!B(f,I)){N.disconnect();return}p=!0,v({state:"ready",routeId:f,attempt:_,messageKey:"studio.status.previewReady"}),Nn(e,{documentVersion:T?.version??0,routeId:f,versions:t.runtime_versions}),T&&Tt(e,{routeId:f,version:T.version})}catch(l){if(R(),i.activeClient===N&&(i.activeClient=null),i.activeBridge&&e.__VCP_SITE_EDIT__===i.activeBridge&&delete e.__VCP_SITE_EDIT__,i.activeBridge=null,N.disconnect(),x(null),!B(f,I))return;throw v({state:ue(l)?"reload-required":"failed",routeId:f,attempt:_,messageKey:ue(l)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),l}},H=f=>{if(i.disposed)return;let I=y();if(ue(f)){h(),v({state:"reload-required",routeId:I,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}ie(I,i.routeSequence,0)},Y=()=>{i.syncScheduled||i.disposed||(i.syncScheduled=!0,u(()=>{i.syncScheduled=!1,!i.disposed&&de().catch(f=>H(f))}))},Ee=()=>{i.disposed||(i.disposed=!0,i.syncScheduled=!1,i.syncInFlight=null,h(),i.routeSequence+=1,i.unbindRouteChange?.(),i.unbindRouteChange=void 0,i.unbindBootstrapLifecycle?.(),i.unbindBootstrapLifecycle=void 0,i.cleanupFrameRuntime(),U(),c()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};if(s={started:!0,signature:r,syncRoute:de,cleanup:Ee},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,i.unbindBootstrapLifecycle=On(e,Ee),i.unbindRouteChange=wn(e,Y,y),t.defer_initial_sync){Y();return}await de()}function Pn(e){return{basePath:Dt(e.options.basePath??""),bridgeUrl:e.bridgeUrl,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:Bn(e.options.bridge_session_key)}}function Fn(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function Bn(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 On(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),Mn(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function Mn(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function qn(e){return{siteId:"preview",snapshotId:"preview",routeId:e,version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function Kn(e=window,t={}){let n=null,r=null,o=null,i=null,s=null,c=null,a=null,u=null,h=null,y=new Map,D=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,v=()=>{n?.(),n=null,r=null},x=()=>{o?.(),o=null,i?.(),i=null},R=(p,l,d)=>{let T=s?.sessionKey!==p||s?.sourceWindow!==l||s?.targetOrigin!==d;s={sessionKey:p,sourceWindow:l,targetOrigin:d},T&&(u=null,h=null)},B=(p,l)=>{let d=e.parent&&e.parent!==e?e.parent:null;return!d||l!==d?!1:!D||p===D},A=()=>{for(let p of y.values())p();y.clear()},U=p=>JSON.stringify([p.routeId,p.version]),Me=()=>!a||a.state==="ready",qe=p=>JSON.stringify([p.state,p.routeId??null,p.attempt??null,p.retryInMs??null,p.messageKey??null]),ie=p=>{if(!Me())return;let l=U(p);u!==l&&(i?.(),i=null,H({kind:"route-ready",payload:{routeId:p.routeId,version:p.version}}),s&&(u=l))},le=p=>{let l=qe(p);h!==l&&(p.state!=="ready"&&(u=null,c=null),H({kind:"bridge-status",payload:p}),s&&(h=l))},Ke=p=>{c=p,ie(p)},de=p=>{a=p,le(p)},Se=()=>{c&&ie(c)},Ve=()=>{a&&le(a)},H=p=>{s&&s.sourceWindow.postMessage(ge({type:"event",...p},{sessionKey:s.sessionKey}),s.targetOrigin)},Y=(p,l,d,T)=>{let k=t.getCurrentDocument?.()??null,M=nr(e.document,l.clientX,l.clientY),g=Ae(e.document,l.clientX,l.clientY,k),K=g?W(g,d==="full"?G(e.document,g,k):Pe(e.document,g,k),t.getDocumentEntry,d):null,X=rr(e.document,M,k),Q=ir(e.document,l,k);T&&K&&(p==="pointer-click"||p==="pointer-double-click")&&(T.preventDefault(),T.stopPropagation(),typeof T.stopImmediatePropagation=="function"&&T.stopImmediatePropagation()),H({kind:p,payload:{clientX:l.clientX,clientY:l.clientY,buttons:Number(l.buttons??0),hit:K,section:X,sectionGap:Q}})},Ee=p=>{H({kind:"pointer-leave",payload:{clientX:p?.clientX??0,clientY:p?.clientY??0,buttons:Number(p?.buttons??0),hit:null,section:null,sectionGap:null}})},f=(p,l,d)=>{x(),s={sessionKey:p,sourceWindow:l,targetOrigin:d};let T=Wr(e.document),k=null,M=null,g=null,K=()=>{g!==null&&(_t(e,g),g=null),k=null},X=()=>{g=null;let b=k;k=null,b&&Y("pointer-move",b,"summary")},Q=b=>{M=b,k=b,g===null&&(g=Rt(e,X))},O=()=>{M&&Q(M)},ee=b=>{Q({clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)})},pe=b=>{Y("pointer-down",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},fe=b=>{Y("pointer-up",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"summary",b)},se=b=>{Y("pointer-cancel",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"summary",b)},Ie=b=>{Y("pointer-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},S=b=>{Y("pointer-double-click",{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)},"full",b)},C=b=>{let wt=b?{clientX:Number(b.clientX),clientY:Number(b.clientY),buttons:Number(b.buttons)}:M;K(),M=null,Ee(wt??void 0)},q=()=>C(),te=()=>{H({kind:"scroll",payload:{metrics:De(e)}}),O()};e.document.addEventListener("pointerdown",pe,!0),e.document.addEventListener("pointermove",ee,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",fe,!0),e.document.addEventListener("pointercancel",se,!0),e.document.addEventListener("click",Ie,!0),e.document.addEventListener("dblclick",S,!0),e.addEventListener("scroll",te,{passive:!0}),e.addEventListener("resize",O,{passive:!0}),e.addEventListener("blur",q),e.document.addEventListener("load",O,!0);let Ce=e.document.documentElement,rt=typeof Ce.addEventListener=="function"?Ce:e.document;rt.addEventListener("pointerleave",C,!0);let ve=e.visualViewport;ve?.addEventListener?.("resize",O,{passive:!0}),ve?.addEventListener?.("scroll",O,{passive:!0});let ot=e.ResizeObserver,it=typeof ot=="function"?new ot(O):null;it?.observe(Ce);let st=e.MutationObserver,ct=typeof st=="function"?new st(O):null;ct?.observe(Ce,{attributes:!0,childList:!0,subtree:!0}),o=()=>{K(),M=null,it?.disconnect(),ct?.disconnect(),T(),e.document.removeEventListener("pointerdown",pe,!0),e.document.removeEventListener("pointermove",ee,!0),e.document.removeEventListener("pointerup",fe,!0),e.document.removeEventListener("pointercancel",se,!0),e.document.removeEventListener("click",Ie,!0),e.document.removeEventListener("dblclick",S,!0),e.removeEventListener("scroll",te),e.removeEventListener("resize",O),e.removeEventListener("blur",q),e.document.removeEventListener("load",O,!0),rt.removeEventListener("pointerleave",C,!0),ve?.removeEventListener?.("resize",O),ve?.removeEventListener?.("scroll",O)}},I=p=>{let l=p.detail;l?.routeId&&Ke(l)},_=p=>{let l=p.detail;l?.state&&de(l)},N=p=>{let l=p.data;if(!gt(l)||l.body.type!=="request"||l.body.kind!=="apply-node-patch"&&l.body.kind!=="get-hit-by-ref"&&l.body.kind!=="get-path-by-ref"&&l.body.kind!=="get-scroll-metrics"&&l.body.kind!=="scroll-to"&&l.body.kind!=="scroll-by"&&l.body.kind!=="set-interaction-mode"&&l.body.kind!=="set-theme-override"&&l.body.kind!=="clear-theme-override"&&l.body.kind!=="get-theme-variables"&&l.body.kind!=="compute-drop-target-at-point"&&l.body.kind!=="observe-node-bounds"&&l.body.kind!=="clear-node-bounds-observer"&&l.body.kind!=="restore-text-edit"&&l.body.kind!=="clear-text-edit-rollback"&&l.body.kind!=="start-text-edit-at-point"&&l.body.kind!=="hit-test-at-point"&&!Et(l.body))return;let d=l.body,T=typeof l.sessionKey=="string"?l.sessionKey:null,k=p.source,M=p.origin;if(!T||!M||!k||typeof k.postMessage!="function"||!B(T,k))return;if(s){if(s.sourceWindow!==k||s.targetOrigin!==M)return;s.sessionKey!==T&&(v(),x(),A(),s=null)}R(T,k,M),Ve(),Se();let g=K=>{let X=typeof d.id=="string"?d.id:"unknown";k.postMessage(ge({id:X,...K},{sessionKey:T}),M)};try{if(Et(d)){Un({message:d,sendEvent:S=>{k.postMessage(ge({type:"event",...S},{sessionKey:T}),M)},sendResponse:g,subscriptions:y,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,windowLike:e});return}if(d.kind==="apply-node-patch"){let S=L(e.document,d.payload.ref,t.getCurrentDocument?.()??null);if(!S){g({type:"response",ok:!1,error:"No editable element found for patch target"});return}let C=d.payload.preview,q=C?Tr(C.sessionId,d.payload.ref):null;if(q&&C){let te=ye.get(q)??-1;if(C.revision<te){g({type:"response",ok:!0,result:{applied:!1,appliedRevision:C.revision,stale:!0,latestRevision:te}});return}if(C.revision===te){g({type:"response",ok:!0,result:{applied:!1,appliedRevision:C.revision,duplicate:!0,latestRevision:te}});return}}if(Rr(S,d.payload.patch),q&&C&&kr(q,C.revision),C?.responseDetail==="none"){g({type:"response",ok:!0,result:{applied:!0,appliedRevision:C.revision}});return}g({type:"response",ok:!0,result:W(S,G(e.document,S,t.getCurrentDocument?.()??null),t.getDocumentEntry,C?.responseDetail??"full")});return}if(d.kind==="get-hit-by-ref"){let S=L(e.document,d.payload.ref,t.getCurrentDocument?.()??null);if(!S){g({type:"response",ok:!1,error:"No editable element found for hit target"});return}g({type:"response",ok:!0,result:W(S,G(e.document,S,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(d.kind==="get-path-by-ref"){let S=L(e.document,d.payload.ref,t.getCurrentDocument?.()??null);if(!S){g({type:"response",ok:!1,error:"No editable element found for path target"});return}let C=[],q=S;for(;q;)q.getAttribute("data-vcp-edit-key")&&C.push(W(q,G(e.document,q,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),q=q.parentElement;g({type:"response",ok:!0,result:C.reverse()});return}if(d.kind==="restore-text-edit"||d.kind==="clear-text-edit-rollback"){let S=d.payload.ref;if(d.kind==="clear-text-edit-rollback"){r&&It(r.ref,S)&&(r=null),g({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!It(r.ref,S)){g({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let C=Jn(e.document,r,t.getCurrentDocument?.()??null);r=null,g(C?{type:"response",ok:!0,result:{restored:!0}}:{type:"response",ok:!1,error:"Failed to restore text edit snapshot"});return}if(d.kind==="get-scroll-metrics"){g({type:"response",ok:!0,result:De(e)});return}if(d.kind==="scroll-to"){let S=Number(d.payload.x),C=Number(d.payload.y);if(!Number.isFinite(S)||!Number.isFinite(C)){g({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:S,top:C}),g({type:"response",ok:!0,result:De(e)});return}if(d.kind==="scroll-by"){let S=Number(d.payload.deltaX),C=Number(d.payload.deltaY);if(!Number.isFinite(S)||!Number.isFinite(C)){g({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:S,top:C}),g({type:"response",ok:!0,result:{...De(e),scrolled:!0}});return}if(d.kind==="set-interaction-mode"){d.payload.enabled?f(T,k,M):s?.sourceWindow===k&&s.targetOrigin===M&&s.sessionKey===T&&x(),g({type:"response",ok:!0,result:{interactionEnabled:d.payload.enabled}});return}if(d.kind==="set-theme-override"){Dr(e.document,d.payload),g({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(d.kind==="clear-theme-override"){Nr(e.document),g({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(d.kind==="get-theme-variables"){g({type:"response",ok:!0,result:Ar(e.document,d.payload.names)});return}if(d.kind==="compute-drop-target-at-point"){let S=Number(d.payload?.x),C=Number(d.payload?.y);if(!Number.isFinite(S)||!Number.isFinite(C)){g({type:"response",ok:!1,error:"Invalid drop target point"});return}g({type:"response",ok:!0,result:Sr(e,S,C,d.payload.dragKind,d.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(d.kind==="observe-node-bounds"){let S=d.payload.ref;if(!S){g({type:"response",ok:!1,error:"Missing bounds observer target"});return}let C=L(e.document,S,t.getCurrentDocument?.()??null);if(!C){g({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}i?.(),i=hr(e,C,S,t.getCurrentDocument,t.getDocumentEntry,q=>H({kind:"node-bounds-change",payload:{hit:q}})),g({type:"response",ok:!0,result:{observing:!0}}),H({kind:"node-bounds-change",payload:{hit:W(C,S,t.getDocumentEntry,"summary")}});return}if(d.kind==="clear-node-bounds-observer"){i?.(),i=null,g({type:"response",ok:!0,result:{cleared:!0}});return}if(d.kind!=="hit-test-at-point"&&d.kind!=="start-text-edit-at-point")return;let K=Number(d.payload?.x),X=Number(d.payload?.y);if(!Number.isFinite(K)||!Number.isFinite(X)){g({type:"response",ok:!1,error:"Invalid text edit point"});return}let Q=d.kind==="hit-test-at-point"?Ae(e.document,K,X,t.getCurrentDocument?.()??null):Zn(e.document,K,X,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!Q){g({type:"response",ok:!1,error:d.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let O=d.kind==="start-text-edit-at-point"?Q:null,ee=d.kind==="hit-test-at-point"?Q:O.element,pe=d.payload.detailLevel??"full",fe=pe==="full"?G(e.document,ee,t.getCurrentDocument?.()??null):Pe(e.document,ee,t.getCurrentDocument?.()??null),se=O&&typeof O.textSegmentIndex=="number"?{...fe,textSegmentIndex:O.textSegmentIndex}:fe,Ie=W(ee,se,t.getDocumentEntry,pe);if(d.kind==="hit-test-at-point"){g({type:"response",ok:!0,result:Ie});return}v(),n=Or(e,ee,se,S=>{k.postMessage(ge({type:"event",...S},{sessionKey:T}),M)},{...O?.textNode?{textNode:O.textNode}:{},onCommitSnapshot:S=>{r=S}}),g({type:"response",ok:!0,result:{ref:se}})}catch(K){g({type:"response",ok:!1,error:K instanceof Error?K.message:"Failed to start text edit"})}};return e.addEventListener("message",N),e.addEventListener(Ye,I),e.addEventListener(Xe,_),()=>{v(),x(),s=null,A(),e.removeEventListener("message",N),e.removeEventListener(Ye,I),e.removeEventListener(Xe,_)}}function Et(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function Vn(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function Un({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:o,setCurrentDocument:i,onBridgeRequestError:s,windowLike:c}){let a=c.__VCP_SITE_EDIT__;if(!a){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}try{switch(e.kind){case"bridge-initialize-session":{let u=await a.initializeSession({routeId:e.payload.routeId});i?.(u.data.document),Tt(c,{routeId:u.data.document.routeId,version:u.data.document.version}),n({type:"response",ok:!0,result:u});return}case"bridge-get-document":{let u=await a.getDocument(e.payload.routeId);i?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await a.getHistoryStatus()});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await a.getStyleContext(e.payload.routeId)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let u=a.ensureDocumentVersion?await a.ensureDocumentVersion(e.payload.routeId,Number(e.payload.minVersion)):await a.getDocument(e.payload.routeId);i?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let u=a.acknowledgeDocumentVersion?await a.acknowledgeDocumentVersion(e.payload.routeId,Number(e.payload.version)):await a.getDocument(e.payload.routeId);i?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await a.getObjectEditContext(e.payload.key,e.payload.routeId)});return;case"bridge-get-class-name-source":{let u=await a.getClassNameSource(e.payload.key,e.payload.routeId);n({type:"response",ok:!0,result:Wn(u,e.payload.key,c.document,o?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await a.getSourceTree()});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await a.getSourceFile({path:e.payload.path})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await a.resolveSourceLocation({key:e.payload.key,routeId:e.payload.routeId})});return;case"bridge-execute":{let u=await a.execute(e.payload.request),h=o?.()?.routeId;if(u.ok&&h&&a.acknowledgeDocumentVersion&&Vn(e.payload.request)){let y=await a.acknowledgeDocumentVersion(h,u.data.resultVersion);i?.(y.data)}n({type:"response",ok:!0,result:u});return}case"bridge-undo":n({type:"response",ok:!0,result:await a.undo()});return;case"bridge-redo":n({type:"response",ok:!0,result:await a.redo()});return;case"bridge-subscribe":{let u=e.payload.subscriptionId;r.get(u)?.();let h=a.subscribe(y=>{t({kind:"bridge-event",payload:{event:y,subscriptionId:u}})});r.set(u,h),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let u=e.payload.subscriptionId;r.get(u)?.(),r.delete(u),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(u){s?.(u,e),n({type:"response",ok:!1,error:Yn(u)})}}function Wn(e,t,n,r){if(!e.ok)return e;let o=L(n,{key:t},r),i=o?jn(o):null;return i?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...i}}}:e}function jn(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function wn(e,t,n=()=>e.location.pathname){let r=e.history.pushState,o=e.history.replaceState,i=n(),s=()=>{let u=n();u!==i&&(i=u,t())},c=()=>s(),a=()=>s();return e.history.pushState=function(...h){let y=r.apply(this,h);return s(),y},e.history.replaceState=function(...h){let y=o.apply(this,h);return s(),y},e.addEventListener("popstate",c),e.addEventListener("hashchange",a),()=>{e.history.pushState=r,e.history.replaceState=o,e.removeEventListener("popstate",c),e.removeEventListener("hashchange",a)}}function $n(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function Rt(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function _t(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function Tt(e,t){e.dispatchEvent(new CustomEvent(Ye,{detail:t}))}function zn(e,t){e.dispatchEvent(new CustomEvent(Xe,{detail:t}))}function Gn(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function Hn(e,t){return e.routeId===t}function Ze(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function kt(e){let t=Ze(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function Yn(e){let t=Ze(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":kt(t)?"Site edit bridge disconnected":t}function ue(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return/authentication|auth failed|auth rejected|bridge key|session|unauthorized|forbidden|expired/i.test(t)}function Dt(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function Le(e){return Tn.has(At(e))}function Xn(e){return kn.has(At(e))}function Nt(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:Xn(e.tagName),canInsertChild:Le(e.tagName),canMove:!1,canRemove:!1}}function At(e){return e?.trim().toLowerCase()??""}function It(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function Jn(e,t,n){let r=L(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let o=Qn(r,t.ref.textSegmentIndex);return o?(o.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function Qn(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Ne(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function Zn(e,t,n,r,o){let i=Ae(e,t,n,r),s=Pt(i);if(!s)return null;let c=s.getAttribute("data-vcp-edit-key")??"",a=G(e,s,r),u=o?.(a.key)??o?.(c);if(!Nt({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let y=Ln(e,t,n,s);if(y){let D=tr(s,y);if(D!==null)return{element:s,textNode:y,textSegmentIndex:D}}return Oe(s)?null:{element:s}}function Ln(e,t,n,r){let o=er(e,t,n);return!o||o.parentElement!==r?null:o}function er(e,t,n){let r=e,i=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Ne(i))return i;let c=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Ne(c)?c:null}function tr(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Ne(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Ne(e){return e?.nodeType===3}function nr(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function rr(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let o=r.getAttribute("data-site-block-id")??"",i=r.getAttribute("data-vcp-edit-key")??"";return!o||!i?null:{blockId:o,ref:Pe(e,r,n),rect:tt(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function or(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:Pe(e,n,t),rect:tt(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function ir(e,t,n){let r=or(e,n),o=r[0],i=r.at(-1);return!o||!i?null:[{anchorBlockId:o.blockId,anchorRef:o.ref,placement:"before",boundary:{top:o.rect.top,left:o.rect.left,width:o.rect.width}},...r.slice(1).map(c=>({anchorBlockId:c.blockId,anchorRef:c.ref,placement:"before",boundary:{top:c.rect.top,left:c.rect.left,width:c.rect.width}})),{anchorBlockId:i.blockId,anchorRef:i.ref,placement:"after",boundary:{top:i.rect.top+i.rect.height,left:i.rect.left,width:i.rect.width}}].find(({boundary:c})=>t.clientX>=c.left&&t.clientX<=c.left+c.width&&Math.abs(t.clientY-c.top)<=12)??null}function Ae(e,t,n,r=null){let o=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let i of o){let s=Pt(i),c=s?.getAttribute("data-vcp-edit-key")??"";if(s&&lr(s,r,c))return s}return null}function Pt(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(et(t))return n??t;!sr(r)&&!n&&(n=t)}t=t.parentElement}return n}function et(e){return e.getAttribute(_n)!==null}function sr(e){return cr(e.split("::")[0]??"")}function cr(e){if(!e)return!1;let t=ar(e);return t===_e||t.startsWith(`${_e}/`)||t.includes(`/${_e}/`)||t.endsWith(`/${_e}`)}function ar(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let o of n.split("/"))if(!(!o||o===".")){if(o===".."){r.pop();continue}r.push(o)}return r.join("/")}function G(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",o=Bt(Mt(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${jt(r)}"]`))),n,r);if(o.length<=1)return{key:Ct(n,r,0)};let i=o.indexOf(t);return i>=0?{key:Ct(n,r,i),instanceIndex:i,instanceCount:o.length}:{key:r}}function Pe(e,t,n){return G(e,t,n)}function L(e,t,n){let r=Fe(t.key)??t.key,o=Bt(Mt(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${jt(r)}"]`))),n,t.key);if(o.length===0)return null;let i=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<o.length?t.instanceIndex:null,s=(Fe(t.key)??t.key)!==t.key;if(i!==null&&!s)return o[i]??null;let c=ur(n,t.key);return c!==null&&c>=0&&c<o.length?o[c]??null:i!==null?o[i]??null:o[0]??null}function Ct(e,t,n){return Ft(e,t)[n]?.key??t}function ur(e,t){let n=Fe(t);if(!n)return null;let o=Ft(e,n).findIndex(i=>i.key===t);return o>=0?o:null}function Ft(e,t){return(e?.entries??[]).filter(n=>(Fe(n.key)??n.key)===t)}function Bt(e,t,n){let r=Ot(t,n);return r?e.filter(o=>o.tagName.toLowerCase()===r):e}function lr(e,t,n){let r=Ot(t,n);return!r||e.tagName.toLowerCase()===r}function Ot(e,t){return null}var dr=2,pr=4;function Mt(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&pr)!==0?-1:(r&dr)!==0?1:0})}function Fe(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(St);if(n<0)break;let r=Number(t.slice(n+St.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function fr(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...qt(n),paddingTop:V(n?.paddingTop),paddingRight:V(n?.paddingRight),paddingBottom:V(n?.paddingBottom),paddingLeft:V(n?.paddingLeft),borderTopWidth:V(n?.borderTopWidth),borderRightWidth:V(n?.borderRightWidth),borderBottomWidth:V(n?.borderBottomWidth),borderLeftWidth:V(n?.borderLeftWidth),columnGap:V(n?.columnGap),rowGap:V(n?.rowGap)}}function qt(e){return{marginTop:V(e?.marginTop,!0),marginRight:V(e?.marginRight,!0),marginBottom:V(e?.marginBottom,!0),marginLeft:V(e?.marginLeft,!0)}}function V(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function mr(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:tt(n.getBoundingClientRect()),margin:qt(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function W(e,t,n,r="full"){let o=e.getBoundingClientRect(),i=n?.(t.key)??null,s=e.tagName.toLowerCase(),c=Be(e),a=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:Object.fromEntries(Object.entries(e.dataset).map(([x,R])=>[x,R??""])),attributes:Object.fromEntries(e.getAttributeNames().map(x=>[x,e.getAttribute(x)??""]))}:{},u=Nt({operationSummary:i?.operationSummary,tagName:s,fallbackMode:"preview"}),h=et(e),y=!0,D=Kt(e)?.getAttribute("data-vcp-edit-key")??null,v=mr(e);return{ref:t,key:t.key,detailLevel:r,tagName:s,...i?{sourceKind:"jsx"}:{},...D?{parentKey:D}:{},...i?.pageCompositionUnitKey?{pageCompositionUnitKey:i.pageCompositionUnitKey}:{},...a,runtimeFlags:{selectable:!0,movable:u.canMove,removable:u.canRemove,textEditable:u.canUpdateText,container:h?!1:!!Oe(e)||u.canInsertChild||y&&Le(s)},layout:c,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:v,childRects:v.map(({rect:x})=>x),spacing:fr(e)}}function hr(e,t,n,r,o,i){let s=t,c=W(s,n,o,"summary"),a=null,u=()=>{a===null&&(a=Rt(e,h))},h=()=>{a=null;let B=L(e.document,n,r?.()??null);if(!B)return;B!==s&&(D?.unobserve(s),s=B,D?.observe(s));let A=W(s,n,o,"summary");A.rect.width<=0||A.rect.height<=0||gr(c,A)&&(c=A,i(A))},y=e.ResizeObserver,D=typeof y=="function"?new y(u):null;D?.observe(s);let v=e.MutationObserver,x=typeof v=="function"?new v(u):null;x?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",u,{passive:!0});let R=e.visualViewport;return R?.addEventListener?.("resize",u,{passive:!0}),e.document.addEventListener("load",u,!0),()=>{a!==null&&(_t(e,a),a=null),D?.disconnect(),x?.disconnect(),e.removeEventListener("resize",u),R?.removeEventListener?.("resize",u),e.document.removeEventListener("load",u,!0)}}function gr(e,t){return nt(e.rect,t.rect)||yr(e.childBoxes,t.childBoxes)||br(e.childRects,t.childRects)||Je(e.spacing,t.spacing)||Je(e.layout,t.layout)}function yr(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((o,i)=>{let s=r[i];return!s||nt(o.rect,s.rect)||Je(o.margin,s.margin)})}function br(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((o,i)=>nt(o,r[i]??o))}function Je(e,t){let n=e??{},r=t??{},o=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(o).some(i=>n[i]!==r[i])}function tt(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function nt(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function Sr(e,t,n,r,o,i,s){let c=e.document,a=Ae(c,t,n,i);if(!a)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let u=o?L(c,o,i):null;if(u&&Qe(a,u))return Te(c,a,"self-or-descendant",i,s);if(r==="move"&&u){let R=vr(c,a,u,i,s);if(R){let B=Ge(R.child,R.targetParent,t,n,"nearest");if(B)return ke(c,R.child,R.targetParent,B,i,s)}}let h=null,y=!1,D=a,v=a.parentElement;for(;v;){if(v.getAttribute("data-vcp-edit-key")){if(u&&Qe(v,u))return Te(c,a,"self-or-descendant",i,s);let R=vt(v,r,s);if(R==="accept"){h={child:D,targetParent:v};break}R==="blocked"&&(y=!0),D=v}v=v.parentElement}let x=vt(a,r,s);if(x==="accept"){if(h){let R=Ge(h.child,h.targetParent,t,n,"edge");if(R)return ke(c,h.child,h.targetParent,R,i,s)}return ke(c,a,a,Er(a,t,n),i,s)}if(h){let R=Ge(h.child,h.targetParent,t,n,"nearest");return ke(c,h.child,h.targetParent,R??"after",i,s)}return x==="blocked"||y?Te(c,a,"operation-boundary-blocked",i,s):Te(c,a,"no-accepting-parent",i,s)}function Te(e,t,n,r,o){return{anchorHit:W(t,G(e,t,r),o,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function ke(e,t,n,r,o,i){let s=W(t,G(e,t,o),i,"summary"),c=W(n,G(e,n,o),i,"summary"),a=Be(n).indicatorOrientation,u=r==="append"||r==="prepend"?Ir(n.getBoundingClientRect(),a,r):Cr(t.getBoundingClientRect(),a,r);return{anchorHit:s,targetParentHit:c,relation:r,indicatorOrientation:a,indicatorBounds:u}}function vt(e,t,n){if(et(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",o=n?.(r)??null;if(o)return o.operationSummary.canInsertChild===!0?"accept":Oe(e)?"blocked":"not-container";let i=e.tagName.toLowerCase();return Le(i)?"accept":"not-container"}function Ge(e,t,n,r,o){let i=Be(t).indicatorOrientation,s=e.getBoundingClientRect(),c=i==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return o==="edge"&&c>=.25&&c<=.75?null:c<.5?"before":"after"}function Er(e,t,n){let r=Be(e).indicatorOrientation,o=e.getBoundingClientRect();return(r==="vertical"?o.width>0?(t-o.left)/o.width:.5:o.height>0?(n-o.top)/o.height:.5)<.5?"prepend":"append"}function Be(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",o=n?.flexDirection,i=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(o??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(i??"row").includes("column")?"vertical":"horizontal"),{display:r,...o?{flexDirection:o}:{},...i?{gridAutoFlow:i}:{},indicatorOrientation:s}}function Ir(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Cr(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Qe(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function vr(e,t,n,r,o){let i=xr(e,t,n,r,o);if(i)return i;let s=Kt(n);if(!s||t===s)return null;let c=t,a=t.getAttribute("data-vcp-edit-key")?t:null;for(;c&&c!==s;)c.getAttribute("data-vcp-edit-key")&&(a=c),c=c.parentElement;return c!==s||!a||a===s||a===n||Qe(a,n)?null:{child:a,targetParent:s}}function xr(e,t,n,r,o){return null}function Kt(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function Oe(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=Oe(n);if(r)return r}return null}function De(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:z(e.scrollX),scrollY:z(e.scrollY),scrollWidth:Math.max(z(t?.scrollWidth),z(n?.scrollWidth),z(e.innerWidth)),scrollHeight:Math.max(z(t?.scrollHeight),z(n?.scrollHeight),z(e.innerHeight)),viewportWidth:z(e.innerWidth),viewportHeight:z(e.innerHeight)}}function Rr(e,t){Object.entries(t.attributes??{}).forEach(([r,o])=>{if(o===null){e.removeAttribute(r);return}e.setAttribute(r,o)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,o])=>{if(n.has(r))return;let i=e.style,s=r.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);if(o==null||o===""){i.removeProperty(s);return}i.setProperty(s,String(o))}),t.styleDeclarations?.forEach(r=>{let o=e.style,i=r.property.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`),s=r.value;if(s==null||s===""){o.removeProperty(i);return}o.setProperty(i,String(s),r.priority)})}var _r=500,ye=new Map;function Tr(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function kr(e,t){if(ye.size>=_r){let n=ye.keys().next().value;n&&ye.delete(n)}ye.set(e,t)}var be=new Set;function Dr(e,t){let n=e.documentElement?.style,r=new Set;for(let[o,i]of Object.entries(t.variables??{}))o.startsWith("--")&&(r.add(o),n?.setProperty(o,i));for(let o of be)r.has(o)||n?.removeProperty(o);be.clear();for(let o of r)be.add(o);Br(e,t.stylesheets??[])}function Nr(e){let t=e.documentElement?.style;for(let n of be)t?.removeProperty(n);be.clear();for(let n of Wt(e))n.remove()}function Ar(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,o=r?e.defaultView?.getComputedStyle(r):null,i={};for(let s of n){let c=Vt(o,s);c&&(i[s]=c)}return i}function Vt(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return Ut(e,r,n)}function Ut(e,t,n){if(!t)return null;let r=Pr(t);if(!r)return t;let o=Vt(e,r.name,n);return o||(r.fallback?Ut(e,r.fallback,n)??r.fallback:null)}function Pr(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=Fr(n),o=r>=0?n.slice(0,r).trim():n;if(!o.startsWith("--"))return null;let i=r>=0?n.slice(r+1).trim():null;return{name:o,fallback:i||null}}function Fr(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function Br(e,t){let n=new Set(t.filter(i=>typeof i=="string"&&i.length>0)),r=new Map;for(let i of Wt(e)){let s=i.getAttribute("href")??"";if(!n.has(s)||r.has(s)){i.remove();continue}r.set(s,i)}let o=e.head;if(o)for(let i of n){if(r.has(i))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(xt,"true"),s.setAttribute("href",i),o.appendChild(s)}}function Wt(e){return Array.from(e.querySelectorAll(`link[${xt}]`))}function Or(e,t,n,r,o={}){let i=o.textNode?Mr(e.document,o.textNode):null;if(o.textNode&&!i)throw new Error("Failed to prepare text segment editor");let s=i?.element??t,c=s.textContent??"",a=i?void 0:t.innerHTML,u=qr(s),h=!1,y=()=>{e.document.removeEventListener("pointerdown",v,!0),s.removeEventListener("keydown",x),s.removeEventListener("blur",R),s.removeEventListener("input",B),Vr(s,u)},D=A=>{if(h)return;h=!0;let U=s.textContent??"";if(y(),A==="cancel"){i?.restore(c),i||(t.textContent=c),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(i?.restore(U),A==="commit"&&U!==c){o.onCommitSnapshot?.({ref:n,initialText:c,...a!==void 0?{initialHtml:a}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:U}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function v(A){let U=A.target;U&&s.contains(U)||D("commit")}function x(A){if(A.key==="Escape"){A.preventDefault(),D("cancel");return}A.key==="Enter"&&(A.metaKey||A.ctrlKey)&&(A.preventDefault(),D("commit"))}function R(){D("commit")}function B(){r({kind:"text-edit-input",payload:{ref:n,hit:W(t,n,void 0,"full")}})}return Kr(s),e.document.addEventListener("pointerdown",v,!0),s.addEventListener("keydown",x),s.addEventListener("blur",R),s.addEventListener("input",B),jr(s),wr(s,e.document),y}function Mr(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(o){t.nodeValue=o,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function qr(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function Kr(e){Ur(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function Vr(e,t){He(e,"contenteditable",t.contentEditable),He(e,"spellcheck",t.spellcheck),He(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function Ur(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function He(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function Wr(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function jr(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function wr(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function jt(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function z(e){let t=Number(e);return Number.isFinite(t)?t:0}export{Xe as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,Ye as VCP_SITE_EDIT_ROUTE_READY_EVENT,Dn as resolveSiteEditRouteId,An as resolveSiteEditWebSocketUrl,no as startSiteEditAutoBootstrap,Kn as startSiteEditFrameRuntime};
|
|
1
|
+
function ot(e){if(!Nn(e))return e;let t=new Map,n=e.pageComposition.status==="supported"?e.pageComposition.placementUnitKeys:[],r=new Map(e.dynamicDataSummaries??[]),i=o=>{let s=t.get(o);if(s)return s;let a=e.nodes[o];if(!a)throw new Error(`Missing compact document node ${o}`);let[c,u]=a,l=e.tokens[u];if(typeof l!="string")throw new Error(`Missing compact document token ${u}`);let p=`${c===null?"":i(c)}${l}`;return t.set(o,p),p};return{siteId:e.siteId,snapshotId:e.snapshotId,routeId:e.routeId,version:e.version,pageComposition:e.pageComposition,entries:e.entries.map((o,s)=>{let[a,c,u]=o,l=u===void 0?void 0:n[u];if(u!==void 0&&!l)throw new Error(`Missing page composition unit ${u}`);return{key:i(a),...l?{pageCompositionUnitKey:l}:{},operationSummary:Pn(c),...r.get(s)?{dynamicDataSummary:r.get(s)}:{}}})}}function Pn(e){return{canUpdateText:(e&1)!==0,canInsertChild:(e&2)!==0,canMove:(e&4)!==0,canRemove:(e&8)!==0}}function Nn(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"||typeof t.routeId!="string"||!Number.isInteger(t.version)||t.version<0||!Bt(t.pageComposition)||!Array.isArray(t.tokens)||!t.tokens.every(i=>typeof i=="string")||!Array.isArray(t.nodes)||!Array.isArray(t.entries))return!1;let n=t.nodes;if(!n.every((i,o)=>Array.isArray(i)&&i.length===2&&(i[0]===null||Ce(i[0])&&i[0]<o)&&Ce(i[1])&&i[1]<t.tokens.length)||!t.entries.every(i=>Array.isArray(i)&&(i.length===2||i.length===3)&&Ce(i[0])&&i[0]<n.length&&Ce(i[1])&&i[1]<=15&&(i.length===2||Ce(i[2]))))return!1;let r=t.dynamicDataSummaries;return r===void 0||Array.isArray(r)&&r.every(i=>Array.isArray(i)&&i.length===2&&Ce(i[0])&&i[0]<t.entries.length&&Bt(i[1]))}function Bt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ce(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}var ye=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(typeof t=="object"&&t!==null&&"payload"in t&&typeof t.payload=="object"&&t.payload!==null){let n=t.payload,r=typeof n.id=="string"?n.id:"unknown",i=e.isRequestKind(n.kind)?n.kind:"get-document";return{id:r,kind:i}}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!ae(t)||typeof t.type!="string"?!1:t.type==="request"?e.isRequestPayload(t.payload,n):t.type==="response"||t.type==="error"?ae(t.payload)&&typeof t.payload.id=="string":t.type==="event"?ae(t.payload)&&ae(t.payload.event):t.type==="auth"?ae(t.payload)&&typeof t.payload.key=="string":t.type==="auth-ok"?ae(t.payload)&&t.payload.ok===!0:!1}static isRequestPayload(t,n={}){if(!ae(t)||typeof t.id!="string"||!e.isRequestKind(t.kind))return!1;switch(t.kind){case"initialize-session":return typeof t.routeId=="string"&&(t.mutationContext===void 0||it(t.mutationContext));case"get-document":case"get-style-context":return typeof t.routeId=="string";case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return typeof t.key=="string"&&(t.routeId===void 0||typeof t.routeId=="string");case"get-history-status":return t.mutationContext===void 0;case"get-source-tree":return!0;case"get-source-file":return typeof t.path=="string";case"execute":return kn(t.request)&&(t.request.mutationContext===void 0||it(t.request.mutationContext))&&(n.validateOperationRequest?.(t.request)??!0);case"undo":case"redo":return t.mutationContext===void 0||it(t.mutationContext)}}};function ae(e){return typeof e=="object"&&e!==null}function kn(e){return ae(e)&&typeof e.id=="string"&&typeof e.siteId=="string"&&typeof e.baseSnapshotId=="string"&&(e.routeId===void 0||typeof e.routeId=="string")&&typeof e.kind=="string"&&ae(e.target)&&typeof e.documentVersion=="number"&&Number.isInteger(e.documentVersion)&&e.documentVersion>=0&&ae(e.params)}function it(e){return Dn(e)}function Dn(e){return ae(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:!1}var Bn="vcp:designer:trace",Fn="designer_trace",Ft="__VCP_DESIGNER_TRACE__";var On=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function Mn(e=globalThis){let t=e;try{if(t.localStorage?.getItem(Bn)==="1")return!0}catch{}try{let n=t.location?.search??"";return new URLSearchParams(n).get(Fn)==="1"}catch{return!1}}function he(e,t={},n=globalThis){if(!Mn(n))return;let r={type:e,timestamp:Date.now(),payload:Vn(t)},i=n,o=i[Ft]??[];o.push(r),o.length>1e3&&o.splice(0,o.length-1e3),i[Ft]=o;let s=n.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(n.console,"[designer-trace]",r)}function Vn(e){return st(e,0)}function st(e,t){if(t>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>st(r,t+1));if(!e||typeof e!="object")return e;let n={};for(let[r,i]of Object.entries(e)){if(On.test(r)){n[r]="[redacted]";continue}n[r]=st(i,t+1)}return n}var ze=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===ct&&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(a){let c=_e(a,"WebSocket failed");this.socket=null,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("failed",c.message),n(c);return}let i={socket:r,settled:!1,reject:n};this.connectAttempt=i,this.socket=r;let o=()=>{this.socket!==r||this.connectAttempt!==i||(i.settled=!0,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("open"),t())},s=(a,c)=>{this.cleanupSocket(r,a,c)};r.onopen=()=>{if(!(this.socket!==r||this.connectAttempt!==i)){if(this.options.authKey){try{r.send(ye.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(a){s(_e(a,"WebSocket auth failed"),"failed")}return}o()}},r.onerror=a=>{if(this.socket!==r)return;let c=_e(a,"WebSocket failed");s(c,"failed")},r.onmessage=a=>{if(this.socket===r){if(this.options.authKey&&this.connectAttempt===i&&!i.settled){this.handleAuthHandshakeMessage(a.data,r,i,()=>{o()});return}this.handleMessage(a.data)}},r.onclose=a=>{if(this.socket!==r)return;let c=this.intentionalClose,u=new Error(Wn(a,{intentional:c}));s(u,c?"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){return this.request("get-document",{routeId:t})}initializeSession(t){return this.request("initialize-session",t)}getHistoryStatus(){return this.request("get-history-status",{})}getStyleContext(t){return this.request("get-style-context",{routeId:t})}getObjectEditContext(t,n){return this.request("get-object-edit-context",{key:t,routeId:n})}getClassNameSource(t,n){return this.request("get-class-name-source",{key:t,routeId:n})}getSourceTree(){return this.request("get-source-tree",{})}getSourceFile(t){return this.request("get-source-file",t)}resolveSourceLocation(t){return this.request("resolve-source-location",t)}execute(t,n){return this.request("execute",{request:t})}undo(t){return this.request("undo",{})}redo(t){return this.request("redo",{})}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}request(t,n){let r=this.socket;if(!r||r.readyState!==ct||this.connectionState!=="open")return Promise.reject(new Error(`WebSocket is not open (state: ${this.connectionState}, readyState: ${r?.readyState??"none"})`));let i=`${t}-${this.sequence+=1}`,o=Un(i,t,n);return he("bridge.request",{id:i,kind:t,routeId:typeof n.routeId=="string"?n.routeId:null,key:typeof n.key=="string"?n.key:null,operationKind:Ot(n.request,"kind"),documentVersion:Ot(n.request,"documentVersion")}),new Promise((s,a)=>{let c=this.resolveRequestTimeoutMs(t),u=c>0?setTimeout(()=>{let l=this.pending.get(i);l&&(this.pending.delete(i),he("bridge.response",{id:i,kind:t,ok:!1,timedOut:!0}),l.reject(new Error(`Bridge request timed out after ${c}ms: ${t}`)))},c):null;u?.unref?.(),this.pending.set(i,{kind:t,timeout:u,resolve:l=>s(l),reject:a});try{r.send(ye.stringifyMessage(o))}catch(l){let p=_e(l,"WebSocket send failed");this.clearPendingRequest(i),a(p),this.cleanupSocket(r,p,"failed")}})}handleAuthHandshakeMessage(t,n,r,i){try{if(ye.parseMessage(t).type==="auth-ok"){i();return}throw new Error("Bridge authentication failed")}catch(o){let s=_e(o,"Bridge authentication failed");this.connectAttempt===r&&this.cleanupSocket(n,s,"failed")}}handleMessage(t){let n=ye.parseMessage(t);if(n.type==="event"){for(let i of this.listeners)i(n.payload.event);return}if(n.type!=="response"&&n.type!=="error")return;let r=this.pending.get(n.payload.id);if(r){if(this.clearPendingRequest(n.payload.id),n.type==="error"){he("bridge.response",{id:n.payload.id,kind:r.kind,ok:!1}),r.reject(new Error(n.payload.message));return}he("bridge.response",{id:n.payload.id,kind:r.kind,ok:!0,resultVersion:Kn(n.payload.result)}),r.resolve(r.kind==="get-document"?{...n.payload.result,data:ot(n.payload.result.data)}:r.kind==="initialize-session"?$n(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):wn[t]??zn}cleanupSocket(t,n,r){if(this.socket===t&&(this.socket=null),this.connectAttempt?.socket===t){let i=this.connectAttempt;this.connectAttempt=null,i.settled||(i.settled=!0,i.reject(n))}this.connectPromise=null,this.rejectAll(n),this.setConnectionState(r,n.message),t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null;try{(t.readyState===qn||t.readyState===ct)&&t.close()}catch{}}setConnectionState(t,n){if(this.connectionState===t&&!n)return;this.connectionState=t;let r={state:t,...n?{message:n}:{}};this.options.onConnectionStatus?.(r);for(let i of this.connectionStatusListeners)i(r)}createSocket(t){if(this.options.createSocket)return this.options.createSocket(t);if(typeof WebSocket>"u")throw new Error("Site edit preview bridge requires WebSocket");return new WebSocket(t)}},qn=0,ct=1,zn=15e3,wn={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function _e(e,t){return e instanceof Error?e:new Error(t)}function Wn(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 Ot(e,t){if(!e||typeof e!="object")return null;let r=e[t];return typeof r=="string"||typeof r=="number"?r:null}function Kn(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 Vt(e){return new at(e)}var at=class{constructor(t){this.params=t,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=null,this.styleContextInFlight=null,this.currentDocument=t.initialDocument,this.observedDocumentVersion=t.initialDocument.version,this.sessionInitialized=!Mt(t.initialDocument)}async getDocument(t){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);let n=Mt(this.currentDocument);return(n||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(n?void 0:this.observedDocumentVersion,"get-document"),this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(t){if(t.routeId!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t.routeId}`);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let n=await this.params.client.initializeSession(t);return this.currentDocument=n.data.document,this.observedDocumentVersion=n.data.document.version,this.sessionInitialized=!0,this.clearObjectCaches(),n}async getHistoryStatus(){return this.params.client.getHistoryStatus()}async getStyleContext(t){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);let n=this.styleContextCache;if(n?.generation===this.styleGeneration)return{ok:!0,data:n.value};let r=this.styleContextInFlight;if(r?.generation===this.styleGeneration)return r.request;let i=this.styleGeneration,o=this.params.client.getStyleContext(t).then(s=>(this.styleGeneration===i&&(this.styleContextCache={generation:i,value:s.data}),s)).finally(()=>{this.styleContextInFlight?.request===o&&(this.styleContextInFlight=null)});return this.styleContextInFlight={generation:i,request:o},o}async ensureDocumentVersion(t,n){if(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${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(t!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${t}`);return n>this.currentDocument.version&&(this.currentDocument={...this.currentDocument,version:n},this.clearObjectCaches({preserveStyleContext:!0})),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,n),{ok:!0,data:this.currentDocument}}async getObjectEditContext(t,n){let r=this.objectCacheKey(t,n),i=this.editContextCache.get(r);if(i)return{ok:!0,data:i};let o=this.editContextInFlight.get(r);if(o)return o;let s=this.objectGeneration,a=this.params.client.getObjectEditContext(t,n??this.params.routeId).then(c=>(this.objectGeneration===s&&this.editContextCache.set(r,c.data),c)).finally(()=>{this.editContextInFlight.get(r)===a&&this.editContextInFlight.delete(r)});return this.editContextInFlight.set(r,a),a}async getClassNameSource(t,n){let r=this.objectCacheKey(t,n),i=this.classNameSourceCache.get(r);if(i)return i;let o=this.classNameSourceInFlight.get(r);if(o)return o;let s=this.objectGeneration,a=this.params.client.getClassNameSource(t,n??this.params.routeId).then(c=>(this.objectGeneration===s&&this.classNameSourceCache.set(r,c),c)).finally(()=>{this.classNameSourceInFlight.get(r)===a&&this.classNameSourceInFlight.delete(r)});return this.classNameSourceInFlight.set(r,a),a}async getSourceTree(){return this.params.client.getSourceTree()}async getSourceFile(t){return this.params.client.getSourceFile(t)}async resolveSourceLocation(t){return this.params.client.resolveSourceLocation({...t,routeId:t.routeId??this.params.routeId})}async execute(t,n){let r=t.target.kind==="node"&&!t.routeId?{...t,routeId:this.params.routeId}:t;return this.params.client.execute(r)}async undo(t){return this.params.client.undo()}async redo(t){return this.params.client.redo()}subscribe(t){return this.params.client.subscribe(n=>{if(n.type==="site-edit.document.changed"&&n.routeId===this.params.routeId&&this.sessionInitialized){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 he("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:n}),this.currentDocument;if(this.refreshInFlight){he("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!0,source:n});let i=await this.refreshInFlight;if(typeof t!="number"||i.version>=t||this.currentDocument.version>=t)return this.currentDocument}he("bridge.document-refresh",{routeId:this.params.routeId,minVersion:t,currentVersion:this.currentDocument.version,deduped:!1,source:n});let r=this.params.client.getDocument(this.params.routeId).then(i=>(this.currentDocument=i.data,this.observedDocumentVersion=Math.max(this.observedDocumentVersion,i.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight=r;try{return await r}finally{this.refreshInFlight===r&&(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=null,this.styleContextInFlight=null)}objectCacheKey(t,n){return`${n??this.params.routeId}\0${t}`}};function Mt(e){return e.version===0&&e.entries.length===0}function $n(e){let t=e;return{...t,data:{...t.data,document:ot(t.data.document)}}}function Un(e,t,n){switch(t){case"initialize-session":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId),...n.mutationContext?{mutationContext:n.mutationContext}:{}}};case"get-document":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId)}};case"get-history-status":return{type:"request",payload:{id:e,kind:t}};case"get-style-context":return{type:"request",payload:{id:e,kind:t,routeId:String(n.routeId)}};case"get-object-edit-context":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"get-class-name-source":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"get-source-tree":return{type:"request",payload:{id:e,kind:t}};case"get-source-file":return{type:"request",payload:{id:e,kind:t,path:String(n.path)}};case"resolve-source-location":return{type:"request",payload:{id:e,kind:t,key:String(n.key),routeId:typeof n.routeId=="string"?n.routeId:void 0}};case"execute":return{type:"request",payload:{id:e,kind:t,request:n.request}};case"undo":case"redo":return{type:"request",payload:{id:e,kind:t,mutationContext:n.mutationContext}}}}var qt="vcp-window-message";function Gn(e){return{source:qt,version:1,namespace:e.namespace,channel:e.channel,...e.sessionKey?{sessionKey:e.sessionKey}:{},body:e.body}}function jn(e){try{return C(e)?$(e,"source",qt)&&$(e,"version",1)&&O(e,"namespace")&&O(e,"channel")&&ie(e,"body")&&(!Ee(e,"sessionKey")||O(e,"sessionKey")):!1}catch{return!1}}var zt="site-edit",wt="frame-runtime",lt=1,Ae=1,Pe=1,Wt=24;function ke(e,t={}){return Gn({namespace:zt,channel:wt,sessionKey:t.sessionKey,body:e})}function Kt(e){try{return!jn(e)||e.namespace!==zt||e.channel!==wt?!1:gr(e.body)}catch{return!1}}var Ee=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function ie(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 $(e,t,n){return ie(e,t)&&d(e,t)===n}function O(e,t){return ie(e,t)&&typeof d(e,t)=="string"}function We(e,t){return ie(e,t)&&typeof d(e,t)=="boolean"}function V(e,t){let n=d(e,t);return ie(e,t)&&typeof n=="number"&&Number.isFinite(n)}function Hn(e,t){let n=d(e,t);return ie(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>0}function Se(e,t){return!Ee(e,t)||d(e,t)===void 0||O(e,t)}function be(e,t){return!Ee(e,t)||d(e,t)===void 0||V(e,t)}function we(e,t){let n=d(e,t);return!Ee(e,t)||n===void 0||ie(e,t)&&typeof n=="number"&&Number.isInteger(n)&&n>=0}function w(e,t){return!Ee(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 Yn(e){return C(e)&&Reflect.ownKeys(e).length===0}function $t(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 ue(e){return C(e)&&O(e,"key")&&we(e,"instanceIndex")&&we(e,"instanceCount")&&we(e,"textSegmentIndex")}function Xn(e){return C(e)&&O(e,"blockId")&&ue(d(e,"ref"))&&Ne(d(e,"rect"))&&We(e,"targetIsSectionRoot")}function Jn(e){if(!C(e))return!1;let t=d(e,"placement"),n=d(e,"boundary");return O(e,"anchorBlockId")&&ue(d(e,"anchorRef"))&&(t==="before"||t==="after")&&C(n)&&V(n,"top")&&V(n,"left")&&V(n,"width")}function Ne(e){return C(e)&&["top","left","width","height"].every(t=>V(e,t))}function Ut(e){if(!C(e))return!1;let t=d(e,"rect"),n=d(e,"layout"),r=C(n)?d(n,"containingBlock"):null,i=d(e,"scrollContext"),o=C(r)&&($(r,"kind","viewport")&&Reflect.ownKeys(r).length===1||$(r,"kind","document")&&Reflect.ownKeys(r).length===1||$(r,"kind","element")&&O(r,"runtimeNodeId"));return $(e,"version",lt)&&O(e,"runtimeNodeId")&&C(t)&&Ne(d(t,"viewport"))&&Ne(d(t,"document"))&&C(n)&&O(n,"position")&&O(n,"transform")&&o&&C(i)&&["scrollX","scrollY","viewportWidth","viewportHeight"].every(s=>V(i,s))&&ie(i,"scrollContainers")&&Qn(d(i,"scrollContainers"))}function Qn(e){return Array.isArray(e)&&e.every(t=>C(t)&&O(t,"runtimeNodeId")&&V(t,"scrollLeft")&&V(t,"scrollTop"))}function ut(e){return C(e)&&(w(e,"layoutSnapshot")||Ut(d(e,"layoutSnapshot")))}function Zn(e){return C(e)&&ue(d(e,"ref"))&&ie(e,"layoutSnapshot")&&Ut(d(e,"layoutSnapshot"))&&(w(e,"childBoxes")||tr(d(e,"childBoxes")))&&(w(e,"childRects")||er(d(e,"childRects")))&&(w(e,"layout")||Ln(d(e,"layout")))&&(w(e,"spacing")||nr(d(e,"spacing")))}function Ln(e){if(!C(e))return!1;let t=d(e,"indicatorOrientation");return O(e,"display")&&(t==="horizontal"||t==="vertical")&&Se(e,"flexDirection")&&Se(e,"gridAutoFlow")}function er(e){return Array.isArray(e)&&e.every(t=>Ne(t))}function tr(e){return Array.isArray(e)&&e.every(t=>C(t)&&Ne(d(t,"rect"))&&Gt(d(t,"margin")))}function Gt(e){return C(e)&&["marginTop","marginRight","marginBottom","marginLeft"].every(t=>V(e,t))}function nr(e){return Gt(e)&&["paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","columnGap","rowGap"].every(t=>V(e,t))}function rr(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)||!Zn(n.value))return!1}return!0}function or(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&ie(e,t)&&(typeof d(e,t)=="string"||d(e,t)===null))}function jt(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function ir(e){return C(e)&&Reflect.ownKeys(e).every(t=>typeof t=="string"&&ie(e,t)&&jt(d(e,t)))}function sr(e){if(!C(e))return!1;let t=d(e,"priority");return O(e,"property")&&ie(e,"value")&&jt(d(e,"value"))&&(!Ee(e,"priority")||t===void 0||t==="important")}function cr(e){return C(e)?(w(e,"attributes")||or(d(e,"attributes")))&&Se(e,"className")&&(w(e,"style")||ir(d(e,"style")))&&(w(e,"styleDeclarations")||Array.isArray(d(e,"styleDeclarations"))&&d(e,"styleDeclarations").every(sr)):!1}function ar(e){return C(e)&&V(e,"x")&&V(e,"y")&&(w(e,"detailLevel")||$(e,"detailLevel","summary")||$(e,"detailLevel","full"))}function ur(e){return C(e)&&ue(d(e,"ref"))}function lr(e){if(!C(e)||!C(d(e,"variables")))return!1;let t=d(e,"variables");return Reflect.ownKeys(t).every(n=>typeof n=="string"&&O(t,n))?w(e,"stylesheets")||$t(d(e,"stylesheets")):!1}function dr(e){if(!$(e,"type","request")||!O(e,"id")||!O(e,"kind")||!ie(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 ar(n);case"bridge-get-source-tree":case"get-scroll-metrics":case"clear-theme-override":case"bridge-get-history-status":case"bridge-undo":case"bridge-redo":return Yn(n);case"bridge-get-source-file":return C(n)&&O(n,"path");case"bridge-resolve-source-location":case"bridge-get-object-edit-context":case"bridge-get-class-name-source":return C(n)&&O(n,"key")&&Se(n,"routeId");case"scroll-to":return C(n)&&V(n,"x")&&V(n,"y");case"scroll-by":return C(n)&&V(n,"deltaX")&&V(n,"deltaY");case"set-interaction-mode":return C(n)&&We(n,"enabled");case"set-selection-visual":return C(n)&&$(n,"version",Ae)&&ue(d(n,"ref"))&&$(n,"visible",!0);case"clear-selection-visual":return C(n)&&$(n,"version",Ae);case"set-resize-visual":return C(n)&&$(n,"version",Pe)&&ue(d(n,"ref"))&&$(n,"visible",!0);case"clear-resize-visual":return C(n)&&$(n,"version",Pe);case"set-theme-override":return lr(n);case"get-theme-variables":return C(n)&&$t(d(n,"names"));case"compute-drop-target-at-point":return C(n)&&V(n,"x")&&V(n,"y")&&($(n,"dragKind","insert")||$(n,"dragKind","move"))&&(w(n,"movingRef")||ue(d(n,"movingRef")));case"observe-node-bounds":case"clear-node-bounds-observer":return C(n)&&(w(n,"ref")||ue(d(n,"ref")));case"apply-node-patch":return C(n)&&ue(d(n,"ref"))&&cr(d(n,"patch"))&&(w(n,"preview")||C(d(n,"preview"))&&O(d(n,"preview"),"sessionId")&&we(d(n,"preview"),"revision")&&Ee(d(n,"preview"),"revision"));case"get-hit-by-ref":case"get-path-by-ref":case"restore-text-edit":case"clear-text-edit-rollback":return ur(n);case"bridge-initialize-session":case"bridge-get-style-context":return C(n)&&O(n,"routeId");case"bridge-get-document":case"bridge-ensure-document-version":case"bridge-acknowledge-document-version":return C(n)&&O(n,"routeId")&&be(n,"minVersion")&&be(n,"version");case"bridge-execute":return C(n)&&C(d(n,"request"));case"bridge-subscribe":case"bridge-unsubscribe":return C(n)&&O(n,"subscriptionId");default:return!1}}function pr(e){return $(e,"type","response")&&O(e,"id")&&We(e,"ok")&&(w(e,"error")||O(e,"error"))}var fr=new Set(["pointer-down","pointer-move","pointer-leave","pointer-up","pointer-cancel","pointer-click","pointer-double-click"]),Ht=new Set(["e","s","se"]);function hr(e,t){if(w(e,"resizeSession"))return!0;let n=d(e,"resizeSession");if(!C(n))return!1;let r=d(e,"pointerId"),i=d(n,"pointerId"),o=d(n,"phase"),s=d(n,"edge"),a=t==="pointer-down"?"start":t==="pointer-up"?"commit":t==="pointer-cancel"?"cancel":null;return d(n,"version")===1&&o===a&&O(n,"sessionId")&&String(d(n,"sessionId")).length>0&&typeof r=="number"&&Number.isInteger(r)&&typeof i=="number"&&Number.isInteger(i)&&r===i&&typeof s=="string"&&Ht.has(s)&&d(e,"resizeEdge")===s&&ue(d(n,"ref"))&&["startWidth","startHeight","width","height"].every(c=>V(n,c))}function mr(e){if(!$(e,"type","event")||!O(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 ue(d(n,"ref"))&&Se(n,"value")&&(w(n,"hit")||ut(d(n,"hit")));case"node-bounds-change":return ut(d(n,"hit"));case"geometry-batch":{let r=d(n,"reason");return Hn(n,"sequence")&&V(n,"sourceEventAt")&&V(n,"captureStartedAt")&&V(n,"capturedAt")&&(r==="scroll"||r==="resize"||r==="mutation")&&rr(d(n,"snapshots"))}case"bridge-event":return O(n,"subscriptionId")&&C(d(n,"event"));case"route-ready":return O(n,"routeId")&&be(n,"version");case"bridge-status":{let r=d(n,"state");return(r==="connecting"||r==="ready"||r==="reconnecting"||r==="failed"||r==="reload-required")&&Se(n,"routeId")&&be(n,"attempt")&&be(n,"retryInMs")&&Se(n,"messageKey")}case"scroll":{let r=d(n,"metrics");return C(r)&&["scrollX","scrollY","scrollWidth","scrollHeight","viewportWidth","viewportHeight"].every(i=>V(r,i))}default:return fr.has(t)&&V(n,"clientX")&&V(n,"clientY")&&be(n,"buttons")&&be(n,"pointerId")&&(w(n,"hoverVisualOwned")||We(n,"hoverVisualOwned"))&&(w(n,"resizeEdge")||O(n,"resizeEdge")&&Ht.has(d(n,"resizeEdge")))&&hr(n,t)&&(d(n,"hit")===null||ut(d(n,"hit")))&&(w(n,"section")||d(n,"section")===null||Xn(d(n,"section")))&&(w(n,"sectionGap")||d(n,"sectionGap")===null||Jn(d(n,"sectionGap")))}}function gr(e){if(!C(e))return!1;switch(d(e,"type")){case"request":return dr(e);case"response":return pr(e);case"event":return mr(e);default:return!1}}var ft="vcp-site-edit:route-ready",ht="vcp-site-edit:bridge-status",yr=80,br=120,Sr=1e3,Er="data-vcp-ui-component",ln="data-vcp-theme-preview",Yt="::repeat-item#",Ke="components/ui",Ir=new Set(["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"]),vr=new Set(["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"]);function Cr(e,t=""){let n=hn(t),r=n&&(e===n||e.startsWith(`${n}/`))?e.slice(n.length)||"/":e,i=r.startsWith("/")?r:`/${r}`;return i==="/"?"/":i.replace(/\/+$/,"")}function Rr(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 xr(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 fi(e=window,t={}){let n=xr(e,{explicit_ws_url:t.explicit_ws_url,port:t.ws_port,path:t.wsPath||"/__vcp/site-edit/bridge"}),r=Tr({bridgeUrl:n,options:t}),i=e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__;if(i?.started){if(_r(i.signature,r)){await i.syncRoute?.();return}i.cleanup?.()}let o={activeClient:null,activeBridge:null,cleanupFrameRuntime:(()=>{}),retryTimer:void 0,routeSequence:0,syncInFlight:null,syncScheduled:!1,disposed:!1,currentDocument:null,currentEntriesByKey:new Map,unsubscribeDocument:void 0,unsubscribeConnectionStatus:void 0,unbindBootstrapLifecycle:void 0,unbindRouteChange:void 0},s,a=()=>e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__===s,c=t.create_client??(f=>new ze({url:f,authKey:t.bridge_session_key})),u=t.schedule_after_navigation??Qr,l=()=>{o.retryTimer&&(e.clearTimeout(o.retryTimer),o.retryTimer=void 0)},p=()=>Cr(e.location.pathname,t.basePath||""),b=!!e.parent&&e.parent!==e,S=f=>{Zr(e,f)},P=f=>{o.currentDocument=f,o.currentEntriesByKey=new Map((f?.entries??[]).map(I=>[I.key,I]))},x=()=>{o.unsubscribeConnectionStatus?.(),o.unsubscribeConnectionStatus=void 0,o.unsubscribeDocument?.(),o.unsubscribeDocument=void 0},N=(f,I)=>!o.disposed&&I===o.routeSequence&&f===p(),F=async(f,I)=>{let B=o.activeBridge;if(!B)return null;let _=await B.getDocument(f);return N(f,I)&&P(_.data),_.data},M=()=>{x(),P(null);let f=o.activeBridge;o.activeBridge=null,f&&e.__VCP_SITE_EDIT__===f&&delete e.__VCP_SITE_EDIT__;let I=o.activeClient;o.activeClient=null,I?.disconnect()},J=f=>f===s.routeId&&!!o.activeBridge&&(b||!!(o.currentDocument&&eo(o.currentDocument,f)))&&Lr(o.activeClient),y=f=>Math.min(Sr*2**Math.max(0,f),8e3),ee=(f,I,B)=>{if(o.disposed)return;l();let _=y(B);S({state:"reconnecting",routeId:f,attempt:B,retryInMs:_,messageKey:"studio.status.previewBridgeConnecting"}),o.retryTimer=e.setTimeout(()=>{o.retryTimer=void 0,!(o.disposed||I!==o.routeSequence)&&G(B+1).catch(j=>{let H=p();if(f===H){if(Re(j)){S({state:"reload-required",routeId:f,attempt:B,messageKey:"studio.errors.previewBridgeReloadRequired"});return}ee(f,o.routeSequence,B+1)}})},_)},Q=(f,I,B)=>{if(!N(f,I)||o.activeClient===null)return;if(Re(B.message)){M(),l(),S({state:"reload-required",routeId:f,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}let _=o.activeClient;x(),P(null);let j=o.activeBridge;o.activeBridge=null,j&&e.__VCP_SITE_EDIT__===j&&delete e.__VCP_SITE_EDIT__,o.activeClient=null,_?.disconnect(),ee(f,I,0)},oe=f=>{let I=p(),B=o.routeSequence;if(!(!N(I,B)||o.activeClient===null)){if(Re(f)){M(),l(),S({state:"reload-required",routeId:I,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}fn(f)&&Q(I,B,{state:"failed",message:yt(f,"Site edit bridge request failed")})}};o.cleanupFrameRuntime=Dr(e,{getCurrentDocument:()=>o.currentDocument,getDocumentEntry:f=>o.currentEntriesByKey.get(f)??null,setCurrentDocument:P,onBridgeRequestError:f=>{oe(f)}});let Z=async()=>G(0),G=async f=>{if(o.disposed)return;let I=p();if(J(I))return;let B=o.syncInFlight;if(B?.routeId===I)return B.promise;let _=o.routeSequence+1,j=te(I,_,f);o.syncInFlight={routeId:I,sequence:_,promise:j};try{await j}finally{o.syncInFlight?.promise===j&&(o.syncInFlight=null)}},te=async(f,I,B)=>{o.routeSequence=I,l(),M(),S({state:B>0?"reconnecting":"connecting",routeId:f,attempt:B,messageKey:B>0?"studio.status.previewBridgeConnecting":"studio.status.previewLoading"});let _=c(n),j=!1;o.activeClient=_,o.unsubscribeConnectionStatus=_.subscribeConnectionStatus?.(H=>{j&&(H.state==="closed"||H.state==="failed")&&Q(f,I,H)});try{if(await _.connect(),!N(f,I)){_.disconnect();return}let H=Vt({routeId:f,client:_,initialDocument:kr(f)});o.activeBridge=H,a()&&(e.__VCP_SITE_EDIT__=H),o.activeClient=_,o.unsubscribeDocument=H.subscribe(g=>{g.type==="site-edit.document.changed"&&g.routeId===f&&o.currentDocument&&g.version>o.currentDocument.version&&F(f,I).catch(()=>{})}),a()&&(s.routeId=f);let E=(b?null:await H.initializeSession({routeId:f}))?.data.document??null;if(E&&P(E),!N(f,I)){_.disconnect();return}j=!0,S({state:"ready",routeId:f,attempt:B,messageKey:"studio.status.previewReady"}),Rr(e,{documentVersion:E?.version??0,routeId:f,versions:t.runtime_versions}),E&&pn(e,{routeId:f,version:E.version})}catch(H){if(x(),o.activeClient===_&&(o.activeClient=null),o.activeBridge&&e.__VCP_SITE_EDIT__===o.activeBridge&&delete e.__VCP_SITE_EDIT__,o.activeBridge=null,_.disconnect(),P(null),!N(f,I))return;throw S({state:Re(H)?"reload-required":"failed",routeId:f,attempt:B,messageKey:Re(H)?"studio.errors.previewBridgeReloadRequired":"studio.errors.previewBridgeDisconnected"}),H}},T=f=>{if(o.disposed)return;let I=p();if(Re(f)){l(),S({state:"reload-required",routeId:I,attempt:0,messageKey:"studio.errors.previewBridgeReloadRequired"});return}ee(I,o.routeSequence,0)},k=()=>{o.syncScheduled||o.disposed||(o.syncScheduled=!0,u(()=>{o.syncScheduled=!1,!o.disposed&&Z().catch(f=>T(f))}))},R=()=>{o.disposed||(o.disposed=!0,o.syncScheduled=!1,o.syncInFlight=null,l(),o.routeSequence+=1,o.unbindRouteChange?.(),o.unbindRouteChange=void 0,o.unbindBootstrapLifecycle?.(),o.unbindBootstrapLifecycle=void 0,o.cleanupFrameRuntime(),M(),a()&&delete e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__)};if(s={started:!0,signature:r,syncRoute:Z,cleanup:R},e.__VCP_SITE_EDIT_AUTO_BOOTSTRAP__=s,o.unbindBootstrapLifecycle=Pr(e,R),o.unbindRouteChange=Jr(e,k,p),t.defer_initial_sync){k();return}await Z()}function Tr(e){return{basePath:hn(e.options.basePath??""),bridgeUrl:e.bridgeUrl,runtimeVersions:{bridge:e.options.runtime_versions?.bridge??null,contracts:e.options.runtime_versions?.contracts??null,engine:e.options.runtime_versions?.engine??null},sessionKeyFingerprint:Ar(e.options.bridge_session_key)}}function _r(e,t){return!!e&&JSON.stringify(e)===JSON.stringify(t)}function Ar(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 Pr(e,t){let n=()=>t();return e.addEventListener("pagehide",n),e.addEventListener("beforeunload",n),Nr(t),()=>{e.removeEventListener("pagehide",n),e.removeEventListener("beforeunload",n)}}function Nr(e){let t=import.meta.hot,n=import.meta.webpackHot,r=t??n;!r||typeof r.dispose!="function"||r.dispose(()=>e())}function kr(e){return{siteId:"preview",snapshotId:"preview",routeId:e,version:0,pageComposition:{status:"unsupported",reason:"ROUTE_RETURN_NOT_FOUND",diagnostics:[]},entries:[]}}function Dr(e=window,t={}){let n=null,r=null,i=null,o=null,s=null,a=null,c=0,u=null,l=null,p=null,b=null,S=null,P=new Map,x=typeof t.expectedSessionKey=="string"&&t.expectedSessionKey.length>0?t.expectedSessionKey:null,N=()=>{n?.(),n=null,r=null},F=()=>{i?.(),i=null,o?.(),o=null,s?.(),s=null,a?.cleanup(),a=null},M=(E,g,h)=>{let K=u?.sessionKey!==E||u?.sourceWindow!==g||u?.targetOrigin!==h;u={sessionKey:E,sourceWindow:g,targetOrigin:h},K&&(c=0,b=null,S=null)},J=(E,g)=>{let h=e.parent&&e.parent!==e?e.parent:null;return!h||g!==h?!1:!x||E===x},y=()=>{for(let E of P.values())E();P.clear()},ee=E=>JSON.stringify([E.routeId,E.version]),Q=()=>!p||p.state==="ready",oe=E=>JSON.stringify([E.state,E.routeId??null,E.attempt??null,E.retryInMs??null,E.messageKey??null]),Z=E=>{if(!Q())return;let g=ee(E);b!==g&&(o?.(),o=null,s?.(),s=null,a?.cleanup(),a=null,f({kind:"route-ready",payload:{routeId:E.routeId,version:E.version}}),u&&(b=g))},G=E=>{let g=oe(E);S!==g&&(E.state!=="ready"&&(b=null,l=null),f({kind:"bridge-status",payload:E}),u&&(S=g))},te=E=>{l=E,Z(E)},T=E=>{p=E,G(E)},k=()=>{l&&Z(l)},R=()=>{p&&G(p)},f=E=>{u&&u.sourceWindow.postMessage(ke({type:"event",...E},{sessionKey:u.sessionKey}),u.targetOrigin)},I=(E,g,h,K)=>{let z=t.getCurrentDocument?.()??null,L=uo(e.document,g.clientX,g.clientY),v=g.resizeSession?null:Oe(e.document,g.clientX,g.clientY,z),U=v?le(v,h==="full"?de(e.document,v,z):Qe(e.document,v,z),t.getDocumentEntry,h):null,ne=lo(e.document,L,z),se=fo(e.document,g,z);K&&U&&(E==="pointer-click"||E==="pointer-double-click")&&(K.preventDefault(),K.stopPropagation(),typeof K.stopImmediatePropagation=="function"&&K.stopImmediatePropagation()),f({kind:E,payload:{clientX:g.clientX,clientY:g.clientY,buttons:Number(g.buttons??0),pointerId:g.pointerId,hoverVisualOwned:g.hoverVisualOwned,resizeEdge:g.resizeEdge,resizeSession:g.resizeSession,hit:U,section:ne,sectionGap:se}})},B=E=>{f({kind:"pointer-leave",payload:{clientX:E?.clientX??0,clientY:E?.clientY??0,buttons:Number(E?.buttons??0),hit:null,section:null,sectionGap:null}})},_=(E,g,h)=>{F(),u={sessionKey:E,sourceWindow:g,targetOrigin:h};let K=Zo(e.document),z=Br(e,t.getCurrentDocument),L=null,v=null,U=null,ne=null,se=null,ce=()=>{se!==null&&(e.clearTimeout(se),se=null)},me=()=>{U!==null&&(Xe(e,U),U=null),L=null},Ve=()=>{U=null;let m=L;L=null,m&&I("pointer-move",m,"summary")},Te=m=>{ce(),v=m,L=m,U===null&&(U=Ye(e,Ve))},Y=()=>{v&&Te({...v,hoverVisualOwned:z?.updateAtPoint(v.clientX,v.clientY)??!1})},ge=e.document.documentElement,A=typeof ge.addEventListener=="function"?ge:e.document,D=m=>{if(a?.update(m)){m.preventDefault();return}Te({clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons),hoverVisualOwned:z?.update(m.target)??!1})},X=m=>{let q=Ur(m.target),Dt=q?a?.begin(m,q):null;Dt&&(m.target?.setPointerCapture?.(m.pointerId),m.preventDefault(),m.stopPropagation()),I("pointer-down",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons),pointerId:Number(m.pointerId),resizeEdge:q,resizeSession:Dt??void 0},"full",m)},fe=m=>{let q=a?.finish(m,"commit")??null;if(q){I("pointer-up",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons),pointerId:Number(m.pointerId),resizeEdge:q.edge,resizeSession:q},"summary",m);return}I("pointer-up",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons)},"summary",m)},ve=m=>{let q=a?.finish(m,"cancel")??null;I("pointer-cancel",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons),pointerId:q?.pointerId,resizeEdge:q?.edge,resizeSession:q??void 0},"summary",m)},Ct=m=>{let q=a?.finish(m,"cancel")??null;q&&I("pointer-cancel",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons),pointerId:q.pointerId,resizeEdge:q.edge,resizeSession:q},"summary",m)},Rt=m=>{I("pointer-click",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons)},"full",m)},xt=m=>{I("pointer-double-click",{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons)},"full",m)},rt=m=>{if(m&&m.target!==A&&m.target!==ge)return;let q=m?{clientX:Number(m.clientX),clientY:Number(m.clientY),buttons:Number(m.buttons)}:v;if(m&&q&&q.clientX>0&&q.clientX<e.innerWidth&&q.clientY>0&&q.clientY<e.innerHeight){Y();return}if(me(),m){ce(),se=e.setTimeout(()=>{se=null,v=null,B(q??void 0)},br);return}ce(),v=null,z?.clear(),B(q??void 0)},Tt=()=>rt(),An=()=>{ne=null,f({kind:"scroll",payload:{metrics:je(e)}}),Y()},_t=()=>{ne===null&&(ne=Ye(e,An))};e.document.addEventListener("pointerdown",X,!0),e.document.addEventListener("pointermove",D,{passive:!0,capture:!0}),e.document.addEventListener("pointerup",fe,!0),e.document.addEventListener("pointercancel",ve,!0),e.document.addEventListener("lostpointercapture",Ct,!0),e.document.addEventListener("click",Rt,!0),e.document.addEventListener("dblclick",xt,!0),e.addEventListener("scroll",_t,{passive:!0}),e.addEventListener("resize",Y,{passive:!0}),e.addEventListener("blur",Tt),e.document.addEventListener("load",Y,!0),A.addEventListener("pointerleave",rt,!0);let qe=e.visualViewport;qe?.addEventListener?.("resize",Y,{passive:!0}),qe?.addEventListener?.("scroll",Y,{passive:!0});let At=e.ResizeObserver,Pt=typeof At=="function"?new At(Y):null;Pt?.observe(ge);let Nt=e.MutationObserver,kt=typeof Nt=="function"?new Nt(Y):null;kt?.observe(ge,{attributes:!0,childList:!0,subtree:!0}),i=()=>{me(),ce(),v=null,z?.cleanup(),Pt?.disconnect(),kt?.disconnect(),ne!==null&&(Xe(e,ne),ne=null),K(),e.document.removeEventListener("pointerdown",X,!0),e.document.removeEventListener("pointermove",D,!0),e.document.removeEventListener("pointerup",fe,!0),e.document.removeEventListener("pointercancel",ve,!0),e.document.removeEventListener("lostpointercapture",Ct,!0),e.document.removeEventListener("click",Rt,!0),e.document.removeEventListener("dblclick",xt,!0),e.removeEventListener("scroll",_t),e.removeEventListener("resize",Y),e.removeEventListener("blur",Tt),e.document.removeEventListener("load",Y,!0),A.removeEventListener("pointerleave",rt,!0),qe?.removeEventListener?.("resize",Y),qe?.removeEventListener?.("scroll",Y)}},j=E=>{let g=E.detail;g?.routeId&&te(g)},H=E=>{let g=E.detail;g?.state&&T(g)},nt=E=>{let g=E.data;if(!Kt(g)||g.body.type!=="request"||g.body.kind!=="apply-node-patch"&&g.body.kind!=="get-hit-by-ref"&&g.body.kind!=="get-path-by-ref"&&g.body.kind!=="get-scroll-metrics"&&g.body.kind!=="scroll-to"&&g.body.kind!=="scroll-by"&&g.body.kind!=="set-interaction-mode"&&g.body.kind!=="set-selection-visual"&&g.body.kind!=="clear-selection-visual"&&g.body.kind!=="set-resize-visual"&&g.body.kind!=="clear-resize-visual"&&g.body.kind!=="set-theme-override"&&g.body.kind!=="clear-theme-override"&&g.body.kind!=="get-theme-variables"&&g.body.kind!=="compute-drop-target-at-point"&&g.body.kind!=="observe-node-bounds"&&g.body.kind!=="clear-node-bounds-observer"&&g.body.kind!=="restore-text-edit"&&g.body.kind!=="clear-text-edit-rollback"&&g.body.kind!=="start-text-edit-at-point"&&g.body.kind!=="hit-test-at-point"&&!Lt(g.body))return;let h=g.body,K=typeof g.sessionKey=="string"?g.sessionKey:null,z=E.source,L=E.origin;if(!K||!L||!z||typeof z.postMessage!="function"||!J(K,z))return;if(u){if(u.sourceWindow!==z||u.targetOrigin!==L)return;u.sessionKey!==K&&(N(),F(),y(),u=null)}M(K,z,L),R(),k();let v=U=>{let ne=typeof h.id=="string"?h.id:"unknown";z.postMessage(ke({id:ne,...U},{sessionKey:K}),L)};try{if(Lt(h)){Hr({message:h,sendEvent:A=>{z.postMessage(ke({type:"event",...A},{sessionKey:K}),L)},sendResponse:v,subscriptions:P,getCurrentDocument:t.getCurrentDocument,setCurrentDocument:t.setCurrentDocument,onBridgeRequestError:t.onBridgeRequestError,windowLike:e});return}if(h.kind==="apply-node-patch"){let A=pe(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!A){v({type:"response",ok:!1,error:"No editable element found for patch target"});return}let D=h.payload.preview,X=D?qo(D.sessionId,h.payload.ref):null;if(X&&D){let fe=De.get(X)??-1;if(D.revision<fe){v({type:"response",ok:!0,result:{applied:!1,appliedRevision:D.revision,stale:!0,latestRevision:fe}});return}if(D.revision===fe){v({type:"response",ok:!0,result:{applied:!1,appliedRevision:D.revision,duplicate:!0,latestRevision:fe}});return}}if(Mo(A,h.payload.patch),X&&D&&zo(X,D.revision),D?.responseDetail==="none"){v({type:"response",ok:!0,result:{applied:!0,appliedRevision:D.revision}});return}v({type:"response",ok:!0,result:le(A,de(e.document,A,t.getCurrentDocument?.()??null),t.getDocumentEntry,D?.responseDetail??"full")});return}if(h.kind==="get-hit-by-ref"){let A=pe(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!A){v({type:"response",ok:!1,error:"No editable element found for hit target"});return}v({type:"response",ok:!0,result:le(A,de(e.document,A,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")});return}if(h.kind==="get-path-by-ref"){let A=pe(e.document,h.payload.ref,t.getCurrentDocument?.()??null);if(!A){v({type:"response",ok:!1,error:"No editable element found for path target"});return}let D=[],X=A;for(;X;)X.getAttribute("data-vcp-edit-key")&&D.push(le(X,de(e.document,X,t.getCurrentDocument?.()??null),t.getDocumentEntry,"full")),X=X.parentElement;v({type:"response",ok:!0,result:D.reverse()});return}if(h.kind==="restore-text-edit"||h.kind==="clear-text-edit-rollback"){let A=h.payload.ref;if(h.kind==="clear-text-edit-rollback"){r&&en(r.ref,A)&&(r=null),v({type:"response",ok:!0,result:{cleared:!0}});return}if(!r||!en(r.ref,A)){v({type:"response",ok:!1,error:"No pending text edit rollback snapshot"});return}let D=ro(e.document,r,t.getCurrentDocument?.()??null);r=null,v(D?{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"){v({type:"response",ok:!0,result:je(e)});return}if(h.kind==="scroll-to"){let A=Number(h.payload.x),D=Number(h.payload.y);if(!Number.isFinite(A)||!Number.isFinite(D)){v({type:"response",ok:!1,error:"Invalid scroll position"});return}e.scrollTo({left:A,top:D}),v({type:"response",ok:!0,result:je(e)});return}if(h.kind==="scroll-by"){let A=Number(h.payload.deltaX),D=Number(h.payload.deltaY);if(!Number.isFinite(A)||!Number.isFinite(D)){v({type:"response",ok:!1,error:"Invalid scroll delta"});return}e.scrollBy({left:A,top:D}),v({type:"response",ok:!0,result:{...je(e),scrolled:!0}});return}if(h.kind==="set-interaction-mode"){h.payload.enabled?_(K,z,L):u?.sourceWindow===z&&u.targetOrigin===L&&u.sessionKey===K&&F(),v({type:"response",ok:!0,result:{interactionEnabled:h.payload.enabled}});return}if(h.kind==="set-selection-visual"){s?.(),s=null,i&&(s=Or(e,h.payload.ref,t.getCurrentDocument)),v({type:"response",ok:!0,result:{version:Ae,active:!!s}});return}if(h.kind==="clear-selection-visual"){s?.(),s=null,v({type:"response",ok:!0,result:{version:Ae,active:!1}});return}if(h.kind==="set-resize-visual"){a?.cleanup(),a=null,i&&(a=Gr(e,h.payload.ref,t.getCurrentDocument)),v({type:"response",ok:!0,result:{version:Pe,active:!!a}});return}if(h.kind==="clear-resize-visual"){a?.cleanup(),a=null,v({type:"response",ok:!0,result:{version:Pe,active:!1}});return}if(h.kind==="set-theme-override"){wo(e.document,h.payload),v({type:"response",ok:!0,result:{themeOverrideApplied:!0}});return}if(h.kind==="clear-theme-override"){Wo(e.document),v({type:"response",ok:!0,result:{themeOverrideCleared:!0}});return}if(h.kind==="get-theme-variables"){v({type:"response",ok:!0,result:Ko(e.document,h.payload.names)});return}if(h.kind==="compute-drop-target-at-point"){let A=Number(h.payload?.x),D=Number(h.payload?.y);if(!Number.isFinite(A)||!Number.isFinite(D)){v({type:"response",ok:!1,error:"Invalid drop target point"});return}v({type:"response",ok:!0,result:No(e,A,D,h.payload.dragKind,h.payload.movingRef,t.getCurrentDocument?.()??null,t.getDocumentEntry)});return}if(h.kind==="observe-node-bounds"){let A=h.payload.ref;if(!A){v({type:"response",ok:!1,error:"Missing bounds observer target"});return}let D=pe(e.document,A,t.getCurrentDocument?.()??null);if(!D){v({type:"response",ok:!1,error:"No editable element found for bounds observer target"});return}o?.(),o=Ro(e,D,A,t.getCurrentDocument,(X,fe,ve)=>{c+=1,f({kind:"geometry-batch",payload:{sequence:c,sourceEventAt:ve.sourceEventAt,captureStartedAt:ve.captureStartedAt,capturedAt:ve.capturedAt,reason:X,snapshots:[fe]}})}),v({type:"response",ok:!0,result:{observing:!0}}),f({kind:"node-bounds-change",payload:{hit:le(D,A,t.getDocumentEntry,"summary",e)}});return}if(h.kind==="clear-node-bounds-observer"){o?.(),o=null,v({type:"response",ok:!0,result:{cleared:!0}});return}if(h.kind!=="hit-test-at-point"&&h.kind!=="start-text-edit-at-point")return;let U=Number(h.payload?.x),ne=Number(h.payload?.y);if(!Number.isFinite(U)||!Number.isFinite(ne)){v({type:"response",ok:!1,error:"Invalid text edit point"});return}let se=h.kind==="hit-test-at-point"?Oe(e.document,U,ne,t.getCurrentDocument?.()??null):io(e.document,U,ne,t.getCurrentDocument?.()??null,t.getDocumentEntry);if(!se){v({type:"response",ok:!1,error:h.kind==="hit-test-at-point"?"No editable element at point":"No editable text element at point"});return}let ce=h.kind==="start-text-edit-at-point"?se:null,me=h.kind==="hit-test-at-point"?se:ce.element,Ve=h.payload.detailLevel??"full",Te=Ve==="full"?de(e.document,me,t.getCurrentDocument?.()??null):Qe(e.document,me,t.getCurrentDocument?.()??null),Y=ce&&typeof ce.textSegmentIndex=="number"?{...Te,textSegmentIndex:ce.textSegmentIndex}:Te,ge=le(me,Y,t.getDocumentEntry,Ve);if(h.kind==="hit-test-at-point"){v({type:"response",ok:!0,result:ge});return}N(),n=jo(e,me,Y,A=>{z.postMessage(ke({type:"event",...A},{sessionKey:K}),L)},{...ce?.textNode?{textNode:ce.textNode}:{},onCommitSnapshot:A=>{r=A}}),v({type:"response",ok:!0,result:{ref:Y}})}catch(U){v({type:"response",ok:!1,error:U instanceof Error?U.message:"Failed to start text edit"})}};return e.addEventListener("message",nt),e.addEventListener(ft,j),e.addEventListener(ht,H),()=>{N(),F(),u=null,y(),e.removeEventListener("message",nt),e.removeEventListener(ft,j),e.removeEventListener(ht,H)}}function Br(e,t){let n=e.document,r=n.head??n.documentElement;if(typeof r?.appendChild!="function")return null;let i="data-vcp-designer-hover-visual",o="data-vcp-designer-selection-visual",s=n.createElement("style");s.setAttribute("data-vcp-designer-hover-visual-style","true"),s.textContent=`
|
|
2
|
+
[${i}="true"]:not([${o}="true"]) {
|
|
3
|
+
outline: 1px dashed #4f6bff !important;
|
|
4
|
+
outline-offset: -1px !important;
|
|
5
|
+
}`,r.appendChild(s);let a=null,c=()=>{a?.removeAttribute(i),a=null},u=b=>{let S=St(b),P=S?.getAttribute("data-vcp-edit-key")??"",x=S&&Sn(S,t?.()??null,P)?S:null;return x===a||(c(),a=x,a?.setAttribute(i,"true")),!0};return{clear:c,cleanup:()=>{c(),s.remove()},update:u,updateAtPoint:(b,S)=>u(Oe(n,b,S,t?.()??null))}}var Fr=0;function Or(e,t,n){let r=e.document,i=r.head??r.documentElement,o=++Fr,s=`--vcp-designer-spacing-target-${o}`,a=`--vcp-designer-spacing-gap-${o}`,c=typeof e.CSS?.supports=="function"&&e.CSS.supports(`anchor-name: ${s}`)&&e.CSS.supports(`position-anchor: ${s}`)&&e.CSS.supports("left: anchor(left)")&&e.CSS.supports("width: anchor-size(width)"),u=()=>pe(r,t,n?.()??null),l=u();if(!l||!l.isConnected||typeof i?.appendChild!="function")return null;let p="data-vcp-designer-selection-visual",b=r.createElement("style");b.setAttribute("data-vcp-designer-selection-visual-style","true"),b.textContent=`
|
|
6
|
+
[${p}="true"] {
|
|
7
|
+
outline: 2px solid #4f6bff !important;
|
|
8
|
+
outline-offset: -2px !important;
|
|
9
|
+
}`,i.appendChild(b);let S=r.createElement("div");S.setAttribute("data-vcp-designer-spacing-visual-layer","true"),S.setAttribute("aria-hidden","true"),S.style.setProperty("position","fixed","important"),S.style.setProperty("inset","0","important"),S.style.setProperty("overflow","hidden","important"),S.style.setProperty("pointer-events","none","important"),S.style.setProperty("z-index","2147483645","important"),r.documentElement.appendChild(S),l.setAttribute(p,"true");let P=c?He(l,s):null,x=!1,N=null,F=[],M=[],J=()=>{N=null,M.forEach(R=>R()),M=Mr(S,F,l,c?s:null,a)},y=()=>{x||N!==null||(N=Ye(e,J))};J();let ee=()=>{if(x)return;let R=u();R===l&&R?.isConnected||(l?.removeAttribute(p),P?.(),P=null,l=R,l?.isConnected&&(l.setAttribute(p,"true"),P=c?He(l,s):null),G(),y())},Q=e.ResizeObserver,oe=typeof Q=="function"?new Q(y):null,Z=[];function G(){Z.forEach(R=>oe?.unobserve(R)),Z=l?.isConnected?[l,...Array.from(l.children)].filter(R=>typeof R.getBoundingClientRect=="function"):[],Z.forEach(R=>oe?.observe(R))}G();let te=e.MutationObserver,T=typeof te=="function"?new te(R=>{let f=l;ee();let I=f!==l,B=R.some(_=>_.type!=="attributes"||_.attributeName!=="class"&&_.attributeName!=="style"?!1:_.target===l?!0:l?.contains?.(_.target)===!0&&_.target!==S);!I&&!B||(G(),y())}):null;return T?.observe(r.documentElement,{attributeFilter:["data-vcp-edit-key","class","style"],attributes:!0,childList:!0,subtree:!0}),c||(e.addEventListener("scroll",y,!0),r.addEventListener("scroll",y,!0)),e.addEventListener("resize",y),()=>{x||(x=!0,N!==null&&(Xe(e,N),N=null),e.removeEventListener("scroll",y,!0),r.removeEventListener("scroll",y,!0),e.removeEventListener("resize",y),T?.disconnect(),oe?.disconnect(),l?.removeAttribute(p),M.forEach(R=>R()),M=[],P?.(),P=null,l=null,S.remove(),b.remove())}}function Mr(e,t,n,r,i){if(n?.isConnected===!0&&r)return Vr(e,t,n,r,i);let o=n?.isConnected===!0?qr(n):[];return o.forEach((s,a)=>{let c=t[a]??e.ownerDocument.createElement("div");t[a]||(c.style.setProperty("position","fixed","important"),c.style.setProperty("pointer-events","none","important"),e.appendChild(c),t[a]=c),c.setAttribute("data-vcp-designer-spacing-kind",s.kind),c.style.setProperty("background",s.kind==="margin"?"rgba(245, 158, 11, 0.24)":s.kind==="padding"?"rgba(56, 189, 248, 0.22)":"rgba(34, 197, 94, 0.22)","important"),c.style.setProperty("display","block","important"),c.style.setProperty("left",`${s.left}px`,"important"),c.style.setProperty("top",`${s.top}px`,"important"),c.style.setProperty("width",`${s.width}px`,"important"),c.style.setProperty("height",`${s.height}px`,"important")}),t.slice(o.length).forEach(s=>{s.style.setProperty("display","none","important")}),[]}function Vr(e,t,n,r,i){let o=et(n),s=[{kind:"margin",left:"anchor(left)",top:`calc(anchor(top) - ${o.marginTop}px)`,width:"anchor-size(width)",height:`${o.marginTop}px`},{kind:"margin",left:"anchor(right)",top:"anchor(top)",width:`${o.marginRight}px`,height:"anchor-size(height)"},{kind:"margin",left:"anchor(left)",top:"anchor(bottom)",width:"anchor-size(width)",height:`${o.marginBottom}px`},{kind:"margin",left:`calc(anchor(left) - ${o.marginLeft}px)`,top:"anchor(top)",width:`${o.marginLeft}px`,height:"anchor-size(height)"},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(top) + ${o.borderTopWidth}px)`,width:`calc(anchor-size(width) - ${o.borderLeftWidth+o.borderRightWidth}px)`,height:`${o.paddingTop}px`},{kind:"padding",left:`calc(anchor(right) - ${o.borderRightWidth+o.paddingRight}px)`,top:`calc(anchor(top) + ${o.borderTopWidth+o.paddingTop}px)`,width:`${o.paddingRight}px`,height:`calc(anchor-size(height) - ${o.borderTopWidth+o.borderBottomWidth+o.paddingTop+o.paddingBottom}px)`},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(bottom) - ${o.borderBottomWidth+o.paddingBottom}px)`,width:`calc(anchor-size(width) - ${o.borderLeftWidth+o.borderRightWidth}px)`,height:`${o.paddingBottom}px`},{kind:"padding",left:`calc(anchor(left) + ${o.borderLeftWidth}px)`,top:`calc(anchor(top) + ${o.borderTopWidth+o.paddingTop}px)`,width:`${o.paddingLeft}px`,height:`calc(anchor-size(height) - ${o.borderTopWidth+o.borderBottomWidth+o.paddingTop+o.paddingBottom}px)`}];s.forEach((u,l)=>{let p=Xt(e,t,l);p.setAttribute("data-vcp-designer-spacing-kind",u.kind),p.style.setProperty("position-anchor",r,"important"),p.style.setProperty("left",u.left,"important"),p.style.setProperty("top",u.top,"important"),p.style.setProperty("width",u.width,"important"),p.style.setProperty("height",u.height,"important"),p.style.setProperty("background",u.kind==="margin"?"rgba(245, 158, 11, 0.24)":"rgba(56, 189, 248, 0.22)","important");let b=u.kind==="margin"?[o.marginTop,o.marginRight,o.marginBottom,o.marginLeft][l]:[o.paddingTop,o.paddingRight,o.paddingBottom,o.paddingLeft][l-4];p.style.setProperty("display",(b??0)>.5?"block":"none","important")});let a=wr(n,o),c=a.map((u,l)=>{let p=Xt(e,t,s.length+l),b=`${i}-${l}`,S=He(u.anchorElement,b);return p.setAttribute("data-vcp-designer-spacing-kind","gap"),p.style.setProperty("position-anchor",b,"important"),p.style.setProperty("background","rgba(34, 197, 94, 0.22)","important"),p.style.setProperty("display","block","important"),p.style.setProperty("left",`calc(anchor(left) + ${u.leftOffset}px)`,"important"),p.style.setProperty("top",`calc(anchor(top) + ${u.topOffset}px)`,"important"),p.style.setProperty("width",`${u.width}px`,"important"),p.style.setProperty("height",`${u.height}px`,"important"),S});return t.slice(s.length+a.length).forEach(u=>{u.style.setProperty("display","none","important")}),c}function Xt(e,t,n){let r=t[n];if(r)return r;let i=e.ownerDocument.createElement("div");return i.style.setProperty("position","fixed","important"),i.style.setProperty("pointer-events","none","important"),e.appendChild(i),t[n]=i,i}function qr(e){let t=Ie(e.getBoundingClientRect()),n=et(e),r=t.left+n.borderLeftWidth,i=t.top+n.borderTopWidth,o=t.width-n.borderLeftWidth-n.borderRightWidth,s=t.height-n.borderTopWidth-n.borderBottomWidth,a=i+n.paddingTop,c=s-n.paddingTop-n.paddingBottom,u=[{kind:"margin",left:t.left,top:t.top-n.marginTop,width:t.width,height:n.marginTop},{kind:"margin",left:t.left+t.width,top:t.top,width:n.marginRight,height:t.height},{kind:"margin",left:t.left,top:t.top+t.height,width:t.width,height:n.marginBottom},{kind:"margin",left:t.left-n.marginLeft,top:t.top,width:n.marginLeft,height:t.height}];return o>0&&s>0&&u.push({kind:"padding",left:r,top:i,width:o,height:n.paddingTop},{kind:"padding",left:r+o-n.paddingRight,top:a,width:n.paddingRight,height:c},{kind:"padding",left:r,top:i+s-n.paddingBottom,width:o,height:n.paddingBottom},{kind:"padding",left:r,top:a,width:n.paddingLeft,height:c}),u.push(...zr(e,n)),u.filter(l=>l.width>.5&&l.height>.5)}function zr(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=vt(e);return[...Qt(r,"horizontal",t.columnGap),...Qt(r,"vertical",t.rowGap)]}function wr(e,t){let n=e.ownerDocument?.defaultView?.getComputedStyle(e).display??"";if(!["flex","inline-flex","grid","inline-grid"].includes(n)||t.columnGap<=0&&t.rowGap<=0)return[];let r=e.ownerDocument?.defaultView,i=Array.from(e.children).filter(o=>typeof o.getBoundingClientRect=="function").map(o=>({element:o,rect:Ie(o.getBoundingClientRect()),margin:It(r?.getComputedStyle(o))})).filter(({rect:o})=>o.width>0&&o.height>0);return[...Jt(i,"horizontal",t.columnGap),...Jt(i,"vertical",t.rowGap)].filter(o=>o.width>.5&&o.height>.5)}function Jt(e,t,n){if(n<=0||e.length<2)return[];let r=dn(e,t==="horizontal"?"y":"x"),i=[];return r.forEach(o=>{let s=[...o].sort((a,c)=>t==="horizontal"?a.rect.left-c.rect.left:a.rect.top-c.rect.top);for(let a=0;a<s.length-1;a+=1){let c=s[a],u=s[a+1];if(t==="horizontal"){let l=c.rect.left+c.rect.width+c.margin.marginRight,p=u.rect.left-u.margin.marginLeft-l,b=Math.min(n,p);i.push({anchorElement:c.element,leftOffset:l+Math.max(0,(p-b)/2)-c.rect.left,topOffset:Math.max(c.rect.top,u.rect.top)-c.rect.top,width:b,height:Math.min(c.rect.top+c.rect.height,u.rect.top+u.rect.height)-Math.max(c.rect.top,u.rect.top)})}else{let l=c.rect.top+c.rect.height+c.margin.marginBottom,p=u.rect.top-u.margin.marginTop-l,b=Math.min(n,p);i.push({anchorElement:c.element,leftOffset:Math.max(c.rect.left,u.rect.left)-c.rect.left,topOffset:l+Math.max(0,(p-b)/2)-c.rect.top,width:Math.min(c.rect.left+c.rect.width,u.rect.left+u.rect.width)-Math.max(c.rect.left,u.rect.left),height:b})}}}),i}function Qt(e,t,n){if(n<=0||e.length<2)return[];let r=dn(e,t==="horizontal"?"y":"x"),i=[];return r.forEach(o=>{let s=[...o].sort((a,c)=>t==="horizontal"?a.rect.left-c.rect.left:a.rect.top-c.rect.top);for(let a=0;a<s.length-1;a+=1){let c=s[a],u=s[a+1];if(t==="horizontal"){let l=c.rect.left+c.rect.width+c.margin.marginRight,p=u.rect.left-u.margin.marginLeft-l,b=Math.min(n,p);i.push({kind:"gap",left:l+Math.max(0,(p-b)/2),top:Math.max(c.rect.top,u.rect.top),width:b,height:Math.min(c.rect.top+c.rect.height,u.rect.top+u.rect.height)-Math.max(c.rect.top,u.rect.top)})}else{let l=c.rect.top+c.rect.height+c.margin.marginBottom,p=u.rect.top-u.margin.marginTop-l,b=Math.min(n,p);i.push({kind:"gap",left:Math.max(c.rect.left,u.rect.left),top:l+Math.max(0,(p-b)/2),width:Math.min(c.rect.left+c.rect.width,u.rect.left+u.rect.width)-Math.max(c.rect.left,u.rect.left),height:b})}}}),i}function dn(e,t){let n=[...e].sort((i,o)=>t==="x"?i.rect.left-o.rect.left||i.rect.top-o.rect.top:i.rect.top-o.rect.top||i.rect.left-o.rect.left),r=[];return n.forEach(i=>{let o=r.find(s=>s.some(a=>Wr(a.rect,i.rect,t)>.5));o?o.push(i):r.push([i])}),r}function Wr(e,t,n){return n==="x"?Math.min(e.left+e.width,t.left+t.width)-Math.max(e.left,t.left):Math.min(e.top+e.height,t.top+t.height)-Math.max(e.top,t.top)}var $e=new WeakMap;function He(e,t){let n=$e.get(e);if(!n){let i=e.style.getPropertyValue("anchor-name"),o=e.ownerDocument?.defaultView?.getComputedStyle(e).getPropertyValue?.("anchor-name").trim()??"";n={names:new Set,originalValue:i,originalPriority:e.style.getPropertyPriority("anchor-name"),computedValue:o==="none"?"":o},$e.set(e,n)}n.names.add(t),Zt(e,n);let r=!1;return()=>{if(r)return;r=!0;let i=$e.get(e);if(i){if(i.names.delete(t),i.names.size>0){Zt(e,i);return}i.originalValue?e.style.setProperty("anchor-name",i.originalValue,i.originalPriority):e.style.removeProperty("anchor-name"),$e.delete(e)}}}function Zt(e,t){let n=t.originalValue.trim()||t.computedValue;e.style.setProperty("anchor-name",[...n?[n]:[],...t.names].join(", "),"important")}var Kr=["e","se","s"],$r=0;function Ur(e){let t=e,i=(t?.getAttribute?.("data-vcp-designer-resize-handle")?t:t?.closest?.("[data-vcp-designer-resize-handle]"))?.getAttribute?.("data-vcp-designer-resize-handle");return i==="e"||i==="s"||i==="se"?i:void 0}function Gr(e,t,n){let r=++$r,i=`--vcp-designer-resize-target-${r}`,o=e.CSS;if(typeof o?.supports!="function"||!o.supports(`anchor-name: ${i}`)||!o.supports(`position-anchor: ${i}`)||!o.supports("left: anchor(left)")||!o.supports("top: anchor(top)"))return null;let s=e.document,a=s.head??s.documentElement,c=s.body??s.documentElement,u=()=>pe(s,t,n?.()??null),l=u();if(!l||!l.isConnected||typeof a?.appendChild!="function"||typeof c?.appendChild!="function")return null;let p="data-vcp-designer-resize-visual",b="data-vcp-designer-resize-handle",S=s.createElement("style");S.setAttribute("data-vcp-designer-resize-visual-style","true"),S.textContent=`
|
|
10
|
+
[${b}] {
|
|
11
|
+
position: fixed !important;
|
|
12
|
+
position-anchor: ${i};
|
|
13
|
+
z-index: 2147483646 !important;
|
|
14
|
+
box-sizing: border-box !important;
|
|
15
|
+
width: 8px !important;
|
|
16
|
+
height: 8px !important;
|
|
17
|
+
margin: 0 !important;
|
|
18
|
+
padding: 0 !important;
|
|
19
|
+
border: 1px solid #4f6bff !important;
|
|
20
|
+
border-radius: 2px !important;
|
|
21
|
+
background: #ffffff !important;
|
|
22
|
+
pointer-events: auto !important;
|
|
23
|
+
translate: -50% -50%;
|
|
24
|
+
}
|
|
25
|
+
[${b}="e"] { cursor: ew-resize !important; }
|
|
26
|
+
[${b}="s"] { cursor: ns-resize !important; }
|
|
27
|
+
[${b}="se"] { cursor: nwse-resize !important; }
|
|
28
|
+
[${b}="e"] { left: anchor(right); top: anchor(center); }
|
|
29
|
+
[${b}="se"] { left: anchor(right); top: anchor(bottom); }
|
|
30
|
+
[${b}="s"] { left: anchor(center); top: anchor(bottom); }
|
|
31
|
+
`,a.appendChild(S);let P=Kr.map(T=>{let k=s.createElement("div");return k.setAttribute(b,T),k.setAttribute("aria-hidden","true"),c.appendChild(k),k}),x=null,N=null,F=()=>{x?.removeAttribute(p),N?.(),N=null,x=null},M=T=>{F(),x=T,N=He(T,i),T.setAttribute(p,"true"),P.forEach(k=>k.style.removeProperty("display"))};M(l);let J=!1,y=null,ee=()=>{if(!y||!l)return;let T=(k,R,f)=>{R?l.style.setProperty(k,R,f):l.style.removeProperty(k)};T("width",y.widthValue,y.widthPriority),T("height",y.heightValue,y.heightPriority)},Q=(T,k,R)=>y?{version:1,phase:T,sessionId:y.sessionId,pointerId:y.pointerId,edge:y.edge,ref:t,startWidth:y.startWidth,startHeight:y.startHeight,width:k,height:R}:null,oe=T=>{if(!y||!l?.isConnected||T.pointerId!==y.pointerId)return!1;let k=Number(T.clientX)-y.startX,R=Number(T.clientY)-y.startY,f=Math.max(1,Math.round(y.startWidth+k)),I=Math.max(1,Math.round(y.startHeight+R));return(y.edge==="e"||y.edge==="se")&&l.style.setProperty("width",`${f}px`,"important"),(y.edge==="s"||y.edge==="se")&&l.style.setProperty("height",`${I}px`,"important"),!0},Z=()=>{if(J)return;let T=u();if(T===l&&T?.isConnected)return;ee();let k=y?.captureTarget,R=y?.pointerId;y=null,R!==void 0&&k?.releasePointerCapture?.(R),F(),l=T,l?.isConnected?M(l):P.forEach(f=>f.style.setProperty("display","none","important"))},G=e.MutationObserver,te=typeof G=="function"?new G(Z):null;return te?.observe(s.documentElement,{attributeFilter:["data-vcp-edit-key"],attributes:!0,childList:!0,subtree:!0}),{begin(T,k){if(J||y||!l?.isConnected)return null;let R=l.getBoundingClientRect();return y={sessionId:`resize-${r}-${T.pointerId}`,pointerId:T.pointerId,edge:k,startX:Number(T.clientX),startY:Number(T.clientY),startWidth:R.width,startHeight:R.height,widthValue:l.style.getPropertyValue("width"),widthPriority:l.style.getPropertyPriority("width"),heightValue:l.style.getPropertyValue("height"),heightPriority:l.style.getPropertyPriority("height"),captureTarget:T.target},Q("start",R.width,R.height)},update:oe,finish(T,k){if(!y||T.pointerId!==y.pointerId)return null;k==="commit"&&oe(T);let R=Math.max(1,Math.round(y.startWidth+Number(T.clientX)-y.startX)),f=Math.max(1,Math.round(y.startHeight+Number(T.clientY)-y.startY)),I=Q(k,k==="commit"?R:y.startWidth,k==="commit"?f:y.startHeight),B=y.captureTarget,_=y.pointerId;return ee(),y=null,B?.releasePointerCapture?.(_),I},cleanup(){if(J)return;J=!0,te?.disconnect(),ee();let T=y?.captureTarget,k=y?.pointerId;y=null,k!==void 0&&T?.releasePointerCapture?.(k),F(),l=null,P.forEach(R=>R.remove()),S.remove()}}}function Lt(e){let t=e.kind;return t==="bridge-initialize-session"||t==="bridge-get-document"||t==="bridge-get-history-status"||t==="bridge-get-style-context"||t==="bridge-ensure-document-version"||t==="bridge-acknowledge-document-version"||t==="bridge-get-object-edit-context"||t==="bridge-get-class-name-source"||t==="bridge-get-source-tree"||t==="bridge-get-source-file"||t==="bridge-resolve-source-location"||t==="bridge-execute"||t==="bridge-undo"||t==="bridge-redo"||t==="bridge-subscribe"||t==="bridge-unsubscribe"}function jr(e){return e.kind==="update-text"||e.kind==="update-array-item"||e.kind==="set-class-name-source"||e.kind==="set-props"||e.kind==="apply-style-draft"}async function Hr({message:e,sendEvent:t,sendResponse:n,subscriptions:r,getCurrentDocument:i,setCurrentDocument:o,onBridgeRequestError:s,windowLike:a}){let c=a.__VCP_SITE_EDIT__;if(!c){n({type:"response",ok:!1,error:"Site edit bridge is not ready in preview frame"});return}try{switch(e.kind){case"bridge-initialize-session":{let u=await c.initializeSession({routeId:e.payload.routeId});o?.(u.data.document),pn(a,{routeId:u.data.document.routeId,version:u.data.document.version}),n({type:"response",ok:!0,result:u});return}case"bridge-get-document":{let u=await c.getDocument(e.payload.routeId);o?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-get-history-status":n({type:"response",ok:!0,result:await c.getHistoryStatus()});return;case"bridge-get-style-context":n({type:"response",ok:!0,result:await c.getStyleContext(e.payload.routeId)});return;case"bridge-ensure-document-version":{if(!Number.isFinite(Number(e.payload.minVersion))){n({type:"response",ok:!1,error:"Invalid document version"});return}let u=c.ensureDocumentVersion?await c.ensureDocumentVersion(e.payload.routeId,Number(e.payload.minVersion)):await c.getDocument(e.payload.routeId);o?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-acknowledge-document-version":{if(!Number.isFinite(Number(e.payload.version))){n({type:"response",ok:!1,error:"Invalid document version"});return}let u=c.acknowledgeDocumentVersion?await c.acknowledgeDocumentVersion(e.payload.routeId,Number(e.payload.version)):await c.getDocument(e.payload.routeId);o?.(u.data),n({type:"response",ok:!0,result:u});return}case"bridge-get-object-edit-context":n({type:"response",ok:!0,result:await c.getObjectEditContext(e.payload.key,e.payload.routeId)});return;case"bridge-get-class-name-source":{let u=await c.getClassNameSource(e.payload.key,e.payload.routeId);n({type:"response",ok:!0,result:Yr(u,e.payload.key,a.document,i?.()??null)});return}case"bridge-get-source-tree":n({type:"response",ok:!0,result:await c.getSourceTree()});return;case"bridge-get-source-file":n({type:"response",ok:!0,result:await c.getSourceFile({path:e.payload.path})});return;case"bridge-resolve-source-location":n({type:"response",ok:!0,result:await c.resolveSourceLocation({key:e.payload.key,routeId:e.payload.routeId})});return;case"bridge-execute":{let u=await c.execute(e.payload.request),l=i?.()?.routeId;if(u.ok&&l&&c.acknowledgeDocumentVersion&&jr(e.payload.request)){let p=await c.acknowledgeDocumentVersion(l,u.data.resultVersion);o?.(p.data)}n({type:"response",ok:!0,result:u});return}case"bridge-undo":n({type:"response",ok:!0,result:await c.undo()});return;case"bridge-redo":n({type:"response",ok:!0,result:await c.redo()});return;case"bridge-subscribe":{let u=e.payload.subscriptionId;r.get(u)?.();let l=c.subscribe(p=>{t({kind:"bridge-event",payload:{event:p,subscriptionId:u}})});r.set(u,l),n({type:"response",ok:!0,result:{subscribed:!0}});return}case"bridge-unsubscribe":{let u=e.payload.subscriptionId;r.get(u)?.(),r.delete(u),n({type:"response",ok:!0,result:{unsubscribed:!0}});return}}}catch(u){s?.(u,e),n({type:"response",ok:!1,error:to(u)})}}function Yr(e,t,n,r){if(!e.ok)return e;let i=pe(n,{key:t},r),o=i?Xr(i):null;return o?{...e,data:{...e.data,computedStyle:{...e.data.computedStyle??{},...o}}}:e}function Xr(e){let t=e.ownerDocument.defaultView;if(!t)return null;let n=t.getComputedStyle(e);return{color:n.color,backgroundColor:n.backgroundColor,borderColor:n.borderColor}}function Jr(e,t,n=()=>e.location.pathname){let r=e.history.pushState,i=e.history.replaceState,o=n(),s=()=>{let u=n();u!==o&&(o=u,t())},a=()=>s(),c=()=>s();return e.history.pushState=function(...l){let p=r.apply(this,l);return s(),p},e.history.replaceState=function(...l){let p=i.apply(this,l);return s(),p},e.addEventListener("popstate",a),e.addEventListener("hashchange",c),()=>{e.history.pushState=r,e.history.replaceState=i,e.removeEventListener("popstate",a),e.removeEventListener("hashchange",c)}}function Qr(e){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>requestAnimationFrame(e));return}setTimeout(e,0)}function Ye(e,t){return typeof e.requestAnimationFrame=="function"?e.requestAnimationFrame(t):e.setTimeout(t,0)}function Xe(e,t){if(typeof e.cancelAnimationFrame=="function"){e.cancelAnimationFrame(t);return}e.clearTimeout(t)}function pn(e,t){e.dispatchEvent(new CustomEvent(ft,{detail:t}))}function Zr(e,t){e.dispatchEvent(new CustomEvent(ht,{detail:t}))}function Lr(e){return e?e.getConnectionState?e.getConnectionState()==="open":!0:!1}function eo(e,t){return e.routeId===t}function yt(e,t){return e instanceof Error&&e.message?e.message:typeof e=="string"&&e?e:t}function fn(e){let t=yt(e,"");return/websocket|readyState|not open|disconnected|bridge request timed out|network|econnreset|broken pipe|socket closed/i.test(t)}function to(e){let t=yt(e,"Site edit bridge request failed");return/bridge request timed out/i.test(t)?"Site edit bridge request timed out":fn(t)?"Site edit bridge disconnected":t}function Re(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return/authentication|auth failed|auth rejected|bridge key|session|unauthorized|forbidden|expired/i.test(t)}function hn(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function bt(e){return Ir.has(gn(e))}function no(e){return vr.has(gn(e))}function mn(e){return e.operationSummary?{canUpdateText:e.operationSummary.canUpdateText,canInsertChild:e.operationSummary.canInsertChild,canMove:e.operationSummary.canMove,canRemove:e.operationSummary.canRemove}:e.fallbackMode!=="preview"?{canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1}:{canUpdateText:no(e.tagName),canInsertChild:bt(e.tagName),canMove:!1,canRemove:!1}}function gn(e){return e?.trim().toLowerCase()??""}function en(e,t){return e.key!==t.key||e.instanceIndex!==t.instanceIndex||e.instanceCount!==t.instanceCount?!1:typeof e.textSegmentIndex=="number"&&typeof t.textSegmentIndex=="number"?e.textSegmentIndex===t.textSegmentIndex:!0}function ro(e,t,n){let r=pe(e,t.ref,n);if(!r)return!1;if(typeof t.ref.textSegmentIndex=="number"){let i=oo(r,t.ref.textSegmentIndex);return i?(i.nodeValue=t.initialText,!0):!1}return typeof t.initialHtml=="string"?(r.innerHTML=t.initialHtml,!0):(r.textContent=t.initialText,!0)}function oo(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Je(r)||(r.textContent??"").trim().length===0)){if(n===t)return r;n+=1}return null}function io(e,t,n,r,i){let o=Oe(e,t,n,r),s=St(o);if(!s)return null;let a=s.getAttribute("data-vcp-edit-key")??"",c=de(e,s,r),u=i?.(c.key)??i?.(a);if(!mn({operationSummary:u?.operationSummary,tagName:s.tagName,fallbackMode:"preview"}).canUpdateText)return null;let p=so(e,t,n,s);if(p){let b=ao(s,p);if(b!==null)return{element:s,textNode:p,textSegmentIndex:b}}return tt(s)?null:{element:s}}function so(e,t,n,r){let i=co(e,t,n);return!i||i.parentElement!==r?null:i}function co(e,t,n){let r=e,o=r.caretPositionFromPoint?.(t,n)?.offsetNode??null;if(Je(o))return o;let a=r.caretRangeFromPoint?.(t,n)?.startContainer??null;return Je(a)?a:null}function ao(e,t){let n=0;for(let r of Array.from(e.childNodes))if(!(!Je(r)||(r.textContent??"").trim().length===0)){if(r===t)return n;n+=1}return null}function Je(e){return e?.nodeType===3}function uo(e,t,n){return(typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean))[0]??null}function lo(e,t,n){let r=t;for(;r&&!r.getAttribute("data-site-block-id");)r=r.parentElement;if(!r)return null;let i=r.getAttribute("data-site-block-id")??"",o=r.getAttribute("data-vcp-edit-key")??"";return!i||!o?null:{blockId:i,ref:Qe(e,r,n),rect:Ie(r.getBoundingClientRect()),targetIsSectionRoot:t===r}}function po(e,t){return Array.from(e.querySelectorAll("[data-site-block-id]")).filter(n=>{let r=n.parentElement;for(;r;){if(r.getAttribute("data-site-block-id"))return!1;r=r.parentElement}return!!(n.getAttribute("data-site-block-id")&&n.getAttribute("data-vcp-edit-key"))}).map(n=>({element:n,blockId:n.getAttribute("data-site-block-id")??"",ref:Qe(e,n,t),rect:Ie(n.getBoundingClientRect())})).filter(({rect:n})=>n.width>0&&n.height>0).sort((n,r)=>n.rect.top-r.rect.top||n.rect.left-r.rect.left)}function fo(e,t,n){let r=po(e,n),i=r[0],o=r.at(-1);return!i||!o?null:[{anchorBlockId:i.blockId,anchorRef:i.ref,placement:"before",boundary:{top:i.rect.top,left:i.rect.left,width:i.rect.width}},...r.slice(1).map(a=>({anchorBlockId:a.blockId,anchorRef:a.ref,placement:"before",boundary:{top:a.rect.top,left:a.rect.left,width:a.rect.width}})),{anchorBlockId:o.blockId,anchorRef:o.ref,placement:"after",boundary:{top:o.rect.top+o.rect.height,left:o.rect.left,width:o.rect.width}}].find(({boundary:a})=>t.clientX>=a.left&&t.clientX<=a.left+a.width&&Math.abs(t.clientY-a.top)<=Wt)??null}function Oe(e,t,n,r=null){let i=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,n):[e.elementFromPoint(t,n)].filter(Boolean);for(let o of i){let s=St(o),a=s?.getAttribute("data-vcp-edit-key")??"";if(s&&Sn(s,r,a))return s}return null}function St(e){let t=e,n=null;for(;t;){let r=t.getAttribute("data-vcp-edit-key")??"";if(r){if(Et(t))return n??t;!ho(r)&&!n&&(n=t)}t=t.parentElement}return n}function Et(e){return e.getAttribute(Er)!==null}function ho(e){return mo(e.split("::")[0]??"")}function mo(e){if(!e)return!1;let t=go(e);return t===Ke||t.startsWith(`${Ke}/`)||t.includes(`/${Ke}/`)||t.endsWith(`/${Ke}`)}function go(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(i)}return r.join("/")}function de(e,t,n){let r=t.getAttribute("data-vcp-edit-key")??"",i=bn(In(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${_n(r)}"]`))),n,r);if(i.length<=1)return{key:tn(n,r,0)};let o=i.indexOf(t);return o>=0?{key:tn(n,r,o),instanceIndex:o,instanceCount:i.length}:{key:r}}function Qe(e,t,n){return de(e,t,n)}function pe(e,t,n){let r=Ze(t.key)??t.key,i=bn(In(Array.from(e.querySelectorAll(`[data-vcp-edit-key="${_n(r)}"]`))),n,t.key);if(i.length===0)return null;let o=typeof t.instanceIndex=="number"&&t.instanceIndex>=0&&t.instanceIndex<i.length?t.instanceIndex:null,s=(Ze(t.key)??t.key)!==t.key;if(o!==null&&!s)return i[o]??null;let a=yo(n,t.key);return a!==null&&a>=0&&a<i.length?i[a]??null:o!==null?i[o]??null:i[0]??null}function tn(e,t,n){return yn(e,t)[n]?.key??t}function yo(e,t){let n=Ze(t);if(!n)return null;let i=yn(e,n).findIndex(o=>o.key===t);return i>=0?i:null}function yn(e,t){return(e?.entries??[]).filter(n=>(Ze(n.key)??n.key)===t)}function bn(e,t,n){let r=En(t,n);return r?e.filter(i=>i.tagName.toLowerCase()===r):e}function Sn(e,t,n){let r=En(t,n);return!r||e.tagName.toLowerCase()===r}function En(e,t){return null}var bo=2,So=4;function In(e){return[...e].sort((t,n)=>{if(t===n)return 0;let r=typeof t.compareDocumentPosition=="function"?t.compareDocumentPosition(n):0;return(r&So)!==0?-1:(r&bo)!==0?1:0})}function Ze(e){if(typeof e!="string"||e.length===0)return e??null;let t=e;for(;;){let n=t.lastIndexOf(Yt);if(n<0)break;let r=Number(t.slice(n+Yt.length));if(!Number.isInteger(r)||r<0)return e;t=t.slice(0,n)}return t}function et(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e);return{...It(n),paddingTop:re(n?.paddingTop),paddingRight:re(n?.paddingRight),paddingBottom:re(n?.paddingBottom),paddingLeft:re(n?.paddingLeft),borderTopWidth:re(n?.borderTopWidth),borderRightWidth:re(n?.borderRightWidth),borderBottomWidth:re(n?.borderBottomWidth),borderLeftWidth:re(n?.borderLeftWidth),columnGap:re(n?.columnGap),rowGap:re(n?.rowGap)}}function It(e){return{marginTop:re(e?.marginTop,!0),marginRight:re(e?.marginRight,!0),marginBottom:re(e?.marginBottom,!0),marginLeft:re(e?.marginLeft,!0)}}function re(e,t=!1){let n=Number.parseFloat(e??"");return Number.isFinite(n)?t?n:Math.max(0,n):0}function vt(e){let t=e.ownerDocument?.defaultView;return Array.from(e.children).filter(n=>typeof n.getBoundingClientRect=="function").map(n=>({rect:Ie(n.getBoundingClientRect()),margin:It(t?.getComputedStyle(n))})).filter(({rect:n})=>n.width>0&&n.height>0)}function Eo(e){return Array.from(e.children).filter(t=>typeof t.getBoundingClientRect=="function").map(t=>Ie(t.getBoundingClientRect())).filter(t=>t.width>0&&t.height>0)}var nn=new WeakMap,rn=0;function Be(e){let t=nn.get(e);if(t)return t;rn+=1;let n=`runtime-node-${rn}`;return nn.set(e,n),n}function vn(e,t,n){let r=n??e.ownerDocument?.defaultView,i=e.ownerDocument?.defaultView?.getComputedStyle(e),o=Ie(t),s=W(r?.scrollX),a=W(r?.scrollY),c=i?.position||"static";return{version:lt,runtimeNodeId:Be(e),rect:{viewport:o,document:{top:o.top+a,left:o.left+s,width:o.width,height:o.height}},layout:{position:c,transform:i?.transform||"none",containingBlock:vo(e,c)},scrollContext:{scrollX:s,scrollY:a,viewportWidth:W(r?.innerWidth),viewportHeight:W(r?.innerHeight),scrollContainers:Io(e)}}}function Io(e){let t=e.ownerDocument,n=t?.defaultView,r=[],i=e.parentElement;for(;i;){if(i!==t?.body&&i!==t?.documentElement){let o=n?.getComputedStyle(i),s=o?.overflowX||o?.overflow||"visible",a=o?.overflowY||o?.overflow||"visible",c=W(i.scrollLeft),u=W(i.scrollTop),l=c!==0||on(s)&&W(i.scrollWidth)>W(i.clientWidth),p=u!==0||on(a)&&W(i.scrollHeight)>W(i.clientHeight);(l||p)&&r.push({runtimeNodeId:Be(i),scrollLeft:c,scrollTop:u})}i=i.parentElement}return r}function on(e){return["auto","scroll","overlay","hidden"].includes(e)}function vo(e,t){if(t==="fixed"){let r=sn(e.parentElement,!0);return r?{kind:"element",runtimeNodeId:Be(r)}:{kind:"viewport"}}if(t==="absolute"){let r=e.offsetParent,i=Co(r)??sn(e.parentElement,!1);return i?{kind:"element",runtimeNodeId:Be(i)}:{kind:"document"}}let n=e.parentElement;return n?{kind:"element",runtimeNodeId:Be(n)}:{kind:"document"}}function sn(e,t){let n=e;for(;n;){let r=n.ownerDocument?.defaultView?.getComputedStyle(n);if(!!(r?.transform&&r.transform!=="none")||!!(r?.perspective&&r.perspective!=="none")||!!(r?.filter&&r.filter!=="none")||(r?.willChange??"").split(",").some(o=>["transform","perspective","filter"].includes(o.trim()))||!t&&(r?.position||"static")!=="static")return n;n=n.parentElement}return null}function Co(e){return e&&typeof e.getBoundingClientRect=="function"?e:null}function le(e,t,n,r="full",i){let o=e.getBoundingClientRect(),s=n?.(t.key)??null,a=e.tagName.toLowerCase(),c=Me(e),u=r==="full"?{textPreview:e.textContent?.trim().slice(0,80),dataset:Object.fromEntries(Object.entries(e.dataset).map(([N,F])=>[N,F??""])),attributes:Object.fromEntries(e.getAttributeNames().map(N=>[N,e.getAttribute(N)??""]))}:{},l=mn({operationSummary:s?.operationSummary,tagName:a,fallbackMode:"preview"}),p=Et(e),b=!0,S=Cn(e)?.getAttribute("data-vcp-edit-key")??null,P=vt(e),x=vn(e,o,i);return{ref:t,key:t.key,detailLevel:r,tagName:a,...s?{sourceKind:"jsx"}:{},...S?{parentKey:S}:{},...s?.pageCompositionUnitKey?{pageCompositionUnitKey:s.pageCompositionUnitKey}:{},...u,runtimeFlags:{selectable:!0,movable:l.canMove,removable:l.canRemove,textEditable:l.canUpdateText,container:p?!1:!!tt(e)||l.canInsertChild||b&&bt(a)},layoutSnapshot:x,layout:c,rect:{top:o.top,left:o.left,width:o.width,height:o.height},childBoxes:P,childRects:P.map(({rect:N})=>N),spacing:et(e)}}function cn(e,t,n,r){let i=e.getBoundingClientRect(),o=vn(e,i,n);if(r==="light")return{ref:t,layoutSnapshot:o};if(r==="child-rects")return{ref:t,layoutSnapshot:o,childRects:Eo(e)};let s=vt(e);return{ref:t,layoutSnapshot:o,childBoxes:s,childRects:s.map(({rect:a})=>a),layout:Me(e),spacing:et(e)}}function an(e){let t=e.layout?.display??"",n=e.spacing;return["flex","inline-flex","grid","inline-grid"].includes(t)&&!!(n&&(n.columnGap>0||n.rowGap>0)&&(e.childRects?.length??0)>=2)}function Ro(e,t,n,r,i){let o=t,s=cn(o,n,e,"detailed"),a=an(s),c=null,u=null,l="mutation",p=xe(e),b=p,S=!1,P=!1,x=({reason:te,sourceEventAt:T,forceEmit:k=!1,includeDetailedGeometry:R=!1})=>{(c===null||(te==="scroll"?0:1)>=(l==="scroll"?0:1))&&(l=te,p=T),S=S||k,P=P||R,c===null&&(c=Ye(e,N))},N=()=>{let te=xe(e);c=null;let T=l,k=p,R=S,f=P;S=!1,P=!1;let I=pe(e.document,n,r?.()??null);if(!I)return;I!==o&&(Q?.unobserve(o),o=I,Q?.observe(o),f=!0);let B=f?"detailed":a?"child-rects":"light",_=cn(o,n,e,B),j=_.layoutSnapshot.rect.viewport;j.width<=0||j.height<=0||!R&&!xo(s,_)||(s=_,B==="detailed"&&(a=an(_)),i(T,_,{sourceEventAt:k,captureStartedAt:te,capturedAt:xe(e)}))},F=()=>{u!==null&&(e.clearTimeout(u),u=null)},M=()=>{F(),x({reason:"resize",sourceEventAt:xe(e),includeDetailedGeometry:!0})},J=()=>{F(),x({reason:"mutation",sourceEventAt:xe(e),includeDetailedGeometry:!0})},y=()=>{b=xe(e),x({reason:"scroll",sourceEventAt:b}),F(),u=e.setTimeout(()=>{u=null,x({reason:"scroll",sourceEventAt:b,forceEmit:!0,includeDetailedGeometry:!0})},yr)},ee=e.ResizeObserver,Q=typeof ee=="function"?new ee(M):null;Q?.observe(o);let oe=e.MutationObserver,Z=typeof oe=="function"?new oe(J):null;Z?.observe(e.document.documentElement,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.addEventListener("resize",M,{passive:!0}),e.addEventListener("scroll",y,{passive:!0});let G=e.visualViewport;return G?.addEventListener?.("resize",M,{passive:!0}),G?.addEventListener?.("scroll",y,{passive:!0}),e.document.addEventListener("scroll",y,{capture:!0,passive:!0}),e.document.addEventListener("load",J,!0),()=>{c!==null&&(Xe(e,c),c=null),F(),Q?.disconnect(),Z?.disconnect(),e.removeEventListener("resize",M),e.removeEventListener("scroll",y),G?.removeEventListener?.("resize",M),G?.removeEventListener?.("scroll",y),e.document.removeEventListener("scroll",y,!0),e.document.removeEventListener("load",J,!0)}}function xe(e){let t=e.performance;return t&&Number.isFinite(t.timeOrigin)&&typeof t.now=="function"?t.timeOrigin+t.now():Date.now()}function xo(e,t){return To(e.layoutSnapshot,t.layoutSnapshot)||t.childBoxes!==void 0&&Ao(e.childBoxes,t.childBoxes)||t.childRects!==void 0&&Po(e.childRects,t.childRects)||t.layout!==void 0&&mt(e.layout,t.layout)||t.spacing!==void 0&&mt(e.spacing,t.spacing)}function To(e,t){return!e||!t?e!==t:e.version!==t.version||e.runtimeNodeId!==t.runtimeNodeId||Le(e.rect.viewport,t.rect.viewport)||Le(e.rect.document,t.rect.document)||e.layout.position!==t.layout.position||e.layout.transform!==t.layout.transform||e.layout.containingBlock.kind!==t.layout.containingBlock.kind||e.layout.containingBlock.kind==="element"&&t.layout.containingBlock.kind==="element"&&e.layout.containingBlock.runtimeNodeId!==t.layout.containingBlock.runtimeNodeId||e.scrollContext.scrollX!==t.scrollContext.scrollX||e.scrollContext.scrollY!==t.scrollContext.scrollY||e.scrollContext.viewportWidth!==t.scrollContext.viewportWidth||e.scrollContext.viewportHeight!==t.scrollContext.viewportHeight||_o(e.scrollContext.scrollContainers,t.scrollContext.scrollContainers)}function _o(e,t){return e.length!==t.length||e.some((n,r)=>{let i=t[r];return!i||n.runtimeNodeId!==i.runtimeNodeId||n.scrollLeft!==i.scrollLeft||n.scrollTop!==i.scrollTop})}function Ao(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>{let s=r[o];return!s||Le(i.rect,s.rect)||mt(i.margin,s.margin)})}function Po(e,t){let n=e??[],r=t??[];return n.length!==r.length||n.some((i,o)=>Le(i,r[o]??i))}function mt(e,t){let n=e??{},r=t??{},i=new Set([...Object.keys(n),...Object.keys(r)]);return Array.from(i).some(o=>n[o]!==r[o])}function Ie(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}function Le(e,t){return Math.abs(e.top-t.top)>.5||Math.abs(e.left-t.left)>.5||Math.abs(e.width-t.width)>.5||Math.abs(e.height-t.height)>.5}function No(e,t,n,r,i,o,s){let a=e.document,c=Oe(a,t,n,o);if(!c)return{anchorHit:null,targetParentHit:null,relation:"none",rejectionReason:"no-editable-hit"};let u=i?pe(a,i,o):null;if(u&>(c,u))return Ue(a,c,"self-or-descendant",o,s);if(r==="move"&&u){let x=Fo(a,c,u,o,s);if(x){let N=dt(x.child,x.targetParent,t,n,"nearest");if(N)return Ge(a,x.child,x.targetParent,N,o,s)}}let l=null,p=!1,b=c,S=c.parentElement;for(;S;){if(S.getAttribute("data-vcp-edit-key")){if(u&>(S,u))return Ue(a,c,"self-or-descendant",o,s);let x=un(S,r,s);if(x==="accept"){l={child:b,targetParent:S};break}x==="blocked"&&(p=!0),b=S}S=S.parentElement}let P=un(c,r,s);if(P==="accept"){if(l){let x=dt(l.child,l.targetParent,t,n,"edge");if(x)return Ge(a,l.child,l.targetParent,x,o,s)}return Ge(a,c,c,ko(c,t,n),o,s)}if(l){let x=dt(l.child,l.targetParent,t,n,"nearest");return Ge(a,l.child,l.targetParent,x??"after",o,s)}return P==="blocked"||p?Ue(a,c,"operation-boundary-blocked",o,s):Ue(a,c,"no-accepting-parent",o,s)}function Ue(e,t,n,r,i){return{anchorHit:le(t,de(e,t,r),i,"summary"),targetParentHit:null,relation:"none",rejectionReason:n}}function Ge(e,t,n,r,i,o){let s=le(t,de(e,t,i),o,"summary"),a=le(n,de(e,n,i),o,"summary"),c=Me(n).indicatorOrientation,u=r==="append"||r==="prepend"?Do(n.getBoundingClientRect(),c,r):Bo(t.getBoundingClientRect(),c,r);return{anchorHit:s,targetParentHit:a,relation:r,indicatorOrientation:c,indicatorBounds:u}}function un(e,t,n){if(Et(e))return"not-container";let r=e.getAttribute("data-vcp-edit-key")??"",i=n?.(r)??null;if(i)return i.operationSummary.canInsertChild===!0?"accept":tt(e)?"blocked":"not-container";let o=e.tagName.toLowerCase();return bt(o)?"accept":"not-container"}function dt(e,t,n,r,i){let o=Me(t).indicatorOrientation,s=e.getBoundingClientRect(),a=o==="vertical"?s.width>0?(n-s.left)/s.width:.5:s.height>0?(r-s.top)/s.height:.5;return i==="edge"&&a>=.25&&a<=.75?null:a<.5?"before":"after"}function ko(e,t,n){let r=Me(e).indicatorOrientation,i=e.getBoundingClientRect();return(r==="vertical"?i.width>0?(t-i.left)/i.width:.5:i.height>0?(n-i.top)/i.height:.5)<.5?"prepend":"append"}function Me(e){let n=e.ownerDocument?.defaultView?.getComputedStyle(e),r=n?.display??"",i=n?.flexDirection,o=n?.gridAutoFlow,s="horizontal";return r==="flex"||r==="inline-flex"?s=(i??"row").startsWith("row")?"vertical":"horizontal":(r==="grid"||r==="inline-grid")&&(s=(o??"row").includes("column")?"vertical":"horizontal"),{display:r,...i?{flexDirection:i}:{},...o?{gridAutoFlow:o}:{},indicatorOrientation:s}}function Do(e,t,n){if(t==="vertical")return{left:n==="prepend"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="prepend"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function Bo(e,t,n){if(t==="vertical")return{left:n==="before"?e.left:e.left+e.width-3,top:e.top,width:3,height:e.height};let r=n==="before"?e.top:e.top+e.height-3;return{left:e.left,top:r,width:e.width,height:3}}function gt(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentElement}return!1}function Fo(e,t,n,r,i){let o=Oo(e,t,n,r,i);if(o)return o;let s=Cn(n);if(!s||t===s)return null;let a=t,c=t.getAttribute("data-vcp-edit-key")?t:null;for(;a&&a!==s;)a.getAttribute("data-vcp-edit-key")&&(c=a),a=a.parentElement;return a!==s||!c||c===s||c===n||gt(c,n)?null:{child:c,targetParent:s}}function Oo(e,t,n,r,i){return null}function Cn(e){let t=e.parentElement;for(;t;){if(t.getAttribute("data-vcp-edit-key"))return t;t=t.parentElement}return null}function tt(e){for(let t of Array.from(e.childNodes)){if(typeof t.getAttribute!="function")continue;let n=t;if(n.getAttribute("data-vcp-edit-key"))return n;let r=tt(n);if(r)return r}return null}function je(e){let t=e.document.documentElement,n=e.document.body;return{scrollX:W(e.scrollX),scrollY:W(e.scrollY),scrollWidth:Math.max(W(t?.scrollWidth),W(n?.scrollWidth),W(e.innerWidth)),scrollHeight:Math.max(W(t?.scrollHeight),W(n?.scrollHeight),W(e.innerHeight)),viewportWidth:W(e.innerWidth),viewportHeight:W(e.innerHeight)}}function Mo(e,t){Object.entries(t.attributes??{}).forEach(([r,i])=>{if(i===null){e.removeAttribute(r);return}e.setAttribute(r,i)}),typeof t.className=="string"&&(e.className=t.className);let n=new Set(t.styleDeclarations?.map(r=>r.property)??[]);Object.entries(t.style??{}).forEach(([r,i])=>{if(n.has(r))return;let o=e.style,s=r.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`);if(i==null||i===""){o.removeProperty(s);return}o.setProperty(s,String(i))}),t.styleDeclarations?.forEach(r=>{let i=e.style,o=r.property.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`),s=r.value;if(s==null||s===""){i.removeProperty(o);return}i.setProperty(o,String(s),r.priority)})}var Vo=500,De=new Map;function qo(e,t){return`${e}:${t.key}:${t.instanceIndex??""}`}function zo(e,t){if(De.size>=Vo){let n=De.keys().next().value;n&&De.delete(n)}De.set(e,t)}var Fe=new Set;function wo(e,t){let n=e.documentElement?.style,r=new Set;for(let[i,o]of Object.entries(t.variables??{}))i.startsWith("--")&&(r.add(i),n?.setProperty(i,o));for(let i of Fe)r.has(i)||n?.removeProperty(i);Fe.clear();for(let i of r)Fe.add(i);Go(e,t.stylesheets??[])}function Wo(e){let t=e.documentElement?.style;for(let n of Fe)t?.removeProperty(n);Fe.clear();for(let n of Tn(e))n.remove()}function Ko(e,t){let n=Array.from(new Set(t.filter(s=>typeof s=="string"&&s.startsWith("--"))));if(n.length===0)return{};let r=e.documentElement,i=r?e.defaultView?.getComputedStyle(r):null,o={};for(let s of n){let a=Rn(i,s);a&&(o[s]=a)}return o}function Rn(e,t,n=new Set){if(!e||n.has(t))return null;n.add(t);let r=e.getPropertyValue(t).trim();return xn(e,r,n)}function xn(e,t,n){if(!t)return null;let r=$o(t);if(!r)return t;let i=Rn(e,r.name,n);return i||(r.fallback?xn(e,r.fallback,n)??r.fallback:null)}function $o(e){let t=e.trim();if(!t.startsWith("var(")||!t.endsWith(")"))return null;let n=t.slice(4,-1).trim(),r=Uo(n),i=r>=0?n.slice(0,r).trim():n;if(!i.startsWith("--"))return null;let o=r>=0?n.slice(r+1).trim():null;return{name:i,fallback:o||null}}function Uo(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="("){t+=1;continue}if(r===")"){t=Math.max(0,t-1);continue}if(r===","&&t===0)return n}return-1}function Go(e,t){let n=new Set(t.filter(o=>typeof o=="string"&&o.length>0)),r=new Map;for(let o of Tn(e)){let s=o.getAttribute("href")??"";if(!n.has(s)||r.has(s)){o.remove();continue}r.set(s,o)}let i=e.head;if(i)for(let o of n){if(r.has(o))continue;let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute(ln,"true"),s.setAttribute("href",o),i.appendChild(s)}}function Tn(e){return Array.from(e.querySelectorAll(`link[${ln}]`))}function jo(e,t,n,r,i={}){let o=i.textNode?Ho(e.document,i.textNode):null;if(i.textNode&&!o)throw new Error("Failed to prepare text segment editor");let s=o?.element??t,a=s.textContent??"",c=o?void 0:t.innerHTML,u=Yo(s),l=!1,p=()=>{e.document.removeEventListener("pointerdown",S,!0),s.removeEventListener("keydown",P),s.removeEventListener("blur",x),s.removeEventListener("input",N),Jo(s,u)},b=F=>{if(l)return;l=!0;let M=s.textContent??"";if(p(),F==="cancel"){o?.restore(a),o||(t.textContent=a),r({kind:"text-edit-cancel",payload:{ref:n}});return}if(o?.restore(M),F==="commit"&&M!==a){i.onCommitSnapshot?.({ref:n,initialText:a,...c!==void 0?{initialHtml:c}:{}}),r({kind:"text-edit-commit",payload:{ref:n,value:M}});return}r({kind:"text-edit-exit",payload:{ref:n}})};function S(F){let M=F.target;M&&s.contains(M)||b("commit")}function P(F){if(F.key==="Escape"){F.preventDefault(),b("cancel");return}F.key==="Enter"&&(F.metaKey||F.ctrlKey)&&(F.preventDefault(),b("commit"))}function x(){b("commit")}function N(){r({kind:"text-edit-input",payload:{ref:n,hit:le(t,n,void 0,"full")}})}return Xo(s),e.document.addEventListener("pointerdown",S,!0),s.addEventListener("keydown",P),s.addEventListener("blur",x),s.addEventListener("input",N),Lo(s),ei(s,e.document),p}function Ho(e,t){let n=t.parentNode;if(!n)return null;let r=e.createElement("span");return r.setAttribute("data-vcp-text-segment-editor","true"),r.textContent=t.textContent??"",n.replaceChild(r,t),{element:r,restore(i){t.nodeValue=i,r.parentNode&&r.parentNode.replaceChild(t,r)}}}function Yo(e){return{contentEditable:e.getAttribute("contenteditable"),spellcheck:e.getAttribute("spellcheck"),marker:e.getAttribute("data-vcp-edit-text-editing"),cursor:e.style.cursor,userSelect:e.style.userSelect}}function Xo(e){Qo(e.ownerDocument),e.setAttribute("contenteditable","plaintext-only"),e.setAttribute("spellcheck","false"),e.setAttribute("data-vcp-edit-text-editing","true"),e.style.cursor="text",e.style.userSelect="text"}function Jo(e,t){pt(e,"contenteditable",t.contentEditable),pt(e,"spellcheck",t.spellcheck),pt(e,"data-vcp-edit-text-editing",t.marker),e.style.cursor=t.cursor,e.style.userSelect=t.userSelect}function Qo(e){if(e.getElementById("vcp-text-edit-base-style"))return;let t=e.createElement("style");t.id="vcp-text-edit-base-style",t.textContent='[data-vcp-edit-text-editing="true"]{outline:0!important;outline-offset:0!important;}',e.head.appendChild(t)}function pt(e,t,n){if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)}function Zo(e){let t=[e.documentElement,e.body].filter(r=>!!r?.style),n=t.map(r=>({element:r,userSelect:r.style.userSelect}));for(let r of t)r.style.userSelect="none";return()=>{for(let r of n)r.element.style.userSelect=r.userSelect}}function Lo(e){try{e.focus({preventScroll:!0})}catch{e.focus()}}function ei(e,t){let n=t.createRange();n.selectNodeContents(e);let r=t.getSelection?.();r?.removeAllRanges(),r?.addRange(n)}function _n(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function W(e){let t=Number(e);return Number.isFinite(t)?t:0}export{ht as VCP_SITE_EDIT_BRIDGE_STATUS_EVENT,ft as VCP_SITE_EDIT_ROUTE_READY_EVENT,Cr as resolveSiteEditRouteId,xr as resolveSiteEditWebSocketUrl,fi as startSiteEditAutoBootstrap,Dr as startSiteEditFrameRuntime};
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function y(n){if(!M(n))return n;let e=new Map,t=n.pageComposition.status==="supported"?n.pageComposition.placementUnitKeys:[],s=new Map(n.dynamicDataSummaries??[]),r=o=>{let a=e.get(o);if(a)return a;let i=n.nodes[o];if(!i)throw new Error(`Missing compact document node ${o}`);let[c,d]=i,u=n.tokens[d];if(typeof u!="string")throw new Error(`Missing compact document token ${d}`);let f=`${c===null?"":r(c)}${u}`;return e.set(o,f),f};return{siteId:n.siteId,snapshotId:n.snapshotId,routeId:n.routeId,version:n.version,pageComposition:n.pageComposition,entries:n.entries.map((o,a)=>{let[i,c,d]=o,u=d===void 0?void 0:t[d];if(d!==void 0&&!u)throw new Error(`Missing page composition unit ${d}`);return{key:r(i),...u?{pageCompositionUnitKey:u}:{},operationSummary:D(c),...s.get(a)?{dynamicDataSummary:s.get(a)}:{}}})}}function D(n){return{canUpdateText:(n&1)!==0,canInsertChild:(n&2)!==0,canMove:(n&4)!==0,canRemove:(n&8)!==0}}function M(n){if(typeof n!="object"||n===null)return!1;let e=n;if(e.encoding!=="segment-trie-v1"||typeof e.siteId!="string"||typeof e.snapshotId!="string"||typeof e.routeId!="string"||!Number.isInteger(e.version)||e.version<0||!x(e.pageComposition)||!Array.isArray(e.tokens)||!e.tokens.every(r=>typeof r=="string")||!Array.isArray(e.nodes)||!Array.isArray(e.entries))return!1;let t=e.nodes;if(!t.every((r,o)=>Array.isArray(r)&&r.length===2&&(r[0]===null||g(r[0])&&r[0]<o)&&g(r[1])&&r[1]<e.tokens.length)||!e.entries.every(r=>Array.isArray(r)&&(r.length===2||r.length===3)&&g(r[0])&&r[0]<t.length&&g(r[1])&&r[1]<=15&&(r.length===2||g(r[2]))))return!1;let s=e.dynamicDataSummaries;return s===void 0||Array.isArray(s)&&s.every(r=>Array.isArray(r)&&r.length===2&&g(r[0])&&r[0]<e.entries.length&&x(r[1]))}function x(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function g(n){return typeof n=="number"&&Number.isInteger(n)&&n>=0}var p=class n{constructor(){}static parseMessage(e,t={}){let s=JSON.parse(e);if(!n.isMessage(s,t))throw new Error("Invalid site edit bridge message");return s}static stringifyMessage(e){return JSON.stringify(e)}static extractRequestInfo(e){if(typeof e=="object"&&e!==null&&"payload"in e&&typeof e.payload=="object"&&e.payload!==null){let t=e.payload,s=typeof t.id=="string"?t.id:"unknown",r=n.isRequestKind(t.kind)?t.kind:"get-document";return{id:s,kind:r}}return{id:"unknown",kind:"get-document"}}static isRequestKind(e){return e==="initialize-session"||e==="get-document"||e==="get-history-status"||e==="get-style-context"||e==="get-object-edit-context"||e==="get-class-name-source"||e==="get-source-tree"||e==="get-source-file"||e==="resolve-source-location"||e==="execute"||e==="undo"||e==="redo"}static isMessage(e,t={}){return!h(e)||typeof e.type!="string"?!1:e.type==="request"?n.isRequestPayload(e.payload,t):e.type==="response"||e.type==="error"?h(e.payload)&&typeof e.payload.id=="string":e.type==="event"?h(e.payload)&&h(e.payload.event):e.type==="auth"?h(e.payload)&&typeof e.payload.key=="string":e.type==="auth-ok"?h(e.payload)&&e.payload.ok===!0:!1}static isRequestPayload(e,t={}){if(!h(e)||typeof e.id!="string"||!n.isRequestKind(e.kind))return!1;switch(e.kind){case"initialize-session":return typeof e.routeId=="string"&&(e.mutationContext===void 0||I(e.mutationContext));case"get-document":case"get-style-context":return typeof e.routeId=="string";case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return typeof e.key=="string"&&(e.routeId===void 0||typeof e.routeId=="string");case"get-history-status":return e.mutationContext===void 0;case"get-source-tree":return!0;case"get-source-file":return typeof e.path=="string";case"execute":return R(e.request)&&(e.request.mutationContext===void 0||I(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return e.mutationContext===void 0||I(e.mutationContext)}}};function h(n){return typeof n=="object"&&n!==null}function R(n){return h(n)&&typeof n.id=="string"&&typeof n.siteId=="string"&&typeof n.baseSnapshotId=="string"&&(n.routeId===void 0||typeof n.routeId=="string")&&typeof n.kind=="string"&&h(n.target)&&typeof n.documentVersion=="number"&&Number.isInteger(n.documentVersion)&&n.documentVersion>=0&&h(n.params)}function I(n){return T(n)}function T(n){return h(n)?typeof n.editingSessionId=="string"&&n.editingSessionId.length>0&&typeof n.lockId=="string"&&n.lockId.length>0&&typeof n.ownerId=="string"&&n.ownerId.length>0&&typeof n.leaseAssertion=="string"&&n.leaseAssertion.length>0:!1}var A="vcp:designer:trace",_="designer_trace",k="__VCP_DESIGNER_TRACE__";var F=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function K(n=globalThis){let e=n;try{if(e.localStorage?.getItem(A)==="1")return!0}catch{}try{let t=e.location?.search??"";return new URLSearchParams(t).get(_)==="1"}catch{return!1}}function l(n,e={},t=globalThis){if(!K(t))return;let s={type:n,timestamp:Date.now(),payload:j(e)},r=t,o=r[k]??[];o.push(s),o.length>200&&o.splice(0,o.length-200),r[k]=o;let a=t.console?.debug;typeof a=="function"&&a.call(t.console,"[designer-trace]",s)}function j(n){return S(n,0)}function S(n,e){if(e>4)return"[truncated]";if(Array.isArray(n))return n.map(s=>S(s,e+1));if(!n||typeof n!="object")return n;let t={};for(let[s,r]of Object.entries(n)){if(F.test(s)){t[s]="[redacted]";continue}t[s]=S(r,e+1)}return t}var w=class{constructor(e){this.options=e,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===C&&this.connectionState==="open"?(this.setConnectionState("open"),Promise.resolve()):this.connectPromise?this.connectPromise:(this.intentionalClose=!1,this.setConnectionState("connecting"),this.connectPromise=new Promise((e,t)=>{let s;try{s=this.createSocket(this.options.url)}catch(i){let c=m(i,"WebSocket failed");this.socket=null,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("failed",c.message),t(c);return}let r={socket:s,settled:!1,reject:t};this.connectAttempt=r,this.socket=s;let o=()=>{this.socket!==s||this.connectAttempt!==r||(r.settled=!0,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("open"),e())},a=(i,c)=>{this.cleanupSocket(s,i,c)};s.onopen=()=>{if(!(this.socket!==s||this.connectAttempt!==r)){if(this.options.authKey){try{s.send(p.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(i){a(m(i,"WebSocket auth failed"),"failed")}return}o()}},s.onerror=i=>{if(this.socket!==s)return;let c=m(i,"WebSocket failed");a(c,"failed")},s.onmessage=i=>{if(this.socket===s){if(this.options.authKey&&this.connectAttempt===r&&!r.settled){this.handleAuthHandshakeMessage(i.data,s,r,()=>{o()});return}this.handleMessage(i.data)}},s.onclose=i=>{if(this.socket!==s)return;let c=this.intentionalClose,d=new Error($(i,{intentional:c}));a(d,c?"closed":"failed")}}),this.connectPromise)}disconnect(){this.intentionalClose=!0,this.setConnectionState("closing");let e=this.socket;if(!e){this.rejectAll(new Error("WebSocket disconnected")),this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("closed");return}this.cleanupSocket(e,new Error("WebSocket disconnected"),"closed")}getConnectionState(){return this.connectionState}subscribeConnectionStatus(e){return this.connectionStatusListeners.add(e),e({state:this.connectionState}),()=>{this.connectionStatusListeners.delete(e)}}getDocument(e){return this.request("get-document",{routeId:e})}initializeSession(e){return this.request("initialize-session",e)}getHistoryStatus(){return this.request("get-history-status",{})}getStyleContext(e){return this.request("get-style-context",{routeId:e})}getObjectEditContext(e,t){return this.request("get-object-edit-context",{key:e,routeId:t})}getClassNameSource(e,t){return this.request("get-class-name-source",{key:e,routeId:t})}getSourceTree(){return this.request("get-source-tree",{})}getSourceFile(e){return this.request("get-source-file",e)}resolveSourceLocation(e){return this.request("resolve-source-location",e)}execute(e,t){return this.request("execute",{request:e})}undo(e){return this.request("undo",{})}redo(e){return this.request("redo",{})}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}request(e,t){let s=this.socket;if(!s||s.readyState!==C||this.connectionState!=="open")return Promise.reject(new Error(`WebSocket is not open (state: ${this.connectionState}, readyState: ${s?.readyState??"none"})`));let r=`${e}-${this.sequence+=1}`,o=v(r,e,t);return l("bridge.request",{id:r,kind:e,routeId:typeof t.routeId=="string"?t.routeId:null,key:typeof t.key=="string"?t.key:null,operationKind:E(t.request,"kind"),documentVersion:E(t.request,"documentVersion")}),new Promise((a,i)=>{let c=this.resolveRequestTimeoutMs(e),d=c>0?setTimeout(()=>{let u=this.pending.get(r);u&&(this.pending.delete(r),l("bridge.response",{id:r,kind:e,ok:!1,timedOut:!0}),u.reject(new Error(`Bridge request timed out after ${c}ms: ${e}`)))},c):null;d?.unref?.(),this.pending.set(r,{kind:e,timeout:d,resolve:u=>a(u),reject:i});try{s.send(p.stringifyMessage(o))}catch(u){let f=m(u,"WebSocket send failed");this.clearPendingRequest(r),i(f),this.cleanupSocket(s,f,"failed")}})}handleAuthHandshakeMessage(e,t,s,r){try{if(p.parseMessage(e).type==="auth-ok"){r();return}throw new Error("Bridge authentication failed")}catch(o){let a=m(o,"Bridge authentication failed");this.connectAttempt===s&&this.cleanupSocket(t,a,"failed")}}handleMessage(e){let t=p.parseMessage(e);if(t.type==="event"){for(let r of this.listeners)r(t.payload.event);return}if(t.type!=="response"&&t.type!=="error")return;let s=this.pending.get(t.payload.id);if(s){if(this.clearPendingRequest(t.payload.id),t.type==="error"){l("bridge.response",{id:t.payload.id,kind:s.kind,ok:!1}),s.reject(new Error(t.payload.message));return}l("bridge.response",{id:t.payload.id,kind:s.kind,ok:!0,resultVersion:P(t.payload.result)}),s.resolve(s.kind==="get-document"?{...t.payload.result,data:y(t.payload.result.data)}:s.kind==="initialize-session"?B(t.payload.result):t.payload.result)}}rejectAll(e){for(let[t,s]of[...this.pending])this.clearPendingRequest(t),s.reject(e)}clearPendingRequest(e){let t=this.pending.get(e);t&&(t.timeout&&clearTimeout(t.timeout),this.pending.delete(e))}resolveRequestTimeoutMs(e){let t=this.options.requestTimeoutMsByKind?.[e];return typeof t=="number"?Math.max(0,t):typeof this.options.requestTimeoutMs=="number"?Math.max(0,this.options.requestTimeoutMs):U[e]??N}cleanupSocket(e,t,s){if(this.socket===e&&(this.socket=null),this.connectAttempt?.socket===e){let r=this.connectAttempt;this.connectAttempt=null,r.settled||(r.settled=!0,r.reject(t))}this.connectPromise=null,this.rejectAll(t),this.setConnectionState(s,t.message),e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{(e.readyState===O||e.readyState===C)&&e.close()}catch{}}setConnectionState(e,t){if(this.connectionState===e&&!t)return;this.connectionState=e;let s={state:e,...t?{message:t}:{}};this.options.onConnectionStatus?.(s);for(let r of this.connectionStatusListeners)r(s)}createSocket(e){if(this.options.createSocket)return this.options.createSocket(e);if(typeof WebSocket>"u")throw new Error("Site edit preview bridge requires WebSocket");return new WebSocket(e)}},O=0,C=1,N=15e3,U={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function m(n,e){return n instanceof Error?n:new Error(e)}function $(n,e){return e.intentional?"WebSocket disconnected":n?.code===1008?n.reason?`Bridge session authentication failed: ${n.reason}`:"Bridge session authentication failed":n?.reason?`WebSocket closed: ${n.reason}`:typeof n?.code=="number"&&n.code!==1005?`WebSocket closed with code ${n.code}`:"WebSocket closed"}function E(n,e){if(!n||typeof n!="object")return null;let s=n[e];return typeof s=="string"||typeof s=="number"?s:null}function P(n){if(!n||typeof n!="object")return null;let e=n,t=e.data?.resultVersion??e.data?.version??null;return typeof t=="number"?t:null}function Y(n){return new b(n)}var b=class{constructor(e){this.params=e,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=null,this.styleContextInFlight=null,this.currentDocument=e.initialDocument,this.observedDocumentVersion=e.initialDocument.version,this.sessionInitialized=!q(e.initialDocument)}async getDocument(e){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let t=q(this.currentDocument);return(t||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(t?void 0:this.observedDocumentVersion,"get-document"),this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(e){if(e.routeId!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e.routeId}`);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let t=await this.params.client.initializeSession(e);return this.currentDocument=t.data.document,this.observedDocumentVersion=t.data.document.version,this.sessionInitialized=!0,this.clearObjectCaches(),t}async getHistoryStatus(){return this.params.client.getHistoryStatus()}async getStyleContext(e){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let t=this.styleContextCache;if(t?.generation===this.styleGeneration)return{ok:!0,data:t.value};let s=this.styleContextInFlight;if(s?.generation===this.styleGeneration)return s.request;let r=this.styleGeneration,o=this.params.client.getStyleContext(e).then(a=>(this.styleGeneration===r&&(this.styleContextCache={generation:r,value:a.data}),a)).finally(()=>{this.styleContextInFlight?.request===o&&(this.styleContextInFlight=null)});return this.styleContextInFlight={generation:r,request:o},o}async ensureDocumentVersion(e,t){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let s=await this.refreshSnapshot(t,"ensure-version");if(s.version<t)throw new Error(`Document refresh returned version ${s.version}, expected at least ${t}`);return{ok:!0,data:s}}async acknowledgeDocumentVersion(e,t){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);return t>this.currentDocument.version&&(this.currentDocument={...this.currentDocument,version:t},this.clearObjectCaches({preserveStyleContext:!0})),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,t),{ok:!0,data:this.currentDocument}}async getObjectEditContext(e,t){let s=this.objectCacheKey(e,t),r=this.editContextCache.get(s);if(r)return{ok:!0,data:r};let o=this.editContextInFlight.get(s);if(o)return o;let a=this.objectGeneration,i=this.params.client.getObjectEditContext(e,t??this.params.routeId).then(c=>(this.objectGeneration===a&&this.editContextCache.set(s,c.data),c)).finally(()=>{this.editContextInFlight.get(s)===i&&this.editContextInFlight.delete(s)});return this.editContextInFlight.set(s,i),i}async getClassNameSource(e,t){let s=this.objectCacheKey(e,t),r=this.classNameSourceCache.get(s);if(r)return r;let o=this.classNameSourceInFlight.get(s);if(o)return o;let a=this.objectGeneration,i=this.params.client.getClassNameSource(e,t??this.params.routeId).then(c=>(this.objectGeneration===a&&this.classNameSourceCache.set(s,c),c)).finally(()=>{this.classNameSourceInFlight.get(s)===i&&this.classNameSourceInFlight.delete(s)});return this.classNameSourceInFlight.set(s,i),i}async getSourceTree(){return this.params.client.getSourceTree()}async getSourceFile(e){return this.params.client.getSourceFile(e)}async resolveSourceLocation(e){return this.params.client.resolveSourceLocation({...e,routeId:e.routeId??this.params.routeId})}async execute(e,t){let s=e.target.kind==="node"&&!e.routeId?{...e,routeId:this.params.routeId}:e;return this.params.client.execute(s)}async undo(e){return this.params.client.undo()}async redo(e){return this.params.client.redo()}subscribe(e){return this.params.client.subscribe(t=>{if(t.type==="site-edit.document.changed"&&t.routeId===this.params.routeId&&this.sessionInitialized){this.observedDocumentVersion=Math.max(this.observedDocumentVersion,t.version),t.version>this.currentDocument.version&&this.clearObjectCaches(),e(t);return}e(t)})}async refreshSnapshot(e,t="ensure-version"){if(typeof e=="number"&&this.currentDocument.version>=e)return l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:t}),this.currentDocument;if(this.refreshInFlight){l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!0,source:t});let r=await this.refreshInFlight;if(typeof e!="number"||r.version>=e||this.currentDocument.version>=e)return this.currentDocument}l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!1,source:t});let s=this.params.client.getDocument(this.params.routeId).then(r=>(this.currentDocument=r.data,this.observedDocumentVersion=Math.max(this.observedDocumentVersion,r.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight=s;try{return await s}finally{this.refreshInFlight===s&&(this.refreshInFlight=null)}}clearObjectCaches(e){this.objectGeneration+=1,this.editContextCache.clear(),this.editContextInFlight.clear(),this.classNameSourceCache.clear(),this.classNameSourceInFlight.clear(),!e?.preserveStyleContext&&(this.styleGeneration+=1,this.styleContextCache=null,this.styleContextInFlight=null)}objectCacheKey(e,t){return`${t??this.params.routeId}\0${e}`}};function q(n){return n.version===0&&n.entries.length===0}function B(n){let e=n;return{...e,data:{...e.data,document:y(e.data.document)}}}function v(n,e,t){switch(e){case"initialize-session":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId),...t.mutationContext?{mutationContext:t.mutationContext}:{}}};case"get-document":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId)}};case"get-history-status":return{type:"request",payload:{id:n,kind:e}};case"get-style-context":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId)}};case"get-object-edit-context":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"get-class-name-source":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"get-source-tree":return{type:"request",payload:{id:n,kind:e}};case"get-source-file":return{type:"request",payload:{id:n,kind:e,path:String(t.path)}};case"resolve-source-location":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"execute":return{type:"request",payload:{id:n,kind:e,request:t.request}};case"undo":case"redo":return{type:"request",payload:{id:n,kind:e,mutationContext:t.mutationContext}}}}export{w as SiteEditWebSocketClient,Y as createSiteEditBridge};
|
|
1
|
+
function y(n){if(!M(n))return n;let e=new Map,t=n.pageComposition.status==="supported"?n.pageComposition.placementUnitKeys:[],s=new Map(n.dynamicDataSummaries??[]),r=o=>{let a=e.get(o);if(a)return a;let i=n.nodes[o];if(!i)throw new Error(`Missing compact document node ${o}`);let[c,d]=i,u=n.tokens[d];if(typeof u!="string")throw new Error(`Missing compact document token ${d}`);let f=`${c===null?"":r(c)}${u}`;return e.set(o,f),f};return{siteId:n.siteId,snapshotId:n.snapshotId,routeId:n.routeId,version:n.version,pageComposition:n.pageComposition,entries:n.entries.map((o,a)=>{let[i,c,d]=o,u=d===void 0?void 0:t[d];if(d!==void 0&&!u)throw new Error(`Missing page composition unit ${d}`);return{key:r(i),...u?{pageCompositionUnitKey:u}:{},operationSummary:D(c),...s.get(a)?{dynamicDataSummary:s.get(a)}:{}}})}}function D(n){return{canUpdateText:(n&1)!==0,canInsertChild:(n&2)!==0,canMove:(n&4)!==0,canRemove:(n&8)!==0}}function M(n){if(typeof n!="object"||n===null)return!1;let e=n;if(e.encoding!=="segment-trie-v1"||typeof e.siteId!="string"||typeof e.snapshotId!="string"||typeof e.routeId!="string"||!Number.isInteger(e.version)||e.version<0||!x(e.pageComposition)||!Array.isArray(e.tokens)||!e.tokens.every(r=>typeof r=="string")||!Array.isArray(e.nodes)||!Array.isArray(e.entries))return!1;let t=e.nodes;if(!t.every((r,o)=>Array.isArray(r)&&r.length===2&&(r[0]===null||g(r[0])&&r[0]<o)&&g(r[1])&&r[1]<e.tokens.length)||!e.entries.every(r=>Array.isArray(r)&&(r.length===2||r.length===3)&&g(r[0])&&r[0]<t.length&&g(r[1])&&r[1]<=15&&(r.length===2||g(r[2]))))return!1;let s=e.dynamicDataSummaries;return s===void 0||Array.isArray(s)&&s.every(r=>Array.isArray(r)&&r.length===2&&g(r[0])&&r[0]<e.entries.length&&x(r[1]))}function x(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function g(n){return typeof n=="number"&&Number.isInteger(n)&&n>=0}var p=class n{constructor(){}static parseMessage(e,t={}){let s=JSON.parse(e);if(!n.isMessage(s,t))throw new Error("Invalid site edit bridge message");return s}static stringifyMessage(e){return JSON.stringify(e)}static extractRequestInfo(e){if(typeof e=="object"&&e!==null&&"payload"in e&&typeof e.payload=="object"&&e.payload!==null){let t=e.payload,s=typeof t.id=="string"?t.id:"unknown",r=n.isRequestKind(t.kind)?t.kind:"get-document";return{id:s,kind:r}}return{id:"unknown",kind:"get-document"}}static isRequestKind(e){return e==="initialize-session"||e==="get-document"||e==="get-history-status"||e==="get-style-context"||e==="get-object-edit-context"||e==="get-class-name-source"||e==="get-source-tree"||e==="get-source-file"||e==="resolve-source-location"||e==="execute"||e==="undo"||e==="redo"}static isMessage(e,t={}){return!h(e)||typeof e.type!="string"?!1:e.type==="request"?n.isRequestPayload(e.payload,t):e.type==="response"||e.type==="error"?h(e.payload)&&typeof e.payload.id=="string":e.type==="event"?h(e.payload)&&h(e.payload.event):e.type==="auth"?h(e.payload)&&typeof e.payload.key=="string":e.type==="auth-ok"?h(e.payload)&&e.payload.ok===!0:!1}static isRequestPayload(e,t={}){if(!h(e)||typeof e.id!="string"||!n.isRequestKind(e.kind))return!1;switch(e.kind){case"initialize-session":return typeof e.routeId=="string"&&(e.mutationContext===void 0||I(e.mutationContext));case"get-document":case"get-style-context":return typeof e.routeId=="string";case"get-object-edit-context":case"get-class-name-source":case"resolve-source-location":return typeof e.key=="string"&&(e.routeId===void 0||typeof e.routeId=="string");case"get-history-status":return e.mutationContext===void 0;case"get-source-tree":return!0;case"get-source-file":return typeof e.path=="string";case"execute":return R(e.request)&&(e.request.mutationContext===void 0||I(e.request.mutationContext))&&(t.validateOperationRequest?.(e.request)??!0);case"undo":case"redo":return e.mutationContext===void 0||I(e.mutationContext)}}};function h(n){return typeof n=="object"&&n!==null}function R(n){return h(n)&&typeof n.id=="string"&&typeof n.siteId=="string"&&typeof n.baseSnapshotId=="string"&&(n.routeId===void 0||typeof n.routeId=="string")&&typeof n.kind=="string"&&h(n.target)&&typeof n.documentVersion=="number"&&Number.isInteger(n.documentVersion)&&n.documentVersion>=0&&h(n.params)}function I(n){return T(n)}function T(n){return h(n)?typeof n.editingSessionId=="string"&&n.editingSessionId.length>0&&typeof n.lockId=="string"&&n.lockId.length>0&&typeof n.ownerId=="string"&&n.ownerId.length>0&&typeof n.leaseAssertion=="string"&&n.leaseAssertion.length>0:!1}var A="vcp:designer:trace",_="designer_trace",k="__VCP_DESIGNER_TRACE__";var F=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function K(n=globalThis){let e=n;try{if(e.localStorage?.getItem(A)==="1")return!0}catch{}try{let t=e.location?.search??"";return new URLSearchParams(t).get(_)==="1"}catch{return!1}}function l(n,e={},t=globalThis){if(!K(t))return;let s={type:n,timestamp:Date.now(),payload:j(e)},r=t,o=r[k]??[];o.push(s),o.length>1e3&&o.splice(0,o.length-1e3),r[k]=o;let a=t.console?.debug;s.payload.diagnosticOnly!==!0&&typeof a=="function"&&a.call(t.console,"[designer-trace]",s)}function j(n){return S(n,0)}function S(n,e){if(e>4)return"[truncated]";if(Array.isArray(n))return n.map(s=>S(s,e+1));if(!n||typeof n!="object")return n;let t={};for(let[s,r]of Object.entries(n)){if(F.test(s)){t[s]="[redacted]";continue}t[s]=S(r,e+1)}return t}var w=class{constructor(e){this.options=e,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===C&&this.connectionState==="open"?(this.setConnectionState("open"),Promise.resolve()):this.connectPromise?this.connectPromise:(this.intentionalClose=!1,this.setConnectionState("connecting"),this.connectPromise=new Promise((e,t)=>{let s;try{s=this.createSocket(this.options.url)}catch(i){let c=m(i,"WebSocket failed");this.socket=null,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("failed",c.message),t(c);return}let r={socket:s,settled:!1,reject:t};this.connectAttempt=r,this.socket=s;let o=()=>{this.socket!==s||this.connectAttempt!==r||(r.settled=!0,this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("open"),e())},a=(i,c)=>{this.cleanupSocket(s,i,c)};s.onopen=()=>{if(!(this.socket!==s||this.connectAttempt!==r)){if(this.options.authKey){try{s.send(p.stringifyMessage({type:"auth",payload:{key:this.options.authKey}}))}catch(i){a(m(i,"WebSocket auth failed"),"failed")}return}o()}},s.onerror=i=>{if(this.socket!==s)return;let c=m(i,"WebSocket failed");a(c,"failed")},s.onmessage=i=>{if(this.socket===s){if(this.options.authKey&&this.connectAttempt===r&&!r.settled){this.handleAuthHandshakeMessage(i.data,s,r,()=>{o()});return}this.handleMessage(i.data)}},s.onclose=i=>{if(this.socket!==s)return;let c=this.intentionalClose,d=new Error($(i,{intentional:c}));a(d,c?"closed":"failed")}}),this.connectPromise)}disconnect(){this.intentionalClose=!0,this.setConnectionState("closing");let e=this.socket;if(!e){this.rejectAll(new Error("WebSocket disconnected")),this.connectAttempt=null,this.connectPromise=null,this.setConnectionState("closed");return}this.cleanupSocket(e,new Error("WebSocket disconnected"),"closed")}getConnectionState(){return this.connectionState}subscribeConnectionStatus(e){return this.connectionStatusListeners.add(e),e({state:this.connectionState}),()=>{this.connectionStatusListeners.delete(e)}}getDocument(e){return this.request("get-document",{routeId:e})}initializeSession(e){return this.request("initialize-session",e)}getHistoryStatus(){return this.request("get-history-status",{})}getStyleContext(e){return this.request("get-style-context",{routeId:e})}getObjectEditContext(e,t){return this.request("get-object-edit-context",{key:e,routeId:t})}getClassNameSource(e,t){return this.request("get-class-name-source",{key:e,routeId:t})}getSourceTree(){return this.request("get-source-tree",{})}getSourceFile(e){return this.request("get-source-file",e)}resolveSourceLocation(e){return this.request("resolve-source-location",e)}execute(e,t){return this.request("execute",{request:e})}undo(e){return this.request("undo",{})}redo(e){return this.request("redo",{})}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}request(e,t){let s=this.socket;if(!s||s.readyState!==C||this.connectionState!=="open")return Promise.reject(new Error(`WebSocket is not open (state: ${this.connectionState}, readyState: ${s?.readyState??"none"})`));let r=`${e}-${this.sequence+=1}`,o=v(r,e,t);return l("bridge.request",{id:r,kind:e,routeId:typeof t.routeId=="string"?t.routeId:null,key:typeof t.key=="string"?t.key:null,operationKind:E(t.request,"kind"),documentVersion:E(t.request,"documentVersion")}),new Promise((a,i)=>{let c=this.resolveRequestTimeoutMs(e),d=c>0?setTimeout(()=>{let u=this.pending.get(r);u&&(this.pending.delete(r),l("bridge.response",{id:r,kind:e,ok:!1,timedOut:!0}),u.reject(new Error(`Bridge request timed out after ${c}ms: ${e}`)))},c):null;d?.unref?.(),this.pending.set(r,{kind:e,timeout:d,resolve:u=>a(u),reject:i});try{s.send(p.stringifyMessage(o))}catch(u){let f=m(u,"WebSocket send failed");this.clearPendingRequest(r),i(f),this.cleanupSocket(s,f,"failed")}})}handleAuthHandshakeMessage(e,t,s,r){try{if(p.parseMessage(e).type==="auth-ok"){r();return}throw new Error("Bridge authentication failed")}catch(o){let a=m(o,"Bridge authentication failed");this.connectAttempt===s&&this.cleanupSocket(t,a,"failed")}}handleMessage(e){let t=p.parseMessage(e);if(t.type==="event"){for(let r of this.listeners)r(t.payload.event);return}if(t.type!=="response"&&t.type!=="error")return;let s=this.pending.get(t.payload.id);if(s){if(this.clearPendingRequest(t.payload.id),t.type==="error"){l("bridge.response",{id:t.payload.id,kind:s.kind,ok:!1}),s.reject(new Error(t.payload.message));return}l("bridge.response",{id:t.payload.id,kind:s.kind,ok:!0,resultVersion:P(t.payload.result)}),s.resolve(s.kind==="get-document"?{...t.payload.result,data:y(t.payload.result.data)}:s.kind==="initialize-session"?B(t.payload.result):t.payload.result)}}rejectAll(e){for(let[t,s]of[...this.pending])this.clearPendingRequest(t),s.reject(e)}clearPendingRequest(e){let t=this.pending.get(e);t&&(t.timeout&&clearTimeout(t.timeout),this.pending.delete(e))}resolveRequestTimeoutMs(e){let t=this.options.requestTimeoutMsByKind?.[e];return typeof t=="number"?Math.max(0,t):typeof this.options.requestTimeoutMs=="number"?Math.max(0,this.options.requestTimeoutMs):U[e]??N}cleanupSocket(e,t,s){if(this.socket===e&&(this.socket=null),this.connectAttempt?.socket===e){let r=this.connectAttempt;this.connectAttempt=null,r.settled||(r.settled=!0,r.reject(t))}this.connectPromise=null,this.rejectAll(t),this.setConnectionState(s,t.message),e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{(e.readyState===O||e.readyState===C)&&e.close()}catch{}}setConnectionState(e,t){if(this.connectionState===e&&!t)return;this.connectionState=e;let s={state:e,...t?{message:t}:{}};this.options.onConnectionStatus?.(s);for(let r of this.connectionStatusListeners)r(s)}createSocket(e){if(this.options.createSocket)return this.options.createSocket(e);if(typeof WebSocket>"u")throw new Error("Site edit preview bridge requires WebSocket");return new WebSocket(e)}},O=0,C=1,N=15e3,U={"get-source-tree":1e4,"get-source-file":1e4,"resolve-source-location":1e4,execute:6e4,undo:2e4,redo:2e4};function m(n,e){return n instanceof Error?n:new Error(e)}function $(n,e){return e.intentional?"WebSocket disconnected":n?.code===1008?n.reason?`Bridge session authentication failed: ${n.reason}`:"Bridge session authentication failed":n?.reason?`WebSocket closed: ${n.reason}`:typeof n?.code=="number"&&n.code!==1005?`WebSocket closed with code ${n.code}`:"WebSocket closed"}function E(n,e){if(!n||typeof n!="object")return null;let s=n[e];return typeof s=="string"||typeof s=="number"?s:null}function P(n){if(!n||typeof n!="object")return null;let e=n,t=e.data?.resultVersion??e.data?.version??null;return typeof t=="number"?t:null}function Y(n){return new b(n)}var b=class{constructor(e){this.params=e,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=null,this.styleContextInFlight=null,this.currentDocument=e.initialDocument,this.observedDocumentVersion=e.initialDocument.version,this.sessionInitialized=!q(e.initialDocument)}async getDocument(e){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let t=q(this.currentDocument);return(t||this.currentDocument.version<this.observedDocumentVersion)&&(this.currentDocument=await this.refreshSnapshot(t?void 0:this.observedDocumentVersion,"get-document"),this.sessionInitialized=!0),{ok:!0,data:this.currentDocument}}async initializeSession(e){if(e.routeId!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e.routeId}`);if(!this.params.client.initializeSession)throw new Error("Site edit bridge client does not support initialize-session");let t=await this.params.client.initializeSession(e);return this.currentDocument=t.data.document,this.observedDocumentVersion=t.data.document.version,this.sessionInitialized=!0,this.clearObjectCaches(),t}async getHistoryStatus(){return this.params.client.getHistoryStatus()}async getStyleContext(e){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let t=this.styleContextCache;if(t?.generation===this.styleGeneration)return{ok:!0,data:t.value};let s=this.styleContextInFlight;if(s?.generation===this.styleGeneration)return s.request;let r=this.styleGeneration,o=this.params.client.getStyleContext(e).then(a=>(this.styleGeneration===r&&(this.styleContextCache={generation:r,value:a.data}),a)).finally(()=>{this.styleContextInFlight?.request===o&&(this.styleContextInFlight=null)});return this.styleContextInFlight={generation:r,request:o},o}async ensureDocumentVersion(e,t){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);let s=await this.refreshSnapshot(t,"ensure-version");if(s.version<t)throw new Error(`Document refresh returned version ${s.version}, expected at least ${t}`);return{ok:!0,data:s}}async acknowledgeDocumentVersion(e,t){if(e!==this.params.routeId)throw new Error(`Site edit bridge is bound to route ${this.params.routeId}, received ${e}`);return t>this.currentDocument.version&&(this.currentDocument={...this.currentDocument,version:t},this.clearObjectCaches({preserveStyleContext:!0})),this.observedDocumentVersion=Math.max(this.observedDocumentVersion,t),{ok:!0,data:this.currentDocument}}async getObjectEditContext(e,t){let s=this.objectCacheKey(e,t),r=this.editContextCache.get(s);if(r)return{ok:!0,data:r};let o=this.editContextInFlight.get(s);if(o)return o;let a=this.objectGeneration,i=this.params.client.getObjectEditContext(e,t??this.params.routeId).then(c=>(this.objectGeneration===a&&this.editContextCache.set(s,c.data),c)).finally(()=>{this.editContextInFlight.get(s)===i&&this.editContextInFlight.delete(s)});return this.editContextInFlight.set(s,i),i}async getClassNameSource(e,t){let s=this.objectCacheKey(e,t),r=this.classNameSourceCache.get(s);if(r)return r;let o=this.classNameSourceInFlight.get(s);if(o)return o;let a=this.objectGeneration,i=this.params.client.getClassNameSource(e,t??this.params.routeId).then(c=>(this.objectGeneration===a&&this.classNameSourceCache.set(s,c),c)).finally(()=>{this.classNameSourceInFlight.get(s)===i&&this.classNameSourceInFlight.delete(s)});return this.classNameSourceInFlight.set(s,i),i}async getSourceTree(){return this.params.client.getSourceTree()}async getSourceFile(e){return this.params.client.getSourceFile(e)}async resolveSourceLocation(e){return this.params.client.resolveSourceLocation({...e,routeId:e.routeId??this.params.routeId})}async execute(e,t){let s=e.target.kind==="node"&&!e.routeId?{...e,routeId:this.params.routeId}:e;return this.params.client.execute(s)}async undo(e){return this.params.client.undo()}async redo(e){return this.params.client.redo()}subscribe(e){return this.params.client.subscribe(t=>{if(t.type==="site-edit.document.changed"&&t.routeId===this.params.routeId&&this.sessionInitialized){this.observedDocumentVersion=Math.max(this.observedDocumentVersion,t.version),t.version>this.currentDocument.version&&this.clearObjectCaches(),e(t);return}e(t)})}async refreshSnapshot(e,t="ensure-version"){if(typeof e=="number"&&this.currentDocument.version>=e)return l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!0,skipped:!0,source:t}),this.currentDocument;if(this.refreshInFlight){l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!0,source:t});let r=await this.refreshInFlight;if(typeof e!="number"||r.version>=e||this.currentDocument.version>=e)return this.currentDocument}l("bridge.document-refresh",{routeId:this.params.routeId,minVersion:e,currentVersion:this.currentDocument.version,deduped:!1,source:t});let s=this.params.client.getDocument(this.params.routeId).then(r=>(this.currentDocument=r.data,this.observedDocumentVersion=Math.max(this.observedDocumentVersion,r.data.version),this.clearObjectCaches(),this.currentDocument));this.refreshInFlight=s;try{return await s}finally{this.refreshInFlight===s&&(this.refreshInFlight=null)}}clearObjectCaches(e){this.objectGeneration+=1,this.editContextCache.clear(),this.editContextInFlight.clear(),this.classNameSourceCache.clear(),this.classNameSourceInFlight.clear(),!e?.preserveStyleContext&&(this.styleGeneration+=1,this.styleContextCache=null,this.styleContextInFlight=null)}objectCacheKey(e,t){return`${t??this.params.routeId}\0${e}`}};function q(n){return n.version===0&&n.entries.length===0}function B(n){let e=n;return{...e,data:{...e.data,document:y(e.data.document)}}}function v(n,e,t){switch(e){case"initialize-session":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId),...t.mutationContext?{mutationContext:t.mutationContext}:{}}};case"get-document":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId)}};case"get-history-status":return{type:"request",payload:{id:n,kind:e}};case"get-style-context":return{type:"request",payload:{id:n,kind:e,routeId:String(t.routeId)}};case"get-object-edit-context":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"get-class-name-source":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"get-source-tree":return{type:"request",payload:{id:n,kind:e}};case"get-source-file":return{type:"request",payload:{id:n,kind:e,path:String(t.path)}};case"resolve-source-location":return{type:"request",payload:{id:n,kind:e,key:String(t.key),routeId:typeof t.routeId=="string"?t.routeId:void 0}};case"execute":return{type:"request",payload:{id:n,kind:e,request:t.request}};case"undo":case"redo":return{type:"request",payload:{id:n,kind:e,mutationContext:t.mutationContext}}}}export{w as SiteEditWebSocketClient,Y as createSiteEditBridge};
|
package/dist/designer-trace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var u="vcp:designer:trace",E="designer_trace",a="__VCP_DESIGNER_TRACE__";var
|
|
1
|
+
var u="vcp:designer:trace",E="designer_trace",a="__VCP_DESIGNER_TRACE__";var _=/(authorization|cookie|token|secret|providerTrace|headers?|sourceCode|rawSource|fullSource)/i;function f(e=globalThis){let n=e;try{if(n.localStorage?.getItem(u)==="1")return!0}catch{}try{let t=n.location?.search??"";return new URLSearchParams(t).get(E)==="1"}catch{return!1}}function l(e,n={},t=globalThis){if(!f(t))return;let r={type:e,timestamp:Date.now(),payload:T(n)},c=t,o=c[a]??[];o.push(r),o.length>1e3&&o.splice(0,o.length-1e3),c[a]=o;let s=t.console?.debug;r.payload.diagnosticOnly!==!0&&typeof s=="function"&&s.call(t.console,"[designer-trace]",r)}function T(e){return i(e,0)}function i(e,n){if(n>4)return"[truncated]";if(Array.isArray(e))return e.map(r=>i(r,n+1));if(!e||typeof e!="object")return e;let t={};for(let[r,c]of Object.entries(e)){if(_.test(r)){t[r]="[redacted]";continue}t[r]=i(c,n+1)}return t}export{f as isDesignerTraceEnabled,T as sanitizeTracePayload,l as traceDesignerEvent};
|