openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
17 lines • 5.23 kB
JavaScript
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Cu as t,Eu as n,Tu as r,du as i,ju as a,pu as o}from"./control-ui-core-BncvAZjR.js";import{na as s,ra as c}from"./control-ui-core-9qYjK5B2.js";import{$ as l,X as u,Y as d,ct as f,nt as p,ut as m}from"./lit-runtime-B8uOr6OX.js";import{ii as h}from"./ui-DuRgK6kL.js";import{A as g,M as _,O as v,k as y}from"./control-ui-boot-shared-em9-jnbz.js";import{F as b,L as x,P as S}from"./control-ui-boot-chat-Ck7W_FPO.js";import{ht as C,mt as w}from"./control-ui-boot-chat-C8hdsB2M.js";import{n as T,t as E}from"./panel-empty-state-DS_rQC2v.js";function D(e){if(!e?.trim())return null;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:null}catch{return null}}function O(e){let t=D(e);if(!t)return null;let n=new URL(t);if(n.origin===window.location.origin)return null;if(n.searchParams.get(`openclawHostTheme`)!==`1`||!/^\/embed\/(?:channel|thread)\/[^/]+\/[^/]+\/?$/u.test(n.pathname))return n.href;n.searchParams.set(`theme`,document.documentElement.dataset.themeMode===`light`?`light`:`dark`),n.searchParams.set(`hostOrigin`,window.location.origin);let r=S().tokens;return Object.keys(r).length>0&&n.searchParams.set(`themeTokens`,JSON.stringify(r)),n.href}var k;function A(){return(A=e((()=>{v(),d(),p(),c(),E(),w(),n(),o(),b(),r(),k=class extends t{constructor(...e){super(...e),this.sessionKey=``,this.loadInfo=null,this.openDiscussion=null,this.onStateChange=null,this.canOpen=!0,this.sourceGeneration=0,this.openingDiscussion=null,this.themeObserver=null,this.discussionTask=new y(this,{args:()=>[this.sessionKey.trim(),this.loadInfo,this.openDiscussion,this.sourceGeneration,this.canOpen],task:async([e,t,n,r,i],{signal:a})=>{if(!t||!e)return null;let o=await t(e);a.throwIfAborted();let s={sessionKey:e,loader:t,opener:n,sourceGeneration:r,canOpen:i};if(!this.isOpeningCurrent(s))return g;let c=o;if(o.state===`available`&&i&&n){if(this.openingDiscussion=s,this.publish(e,o),!this.isOpeningCurrent(s))return g;c=await n(e)??o}return a.throwIfAborted(),this.isOpeningCurrent(s)?{sessionKey:e,info:c}:g},onComplete:e=>{this.openingDiscussion=null,e&&this.publish(e.sessionKey,e.info)},onError:()=>{this.openingDiscussion=null}}),this.handleDiscussionFrameLoad=e=>{let t=e.currentTarget;t instanceof HTMLIFrameElement&&this.postDiscussionTheme(t)}}isOpeningCurrent(e){return e.sessionKey===this.sessionKey.trim()&&e.loader===this.loadInfo&&e.opener===this.openDiscussion&&e.sourceGeneration===this.sourceGeneration&&e.canOpen===this.canOpen}connectedCallback(){super.connectedCallback(),typeof MutationObserver<`u`&&(this.themeObserver=new MutationObserver(()=>this.postDiscussionTheme()),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`,`data-theme-mode`,`style`]}))}disconnectedCallback(){this.themeObserver?.disconnect(),this.themeObserver=null,super.disconnectedCallback()}postDiscussionTheme(e=this.querySelector(`.session-discussion__frame`)){e?.isConnected&&x(e,new URL(e.src).origin)}publish(e,t){e===this.sessionKey.trim()&&this.onStateChange?.(e,t.state,D(t.openUrl))}renderOpen(e){let t=O(e.embedUrl),n=D(e.openUrl);return l`
<div class="session-discussion__open">
${t?l`
<iframe
class="session-discussion__frame"
src=${t}
title=${a(`chat.sessionDiscussion.frameTitle`)}
sandbox="allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts"
=${this.handleDiscussionFrameLoad}
></iframe>
`:T({icon:s.messageSquare,heading:a(`chat.sidePanel.discussion`),description:a(`chat.sessionDiscussion.unavailable`),action:n?l`<a class="session-link" href=${n} target="_blank" rel="noopener">
${a(`chat.sessionDiscussion.openExternal`)}
</a>`:u})}
</div>
`}render(){if(this.discussionTask.status===_.ERROR){let e=this.discussionTask.error;return l`<div class="session-discussion__empty">
<div class="callout danger">${i(e)}</div>
</div>`}let e=this.discussionTask.value,t=!!(this.loadInfo&&this.sessionKey.trim())&&this.discussionTask.status===_.PENDING;if(t&&this.openingDiscussion&&this.isOpeningCurrent(this.openingDiscussion))return C(`discussion`,a(`chat.sessionDiscussion.opening`));if(t)return C(`discussion`,a(`chat.sessionDiscussion.loading`));if(this.discussionTask.status!==_.COMPLETE||!e)return u;let{info:n}=e;return n.state===`none`?u:n.state===`available`?T({icon:s.messageSquare,heading:a(`chat.sidePanel.discussion`),description:a(this.canOpen?`chat.sessionDiscussion.unavailable`:`chat.sessionDiscussion.requiresWriteAccess`)}):this.renderOpen(n)}},h([m()],k.prototype,`sessionKey`,void 0),h([m({attribute:!1})],k.prototype,`loadInfo`,void 0),h([m({attribute:!1})],k.prototype,`openDiscussion`,void 0),h([m({attribute:!1})],k.prototype,`onStateChange`,void 0),h([m({type:Boolean})],k.prototype,`canOpen`,void 0),h([m({type:Number})],k.prototype,`sourceGeneration`,void 0),h([f()],k.prototype,`openingDiscussion`,void 0),customElements.get(`openclaw-session-discussion`)||customElements.define(`openclaw-session-discussion`,k)})))()}A();