Spaces:
Runtime error
Runtime error
| import { SERVICE as PROMPT_SERVICE } from "../common/prompt_service.js"; | |
| import { createElement } from "./utils_dom.js"; | |
| export class RgthreeProgressBar extends HTMLElement { | |
| static create() { | |
| return document.createElement(RgthreeProgressBar.NAME); | |
| } | |
| get currentNodeId() { | |
| var _a, _b; | |
| const prompt = this.currentPromptExecution; | |
| const nodeId = ((_a = prompt === null || prompt === void 0 ? void 0 : prompt.errorDetails) === null || _a === void 0 ? void 0 : _a.node_id) || ((_b = prompt === null || prompt === void 0 ? void 0 : prompt.currentlyExecuting) === null || _b === void 0 ? void 0 : _b.nodeId); | |
| return nodeId || null; | |
| } | |
| constructor() { | |
| super(); | |
| this.shadow = null; | |
| this.currentPromptExecution = null; | |
| this.onProgressUpdateBound = this.onProgressUpdate.bind(this); | |
| this.connected = false; | |
| } | |
| onProgressUpdate(e) { | |
| var _a, _b, _c, _d; | |
| if (!this.connected) | |
| return; | |
| const prompt = e.detail.prompt; | |
| this.currentPromptExecution = prompt; | |
| if (prompt === null || prompt === void 0 ? void 0 : prompt.errorDetails) { | |
| let progressText = `${(_a = prompt.errorDetails) === null || _a === void 0 ? void 0 : _a.exception_type} ${((_b = prompt.errorDetails) === null || _b === void 0 ? void 0 : _b.node_id) || ""} ${((_c = prompt.errorDetails) === null || _c === void 0 ? void 0 : _c.node_type) || ""}`; | |
| this.progressTextEl.innerText = progressText; | |
| this.progressNodesEl.classList.add("-error"); | |
| this.progressStepsEl.classList.add("-error"); | |
| return; | |
| } | |
| if (prompt === null || prompt === void 0 ? void 0 : prompt.currentlyExecuting) { | |
| this.progressNodesEl.classList.remove("-error"); | |
| this.progressStepsEl.classList.remove("-error"); | |
| const current = prompt === null || prompt === void 0 ? void 0 : prompt.currentlyExecuting; | |
| let progressText = `(${e.detail.queue}) `; | |
| if (!prompt.totalNodes) { | |
| progressText += `??%`; | |
| this.progressNodesEl.style.width = `0%`; | |
| } | |
| else { | |
| const percent = (prompt.executedNodeIds.length / prompt.totalNodes) * 100; | |
| this.progressNodesEl.style.width = `${Math.max(2, percent)}%`; | |
| progressText += `${Math.round(percent)}%`; | |
| } | |
| let nodeLabel = (_d = current.nodeLabel) === null || _d === void 0 ? void 0 : _d.trim(); | |
| let stepsLabel = ""; | |
| if (current.step != null && current.maxSteps) { | |
| const percent = (current.step / current.maxSteps) * 100; | |
| this.progressStepsEl.style.width = `${percent}%`; | |
| if (current.pass > 1 || current.maxPasses != null) { | |
| stepsLabel += `#${current.pass}`; | |
| if (current.maxPasses && current.maxPasses > 0) { | |
| stepsLabel += `/${current.maxPasses}`; | |
| } | |
| stepsLabel += ` - `; | |
| } | |
| stepsLabel += `${Math.round(percent)}%`; | |
| } | |
| if (nodeLabel || stepsLabel) { | |
| progressText += ` - ${nodeLabel || "???"}${stepsLabel ? ` (${stepsLabel})` : ""}`; | |
| } | |
| if (!stepsLabel) { | |
| this.progressStepsEl.style.width = `0%`; | |
| } | |
| this.progressTextEl.innerText = progressText; | |
| } | |
| else { | |
| if (e === null || e === void 0 ? void 0 : e.detail.queue) { | |
| this.progressTextEl.innerText = `(${e.detail.queue}) Running... in another tab`; | |
| } | |
| else { | |
| this.progressTextEl.innerText = "Idle"; | |
| } | |
| this.progressNodesEl.style.width = `0%`; | |
| this.progressStepsEl.style.width = `0%`; | |
| } | |
| } | |
| connectedCallback() { | |
| if (!this.connected) { | |
| PROMPT_SERVICE.addEventListener("progress-update", this.onProgressUpdateBound); | |
| this.connected = true; | |
| } | |
| if (this.shadow) { | |
| this.progressTextEl.innerText = "Idle"; | |
| this.progressNodesEl.style.width = `0%`; | |
| this.progressStepsEl.style.width = `0%`; | |
| return; | |
| } | |
| this.shadow = this.attachShadow({ mode: "open" }); | |
| const sheet = new CSSStyleSheet(); | |
| sheet.replaceSync(` | |
| :host { | |
| position: relative; | |
| overflow: hidden; | |
| box-sizing: border-box; | |
| background: var(--rgthree-progress-bg-color); | |
| --rgthree-progress-bg-color: rgba(23, 23, 23, 0.9); | |
| --rgthree-progress-nodes-bg-color: rgb(0, 128, 0); | |
| --rgthree-progress-steps-bg-color: rgb(0, 128, 0); | |
| --rgthree-progress-error-bg-color: rgb(128, 0, 0); | |
| --rgthree-progress-text-color: #fff; | |
| } | |
| :host * { | |
| box-sizing: inherit; | |
| } | |
| :host > div.bar { | |
| background: var(--rgthree-progress-nodes-bg-color); | |
| position: absolute; | |
| left: 0; | |
| top: 0; | |
| width: 0%; | |
| height: 50%; | |
| z-index: 1; | |
| transition: width 50ms ease-in-out; | |
| } | |
| :host > div.bar + div.bar { | |
| background: var(--rgthree-progress-steps-bg-color); | |
| top: 50%; | |
| height: 50%; | |
| z-index: 2; | |
| } | |
| :host > div.bar.-error { | |
| background: var(--rgthree-progress-error-bg-color); | |
| } | |
| :host > .overlay { | |
| position: absolute; | |
| left: 0; | |
| top: 0; | |
| width: 100%; | |
| height: 100%; | |
| z-index: 5; | |
| background: linear-gradient(to bottom, rgba(255,255,255,0.25), rgba(0,0,0,0.25)); | |
| mix-blend-mode: overlay; | |
| } | |
| :host > span { | |
| position: relative; | |
| z-index: 4; | |
| text-align: left; | |
| font-size: inherit; | |
| height: 100%; | |
| font-family: sans-serif; | |
| text-shadow: 1px 1px 0px #000; | |
| display: flex; | |
| flex-direction: row; | |
| padding: 0 6px; | |
| align-items: center; | |
| justify-content: start; | |
| color: var(--rgthree-progress-text-color); | |
| text-shadow: black 0px 0px 2px; | |
| } | |
| :host > div.bar[style*="width: 0%"]:first-child, | |
| :host > div.bar[style*="width:0%"]:first-child { | |
| height: 0%; | |
| } | |
| :host > div.bar[style*="width: 0%"]:first-child + div, | |
| :host > div.bar[style*="width:0%"]:first-child + div { | |
| bottom: 0%; | |
| } | |
| `); | |
| this.shadow.adoptedStyleSheets = [sheet]; | |
| const overlayEl = createElement(`div.overlay[part="overlay"]`, { parent: this.shadow }); | |
| this.progressNodesEl = createElement(`div.bar[part="progress-nodes"]`, { parent: this.shadow }); | |
| this.progressStepsEl = createElement(`div.bar[part="progress-steps"]`, { parent: this.shadow }); | |
| this.progressTextEl = createElement(`span[part="text"]`, { text: "Idle", parent: this.shadow }); | |
| } | |
| disconnectedCallback() { | |
| this.connected = false; | |
| PROMPT_SERVICE.removeEventListener("progress-update", this.onProgressUpdateBound); | |
| } | |
| } | |
| RgthreeProgressBar.NAME = "rgthree-progress-bar"; | |
| customElements.define(RgthreeProgressBar.NAME, RgthreeProgressBar); | |