UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

205 lines (198 loc) 11.3 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{_ as t,k as n}from"./control-ui-core-Rwzhj6nO.js";import{K as r,X as i,q as a}from"./lit-runtime-CV_MH99K.js";import{Gt as o,Rt as s,Wt as c,Yt as l,en as u}from"./control-ui-core-vvcQQV2m.js";import{$n as d,Cr as f,Sr as p,er as m,nr as h,xr as g}from"./control-ui-boot-shared-DfZ39Yj9.js";function _(e){return u(e===`limited`?`devices.pairing.limitedAccess`:e===`node`?`devices.pairing.nodeAccessSummary`:`devices.pairing.fullAccessSummary`)}function v(e){if(!e.open)return a;let n=e.lifecycle,r=u(`devices.pairing.title`),o=n.phase===`success`?u(`devices.pairing.pairedTitle`):n.phase===`delivery-uncertain`?u(`devices.pairing.deliveryUncertainTitle`):n.phase===`expired`?u(`devices.pairing.expiredTitle`):u(`devices.pairing.subtitle`),s=u(`devices.pairing.copySetupCode`),l=n.phase===`waiting`?n.setup:null,f=l?.gatewayUrls??(l?[l.gatewayUrl]:[]),m=n.access===`node`,v=m?b:y,S=l?`openclaw node run --pair "oc-pair://${l.setupCode}"`:``,C=!!(l&&l.expiresAtMs<=e.nowMs),w=n.phase!==`success`&&n.phase!==`delivery-uncertain`&&n.phase!==`reconciling`&&(n.phase!==`error`||n.source!==`status`),T=n.phase===`selection`||n.phase===`error`&&n.source===`create`;return i` <openclaw-modal-dialog label=${r} description=${o} @modal-cancel=${e.onClose}> <section class="device-pair-setup"> <header class="device-pair-setup__header"> <div class="device-pair-setup__phone" aria-hidden="true"> ${m?c.server:c.smartphone} </div> <div> <h2>${r}</h2> <p>${o}</p> ${n.phase!==`success`&&!m?i`<p class="device-pair-setup__get-apps"> ${u(`devices.pairing.noApp`)} <button type="button" @click=${e.onGetApps}> ${u(`devices.pairing.getApps`)} </button> </p>`:a} </div> <button class="btn btn--icon btn--ghost device-pair-setup__close" type="button" aria-label=${u(`common.dismiss`)} @click=${e.onClose} > ${c.x} </button> </header> <div class="device-pair-setup__body"> ${w?i`<fieldset class="device-pair-setup__access" ?disabled=${!T}> <legend>${u(`devices.pairing.accessTitle`)}</legend> ${x.map(([t,r,a])=>i`<label> <input type="radio" name="device-pair-access" .checked=${n.access===t} @change=${()=>e.onAccessChange(t)} /> <span> <strong>${u(r)}</strong> <small>${u(a)}</small> </span> </label>`)} </fieldset>`:a} ${n.phase===`selection`?i` <button class="btn primary" type="button" @click=${e.onRefresh}> ${m?c.server:c.smartphone} ${u(`devices.pairing.generateCode`)} </button> `:a} ${n.phase===`loading`?i` <div class="device-pair-setup__loading" role="status" aria-live="polite"> <span class="device-pair-setup__spinner" aria-hidden="true"></span> <span>${u(`devices.pairing.generating`)}</span> </div> `:a} ${n.phase===`reconciling`?i` <div class="device-pair-setup__loading" role="status" aria-live="polite"> <span class="device-pair-setup__spinner" aria-hidden="true"></span> <span>${u(`common.loading`)}</span> </div> `:a} ${n.phase===`error`?i` <div class="callout danger device-pair-setup__error" role="alert"> <strong >${u(n.source===`status`?`devices.pairing.statusFailed`:`devices.pairing.failed`)}</strong > <span>${n.message}</span> </div> <button class="btn primary" type="button" @click=${e.onRefresh}> ${c.refresh} ${u(`common.reload`)} </button> `:a} ${l?i` ${m?i`<div class="device-pair-setup__command"> ${C?a:i`<div class="login-gate__command"> <code>${S}</code> ${h(S,u(`connection.help.copyCommand`))} </div>`} <p class="device-pair-setup__waiting" role="timer" aria-live="off"> ${C?u(`devices.pairing.nodeExpired`):u(`devices.pairing.nodeExpiresIn`,{time:t(l.expiresAtMs,e.nowMs)})} </p> </div>`:i`<div class="device-pair-setup__qr-frame"> ${l.qrDataUrl?i`<img class="device-pair-setup__qr" src=${l.qrDataUrl} alt=${u(`devices.pairing.qrAlt`)} width="360" height="360" draggable="false" />`:i`<div class="device-pair-setup__qr-unavailable"> ${u(`devices.pairing.qrUnavailable`)} </div>`} </div>`} <div class="device-pair-setup__meta"> <span class="settings-status settings-status--accent"> <span class="settings-status__dot"></span> ${l.auth} </span> <div class="device-pair-setup__gateways"> ${f.map(e=>i` <span class="device-pair-setup__gateway" title=${e} >${e}</span > `)} </div> </div> ${l.accessDowngraded?i` <div class="callout warn device-pair-setup__access-warning" role="status"> <strong>${u(`devices.pairing.transportLimitedTitle`)}</strong> <span>${u(`devices.pairing.transportLimitedHint`)}</span> </div> `:a} <div class="device-pair-setup__actions"> ${m?a:i`<button class="btn primary" type="button" @click=${e=>void d(e,l.setupCode,s)} > ${c.copy} <span data-copy-label>${s}</span> </button>`} <button class="btn" type="button" @click=${e.onRefresh}> ${c.refresh} ${u(`devices.pairing.newCode`)} </button> </div> <details class="device-pair-setup__fallback"> <summary>${u(`devices.pairing.showSetupCode`)}</summary> <code>${l.setupCode}</code> </details> ${e.pendingCount>0?i` <div class="callout warn device-pair-setup__pending"> <span> ${u(`devices.pairing.pending`,{count:String(e.pendingCount)})} </span> <button class="btn btn--sm" @click=${e.onManageDevices}> ${u(`devices.pairing.review`)} </button> </div> `:i`<p class="device-pair-setup__waiting"> ${u(m?`devices.pairing.nodeWaiting`:`devices.pairing.waiting`)} </p>`} `:a} ${n.phase===`success`?i`<div class="device-pair-setup__state" role="status" aria-live="polite"> <div class="device-pair-setup__state-icon device-pair-setup__state-icon--success" aria-hidden="true" > ${c.badgeCheck} </div> <h3>${n.deviceName??u(`devices.pairing.pairedTitle`)}</h3> <p> ${n.deviceName?i`${u(`devices.pairing.pairedTitle`)} <span aria-hidden="true">·</span> `:a}${_(n.access)} </p> <button class="btn primary" type="button" @click=${e.onClose}> ${u(`devices.pairing.done`)} </button> </div>`:a} ${n.phase===`delivery-uncertain`?i`<div class="device-pair-setup__state" role="alert"> <div class="device-pair-setup__state-icon" aria-hidden="true"> ${c.alertTriangle} </div> <h3>${u(`devices.pairing.deliveryUncertainTitle`)}</h3> <p>${u(`devices.pairing.deliveryUncertainHint`)}</p> <div class="device-pair-setup__actions"> <button class="btn primary" type="button" @click=${e.onRefresh}> ${c.refresh} ${u(`devices.pairing.generateNewCode`)} </button> </div> </div>`:a} ${n.phase===`expired`?i`<div class="device-pair-setup__state" role="status" aria-live="polite"> <div class="device-pair-setup__state-icon" aria-hidden="true"> ${c.refresh} </div> <h3>${u(`devices.pairing.expiredTitle`)}</h3> <button class="btn primary" type="button" @click=${e.onRefresh}> ${c.refresh} ${u(`devices.pairing.generateNewCode`)} </button> </div>`:a} </div> <footer class="device-pair-setup__footer"> <a href=${v} target=${g} rel=${p()} aria-label=${u(`devices.pairing.helpNewTab`)} > <span>${u(`devices.pairing.help`)}</span> <span class="device-pair-setup__external-icon" aria-hidden="true" >${c.externalLink}</span > </a> <button class="btn btn--ghost" type="button" @click=${e.onManageDevices}> ${u(`devices.pairing.manageDevices`)} </button> </footer> </section> </openclaw-modal-dialog> `}var y,b,x;function S(){return(S=e((()=>{r(),m(),o(),s(),l(),f(),n(),y=`https://docs.openclaw.ai/channels/pairing#pair-from-the-control-ui-recommended`,b=`https://docs.openclaw.ai/gateway/pairing#one-paste-node-pairing`,x=[[`full`,`devices.pairing.fullAccess`,`devices.pairing.fullAccessHint`],[`limited`,`devices.pairing.limitedAccess`,`devices.pairing.limitedAccessHint`],[`node`,`devices.pairing.nodeAccess`,`devices.pairing.nodeAccessHint`]]})))()}S();export{v as renderDevicePairSetup}; //# sourceMappingURL=view-pairing.runtime-lXzSgb_-.js.map