openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
138 lines • 13.6 kB
JavaScript
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{wr as t}from"./control-ui-foundation-Cydpkyqa.js";import{Sc as n,yc as r}from"./control-ui-core-Rwzhj6nO.js";import{$ as i,K as a,X as o,at as s,q as c,st as l}from"./lit-runtime-CV_MH99K.js";import{A as u,D as d,E as f,M as p,T as m,i as h,j as g,n as _,w as v}from"./control-ui-core-YphAl4aM.js";import{Gt as y,Ht as b,Wt as x,Yt as S,en as C}from"./control-ui-core-vvcQQV2m.js";import{Xr as w,Zr as T}from"./control-ui-boot-shared-DfZ39Yj9.js";import{hs as E,ms as D}from"./control-ui-boot-shared-CXVvK2AW.js";import{n as O,t as k}from"./update-run-projection-lALEhkx7.js";function A(){return(A=e((()=>{})))()}var j;function M(){return(M=e((()=>{a(),i(),p(),h(),k(),f(),S(),n(),E(),y(),w(),b(),j=class extends r{constructor(...e){super(...e),this.compact=!1,this.updateAvailable=null,this.updateSchedule=null,this.heldUpdateCampaignId=null,this.updateBusy=!1,this.updateRun=null,this.updateRunAcknowledged=!1,this.connected=!0,this.onCheckStatus=void 0,this.onAcknowledge=void 0,this.statusBanner=null,this.watchUpdateProgress=void 0,this.canUpdate=!1,this.canHoldUpdate=!1,this.onUpdate=()=>void 0,this.refreshRequired=!1,this.onRefresh=async()=>!1,this.onHoldUpdate=async()=>!1,this.onReviewUpdate=()=>void 0,this.onDismiss=void 0,this.holdingCampaignId=null,this.nativeUpdateAvailable=g(),this.refreshInFlight=!1,this.refreshFailed=!1,this.refreshAttempt=0,this.countdownPolling=new D(this,1e3,()=>this.requestUpdate(),!1),this.handleNativeUpdateAvailabilityChanged=()=>{this.nativeUpdateAvailable=g()},this.openRun=()=>{this.updateRun&&_({existingRun:this.updateRun,updateAvailable:this.updateAvailable,updateSchedule:this.updateSchedule,viaNativeApp:g(),startGatewayUpdate:()=>this.onUpdate(),watchUpdateProgress:this.watchUpdateProgress,onCheckStatus:this.onCheckStatus,onReviewUpdate:this.onReviewUpdate,onAcknowledge:this.onAcknowledge})},this.startUpdate=()=>{let e=this.updateSchedule?.campaign;this.updateBusy||e?.state===`applying`||!this.canUpdate||_({startGatewayUpdate:()=>this.onUpdate(),onCheckStatus:this.onCheckStatus,onReviewUpdate:this.onReviewUpdate,onAcknowledge:this.onAcknowledge,...this.watchUpdateProgress?{watchUpdateProgress:this.watchUpdateProgress}:{},updateAvailable:this.updateAvailable,updateSchedule:this.updateSchedule,viaNativeApp:g()})},this.holdUpdate=async e=>{this.holdingCampaignId=e,await this.onHoldUpdate(),this.holdingCampaignId=null},this.refreshControlUi=async()=>{if(this.refreshInFlight)return;this.refreshInFlight=!0,this.refreshFailed=!1;let e=++this.refreshAttempt,t=!1;try{t=await this.onRefresh()}catch{}e!==this.refreshAttempt||!this.refreshRequired||t||(this.refreshInFlight=!1,this.refreshFailed=!0)}}connectedCallback(){super.connectedCallback(),this.nativeUpdateAvailable=g(),window.addEventListener(u,this.handleNativeUpdateAvailabilityChanged)}disconnectedCallback(){window.removeEventListener(u,this.handleNativeUpdateAvailabilityChanged),super.disconnectedCallback()}willUpdate(e){super.willUpdate(e),e.has(`refreshRequired`)&&!this.refreshRequired&&(this.refreshAttempt+=1,this.refreshInFlight=!1,this.refreshFailed=!1)}updated(e){if(super.updated(e),e.has(`updateSchedule`)){let e=this.updateSchedule?.campaign?.state;e===`countdown`||e===`waiting-for-idle`?this.countdownPolling.start():this.countdownPolling.stop()}}renderStatus(){let e=this.updateRun?null:this.statusBanner;return e?o`<div
class="sidebar-update-card__status sidebar-update-card__status--${e.tone}"
role="alert"
>
${e.text}
</div>`:c}hasAvailableUpdate(){let e=this.updateAvailable,t=this.updateSchedule?.target;return e!==null&&e.latestVersion!==e.currentVersion||e?.commitsBehind!==void 0&&e.commitsBehind>0||t?.kind===`git`&&t.commitsBehind>0}compactSummary(){if(this.refreshRequired)return{detail:C(`chat.sidebar.serverUpdatedRefresh`),icon:x.refresh,severity:`warning`,title:C(`chat.sidebar.serverUpdatedTitle`)};if(T(this.updateRun,this.updateRunAcknowledged)&&this.updateRun){let e=O(this.updateRun,this.connected);return{title:e.headline,detail:e.compactLabel,icon:this.updateRun.status===`running`?x.refresh:this.updateRun.status===`succeeded`?x.check:x.alertTriangle,severity:this.updateRun.status===`failed`?`error`:`warning`,critical:!1}}let e=this.updateSchedule?.campaign,t=this.updateBusy||e?.state===`applying`,n=this.updateRun?null:this.statusBanner;if(!e&&!t&&!n&&!this.hasAvailableUpdate())return null;let r=m(this.updateSchedule,this.updateAvailable),i=v(this.updateSchedule),a=n&&n.tone!==`info`,o=n?.text.trim()||C(`updates.sidebar.blockedSummary`);return{detail:a?e?.state===`waiting-for-idle`&&r?C(`updates.sidebar.blockedWaiting`,{target:r}):r?`${r} · ${o}`:o:i&&r?C(`updates.sidebar.campaignTarget`,{status:i,target:r}):i??r??n?.text??C(`updates.sidebar.availableSummary`),icon:n?x.alertTriangle:t?x.refresh:x.download,critical:!!a,severity:n?.tone===`danger`?`error`:`warning`,title:C(a?`updates.sidebar.blockedTitle`:t?`updates.sidebar.updating`:`updates.sidebar.availableTitle`)}}renderCompact(){let e=this.compactSummary();return e?o`<details
class="sidebar-issues-panel__details sidebar-issues-panel__details--${e.severity}"
>
<summary class="sidebar-issues-panel__summary" data-issue-row-focus>
<span
class="sidebar-issues-panel__icon ${e.critical?`sidebar-issues-panel__icon--critical`:``}"
aria-hidden="true"
>${e.icon}</span
>
<span class="sidebar-issues-panel__content">
<span class="sidebar-issues-panel__entity" title=${e.title}>${e.title}</span>
<span class="sidebar-issues-panel__state" title=${e.detail}>${e.detail}</span>
</span>
${this.onDismiss?o`<button
type="button"
class="sidebar-issues-panel__dismiss"
aria-label=${C(`attention.dismissItem`,{item:e.title})}
title=${C(`attention.dismissItem`,{item:e.title})}
=${e=>{e.preventDefault(),e.stopPropagation(),this.onDismiss?.()}}
>
${x.x}
</button>`:c}
<span class="sidebar-issues-panel__chevron" aria-hidden="true">${x.chevronRight}</span>
</summary>
<div class="sidebar-issues-panel__body sidebar-update-issue__body">
${this.renderCompactDetails()}
</div>
</details>`:c}renderCompactDetails(){let e=this.updateRun?null:this.statusBanner;if(!e||T(this.updateRun,this.updateRunAcknowledged))return this.renderCard();let t=this.updateSchedule?.campaign,n=t?.holdUntilMs!==void 0&&t.holdUntilMs>Date.now(),r=!!(t&&t.state!==`applying`&&this.canUpdate&&this.canHoldUpdate&&!this.updateBusy&&!n&&this.heldUpdateCampaignId!==t.id);return o`<div class="sidebar-update-card sidebar-update-card--compact-details">
<p class="sidebar-update-card__compact-reason" title=${e.text}>
${e.text}
</p>
<div class="sidebar-update-card__compact-actions">
<button
class="sidebar-update-card__review sidebar-update-card__review--primary"
type="button"
=${this.onReviewUpdate}
>
${C(`updates.reviewUpdate`)}
</button>
${r&&t?o`<button
class="sidebar-update-card__hold"
type="button"
?disabled=${this.holdingCampaignId===t.id}
=${()=>this.holdUpdate(t.id)}
>
${C(`updates.holdOneHour`)}
</button>`:c}
</div>
</div>`}renderCard(){if(this.refreshRequired)return o`
<div class="sidebar-update-card" role="status" aria-live="polite">
${this.renderStatus()}
${this.refreshFailed?o`<div
class="sidebar-update-card__status sidebar-update-card__status--warn"
role="alert"
>
${C(`connection.actionsUnavailable`)}
</div>`:c}
<button
class="sidebar-update-card__action ${this.refreshInFlight?`sidebar-update-card__action--busy`:``}"
type="button"
?disabled=${this.refreshInFlight}
aria-busy=${this.refreshInFlight?`true`:`false`}
=${this.refreshControlUi}
>
<span class="sidebar-update-card__icon" aria-hidden="true">${x.refresh}</span>
<span class="sidebar-update-card__text sidebar-update-card__text--stacked">
<span class="sidebar-update-card__title"
>${C(`chat.sidebar.serverUpdatedTitle`)}</span
>
<span class="sidebar-update-card__subtitle"
>${this.refreshInFlight?C(`lazyView.reloading`):this.refreshFailed?C(`connection.retryNow`):C(`chat.sidebar.serverUpdatedRefresh`)}</span
>
</span>
</button>
</div>
`;if(T(this.updateRun,this.updateRunAcknowledged)&&this.updateRun){let e=O(this.updateRun,this.connected);return o`<div class="sidebar-update-card" role="status" aria-live="polite">
<button class="sidebar-update-card__action" type="button" =${this.openRun}>
<span class="sidebar-update-card__icon" aria-hidden="true"
>${this.updateRun.status===`running`?x.refresh:this.updateRun.status===`succeeded`?x.check:x.alertTriangle}</span
>
<span class="sidebar-update-card__text sidebar-update-card__text--stacked">
<span class="sidebar-update-card__title">${e.headline}</span>
<span class="sidebar-update-card__subtitle">${e.compactLabel}</span>
</span>
</button>
</div>`}let e=this.updateAvailable,t=this.updateSchedule?.campaign,n=this.updateBusy||t?.state===`applying`,r=this.updateRun?null:this.statusBanner;if(!t&&!n&&!r&&!this.hasAvailableUpdate())return c;let i=this.nativeUpdateAvailable?C(`chat.sidebar.updateMacAndGateway`):C(`chat.sidebar.updateGateway`),a=e?.channel===`beta`?` (beta)`:``,s=v(this.updateSchedule),l=m(this.updateSchedule,e),u=s?l?C(`updates.sidebar.campaignTarget`,{status:s,target:l}):s:n?C(`updates.sidebar.updating`):l?`${i} · ${l}${a}`:i,f=t?.state===`countdown`||t?.state===`waiting-for-idle`,p=t?.holdUntilMs!==void 0&&t.holdUntilMs>Date.now(),h=!!(t&&t.state!==`applying`&&this.canUpdate&&this.canHoldUpdate&&!n&&!p&&this.heldUpdateCampaignId!==t.id),g=d(e,this.updateSchedule,this.updateBusy),_=o`<button
class="sidebar-update-card__action ${n?`sidebar-update-card__action--busy`:``}"
type="button"
aria-disabled=${this.canUpdate?c:`true`}
?disabled=${n}
=${this.startUpdate}
>
<span class="sidebar-update-card__icon" aria-hidden="true"
>${n?x.refresh:x.download}</span
>
<span
class="sidebar-update-card__text"
role=${f?`timer`:c}
aria-live=${f?`off`:c}
>${u}</span
>
</button>`;return o`
<div
class="sidebar-update-card"
role=${t?c:`status`}
aria-live=${t?c:`polite`}
>
${this.renderStatus()}
${g?o`<div class="sidebar-update-card__actions">
${this.canUpdate?_:o`<openclaw-tooltip open-on-click .content=${C(`updates.adminRequired`)}>
${_}
</openclaw-tooltip>`}
${h&&t?o`
<button
class="sidebar-update-card__hold"
type="button"
?disabled=${this.holdingCampaignId===t.id}
=${()=>this.holdUpdate(t.id)}
>
${C(`updates.holdOneHour`)}
</button>
`:c}
</div>`:c}
${r?o`<button
class="sidebar-update-card__review"
type="button"
=${this.onReviewUpdate}
>
${C(`updates.reviewUpdate`)}
</button>`:c}
</div>
`}render(){return this.compact?this.renderCompact():this.renderCard()}},t([l({attribute:!1})],j.prototype,`compact`,void 0),t([l({attribute:!1})],j.prototype,`updateAvailable`,void 0),t([l({attribute:!1})],j.prototype,`updateSchedule`,void 0),t([l({attribute:!1})],j.prototype,`heldUpdateCampaignId`,void 0),t([l({attribute:!1})],j.prototype,`updateBusy`,void 0),t([l({attribute:!1})],j.prototype,`updateRun`,void 0),t([l({attribute:!1})],j.prototype,`updateRunAcknowledged`,void 0),t([l({attribute:!1})],j.prototype,`connected`,void 0),t([l({attribute:!1})],j.prototype,`onCheckStatus`,void 0),t([l({attribute:!1})],j.prototype,`onAcknowledge`,void 0),t([l({attribute:!1})],j.prototype,`statusBanner`,void 0),t([l({attribute:!1})],j.prototype,`watchUpdateProgress`,void 0),t([l({attribute:!1})],j.prototype,`canUpdate`,void 0),t([l({attribute:!1})],j.prototype,`canHoldUpdate`,void 0),t([l({attribute:!1})],j.prototype,`onUpdate`,void 0),t([l({attribute:!1})],j.prototype,`refreshRequired`,void 0),t([l({attribute:!1})],j.prototype,`onRefresh`,void 0),t([l({attribute:!1})],j.prototype,`onHoldUpdate`,void 0),t([l({attribute:!1})],j.prototype,`onReviewUpdate`,void 0),t([l({attribute:!1})],j.prototype,`onDismiss`,void 0),t([s()],j.prototype,`holdingCampaignId`,void 0),t([s()],j.prototype,`nativeUpdateAvailable`,void 0),t([s()],j.prototype,`refreshInFlight`,void 0),t([s()],j.prototype,`refreshFailed`,void 0),customElements.get(`openclaw-sidebar-update-card`)||customElements.define(`openclaw-sidebar-update-card`,j)})))()}export{A as n,M as t};
//# sourceMappingURL=sidebar-update-card-CE6rs-4H.js.map