Files
openclaw-config/cache/control-ui-assets/d08fd045b9cb86d13f0b4aa403c8a06ddcd32e533058ae463245169e5cff5e85/assets/sidebar-attention-panel.runtime-DcNkyKMY.js
T

231 lines
15 KiB
JavaScript

import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Da as t,U as n,bc as r,fs as i,ja as a,mc as o,ms as s}from"./control-ui-core-pH6nakZ-.js";import{G as c,J as l,W as u}from"./lit-runtime-BEtFSUCp.js";import{$t as d,c as f,dt as p,en as m,ft as h,qn as g,s as _,zn as v}from"./control-ui-core-DGVkFhVB.js";import{Ht as y,I as b,Lt as x,Rt as S,_ as C,qt as w,w as T}from"./control-ui-core-Br5DB0Zj.js";import{n as E,r as D}from"./gateway-runtime-DUNO4Mi1.js";import{Hs as O,Jr as k,Us as A,Vs as j,Xr as M}from"./control-ui-boot-Cdpgu1Gm.js";import{n as N,t as P}from"./hub-tabs-mHLCJmKB.js";import{t as F}from"./sidebar-update-card-CQqrU8d1.js";var I;function L(){return(L=e((()=>{m(),s(),p(),I=class{constructor(e,t){this.onChange=t,this.operation=null,this.value={phase:`hidden`},this.current=e,this.sync(e)}get state(){return this.value}sync(e){this.current=e;let t=e.client,n=h(e);if(!t||n.phase!==`available`){this.retireOperation(),this.setState(n);return}this.operation&&this.operation.client!==t&&(this.retireOperation(),this.setState({phase:`available`})),(this.value.phase===`hidden`||this.value.phase===`guidance`)&&this.setState({phase:`available`})}request(){this.start(!1)}retry(){this.start(!0)}cancel(){this.retireOperation(),this.setState(h(this.current))}dispose(){this.retireOperation()}start(e){let t=this.current.client;if(!t||h(this.current).phase!==`available`)return;if(this.operation){if(!e)return;this.retireOperation()}let n={client:t};this.operation=n,this.setState({phase:`requesting`}),t.requestScopeUpgrade({onPending:e=>{this.isCurrent(n)&&this.setState({phase:`pending`,requestId:e})}}).then(e=>{!this.isCurrent(n)||e.status===`approved`||this.setState({phase:`rejected`,requestId:e.requestId,expired:e.status===`expired`})}).catch(e=>{!this.isCurrent(n)||e instanceof Error&&e.name===`AbortError`||this.setState({phase:`error`,message:i(e),retryable:!(e instanceof d)||e.retryable})}).finally(()=>{this.isCurrent(n)&&(this.operation=null)})}isCurrent(e){return this.operation===e&&this.current.client===e.client}retireOperation(){let e=this.operation;this.operation=null,e?.client.cancelScopeUpgrade()}setState(e){JSON.stringify(this.value)!==JSON.stringify(e)&&(this.value=e,this.onChange())}}})))()}function R(e,t){if(!t)return c;let n=w(`attention.dismissItem`,{item:e});return l`<button
type="button"
class="sidebar-issues-panel__dismiss"
aria-label=${n}
title=${n}
@click=${e=>{e.preventDefault(),e.stopPropagation(),t()}}
>
${x.x}
</button>`}function z(e){if(!E(e.snapshot,`openclaw.chat`,`operator.admin`))return c;let t=e.count?w(e.count===1?`attention.custodianAlertAria`:`attention.custodianAlertsAria`,{count:String(e.count)}):w(`nav.askOpenClaw`);return l`<openclaw-tooltip .content=${t}>
<button
type="button"
class="sidebar-brand__icon sidebar-footer-bar__custodian sidebar-issues-panel__ask"
aria-label=${t}
@click=${()=>window.dispatchEvent(new CustomEvent(C))}
>
<span class="sidebar-footer-bar__custodian-glyph">
${x.lobster}
${e.count?l`<span
class="session-glyph__badge sidebar-footer-bar__custodian-badge sidebar-footer-bar__custodian-badge--${e.severity??`warning`}"
aria-hidden="true"
></span>`:c}
</span>
</button>
</openclaw-tooltip>`}function B(e){let t=e.context;if(!t)return c;let r=t.overlays.snapshot,i=e.approval.request.sessionKey?.trim(),s=i?t.sessions.state.result?.sessions.find(e=>o(e.key,i)):void 0,l=i?a({context:t,face:`chat`,sessionKey:i}):null;return M({approval:e.approval,busy:r.approvalBusy,canGrant:r.approvalCanGrant,error:r.approvalErrors.get(e.approval.id)??null,openSessionHref:l?.href,sessionTitle:s?.displayName?.trim()||s?.label?.trim(),onDecision:e.onDecision,onOpenSession:l?r=>{n(r)&&(r.preventDefault(),e.onClosePanel(),t.navigate(`chat`,l.options))}:void 0})}function V(e){let t=e.context;if(!e.visible||!t)return c;let n=t.overlays.snapshot,r=t.gateway.snapshot;return l`<openclaw-sidebar-update-card
class="sidebar-issues-panel__update"
data-attention-kind="updateAvailable"
.compact=${!0}
.updateAvailable=${n.updateAvailable}
.updateSchedule=${n.updateSchedule}
.heldUpdateCampaignId=${n.heldUpdateCampaignId}
.updateBusy=${n.updateRunning||n.updateReconciliationPending}
.statusBanner=${n.updateStatusBanner}
.watchUpdateProgress=${e.watchUpdateProgress}
.canUpdate=${E(r,`update.run`,`operator.admin`)}
.canHoldUpdate=${E(r,`update.hold`,`operator.admin`)}
.onUpdate=${()=>void t.overlays.runUpdate()}
.refreshRequired=${!1}
.onHoldUpdate=${()=>t.overlays.holdUpdate()}
.onReviewUpdate=${e.onNavigate}
.onDismiss=${e.onDismiss}
.recoverNativeDecline=${!1}
></openclaw-sidebar-update-card>`}function H(e){switch(e.phase){case`guidance`:return w(`connection.scopeUpgrade.guidance`);case`available`:return w(`connection.scopeUpgrade.limited`);case`requesting`:return w(`connection.scopeUpgrade.requesting`);case`pending`:return w(`connection.scopeUpgrade.pending`);case`rejected`:return w(e.expired?`connection.scopeUpgrade.expired`:`connection.scopeUpgrade.rejected`);case`error`:return w(`connection.scopeUpgrade.error`,{error:e.message})}return e}function U(e){if(e.state.phase===`hidden`)return c;let t=H(e.state),n=w(`connection.scopeUpgrade.inboxState`),r=e.state.phase===`error`?e.state.retryable:e.state.phase===`pending`||e.state.phase===`rejected`;return l`<details
class="sidebar-issues-panel__details sidebar-issues-panel__details--${e.state.phase===`error`||e.state.phase===`rejected`?`error`:`warning`}"
data-attention-kind="scopeUpgrade"
>
<summary class="sidebar-issues-panel__summary" data-issue-row-focus>
<span class="sidebar-issues-panel__icon" aria-hidden="true">${x.shieldQuestion}</span>
<span class="sidebar-issues-panel__content">
<span class="sidebar-issues-panel__entity">${w(`connection.scopeUpgrade.status`)}</span>
<span class="sidebar-issues-panel__state" title=${n}>${n}</span>
</span>
${e.onDismiss?R(w(`connection.scopeUpgrade.status`),e.onDismiss):c}
<span class="sidebar-issues-panel__chevron" aria-hidden="true">${x.chevronRight}</span>
</summary>
<div class="sidebar-issues-panel__body" role="status" aria-live="polite">
<div>${t}</div>
${e.state.phase===`available`?l`<div class="sidebar-issues-panel__actions">
<button
type="button"
class="sidebar-issues-panel__action sidebar-issues-panel__action--primary"
@click=${e.onRequest}
>
${w(`connection.scopeUpgrade.request`)}
</button>
</div>`:e.state.phase===`requesting`?l`<div class="sidebar-issues-panel__actions">
<button
type="button"
class="sidebar-issues-panel__action sidebar-issues-panel__action--primary"
disabled
>
${w(`connection.scopeUpgrade.requestingAction`)}
</button>
</div>`:r||e.state.phase===`error`?l`<div class="sidebar-issues-panel__actions">
${r?l`<button
type="button"
class="sidebar-issues-panel__action sidebar-issues-panel__action--primary"
@click=${e.onRetry}
>
${w(`connection.scopeUpgrade.retry`)}
</button>`:c}
<button
type="button"
class="sidebar-issues-panel__action"
@click=${e.onCancel}
>
${w(`connection.scopeUpgrade.cancel`)}
</button>
</div>`:c}
</div>
</details>`}function W(e){return e.meta?l`<span class="sidebar-issues-panel__state-row" title=${e.detail}>
${e.meta.context?l`<span class="sidebar-issues-panel__meta-context">${e.meta.context}</span>
<span aria-hidden="true">·</span>`:c}
<span class="sidebar-issues-panel__meta-status">${e.meta.status}</span>
<span aria-hidden="true">·</span>
<span class="sidebar-issues-panel__meta-time">${e.meta.time}</span>
</span>`:l`<span class="sidebar-issues-panel__state" title=${e.detail}
>${e.detail}</span
>`}function G(e,t){if(e.action.kind!==`navigate`)return c;let r=e.action.routeId;return l`<div
class="sidebar-issues-panel__details sidebar-issues-panel__details--${e.severity}"
data-attention-kind=${e.kind}
>
<div class="sidebar-issues-panel__summary sidebar-issues-panel__summary--navigation">
<a
class="sidebar-issues-panel__navigation-link"
href=${g(r,t.basePath)}
data-issue-row-focus
@click=${e=>{n(e)&&(e.preventDefault(),t.onNavigate(r))}}
>
<span class="sidebar-issues-panel__icon" aria-hidden="true">${x[e.icon]}</span>
<span class="sidebar-issues-panel__content">
<span class="sidebar-issues-panel__entity" title=${e.label}>${e.label}</span>
${W(e)}
</span>
</a>
${R(e.label,t.onDismiss)}
<span class="sidebar-issues-panel__chevron" aria-hidden="true">${x.chevronRight}</span>
</div>
</div>`}function K(e,t){if(e.action.kind===`navigate`)return G(e,t);let n=(e.action.kind===`askCustodian`?e.action.alert.facts:[]).filter(t=>t!==e.label),r=e.action.kind===`askCustodian`?w(`nav.askOpenClaw`):e.label,i=e.inlineAction;return l`<details
class="sidebar-issues-panel__details sidebar-issues-panel__details--${e.severity}"
data-attention-kind=${e.kind}
>
<summary class="sidebar-issues-panel__summary" data-issue-row-focus>
<span
class="sidebar-issues-panel__icon ${e.kind===`modelAuthExpired`?`sidebar-issues-panel__icon--critical`:``}"
aria-hidden="true"
>${x[e.icon]}</span
>
<span class="sidebar-issues-panel__content">
<span class="sidebar-issues-panel__entity" title=${e.label}>${e.label}</span>
${W(e)}
</span>
${R(e.label,t.onDismiss)}
<span class="sidebar-issues-panel__chevron" aria-hidden="true">${x.chevronRight}</span>
</summary>
<div class="sidebar-issues-panel__body">
${n.length?l`<ul class="sidebar-issues-panel__facts">
${n.map(e=>l`<li>${e}</li>`)}
</ul>`:c}
<div class="sidebar-issues-panel__actions">
${i?l`<button
type="button"
class="sidebar-issues-panel__action sidebar-issues-panel__action--primary"
@click=${()=>t.onNavigate(i.routeId)}
>
${i.label}
</button>`:c}
<button
type="button"
class="sidebar-issues-panel__action ${i?``:`sidebar-issues-panel__action--primary`}"
@click=${()=>t.onOpen(e)}
>
${r}
</button>
</div>
</div>
</details>`}function q(){return(q=e((()=>{u(),v(),y(),D(),t(),r(),k(),S(),T(),F()})))()}function J(e){return w(X[e])}var Y,X;function Z(){return(Z=e((()=>{y(),Y=[`all`,`approvals`,`automations`,`system`],X={all:`attention.tabs.all`,approvals:`attention.tabs.approvals`,automations:`attention.tabs.automations`,system:`attention.tabs.system`}})))()}function Q(e){let{anchor:t}=e.panelPosition,n=e.panelPosition.anchor===`top`?e.panelPosition.top:e.panelPosition.bottom,r=`left:${e.panelPosition.left}px;${t}:${n}px;--sidebar-issues-panel-${t}:${n}px`,i=e.entries.filter(t=>O(t,e.selectedTab)),a=i.flatMap(e=>e.dismissal?[e.dismissal]:[]),o=A(e.entries),s=e.entries.filter(e=>e.type===`attention`&&e.action.kind===`askCustodian`),u=s.some(e=>e.severity===`error`)?`error`:s.length?`warning`:null;return l`<button
type="button"
class="sidebar-issues-panel__backdrop"
aria-label=${w(`common.close`)}
@click=${()=>e.onClose(!0)}
></button>
<openclaw-menu-surface>
<section
id="sidebar-issues-panel"
class="sidebar-issues-panel"
role="dialog"
aria-modal=${f()?`true`:c}
aria-labelledby="sidebar-issues-panel-heading"
style=${r}
@keydown=${e.onKeydown}
>
<div class="sidebar-issues-panel__grabber" aria-hidden="true"></div>
<header class="sidebar-issues-panel__header">
<h2 id="sidebar-issues-panel-heading" class="sidebar-issues-panel__heading">
<span class="sidebar-issues-panel__heading-icon" aria-hidden="true"
>${x.inbox}</span
>
${w(`attention.issues`)}
</h2>
<div class="sidebar-issues-panel__header-actions">
${a.length>0?l`<button
type="button"
class="btn btn--xs btn--ghost sidebar-issues-panel__dismiss-shown"
@click=${()=>{for(let t of a)e.onDismiss(t)}}
>
${w(`attention.dismissShown`)}
</button>`:c}
${z({count:s.length,severity:u,snapshot:e.context.gateway.snapshot})}
<button
type="button"
class="sidebar-brand__icon sidebar-issues-panel__mobile-close"
aria-label=${w(`common.close`)}
@click=${()=>e.onClose(!0)}
>
${x.x}
</button>
</div>
</header>
${N({id:`sidebar-issues`,active:e.selectedTab,tabs:Y.map(e=>({value:e,label:J(e),count:o[e]>0?o[e]:null})),ariaLabel:w(`attention.tabs.label`),panelId:`sidebar-issues-tabpanel`,className:`sidebar-issues-panel__tabs`,variant:`sub`,onSelect:e.onSelectTab})}
<div class="sidebar-issues-panel__list-wrap">
<div
id="sidebar-issues-tabpanel"
class="sidebar-issues-panel__list"
role="tabpanel"
aria-labelledby=${`sidebar-issues-tab-${e.selectedTab}`}
tabindex="0"
@scroll=${e.onScroll}
>
${i.length===0?l`<div class="sidebar-issues-panel__empty">
<span class="sidebar-issues-panel__empty-icon" aria-hidden="true"
>${x.inbox}</span
>
<strong>${w(`attention.emptyTitle`)}</strong>
<span>${w(`attention.emptyBody`)}</span>
</div>`:c}
${i.map(t=>{let n=t.dismissal,r=n?()=>e.onDismiss(n):void 0;switch(t.type){case`approval`:return B({approval:t.approval,context:e.context,onClosePanel:()=>e.onClose(!1),onDecision:e.onApprovalDecision});case`attention`:return K(t,{basePath:e.context.basePath,onDismiss:r,onNavigate:e.onNavigate,onOpen:e.onOpen});case`scopeUpgrade`:return U({state:t.state,onCancel:()=>e.context.scopeUpgrade.cancel(),onDismiss:r,onRequest:()=>e.context.scopeUpgrade.request(),onRetry:()=>e.context.scopeUpgrade.retry()});case`update`:return V({context:e.context,onDismiss:r,onNavigate:()=>e.onNavigate(`updates`),visible:!0,watchUpdateProgress:e.watchUpdateProgress})}return t})}
</div>
<div
class="sidebar-issues-panel__overflow-cue sidebar-issues-panel__overflow-cue--top"
?hidden=${!e.overflowAbove}
aria-hidden="true"
></div>
<div
class="sidebar-issues-panel__overflow-cue sidebar-issues-panel__overflow-cue--bottom"
?hidden=${!e.overflowBelow}
aria-hidden="true"
></div>
</div>
</section>
</openclaw-menu-surface>`}function $(){return($=e((()=>{u(),L(),_(),y(),P(),S(),j(),q(),Z(),b()})))()}$();export{I as ScopeUpgradeController,Q as renderSidebarAttentionPanel};
//# sourceMappingURL=sidebar-attention-panel.runtime-DcNkyKMY.js.map