UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

138 lines 13.6 kB
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})} @click=${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" @click=${this.onReviewUpdate} > ${C(`updates.reviewUpdate`)} </button> ${r&&t?o`<button class="sidebar-update-card__hold" type="button" ?disabled=${this.holdingCampaignId===t.id} @click=${()=>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`} @click=${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" @click=${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} @click=${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} @click=${()=>this.holdUpdate(t.id)} > ${C(`updates.holdOneHour`)} </button> `:c} </div>`:c} ${r?o`<button class="sidebar-update-card__review" type="button" @click=${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