silvery 0.12.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5,8 +5,8 @@ import{createRequire}from"node:module";var __create=Object.create;var{getPrototy
5
5
  ${stack}`)}if(this._dirtyRows[y]=1,this._minDirtyRow===-1||y<this._minDirtyRow)this._minDirtyRow=y;if(y>this._maxDirtyRow)this._maxDirtyRow=y;let idx=this.index(x,y);if(!(cell.continuation??!1)){let prevPacked=this.cells[idx];if(prevPacked!==void 0&&(prevPacked&CONTINUATION_FLAG)!==0&&x>0){let prevIdx=idx-1;this.cells[prevIdx]=this.cells[prevIdx]&~WIDE_FLAG,this.chars[prevIdx]=" "}}if(!(cell.wide??!1)){let prevPacked=this.cells[idx];if(prevPacked!==void 0&&(prevPacked&WIDE_FLAG)!==0&&x+1<this.width){let nextIdx=idx+1;this.cells[nextIdx]=this.cells[nextIdx]&~CONTINUATION_FLAG,this.chars[nextIdx]=" "}}let char=cell.char??" ",fg=cell.fg??null,bg=cell.bg??null,underlineColor2=cell.underlineColor??null,attrs=cell.attrs??EMPTY_ATTRS,wide=cell.wide??!1,continuation=cell.continuation??!1;if(this.chars[idx]=char,isTrueColor(fg))this.fgColors.set(idx,fg);else this.fgColors.delete(idx);if(isTrueColor(bg))this.bgColors.set(idx,bg);else this.bgColors.delete(idx);if(underlineColor2!==null)this.underlineColors.set(idx,underlineColor2);else this.underlineColors.delete(idx);let hyperlink2=cell.hyperlink;if(hyperlink2!==void 0&&hyperlink2!=="")this.hyperlinks.set(idx,hyperlink2);else this.hyperlinks.delete(idx);let packed=0;if(packed|=colorToIndex(fg)&255,packed|=(colorToIndex(bg)&255)<<8,packed|=attrsToNumber(attrs),wide)packed|=WIDE_FLAG;if(continuation)packed|=CONTINUATION_FLAG;if(isTrueColor(fg))packed|=TRUE_COLOR_FG_FLAG;if(isTrueColor(bg))packed|=TRUE_COLOR_BG_FLAG;if(this._selectableMode)packed=(packed|SELECTABLE_FLAG)>>>0;this.cells[idx]=packed}fill(x,y,width,height,cell){let endX=Math.min(x+width,this.width),endY=Math.min(y+height,this.height),startX=Math.max(0,x),startY=Math.max(0,y);if(startX>=endX||startY>=endY)return;let char=cell.char??" ",fg=cell.fg??null,bg=cell.bg??null,underlineColor2=cell.underlineColor??null,attrs=cell.attrs??{},wide=cell.wide??!1,continuation=cell.continuation??!1,packed=packCell({char,fg,bg,underlineColor:underlineColor2,attrs,wide,continuation});if(this._selectableMode)packed=(packed|SELECTABLE_FLAG)>>>0;let hasTrueColorFg=isTrueColor(fg),hasTrueColorBg=isTrueColor(bg),trueColorFg=hasTrueColorFg?fg:null,trueColorBg=hasTrueColorBg?bg:null,hasUnderlineColor=underlineColor2!==null,hyperlink2=cell.hyperlink,hasHyperlink=hyperlink2!==void 0&&hyperlink2!=="";for(let cy=startY;cy<endY;cy++)this._dirtyRows[cy]=1;if(startY<endY){if(this._minDirtyRow===-1||startY<this._minDirtyRow)this._minDirtyRow=startY;if(endY-1>this._maxDirtyRow)this._maxDirtyRow=endY-1}let needFgDelete=!hasTrueColorFg&&this.fgColors.size>0,needBgDelete=!hasTrueColorBg&&this.bgColors.size>0,needUlDelete=!hasUnderlineColor&&this.underlineColors.size>0,needHlDelete=!hasHyperlink&&this.hyperlinks.size>0;for(let cy=startY;cy<endY;cy++){let rowBase=cy*this.width;for(let cx=startX;cx<endX;cx++){let idx=rowBase+cx;if(this.cells[idx]=packed,this.chars[idx]=char,hasTrueColorFg)this.fgColors.set(idx,trueColorFg);else if(needFgDelete)this.fgColors.delete(idx);if(hasTrueColorBg)this.bgColors.set(idx,trueColorBg);else if(needBgDelete)this.bgColors.delete(idx);if(hasUnderlineColor)this.underlineColors.set(idx,underlineColor2);else if(needUlDelete)this.underlineColors.delete(idx);if(hasHyperlink)this.hyperlinks.set(idx,hyperlink2);else if(needHlDelete)this.hyperlinks.delete(idx)}}}restyleRegion(x,y,width,height,style2){let endX=Math.min(x+width,this.width),endY=Math.min(y+height,this.height),startX=Math.max(0,x),startY=Math.max(0,y);if(startX>=endX||startY>=endY)return;let fgIndex=colorToIndex(style2.fg)&255,bgIndex=(colorToIndex(style2.bg)&255)<<8,attrBits=attrsToNumber(style2.attrs),hasTrueColorFg=isTrueColor(style2.fg),hasTrueColorBg=isTrueColor(style2.bg),trueColorFgFlag=hasTrueColorFg?TRUE_COLOR_FG_FLAG:0,trueColorBgFlag=hasTrueColorBg?TRUE_COLOR_BG_FLAG:0,trueColorFg=hasTrueColorFg?style2.fg:null,trueColorBg=hasTrueColorBg?style2.bg:null,underlineColor2=style2.underlineColor??null,hasUnderlineColor=underlineColor2!==null,styleBits=fgIndex|bgIndex|attrBits|trueColorFgFlag|trueColorBgFlag,PRESERVE_MASK=WIDE_FLAG|CONTINUATION_FLAG|SELECTABLE_FLAG,needFgDelete=!hasTrueColorFg&&this.fgColors.size>0,needBgDelete=!hasTrueColorBg&&this.bgColors.size>0,needUlDelete=!hasUnderlineColor&&this.underlineColors.size>0;for(let cy=startY;cy<endY;cy++)this._dirtyRows[cy]=1;if(this._minDirtyRow===-1||startY<this._minDirtyRow)this._minDirtyRow=startY;if(endY-1>this._maxDirtyRow)this._maxDirtyRow=endY-1;for(let cy=startY;cy<endY;cy++){let rowBase=cy*this.width;for(let cx=startX;cx<endX;cx++){let idx=rowBase+cx,oldPacked=this.cells[idx];if(this.cells[idx]=(oldPacked&PRESERVE_MASK)>>>0|styleBits,hasTrueColorFg)this.fgColors.set(idx,trueColorFg);else if(needFgDelete)this.fgColors.delete(idx);if(hasTrueColorBg)this.bgColors.set(idx,trueColorBg);else if(needBgDelete)this.bgColors.delete(idx);if(hasUnderlineColor)this.underlineColors.set(idx,underlineColor2);else if(needUlDelete)this.underlineColors.delete(idx)}}}fillBg(x,y,width,height,bg){let endX=Math.min(x+width,this.width),endY=Math.min(y+height,this.height),startX=Math.max(0,x),startY=Math.max(0,y);if(startX>=endX||startY>=endY)return;let bgIndex=(colorToIndex(bg)&255)<<8,hasTrueColorBg=isTrueColor(bg),trueColorBg=hasTrueColorBg?bg:null,needBgDelete=!hasTrueColorBg&&this.bgColors.size>0,BG_CLEAR_MASK=~(65280|TRUE_COLOR_BG_FLAG),trueColorBgFlag=hasTrueColorBg?TRUE_COLOR_BG_FLAG:0;for(let cy=startY;cy<endY;cy++)this._dirtyRows[cy]=1;if(startY<endY){if(this._minDirtyRow===-1||startY<this._minDirtyRow)this._minDirtyRow=startY;if(endY-1>this._maxDirtyRow)this._maxDirtyRow=endY-1}for(let cy=startY;cy<endY;cy++){let rowBase=cy*this.width;for(let cx=startX;cx<endX;cx++){let idx=rowBase+cx,oldPacked=this.cells[idx];if(this.cells[idx]=(oldPacked&BG_CLEAR_MASK)>>>0|bgIndex|trueColorBgFlag,hasTrueColorBg)this.bgColors.set(idx,trueColorBg);else if(needBgDelete)this.bgColors.delete(idx)}}}clear(){this.cells.fill(0),this.chars.fill(" "),this.fgColors.clear(),this.bgColors.clear(),this.underlineColors.clear(),this.hyperlinks.clear(),this._dirtyRows.fill(1),this._minDirtyRow=0,this._maxDirtyRow=this.height-1}copyFrom(source,srcX,srcY,destX,destY,width,height){let cell=createMutableCell();for(let dy=0;dy<height;dy++){let dstY=destY+dy;if(dstY>=0&&dstY<this.height){if(this._dirtyRows[dstY]=1,this._minDirtyRow===-1||dstY<this._minDirtyRow)this._minDirtyRow=dstY;if(dstY>this._maxDirtyRow)this._maxDirtyRow=dstY}for(let dx=0;dx<width;dx++){let sx=srcX+dx,sy=srcY+dy,dX=destX+dx;if(source.inBounds(sx,sy)&&this.inBounds(dX,dstY))source.readCellInto(sx,sy,cell),this.setCell(dX,dstY,cell)}}}scrollRegion(x,y,regionWidth,regionHeight,delta,clearCell={}){if(delta===0||regionHeight<=0||regionWidth<=0)return;let startX=Math.max(0,x),endX=Math.min(x+regionWidth,this.width),startY=Math.max(0,y),endY=Math.min(y+regionHeight,this.height),clampedWidth=endX-startX,clampedHeight=endY-startY;if(clampedWidth<=0||clampedHeight<=0)return;for(let r=startY;r<endY;r++)this._dirtyRows[r]=1;if(this._minDirtyRow===-1||startY<this._minDirtyRow)this._minDirtyRow=startY;if(endY-1>this._maxDirtyRow)this._maxDirtyRow=endY-1;if(Math.abs(delta)>=clampedHeight){this.fill(startX,startY,clampedWidth,clampedHeight,{char:clearCell.char??" ",bg:clearCell.bg??null});return}let absDelta=Math.abs(delta),w=this.width;if(delta>0){for(let row=startY;row<endY-absDelta;row++){let dstBase=row*w,srcBase=(row+absDelta)*w;this.cells.copyWithin(dstBase+startX,srcBase+startX,srcBase+endX);for(let cx=startX;cx<endX;cx++){this.chars[dstBase+cx]=this.chars[srcBase+cx];let srcIdx=srcBase+cx,dstIdx=dstBase+cx,fgc=this.fgColors.get(srcIdx);if(fgc)this.fgColors.set(dstIdx,fgc),this.fgColors.delete(srcIdx);else this.fgColors.delete(dstIdx);let bgc=this.bgColors.get(srcIdx);if(bgc)this.bgColors.set(dstIdx,bgc),this.bgColors.delete(srcIdx);else this.bgColors.delete(dstIdx);let ulc=this.underlineColors.get(srcIdx);if(ulc)this.underlineColors.set(dstIdx,ulc),this.underlineColors.delete(srcIdx);else this.underlineColors.delete(dstIdx);let hl=this.hyperlinks.get(srcIdx);if(hl)this.hyperlinks.set(dstIdx,hl),this.hyperlinks.delete(srcIdx);else this.hyperlinks.delete(dstIdx)}}this.fill(startX,endY-absDelta,clampedWidth,absDelta,{char:clearCell.char??" ",bg:clearCell.bg??null})}else{for(let row=endY-1;row>=startY+absDelta;row--){let dstBase=row*w,srcBase=(row-absDelta)*w;this.cells.copyWithin(dstBase+startX,srcBase+startX,srcBase+endX);for(let cx=startX;cx<endX;cx++){this.chars[dstBase+cx]=this.chars[srcBase+cx];let srcIdx=srcBase+cx,dstIdx=dstBase+cx,fgc=this.fgColors.get(srcIdx);if(fgc)this.fgColors.set(dstIdx,fgc),this.fgColors.delete(srcIdx);else this.fgColors.delete(dstIdx);let bgc=this.bgColors.get(srcIdx);if(bgc)this.bgColors.set(dstIdx,bgc),this.bgColors.delete(srcIdx);else this.bgColors.delete(dstIdx);let ulc=this.underlineColors.get(srcIdx);if(ulc)this.underlineColors.set(dstIdx,ulc),this.underlineColors.delete(srcIdx);else this.underlineColors.delete(dstIdx);let hl=this.hyperlinks.get(srcIdx);if(hl)this.hyperlinks.set(dstIdx,hl),this.hyperlinks.delete(srcIdx);else this.hyperlinks.delete(dstIdx)}}this.fill(startX,startY,clampedWidth,absDelta,{char:clearCell.char??" ",bg:clearCell.bg??null})}}clone(){let copy=new TerminalBuffer(this.width,this.height);return copy.cells.set(this.cells),copy.chars=[...this.chars],copy.fgColors=new Map(this.fgColors),copy.bgColors=new Map(this.bgColors),copy.underlineColors=new Map(this.underlineColors),copy.hyperlinks=new Map(this.hyperlinks),copy._dirtyRows.fill(0),copy._minDirtyRow=-1,copy._maxDirtyRow=-1,copy._rowMetadata=this._rowMetadata.map((m)=>({...m})),copy}isRowDirty(y){if(y<0||y>=this.height)return!1;return this._dirtyRows[y]!==0}get minDirtyRow(){return this._minDirtyRow}get maxDirtyRow(){return this._maxDirtyRow}resetDirtyRows(){this._dirtyRows.fill(0),this._minDirtyRow=-1,this._maxDirtyRow=-1}markAllRowsDirty(){this._dirtyRows.fill(1),this._minDirtyRow=0,this._maxDirtyRow=this.height-1}cellEquals(x,y,other){if(!this.inBounds(x,y)||!other.inBounds(x,y))return!1;let idx=this.index(x,y),otherIdx=other.index(x,y),mask=~SELECTABLE_FLAG;if((this.cells[idx]&mask)!==(other.cells[otherIdx]&mask))return!1;if(this.chars[idx]!==other.chars[otherIdx])return!1;let packed=this.cells[idx];if(unpackTrueColorFg(packed)){let a=this.fgColors.get(idx),b=other.fgColors.get(otherIdx);if(!colorEquals(a,b))return!1}if(unpackTrueColorBg(packed)){let a=this.bgColors.get(idx),b=other.bgColors.get(otherIdx);if(!colorEquals(a,b))return!1}let ulA=this.underlineColors.get(idx)??null,ulB=other.underlineColors.get(otherIdx)??null;if(!colorEquals(ulA,ulB))return!1;let hlA=this.hyperlinks.get(idx),hlB=other.hyperlinks.get(otherIdx);if(hlA!==hlB)return!1;return!0}rowMetadataEquals(y,other){if(y<0||y>=this.height||y>=other.height)return!1;let start=y*this.width,otherStart=y*other.width,w=Math.min(this.width,other.width),mask=~SELECTABLE_FLAG;for(let i=0;i<w;i++)if((this.cells[start+i]&mask)!==(other.cells[otherStart+i]&mask))return!1;return!0}rowCharsEquals(y,other){if(y<0||y>=this.height||y>=other.height)return!1;let start=y*this.width,otherStart=y*other.width,w=Math.min(this.width,other.width);for(let i=0;i<w;i++)if(this.chars[start+i]!==other.chars[otherStart+i])return!1;return!0}rowExtrasEquals(y,other){if(y<0||y>=this.height||y>=other.height)return!1;let start=y*this.width,w=Math.min(this.width,other.width),otherStart=y*other.width;for(let i=0;i<w;i++){let idx=start+i,otherIdx=otherStart+i,packed=this.cells[idx];if((packed&TRUE_COLOR_FG_FLAG)!==0){let a=this.fgColors.get(idx),b=other.fgColors.get(otherIdx);if(!colorEquals(a,b))return!1}if((packed&TRUE_COLOR_BG_FLAG)!==0){let a=this.bgColors.get(idx),b=other.bgColors.get(otherIdx);if(!colorEquals(a,b))return!1}let ulA=this.underlineColors.get(idx)??null,ulB=other.underlineColors.get(otherIdx)??null;if(!colorEquals(ulA,ulB))return!1;let hlA=this.hyperlinks.get(idx),hlB=other.hyperlinks.get(otherIdx);if(hlA!==hlB)return!1}return!0}}function colorEquals(a,b){if(a===b)return!0;if(a===null||a===void 0)return b===null||b===void 0;if(b===null||b===void 0)return!1;if(typeof a==="number")return a===b;if(typeof b==="number")return!1;return a.r===b.r&&a.g===b.g&&a.b===b.b}function cellEquals(a,b){return a.char===b.char&&colorEquals(a.fg,b.fg)&&colorEquals(a.bg,b.bg)&&colorEquals(a.underlineColor,b.underlineColor)&&a.wide===b.wide&&a.continuation===b.continuation&&attrsEquals(a.attrs,b.attrs)&&(a.hyperlink??void 0)===(b.hyperlink??void 0)}function attrsEquals(a,b){return Boolean(a.bold)===Boolean(b.bold)&&Boolean(a.dim)===Boolean(b.dim)&&Boolean(a.italic)===Boolean(b.italic)&&Boolean(a.underline)===Boolean(b.underline)&&(a.underlineStyle??!1)===(b.underlineStyle??!1)&&Boolean(a.blink)===Boolean(b.blink)&&Boolean(a.inverse)===Boolean(b.inverse)&&Boolean(a.hidden)===Boolean(b.hidden)&&Boolean(a.strikethrough)===Boolean(b.strikethrough)}function styleEquals(a,b){if(a===b)return!0;if(!a||!b)return!1;return colorEquals(a.fg,b.fg)&&colorEquals(a.bg,b.bg)&&colorEquals(a.underlineColor,b.underlineColor)&&attrsEquals(a.attrs,b.attrs)&&(a.hyperlink??void 0)===(b.hyperlink??void 0)}function createMutableCell(){return{char:" ",fg:null,bg:null,underlineColor:null,attrs:{},wide:!1,continuation:!1,hyperlink:void 0}}function bufferToText(buffer,options={}){let{trimTrailingWhitespace=!0,trimEmptyLines=!0}=options,lines=[];for(let y=0;y<buffer.height;y++){let line="",strOffset=0,contentEdgeStrOffset=0,contentEdge=trimTrailingWhitespace?getContentEdge(buffer,y):0;for(let x=0;x<buffer.width;x++){if(buffer.isCellContinuation(x,y))continue;if(line+=buffer.getCellChar(x,y),strOffset++,x<contentEdge)contentEdgeStrOffset=strOffset}if(trimTrailingWhitespace){let trimmed=line.trimEnd();line=trimmed.length>=contentEdgeStrOffset?trimmed:line.substring(0,contentEdgeStrOffset)}lines.push(line)}let result=lines.join(`
6
6
  `);if(trimEmptyLines){while(lines.length>0&&lines[lines.length-1].length===0)lines.pop();result=lines.join(`
7
7
  `)}return result}function getContentEdge(buffer,y){let FLAG_MASK=~(WIDE_FLAG|CONTINUATION_FLAG|SELECTABLE_FLAG);for(let x=buffer.width-1;x>=0;x--){if(buffer.isCellContinuation(x,y))continue;if((buffer.getCellAttrs(x,y)&FLAG_MASK)!==0)return x+1;if(buffer.getCellChar(x,y)!==" ")return x+1}return 0}function bufferToStyledText(buffer,options={}){let{trimTrailingWhitespace=!0,trimEmptyLines=!0}=options,lines=[],currentStyle=null,currentHyperlink;for(let y=0;y<buffer.height;y++){let line="";for(let x=0;x<buffer.width;x++){let cell=buffer.getCell(x,y);if(cell.continuation)continue;let cellHyperlink=cell.hyperlink;if(cellHyperlink!==currentHyperlink){if(currentHyperlink)line+=emitHyperlinkClose(currentHyperlink);if(cellHyperlink)line+=emitHyperlinkOpen(cellHyperlink);currentHyperlink=cellHyperlink}let cellStyle={fg:cell.fg,bg:cell.bg,underlineColor:cell.underlineColor,attrs:cell.attrs};if(!styleEquals(currentStyle,cellStyle))line+=styleTransitionCodes(currentStyle,cellStyle),currentStyle=cellStyle;line+=cell.char}if(currentHyperlink)line+=emitHyperlinkClose(currentHyperlink),currentHyperlink=void 0;if(currentStyle&&(currentStyle.bg!==null||hasActiveAttrs(currentStyle.attrs)))line+=styleResetCodes(currentStyle),currentStyle=null;if(trimTrailingWhitespace)line=trimTrailingWhitespacePreservingAnsi(line);lines.push(line)}let result=lines.join(`
8
- `);if(currentStyle&&(currentStyle.bg!==null||hasActiveAttrs(currentStyle.attrs)))result+=styleResetCodes(currentStyle);if(trimEmptyLines)result=result.replace(/\n+$/,"");return result}function decodeHyperlinkFormat(encoded){if(encoded.charCodeAt(0)===1){let sepIdx=encoded.indexOf("\x02");if(sepIdx>0){let tag=encoded.slice(1,sepIdx),url=encoded.slice(sepIdx+1);if(tag==="c1b")return{url,oscIntro:"",oscClose:"",closeIntro:"",closeTerminator:"\x07"};if(tag==="c1s")return{url,oscIntro:"",oscClose:"",closeIntro:"",closeTerminator:"\x1B\\"};if(tag==="e7b")return{url,oscIntro:"\x1B]",oscClose:"\x1B]",closeIntro:"\x1B]",closeTerminator:"\x07"}}}return{url:encoded,oscIntro:"\x1B]",oscClose:"\x1B]",closeIntro:"\x1B]",closeTerminator:"\x1B\\"}}function emitHyperlinkOpen(encoded){let fmt=decodeHyperlinkFormat(encoded);return`${fmt.oscIntro}8;;${fmt.url}${fmt.closeTerminator}`}function emitHyperlinkClose(encoded){let fmt=decodeHyperlinkFormat(encoded);return`${fmt.closeIntro}8;;${fmt.closeTerminator}`}function hasActiveAttrs(attrs){return!!(attrs.bold||attrs.dim||attrs.italic||attrs.underline||attrs.underlineStyle||attrs.blink||attrs.inverse||attrs.hidden||attrs.strikethrough)}function styleToAnsiCodes(style2){let{fg,bg}=style2,result="";if(fg!==null)result+=`\x1B[${fgColorCode(fg)}m`;if(bg!==null&&!isDefaultBg(bg))result+=`\x1B[${bgColorCode(bg)}m`;if(style2.attrs.bold)result+="\x1B[1m";if(style2.attrs.dim)result+="\x1B[2m";if(style2.attrs.italic)result+="\x1B[3m";let underlineStyle=style2.attrs.underlineStyle;if(typeof underlineStyle==="string"){let subparam={single:1,double:2,curly:3,dotted:4,dashed:5}[underlineStyle];if(subparam!==void 0&&subparam!==0)result+=`\x1B[4:${subparam}m`}else if(style2.attrs.underline)result+="\x1B[4m";if(style2.attrs.inverse)result+="\x1B[7m";if(style2.attrs.strikethrough)result+="\x1B[9m";if(style2.underlineColor!==null&&style2.underlineColor!==void 0)if(typeof style2.underlineColor==="number")result+=`\x1B[58;5;${style2.underlineColor}m`;else result+=`\x1B[58;2;${style2.underlineColor.r};${style2.underlineColor.g};${style2.underlineColor.b}m`;return result}function styleTransitionCodes(oldStyle,newStyle){if(!oldStyle)return styleToAnsiCodes(newStyle);if(styleEquals(oldStyle,newStyle))return"";let result="",oa=oldStyle.attrs,na=newStyle.attrs,boldChanged=Boolean(oa.bold)!==Boolean(na.bold),dimChanged=Boolean(oa.dim)!==Boolean(na.dim);if(boldChanged||dimChanged){let boldOff=boldChanged&&!na.bold,dimOff=dimChanged&&!na.dim;if(boldOff||dimOff){if(result+="\x1B[22m",na.bold)result+="\x1B[1m";if(na.dim)result+="\x1B[2m"}else{if(boldChanged&&na.bold)result+="\x1B[1m";if(dimChanged&&na.dim)result+="\x1B[2m"}}if(Boolean(oa.italic)!==Boolean(na.italic))result+=na.italic?"\x1B[3m":"\x1B[23m";let oldUl=Boolean(oa.underline),newUl=Boolean(na.underline),oldUlStyle=oa.underlineStyle??!1,newUlStyle=na.underlineStyle??!1;if(oldUl!==newUl||oldUlStyle!==newUlStyle)if(typeof na.underlineStyle==="string"){let sub={single:1,double:2,curly:3,dotted:4,dashed:5}[na.underlineStyle];if(sub!==void 0&&sub!==0)result+=`\x1B[4:${sub}m`;else if(newUl)result+="\x1B[4m";else result+="\x1B[24m"}else if(newUl)result+="\x1B[4m";else result+="\x1B[24m";if(Boolean(oa.inverse)!==Boolean(na.inverse))result+=na.inverse?"\x1B[7m":"\x1B[27m";if(Boolean(oa.strikethrough)!==Boolean(na.strikethrough))result+=na.strikethrough?"\x1B[9m":"\x1B[29m";if(!colorEquals(oldStyle.fg,newStyle.fg))if(newStyle.fg===null)result+="\x1B[39m";else result+=`\x1B[${fgColorCode(newStyle.fg)}m`;if(!colorEquals(oldStyle.bg,newStyle.bg))if(newStyle.bg===null)result+="\x1B[49m";else result+=`\x1B[${bgColorCode(newStyle.bg)}m`;if(!colorEquals(oldStyle.underlineColor,newStyle.underlineColor))if(newStyle.underlineColor===null||newStyle.underlineColor===void 0)result+="\x1B[59m";else if(typeof newStyle.underlineColor==="number")result+=`\x1B[58;5;${newStyle.underlineColor}m`;else result+=`\x1B[58;2;${newStyle.underlineColor.r};${newStyle.underlineColor.g};${newStyle.underlineColor.b}m`;return result}function styleResetCodes(style2){let result="";if(style2.attrs.underline||style2.attrs.underlineStyle)result+="\x1B[24m";if(style2.attrs.bold||style2.attrs.dim)result+="\x1B[22m";if(style2.attrs.italic)result+="\x1B[23m";if(style2.attrs.strikethrough)result+="\x1B[29m";if(style2.attrs.inverse)result+="\x1B[27m";if(style2.bg!==null&&!isDefaultBg(style2.bg))result+="\x1B[49m";if(style2.fg!==null)result+="\x1B[39m";if(style2.underlineColor!==null&&style2.underlineColor!==void 0)result+="\x1B[59m";return result}function trimTrailingWhitespacePreservingAnsi(str){let lastContentIndex=-1,i=0;while(i<str.length){if(str[i]==="\x1B"){if(str[i+1]==="]"){let end2=-1;for(let j=i+2;j<str.length;j++){if(str[j]==="\x07"){end2=j;break}if(str[j]==="\x1B"&&str[j+1]==="\\"){end2=j+1;break}}if(end2!==-1){lastContentIndex=end2,i=end2+1;continue}}let end=str.indexOf("m",i);if(end!==-1){lastContentIndex=end,i=end+1;continue}}if(str[i]!==" "&&str[i]!=="\t")lastContentIndex=i;i++}return str.slice(0,lastContentIndex+1)}function ansi256ToRgb(idx){if(idx<16){let table=[[0,0,0],[128,0,0],[0,128,0],[128,128,0],[0,0,128],[128,0,128],[0,128,128],[192,192,192],[128,128,128],[255,0,0],[0,255,0],[255,255,0],[0,0,255],[255,0,255],[0,255,255],[255,255,255]],[r,g,b]=table[idx];return{r,g,b}}if(idx<232){let i=idx-16,r=Math.floor(i/36),g=Math.floor(i%36/6),b=i%6;return{r:r?r*40+55:0,g:g?g*40+55:0,b:b?b*40+55:0}}let v=(idx-232)*10+8;return{r:v,g:v,b:v}}function resolveColor(color){if(color===null)return null;if(typeof color==="number")return ansi256ToRgb(color);if(color.r===-1)return null;return color}function cellToFrameCell(c){let ulStyle=c.attrs.underlineStyle??(c.attrs.underline?"single":!1);return{char:c.char,fg:resolveColor(c.fg),bg:resolveColor(c.bg),bold:c.attrs.bold??!1,dim:c.attrs.dim??!1,italic:c.attrs.italic??!1,underline:ulStyle,underlineColor:resolveColor(c.underlineColor??null),strikethrough:c.attrs.strikethrough??!1,inverse:c.attrs.inverse??!1,blink:c.attrs.blink??!1,hidden:c.attrs.hidden??!1,wide:c.wide,continuation:c.continuation,hyperlink:c.hyperlink??null}}function createTextFrame(buffer){let{width,height}=buffer,snapshot=buffer.clone(),cellData=Array(width*height);for(let y=0;y<height;y++)for(let x=0;x<width;x++)cellData[y*width+x]=snapshot.getCell(x,y);let _text,_ansi,_lines,frame={width,height,get text(){if(_text===void 0)_text=bufferToText(snapshot);return _text},get ansi(){if(_ansi===void 0)_ansi=bufferToStyledText(snapshot);return _ansi},get lines(){if(_lines===void 0)_lines=frame.text.split(`
9
- `);return _lines},cell(col,row){if(col<0||col>=width||row<0||row>=height)return EMPTY_FRAME_CELL;return cellToFrameCell(cellData[row*width+col])},containsText(text){return frame.text.includes(text)}};return frame}var DEFAULT_BG,ATTR_BOLD=65536,ATTR_DIM=131072,ATTR_ITALIC=262144,ATTR_BLINK=524288,ATTR_INVERSE=1048576,ATTR_HIDDEN=2097152,ATTR_STRIKETHROUGH=4194304,UNDERLINE_STYLE_SHIFT=24,UNDERLINE_STYLE_MASK,WIDE_FLAG=134217728,CONTINUATION_FLAG=268435456,TRUE_COLOR_FG_FLAG=536870912,TRUE_COLOR_BG_FLAG=1073741824,SELECTABLE_FLAG=2147483648,VISIBLE_SPACE_ATTR_MASK,EMPTY_CELL,EMPTY_ATTRS,XTERM_256_PALETTE,EMPTY_FRAME_CELL;var init_buffer=__esm(()=>{init_sgr_codes();DEFAULT_BG=Object.freeze({r:-1,g:-1,b:-1});UNDERLINE_STYLE_MASK=7<<UNDERLINE_STYLE_SHIFT,VISIBLE_SPACE_ATTR_MASK=ATTR_INVERSE|ATTR_STRIKETHROUGH|UNDERLINE_STYLE_MASK,EMPTY_CELL={char:" ",fg:null,bg:null,underlineColor:null,attrs:{},wide:!1,continuation:!1,hyperlink:void 0},EMPTY_ATTRS=Object.freeze({});XTERM_256_PALETTE=(()=>{let palette=Array(256),standard=["#000000","#cd0000","#00cd00","#cdcd00","#0000ee","#cd00cd","#00cdcd","#e5e5e5"],bright=["#7f7f7f","#ff0000","#00ff00","#ffff00","#5c5cff","#ff00ff","#00ffff","#ffffff"];for(let i=0;i<8;i++)palette[i]=standard[i],palette[i+8]=bright[i];let cubeValues=[0,95,135,175,215,255];for(let i=0;i<216;i++){let r=cubeValues[Math.floor(i/36)],g=cubeValues[Math.floor(i%36/6)],b=cubeValues[i%6];palette[16+i]="#"+r.toString(16).padStart(2,"0")+g.toString(16).padStart(2,"0")+b.toString(16).padStart(2,"0")}for(let i=0;i<24;i++){let hex=(8+i*10).toString(16).padStart(2,"0");palette[232+i]="#"+hex+hex+hex}return palette})();EMPTY_FRAME_CELL=Object.freeze({char:" ",fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,underlineColor:null,strikethrough:!1,inverse:!1,blink:!1,hidden:!1,wide:!1,continuation:!1,hyperlink:null})});function textSized(text,width){return`\x1B]66;w=${width};${text}\x07`}function isPrivateUseArea(cp){return cp>=57344&&cp<=63743||cp>=983040&&cp<=1048573||cp>=1048576&&cp<=1114109}function isTextSizingLikelySupported(){let termProgram=process.env.TERM_PROGRAM?.toLowerCase()??"",termVersion=process.env.TERM_PROGRAM_VERSION??"";if(termProgram==="kitty"){let parts=termVersion.split("."),major=Number(parts[0])||0,minor=Number(parts[1])||0;if(major>0||major===0&&minor>=40)return!0}return!1}function getTerminalFingerprint(){let program=process.env.TERM_PROGRAM??"unknown",version=process.env.TERM_PROGRAM_VERSION??"unknown";return`${program}@${version}`}function getCachedProbeResult(){return probeCache.get(getTerminalFingerprint())}function setCachedProbeResult(result){probeCache.set(getTerminalFingerprint(),result)}async function detectTextSizingSupport(write,read,timeout=1000){let cached=getCachedProbeResult();if(cached!==void 0)return cached;let testSequence="\r"+textSized(" ",2)+"\x1B[6n\r\x1B[K";write(testSequence);try{let match=(await Promise.race([read(),new Promise((_resolve,reject)=>setTimeout(()=>reject(Error("timeout")),timeout))])).match(/\x1b\[(\d+);(\d+)R/);if(match){if(Number(match[2])===3){let result2={supported:!0,widthOnly:!1};return setCachedProbeResult(result2),result2}}let result={supported:!1,widthOnly:!1};return setCachedProbeResult(result),result}catch{let result={supported:!1,widthOnly:!1};return setCachedProbeResult(result),result}}var probeCache;var init_text_sizing=__esm(()=>{probeCache=new Map});import sliceAnsi from"slice-ansi";import stringWidth2 from"string-width";class DisplayWidthCache{cache=new Map;maxSize;constructor(maxSize=1000){this.maxSize=maxSize}get(text){let cached=this.cache.get(text);if(cached!==void 0)this.cache.delete(text),this.cache.set(text,cached);return cached}set(text,width){if(this.cache.size>=this.maxSize){let firstKey=this.cache.keys().next().value;if(firstKey!==void 0)this.cache.delete(firstKey)}this.cache.set(text,width)}clear(){this.cache.clear()}}function runWithMeasurer(measurer,fn){let prev=_scopedMeasurer;_scopedMeasurer=measurer;try{return fn()}finally{_scopedMeasurer=prev}}function setTextEmojiWide(_wide){}function setTextSizingEnabled(_enabled){}function isTextSizingEnabled(){if(_scopedMeasurer)return _scopedMeasurer.textSizingEnabled;return DEFAULT_TEXT_SIZING_ENABLED}function stripOsc8ForSlice(text){return text.replace(OSC8_RE,"")}function createWidthMeasurer(caps={}){let textEmojiWide=caps.textEmojiWide??!0,textSizingEnabled=caps.textSizingEnabled??!1,cache=new DisplayWidthCache(1e4);function measuredGraphemeWidth(grapheme){let width=stringWidth2(grapheme);if(width!==1)return width;if(textEmojiWide&&isTextPresentationEmoji(grapheme))return 2;if(textSizingEnabled){let cp=grapheme.codePointAt(0);if(cp!==void 0&&isPrivateUseArea(cp))return 2}return width}function measuredDisplayWidth(text){let cached=cache.get(text);if(cached!==void 0)return cached;let width;if(!(MAY_CONTAIN_TEXT_EMOJI.test(text)||textSizingEnabled&&MAY_CONTAIN_PUA.test(text)))width=stringWidth2(text);else{let stripped=stripAnsi2(text);width=0;for(let grapheme of splitGraphemes(stripped))width+=measuredGraphemeWidth(grapheme)}return cache.set(text,width),width}function measuredDisplayWidthAnsi(text){return measuredDisplayWidth(stripAnsi2(text))}function measuredSliceByWidth(text,maxWidth){if(hasAnsi(text))return sliceAnsi(stripOsc8ForSlice(text),0,maxWidth);let width=0,result="",graphemes=splitGraphemes(text);for(let grapheme of graphemes){let gWidth=measuredGraphemeWidth(grapheme);if(width+gWidth>maxWidth)break;result+=grapheme,width+=gWidth}return result}function measuredSliceByWidthFromEnd(text,maxWidth){if(measuredDisplayWidthAnsi(text)<=maxWidth)return text;if(hasAnsi(text)){let cleaned=stripOsc8ForSlice(text),startIndex=measuredDisplayWidthAnsi(cleaned)-maxWidth;return sliceAnsi(cleaned,startIndex)}let graphemes=splitGraphemes(text),width=0,startIdx=graphemes.length;for(let i=graphemes.length-1;i>=0;i--){let gWidth=measuredGraphemeWidth(graphemes[i]);if(width+gWidth>maxWidth)break;width+=gWidth,startIdx=i}return graphemes.slice(startIdx).join("")}function measuredWrapText(text,width,trim,hard){return wrapTextWithMeasurer(text,width,measurer,trim??!1,hard??!1)}let measurer={textEmojiWide,textSizingEnabled,lineHeight:1,displayWidth:measuredDisplayWidth,displayWidthAnsi:measuredDisplayWidthAnsi,graphemeWidth:measuredGraphemeWidth,wrapText:measuredWrapText,sliceByWidth:measuredSliceByWidth,sliceByWidthFromEnd:measuredSliceByWidthFromEnd};return measurer}function getDefaultMeasurer(){if(!_defaultMeasurer)_defaultMeasurer=createWidthMeasurer();return _defaultMeasurer}function splitGraphemes(text){return[...segmenter.segment(text)].map((s)=>s.segment)}function graphemeCount(text){let count=0;for(let _ of segmenter.segment(text))count++;return count}function isTextPresentationEmoji(grapheme){let cp=grapheme.codePointAt(0);if(cp===void 0)return!1;let cached=textPresentationEmojiCache.get(cp);if(cached!==void 0)return cached;if(String.fromCodePoint(cp).length!==grapheme.length)return textPresentationEmojiCache.set(cp,!1),!1;let isExtPict=TEXT_PRESENTATION_EMOJI_REGEX.test(grapheme),isEmojiPres=EMOJI_PRESENTATION_REGEX.test(grapheme);if(!isExtPict||isEmojiPres)return textPresentationEmojiCache.set(cp,!1),!1;let withVs16=grapheme+"️",result=RGI_EMOJI_REGEX.test(withVs16);return textPresentationEmojiCache.set(cp,result),result}function ensureEmojiPresentation(char){if(char.includes("️"))return char;if(isTextPresentationEmoji(char))return char+"️";return char}function displayWidth(text){if(_scopedMeasurer)return _scopedMeasurer.displayWidth(text);let cached=displayWidthCache.get(text);if(cached!==void 0)return cached;let width;if(!(MAY_CONTAIN_TEXT_EMOJI.test(text)||DEFAULT_TEXT_SIZING_ENABLED&&MAY_CONTAIN_PUA.test(text)))width=stringWidth2(text);else{let stripped=stripAnsi2(text);width=0;for(let grapheme of splitGraphemes(stripped))width+=graphemeWidth(grapheme)}return displayWidthCache.set(text,width),width}function graphemeWidth(grapheme){if(_scopedMeasurer)return _scopedMeasurer.graphemeWidth(grapheme);let width=stringWidth2(grapheme);if(width!==1)return width;if(DEFAULT_TEXT_EMOJI_WIDE&&isTextPresentationEmoji(grapheme))return 2;if(DEFAULT_TEXT_SIZING_ENABLED){let cp=grapheme.codePointAt(0);if(cp!==void 0&&isPrivateUseArea(cp))return 2}return width}function isWideGrapheme(grapheme){return graphemeWidth(grapheme)===2}function isZeroWidthGrapheme(grapheme){return stringWidth2(grapheme)===0}function truncateText(text,maxWidth,ellipsis="…"){if(displayWidth(text)<=maxWidth)return text;let ellipsisWidth=displayWidth(ellipsis),targetWidth=maxWidth-ellipsisWidth;if(targetWidth<=0)return maxWidth>0?ellipsis.slice(0,maxWidth):"";let graphemes=hasAnsi(text)?splitGraphemesAnsiAware(text):splitGraphemes(text),result="",currentWidth=0;for(let grapheme of graphemes){let gWidth=graphemeWidth(grapheme);if(currentWidth+gWidth>targetWidth)break;result+=grapheme,currentWidth+=gWidth}return result+ellipsis}function padText(text,width,align="left",padChar=" "){let textWidth=displayWidth(text),padWidth=width-textWidth;if(padWidth<=0)return text;let padCharWidth=displayWidth(padChar);if(padCharWidth===0)return text;let padCount=Math.floor(padWidth/padCharWidth);switch(align){case"left":return text+padChar.repeat(padCount);case"right":return padChar.repeat(padCount)+text;case"center":{let leftPad=Math.floor(padCount/2),rightPad=padCount-leftPad;return padChar.repeat(leftPad)+text+padChar.repeat(rightPad)}}}function constrainText(text,width,maxLines,pad=!1,ellipsis="…"){let allLines=wrapText(text,width),truncated=allLines.length>maxLines,lines=allLines.slice(0,maxLines);if(truncated&&lines.length>0){let lastIdx=lines.length-1,lastLine=lines[lastIdx];if(lastLine){let ellipsisLen=displayWidth(ellipsis);if(displayWidth(lastLine)+ellipsisLen<=width)lines[lastIdx]=lastLine+ellipsis;else lines[lastIdx]=truncateText(lastLine,width,ellipsis)}}if(pad)lines=lines.map((line)=>padText(line,width));return{lines,truncated}}function isWordBoundary(grapheme){return grapheme===" "||grapheme==="-"||grapheme==="\t"}function isBreakBeforeOperatorWith(graphemes,spaceIndex,gWidthFn){let j=spaceIndex+1;while(j<graphemes.length&&gWidthFn(graphemes[j])===0)j++;if(j>=graphemes.length)return!1;let nextChar=graphemes[j];if(gWidthFn(nextChar)!==1)return!1;if(/^[a-zA-Z0-9\s]$/.test(nextChar))return!1;let k=j+1;while(k<graphemes.length&&gWidthFn(graphemes[k])===0)k++;if(k>=graphemes.length)return!1;return graphemes[k]===" "}function canBreakAnywhere(grapheme){return isCJK(grapheme)}function splitGraphemesAnsiAware(text){if(!hasAnsi(text))return splitGraphemes(text);let result=[],pos=0;while(pos<text.length){if(text[pos]==="\x1B"){let remaining=text.slice(pos),csi=remaining.match(ANSI_CSI_RE);if(csi){result.push(csi[0]),pos+=csi[0].length;continue}let osc=remaining.match(ANSI_OSC_RE);if(osc){result.push(osc[0]),pos+=osc[0].length;continue}let single=remaining.match(ANSI_SINGLE_RE);if(single){result.push(single[0]),pos+=single[0].length;continue}}let nextEsc=text.indexOf("\x1B",pos+1),chunk=nextEsc===-1?text.slice(pos):text.slice(pos,nextEsc);for(let g of splitGraphemes(chunk))result.push(g);pos+=chunk.length}return result}function wrapText(text,width,preserveNewlines=!0,trim=!1){if(_scopedMeasurer?.wrapText)return _scopedMeasurer.wrapText(text,width,trim);return wrapTextWithMeasurer(text,width,_scopedMeasurer??void 0,trim,!1,preserveNewlines)}function getActiveLineHeight(){return _scopedMeasurer?.lineHeight??1}function wrapTextWithMeasurer(text,width,measurer,trim=!1,_hard=!1,preserveNewlines=!0){if(width<=0)return[];let gWidthFn=measurer?measurer.graphemeWidth.bind(measurer):graphemeWidth,lines=[],inputLines=preserveNewlines?text.split(`
8
+ `);if(currentStyle&&(currentStyle.bg!==null||hasActiveAttrs(currentStyle.attrs)))result+=styleResetCodes(currentStyle);if(trimEmptyLines)result=result.replace(/\n+$/,"");return result}function decodeHyperlinkFormat(encoded){if(encoded.charCodeAt(0)===1){let sepIdx=encoded.indexOf("\x02");if(sepIdx>0){let tag=encoded.slice(1,sepIdx),url=encoded.slice(sepIdx+1);if(tag==="c1b")return{url,oscIntro:"",oscClose:"",closeIntro:"",closeTerminator:"\x07"};if(tag==="c1s")return{url,oscIntro:"",oscClose:"",closeIntro:"",closeTerminator:"\x1B\\"};if(tag==="e7b")return{url,oscIntro:"\x1B]",oscClose:"\x1B]",closeIntro:"\x1B]",closeTerminator:"\x07"}}}return{url:encoded,oscIntro:"\x1B]",oscClose:"\x1B]",closeIntro:"\x1B]",closeTerminator:"\x1B\\"}}function emitHyperlinkOpen(encoded){let fmt=decodeHyperlinkFormat(encoded);return`${fmt.oscIntro}8;;${fmt.url}${fmt.closeTerminator}`}function emitHyperlinkClose(encoded){let fmt=decodeHyperlinkFormat(encoded);return`${fmt.closeIntro}8;;${fmt.closeTerminator}`}function hasActiveAttrs(attrs){return!!(attrs.bold||attrs.dim||attrs.italic||attrs.underline||attrs.underlineStyle||attrs.blink||attrs.inverse||attrs.hidden||attrs.strikethrough)}function styleToAnsiCodes(style2){let{fg,bg}=style2,result="";if(fg!==null)result+=`\x1B[${fgColorCode(fg)}m`;if(bg!==null&&!isDefaultBg(bg))result+=`\x1B[${bgColorCode(bg)}m`;if(style2.attrs.bold)result+="\x1B[1m";if(style2.attrs.dim)result+="\x1B[2m";if(style2.attrs.italic)result+="\x1B[3m";let underlineStyle=style2.attrs.underlineStyle;if(typeof underlineStyle==="string"){let subparam={single:1,double:2,curly:3,dotted:4,dashed:5}[underlineStyle];if(subparam!==void 0&&subparam!==0)result+=`\x1B[4:${subparam}m`}else if(style2.attrs.underline)result+="\x1B[4m";if(style2.attrs.inverse)result+="\x1B[7m";if(style2.attrs.strikethrough)result+="\x1B[9m";if(style2.underlineColor!==null&&style2.underlineColor!==void 0)if(typeof style2.underlineColor==="number")result+=`\x1B[58;5;${style2.underlineColor}m`;else result+=`\x1B[58;2;${style2.underlineColor.r};${style2.underlineColor.g};${style2.underlineColor.b}m`;return result}function styleTransitionCodes(oldStyle,newStyle){if(!oldStyle)return styleToAnsiCodes(newStyle);if(styleEquals(oldStyle,newStyle))return"";let result="",oa=oldStyle.attrs,na=newStyle.attrs,boldChanged=Boolean(oa.bold)!==Boolean(na.bold),dimChanged=Boolean(oa.dim)!==Boolean(na.dim);if(boldChanged||dimChanged){let boldOff=boldChanged&&!na.bold,dimOff=dimChanged&&!na.dim;if(boldOff||dimOff){if(result+="\x1B[22m",na.bold)result+="\x1B[1m";if(na.dim)result+="\x1B[2m"}else{if(boldChanged&&na.bold)result+="\x1B[1m";if(dimChanged&&na.dim)result+="\x1B[2m"}}if(Boolean(oa.italic)!==Boolean(na.italic))result+=na.italic?"\x1B[3m":"\x1B[23m";let oldUl=Boolean(oa.underline),newUl=Boolean(na.underline),oldUlStyle=oa.underlineStyle??!1,newUlStyle=na.underlineStyle??!1;if(oldUl!==newUl||oldUlStyle!==newUlStyle)if(typeof na.underlineStyle==="string"){let sub={single:1,double:2,curly:3,dotted:4,dashed:5}[na.underlineStyle];if(sub!==void 0&&sub!==0)result+=`\x1B[4:${sub}m`;else if(newUl)result+="\x1B[4m";else result+="\x1B[24m"}else if(newUl)result+="\x1B[4m";else result+="\x1B[24m";if(Boolean(oa.inverse)!==Boolean(na.inverse))result+=na.inverse?"\x1B[7m":"\x1B[27m";if(Boolean(oa.strikethrough)!==Boolean(na.strikethrough))result+=na.strikethrough?"\x1B[9m":"\x1B[29m";if(!colorEquals(oldStyle.fg,newStyle.fg))if(newStyle.fg===null)result+="\x1B[39m";else result+=`\x1B[${fgColorCode(newStyle.fg)}m`;if(!colorEquals(oldStyle.bg,newStyle.bg))if(newStyle.bg===null)result+="\x1B[49m";else result+=`\x1B[${bgColorCode(newStyle.bg)}m`;if(!colorEquals(oldStyle.underlineColor,newStyle.underlineColor))if(newStyle.underlineColor===null||newStyle.underlineColor===void 0)result+="\x1B[59m";else if(typeof newStyle.underlineColor==="number")result+=`\x1B[58;5;${newStyle.underlineColor}m`;else result+=`\x1B[58;2;${newStyle.underlineColor.r};${newStyle.underlineColor.g};${newStyle.underlineColor.b}m`;return result}function styleResetCodes(style2){let result="";if(style2.attrs.underline||style2.attrs.underlineStyle)result+="\x1B[24m";if(style2.attrs.bold||style2.attrs.dim)result+="\x1B[22m";if(style2.attrs.italic)result+="\x1B[23m";if(style2.attrs.strikethrough)result+="\x1B[29m";if(style2.attrs.inverse)result+="\x1B[27m";if(style2.bg!==null&&!isDefaultBg(style2.bg))result+="\x1B[49m";if(style2.fg!==null)result+="\x1B[39m";if(style2.underlineColor!==null&&style2.underlineColor!==void 0)result+="\x1B[59m";return result}function trimTrailingWhitespacePreservingAnsi(str){let lastContentIndex=-1,i=0;while(i<str.length){if(str[i]==="\x1B"){if(str[i+1]==="]"){let end2=-1;for(let j=i+2;j<str.length;j++){if(str[j]==="\x07"){end2=j;break}if(str[j]==="\x1B"&&str[j+1]==="\\"){end2=j+1;break}}if(end2!==-1){lastContentIndex=end2,i=end2+1;continue}}let end=str.indexOf("m",i);if(end!==-1){lastContentIndex=end,i=end+1;continue}}if(str[i]!==" "&&str[i]!=="\t")lastContentIndex=i;i++}return str.slice(0,lastContentIndex+1)}function ansi256ToRgb(idx){if(idx<16){let table=[[0,0,0],[128,0,0],[0,128,0],[128,128,0],[0,0,128],[128,0,128],[0,128,128],[192,192,192],[128,128,128],[255,0,0],[0,255,0],[255,255,0],[0,0,255],[255,0,255],[0,255,255],[255,255,255]],[r,g,b]=table[idx];return{r,g,b}}if(idx<232){let i=idx-16,r=Math.floor(i/36),g=Math.floor(i%36/6),b=i%6;return{r:r?r*40+55:0,g:g?g*40+55:0,b:b?b*40+55:0}}let v=(idx-232)*10+8;return{r:v,g:v,b:v}}function resolveColor(color){if(color===null)return null;if(typeof color==="number")return ansi256ToRgb(color);if(color.r===-1)return null;return color}function cellToFrameCell(c){let ulStyle=c.attrs.underlineStyle??(c.attrs.underline?"single":!1);return{char:c.char,fg:resolveColor(c.fg),bg:resolveColor(c.bg),bold:c.attrs.bold??!1,dim:c.attrs.dim??!1,italic:c.attrs.italic??!1,underline:ulStyle,underlineColor:resolveColor(c.underlineColor??null),strikethrough:c.attrs.strikethrough??!1,inverse:c.attrs.inverse??!1,blink:c.attrs.blink??!1,hidden:c.attrs.hidden??!1,wide:c.wide,continuation:c.continuation,hyperlink:c.hyperlink??null}}function createTextFrame(buffer){let{width,height}=buffer,_snapshot;function getSnapshot(){if(!_snapshot)_snapshot=buffer.clone();return _snapshot}let _cellData;function getCellData(){if(!_cellData){let snap=getSnapshot();_cellData=Array(width*height);for(let y=0;y<height;y++)for(let x=0;x<width;x++)_cellData[y*width+x]=snap.getCell(x,y)}return _cellData}let _text,_ansi,_lines,frame={width,height,get text(){if(_text===void 0)_text=bufferToText(getSnapshot());return _text},get ansi(){if(_ansi===void 0)_ansi=bufferToStyledText(getSnapshot());return _ansi},get lines(){if(_lines===void 0)_lines=frame.text.split(`
9
+ `);return _lines},cell(col,row){if(col<0||col>=width||row<0||row>=height)return EMPTY_FRAME_CELL;return cellToFrameCell(getCellData()[row*width+col])},containsText(text){return frame.text.includes(text)}};return frame}var DEFAULT_BG,ATTR_BOLD=65536,ATTR_DIM=131072,ATTR_ITALIC=262144,ATTR_BLINK=524288,ATTR_INVERSE=1048576,ATTR_HIDDEN=2097152,ATTR_STRIKETHROUGH=4194304,UNDERLINE_STYLE_SHIFT=24,UNDERLINE_STYLE_MASK,WIDE_FLAG=134217728,CONTINUATION_FLAG=268435456,TRUE_COLOR_FG_FLAG=536870912,TRUE_COLOR_BG_FLAG=1073741824,SELECTABLE_FLAG=2147483648,VISIBLE_SPACE_ATTR_MASK,EMPTY_CELL,EMPTY_ATTRS,XTERM_256_PALETTE,EMPTY_FRAME_CELL;var init_buffer=__esm(()=>{init_sgr_codes();DEFAULT_BG=Object.freeze({r:-1,g:-1,b:-1});UNDERLINE_STYLE_MASK=7<<UNDERLINE_STYLE_SHIFT,VISIBLE_SPACE_ATTR_MASK=ATTR_INVERSE|ATTR_STRIKETHROUGH|UNDERLINE_STYLE_MASK,EMPTY_CELL={char:" ",fg:null,bg:null,underlineColor:null,attrs:{},wide:!1,continuation:!1,hyperlink:void 0},EMPTY_ATTRS=Object.freeze({});XTERM_256_PALETTE=(()=>{let palette=Array(256),standard=["#000000","#cd0000","#00cd00","#cdcd00","#0000ee","#cd00cd","#00cdcd","#e5e5e5"],bright=["#7f7f7f","#ff0000","#00ff00","#ffff00","#5c5cff","#ff00ff","#00ffff","#ffffff"];for(let i=0;i<8;i++)palette[i]=standard[i],palette[i+8]=bright[i];let cubeValues=[0,95,135,175,215,255];for(let i=0;i<216;i++){let r=cubeValues[Math.floor(i/36)],g=cubeValues[Math.floor(i%36/6)],b=cubeValues[i%6];palette[16+i]="#"+r.toString(16).padStart(2,"0")+g.toString(16).padStart(2,"0")+b.toString(16).padStart(2,"0")}for(let i=0;i<24;i++){let hex=(8+i*10).toString(16).padStart(2,"0");palette[232+i]="#"+hex+hex+hex}return palette})();EMPTY_FRAME_CELL=Object.freeze({char:" ",fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,underlineColor:null,strikethrough:!1,inverse:!1,blink:!1,hidden:!1,wide:!1,continuation:!1,hyperlink:null})});function textSized(text,width){return`\x1B]66;w=${width};${text}\x07`}function isPrivateUseArea(cp){return cp>=57344&&cp<=63743||cp>=983040&&cp<=1048573||cp>=1048576&&cp<=1114109}function isTextSizingLikelySupported(){let termProgram=process.env.TERM_PROGRAM?.toLowerCase()??"",termVersion=process.env.TERM_PROGRAM_VERSION??"";if(termProgram==="kitty"){let parts=termVersion.split("."),major=Number(parts[0])||0,minor=Number(parts[1])||0;if(major>0||major===0&&minor>=40)return!0}return!1}function getTerminalFingerprint(){let program=process.env.TERM_PROGRAM??"unknown",version=process.env.TERM_PROGRAM_VERSION??"unknown";return`${program}@${version}`}function getCachedProbeResult(){return probeCache.get(getTerminalFingerprint())}function setCachedProbeResult(result){probeCache.set(getTerminalFingerprint(),result)}async function detectTextSizingSupport(write,read,timeout=1000){let cached=getCachedProbeResult();if(cached!==void 0)return cached;let testSequence="\r"+textSized(" ",2)+"\x1B[6n\r\x1B[K";write(testSequence);try{let match=(await Promise.race([read(),new Promise((_resolve,reject)=>setTimeout(()=>reject(Error("timeout")),timeout))])).match(/\x1b\[(\d+);(\d+)R/);if(match){if(Number(match[2])===3){let result2={supported:!0,widthOnly:!1};return setCachedProbeResult(result2),result2}}let result={supported:!1,widthOnly:!1};return setCachedProbeResult(result),result}catch{let result={supported:!1,widthOnly:!1};return setCachedProbeResult(result),result}}var probeCache;var init_text_sizing=__esm(()=>{probeCache=new Map});import sliceAnsi from"slice-ansi";import stringWidth2 from"string-width";class DisplayWidthCache{cache=new Map;maxSize;constructor(maxSize=1000){this.maxSize=maxSize}get(text){let cached=this.cache.get(text);if(cached!==void 0)this.cache.delete(text),this.cache.set(text,cached);return cached}set(text,width){if(this.cache.size>=this.maxSize){let firstKey=this.cache.keys().next().value;if(firstKey!==void 0)this.cache.delete(firstKey)}this.cache.set(text,width)}clear(){this.cache.clear()}}function runWithMeasurer(measurer,fn){let prev=_scopedMeasurer;_scopedMeasurer=measurer;try{return fn()}finally{_scopedMeasurer=prev}}function setTextEmojiWide(_wide){}function setTextSizingEnabled(_enabled){}function isTextSizingEnabled(){if(_scopedMeasurer)return _scopedMeasurer.textSizingEnabled;return DEFAULT_TEXT_SIZING_ENABLED}function stripOsc8ForSlice(text){return text.replace(OSC8_RE,"")}function createWidthMeasurer(caps={}){let textEmojiWide=caps.textEmojiWide??!0,textSizingEnabled=caps.textSizingEnabled??!1,cache=new DisplayWidthCache(1e4);function measuredGraphemeWidth(grapheme){let width=stringWidth2(grapheme);if(width!==1)return width;if(textEmojiWide&&isTextPresentationEmoji(grapheme))return 2;if(textSizingEnabled){let cp=grapheme.codePointAt(0);if(cp!==void 0&&isPrivateUseArea(cp))return 2}return width}function measuredDisplayWidth(text){let cached=cache.get(text);if(cached!==void 0)return cached;let width;if(!(MAY_CONTAIN_TEXT_EMOJI.test(text)||textSizingEnabled&&MAY_CONTAIN_PUA.test(text)))width=stringWidth2(text);else{let stripped=stripAnsi2(text);width=0;for(let grapheme of splitGraphemes(stripped))width+=measuredGraphemeWidth(grapheme)}return cache.set(text,width),width}function measuredDisplayWidthAnsi(text){return measuredDisplayWidth(stripAnsi2(text))}function measuredSliceByWidth(text,maxWidth){if(hasAnsi(text))return sliceAnsi(stripOsc8ForSlice(text),0,maxWidth);let width=0,result="",graphemes=splitGraphemes(text);for(let grapheme of graphemes){let gWidth=measuredGraphemeWidth(grapheme);if(width+gWidth>maxWidth)break;result+=grapheme,width+=gWidth}return result}function measuredSliceByWidthFromEnd(text,maxWidth){if(measuredDisplayWidthAnsi(text)<=maxWidth)return text;if(hasAnsi(text)){let cleaned=stripOsc8ForSlice(text),startIndex=measuredDisplayWidthAnsi(cleaned)-maxWidth;return sliceAnsi(cleaned,startIndex)}let graphemes=splitGraphemes(text),width=0,startIdx=graphemes.length;for(let i=graphemes.length-1;i>=0;i--){let gWidth=measuredGraphemeWidth(graphemes[i]);if(width+gWidth>maxWidth)break;width+=gWidth,startIdx=i}return graphemes.slice(startIdx).join("")}function measuredWrapText(text,width,trim,hard){return wrapTextWithMeasurer(text,width,measurer,trim??!1,hard??!1)}let measurer={textEmojiWide,textSizingEnabled,lineHeight:1,displayWidth:measuredDisplayWidth,displayWidthAnsi:measuredDisplayWidthAnsi,graphemeWidth:measuredGraphemeWidth,wrapText:measuredWrapText,sliceByWidth:measuredSliceByWidth,sliceByWidthFromEnd:measuredSliceByWidthFromEnd};return measurer}function getDefaultMeasurer(){if(!_defaultMeasurer)_defaultMeasurer=createWidthMeasurer();return _defaultMeasurer}function splitGraphemes(text){return[...segmenter.segment(text)].map((s)=>s.segment)}function graphemeCount(text){let count=0;for(let _ of segmenter.segment(text))count++;return count}function isTextPresentationEmoji(grapheme){let cp=grapheme.codePointAt(0);if(cp===void 0)return!1;let cached=textPresentationEmojiCache.get(cp);if(cached!==void 0)return cached;if(String.fromCodePoint(cp).length!==grapheme.length)return textPresentationEmojiCache.set(cp,!1),!1;let isExtPict=TEXT_PRESENTATION_EMOJI_REGEX.test(grapheme),isEmojiPres=EMOJI_PRESENTATION_REGEX.test(grapheme);if(!isExtPict||isEmojiPres)return textPresentationEmojiCache.set(cp,!1),!1;let withVs16=grapheme+"️",result=RGI_EMOJI_REGEX.test(withVs16);return textPresentationEmojiCache.set(cp,result),result}function ensureEmojiPresentation(char){if(char.includes("️"))return char;if(isTextPresentationEmoji(char))return char+"️";return char}function displayWidth(text){if(_scopedMeasurer)return _scopedMeasurer.displayWidth(text);let cached=displayWidthCache.get(text);if(cached!==void 0)return cached;let width;if(!(MAY_CONTAIN_TEXT_EMOJI.test(text)||DEFAULT_TEXT_SIZING_ENABLED&&MAY_CONTAIN_PUA.test(text)))width=stringWidth2(text);else{let stripped=stripAnsi2(text);width=0;for(let grapheme of splitGraphemes(stripped))width+=graphemeWidth(grapheme)}return displayWidthCache.set(text,width),width}function graphemeWidth(grapheme){if(_scopedMeasurer)return _scopedMeasurer.graphemeWidth(grapheme);let width=stringWidth2(grapheme);if(width!==1)return width;if(DEFAULT_TEXT_EMOJI_WIDE&&isTextPresentationEmoji(grapheme))return 2;if(DEFAULT_TEXT_SIZING_ENABLED){let cp=grapheme.codePointAt(0);if(cp!==void 0&&isPrivateUseArea(cp))return 2}return width}function isWideGrapheme(grapheme){return graphemeWidth(grapheme)===2}function isZeroWidthGrapheme(grapheme){return stringWidth2(grapheme)===0}function truncateText(text,maxWidth,ellipsis="…"){if(displayWidth(text)<=maxWidth)return text;let ellipsisWidth=displayWidth(ellipsis),targetWidth=maxWidth-ellipsisWidth;if(targetWidth<=0)return maxWidth>0?ellipsis.slice(0,maxWidth):"";let graphemes=hasAnsi(text)?splitGraphemesAnsiAware(text):splitGraphemes(text),result="",currentWidth=0;for(let grapheme of graphemes){let gWidth=graphemeWidth(grapheme);if(currentWidth+gWidth>targetWidth)break;result+=grapheme,currentWidth+=gWidth}return result+ellipsis}function padText(text,width,align="left",padChar=" "){let textWidth=displayWidth(text),padWidth=width-textWidth;if(padWidth<=0)return text;let padCharWidth=displayWidth(padChar);if(padCharWidth===0)return text;let padCount=Math.floor(padWidth/padCharWidth);switch(align){case"left":return text+padChar.repeat(padCount);case"right":return padChar.repeat(padCount)+text;case"center":{let leftPad=Math.floor(padCount/2),rightPad=padCount-leftPad;return padChar.repeat(leftPad)+text+padChar.repeat(rightPad)}}}function constrainText(text,width,maxLines,pad=!1,ellipsis="…"){let allLines=wrapText(text,width),truncated=allLines.length>maxLines,lines=allLines.slice(0,maxLines);if(truncated&&lines.length>0){let lastIdx=lines.length-1,lastLine=lines[lastIdx];if(lastLine){let ellipsisLen=displayWidth(ellipsis);if(displayWidth(lastLine)+ellipsisLen<=width)lines[lastIdx]=lastLine+ellipsis;else lines[lastIdx]=truncateText(lastLine,width,ellipsis)}}if(pad)lines=lines.map((line)=>padText(line,width));return{lines,truncated}}function isWordBoundary(grapheme){return grapheme===" "||grapheme==="-"||grapheme==="\t"}function isBreakBeforeOperatorWith(graphemes,spaceIndex,gWidthFn){let j=spaceIndex+1;while(j<graphemes.length&&gWidthFn(graphemes[j])===0)j++;if(j>=graphemes.length)return!1;let nextChar=graphemes[j];if(gWidthFn(nextChar)!==1)return!1;if(/^[a-zA-Z0-9\s]$/.test(nextChar))return!1;let k=j+1;while(k<graphemes.length&&gWidthFn(graphemes[k])===0)k++;if(k>=graphemes.length)return!1;return graphemes[k]===" "}function canBreakAnywhere(grapheme){return isCJK(grapheme)}function splitGraphemesAnsiAware(text){if(!hasAnsi(text))return splitGraphemes(text);let result=[],pos=0;while(pos<text.length){if(text[pos]==="\x1B"){let remaining=text.slice(pos),csi=remaining.match(ANSI_CSI_RE);if(csi){result.push(csi[0]),pos+=csi[0].length;continue}let osc=remaining.match(ANSI_OSC_RE);if(osc){result.push(osc[0]),pos+=osc[0].length;continue}let single=remaining.match(ANSI_SINGLE_RE);if(single){result.push(single[0]),pos+=single[0].length;continue}}let nextEsc=text.indexOf("\x1B",pos+1),chunk=nextEsc===-1?text.slice(pos):text.slice(pos,nextEsc);for(let g of splitGraphemes(chunk))result.push(g);pos+=chunk.length}return result}function wrapText(text,width,preserveNewlines=!0,trim=!1){if(_scopedMeasurer?.wrapText)return _scopedMeasurer.wrapText(text,width,trim);return wrapTextWithMeasurer(text,width,_scopedMeasurer??void 0,trim,!1,preserveNewlines)}function getActiveLineHeight(){return _scopedMeasurer?.lineHeight??1}function wrapTextWithMeasurer(text,width,measurer,trim=!1,_hard=!1,preserveNewlines=!0){if(width<=0)return[];let gWidthFn=measurer?measurer.graphemeWidth.bind(measurer):graphemeWidth,lines=[],inputLines=preserveNewlines?text.split(`
10
10
  `):[text.replace(/\n/g," ")];for(let line of inputLines){if(line===""){lines.push("");continue}let graphemes=splitGraphemesAnsiAware(line),currentLine="",currentWidth=0,isFirstLineOfParagraph=!0,lastBreakIndex=-1,lastBreakWidth=0,lastBreakGraphemeIndex=-1;for(let i=0;i<graphemes.length;i++){let grapheme=graphemes[i],gWidth=gWidthFn(grapheme);if(gWidth===0){currentLine+=grapheme;continue}if(trim&&!isFirstLineOfParagraph&&currentWidth===0&&isWordBoundary(grapheme)&&grapheme!=="-")continue;if(isWordBoundary(grapheme)){if(currentWidth+gWidth<=width){if(currentLine+=grapheme,currentWidth+=gWidth,grapheme!==" "||!isBreakBeforeOperatorWith(graphemes,i,gWidthFn))lastBreakIndex=currentLine.length,lastBreakWidth=currentWidth,lastBreakGraphemeIndex=i+1;continue}if(currentLine){let lineToAdd=currentLine;if(trim)lineToAdd=lineToAdd.trimEnd();lines.push(lineToAdd),isFirstLineOfParagraph=!1}currentLine="",currentWidth=0,lastBreakIndex=-1,lastBreakWidth=0,lastBreakGraphemeIndex=-1;continue}else if(canBreakAnywhere(grapheme))lastBreakIndex=currentLine.length,lastBreakWidth=currentWidth,lastBreakGraphemeIndex=i;if(currentWidth+gWidth>width)if(lastBreakIndex>0){let lineToAdd=currentLine.slice(0,lastBreakIndex);if(trim)lineToAdd=lineToAdd.trimEnd();lines.push(lineToAdd),isFirstLineOfParagraph=!1,currentLine=currentLine.slice(lastBreakIndex),currentWidth=currentWidth-lastBreakWidth,i=lastBreakGraphemeIndex-1,currentLine="",currentWidth=0,lastBreakIndex=-1,lastBreakWidth=0,lastBreakGraphemeIndex=-1}else{if(currentLine){if(trim)currentLine=currentLine.trimEnd();lines.push(currentLine),isFirstLineOfParagraph=!1}currentLine=grapheme,currentWidth=gWidth,lastBreakIndex=-1,lastBreakWidth=0,lastBreakGraphemeIndex=-1}else currentLine+=grapheme,currentWidth+=gWidth}if(currentLine)lines.push(currentLine)}if(text.includes("\x1B]8;;"))fixOsc8AcrossWrappedLines(lines);return lines}function fixOsc8AcrossWrappedLines(lines){let activeHref=null;for(let i=0;i<lines.length;i++){let line=lines[i];if(activeHref!==null)line=`\x1B]8;;${activeHref}\x1B\\`+line;let lineHref=activeHref,osc8Matches=line.matchAll(/\x1b\]8;;([^\x07\x1b]*)(?:\x07|\x1b\\)/g);for(let m of osc8Matches)lineHref=m[1]===""?null:m[1];if(lineHref!==null)line+="\x1B]8;;\x1B\\";lines[i]=line,activeHref=lineHref}}function sliceByWidth(text,maxWidth){return(_scopedMeasurer??getDefaultMeasurer()).sliceByWidth(text,maxWidth)}function sliceByWidthRange(text,start,end){let graphemes=splitGraphemes(text),result="",currentCol=0,endCol=end??Number.POSITIVE_INFINITY;for(let grapheme of graphemes){let gWidth=graphemeWidth(grapheme);if(currentCol+gWidth<=start){currentCol+=gWidth;continue}if(currentCol>=endCol)break;result+=grapheme,currentCol+=gWidth}return result}function sliceByWidthFromEnd(text,maxWidth){return(_scopedMeasurer??getDefaultMeasurer()).sliceByWidthFromEnd(text,maxWidth)}function writeTextToBuffer(buffer,x,y,text,style2={fg:null,bg:null,attrs:{}}){let graphemes=splitGraphemes(text),col=x,combineCell=null;for(let grapheme of graphemes){let width=graphemeWidth(grapheme);if(width===0){if(col>0&&buffer.inBounds(col-1,y))combineCell??=createMutableCell(),buffer.readCellInto(col-1,y,combineCell),combineCell.char=combineCell.char+grapheme,buffer.setCell(col-1,y,combineCell)}else if(width===1){if(buffer.inBounds(col,y))buffer.setCell(col,y,{char:grapheme,fg:style2.fg,bg:style2.bg,attrs:style2.attrs,wide:!1,continuation:!1});col++}else if(width===2){let outputChar=ensureEmojiPresentation(grapheme);if(buffer.inBounds(col,y))buffer.setCell(col,y,{char:outputChar,fg:style2.fg,bg:style2.bg,attrs:style2.attrs,wide:!0,continuation:!1});if(buffer.inBounds(col+1,y))buffer.setCell(col+1,y,{char:"",fg:style2.fg,bg:style2.bg,attrs:style2.attrs,wide:!1,continuation:!0});col+=2}if(col>=buffer.width)break}return col}function writeTextTruncated(buffer,x,y,text,maxWidth,style2={fg:null,bg:null,attrs:{}},ellipsis="…"){if(displayWidth(text)<=maxWidth)writeTextToBuffer(buffer,x,y,text,style2);else{let truncated=truncateText(text,maxWidth,ellipsis);writeTextToBuffer(buffer,x,y,truncated,style2)}}function writeLinesToBuffer(buffer,x,y,lines,style2={fg:null,bg:null,attrs:{}}){for(let i=0;i<lines.length;i++){if(y+i>=buffer.height)break;writeTextToBuffer(buffer,x,y+i,lines[i],style2)}}function stripAnsi2(text){return text.replace(/\x1b\[[0-9;:?]*[A-Za-z]/g,"").replace(/\x9b[0-9;:?]*[A-Za-z]/g,"").replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g,"").replace(/\x9d[^\x07\x1b\x9c]*(?:\x07|\x1b\\|\x9c)/g,"").replace(/\x1b[DME78]/g,"").replace(/\x1b\(B/g,"")}function displayWidthAnsi(text){return displayWidth(stripAnsi2(text))}function truncateAnsi(text,maxWidth,ellipsis="…"){let stripped=stripAnsi2(text);return truncateText(stripped,maxWidth,ellipsis)}function parseUnderlineStyle(subparam){switch(subparam){case 0:return!1;case 1:return"single";case 2:return"double";case 3:return"curly";case 4:return"dotted";case 5:return"dashed";default:return"single"}}function parseAnsiText(text){let segments=[],sanitizedText=text.replace(/\x1b\[[0-9;:]*[A-LN-Za-ln-z@`]/g,"").replace(/\x9b[0-9;:]*[A-LN-Za-ln-z@`]/g,""),oscPattern=/(?:\x1b\]|\x9d)8;;([^\x07\x1b\x9c]*)(?:\x07|\x1b\\|\x9c)/g,currentHyperlink,hyperlinkRanges=[],rangeStart=-1,cleaned="",oscMatch,oscLastIndex=0;while((oscMatch=oscPattern.exec(sanitizedText))!==null){cleaned+=sanitizedText.slice(oscLastIndex,oscMatch.index);let url=oscMatch[1],matchStr=oscMatch[0],isC1=matchStr.charCodeAt(0)===157,lastChar=matchStr.charCodeAt(matchStr.length-1),isBel=lastChar===7,isSt9c=lastChar===156;if(url===""){if(currentHyperlink&&rangeStart>=0)hyperlinkRanges.push({start:rangeStart,end:cleaned.length,url:currentHyperlink});currentHyperlink=void 0,rangeStart=-1}else{if(currentHyperlink&&rangeStart>=0)hyperlinkRanges.push({start:rangeStart,end:cleaned.length,url:currentHyperlink});let encodedUrl=url;if(isC1&&(isBel||isSt9c))encodedUrl=`\x01c1b\x02${url}`;else if(isC1)encodedUrl=`\x01c1s\x02${url}`;else if(isBel)encodedUrl=`\x01e7b\x02${url}`;currentHyperlink=encodedUrl,rangeStart=cleaned.length}oscLastIndex=oscMatch.index+oscMatch[0].length}if(cleaned+=sanitizedText.slice(oscLastIndex),currentHyperlink&&rangeStart>=0)hyperlinkRanges.push({start:rangeStart,end:cleaned.length,url:currentHyperlink});let processText=hyperlinkRanges.length>0?cleaned:sanitizedText,ansiPattern=/(?:\x1b\[|\x9b)([0-9;:]*)m/g,currentStyle={},lastIndex=0,match;function getHyperlinkAt(pos){for(let range of hyperlinkRanges)if(pos>=range.start&&pos<range.end)return range.url;return}while((match=ansiPattern.exec(processText))!==null){if(match.index>lastIndex){let content=processText.slice(lastIndex,match.index);if(content.length>0)if(hyperlinkRanges.length>0){let segStart=0;for(let ci=0;ci<content.length;ci++){let hl=getHyperlinkAt(lastIndex+ci),prevHl=ci>0?getHyperlinkAt(lastIndex+ci-1):void 0;if(ci>0&&hl!==prevHl){let sub2=content.slice(segStart,ci);if(sub2.length>0){let seg={text:sub2,...currentStyle};if(prevHl)seg.hyperlink=prevHl;segments.push(seg)}segStart=ci}}let sub=content.slice(segStart);if(sub.length>0){let hl=getHyperlinkAt(lastIndex+segStart),seg={text:sub,...currentStyle};if(hl)seg.hyperlink=hl;segments.push(seg)}}else segments.push({text:content,...currentStyle})}let params=match[1].split(";");for(let i=0;i<params.length;i++){let param=params[i];if(param.includes(":")){let subparts=param.split(":").map((s)=>s===""?0:Number(s)),mainCode=subparts[0];if(mainCode===4){let styleCode=subparts[1]??1;currentStyle.underlineStyle=parseUnderlineStyle(styleCode),currentStyle.underline=currentStyle.underlineStyle!==!1}else if(mainCode===58){if(subparts[1]===5&&subparts[2]!==void 0)currentStyle.underlineColor=subparts[2];else if(subparts[1]===2){let r=subparts[3]??subparts[2]??0,g=subparts[4]??subparts[3]??0,b=subparts[5]??subparts[4]??0;currentStyle.underlineColor=16777216|(r&255)<<16|(g&255)<<8|b&255}}else if(mainCode===38){if(subparts[1]===5&&subparts[2]!==void 0)currentStyle.fg=subparts[2],currentStyle.colonFg=!0;else if(subparts[1]===2){let r=subparts[3]??subparts[2]??0,g=subparts[4]??subparts[3]??0,b=subparts[5]??subparts[4]??0;currentStyle.fg=16777216|(r&255)<<16|(g&255)<<8|b&255,currentStyle.colonFg=!0}}else if(mainCode===48){if(subparts[1]===5&&subparts[2]!==void 0)currentStyle.bg=subparts[2],currentStyle.colonBg=!0;else if(subparts[1]===2){let r=subparts[3]??subparts[2]??0,g=subparts[4]??subparts[3]??0,b=subparts[5]??subparts[4]??0;currentStyle.bg=16777216|(r&255)<<16|(g&255)<<8|b&255,currentStyle.colonBg=!0}}continue}let code=Number(param);switch(code){case 0:currentStyle={};break;case 1:currentStyle.bold=!0;break;case 2:currentStyle.dim=!0;break;case 3:currentStyle.italic=!0;break;case 4:currentStyle.underline=!0,currentStyle.underlineStyle="single";break;case 7:currentStyle.inverse=!0;break;case 22:currentStyle.bold=!1,currentStyle.dim=!1;break;case 23:currentStyle.italic=!1;break;case 24:currentStyle.underline=!1,currentStyle.underlineStyle=!1;break;case 27:currentStyle.inverse=!1;break;case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:currentStyle.fg=code;break;case 38:{let nextParams=params.slice(i+1).map(Number);if(currentStyle.colonFg=void 0,nextParams[0]===5&&nextParams[1]!==void 0)currentStyle.fg=nextParams[1],i+=2;else if(nextParams[0]===2&&nextParams[3]!==void 0)currentStyle.fg=16777216|(nextParams[1]&255)<<16|(nextParams[2]&255)<<8|nextParams[3]&255,i+=4;break}case 39:currentStyle.fg=null;break;case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:currentStyle.bg=code;break;case 48:{let nextParams=params.slice(i+1).map(Number);if(currentStyle.colonBg=void 0,nextParams[0]===5&&nextParams[1]!==void 0)currentStyle.bg=nextParams[1],i+=2;else if(nextParams[0]===2&&nextParams[3]!==void 0)currentStyle.bg=16777216|(nextParams[1]&255)<<16|(nextParams[2]&255)<<8|nextParams[3]&255,i+=4;break}case 49:currentStyle.bg=null;break;case 58:{let nextParams=params.slice(i+1).map(Number);if(nextParams[0]===5&&nextParams[1]!==void 0)currentStyle.underlineColor=nextParams[1],i+=2;else if(nextParams[0]===2&&nextParams[3]!==void 0)currentStyle.underlineColor=16777216|(nextParams[1]&255)<<16|(nextParams[2]&255)<<8|nextParams[3]&255,i+=4;break}case 59:currentStyle.underlineColor=null;break;case 90:case 91:case 92:case 93:case 94:case 95:case 96:case 97:currentStyle.fg=code;break;case 100:case 101:case 102:case 103:case 104:case 105:case 106:case 107:currentStyle.bg=code;break;case BG_OVERRIDE_CODE:currentStyle.bgOverride=!0;break}}lastIndex=match.index+match[0].length}if(lastIndex<processText.length){let content=processText.slice(lastIndex);if(content.length>0)if(hyperlinkRanges.length>0){let segStart=0;for(let ci=0;ci<content.length;ci++){let hl=getHyperlinkAt(lastIndex+ci),prevHl=ci>0?getHyperlinkAt(lastIndex+ci-1):void 0;if(ci>0&&hl!==prevHl){let sub2=content.slice(segStart,ci);if(sub2.length>0){let seg={text:sub2,...currentStyle};if(prevHl)seg.hyperlink=prevHl;segments.push(seg)}segStart=ci}}let sub=content.slice(segStart);if(sub.length>0){let hl=getHyperlinkAt(lastIndex+segStart),seg={text:sub,...currentStyle};if(hl)seg.hyperlink=hl;segments.push(seg)}}else segments.push({text:content,...currentStyle})}return segments}function hasAnsi(text){return ANSI_TEST_REGEX.test(text)}function measureText(text){let lines=text.split(`
11
11
  `),maxWidth=0;for(let line of lines){let lineWidth=displayWidth(line);if(lineWidth>maxWidth)maxWidth=lineWidth}return{width:maxWidth,height:lines.length}}function hasWideCharacters(text){return splitGraphemes(text).some(isWideGrapheme)}function hasZeroWidthCharacters(text){return splitGraphemes(text).some(isZeroWidthGrapheme)}function normalizeText(text){return text.normalize("NFC")}function getFirstCodePoint(str){return str.codePointAt(0)??0}function isLikelyEmoji(grapheme){let cp=getFirstCodePoint(grapheme);return CHAR_RANGES.isEmoji(cp)||grapheme.includes("‍")}function isCJK(grapheme){let cp=getFirstCodePoint(grapheme);return CHAR_RANGES.isCJK(cp)||CHAR_RANGES.isJapaneseKana(cp)||CHAR_RANGES.isHangul(cp)}var segmenter,displayWidthCache,DEFAULT_TEXT_EMOJI_WIDE=!0,DEFAULT_TEXT_SIZING_ENABLED=!1,_scopedMeasurer=null,OSC8_RE,createMeasurer,_defaultMeasurer,TEXT_PRESENTATION_EMOJI_REGEX,EMOJI_PRESENTATION_REGEX,RGI_EMOJI_REGEX,textPresentationEmojiCache,MAY_CONTAIN_TEXT_EMOJI,MAY_CONTAIN_PUA,ANSI_CSI_RE,ANSI_OSC_RE,ANSI_SINGLE_RE,ANSI_TEST_REGEX,CHAR_RANGES;var init_unicode=__esm(()=>{init_ansi2();init_buffer();init_text_sizing();segmenter=new Intl.Segmenter(void 0,{granularity:"grapheme"});displayWidthCache=new DisplayWidthCache(1e4);OSC8_RE=/\x1b\]8;;[^\x07\x1b]*(?:\x07|\x1b\\)/g;createMeasurer=createWidthMeasurer;TEXT_PRESENTATION_EMOJI_REGEX=/^\p{Extended_Pictographic}$/u,EMOJI_PRESENTATION_REGEX=/^\p{Emoji_Presentation}$/u,RGI_EMOJI_REGEX=/^\p{RGI_Emoji}$/v,textPresentationEmojiCache=new Map;MAY_CONTAIN_TEXT_EMOJI=/[\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]/,MAY_CONTAIN_PUA=/[\uE000-\uF8FF]/;ANSI_CSI_RE=/^\x1b\[[0-9;:?]*[A-Za-z]/,ANSI_OSC_RE=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/,ANSI_SINGLE_RE=/^\x1b[DME78(B]/;ANSI_TEST_REGEX=/\x1b(?:\[[0-9;:]*[A-Za-z]|\])|\x9b[\x30-\x3f]*[\x40-\x7e]|\x9d/;CHAR_RANGES={isBasicLatin:(cp)=>cp>=32&&cp<=127,isCJK:(cp)=>cp>=19968&&cp<=40959||cp>=13312&&cp<=19903||cp>=131072&&cp<=173791||cp>=63744&&cp<=64255||cp>=194560&&cp<=195103,isJapaneseKana:(cp)=>cp>=12352&&cp<=12447||cp>=12448&&cp<=12543,isHangul:(cp)=>cp>=44032&&cp<=55203||cp>=4352&&cp<=4607,isEmoji:(cp)=>cp>=128512&&cp<=128591||cp>=127744&&cp<=128511||cp>=128640&&cp<=128767||cp>=128768&&cp<=128895||cp>=129280&&cp<=129535||cp>=9728&&cp<=9983||cp>=9984&&cp<=10175}});var IncrementalRenderMismatchError;var init_errors=__esm(()=>{IncrementalRenderMismatchError=class IncrementalRenderMismatchError extends Error{renderPhaseStats;mismatchContext;constructor(message,data){super(message);this.name="IncrementalRenderMismatchError",this.renderPhaseStats=data?.renderPhaseStats,this.mismatchContext=data?.mismatchContext}}});import{createLogger}from"loggily";function strictTerminalBackends(){let val=(typeof process<"u"?process.env.SILVERY_STRICT_TERMINAL??"":"").toLowerCase().trim();if(!val)return[];if(val==="all")return["vt100","xterm","ghostty"];let backends=val.split(",").map((s)=>s.trim()).filter(Boolean),valid=new Set(["vt100","xterm","ghostty"]);for(let b of backends)if(!valid.has(b))log.warn?.(`SILVERY_STRICT_TERMINAL: unknown backend '${b}', ignoring`);return backends.filter((b)=>valid.has(b))}function createTerminalVerifyState(){let allBackends=strictTerminalBackends();return{terminal:null,ghosttyTerminal:null,width:0,height:0,frameCount:0,backends:allBackends.filter((b)=>b!=="vt100"),hasVt100:allBackends.includes("vt100")}}function createDefaultSgr(){return{fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,blink:!1,inverse:!1,hidden:!1,strikethrough:!1}}function createDefaultStyledCell(){return{char:" ",fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,blink:!1,inverse:!1,hidden:!1,strikethrough:!1}}function applySgrParams(params,sgr){if(params===""||params==="0"){sgr.fg=null,sgr.bg=null,sgr.bold=!1,sgr.dim=!1,sgr.italic=!1,sgr.underline=!1,sgr.blink=!1,sgr.inverse=!1,sgr.hidden=!1,sgr.strikethrough=!1;return}let parts=params.split(";"),i=0;while(i<parts.length){let code=parts[i],colonIdx=code.indexOf(":");if(colonIdx>=0){if(parseInt(code.substring(0,colonIdx))===4){let sub=parseInt(code.substring(colonIdx+1));sgr.underline=sub>0}i++;continue}let n=parseInt(code);if(n===0)sgr.fg=null,sgr.bg=null,sgr.bold=!1,sgr.dim=!1,sgr.italic=!1,sgr.underline=!1,sgr.blink=!1,sgr.inverse=!1,sgr.hidden=!1,sgr.strikethrough=!1;else if(n===1)sgr.bold=!0;else if(n===2)sgr.dim=!0;else if(n===3)sgr.italic=!0;else if(n===4)sgr.underline=!0;else if(n===5||n===6)sgr.blink=!0;else if(n===7)sgr.inverse=!0;else if(n===8)sgr.hidden=!0;else if(n===9)sgr.strikethrough=!0;else if(n===21)sgr.underline=!0;else if(n===22)sgr.bold=!1,sgr.dim=!1;else if(n===23)sgr.italic=!1;else if(n===24)sgr.underline=!1;else if(n===25)sgr.blink=!1;else if(n===27)sgr.inverse=!1;else if(n===28)sgr.hidden=!1;else if(n===29)sgr.strikethrough=!1;else if(n>=30&&n<=37)sgr.fg=n-30;else if(n===38){if(parts[i+1]==="5")sgr.fg=parseInt(parts[i+2]),i+=2;else if(parts[i+1]==="2")sgr.fg={r:parseInt(parts[i+2]),g:parseInt(parts[i+3]),b:parseInt(parts[i+4])},i+=4}else if(n===39)sgr.fg=null;else if(n>=40&&n<=47)sgr.bg=n-40;else if(n===48){if(parts[i+1]==="5")sgr.bg=parseInt(parts[i+2]),i+=2;else if(parts[i+1]==="2")sgr.bg={r:parseInt(parts[i+2]),g:parseInt(parts[i+3]),b:parseInt(parts[i+4])},i+=4}else if(n===49)sgr.bg=null;else if(n>=90&&n<=97)sgr.fg=n-90+8;else if(n>=100&&n<=107)sgr.bg=n-100+8;i++}}function replayAnsiWithStyles(width,height,ansi,ctx=_defaultCtxForReplay){let screen=Array.from({length:height},()=>Array.from({length:width},()=>createDefaultStyledCell())),cx=0,cy=0,pendingWrap=!1,sgr=createDefaultSgr(),i=0;while(i<ansi.length){if(ansi[i]==="\x1B"){if(ansi[i+1]==="["){i+=2;let params="";while(i<ansi.length&&(ansi[i]>="0"&&ansi[i]<="9"||ansi[i]===";"||ansi[i]==="?"||ansi[i]===":"))params+=ansi[i],i++;let cmd=ansi[i];if(i++,cmd==="H")if(pendingWrap=!1,params==="")cx=0,cy=0;else{let cmdParts=params.split(";");cy=Math.min(height-1,Math.max(0,(parseInt(cmdParts[0])||1)-1)),cx=Math.min(width-1,Math.max(0,(parseInt(cmdParts[1])||1)-1))}else if(cmd==="K"){if(cy>=height)continue;for(let x=cx;x<width;x++){let cell=screen[cy][x];cell.char=" ",cell.fg=null,cell.bg=sgr.bg,cell.bold=!1,cell.dim=!1,cell.italic=!1,cell.underline=!1,cell.blink=!1,cell.inverse=!1,cell.hidden=!1,cell.strikethrough=!1}}else if(cmd==="J"){if(cy<height)for(let x=cx;x<width;x++){let cell=screen[cy][x];cell.char=" ",cell.fg=null,cell.bg=sgr.bg,cell.bold=!1,cell.dim=!1,cell.italic=!1,cell.underline=!1,cell.blink=!1,cell.inverse=!1,cell.hidden=!1,cell.strikethrough=!1}for(let y=cy+1;y<height;y++)for(let x=0;x<width;x++){let cell=screen[y][x];cell.char=" ",cell.fg=null,cell.bg=sgr.bg,cell.bold=!1,cell.dim=!1,cell.italic=!1,cell.underline=!1,cell.blink=!1,cell.inverse=!1,cell.hidden=!1,cell.strikethrough=!1}}else if(cmd==="m")applySgrParams(params,sgr);else if(cmd==="C"){pendingWrap=!1;let n=parseInt(params)||1;cx=Math.min(width-1,cx+n)}else if(cmd==="A"){pendingWrap=!1;let n=parseInt(params)||1;cy=Math.max(0,cy-n)}else if(cmd==="B"){pendingWrap=!1;let n=parseInt(params)||1;cy=Math.min(height-1,cy+n)}continue}else if(ansi[i+1]==="]"){i+=2;while(i<ansi.length){if(ansi[i]==="\x07"){i++;break}if(ansi[i]==="\x1B"&&ansi[i+1]==="\\"){i+=2;break}i++}continue}i+=2;continue}if(ansi[i]==="\r"){pendingWrap=!1,cx=0,i++;continue}if(ansi[i]===`
12
12
  `){if(pendingWrap=!1,cy++,cy>=height){let first=screen.shift();for(let cell of first)cell.char=" ",cell.fg=null,cell.bg=null,cell.bold=!1,cell.dim=!1,cell.italic=!1,cell.underline=!1,cell.blink=!1,cell.inverse=!1,cell.hidden=!1,cell.strikethrough=!1;screen.push(first),cy=height-1}i++;continue}let grapheme="",advance=0,code0=ansi.charCodeAt(i);if(code0>=55296&&code0<=56319&&i+1<ansi.length){let low=ansi.charCodeAt(i+1);if(low>=56320&&low<=57343)grapheme=ansi[i]+ansi[i+1],advance=2;else grapheme=ansi[i],advance=1}else grapheme=ansi[i],advance=1;{let j=i+advance;while(j<ansi.length){let c=ansi.charCodeAt(j),cp,cpLen;if(c>=55296&&c<=56319&&j+1<ansi.length){let lo=ansi.charCodeAt(j+1);if(lo>=56320&&lo<=57343)cp=(c-55296<<10)+(lo-56320)+65536,cpLen=2;else break}else cp=c,cpLen=1;if(cp===8205||cp===65038||cp===65039||cp>=768&&cp<=879||cp>=8400&&cp<=8447||cp>=6832&&cp<=6911||cp>=65056&&cp<=65071||cp===8419||cp>=127995&&cp<=127999||cp>=127462&&cp<=127487||cp>=917536&&cp<=917631||cp===917505){grapheme+=ansi.slice(j,j+cpLen),advance+=cpLen,j+=cpLen;continue}if((grapheme.length>=2?grapheme.charCodeAt(grapheme.length-2)===8205?8205:grapheme.charCodeAt(grapheme.length-1):grapheme.charCodeAt(grapheme.length-1))===8205&&cp>32){grapheme+=ansi.slice(j,j+cpLen),advance+=cpLen,j+=cpLen;continue}break}}let charWidth=graphemeWidth(grapheme);if(cy<height&&cx<width){if(pendingWrap){if(pendingWrap=!1,cx=0,cy++,cy>=height){let first=screen.shift();for(let cell of first)cell.char=" ",cell.fg=null,cell.bg=null,cell.bold=!1,cell.dim=!1,cell.italic=!1,cell.underline=!1,cell.blink=!1,cell.inverse=!1,cell.hidden=!1,cell.strikethrough=!1;screen.push(first),cy=height-1}}if(cy<height&&cx<width){let cell=screen[cy][cx];if(cell.char=grapheme,cell.fg=sgr.fg,cell.bg=sgr.bg,cell.bold=sgr.bold,cell.dim=sgr.dim,cell.italic=sgr.italic,cell.underline=sgr.underline,cell.blink=sgr.blink,cell.inverse=sgr.inverse,cell.hidden=sgr.hidden,cell.strikethrough=sgr.strikethrough,charWidth===2&&cx+1<width){let cont=screen[cy][cx+1];cont.char=" ",cont.fg=sgr.fg,cont.bg=sgr.bg,cont.bold=sgr.bold,cont.dim=sgr.dim,cont.italic=sgr.italic,cont.underline=sgr.underline,cont.blink=sgr.blink,cont.inverse=sgr.inverse,cont.hidden=sgr.hidden,cont.strikethrough=sgr.strikethrough}if(cx+=charWidth,cx>=width)cx=width-1,pendingWrap=!0}}i+=advance}return screen}function formatColor(c){if(c===null)return"default";if(typeof c==="number")return`${c}`;return`rgb(${c.r},${c.g},${c.b})`}function captureStrictFailureArtifacts(opts){try{let fs=__require("fs"),path=__require("path"),dir=`/tmp/silvery-strict-failure-${Date.now()}`;fs.mkdirSync(dir,{recursive:!0});let meta={source:opts.source,timestamp:new Date().toISOString(),frameCount:opts.frameCount,prevSize:opts.prev?{width:opts.prev.width,height:opts.prev.height}:null,nextSize:opts.next?{width:opts.next.width,height:opts.next.height}:null,incrOutputLength:opts.incrOutput?.length,freshOutputLength:opts.freshOutput?.length,testName:globalThis.__vitest_worker__?.current?.name};if(fs.writeFileSync(path.join(dir,"meta.json"),JSON.stringify(meta,null,2)),fs.writeFileSync(path.join(dir,"error.txt"),opts.errorMessage),opts.incrOutput)fs.writeFileSync(path.join(dir,"incremental.ansi"),opts.incrOutput);if(opts.freshOutput)fs.writeFileSync(path.join(dir,"fresh.ansi"),opts.freshOutput);if(opts.prev){let rows=[];for(let y=0;y<opts.prev.height;y++){let row="";for(let x=0;x<opts.prev.width;x++){let cell=opts.prev.getCell(x,y);row+=cell.char||" "}rows.push(row.trimEnd())}fs.writeFileSync(path.join(dir,"prev-buffer.txt"),rows.join(`
@@ -68,7 +68,7 @@ ${colDetails.join(`
68
68
  `||ch===" "){pos++;continue}if(normalized.startsWith(plainLine,pos))return pos;if(truncatedPrefix&&normalized.startsWith(truncatedPrefix,pos))return pos;pos++}return fromOffset}function formatTextLines(text,width,wrap,ctx,trim=!0){if(width<=0)return[];let normalizedText=text.replace(/\t/g," "),lines=normalizedText.split(`
69
69
  `);if(wrap==="clip"){let sliceFn=ctx?ctx.measurer.sliceByWidth:sliceByWidth;return lines.map((line)=>{if(getTextWidth2(line,ctx)<=width)return line;return sliceFn(line,width)})}if(wrap==="hard"){let sliceFn=ctx?ctx.measurer.sliceByWidth:sliceByWidth,out=[];for(let line of lines){if(line===""){out.push("");continue}let remaining=line;while(getTextWidth2(remaining,ctx)>width){let head=sliceFn(remaining,width);if(head.length===0)break;out.push(head),remaining=remaining.slice(head.length)}out.push(remaining)}return out}if(wrap===!1||wrap==="truncate-end"||wrap==="truncate")return lines.map((line)=>truncateText2(line,width,"end",ctx));if(wrap==="truncate-start")return lines.map((line)=>truncateText2(line,width,"start",ctx));if(wrap==="truncate-middle")return lines.map((line)=>truncateText2(line,width,"middle",ctx));if(wrap==="even"){let gWidthFn=ctx?.measurer?.graphemeWidth?.bind(ctx.measurer)??graphemeWidth,analysis=buildTextAnalysis(normalizedText,gWidthFn);return optimalWrap(normalizedText,analysis,width)}if(ctx)return ctx.measurer.wrapText(normalizedText,width,!0,trim);return wrapText(normalizedText,width,!0,trim)}function truncateText2(text,width,mode,ctx){if(getTextWidth2(text,ctx)<=width)return text;let ellipsis="…",availableWidth=width-1;if(availableWidth<=0)return width>0?ellipsis:"";let sliceFn=ctx?ctx.measurer.sliceByWidth:sliceByWidth,sliceEndFn=ctx?ctx.measurer.sliceByWidthFromEnd:sliceByWidthFromEnd;if(mode==="end")return sliceFn(text,availableWidth)+ellipsis;if(mode==="start")return ellipsis+sliceEndFn(text,availableWidth);let halfWidth=Math.floor(availableWidth/2),startPart=sliceFn(text,halfWidth),endPart=sliceEndFn(text,availableWidth-halfWidth);return startPart+ellipsis+endPart}function renderTextLine(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx){if(hasAnsi(text)){renderAnsiTextLine(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx);return}renderGraphemes(buffer,splitGraphemes(text),x,y,baseStyle,maxCol,inheritedBg,ctx)}function renderTextLineReturn(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx,minCol){if(hasAnsi(text))return renderAnsiTextLineReturn(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx,minCol);return renderGraphemes(buffer,splitGraphemes(text),x,y,baseStyle,maxCol,inheritedBg,ctx,minCol)}function renderGraphemes(buffer,graphemes,startCol,y,style2,maxCol,inheritedBg,ctx,minCol){let col=startCol,rightEdge=maxCol!==void 0?Math.min(maxCol,buffer.width):buffer.width,leftEdge=minCol!==void 0?Math.max(minCol,0):0,gWidthFn=ctx?ctx.measurer.graphemeWidth:graphemeWidth;for(let grapheme of graphemes){if(col>=rightEdge)break;let width=gWidthFn(grapheme);if(width===0)continue;if(col+width<=leftEdge){col+=width;continue}if(col<leftEdge){col=leftEdge;continue}let existingBg=style2.bg!==null?style2.bg:inheritedBg!==void 0?inheritedBg:buffer.getCellBg(col,y);if(width===2&&col+1>=rightEdge){buffer.setCell(col,y,{char:" ",fg:style2.fg,bg:existingBg,underlineColor:style2.underlineColor??null,attrs:style2.attrs,wide:!1,continuation:!1,hyperlink:style2.hyperlink}),col+=1;continue}let outputChar=width===2?ensureEmojiPresentation(grapheme):grapheme;if(buffer.setCell(col,y,{char:outputChar,fg:style2.fg,bg:existingBg,underlineColor:style2.underlineColor??null,attrs:style2.attrs,wide:width===2,continuation:!1,hyperlink:style2.hyperlink}),width===2&&col+1<buffer.width){let existingBg2=style2.bg!==null?style2.bg:inheritedBg!==void 0?inheritedBg:buffer.getCellBg(col+1,y);buffer.setCell(col+1,y,{char:"",fg:style2.fg,bg:existingBg2,underlineColor:style2.underlineColor??null,attrs:style2.attrs,wide:!1,continuation:!0,hyperlink:style2.hyperlink}),col+=2}else col+=width}return col}function renderAnsiTextLine(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx){renderAnsiTextLineReturn(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx)}function renderAnsiTextLineReturn(buffer,x,y,text,baseStyle,maxCol,inheritedBg,ctx,minCol){let segments=parseAnsiText(text),col=x;for(let segment of segments){let style2=mergeAnsiStyle(baseStyle,segment),effectiveBgConflictMode=ctx?.bgConflictMode??getBgConflictMode();if(effectiveBgConflictMode!=="ignore"&&!segment.bgOverride&&segment.bg!==void 0&&segment.bg!==null){let existingBufBg=col<buffer.width?buffer.getCellBg(col,y):null;if(baseStyle.bg!==null||existingBufBg!==null){let preview=segment.text.slice(0,30),chalkBg=formatBgConflictColor(segment.bg),silveryBg=baseStyle.bg!==null?`Text.bg=${formatBgConflictColor(baseStyle.bg)}`:`bufferBg=${formatBgConflictColor(existingBufBg)}`,textPreview=text.length>80?text.slice(0,80)+"…":text,msg=`[silvery] Background conflict at (${col},${y}): chalk bg=${chalkBg} on silvery ${silveryBg}. Text: "${preview}${segment.text.length>30?"…":""}". Raw ANSI (first 80): ${JSON.stringify(textPreview)}. Chalk bg will override only text characters, causing visual gaps in padding. Use ansi.bgOverride() to suppress if intentional.`;if(effectiveBgConflictMode==="throw")throw Error(msg);let effectiveWarnedBgConflicts=ctx?.warnedBgConflicts??warnedBgConflicts,key=`${JSON.stringify(existingBufBg)}-${segment.bg}-${preview}`;if(!effectiveWarnedBgConflicts.has(key))effectiveWarnedBgConflicts.add(key),log6.warn?.(msg)}}col=renderGraphemes(buffer,splitGraphemes(segment.text),col,y,style2,maxCol,inheritedBg,ctx,minCol)}return col}function mergeStyles(base,overlay,options={}){let{preserveDecorations=!0,preserveEmphasis=!0}=options,baseAttrs=base.attrs??{},overlayAttrs=overlay.attrs??{},attrs={};if(preserveDecorations){let hasBaseUnderline=baseAttrs.underline||baseAttrs.underlineStyle,hasOverlayUnderline=overlayAttrs.underline||overlayAttrs.underlineStyle;if(hasBaseUnderline||hasOverlayUnderline)attrs.underline=!0,attrs.underlineStyle=overlayAttrs.underlineStyle??baseAttrs.underlineStyle??"single";attrs.strikethrough=overlayAttrs.strikethrough||baseAttrs.strikethrough}else attrs.underline=overlayAttrs.underline??baseAttrs.underline,attrs.underlineStyle=overlayAttrs.underlineStyle??baseAttrs.underlineStyle,attrs.strikethrough=overlayAttrs.strikethrough??baseAttrs.strikethrough;if(preserveEmphasis)attrs.bold=overlayAttrs.bold||baseAttrs.bold,attrs.dim=overlayAttrs.dim||baseAttrs.dim,attrs.italic=overlayAttrs.italic||baseAttrs.italic;else attrs.bold=overlayAttrs.bold??baseAttrs.bold,attrs.dim=overlayAttrs.dim??baseAttrs.dim,attrs.italic=overlayAttrs.italic??baseAttrs.italic;return attrs.inverse=overlayAttrs.inverse,attrs.hidden=overlayAttrs.hidden,attrs.blink=overlayAttrs.blink,{fg:overlay.fg??base.fg,bg:overlay.bg??base.bg,underlineColor:overlay.underlineColor??base.underlineColor,attrs}}function mergeAnsiStyle(base,segment,options={}){let{preserveDecorations=!0,preserveEmphasis=!0}=options,fg=base.fg,bg=base.bg,underlineColor2=base.underlineColor??null;if(segment.fg!==void 0&&segment.fg!==null)fg=ansiColorToColor(segment.fg);if(segment.bg!==void 0&&segment.bg!==null)bg=ansiColorToColor(segment.bg);if(segment.underlineColor!==void 0&&segment.underlineColor!==null)underlineColor2=ansiColorToColor(segment.underlineColor);let overlayAttrs={};if(segment.bold!==void 0)overlayAttrs.bold=segment.bold;if(segment.dim!==void 0)overlayAttrs.dim=segment.dim;if(segment.italic!==void 0)overlayAttrs.italic=segment.italic;if(segment.underline!==void 0)overlayAttrs.underline=segment.underline;if(segment.underlineStyle!==void 0)overlayAttrs.underlineStyle=segment.underlineStyle;if(segment.inverse!==void 0)overlayAttrs.inverse=segment.inverse;let merged=mergeStyles(base,{fg,bg,underlineColor:underlineColor2,attrs:overlayAttrs},{preserveDecorations,preserveEmphasis});if(segment.hyperlink)merged.hyperlink=segment.hyperlink;return merged}function ansiColorToColor(code){if(code>=16777216){let r=code>>16&255,g=code>>8&255,b=code&255;return{r,g,b}}if(code<30||code>=38&&code<40||code>=48&&code<90)return code;if(code>=30&&code<=37)return code-30;if(code>=40&&code<=47)return code-40;if(code>=90&&code<=97)return code-90+8;if(code>=100&&code<=107)return code-100+8;return null}function renderText(node,buffer,layout,props,nodeState,inheritedBg,inheritedFg,ctx){let{scrollOffset,clipBounds}=nodeState,{x,width,height}=layout,{y}=layout;if(y-=scrollOffset,props.backgroundColor==="")inheritedBg=null;if(clipBounds){if(y+height<=clipBounds.top||y>=clipBounds.bottom)return;if(clipBounds.left!==void 0&&clipBounds.right!==void 0){if(x+width<=clipBounds.left||x>=clipBounds.right)return}}let maxDisplayWidth;if((props.wrap===!1||props.wrap==="truncate-end"||props.wrap==="truncate"||props.wrap==="clip")&&width>0){let cachedPlain=getCachedPlainText(node),lineCount;if(cachedPlain)lineCount=cachedPlain.lineCount;else{let plainText=collectPlainText(node);lineCount=(plainText.match(/\n/g)?.length??0)+1,setCachedPlainText(node,plainText,lineCount)}maxDisplayWidth=(width+1)*lineCount}let text,bgSegments,childSpans,cachedCollected=getCachedCollectedText(node,maxDisplayWidth);if(cachedCollected)text=cachedCollected.text,bgSegments=cachedCollected.bgSegments,childSpans=cachedCollected.childSpans;else{let collected=collectTextWithBg(node,{},0,maxDisplayWidth,ctx);text=collected.text,bgSegments=collected.bgSegments,childSpans=collected.childSpans,setCachedCollectedText(node,collected,maxDisplayWidth)}let style2=getTextStyle(props);if(style2.fg===null&&inheritedFg!==void 0)style2.fg=inheritedFg;let trim=!(style2.bg!==null||bgSegments.length>0||inheritedBg!==void 0&&inheritedBg!==null),internalTransform=props.internal_transform,lines,lineOffsets,cachedFmt=!internalTransform?getCachedFormat(node,width,props.wrap,trim):null;if(cachedFmt)lines=cachedFmt.lines,lineOffsets=cachedFmt.hasLineOffsets?cachedFmt.lineOffsets:[];else{if(lines=formatTextLines(text,width,props.wrap,ctx,trim),internalTransform)lines=lines.map((line,index)=>internalTransform(line,index));let needLineOffsets=bgSegments.length>0||childSpans.length>0;if(lineOffsets=needLineOffsets?mapLinesToCharOffsets(text,lines,ctx):[],!internalTransform)setCachedFormat(node,width,props.wrap,trim,lines,lineOffsets,needLineOffsets)}for(let lineIdx=0;lineIdx<lines.length&&lineIdx<height;lineIdx++){let lineY=y+lineIdx;if(clipBounds&&(lineY<clipBounds.top||lineY>=clipBounds.bottom))continue;let line=lines[lineIdx],layoutRight=internalTransform?buffer.width:x+width,maxCol=clipBounds&&"right"in clipBounds&&clipBounds.right!==void 0?Math.min(layoutRight,clipBounds.right):layoutRight,minCol=clipBounds&&"left"in clipBounds&&clipBounds.left!==void 0?clipBounds.left:void 0,endCol=renderTextLineReturn(buffer,x,lineY,line,style2,maxCol,inheritedBg,ctx,minCol),clearStart=minCol!==void 0?Math.max(endCol,minCol):endCol;if(clearStart<maxCol){let clearBg=inheritedBg??null;for(let cx=clearStart;cx<maxCol&&cx<buffer.width;cx++)buffer.setCell(cx,lineY,{char:" ",fg:style2.fg,bg:clearBg,underlineColor:null,attrs:{bold:!1,dim:!1,italic:!1,underline:!1,inverse:!1,strikethrough:!1,blink:!1,hidden:!1},wide:!1,continuation:!1})}if(bgSegments.length>0&&lineIdx<lineOffsets.length){let{start,end}=lineOffsets[lineIdx];applyBgSegmentsToLine(buffer,x,lineY,line,start,end,bgSegments,ctx)}}if(childSpans.length>0&&lineOffsets.length>0)computeInlineRects(childSpans,lineOffsets,x,y,lines.length,height)}function computeInlineRects(childSpans,lineOffsets,parentX,parentY,lineCount,maxHeight){for(let span of childSpans){let rects=[];for(let lineIdx=0;lineIdx<lineCount&&lineIdx<maxHeight;lineIdx++){let lineOffset=lineOffsets[lineIdx];if(!lineOffset)continue;let overlapStart=Math.max(span.start,lineOffset.start),overlapEnd=Math.min(span.end,lineOffset.end);if(overlapStart>=overlapEnd)continue;let rectX=parentX+(overlapStart-lineOffset.start),rectY=parentY+lineIdx,rectWidth=overlapEnd-overlapStart;rects.push({x:rectX,y:rectY,width:rectWidth,height:1})}span.node.inlineRects=rects.length>0?rects:null}}var log6,bgConflictMode,warnedBgConflicts;var init_render_text=__esm(()=>{init_buffer();init_unicode();init_render_helpers();init_prepared_text();init_pretext();log6=createLogger6("silvery:content"),bgConflictMode=(()=>{let env=typeof process<"u"?process.env.SILVERY_BG_CONFLICT?.toLowerCase():void 0;if(env==="ignore"||env==="warn"||env==="throw")return env;return"throw"})();warnedBgConflicts=new Set});function getEffectiveBg(props){if(props.backgroundColor)return props.backgroundColor;if(props.theme)return props.theme.bg;return}function renderBox(_node,buffer,layout,props,nodeState,skipBgFill=!1,inheritedBg,bgOnlyChange=!1){let{scrollOffset,clipBounds}=nodeState,{x,width,height}=layout,y=layout.y-scrollOffset;if(clipBounds){if(y+height<=clipBounds.top||y>=clipBounds.bottom)return;if(clipBounds.left!==void 0&&clipBounds.right!==void 0){if(x+width<=clipBounds.left||x>=clipBounds.right)return}}let effectiveBgStr=getEffectiveBg(props);if(effectiveBgStr&&!skipBgFill){let bg=parseColor(effectiveBgStr);if(clipBounds){let clippedY=Math.max(y,clipBounds.top),clippedHeight=Math.min(y+height,clipBounds.bottom)-clippedY,clippedX=x,clippedWidth=width;if(clipBounds.left!==void 0&&clipBounds.right!==void 0)clippedX=Math.max(x,clipBounds.left),clippedWidth=Math.min(x+width,clipBounds.right)-clippedX;if(clippedHeight>0&&clippedWidth>0)if(bgOnlyChange)buffer.fillBg(clippedX,clippedY,clippedWidth,clippedHeight,bg);else buffer.fill(clippedX,clippedY,clippedWidth,clippedHeight,{bg})}else if(bgOnlyChange)buffer.fillBg(x,y,width,height,bg);else buffer.fill(x,y,width,height,{bg})}if(props.borderStyle)renderBorder(buffer,x,y,width,height,props,clipBounds,inheritedBg)}function renderBorder(buffer,x,y,width,height,props,clipBounds,inheritedBg){let chars=getBorderChars(props.borderStyle??"single"),color=props.borderColor?parseColor(props.borderColor):null,baseBg=props.backgroundColor?parseColor(props.backgroundColor):inheritedBg??null,borderBgStr=props.borderBackgroundColor,borderBgBase=borderBgStr?parseColor(borderBgStr):baseBg,topBorderBgStr=props.borderTopBackgroundColor,bottomBorderBgStr=props.borderBottomBackgroundColor,leftBorderBgStr=props.borderLeftBackgroundColor,rightBorderBgStr=props.borderRightBackgroundColor,topBg=topBorderBgStr?parseColor(topBorderBgStr):borderBgBase,bottomBg=bottomBorderBgStr?parseColor(bottomBorderBgStr):borderBgBase,leftBg=leftBorderBgStr?parseColor(leftBorderBgStr):borderBgBase,rightBg=rightBorderBgStr?parseColor(rightBorderBgStr):borderBgBase,showTop=props.borderTop!==!1,showBottom=props.borderBottom!==!1,showLeft=props.borderLeft!==!1,showRight=props.borderRight!==!1,isRowVisible=(row)=>{if(!clipBounds)return row>=0&&row<buffer.height;return row>=clipBounds.top&&row<clipBounds.bottom&&row<buffer.height},isColVisible=(col)=>{if(clipBounds?.left===void 0||clipBounds.right===void 0)return col>=0&&col<buffer.width;return col>=clipBounds.left&&col<clipBounds.right&&col<buffer.width};if(showTop&&isRowVisible(y)){if(showLeft&&isColVisible(x))buffer.setCell(x,y,{char:chars.topLeft,fg:color,bg:topBg});let hStart=showLeft?x+1:x,hEnd=showRight?x+width-1:x+width;for(let col=hStart;col<hEnd&&col<buffer.width;col++)if(isColVisible(col))buffer.setCell(col,y,{char:chars.horizontal,fg:color,bg:topBg});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,y,{char:chars.topRight,fg:color,bg:topBg})}let rightVertical=chars.rightVertical??chars.vertical,sideStart=showTop?y+1:y,sideEnd=showBottom?y+height-1:y+height;for(let row=sideStart;row<sideEnd;row++){if(!isRowVisible(row))continue;if(showLeft&&isColVisible(x))buffer.setCell(x,row,{char:chars.vertical,fg:color,bg:leftBg});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,row,{char:rightVertical,fg:color,bg:rightBg})}let bottomHorizontal=chars.bottomHorizontal??chars.horizontal,bottomY=y+height-1;if(showBottom&&isRowVisible(bottomY)){if(showLeft&&isColVisible(x))buffer.setCell(x,bottomY,{char:chars.bottomLeft,fg:color,bg:bottomBg});let bStart=showLeft?x+1:x,bEnd=showRight?x+width-1:x+width;for(let col=bStart;col<bEnd&&col<buffer.width;col++)if(isColVisible(col))buffer.setCell(col,bottomY,{char:bottomHorizontal,fg:color,bg:bottomBg});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,bottomY,{char:chars.bottomRight,fg:color,bg:bottomBg})}}function renderOutline(buffer,x,y,width,height,props,clipBounds,inheritedBg){let chars=getBorderChars(props.outlineStyle??"single"),color=props.outlineColor?parseColor(props.outlineColor):null,bg=props.backgroundColor?parseColor(props.backgroundColor):inheritedBg??null,attrs=props.outlineDimColor?{dim:!0}:{},isRowVisible=(row)=>{if(!clipBounds)return row>=0&&row<buffer.height;return row>=clipBounds.top&&row<clipBounds.bottom&&row<buffer.height},isColVisible=(col)=>{if(clipBounds?.left===void 0||clipBounds.right===void 0)return col>=0&&col<buffer.width;return col>=clipBounds.left&&col<clipBounds.right&&col<buffer.width},showTop=props.outlineTop!==!1,showBottom=props.outlineBottom!==!1,showLeft=props.outlineLeft!==!1,showRight=props.outlineRight!==!1;if(showTop&&isRowVisible(y)){if(showLeft&&isColVisible(x))buffer.setCell(x,y,{char:chars.topLeft,fg:color,bg,attrs});for(let col=x+1;col<x+width-1&&col<buffer.width;col++)if(isColVisible(col))buffer.setCell(col,y,{char:chars.horizontal,fg:color,bg,attrs});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,y,{char:chars.topRight,fg:color,bg,attrs})}let outlineRightVertical=chars.rightVertical??chars.vertical,sideStart=showTop?y+1:y,sideEnd=showBottom?y+height-1:y+height;for(let row=sideStart;row<sideEnd;row++){if(!isRowVisible(row))continue;if(showLeft&&isColVisible(x))buffer.setCell(x,row,{char:chars.vertical,fg:color,bg,attrs});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,row,{char:outlineRightVertical,fg:color,bg,attrs})}let outlineBottomHorizontal=chars.bottomHorizontal??chars.horizontal,bottomY=y+height-1;if(showBottom&&isRowVisible(bottomY)){if(showLeft&&isColVisible(x))buffer.setCell(x,bottomY,{char:chars.bottomLeft,fg:color,bg,attrs});for(let col=x+1;col<x+width-1&&col<buffer.width;col++)if(isColVisible(col))buffer.setCell(col,bottomY,{char:outlineBottomHorizontal,fg:color,bg,attrs});if(showRight&&x+width-1<buffer.width&&isColVisible(x+width-1))buffer.setCell(x+width-1,bottomY,{char:chars.bottomRight,fg:color,bg,attrs})}}function renderScrollIndicators(_node,buffer,layout,props,ss,ctx){let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},indicatorStyle={fg:15,bg:8,attrs:{}},showBorderless=props.overflowIndicator===!0;if(ss.hiddenAbove>0){let indicator=`▲${ss.hiddenAbove}`;if(border.top>0){let contentWidth=layout.width-border.left-border.right,bar=padCenter(indicator,contentWidth),x=layout.x+border.left,y=layout.y,maxCol=x+contentWidth;renderTextLine(buffer,x,y,bar,indicatorStyle,maxCol,void 0,ctx)}else if(showBorderless){let padding=getPadding(props),contentWidth=layout.width-padding.left-padding.right,bar=padCenter(indicator,contentWidth),x=layout.x+padding.left,y=layout.y+padding.top,maxCol=x+contentWidth;renderTextLine(buffer,x,y,bar,indicatorStyle,maxCol,void 0,ctx)}}if(ss.hiddenBelow>0){let indicator=`▼${ss.hiddenBelow}`;if(border.bottom>0){let contentWidth=layout.width-border.left-border.right,bar=padCenter(indicator,contentWidth),x=layout.x+border.left,y=layout.y+layout.height-1,maxCol=x+contentWidth;renderTextLine(buffer,x,y,bar,indicatorStyle,maxCol,void 0,ctx)}else if(showBorderless){let padding=getPadding(props),contentWidth=layout.width-padding.left-padding.right,bar=padCenter(indicator,contentWidth),x=layout.x+padding.left,y=layout.y+layout.height-padding.bottom-1,maxCol=x+contentWidth;renderTextLine(buffer,x,y,bar,indicatorStyle,maxCol,void 0,ctx)}}}function padCenter(text,width){if(width<=0)return"";if(text.length>width)return text.slice(0,width);if(text.length===width)return text;let leftPad=Math.floor((width-text.length)/2),rightPad=width-text.length-leftPad;return" ".repeat(leftPad)+text+" ".repeat(rightPad)}var init_render_box=__esm(()=>{init_helpers();init_render_helpers();init_render_text()});function computeCascade(inputs){let{hasPrevBuffer,contentDirty,stylePropsDirty,layoutChanged,subtreeDirty,childrenDirty,childPositionChanged,ancestorLayoutChanged,ancestorCleared,bgDirty,isTextNode,hasBgColor,absoluteChildMutated,descendantOverflowChanged}=inputs,canSkipEntireSubtree=hasPrevBuffer&&!contentDirty&&!stylePropsDirty&&!layoutChanged&&!subtreeDirty&&!childrenDirty&&!childPositionChanged&&!ancestorLayoutChanged,textPaintDirty=isTextNode&&stylePropsDirty,contentAreaAffected=contentDirty||layoutChanged||childPositionChanged||childrenDirty||bgDirty||textPaintDirty||absoluteChildMutated||descendantOverflowChanged,bgOnlyAffected=bgDirty&&!contentDirty&&!layoutChanged&&!childPositionChanged&&!childrenDirty&&!textPaintDirty&&!absoluteChildMutated&&!descendantOverflowChanged,bgOnlyChange=!1,bgRefillNeeded=hasPrevBuffer&&!contentAreaAffected&&subtreeDirty&&hasBgColor;return{canSkipEntireSubtree,contentAreaAffected,bgRefillNeeded,contentRegionCleared:(hasPrevBuffer||ancestorCleared)&&contentAreaAffected&&!hasBgColor,skipBgFill:hasPrevBuffer&&!ancestorCleared&&!contentAreaAffected&&!bgRefillNeeded,childrenNeedFreshRender:(hasPrevBuffer||ancestorCleared)&&(contentAreaAffected||bgRefillNeeded)&&!0,bgOnlyChange:!1}}function createReactiveSystem({update,notify,unwatched}){return{link,unlink,propagate,checkDirty,shallowPropagate};function link(dep,sub,version){let prevDep=sub.depsTail;if(prevDep!==void 0&&prevDep.dep===dep)return;let nextDep=prevDep!==void 0?prevDep.nextDep:sub.deps;if(nextDep!==void 0&&nextDep.dep===dep){nextDep.version=version,sub.depsTail=nextDep;return}let prevSub=dep.subsTail;if(prevSub!==void 0&&prevSub.version===version&&prevSub.sub===sub)return;let newLink=sub.depsTail=dep.subsTail={version,dep,sub,prevDep,nextDep,prevSub,nextSub:void 0};if(nextDep!==void 0)nextDep.prevDep=newLink;if(prevDep!==void 0)prevDep.nextDep=newLink;else sub.deps=newLink;if(prevSub!==void 0)prevSub.nextSub=newLink;else dep.subs=newLink}function unlink(link2,sub=link2.sub){let{dep,prevDep,nextDep,nextSub,prevSub}=link2;if(nextDep!==void 0)nextDep.prevDep=prevDep;else sub.depsTail=prevDep;if(prevDep!==void 0)prevDep.nextDep=nextDep;else sub.deps=nextDep;if(nextSub!==void 0)nextSub.prevSub=prevSub;else dep.subsTail=prevSub;if(prevSub!==void 0)prevSub.nextSub=nextSub;else if((dep.subs=nextSub)===void 0)unwatched(dep);return nextDep}function propagate(link2){let next=link2.nextSub,stack;top:do{let sub=link2.sub,flags=sub.flags;if(!(flags&60))sub.flags=flags|32;else if(!(flags&12))flags=0;else if(!(flags&4))sub.flags=flags&-9|32;else if(!(flags&48)&&isValidLink(link2,sub))sub.flags=flags|40,flags&=1;else flags=0;if(flags&2)notify(sub);if(flags&1){let subSubs=sub.subs;if(subSubs!==void 0){let nextSub=(link2=subSubs).nextSub;if(nextSub!==void 0)stack={value:next,prev:stack},next=nextSub;continue}}if((link2=next)!==void 0){next=link2.nextSub;continue}while(stack!==void 0)if(link2=stack.value,stack=stack.prev,link2!==void 0){next=link2.nextSub;continue top}break}while(!0)}function checkDirty(link2,sub){let stack,checkDepth=0,dirty=!1;top:do{let dep=link2.dep,flags=dep.flags;if(sub.flags&16)dirty=!0;else if((flags&17)===17){if(update(dep)){let subs=dep.subs;if(subs.nextSub!==void 0)shallowPropagate(subs);dirty=!0}}else if((flags&33)===33){if(link2.nextSub!==void 0||link2.prevSub!==void 0)stack={value:link2,prev:stack};link2=dep.deps,sub=dep,++checkDepth;continue}if(!dirty){let nextDep=link2.nextDep;if(nextDep!==void 0){link2=nextDep;continue}}while(checkDepth--){let firstSub=sub.subs,hasMultipleSubs=firstSub.nextSub!==void 0;if(hasMultipleSubs)link2=stack.value,stack=stack.prev;else link2=firstSub;if(dirty){if(update(sub)){if(hasMultipleSubs)shallowPropagate(firstSub);sub=link2.sub;continue}dirty=!1}else sub.flags&=-33;sub=link2.sub;let nextDep=link2.nextDep;if(nextDep!==void 0){link2=nextDep;continue top}}return dirty}while(!0)}function shallowPropagate(link2){do{let sub=link2.sub,flags=sub.flags;if((flags&48)===32){if(sub.flags=flags|16,(flags&6)===2)notify(sub)}}while((link2=link2.nextSub)!==void 0)}function isValidLink(checkLink,sub){let link2=sub.depsTail;while(link2!==void 0){if(link2===checkLink)return!0;link2=link2.prevDep}return!1}}var init_system=()=>{};function setActiveSub(sub){let prevSub=activeSub;return activeSub=sub,prevSub}function signal(initialValue){return signalOper.bind({currentValue:initialValue,pendingValue:initialValue,subs:void 0,subsTail:void 0,flags:1})}function computed(getter){return computedOper.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter})}function updateComputed(c){++cycle,c.depsTail=void 0,c.flags=5;let prevSub=setActiveSub(c);try{let oldValue=c.value;return oldValue!==(c.value=c.getter(oldValue))}finally{activeSub=prevSub,c.flags&=-5,purgeDeps(c)}}function updateSignal(s){return s.flags=1,s.currentValue!==(s.currentValue=s.pendingValue)}function run(e){let flags=e.flags;if(flags&16||flags&32&&checkDirty(e.deps,e)){++cycle,e.depsTail=void 0,e.flags=6;let prevSub=setActiveSub(e);try{e.fn()}finally{activeSub=prevSub,e.flags&=-5,purgeDeps(e)}}else e.flags=2}function flush(){try{while(notifyIndex<queuedLength){let effect=queued[notifyIndex];queued[notifyIndex++]=void 0,run(effect)}}finally{while(notifyIndex<queuedLength){let effect=queued[notifyIndex];queued[notifyIndex++]=void 0,effect.flags|=10}notifyIndex=0,queuedLength=0}}function computedOper(){let flags=this.flags;if(flags&16||flags&32&&(checkDirty(this.deps,this)||(this.flags=flags&-33,!1))){if(updateComputed(this)){let subs=this.subs;if(subs!==void 0)shallowPropagate(subs)}}else if(!flags){this.flags=5;let prevSub=setActiveSub(this);try{this.value=this.getter()}finally{activeSub=prevSub,this.flags&=-5}}let sub=activeSub;if(sub!==void 0)link(this,sub,cycle);return this.value}function signalOper(...value){if(value.length){if(this.pendingValue!==(this.pendingValue=value[0])){this.flags=17;let subs=this.subs;if(subs!==void 0){if(propagate(subs),!batchDepth)flush()}}}else{if(this.flags&16){if(updateSignal(this)){let subs=this.subs;if(subs!==void 0)shallowPropagate(subs)}}let sub=activeSub;while(sub!==void 0){if(sub.flags&3){link(this,sub,cycle);break}sub=sub.subs?.sub}return this.currentValue}}function effectScopeOper(){this.depsTail=void 0,this.flags=0,purgeDeps(this);let sub=this.subs;if(sub!==void 0)unlink(sub)}function purgeDeps(sub){let depsTail=sub.depsTail,dep=depsTail!==void 0?depsTail.nextDep:sub.deps;while(dep!==void 0)dep=unlink(dep,sub)}var cycle=0,batchDepth=0,notifyIndex=0,queuedLength=0,activeSub,queued,link,unlink,propagate,checkDirty,shallowPropagate;var init_esm=__esm(()=>{init_system();queued=[],{link,unlink,propagate,checkDirty,shallowPropagate}=createReactiveSystem({update(node){if(node.depsTail!==void 0)return updateComputed(node);else return updateSignal(node)},notify(effect){let insertIndex=queuedLength,firstInsertedIndex=insertIndex;do if(queued[insertIndex++]=effect,effect.flags&=-3,effect=effect.subs?.sub,effect===void 0||!(effect.flags&2))break;while(!0);queuedLength=insertIndex;while(firstInsertedIndex<--insertIndex){let left=queued[firstInsertedIndex];queued[firstInsertedIndex++]=queued[insertIndex],queued[insertIndex]=left}},unwatched(node){if(!(node.flags&1))effectScopeOper.call(node);else if(node.depsTail!==void 0)node.depsTail=void 0,node.flags=17,purgeDeps(node)}})});var init_src3=__esm(()=>{init_esm();init_esm()});function createReactiveNodeState(){let contentDirty=signal(!1),stylePropsDirty=signal(!1),bgDirty=signal(!1),childrenDirty=signal(!1),subtreeDirty=signal(!1),layoutChanged=signal(!1),hasPrevBuffer=signal(!1),childPositionChanged=signal(!1),ancestorLayoutChanged=signal(!1),ancestorCleared=signal(!1),isTextNode=signal(!1),hasBgColor=signal(!1),absoluteChildMutated=signal(!1),descendantOverflowChanged=signal(!1),canSkipEntireSubtree=computed(()=>hasPrevBuffer()&&!contentDirty()&&!stylePropsDirty()&&!layoutChanged()&&!subtreeDirty()&&!childrenDirty()&&!childPositionChanged()&&!ancestorLayoutChanged()),textPaintDirty=computed(()=>isTextNode()&&stylePropsDirty()),contentAreaAffected=computed(()=>contentDirty()||layoutChanged()||childPositionChanged()||childrenDirty()||bgDirty()||textPaintDirty()||absoluteChildMutated()||descendantOverflowChanged()),bgOnlyChange=computed(()=>!1),bgRefillNeeded=computed(()=>hasPrevBuffer()&&!contentAreaAffected()&&subtreeDirty()&&hasBgColor()),contentRegionCleared=computed(()=>(hasPrevBuffer()||ancestorCleared())&&contentAreaAffected()&&!hasBgColor()),skipBgFill=computed(()=>hasPrevBuffer()&&!ancestorCleared()&&!contentAreaAffected()&&!bgRefillNeeded()),childrenNeedFreshRender=computed(()=>(hasPrevBuffer()||ancestorCleared())&&(contentAreaAffected()||bgRefillNeeded())&&!bgOnlyChange());return{contentDirty,stylePropsDirty,bgDirty,childrenDirty,subtreeDirty,layoutChanged,hasPrevBuffer,childPositionChanged,ancestorLayoutChanged,ancestorCleared,isTextNode,hasBgColor,absoluteChildMutated,descendantOverflowChanged,canSkipEntireSubtree,textPaintDirty,contentAreaAffected,bgRefillNeeded,contentRegionCleared,skipBgFill,childrenNeedFreshRender,bgOnlyChange}}function syncToSignals(state,node,ctx){state.contentDirty(isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)),state.stylePropsDirty(isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)),state.bgDirty(isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT)),state.childrenDirty(isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)),state.subtreeDirty(isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)),state.layoutChanged(ctx.layoutChanged),state.hasPrevBuffer(ctx.hasPrevBuffer),state.childPositionChanged(ctx.childPositionChanged),state.ancestorLayoutChanged(ctx.ancestorLayoutChanged),state.ancestorCleared(ctx.ancestorCleared),state.isTextNode(node.type==="silvery-text"),state.hasBgColor(ctx.hasBgColor),state.absoluteChildMutated(ctx.absoluteChildMutated),state.descendantOverflowChanged(ctx.descendantOverflowChanged)}function readReactiveCascade(state){return{canSkipEntireSubtree:state.canSkipEntireSubtree(),contentAreaAffected:state.contentAreaAffected(),bgRefillNeeded:state.bgRefillNeeded(),contentRegionCleared:state.contentRegionCleared(),skipBgFill:state.skipBgFill(),childrenNeedFreshRender:state.childrenNeedFreshRender(),bgOnlyChange:state.bgOnlyChange()}}function assertReactiveMatchesOracle(state,oracle,nodeId){let fields=["canSkipEntireSubtree","contentAreaAffected","bgRefillNeeded","contentRegionCleared","skipBgFill","childrenNeedFreshRender","bgOnlyChange"],mismatches=[];for(let field of fields){let reactiveValue=state[field](),oracleValue=oracle[field];if(reactiveValue!==oracleValue)mismatches.push(` ${field}: reactive=${reactiveValue}, oracle=${oracleValue}`)}if(mismatches.length>0)throw Error(`ReactiveNodeState mismatch for ${nodeId||"(unnamed)"}:
70
70
  ${mismatches.join(`
71
- `)}`)}function getReactiveState(node){let state=nodeStates.get(node);if(!state)state=createReactiveNodeState(),nodeStates.set(node,state);return state}var nodeStates;var init_reactive_node=__esm(()=>{init_src3();nodeStates=new WeakMap});import{createLogger as createLogger7}from"loggily";function renderPhase(root,prevBuffer,ctx){let layout=root.boxRect;if(!layout)throw Error("renderPhase called before layout phase");let instr=resolveInstrumentation(ctx),hasPrevBuffer=prevBuffer&&prevBuffer.width===layout.width&&prevBuffer.height===layout.height;if(instr.enabled)instr.stats._prevBufferNull=prevBuffer==null?1:0,instr.stats._prevBufferDimMismatch=prevBuffer&&!hasPrevBuffer?1:0,instr.stats._hasPrevBuffer=hasPrevBuffer?1:0,instr.stats._layoutW=layout.width,instr.stats._layoutH=layout.height,instr.stats._prevW=prevBuffer?.width??0,instr.stats._prevH=prevBuffer?.height??0;let t0=instr.enabled?performance.now():0,buffer=hasPrevBuffer?prevBuffer.clone():new TerminalBuffer(layout.width,layout.height),tClone=instr.enabled?performance.now()-t0:0;buffer.setSelectableMode(!0);let t1=instr.enabled?performance.now():0;renderNodeToBuffer(root,buffer,{scrollOffset:0,clipBounds:void 0,hasPrevBuffer:!!hasPrevBuffer,ancestorCleared:!1,bufferIsCloned:!!hasPrevBuffer,ancestorLayoutChanged:!1,inheritedBg:{color:null,ancestorRect:null},inheritedFg:null},ctx);let tRender=instr.enabled?performance.now()-t1:0;if(instr.enabled)emitRenderPhaseStats(instr.stats,instr.nodeTrace,instr.nodeTraceEnabled,tClone,tRender);return syncPrevLayout(root),advanceRenderEpoch(),buffer}function syncPrevLayout(root){let stack=[root];while(stack.length>0){let node=stack.pop();node.prevLayout=node.boxRect;let children=node.children;for(let i=children.length-1;i>=0;i--)stack.push(children[i])}}function envTruthy(val){return!!val&&val!=="0"&&val!=="false"}function resolveInstrumentation(ctx){return{enabled:ctx?.instrumentEnabled??_instrumentEnabled,stats:ctx?.stats??_renderPhaseStats,nodeTrace:ctx?.nodeTrace??_nodeTrace,nodeTraceEnabled:ctx?.nodeTraceEnabled??_nodeTraceEnabled}}function getCellDebug(){return globalThis.__silvery_cell_debug}function cellCoversPoint(cellDbg,x,y,width,height){return x<=cellDbg.x&&x+width>cellDbg.x&&y<=cellDbg.y&&y+height>cellDbg.y}function _getNodeDepth(node){let depth=0,n=node.parent;while(n)depth++,n=n.parent;return depth}function emitRenderPhaseStats(stats,nodeTrace,nodeTraceEnabled,tClone,tRender){_renderPhaseCallCount++,stats._callCount=_renderPhaseCallCount;let snap={clone:tClone,render:tRender,...structuredClone(stats)};globalThis.__silvery_content_detail=snap,(globalThis.__silvery_content_all??=[]).push(snap),contentLog.debug?.(`frame ${snap._callCount}: ${snap.nodesRendered}/${snap.nodesVisited} rendered, ${snap.nodesSkipped} skipped (${tClone.toFixed(1)}ms clone, ${tRender.toFixed(1)}ms render)`);for(let key of Object.keys(stats))stats[key]=0;if(stats.cascadeMinDepth=999,stats.cascadeNodes="",stats.scrollClearReason="",stats.normalRepaintReason="",nodeTraceEnabled&&nodeTrace.length>0)(globalThis.__silvery_node_trace??=[]).push([...nodeTrace]),traceLog.debug?.(`${nodeTrace.length} nodes traced`),nodeTrace.length=0}function renderNodeToBuffer(node,buffer,nodeState,ctx){let{scrollOffset,clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged=!1}=nodeState,instr=resolveInstrumentation(ctx);if(instr.enabled)instr.stats.nodesVisited++;let layout=node.boxRect;if(!layout)return;if(!node.layoutNode){clearVirtualTextFlags(node);return}if(node.hidden){clearDirtyFlags(node);return}let props=node.props,prevSelectableMode=buffer.getSelectableMode(),userSelect=props.userSelect;if(userSelect==="none")buffer.setSelectableMode(!1);else if(userSelect==="text"||userSelect==="contain")buffer.setSelectableMode(!0);if(props.display==="none"){clearDirtyFlags(node),buffer.setSelectableMode(prevSelectableMode);return}let screenY=layout.y-scrollOffset;if(screenY>=buffer.height||screenY+layout.height<=0){buffer.setSelectableMode(prevSelectableMode);return}let layoutChanged=isCurrentEpoch(node.layoutChangedThisFrame),childPositionChanged=!!(hasPrevBuffer&&!layoutChanged&&hasChildPositionChanged(node)),scrollOffsetChanged=!!(node.scrollState&&node.scrollState.offset!==node.scrollState.prevOffset),canSkipEntireSubtree=hasPrevBuffer&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&!isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&!layoutChanged&&!isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&!isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&!childPositionChanged&&!ancestorLayoutChanged&&!scrollOffsetChanged,_nodeId=instr.enabled?props.id??"":"",_traceThis=instr.enabled&&instr.nodeTraceEnabled&&_nodeId,_cellDbg=getCellDebug(),_coversCellNow=_cellDbg&&cellCoversPoint(_cellDbg,layout.x,screenY,layout.width,layout.height),_coversCellPrev=_cellDbg&&node.prevLayout&&cellCoversPoint(_cellDbg,node.prevLayout.x,node.prevLayout.y-scrollOffset,node.prevLayout.width,node.prevLayout.height);if(canSkipEntireSubtree){if(_cellDbg&&(_coversCellNow||_coversCellPrev)){let id=props.id??node.type,depth=_getNodeDepth(node),prev=node.prevLayout,msg=`SKIP ${id}@${depth} rect=${layout.x},${screenY} ${layout.width}x${layout.height} prev=${prev?`${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height}`:"null"} coversNow=${_coversCellNow} coversPrev=${_coversCellPrev}`;_cellDbg.log.push(msg),cellLog.debug?.(msg)}if(instr.enabled){if(instr.stats.nodesSkipped++,_traceThis)instr.nodeTrace.push({id:_nodeId,type:node.type,depth:_getNodeDepth(node),rect:`${layout.x},${layout.y} ${layout.width}x${layout.height}`,prevLayout:node.prevLayout?`${node.prevLayout.x},${node.prevLayout.y} ${node.prevLayout.width}x${node.prevLayout.height}`:"null",hasPrev:hasPrevBuffer,ancestorCleared,flags:"",decision:"SKIPPED",layoutChanged})}clearDirtyFlags(node),buffer.setSelectableMode(prevSelectableMode);return}if(instr.enabled){if(instr.stats.nodesRendered++,!hasPrevBuffer)instr.stats.noPrevBuffer++;if(isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))instr.stats.flagContentDirty++;if(isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT))instr.stats.flagStylePropsDirty++;if(layoutChanged)instr.stats.flagLayoutChanged++;if(isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT))instr.stats.flagSubtreeDirty++;if(isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT))instr.stats.flagChildrenDirty++;if(childPositionChanged)instr.stats.flagChildPositionChanged++;if(ancestorLayoutChanged)instr.stats.flagAncestorLayoutChanged++}let nodeTheme=props.theme;if(nodeTheme)pushContextTheme(nodeTheme);try{let isScrollContainer=props.overflow==="scroll"&&node.scrollState,{absoluteChildMutated,descendantOverflowChanged}=buildCascadeInputs(node,hasPrevBuffer),cascadeInputs={hasPrevBuffer,contentDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT),stylePropsDirty:isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT),layoutChanged,subtreeDirty:isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT),childrenDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT),childPositionChanged,ancestorLayoutChanged,ancestorCleared,bgDirty:isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT),isTextNode:node.type==="silvery-text",hasBgColor:!!getEffectiveBg(props),absoluteChildMutated,descendantOverflowChanged},cascade;if(_reactiveEnabled){let reactiveState=getReactiveState(node);if(syncToSignals(reactiveState,node,{hasPrevBuffer,layoutChanged,childPositionChanged,ancestorLayoutChanged,ancestorCleared,absoluteChildMutated,descendantOverflowChanged,hasBgColor:cascadeInputs.hasBgColor}),cascade=readReactiveCascade(reactiveState),_reactiveVerifyEnabled)assertReactiveMatchesOracle(reactiveState,computeCascade(cascadeInputs),props.id??node.type)}else cascade=computeCascade(cascadeInputs);if(cascade.bgOnlyChange&&hasDescendantWithBg(node)){let childrenNeedFreshRender2=(hasPrevBuffer||ancestorCleared)&&(cascade.contentAreaAffected||cascade.bgRefillNeeded);cascade={...cascade,bgOnlyChange:!1,childrenNeedFreshRender:childrenNeedFreshRender2}}let{contentRegionCleared,skipBgFill,childrenNeedFreshRender}=cascade;if(instr.enabled||_cellDbg&&(_coversCellNow||_coversCellPrev))traceRenderDecision(node,props,layout,screenY,scrollOffset,hasPrevBuffer,ancestorCleared,layoutChanged,childPositionChanged,cascade,_nodeId,_traceThis,_cellDbg,_coversCellNow,_coversCellPrev,instr.enabled,instr.stats,instr.nodeTrace);let useTextStyleFastPath=!1;executeRegionClearing(node,buffer,layout,scrollOffset,clipBounds,bufferIsCloned,layoutChanged,useTextStyleFastPath?!1:contentRegionCleared,descendantOverflowChanged,instr.enabled,instr.stats,nodeState.inheritedBg);let needsOwnRepaint=!hasPrevBuffer||ancestorCleared||ancestorLayoutChanged||cascade.contentAreaAffected||isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)||cascade.bgRefillNeeded,boxInheritedBg=node.type==="silvery-box"&&!getEffectiveBg(props)?nodeState.inheritedBg.color:void 0;if(needsOwnRepaint)renderOwnContent(node,buffer,layout,props,nodeState,skipBgFill,instr.enabled,instr.stats,ctx,cascade.bgOnlyChange,useTextStyleFastPath);let effectiveBg=getEffectiveBg(props),childInheritedBg=effectiveBg?{color:parseColor(effectiveBg),ancestorRect:node.boxRect}:nodeTheme?{color:parseColor(nodeTheme.bg),ancestorRect:node.boxRect}:nodeState.inheritedBg,childInheritedFg=props.color?parseColor(props.color):nodeTheme?parseColor(nodeTheme.fg):nodeState.inheritedFg,childState={...nodeState,inheritedBg:childInheritedBg,inheritedFg:childInheritedFg};if(isScrollContainer)renderScrollContainerChildren(node,buffer,props,childState,contentRegionCleared,childrenNeedFreshRender,ctx),renderScrollIndicators(node,buffer,layout,props,node.scrollState,ctx);else renderNormalChildren(node,buffer,props,childState,childPositionChanged,contentRegionCleared,childrenNeedFreshRender,ctx);if(node.type==="silvery-box"&&props.outlineStyle){let{x,width,height}=layout,y=layout.y-scrollOffset;renderOutline(buffer,x,y,width,height,props,clipBounds,boxInheritedBg)}clearNodeDirtyFlags(node)}finally{if(nodeTheme)popContextTheme();buffer.setSelectableMode(prevSelectableMode)}}function buildCascadeInputs(node,hasPrevBuffer){if(!hasPrevBuffer||!isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)||node.children===void 0)return{absoluteChildMutated:!1,descendantOverflowChanged:!1};return{absoluteChildMutated:isDirty(node.dirtyBits,node.dirtyEpoch,ABS_CHILD_BIT),descendantOverflowChanged:isDirty(node.dirtyBits,node.dirtyEpoch,DESC_OVERFLOW_BIT)}}function traceRenderDecision(node,props,layout,screenY,scrollOffset,hasPrevBuffer,ancestorCleared,layoutChanged,childPositionChanged,cascade,_nodeId,_traceThis,_cellDbg,_coversCellNow,_coversCellPrev,instrumentEnabled,stats,nodeTrace){let{contentAreaAffected,contentRegionCleared,skipBgFill,childrenNeedFreshRender}=cascade;if(instrumentEnabled){if(_traceThis){let flagStr=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT)&&"B",isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&"S",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",childPositionChanged&&"CP"].filter(Boolean).join(","),childHasPrev_=isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childPositionChanged||childrenNeedFreshRender?!1:hasPrevBuffer,childAncestorCleared_=contentRegionCleared||ancestorCleared&&!getEffectiveBg(props);nodeTrace.push({id:_nodeId,type:node.type,depth:_getNodeDepth(node),rect:`${layout.x},${layout.y} ${layout.width}x${layout.height}`,prevLayout:node.prevLayout?`${node.prevLayout.x},${node.prevLayout.y} ${node.prevLayout.width}x${node.prevLayout.height}`:"null",hasPrev:hasPrevBuffer,ancestorCleared,flags:flagStr,decision:"RENDER",layoutChanged,contentAreaAffected,contentRegionCleared,childrenNeedFreshRender,childHasPrev:childHasPrev_,childAncestorCleared:childAncestorCleared_,skipBgFill,bgColor:props.backgroundColor})}if(childrenNeedFreshRender&&node.children.length>0){let depth=_getNodeDepth(node);if(depth<stats.cascadeMinDepth)stats.cascadeMinDepth=depth;let id=node.props.id??node.type,flags=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",layoutChanged&&"L",childPositionChanged&&"CP"].filter(Boolean).join(""),entry=`${id}@${depth}[${flags}:${node.children.length}ch]`;stats.cascadeNodes+=(stats.cascadeNodes?" ":"")+entry}}if(_cellDbg&&(_coversCellNow||_coversCellPrev)){let id=props.id??node.type,depth=_getNodeDepth(node),prev=node.prevLayout,flags=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",layoutChanged&&"L",isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&"S",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",childPositionChanged&&"CP",isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT)&&"B"].filter(Boolean).join(","),msg=`RENDER ${id}@${depth} rect=${layout.x},${screenY} ${layout.width}x${layout.height} prev=${prev?`${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height}`:"null"} flags=[${flags}] hasPrev=${hasPrevBuffer} ancClr=${ancestorCleared} caa=${contentAreaAffected} prc=${contentRegionCleared} prm=${childrenNeedFreshRender} coversNow=${_coversCellNow} coversPrev=${_coversCellPrev} bg=${props.backgroundColor??"none"}`;_cellDbg.log.push(msg),cellLog.debug?.(msg)}}function executeRegionClearing(node,buffer,layout,scrollOffset,clipBounds,bufferIsCloned,layoutChanged,contentRegionCleared,descendantOverflowChanged,instrumentEnabled,stats,threadedInheritedBg){if(contentRegionCleared){if(instrumentEnabled)stats.clearOps++;clearNodeRegion(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg)}else if(bufferIsCloned&&layoutChanged&&node.prevLayout)clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg);if(descendantOverflowChanged)clearDescendantOverflowRegions(node,buffer,layout,scrollOffset,clipBounds,threadedInheritedBg)}function renderOwnContent(node,buffer,layout,props,nodeState,skipBgFill,instrumentEnabled,stats,ctx,bgOnlyChange=!1,useTextStyleFastPath=!1){let boxInheritedBg=node.type==="silvery-box"&&!getEffectiveBg(props)?nodeState.inheritedBg.color:void 0;if(node.type==="silvery-box"){if(instrumentEnabled)stats.boxNodes++;renderBox(node,buffer,layout,props,nodeState,skipBgFill,boxInheritedBg,bgOnlyChange)}else if(node.type==="silvery-text"){if(instrumentEnabled)stats.textNodes++;let textInheritedBg=nodeState.inheritedBg.color,textInheritedFg=nodeState.inheritedFg;if(useTextStyleFastPath){let style2=getTextStyle(props);if(style2.fg===null&&textInheritedFg!==void 0)style2.fg=textInheritedFg;let effectiveBg=style2.bg!==null?style2.bg:textInheritedBg??null,{x,width,height}=layout,y=layout.y-nodeState.scrollOffset;buffer.restyleRegion(x,y,width,height,{fg:style2.fg,bg:effectiveBg,underlineColor:style2.underlineColor??null,attrs:style2.attrs})}else renderText(node,buffer,layout,props,nodeState,textInheritedBg,textInheritedFg,ctx)}return boxInheritedBg}function planScrollRender(inputs){let{scrollOffsetChanged,visibleRangeChanged,hasStickyChildren,childrenNeedFreshRender,childrenDirty,hasPrevBuffer,ancestorCleared,contentRegionCleared,scrollBg}=inputs,scrollOnly=hasPrevBuffer&&scrollOffsetChanged&&!childrenDirty&&!childrenNeedFreshRender&&!hasStickyChildren&&!visibleRangeChanged,needsViewportClear=hasPrevBuffer&&!scrollOnly&&(scrollOffsetChanged||childrenDirty||childrenNeedFreshRender||visibleRangeChanged),stickyForceRefresh=hasStickyChildren&&hasPrevBuffer&&!needsViewportClear,reasons=[];if(scrollOnly)reasons.push("SHIFT");if(needsViewportClear){if(scrollOffsetChanged)reasons.push("scrollOffset");if(childrenDirty)reasons.push("childrenDirty");if(childrenNeedFreshRender)reasons.push("childrenNeedFreshRender");if(visibleRangeChanged)reasons.push("visibleRangeChanged")}if(stickyForceRefresh)reasons.push("stickyForceRefresh");return{tier:scrollOnly?"shift":needsViewportClear?"clear":"subtree-only",clearBg:scrollOnly||needsViewportClear?scrollBg:null,childHasPrev:needsViewportClear?!1:hasPrevBuffer,childAncestorCleared:needsViewportClear?!0:ancestorCleared||contentRegionCleared,stickyForceRefresh,reasons}}function renderScrollContainerChildren(node,buffer,props,nodeState,contentRegionCleared=!1,childrenNeedFreshRender=!1,ctx){let{clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged,inheritedBg,inheritedFg}=nodeState,instr=resolveInstrumentation(ctx),layout=node.boxRect,ss=node.scrollState;if(!layout||!ss)return;let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),childClipBounds=computeChildClipBounds(layout,props,clipBounds,0,!1,!0),scrollOffsetChanged=ss.offset!==ss.prevOffset,hasStickyChildren=!!(ss.stickyChildren&&ss.stickyChildren.length>0),visibleRangeChanged=ss.firstVisibleChild!==ss.prevFirstVisibleChild||ss.lastVisibleChild!==ss.prevLastVisibleChild,clearY=childClipBounds.top,clearHeight=childClipBounds.bottom-childClipBounds.top,contentX=layout.x+border.left+padding.left,contentWidth=layout.width-border.left-border.right-padding.left-padding.right,scrollBg=scrollOffsetChanged||isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childrenNeedFreshRender||visibleRangeChanged?getEffectiveBg(props)?parseColor(getEffectiveBg(props)):inheritedBg.color:null,plan=planScrollRender({scrollOffsetChanged,visibleRangeChanged,hasStickyChildren,childrenNeedFreshRender,childrenDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT),hasPrevBuffer,ancestorCleared,contentRegionCleared,scrollBg}),{tier,stickyForceRefresh}=plan,defaultChildHasPrev=plan.childHasPrev,defaultChildAncestorCleared=plan.childAncestorCleared;if(instr.enabled){if(instr.stats.scrollContainerCount++,tier!=="subtree-only"||stickyForceRefresh){instr.stats.scrollViewportCleared++;let reasons=[...plan.reasons];if(scrollOffsetChanged)reasons.push(`scrollOffset(${ss.prevOffset}->${ss.offset})`);reasons.push(`vp=${ss.viewportHeight} content=${ss.contentHeight} vis=${ss.firstVisibleChild}-${ss.lastVisibleChild}`),instr.stats.scrollClearReason=reasons.join("+")}}if(process?.env?.SILVERY_STRICT&&tier==="shift"&&hasStickyChildren)throw Error(`[SILVERY_STRICT] Scroll Tier 1 (buffer shift) activated with sticky children (node: ${props.id??node.type}, stickyCount: ${ss.stickyChildren?.length??0})`);let scrollDelta=ss.offset-(ss.prevOffset??ss.offset);if(tier==="shift"&&clearHeight>0){if(props.overflowIndicator===!0&&!border.top&&!border.bottom){let topIndicatorY=clearY,bottomIndicatorY=clearY+clearHeight-1;if(ss.prevOffset!=null&&ss.prevOffset>0)buffer.fill(contentX,topIndicatorY,contentWidth,1,{char:" ",bg:plan.clearBg});buffer.fill(contentX,bottomIndicatorY,contentWidth,1,{char:" ",bg:plan.clearBg})}buffer.scrollRegion(contentX,clearY,contentWidth,clearHeight,scrollDelta,{char:" ",bg:plan.clearBg})}if(tier==="clear"&&clearHeight>0)buffer.fill(contentX,clearY,contentWidth,clearHeight,{char:" ",bg:plan.clearBg});if(stickyForceRefresh&&clearHeight>0)buffer.fill(contentX,clearY,contentWidth,clearHeight,{char:" ",bg:null});let childAncestorLayoutChanged=isCurrentEpoch(node.layoutChangedThisFrame)||!!ancestorLayoutChanged,prevVisTop=ss.prevOffset??ss.offset,prevVisBottom=prevVisTop+ss.viewportHeight;for(let i=0;i<node.children.length;i++){let child=node.children[i];if(!child)continue;if(child.props.position==="sticky")continue;if(i<ss.firstVisibleChild||i>ss.lastVisibleChild)continue;let thisChildHasPrev=defaultChildHasPrev,thisChildAncestorCleared=defaultChildAncestorCleared;if(tier==="shift"){let childRect=child.boxRect;if(childRect){let childTop=childRect.y-layout.y-border.top-padding.top,childBottom=childTop+childRect.height,wasFullyVisible=childTop>=prevVisTop&&childBottom<=prevVisBottom;thisChildHasPrev=wasFullyVisible,thisChildAncestorCleared=wasFullyVisible?ancestorCleared||contentRegionCleared:!0}}if(stickyForceRefresh&&thisChildHasPrev)thisChildHasPrev=!1,thisChildAncestorCleared=!1;if(canSkipChildSubtree(child,thisChildHasPrev,childAncestorLayoutChanged))continue;renderNodeToBuffer(child,buffer,{scrollOffset:ss.offset,clipBounds:childClipBounds,hasPrevBuffer:thisChildHasPrev,ancestorCleared:thisChildAncestorCleared,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(ss.stickyChildren)for(let sticky of ss.stickyChildren){let child=node.children[sticky.index];if(!child?.boxRect)continue;let stickyScrollOffset=sticky.naturalTop-sticky.renderOffset;renderNodeToBuffer(child,buffer,{scrollOffset:stickyScrollOffset,clipBounds:childClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}}function renderNormalChildren(node,buffer,props,nodeState,childPositionChanged=!1,contentRegionCleared=!1,childrenNeedFreshRender=!1,ctx){let{scrollOffset,clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged,inheritedBg,inheritedFg}=nodeState,instr=resolveInstrumentation(ctx),layout=node.boxRect;if(!layout)return;let clipX=(props.overflowX??props.overflow)==="hidden",clipY=(props.overflowY??props.overflow)==="hidden",effectiveClipBounds=clipX||clipY?computeChildClipBounds(layout,props,clipBounds,scrollOffset,clipX,clipY):clipBounds,hasStickyChildren=!!(node.stickyChildren&&node.stickyChildren.length>0),stickyForceRefresh=hasStickyChildren&&hasPrevBuffer;if(stickyForceRefresh){let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),clearX=layout.x+border.left+padding.left,clearY=layout.y-scrollOffset+border.top+padding.top,clearW=layout.width-border.left-border.right-padding.left-padding.right,clearH=layout.height-border.top-border.bottom-padding.top-padding.bottom;if(clipBounds){let{top:clipTop,bottom:clipBottom}=clipBounds;if(clearY<clipTop)clearH-=clipTop-clearY,clearY=clipTop;if(clearY+clearH>clipBottom)clearH=clipBottom-clearY;if(clipBounds.left!==void 0&&clearX<clipBounds.left)clearW-=clipBounds.left-clearX,clearX=clipBounds.left;if(clipBounds.right!==void 0&&clearX+clearW>clipBounds.right)clearW=clipBounds.right-clearX}if(clearW>0&&clearH>0)buffer.fill(clearX,clearY,clearW,clearH,{char:" ",bg:null})}let childrenNeedRepaint=isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childPositionChanged||childrenNeedFreshRender;if(instr.enabled&&childrenNeedRepaint&&hasPrevBuffer){instr.stats.normalChildrenRepaint++;let reasons=[];if(isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT))reasons.push("childrenDirty");if(childPositionChanged)reasons.push("childPositionChanged");if(childrenNeedFreshRender)reasons.push("childrenNeedFreshRender");instr.stats.normalRepaintReason=reasons.join("+")}let childHasPrev=childrenNeedRepaint?!1:hasPrevBuffer,childAncestorCleared=contentRegionCleared||ancestorCleared&&!getEffectiveBg(props),childAncestorLayoutChanged=isCurrentEpoch(node.layoutChangedThisFrame)||!!ancestorLayoutChanged;if(stickyForceRefresh)childHasPrev=!1,childAncestorCleared=!1;let hasAbsoluteChildren=!1;for(let child of node.children){let childProps=child.props;if(childProps.position==="absolute"){hasAbsoluteChildren=!0;continue}if(hasStickyChildren&&childProps.position==="sticky")continue;if(canSkipChildSubtree(child,childHasPrev,childAncestorLayoutChanged))continue;renderNodeToBuffer(child,buffer,{scrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:childHasPrev,ancestorCleared:childAncestorCleared,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(node.stickyChildren)for(let sticky of node.stickyChildren){let child=node.children[sticky.index];if(!child?.boxRect)continue;let stickyScrollOffset=sticky.naturalTop-sticky.renderOffset;renderNodeToBuffer(child,buffer,{scrollOffset:stickyScrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(hasAbsoluteChildren)for(let child of node.children){if(child.props.position!=="absolute")continue;renderNodeToBuffer(child,buffer,{scrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}}function canSkipChildSubtree(child,childHasPrev,childAncestorLayoutChanged){if(!childHasPrev)return!1;if(childAncestorLayoutChanged)return!1;if(isDirty(child.dirtyBits,child.dirtyEpoch,SUBTREE_BIT))return!1;if(isCurrentEpoch(child.layoutChangedThisFrame))return!1;if(child.scrollState&&child.scrollState.offset!==child.scrollState.prevOffset)return!1;return!0}function clearNodeDirtyFlags(node){node.dirtyBits=0,node.dirtyEpoch=INITIAL_EPOCH,node.layoutChangedThisFrame=INITIAL_EPOCH}function clearDirtyFlags(node){clearNodeDirtyFlags(node);for(let child of node.children)if(child.layoutNode)clearDirtyFlags(child);else clearVirtualTextFlags(child)}function clearVirtualTextFlags(node){clearNodeDirtyFlags(node);for(let child of node.children)clearVirtualTextFlags(child)}function hasChildPositionChanged(node){for(let child of node.children)if(child.boxRect&&child.prevLayout){if(child.boxRect.x!==child.prevLayout.x||child.boxRect.y!==child.prevLayout.y)return!0}return!1}function hasDescendantWithBg(node){for(let child of node.children){if(getEffectiveBg(child.props))return!0;if(child.children.length>0&&hasDescendantWithBg(child))return!0}return!1}function computeChildClipBounds(layout,props,parentClip,scrollOffset=0,horizontal=!0,vertical=!0){let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),adjustedY=layout.y-scrollOffset,nodeClip=vertical?{top:adjustedY+border.top+padding.top,bottom:adjustedY+layout.height-border.bottom-padding.bottom}:{top:-1/0,bottom:1/0};if(horizontal)nodeClip.left=layout.x+border.left+padding.left,nodeClip.right=layout.x+layout.width-border.right-padding.right;if(!parentClip)return nodeClip;let result={top:vertical?Math.max(parentClip.top,nodeClip.top):parentClip.top,bottom:vertical?Math.min(parentClip.bottom,nodeClip.bottom):parentClip.bottom};if(horizontal&&nodeClip.left!==void 0&&nodeClip.right!==void 0)result.left=Math.max(parentClip.left??0,nodeClip.left),result.right=Math.min(parentClip.right??1/0,nodeClip.right);else if(parentClip.left!==void 0&&parentClip.right!==void 0)result.left=parentClip.left,result.right=parentClip.right;return result}function clearDescendantOverflowRegions(node,buffer,layout,scrollOffset,clipBounds,threadedInheritedBg){let clearBg=threadedInheritedBg.color,nodeRight=layout.x+layout.width,nodeBottom=layout.y-scrollOffset+layout.height,nodeLeft=layout.x,nodeTop=layout.y-scrollOffset;_clearDescendantOverflow(node.children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg)}function _clearDescendantOverflow(children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg){for(let child of children){if(child.prevLayout&&isCurrentEpoch(child.layoutChangedThisFrame)){let prev=child.prevLayout,prevRight=prev.x+prev.width,prevBottom=prev.y-scrollOffset+prev.height,prevTop=prev.y-scrollOffset;if(prevRight>nodeRight){let overflowX=nodeRight,overflowWidth=Math.min(prevRight,buffer.width)-overflowX,overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height);if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prevBottom>nodeBottom){let overflowTop=Math.max(nodeBottom,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height),overflowX=Math.max(prev.x,clipBounds?.left??0),overflowWidth=Math.min(prevRight,clipBounds?.right??buffer.width)-overflowX;if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prev.x<nodeLeft){let overflowX=Math.max(prev.x,0),overflowWidth=Math.min(nodeLeft,buffer.width)-overflowX,overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height);if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prevTop<nodeTop){let overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(nodeTop,clipBounds?.bottom??buffer.height),overflowX=Math.max(prev.x,clipBounds?.left??0),overflowWidth=Math.min(prevRight,clipBounds?.right??buffer.width)-overflowX;if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}}if(isDirty(child.dirtyBits,child.dirtyEpoch,SUBTREE_BIT)&&child.children!==void 0)_clearDescendantOverflow(child.children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg)}}function clearNodeRegion(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg){let inherited=threadedInheritedBg,clearBg=inherited.color,screenY=layout.y-scrollOffset,parentRect=node.parent?.boxRect,parentBottom=parentRect?parentRect.y-scrollOffset+parentRect.height:void 0,clearY=clipBounds?Math.max(screenY,clipBounds.top):screenY,clearBottom=clipBounds?Math.min(screenY+layout.height,clipBounds.bottom):screenY+layout.height;if(parentBottom!==void 0)clearBottom=Math.min(clearBottom,parentBottom);let{x:clearX,width:clearWidth}=layout;if(clipBounds?.left!==void 0&&clipBounds.right!==void 0){if(clearX<clipBounds.left)clearWidth-=clipBounds.left-clearX,clearX=clipBounds.left;if(clearX+clearWidth>clipBounds.right)clearWidth=Math.max(0,clipBounds.right-clearX)}if(inherited.ancestorRect){let ancestorRight=inherited.ancestorRect.x+inherited.ancestorRect.width,ancestorLeft=inherited.ancestorRect.x;if(clearX<ancestorLeft)clearWidth-=ancestorLeft-clearX,clearX=ancestorLeft;if(clearX+clearWidth>ancestorRight)clearWidth=Math.max(0,ancestorRight-clearX)}let clearHeight=clearBottom-clearY;if(clearHeight>0&&clearWidth>0){let _cellDbg2=getCellDebug();if(_cellDbg2&&cellCoversPoint(_cellDbg2,clearX,clearY,clearWidth,clearHeight)){let msg=`CLEAR_REGION ${node.props.id??node.type} fill=${clearX},${clearY} ${clearWidth}x${clearHeight} bg=${String(clearBg)} COVERS TARGET`;_cellDbg2.log.push(msg),cellLog.debug?.(msg)}buffer.fill(clearX,clearY,clearWidth,clearHeight,{char:" ",bg:clearBg})}clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,inherited)}function clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,inherited){if(!layoutChanged||!node.prevLayout)return;let prev=node.prevLayout,_cellDbg3=getCellDebug(),_prevCoversCell3=_cellDbg3&&cellCoversPoint(_cellDbg3,prev.x,prev.y-scrollOffset,prev.width,prev.height);if(prev.width<=layout.width&&prev.height<=layout.height){if(_cellDbg3&&_prevCoversCell3){let msg=`EXCESS_SKIP_NO_SHRINK ${node.props.id??node.type} prev=${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height} now=${layout.x},${layout.y-scrollOffset} ${layout.width}x${layout.height}`;_cellDbg3.log.push(msg),cellLog.debug?.(msg)}return}if(prev.x!==layout.x||prev.y!==layout.y){if(_cellDbg3&&_prevCoversCell3){let msg=`EXCESS_SKIP_MOVED ${node.props.id??node.type} prev=${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height} now=${layout.x},${layout.y-scrollOffset} ${layout.width}x${layout.height} (dx=${layout.x-prev.x} dy=${layout.y-prev.y})`;_cellDbg3.log.push(msg),cellLog.debug?.(msg)}return}let clearBg=inherited.color,screenY=layout.y-scrollOffset,prevScreenY=prev.y-scrollOffset,clipRect=inherited.ancestorRect??node.parent?.boxRect;if(!clipRect)return;let clipRectBottom=clipRect.y-scrollOffset+clipRect.height,clipRectRight=clipRect.x+clipRect.width,parent=node.parent;if(parent?.boxRect){let parentProps=parent.props,border=getBorderSize(parentProps),padding=getPadding(parentProps),parentRight=parent.boxRect.x+parent.boxRect.width-border.right-padding.right,parentBottom=parent.boxRect.y-scrollOffset+parent.boxRect.height-border.bottom-padding.bottom;clipRectRight=Math.min(clipRectRight,parentRight),clipRectBottom=Math.min(clipRectBottom,parentBottom)}if(prev.width>layout.width){let excessX=layout.x+layout.width,excessWidth=prev.width-layout.width;if(excessX+excessWidth>clipRectRight)excessWidth=Math.max(0,clipRectRight-excessX);if(excessWidth>0)clippedFill(buffer,excessX,excessWidth,prevScreenY,prevScreenY+prev.height,clipBounds,clipRectBottom,clearBg)}if(prev.height>layout.height){let bottomWidth=prev.width;if(layout.x+bottomWidth>clipRectRight)bottomWidth=Math.max(0,clipRectRight-layout.x);clippedFill(buffer,layout.x,bottomWidth,screenY+layout.height,prevScreenY+prev.height,clipBounds,clipRectBottom,clearBg)}}function clippedFill(buffer,x,width,top,bottom,clipBounds,outerBottom,bg){let clippedTop=clipBounds?Math.max(top,clipBounds.top):top,clippedBottom=Math.min(clipBounds?Math.min(bottom,clipBounds.bottom):bottom,outerBottom),clippedX=x,clippedWidth=width;if(clipBounds?.left!==void 0&&clipBounds.right!==void 0){if(clippedX<clipBounds.left)clippedWidth-=clipBounds.left-clippedX,clippedX=clipBounds.left;if(clippedX+clippedWidth>clipBounds.right)clippedWidth=Math.max(0,clipBounds.right-clippedX)}let height=clippedBottom-clippedTop;if(height>0&&clippedWidth>0)buffer.fill(clippedX,clippedTop,clippedWidth,height,{char:" ",bg})}var contentLog,traceLog,cellLog,_instrumentEnabled,_renderPhaseStats,_renderPhaseCallCount=0,_nodeTrace,_nodeTraceEnabled,_reactiveEnabled,_reactiveVerifyEnabled;var init_render_phase=__esm(()=>{init_buffer();init_helpers();init_render_box();init_render_helpers();init_render_text();init_state();init_reactive_node();contentLog=createLogger7("silvery:content"),traceLog=createLogger7("silvery:content:trace"),cellLog=createLogger7("silvery:content:cell");_instrumentEnabled=typeof process<"u"&&(envTruthy(process.env?.SILVERY_STRICT)||envTruthy(process.env?.SILVERY_INSTRUMENT)),_renderPhaseStats={nodesVisited:0,nodesRendered:0,nodesSkipped:0,textNodes:0,boxNodes:0,clearOps:0,noPrevBuffer:0,flagContentDirty:0,flagStylePropsDirty:0,flagLayoutChanged:0,flagSubtreeDirty:0,flagChildrenDirty:0,flagChildPositionChanged:0,flagAncestorLayoutChanged:0,scrollContainerCount:0,scrollViewportCleared:0,scrollClearReason:"",normalChildrenRepaint:0,normalRepaintReason:"",cascadeMinDepth:999,cascadeNodes:"",_prevBufferNull:0,_prevBufferDimMismatch:0,_hasPrevBuffer:0,_layoutW:0,_layoutH:0,_prevW:0,_prevH:0,_callCount:0},_nodeTrace=[],_nodeTraceEnabled=typeof process<"u"&&envTruthy(process.env?.SILVERY_STRICT),_reactiveEnabled=typeof process>"u"||process.env?.SILVERY_REACTIVE!=="0",_reactiveVerifyEnabled=_reactiveEnabled&&typeof process<"u"&&envTruthy(process.env?.SILVERY_STRICT)});import{createLogger as createLogger8}from"loggily";function createAg(root,options){let measurer=options?.measurer,ctx=measurer?{measurer}:void 0,_prevBuffer=null,hasScroll=!1,hasSticky=!1;function doLayout(cols,rows,opts){let __stack6=[];try{let prevRootLayout=root.boxRect;let dimensionsChanged=prevRootLayout&&(prevRootLayout.width!==cols||prevRootLayout.height!==rows);if(!dimensionsChanged&&!hasLayoutDirty()&&!hasScrollDirty())return log7.debug?.("layout: skipped (no layoutDirty, no scrollDirty, dimensions unchanged)"),{tMeasure:0,tLayout:0,tScroll:0,tScrollRect:0,tNotify:0};const render=__using(__stack6,baseLog.span("pipeline",{width:cols,height:rows}),0);let tMeasure;{let __stack=[];try{const _m=__using(__stack,render.span("measure"),0);let t=performance.now();measurePhase(root,ctx);tMeasure=performance.now()-t;log7.debug?.(`measure: ${tMeasure.toFixed(2)}ms`)}catch(_catch){var _err=_catch,_hasErr=1}finally{__callDispose(__stack,_err,_hasErr)}}let tLayout;{let __stack2=[];try{const _l=__using(__stack2,render.span("layout"),0);let t=performance.now();layoutPhase(root,cols,rows);tLayout=performance.now()-t;log7.debug?.(`layout: ${tLayout.toFixed(2)}ms`)}catch(_catch2){var _err2=_catch2,_hasErr2=1}finally{__callDispose(__stack2,_err2,_hasErr2)}}if(!hasScroll||!hasSticky){let features=detectPipelineFeatures(root);if(features.hasScroll)hasScroll=!0;if(features.hasSticky)hasSticky=!0}let tScroll;if(hasScroll){let __stack3=[];try{const _s=__using(__stack3,render.span("scroll"),0);let t=performance.now();scrollPhase(root,{skipStateUpdates:opts?.skipScrollStateUpdates});tScroll=performance.now()-t}catch(_catch3){var _err3=_catch3,_hasErr3=1}finally{__callDispose(__stack3,_err3,_hasErr3)}}else tScroll=0;if(hasSticky)stickyPhase(root);let tScrollRect;{let __stack4=[];try{const _r=__using(__stack4,render.span("scrollRect"),0);let t=performance.now();if(hasScroll||hasSticky)scrollrectPhase(root);else scrollrectPhaseSimple(root);tScrollRect=performance.now()-t}catch(_catch4){var _err4=_catch4,_hasErr4=1}finally{__callDispose(__stack4,_err4,_hasErr4)}}let tNotify=0;if(!opts?.skipLayoutNotifications){let __stack5=[];try{const _n=__using(__stack5,render.span("notify"),0);let t=performance.now();notifyLayoutSubscribers(root);tNotify=performance.now()-t}catch(_catch5){var _err5=_catch5,_hasErr5=1}finally{__callDispose(__stack5,_err5,_hasErr5)}}let acc=globalThis.__silvery_bench_phases;if(acc)acc.measure+=tMeasure,acc.layout+=tLayout,acc.scroll+=tScroll,acc.scrollRect+=tScrollRect,acc.notify+=tNotify,acc.layoutTotal+=tMeasure+tLayout+tScroll+tScrollRect+tNotify;return{tMeasure,tLayout,tScroll,tScrollRect,tNotify}}catch(_catch6){var _err6=_catch6,_hasErr6=1}finally{__callDispose(__stack6,_err6,_hasErr6)}}function doRender(opts){clearBgConflictWarnings();let prevBuffer=opts?.fresh?null:opts?.prevBuffer!==void 0?opts.prevBuffer:_prevBuffer,tContent,buffer;{let t=performance.now();buffer=renderPhase(root,prevBuffer,ctx),tContent=performance.now()-t,log7.debug?.(`content: ${tContent.toFixed(2)}ms`)}if(!opts?.fresh)_prevBuffer=buffer;clearDirtyTracking();let acc=globalThis.__silvery_bench_phases;if(acc)acc.content+=tContent,acc.renderCalls+=1;return{frame:createTextFrame(buffer),buffer,prevBuffer,tContent}}function agCreateNode(type,props){let layoutNode=getLayoutEngine().createNode();return{type,props,children:[],parent:null,layoutNode,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:INITIAL_EPOCH,layoutDirty:!0,dirtyBits:ALL_RECONCILER_BITS,dirtyEpoch:getRenderEpoch(),layoutSubscribers:new Set}}function agInsertChild(parent,child,index){if(child.parent)agRemoveChild(child.parent,child);if(parent.children.splice(index,0,child),child.parent=parent,parent.layoutNode&&child.layoutNode){let layoutIndex=parent.children.slice(0,index).filter((c)=>c.layoutNode!==null).length;parent.layoutNode.insertChild(child.layoutNode,layoutIndex)}}function agRemoveChild(parent,child){let index=parent.children.indexOf(child);if(index===-1)return;if(parent.children.splice(index,1),parent.layoutNode&&child.layoutNode)parent.layoutNode.removeChild(child.layoutNode),child.layoutNode.free();child.parent=null}return{root,layout(dims,options2){if(measurer)runWithMeasurer(measurer,()=>doLayout(dims.cols,dims.rows,options2));else doLayout(dims.cols,dims.rows,options2)},render(options2){let result=measurer?runWithMeasurer(measurer,()=>doRender(options2)):doRender(options2);return{frame:result.frame,buffer:result.buffer,prevBuffer:result.prevBuffer}},resetBuffer(){_prevBuffer=null},createNode:agCreateNode,insertChild:agInsertChild,removeChild:agRemoveChild,updateProps(node,props,oldProps){if(node.props=props,node.layoutNode)node.layoutNode.markDirty()},setText(node,text){node.textContent=text;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(node.dirtyBits=node.dirtyEpoch!==epoch?bits:node.dirtyBits|bits,node.dirtyEpoch=epoch,node.layoutNode)node.layoutNode.markDirty()},toString(){return`[Ag root=${root.type} children=${root.children.length}]`}}}var log7,baseLog;var init_ag=__esm(()=>{init_buffer();init_unicode();init_measure_phase();init_layout_phase();init_render_phase();init_dirty_tracking();log7=createLogger8("silvery:render"),baseLog=createLogger8("@silvery/ag-react")});var init_render_phase_adapter=__esm(()=>{init_helpers();init_unicode();init_render_text()});import{createLogger as createLogger9}from"loggily";function executeRender(root,width,height,prevBuffer,options="fullscreen",config){if(config?.measurer)return runWithMeasurer(config.measurer,()=>{return executeRenderCore(root,width,height,prevBuffer,options,config)});return executeRenderCore(root,width,height,prevBuffer,options,config)}function executeRenderCore(root,width,height,prevBuffer,options="fullscreen",config){let opts=typeof options==="string"?{mode:options}:options,{mode="fullscreen",skipLayoutNotifications=!1,skipScrollStateUpdates=!1,scrollbackOffset=0,termRows,cursorPos}=opts;if(process?.env?.SILVERY_DEV&&prevBuffer===null&&root.prevLayout!==null&&!skipLayoutNotifications)log8.warn?.("executeRender called with prevBuffer=null on frame 2+ — "+"incremental content rendering is disabled (full render every frame). Track the returned buffer and pass it as prevBuffer on subsequent renders.");let start=performance.now(),ag=createAg(root,{measurer:config?.measurer});ag.layout({cols:width,rows:height},{skipLayoutNotifications,skipScrollStateUpdates});let{buffer}=ag.render({prevBuffer}),tLayout=performance.now()-start,output,tOutput;{let t4=performance.now(),outputFn=config?.outputPhaseFn??outputPhase;try{output=outputFn(prevBuffer,buffer,mode,scrollbackOffset,termRows,cursorPos)}catch(e){if(e instanceof Error)e.__silvery_buffer=buffer;throw e}tOutput=performance.now()-t4,log8.debug?.(`output: ${tOutput.toFixed(2)}ms (${output.length} bytes)`)}let total=performance.now()-start;globalThis.__silvery_last_pipeline={layout:tLayout,output:tOutput,total,incremental:prevBuffer!==null},globalThis.__silvery_render_count=(globalThis.__silvery_render_count??0)+1;let acc=globalThis.__silvery_bench_phases;if(acc)acc.output+=tOutput,acc.total+=total,acc.pipelineCalls+=1;return log8.debug?.(`pipeline: layout+render=${tLayout.toFixed(1)}ms output=${tOutput.toFixed(1)}ms total=${total.toFixed(1)}ms`),{output,buffer}}var log8,baseLog2;var init_pipeline=__esm(()=>{init_unicode();init_ag();init_measure_phase();init_layout_phase();init_render_phase();init_render_phase_adapter();init_output_phase();init_render_phase_adapter();init_render_phase();init_layout_phase();init_measure_phase();init_output_phase();log8=createLogger9("silvery:render"),baseLog2=createLogger9("@silvery/ag-react")});var init_pipeline2=__esm(()=>{init_pipeline()});function classifyPropChanges(oldProps,newProps){if(oldProps===newProps)return NO_CHANGES;let keysA=Object.keys(oldProps),keysB=Object.keys(newProps),sameKeyCount=keysA.length===keysB.length,layoutChanged=!1,contentChanged=!1,anyChanged=!1;for(let key of keysA)if(oldProps[key]!==newProps[key]){if(anyChanged=!0,LAYOUT_PROPS.has(key))layoutChanged=!0;if(contentChanged!=="text"){if(key==="children"){let oldIsPrimitive=typeof oldProps[key]==="string"||typeof oldProps[key]==="number",newIsPrimitive=typeof newProps[key]==="string"||typeof newProps[key]==="number";if(oldIsPrimitive||newIsPrimitive)contentChanged="text"}else if(TEXT_CONTENT_PROPS.has(key))contentChanged="text";else if(contentChanged!=="style"&&STYLE_PROPS.has(key))contentChanged="style"}if(layoutChanged&&contentChanged==="text")break}if(!sameKeyCount){for(let key of keysB)if(!(key in oldProps)){if(anyChanged=!0,LAYOUT_PROPS.has(key))layoutChanged=!0;if(contentChanged!=="text"){if(key==="children"){if(typeof newProps[key]==="string"||typeof newProps[key]==="number")contentChanged="text"}else if(TEXT_CONTENT_PROPS.has(key))contentChanged="text";else if(contentChanged!=="style"&&STYLE_PROPS.has(key))contentChanged="style"}if(layoutChanged&&contentChanged==="text")break}}if(!anyChanged&&!sameKeyCount)anyChanged=!0;if(!anyChanged)return NO_CHANGES;return{anyChanged,layoutChanged,contentChanged}}var LAYOUT_PROPS,TEXT_CONTENT_PROPS,STYLE_PROPS,NO_CHANGES;var init_helpers2=__esm(()=>{LAYOUT_PROPS=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","flexDirection","flexWrap","justifyContent","alignItems","alignContent","alignSelf","flexGrow","flexShrink","flexBasis","padding","paddingX","paddingY","paddingTop","paddingBottom","paddingLeft","paddingRight","margin","marginX","marginY","marginTop","marginBottom","marginLeft","marginRight","gap","columnGap","rowGap","borderStyle","borderTop","borderBottom","borderLeft","borderRight","display","position","top","left","bottom","right","aspectRatio","overflow","overflowX","overflowY"]),TEXT_CONTENT_PROPS=new Set(["wrap","internal_transform"]),STYLE_PROPS=new Set(["color","backgroundColor","bold","dim","dimColor","italic","underline","underlineStyle","underlineColor","strikethrough","inverse","borderColor","borderBackgroundColor","borderTopBackgroundColor","borderBottomBackgroundColor","borderLeftBackgroundColor","borderRightBackgroundColor","borderStyle","outlineStyle","outlineColor","outlineDimColor","outlineTop","outlineBottom","outlineLeft","outlineRight","theme"]),NO_CHANGES={anyChanged:!1,layoutChanged:!1,contentChanged:!1}});import{createLogger as createLogger10}from"loggily";function createNode(type,props,measurer){let layoutNode=getLayoutEngine().createNode(),epoch=getRenderEpoch(),node={type,props,children:[],parent:null,layoutNode,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:epoch,layoutDirty:!0,dirtyBits:ALL_RECONCILER_BITS,dirtyEpoch:epoch,layoutSubscribers:new Set};if(type==="silvery-box")applyBoxProps(layoutNode,props);if(type==="silvery-text"){let cachedText=null,measureCache=new Map;layoutNode.setMeasureFunc((width,widthMode,height,heightMode)=>{measureStats.calls++,measureLog.debug?.(`measure "${collectPlainTextSkipHidden(node).slice(0,40)}" width=${width} widthMode=${widthMode} height=${height} heightMode=${heightMode}`);let cacheKey=`${width}|${widthMode}|${height}|${heightMode}`,cached=measureCache.get(cacheKey);if(cached&&cachedText!==null&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))return measureStats.cacheHits++,cached;let text;if(cachedText!==null&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))text=cachedText;else{measureStats.textCollects++;let newText=collectPlainTextSkipHidden(node);if(newText!==cachedText)measureCache.clear();text=newText,cachedText=text,node.dirtyBits&=~CONTENT_BIT}if(!text)return{width:0,height:0};let cachedAfterCollect=measureCache.get(cacheKey);if(cachedAfterCollect)return measureStats.cacheHits++,cachedAfterCollect;let lines=text.split(`
71
+ `)}`)}function getReactiveState(node){let state=nodeStates.get(node);if(!state)state=createReactiveNodeState(),nodeStates.set(node,state);return state}var nodeStates;var init_reactive_node=__esm(()=>{init_src3();nodeStates=new WeakMap});import{createLogger as createLogger7}from"loggily";function renderPhase(root,prevBuffer,ctx){let layout=root.boxRect;if(!layout)throw Error("renderPhase called before layout phase");let instr=resolveInstrumentation(ctx),hasPrevBuffer=prevBuffer&&prevBuffer.width===layout.width&&prevBuffer.height===layout.height;if(hasPrevBuffer&&!isAnyDirty(root.dirtyBits,root.dirtyEpoch)&&!isCurrentEpoch(root.layoutChangedThisFrame)){if(instr.enabled)instr.stats._noopSkip=1;return advanceRenderEpoch(),prevBuffer}if(instr.enabled)instr.stats._prevBufferNull=prevBuffer==null?1:0,instr.stats._prevBufferDimMismatch=prevBuffer&&!hasPrevBuffer?1:0,instr.stats._hasPrevBuffer=hasPrevBuffer?1:0,instr.stats._layoutW=layout.width,instr.stats._layoutH=layout.height,instr.stats._prevW=prevBuffer?.width??0,instr.stats._prevH=prevBuffer?.height??0;let t0=instr.enabled?performance.now():0,buffer=hasPrevBuffer?prevBuffer.clone():new TerminalBuffer(layout.width,layout.height),tClone=instr.enabled?performance.now()-t0:0;buffer.setSelectableMode(!0);let t1=instr.enabled?performance.now():0;renderNodeToBuffer(root,buffer,{scrollOffset:0,clipBounds:void 0,hasPrevBuffer:!!hasPrevBuffer,ancestorCleared:!1,bufferIsCloned:!!hasPrevBuffer,ancestorLayoutChanged:!1,inheritedBg:{color:null,ancestorRect:null},inheritedFg:null},ctx);let tRender=instr.enabled?performance.now()-t1:0;if(instr.enabled)emitRenderPhaseStats(instr.stats,instr.nodeTrace,instr.nodeTraceEnabled,tClone,tRender);let anyLayoutChanged=isCurrentEpoch(root.layoutChangedThisFrame)||isDirty(root.dirtyBits,root.dirtyEpoch,SUBTREE_BIT);return syncPrevLayout(root,anyLayoutChanged||!hasPrevBuffer),advanceRenderEpoch(),buffer}function syncPrevLayout(root,layoutPhaseRan){if(!layoutPhaseRan)return;let stack=[root];while(stack.length>0){let node=stack.pop();node.prevLayout=node.boxRect;let children=node.children;for(let i=children.length-1;i>=0;i--)stack.push(children[i])}}function envTruthy(val){return!!val&&val!=="0"&&val!=="false"}function resolveInstrumentation(ctx){return{enabled:ctx?.instrumentEnabled??_instrumentEnabled,stats:ctx?.stats??_renderPhaseStats,nodeTrace:ctx?.nodeTrace??_nodeTrace,nodeTraceEnabled:ctx?.nodeTraceEnabled??_nodeTraceEnabled}}function getCellDebug(){return globalThis.__silvery_cell_debug}function cellCoversPoint(cellDbg,x,y,width,height){return x<=cellDbg.x&&x+width>cellDbg.x&&y<=cellDbg.y&&y+height>cellDbg.y}function _getNodeDepth(node){let depth=0,n=node.parent;while(n)depth++,n=n.parent;return depth}function emitRenderPhaseStats(stats,nodeTrace,nodeTraceEnabled,tClone,tRender){_renderPhaseCallCount++,stats._callCount=_renderPhaseCallCount;let snap={clone:tClone,render:tRender,...structuredClone(stats)};globalThis.__silvery_content_detail=snap,(globalThis.__silvery_content_all??=[]).push(snap),contentLog.debug?.(`frame ${snap._callCount}: ${snap.nodesRendered}/${snap.nodesVisited} rendered, ${snap.nodesSkipped} skipped (${tClone.toFixed(1)}ms clone, ${tRender.toFixed(1)}ms render)`);for(let key of Object.keys(stats))stats[key]=0;if(stats.cascadeMinDepth=999,stats.cascadeNodes="",stats.scrollClearReason="",stats.normalRepaintReason="",nodeTraceEnabled&&nodeTrace.length>0)(globalThis.__silvery_node_trace??=[]).push([...nodeTrace]),traceLog.debug?.(`${nodeTrace.length} nodes traced`),nodeTrace.length=0}function renderNodeToBuffer(node,buffer,nodeState,ctx){let{scrollOffset,clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged=!1}=nodeState,instr=resolveInstrumentation(ctx);if(instr.enabled)instr.stats.nodesVisited++;let layout=node.boxRect;if(!layout)return;if(!node.layoutNode){clearVirtualTextFlags(node);return}if(node.hidden){clearDirtyFlags(node);return}let props=node.props,prevSelectableMode=buffer.getSelectableMode(),userSelect=props.userSelect;if(userSelect==="none")buffer.setSelectableMode(!1);else if(userSelect==="text"||userSelect==="contain")buffer.setSelectableMode(!0);if(props.display==="none"){clearDirtyFlags(node),buffer.setSelectableMode(prevSelectableMode);return}let screenY=layout.y-scrollOffset;if(screenY>=buffer.height||screenY+layout.height<=0){buffer.setSelectableMode(prevSelectableMode);return}let layoutChanged=isCurrentEpoch(node.layoutChangedThisFrame),childPositionChanged=!!(hasPrevBuffer&&!layoutChanged&&hasChildPositionChanged(node)),scrollOffsetChanged=!!(node.scrollState&&node.scrollState.offset!==node.scrollState.prevOffset),canSkipEntireSubtree=hasPrevBuffer&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&!isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&!layoutChanged&&!isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&!isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&!childPositionChanged&&!ancestorLayoutChanged&&!scrollOffsetChanged,_nodeId=instr.enabled?props.id??"":"",_traceThis=instr.enabled&&instr.nodeTraceEnabled&&_nodeId,_cellDbg=getCellDebug(),_coversCellNow=_cellDbg&&cellCoversPoint(_cellDbg,layout.x,screenY,layout.width,layout.height),_coversCellPrev=_cellDbg&&node.prevLayout&&cellCoversPoint(_cellDbg,node.prevLayout.x,node.prevLayout.y-scrollOffset,node.prevLayout.width,node.prevLayout.height);if(canSkipEntireSubtree){if(_cellDbg&&(_coversCellNow||_coversCellPrev)){let id=props.id??node.type,depth=_getNodeDepth(node),prev=node.prevLayout,msg=`SKIP ${id}@${depth} rect=${layout.x},${screenY} ${layout.width}x${layout.height} prev=${prev?`${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height}`:"null"} coversNow=${_coversCellNow} coversPrev=${_coversCellPrev}`;_cellDbg.log.push(msg),cellLog.debug?.(msg)}if(instr.enabled){if(instr.stats.nodesSkipped++,_traceThis)instr.nodeTrace.push({id:_nodeId,type:node.type,depth:_getNodeDepth(node),rect:`${layout.x},${layout.y} ${layout.width}x${layout.height}`,prevLayout:node.prevLayout?`${node.prevLayout.x},${node.prevLayout.y} ${node.prevLayout.width}x${node.prevLayout.height}`:"null",hasPrev:hasPrevBuffer,ancestorCleared,flags:"",decision:"SKIPPED",layoutChanged})}clearDirtyFlags(node),buffer.setSelectableMode(prevSelectableMode);return}if(instr.enabled){if(instr.stats.nodesRendered++,!hasPrevBuffer)instr.stats.noPrevBuffer++;if(isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))instr.stats.flagContentDirty++;if(isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT))instr.stats.flagStylePropsDirty++;if(layoutChanged)instr.stats.flagLayoutChanged++;if(isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT))instr.stats.flagSubtreeDirty++;if(isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT))instr.stats.flagChildrenDirty++;if(childPositionChanged)instr.stats.flagChildPositionChanged++;if(ancestorLayoutChanged)instr.stats.flagAncestorLayoutChanged++}let nodeTheme=props.theme;if(nodeTheme)pushContextTheme(nodeTheme);try{let isScrollContainer=props.overflow==="scroll"&&node.scrollState,{absoluteChildMutated,descendantOverflowChanged}=buildCascadeInputs(node,hasPrevBuffer),cascadeInputs={hasPrevBuffer,contentDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT),stylePropsDirty:isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT),layoutChanged,subtreeDirty:isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT),childrenDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT),childPositionChanged,ancestorLayoutChanged,ancestorCleared,bgDirty:isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT),isTextNode:node.type==="silvery-text",hasBgColor:!!getEffectiveBg(props),absoluteChildMutated,descendantOverflowChanged},cascade;if(_reactiveEnabled){let reactiveState=getReactiveState(node);if(syncToSignals(reactiveState,node,{hasPrevBuffer,layoutChanged,childPositionChanged,ancestorLayoutChanged,ancestorCleared,absoluteChildMutated,descendantOverflowChanged,hasBgColor:cascadeInputs.hasBgColor}),cascade=readReactiveCascade(reactiveState),_reactiveVerifyEnabled)assertReactiveMatchesOracle(reactiveState,computeCascade(cascadeInputs),props.id??node.type)}else cascade=computeCascade(cascadeInputs);if(cascade.bgOnlyChange&&hasDescendantWithBg(node)){let childrenNeedFreshRender2=(hasPrevBuffer||ancestorCleared)&&(cascade.contentAreaAffected||cascade.bgRefillNeeded);cascade={...cascade,bgOnlyChange:!1,childrenNeedFreshRender:childrenNeedFreshRender2}}let{contentRegionCleared,skipBgFill,childrenNeedFreshRender}=cascade;if(instr.enabled||_cellDbg&&(_coversCellNow||_coversCellPrev))traceRenderDecision(node,props,layout,screenY,scrollOffset,hasPrevBuffer,ancestorCleared,layoutChanged,childPositionChanged,cascade,_nodeId,_traceThis,_cellDbg,_coversCellNow,_coversCellPrev,instr.enabled,instr.stats,instr.nodeTrace);let useTextStyleFastPath=!1;executeRegionClearing(node,buffer,layout,scrollOffset,clipBounds,bufferIsCloned,layoutChanged,useTextStyleFastPath?!1:contentRegionCleared,descendantOverflowChanged,instr.enabled,instr.stats,nodeState.inheritedBg);let needsOwnRepaint=!hasPrevBuffer||ancestorCleared||ancestorLayoutChanged||cascade.contentAreaAffected||isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)||cascade.bgRefillNeeded,boxInheritedBg=node.type==="silvery-box"&&!getEffectiveBg(props)?nodeState.inheritedBg.color:void 0;if(needsOwnRepaint)renderOwnContent(node,buffer,layout,props,nodeState,skipBgFill,instr.enabled,instr.stats,ctx,cascade.bgOnlyChange,useTextStyleFastPath);let effectiveBg=getEffectiveBg(props),childInheritedBg=effectiveBg?{color:parseColor(effectiveBg),ancestorRect:node.boxRect}:nodeTheme?{color:parseColor(nodeTheme.bg),ancestorRect:node.boxRect}:nodeState.inheritedBg,childInheritedFg=props.color?parseColor(props.color):nodeTheme?parseColor(nodeTheme.fg):nodeState.inheritedFg,childState={...nodeState,inheritedBg:childInheritedBg,inheritedFg:childInheritedFg};if(isScrollContainer)renderScrollContainerChildren(node,buffer,props,childState,contentRegionCleared,childrenNeedFreshRender,ctx),renderScrollIndicators(node,buffer,layout,props,node.scrollState,ctx);else renderNormalChildren(node,buffer,props,childState,childPositionChanged,contentRegionCleared,childrenNeedFreshRender,ctx);if(node.type==="silvery-box"&&props.outlineStyle){let{x,width,height}=layout,y=layout.y-scrollOffset;renderOutline(buffer,x,y,width,height,props,clipBounds,boxInheritedBg)}clearNodeDirtyFlags(node)}finally{if(nodeTheme)popContextTheme();buffer.setSelectableMode(prevSelectableMode)}}function buildCascadeInputs(node,hasPrevBuffer){if(!hasPrevBuffer||!isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)||node.children===void 0)return{absoluteChildMutated:!1,descendantOverflowChanged:!1};return{absoluteChildMutated:isDirty(node.dirtyBits,node.dirtyEpoch,ABS_CHILD_BIT),descendantOverflowChanged:isDirty(node.dirtyBits,node.dirtyEpoch,DESC_OVERFLOW_BIT)}}function traceRenderDecision(node,props,layout,screenY,scrollOffset,hasPrevBuffer,ancestorCleared,layoutChanged,childPositionChanged,cascade,_nodeId,_traceThis,_cellDbg,_coversCellNow,_coversCellPrev,instrumentEnabled,stats,nodeTrace){let{contentAreaAffected,contentRegionCleared,skipBgFill,childrenNeedFreshRender}=cascade;if(instrumentEnabled){if(_traceThis){let flagStr=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT)&&"B",isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&"S",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",childPositionChanged&&"CP"].filter(Boolean).join(","),childHasPrev_=isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childPositionChanged||childrenNeedFreshRender?!1:hasPrevBuffer,childAncestorCleared_=contentRegionCleared||ancestorCleared&&!getEffectiveBg(props);nodeTrace.push({id:_nodeId,type:node.type,depth:_getNodeDepth(node),rect:`${layout.x},${layout.y} ${layout.width}x${layout.height}`,prevLayout:node.prevLayout?`${node.prevLayout.x},${node.prevLayout.y} ${node.prevLayout.width}x${node.prevLayout.height}`:"null",hasPrev:hasPrevBuffer,ancestorCleared,flags:flagStr,decision:"RENDER",layoutChanged,contentAreaAffected,contentRegionCleared,childrenNeedFreshRender,childHasPrev:childHasPrev_,childAncestorCleared:childAncestorCleared_,skipBgFill,bgColor:props.backgroundColor})}if(childrenNeedFreshRender&&node.children.length>0){let depth=_getNodeDepth(node);if(depth<stats.cascadeMinDepth)stats.cascadeMinDepth=depth;let id=node.props.id??node.type,flags=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",layoutChanged&&"L",childPositionChanged&&"CP"].filter(Boolean).join(""),entry=`${id}@${depth}[${flags}:${node.children.length}ch]`;stats.cascadeNodes+=(stats.cascadeNodes?" ":"")+entry}}if(_cellDbg&&(_coversCellNow||_coversCellPrev)){let id=props.id??node.type,depth=_getNodeDepth(node),prev=node.prevLayout,flags=[isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT)&&"C",isDirty(node.dirtyBits,node.dirtyEpoch,STYLE_PROPS_BIT)&&"P",layoutChanged&&"L",isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)&&"S",isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)&&"Ch",childPositionChanged&&"CP",isDirty(node.dirtyBits,node.dirtyEpoch,BG_BIT)&&"B"].filter(Boolean).join(","),msg=`RENDER ${id}@${depth} rect=${layout.x},${screenY} ${layout.width}x${layout.height} prev=${prev?`${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height}`:"null"} flags=[${flags}] hasPrev=${hasPrevBuffer} ancClr=${ancestorCleared} caa=${contentAreaAffected} prc=${contentRegionCleared} prm=${childrenNeedFreshRender} coversNow=${_coversCellNow} coversPrev=${_coversCellPrev} bg=${props.backgroundColor??"none"}`;_cellDbg.log.push(msg),cellLog.debug?.(msg)}}function executeRegionClearing(node,buffer,layout,scrollOffset,clipBounds,bufferIsCloned,layoutChanged,contentRegionCleared,descendantOverflowChanged,instrumentEnabled,stats,threadedInheritedBg){if(contentRegionCleared){if(instrumentEnabled)stats.clearOps++;clearNodeRegion(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg)}else if(bufferIsCloned&&layoutChanged&&node.prevLayout)clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg);if(descendantOverflowChanged)clearDescendantOverflowRegions(node,buffer,layout,scrollOffset,clipBounds,threadedInheritedBg)}function renderOwnContent(node,buffer,layout,props,nodeState,skipBgFill,instrumentEnabled,stats,ctx,bgOnlyChange=!1,useTextStyleFastPath=!1){let boxInheritedBg=node.type==="silvery-box"&&!getEffectiveBg(props)?nodeState.inheritedBg.color:void 0;if(node.type==="silvery-box"){if(instrumentEnabled)stats.boxNodes++;renderBox(node,buffer,layout,props,nodeState,skipBgFill,boxInheritedBg,bgOnlyChange)}else if(node.type==="silvery-text"){if(instrumentEnabled)stats.textNodes++;let textInheritedBg=nodeState.inheritedBg.color,textInheritedFg=nodeState.inheritedFg;if(useTextStyleFastPath){let style2=getTextStyle(props);if(style2.fg===null&&textInheritedFg!==void 0)style2.fg=textInheritedFg;let effectiveBg=style2.bg!==null?style2.bg:textInheritedBg??null,{x,width,height}=layout,y=layout.y-nodeState.scrollOffset;buffer.restyleRegion(x,y,width,height,{fg:style2.fg,bg:effectiveBg,underlineColor:style2.underlineColor??null,attrs:style2.attrs})}else renderText(node,buffer,layout,props,nodeState,textInheritedBg,textInheritedFg,ctx)}return boxInheritedBg}function planScrollRender(inputs){let{scrollOffsetChanged,visibleRangeChanged,hasStickyChildren,childrenNeedFreshRender,childrenDirty,hasPrevBuffer,ancestorCleared,contentRegionCleared,scrollBg}=inputs,scrollOnly=hasPrevBuffer&&scrollOffsetChanged&&!childrenDirty&&!childrenNeedFreshRender&&!hasStickyChildren&&!visibleRangeChanged,needsViewportClear=hasPrevBuffer&&!scrollOnly&&(scrollOffsetChanged||childrenDirty||childrenNeedFreshRender||visibleRangeChanged),stickyForceRefresh=hasStickyChildren&&hasPrevBuffer&&!needsViewportClear,reasons=[];if(scrollOnly)reasons.push("SHIFT");if(needsViewportClear){if(scrollOffsetChanged)reasons.push("scrollOffset");if(childrenDirty)reasons.push("childrenDirty");if(childrenNeedFreshRender)reasons.push("childrenNeedFreshRender");if(visibleRangeChanged)reasons.push("visibleRangeChanged")}if(stickyForceRefresh)reasons.push("stickyForceRefresh");return{tier:scrollOnly?"shift":needsViewportClear?"clear":"subtree-only",clearBg:scrollOnly||needsViewportClear?scrollBg:null,childHasPrev:needsViewportClear?!1:hasPrevBuffer,childAncestorCleared:needsViewportClear?!0:ancestorCleared||contentRegionCleared,stickyForceRefresh,reasons}}function renderScrollContainerChildren(node,buffer,props,nodeState,contentRegionCleared=!1,childrenNeedFreshRender=!1,ctx){let{clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged,inheritedBg,inheritedFg}=nodeState,instr=resolveInstrumentation(ctx),layout=node.boxRect,ss=node.scrollState;if(!layout||!ss)return;let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),childClipBounds=computeChildClipBounds(layout,props,clipBounds,0,!1,!0),scrollOffsetChanged=ss.offset!==ss.prevOffset,hasStickyChildren=!!(ss.stickyChildren&&ss.stickyChildren.length>0),visibleRangeChanged=ss.firstVisibleChild!==ss.prevFirstVisibleChild||ss.lastVisibleChild!==ss.prevLastVisibleChild,clearY=childClipBounds.top,clearHeight=childClipBounds.bottom-childClipBounds.top,contentX=layout.x+border.left+padding.left,contentWidth=layout.width-border.left-border.right-padding.left-padding.right,scrollBg=scrollOffsetChanged||isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childrenNeedFreshRender||visibleRangeChanged?getEffectiveBg(props)?parseColor(getEffectiveBg(props)):inheritedBg.color:null,plan=planScrollRender({scrollOffsetChanged,visibleRangeChanged,hasStickyChildren,childrenNeedFreshRender,childrenDirty:isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT),hasPrevBuffer,ancestorCleared,contentRegionCleared,scrollBg}),{tier,stickyForceRefresh}=plan,defaultChildHasPrev=plan.childHasPrev,defaultChildAncestorCleared=plan.childAncestorCleared;if(instr.enabled){if(instr.stats.scrollContainerCount++,tier!=="subtree-only"||stickyForceRefresh){instr.stats.scrollViewportCleared++;let reasons=[...plan.reasons];if(scrollOffsetChanged)reasons.push(`scrollOffset(${ss.prevOffset}->${ss.offset})`);reasons.push(`vp=${ss.viewportHeight} content=${ss.contentHeight} vis=${ss.firstVisibleChild}-${ss.lastVisibleChild}`),instr.stats.scrollClearReason=reasons.join("+")}}if(process?.env?.SILVERY_STRICT&&tier==="shift"&&hasStickyChildren)throw Error(`[SILVERY_STRICT] Scroll Tier 1 (buffer shift) activated with sticky children (node: ${props.id??node.type}, stickyCount: ${ss.stickyChildren?.length??0})`);let scrollDelta=ss.offset-(ss.prevOffset??ss.offset);if(tier==="shift"&&clearHeight>0){if(props.overflowIndicator===!0&&!border.top&&!border.bottom){let topIndicatorY=clearY,bottomIndicatorY=clearY+clearHeight-1;if(ss.prevOffset!=null&&ss.prevOffset>0)buffer.fill(contentX,topIndicatorY,contentWidth,1,{char:" ",bg:plan.clearBg});buffer.fill(contentX,bottomIndicatorY,contentWidth,1,{char:" ",bg:plan.clearBg})}buffer.scrollRegion(contentX,clearY,contentWidth,clearHeight,scrollDelta,{char:" ",bg:plan.clearBg})}if(tier==="clear"&&clearHeight>0)buffer.fill(contentX,clearY,contentWidth,clearHeight,{char:" ",bg:plan.clearBg});if(stickyForceRefresh&&clearHeight>0)buffer.fill(contentX,clearY,contentWidth,clearHeight,{char:" ",bg:null});let childAncestorLayoutChanged=isCurrentEpoch(node.layoutChangedThisFrame)||!!ancestorLayoutChanged,prevVisTop=ss.prevOffset??ss.offset,prevVisBottom=prevVisTop+ss.viewportHeight;for(let i=0;i<node.children.length;i++){let child=node.children[i];if(!child)continue;if(child.props.position==="sticky")continue;if(i<ss.firstVisibleChild||i>ss.lastVisibleChild)continue;let thisChildHasPrev=defaultChildHasPrev,thisChildAncestorCleared=defaultChildAncestorCleared;if(tier==="shift"){let childRect=child.boxRect;if(childRect){let childTop=childRect.y-layout.y-border.top-padding.top,childBottom=childTop+childRect.height,wasFullyVisible=childTop>=prevVisTop&&childBottom<=prevVisBottom;thisChildHasPrev=wasFullyVisible,thisChildAncestorCleared=wasFullyVisible?ancestorCleared||contentRegionCleared:!0}}if(stickyForceRefresh&&thisChildHasPrev)thisChildHasPrev=!1,thisChildAncestorCleared=!1;if(canSkipChildSubtree(child,thisChildHasPrev,childAncestorLayoutChanged))continue;renderNodeToBuffer(child,buffer,{scrollOffset:ss.offset,clipBounds:childClipBounds,hasPrevBuffer:thisChildHasPrev,ancestorCleared:thisChildAncestorCleared,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(ss.stickyChildren)for(let sticky of ss.stickyChildren){let child=node.children[sticky.index];if(!child?.boxRect)continue;let stickyScrollOffset=sticky.naturalTop-sticky.renderOffset;renderNodeToBuffer(child,buffer,{scrollOffset:stickyScrollOffset,clipBounds:childClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}}function renderNormalChildren(node,buffer,props,nodeState,childPositionChanged=!1,contentRegionCleared=!1,childrenNeedFreshRender=!1,ctx){let{scrollOffset,clipBounds,hasPrevBuffer,ancestorCleared,bufferIsCloned,ancestorLayoutChanged,inheritedBg,inheritedFg}=nodeState,instr=resolveInstrumentation(ctx),layout=node.boxRect;if(!layout)return;let clipX=(props.overflowX??props.overflow)==="hidden",clipY=(props.overflowY??props.overflow)==="hidden",effectiveClipBounds=clipX||clipY?computeChildClipBounds(layout,props,clipBounds,scrollOffset,clipX,clipY):clipBounds,hasStickyChildren=!!(node.stickyChildren&&node.stickyChildren.length>0),stickyForceRefresh=hasStickyChildren&&hasPrevBuffer;if(stickyForceRefresh){let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),clearX=layout.x+border.left+padding.left,clearY=layout.y-scrollOffset+border.top+padding.top,clearW=layout.width-border.left-border.right-padding.left-padding.right,clearH=layout.height-border.top-border.bottom-padding.top-padding.bottom;if(clipBounds){let{top:clipTop,bottom:clipBottom}=clipBounds;if(clearY<clipTop)clearH-=clipTop-clearY,clearY=clipTop;if(clearY+clearH>clipBottom)clearH=clipBottom-clearY;if(clipBounds.left!==void 0&&clearX<clipBounds.left)clearW-=clipBounds.left-clearX,clearX=clipBounds.left;if(clipBounds.right!==void 0&&clearX+clearW>clipBounds.right)clearW=clipBounds.right-clearX}if(clearW>0&&clearH>0)buffer.fill(clearX,clearY,clearW,clearH,{char:" ",bg:null})}let childrenNeedRepaint=isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT)||childPositionChanged||childrenNeedFreshRender;if(instr.enabled&&childrenNeedRepaint&&hasPrevBuffer){instr.stats.normalChildrenRepaint++;let reasons=[];if(isDirty(node.dirtyBits,node.dirtyEpoch,CHILDREN_BIT))reasons.push("childrenDirty");if(childPositionChanged)reasons.push("childPositionChanged");if(childrenNeedFreshRender)reasons.push("childrenNeedFreshRender");instr.stats.normalRepaintReason=reasons.join("+")}let childHasPrev=childrenNeedRepaint?!1:hasPrevBuffer,childAncestorCleared=contentRegionCleared||ancestorCleared&&!getEffectiveBg(props),childAncestorLayoutChanged=isCurrentEpoch(node.layoutChangedThisFrame)||!!ancestorLayoutChanged;if(stickyForceRefresh)childHasPrev=!1,childAncestorCleared=!1;let hasAbsoluteChildren=!1;for(let child of node.children){let childProps=child.props;if(childProps.position==="absolute"){hasAbsoluteChildren=!0;continue}if(hasStickyChildren&&childProps.position==="sticky")continue;if(canSkipChildSubtree(child,childHasPrev,childAncestorLayoutChanged))continue;renderNodeToBuffer(child,buffer,{scrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:childHasPrev,ancestorCleared:childAncestorCleared,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(node.stickyChildren)for(let sticky of node.stickyChildren){let child=node.children[sticky.index];if(!child?.boxRect)continue;let stickyScrollOffset=sticky.naturalTop-sticky.renderOffset;renderNodeToBuffer(child,buffer,{scrollOffset:stickyScrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}if(hasAbsoluteChildren)for(let child of node.children){if(child.props.position!=="absolute")continue;renderNodeToBuffer(child,buffer,{scrollOffset,clipBounds:effectiveClipBounds,hasPrevBuffer:!1,ancestorCleared:!1,bufferIsCloned,ancestorLayoutChanged:childAncestorLayoutChanged,inheritedBg,inheritedFg},ctx)}}function canSkipChildSubtree(child,childHasPrev,childAncestorLayoutChanged){if(!childHasPrev)return!1;if(childAncestorLayoutChanged)return!1;if(isDirty(child.dirtyBits,child.dirtyEpoch,SUBTREE_BIT))return!1;if(isCurrentEpoch(child.layoutChangedThisFrame))return!1;if(child.scrollState&&child.scrollState.offset!==child.scrollState.prevOffset)return!1;return!0}function clearNodeDirtyFlags(node){node.dirtyBits=0,node.dirtyEpoch=INITIAL_EPOCH,node.layoutChangedThisFrame=INITIAL_EPOCH}function clearDirtyFlags(node){clearNodeDirtyFlags(node);for(let child of node.children)if(child.layoutNode)clearDirtyFlags(child);else clearVirtualTextFlags(child)}function clearVirtualTextFlags(node){clearNodeDirtyFlags(node);for(let child of node.children)clearVirtualTextFlags(child)}function hasChildPositionChanged(node){for(let child of node.children)if(child.boxRect&&child.prevLayout){if(child.boxRect.x!==child.prevLayout.x||child.boxRect.y!==child.prevLayout.y)return!0}return!1}function hasDescendantWithBg(node){for(let child of node.children){if(getEffectiveBg(child.props))return!0;if(child.children.length>0&&hasDescendantWithBg(child))return!0}return!1}function computeChildClipBounds(layout,props,parentClip,scrollOffset=0,horizontal=!0,vertical=!0){let border=props.borderStyle?getBorderSize(props):{top:0,bottom:0,left:0,right:0},padding=getPadding(props),adjustedY=layout.y-scrollOffset,nodeClip=vertical?{top:adjustedY+border.top+padding.top,bottom:adjustedY+layout.height-border.bottom-padding.bottom}:{top:-1/0,bottom:1/0};if(horizontal)nodeClip.left=layout.x+border.left+padding.left,nodeClip.right=layout.x+layout.width-border.right-padding.right;if(!parentClip)return nodeClip;let result={top:vertical?Math.max(parentClip.top,nodeClip.top):parentClip.top,bottom:vertical?Math.min(parentClip.bottom,nodeClip.bottom):parentClip.bottom};if(horizontal&&nodeClip.left!==void 0&&nodeClip.right!==void 0)result.left=Math.max(parentClip.left??0,nodeClip.left),result.right=Math.min(parentClip.right??1/0,nodeClip.right);else if(parentClip.left!==void 0&&parentClip.right!==void 0)result.left=parentClip.left,result.right=parentClip.right;return result}function clearDescendantOverflowRegions(node,buffer,layout,scrollOffset,clipBounds,threadedInheritedBg){let clearBg=threadedInheritedBg.color,nodeRight=layout.x+layout.width,nodeBottom=layout.y-scrollOffset+layout.height,nodeLeft=layout.x,nodeTop=layout.y-scrollOffset;_clearDescendantOverflow(node.children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg)}function _clearDescendantOverflow(children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg){for(let child of children){if(child.prevLayout&&isCurrentEpoch(child.layoutChangedThisFrame)){let prev=child.prevLayout,prevRight=prev.x+prev.width,prevBottom=prev.y-scrollOffset+prev.height,prevTop=prev.y-scrollOffset;if(prevRight>nodeRight){let overflowX=nodeRight,overflowWidth=Math.min(prevRight,buffer.width)-overflowX,overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height);if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prevBottom>nodeBottom){let overflowTop=Math.max(nodeBottom,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height),overflowX=Math.max(prev.x,clipBounds?.left??0),overflowWidth=Math.min(prevRight,clipBounds?.right??buffer.width)-overflowX;if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prev.x<nodeLeft){let overflowX=Math.max(prev.x,0),overflowWidth=Math.min(nodeLeft,buffer.width)-overflowX,overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(prevBottom,clipBounds?.bottom??buffer.height);if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}if(prevTop<nodeTop){let overflowTop=Math.max(prevTop,clipBounds?.top??0),overflowBottom=Math.min(nodeTop,clipBounds?.bottom??buffer.height),overflowX=Math.max(prev.x,clipBounds?.left??0),overflowWidth=Math.min(prevRight,clipBounds?.right??buffer.width)-overflowX;if(overflowWidth>0&&overflowBottom>overflowTop)buffer.fill(overflowX,overflowTop,overflowWidth,overflowBottom-overflowTop,{char:" ",bg:clearBg})}}if(isDirty(child.dirtyBits,child.dirtyEpoch,SUBTREE_BIT)&&child.children!==void 0)_clearDescendantOverflow(child.children,buffer,nodeLeft,nodeTop,nodeRight,nodeBottom,scrollOffset,clipBounds,clearBg)}}function clearNodeRegion(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,threadedInheritedBg){let inherited=threadedInheritedBg,clearBg=inherited.color,screenY=layout.y-scrollOffset,parentRect=node.parent?.boxRect,parentBottom=parentRect?parentRect.y-scrollOffset+parentRect.height:void 0,clearY=clipBounds?Math.max(screenY,clipBounds.top):screenY,clearBottom=clipBounds?Math.min(screenY+layout.height,clipBounds.bottom):screenY+layout.height;if(parentBottom!==void 0)clearBottom=Math.min(clearBottom,parentBottom);let{x:clearX,width:clearWidth}=layout;if(clipBounds?.left!==void 0&&clipBounds.right!==void 0){if(clearX<clipBounds.left)clearWidth-=clipBounds.left-clearX,clearX=clipBounds.left;if(clearX+clearWidth>clipBounds.right)clearWidth=Math.max(0,clipBounds.right-clearX)}if(inherited.ancestorRect){let ancestorRight=inherited.ancestorRect.x+inherited.ancestorRect.width,ancestorLeft=inherited.ancestorRect.x;if(clearX<ancestorLeft)clearWidth-=ancestorLeft-clearX,clearX=ancestorLeft;if(clearX+clearWidth>ancestorRight)clearWidth=Math.max(0,ancestorRight-clearX)}let clearHeight=clearBottom-clearY;if(clearHeight>0&&clearWidth>0){let _cellDbg2=getCellDebug();if(_cellDbg2&&cellCoversPoint(_cellDbg2,clearX,clearY,clearWidth,clearHeight)){let msg=`CLEAR_REGION ${node.props.id??node.type} fill=${clearX},${clearY} ${clearWidth}x${clearHeight} bg=${String(clearBg)} COVERS TARGET`;_cellDbg2.log.push(msg),cellLog.debug?.(msg)}buffer.fill(clearX,clearY,clearWidth,clearHeight,{char:" ",bg:clearBg})}clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,inherited)}function clearExcessArea(node,buffer,layout,scrollOffset,clipBounds,layoutChanged,inherited){if(!layoutChanged||!node.prevLayout)return;let prev=node.prevLayout,_cellDbg3=getCellDebug(),_prevCoversCell3=_cellDbg3&&cellCoversPoint(_cellDbg3,prev.x,prev.y-scrollOffset,prev.width,prev.height);if(prev.width<=layout.width&&prev.height<=layout.height){if(_cellDbg3&&_prevCoversCell3){let msg=`EXCESS_SKIP_NO_SHRINK ${node.props.id??node.type} prev=${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height} now=${layout.x},${layout.y-scrollOffset} ${layout.width}x${layout.height}`;_cellDbg3.log.push(msg),cellLog.debug?.(msg)}return}if(prev.x!==layout.x||prev.y!==layout.y){if(_cellDbg3&&_prevCoversCell3){let msg=`EXCESS_SKIP_MOVED ${node.props.id??node.type} prev=${prev.x},${prev.y-scrollOffset} ${prev.width}x${prev.height} now=${layout.x},${layout.y-scrollOffset} ${layout.width}x${layout.height} (dx=${layout.x-prev.x} dy=${layout.y-prev.y})`;_cellDbg3.log.push(msg),cellLog.debug?.(msg)}return}let clearBg=inherited.color,screenY=layout.y-scrollOffset,prevScreenY=prev.y-scrollOffset,clipRect=inherited.ancestorRect??node.parent?.boxRect;if(!clipRect)return;let clipRectBottom=clipRect.y-scrollOffset+clipRect.height,clipRectRight=clipRect.x+clipRect.width,parent=node.parent;if(parent?.boxRect){let parentProps=parent.props,border=getBorderSize(parentProps),padding=getPadding(parentProps),parentRight=parent.boxRect.x+parent.boxRect.width-border.right-padding.right,parentBottom=parent.boxRect.y-scrollOffset+parent.boxRect.height-border.bottom-padding.bottom;clipRectRight=Math.min(clipRectRight,parentRight),clipRectBottom=Math.min(clipRectBottom,parentBottom)}if(prev.width>layout.width){let excessX=layout.x+layout.width,excessWidth=prev.width-layout.width;if(excessX+excessWidth>clipRectRight)excessWidth=Math.max(0,clipRectRight-excessX);if(excessWidth>0)clippedFill(buffer,excessX,excessWidth,prevScreenY,prevScreenY+prev.height,clipBounds,clipRectBottom,clearBg)}if(prev.height>layout.height){let bottomWidth=prev.width;if(layout.x+bottomWidth>clipRectRight)bottomWidth=Math.max(0,clipRectRight-layout.x);clippedFill(buffer,layout.x,bottomWidth,screenY+layout.height,prevScreenY+prev.height,clipBounds,clipRectBottom,clearBg)}}function clippedFill(buffer,x,width,top,bottom,clipBounds,outerBottom,bg){let clippedTop=clipBounds?Math.max(top,clipBounds.top):top,clippedBottom=Math.min(clipBounds?Math.min(bottom,clipBounds.bottom):bottom,outerBottom),clippedX=x,clippedWidth=width;if(clipBounds?.left!==void 0&&clipBounds.right!==void 0){if(clippedX<clipBounds.left)clippedWidth-=clipBounds.left-clippedX,clippedX=clipBounds.left;if(clippedX+clippedWidth>clipBounds.right)clippedWidth=Math.max(0,clipBounds.right-clippedX)}let height=clippedBottom-clippedTop;if(height>0&&clippedWidth>0)buffer.fill(clippedX,clippedTop,clippedWidth,height,{char:" ",bg})}var contentLog,traceLog,cellLog,_instrumentEnabled,_renderPhaseStats,_renderPhaseCallCount=0,_nodeTrace,_nodeTraceEnabled,_reactiveEnabled,_reactiveVerifyEnabled;var init_render_phase=__esm(()=>{init_buffer();init_helpers();init_render_box();init_render_helpers();init_render_text();init_state();init_reactive_node();contentLog=createLogger7("silvery:content"),traceLog=createLogger7("silvery:content:trace"),cellLog=createLogger7("silvery:content:cell");_instrumentEnabled=typeof process<"u"&&(envTruthy(process.env?.SILVERY_STRICT)||envTruthy(process.env?.SILVERY_INSTRUMENT)),_renderPhaseStats={nodesVisited:0,nodesRendered:0,nodesSkipped:0,textNodes:0,boxNodes:0,clearOps:0,noPrevBuffer:0,flagContentDirty:0,flagStylePropsDirty:0,flagLayoutChanged:0,flagSubtreeDirty:0,flagChildrenDirty:0,flagChildPositionChanged:0,flagAncestorLayoutChanged:0,scrollContainerCount:0,scrollViewportCleared:0,scrollClearReason:"",normalChildrenRepaint:0,normalRepaintReason:"",cascadeMinDepth:999,cascadeNodes:"",_noopSkip:0,_prevBufferNull:0,_prevBufferDimMismatch:0,_hasPrevBuffer:0,_layoutW:0,_layoutH:0,_prevW:0,_prevH:0,_callCount:0},_nodeTrace=[],_nodeTraceEnabled=typeof process<"u"&&envTruthy(process.env?.SILVERY_STRICT),_reactiveEnabled=typeof process>"u"||process.env?.SILVERY_REACTIVE!=="0",_reactiveVerifyEnabled=_reactiveEnabled&&typeof process<"u"&&envTruthy(process.env?.SILVERY_STRICT)});import{createLogger as createLogger8}from"loggily";function createAg(root,options){let measurer=options?.measurer,ctx=measurer?{measurer}:void 0,_prevBuffer=null,hasScroll=!1,hasSticky=!1;function doLayout(cols,rows,opts){let __stack6=[];try{let prevRootLayout=root.boxRect;let dimensionsChanged=prevRootLayout&&(prevRootLayout.width!==cols||prevRootLayout.height!==rows);if(!dimensionsChanged&&!hasLayoutDirty()&&!hasScrollDirty())return log7.debug?.("layout: skipped (no layoutDirty, no scrollDirty, dimensions unchanged)"),{tMeasure:0,tLayout:0,tScroll:0,tScrollRect:0,tNotify:0};const render=__using(__stack6,baseLog.span("pipeline",{width:cols,height:rows}),0);let tMeasure;{let __stack=[];try{const _m=__using(__stack,render.span("measure"),0);let t=performance.now();measurePhase(root,ctx);tMeasure=performance.now()-t;log7.debug?.(`measure: ${tMeasure.toFixed(2)}ms`)}catch(_catch){var _err=_catch,_hasErr=1}finally{__callDispose(__stack,_err,_hasErr)}}let tLayout;{let __stack2=[];try{const _l=__using(__stack2,render.span("layout"),0);let t=performance.now();layoutPhase(root,cols,rows);tLayout=performance.now()-t;log7.debug?.(`layout: ${tLayout.toFixed(2)}ms`)}catch(_catch2){var _err2=_catch2,_hasErr2=1}finally{__callDispose(__stack2,_err2,_hasErr2)}}if(!hasScroll||!hasSticky){let features=detectPipelineFeatures(root);if(features.hasScroll)hasScroll=!0;if(features.hasSticky)hasSticky=!0}let tScroll;if(hasScroll){let __stack3=[];try{const _s=__using(__stack3,render.span("scroll"),0);let t=performance.now();scrollPhase(root,{skipStateUpdates:opts?.skipScrollStateUpdates});tScroll=performance.now()-t}catch(_catch3){var _err3=_catch3,_hasErr3=1}finally{__callDispose(__stack3,_err3,_hasErr3)}}else tScroll=0;if(hasSticky)stickyPhase(root);let tScrollRect;{let __stack4=[];try{const _r=__using(__stack4,render.span("scrollRect"),0);let t=performance.now();if(hasScroll||hasSticky)scrollrectPhase(root);else scrollrectPhaseSimple(root);tScrollRect=performance.now()-t}catch(_catch4){var _err4=_catch4,_hasErr4=1}finally{__callDispose(__stack4,_err4,_hasErr4)}}let tNotify=0;if(!opts?.skipLayoutNotifications){let __stack5=[];try{const _n=__using(__stack5,render.span("notify"),0);let t=performance.now();notifyLayoutSubscribers(root);tNotify=performance.now()-t}catch(_catch5){var _err5=_catch5,_hasErr5=1}finally{__callDispose(__stack5,_err5,_hasErr5)}}let acc=globalThis.__silvery_bench_phases;if(acc)acc.measure+=tMeasure,acc.layout+=tLayout,acc.scroll+=tScroll,acc.scrollRect+=tScrollRect,acc.notify+=tNotify,acc.layoutTotal+=tMeasure+tLayout+tScroll+tScrollRect+tNotify;return{tMeasure,tLayout,tScroll,tScrollRect,tNotify}}catch(_catch6){var _err6=_catch6,_hasErr6=1}finally{__callDispose(__stack6,_err6,_hasErr6)}}function doRender(opts){clearBgConflictWarnings();let prevBuffer=opts?.fresh?null:opts?.prevBuffer!==void 0?opts.prevBuffer:_prevBuffer,tContent,buffer;{let t=performance.now();buffer=renderPhase(root,prevBuffer,ctx),tContent=performance.now()-t,log7.debug?.(`content: ${tContent.toFixed(2)}ms`)}if(!opts?.fresh)_prevBuffer=buffer;clearDirtyTracking();let acc=globalThis.__silvery_bench_phases;if(acc)acc.content+=tContent,acc.renderCalls+=1;return{frame:createTextFrame(buffer),buffer,prevBuffer,tContent}}function agCreateNode(type,props){let layoutNode=getLayoutEngine().createNode();return{type,props,children:[],parent:null,layoutNode,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:INITIAL_EPOCH,layoutDirty:!0,dirtyBits:ALL_RECONCILER_BITS,dirtyEpoch:getRenderEpoch(),layoutSubscribers:new Set}}function agInsertChild(parent,child,index){if(child.parent)agRemoveChild(child.parent,child);if(parent.children.splice(index,0,child),child.parent=parent,parent.layoutNode&&child.layoutNode){let layoutIndex=parent.children.slice(0,index).filter((c)=>c.layoutNode!==null).length;parent.layoutNode.insertChild(child.layoutNode,layoutIndex)}}function agRemoveChild(parent,child){let index=parent.children.indexOf(child);if(index===-1)return;if(parent.children.splice(index,1),parent.layoutNode&&child.layoutNode)parent.layoutNode.removeChild(child.layoutNode),child.layoutNode.free();child.parent=null}return{root,layout(dims,options2){if(measurer)runWithMeasurer(measurer,()=>doLayout(dims.cols,dims.rows,options2));else doLayout(dims.cols,dims.rows,options2)},render(options2){let result=measurer?runWithMeasurer(measurer,()=>doRender(options2)):doRender(options2);return{frame:result.frame,buffer:result.buffer,prevBuffer:result.prevBuffer}},resetBuffer(){_prevBuffer=null},createNode:agCreateNode,insertChild:agInsertChild,removeChild:agRemoveChild,updateProps(node,props,oldProps){if(node.props=props,node.layoutNode)node.layoutNode.markDirty()},setText(node,text){node.textContent=text;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(node.dirtyBits=node.dirtyEpoch!==epoch?bits:node.dirtyBits|bits,node.dirtyEpoch=epoch,node.layoutNode)node.layoutNode.markDirty()},toString(){return`[Ag root=${root.type} children=${root.children.length}]`}}}var log7,baseLog;var init_ag=__esm(()=>{init_buffer();init_unicode();init_measure_phase();init_layout_phase();init_render_phase();init_dirty_tracking();log7=createLogger8("silvery:render"),baseLog=createLogger8("@silvery/ag-react")});var init_render_phase_adapter=__esm(()=>{init_helpers();init_unicode();init_render_text()});import{createLogger as createLogger9}from"loggily";function executeRender(root,width,height,prevBuffer,options="fullscreen",config){if(config?.measurer)return runWithMeasurer(config.measurer,()=>{return executeRenderCore(root,width,height,prevBuffer,options,config)});return executeRenderCore(root,width,height,prevBuffer,options,config)}function executeRenderCore(root,width,height,prevBuffer,options="fullscreen",config){let opts=typeof options==="string"?{mode:options}:options,{mode="fullscreen",skipLayoutNotifications=!1,skipScrollStateUpdates=!1,scrollbackOffset=0,termRows,cursorPos}=opts;if(process?.env?.SILVERY_DEV&&prevBuffer===null&&root.prevLayout!==null&&!skipLayoutNotifications)log8.warn?.("executeRender called with prevBuffer=null on frame 2+ — "+"incremental content rendering is disabled (full render every frame). Track the returned buffer and pass it as prevBuffer on subsequent renders.");let start=performance.now(),ag=createAg(root,{measurer:config?.measurer});ag.layout({cols:width,rows:height},{skipLayoutNotifications,skipScrollStateUpdates});let{buffer}=ag.render({prevBuffer}),tLayout=performance.now()-start,output,tOutput;{let t4=performance.now(),outputFn=config?.outputPhaseFn??outputPhase;try{output=outputFn(prevBuffer,buffer,mode,scrollbackOffset,termRows,cursorPos)}catch(e){if(e instanceof Error)e.__silvery_buffer=buffer;throw e}tOutput=performance.now()-t4,log8.debug?.(`output: ${tOutput.toFixed(2)}ms (${output.length} bytes)`)}let total=performance.now()-start;globalThis.__silvery_last_pipeline={layout:tLayout,output:tOutput,total,incremental:prevBuffer!==null},globalThis.__silvery_render_count=(globalThis.__silvery_render_count??0)+1;let acc=globalThis.__silvery_bench_phases;if(acc)acc.output+=tOutput,acc.total+=total,acc.pipelineCalls+=1;return log8.debug?.(`pipeline: layout+render=${tLayout.toFixed(1)}ms output=${tOutput.toFixed(1)}ms total=${total.toFixed(1)}ms`),{output,buffer}}var log8,baseLog2;var init_pipeline=__esm(()=>{init_unicode();init_ag();init_measure_phase();init_layout_phase();init_render_phase();init_render_phase_adapter();init_output_phase();init_render_phase_adapter();init_render_phase();init_layout_phase();init_measure_phase();init_output_phase();log8=createLogger9("silvery:render"),baseLog2=createLogger9("@silvery/ag-react")});var init_pipeline2=__esm(()=>{init_pipeline()});function classifyPropChanges(oldProps,newProps){if(oldProps===newProps)return NO_CHANGES;let keysA=Object.keys(oldProps),keysB=Object.keys(newProps),sameKeyCount=keysA.length===keysB.length,layoutChanged=!1,contentChanged=!1,anyChanged=!1;for(let key of keysA)if(oldProps[key]!==newProps[key]){if(anyChanged=!0,LAYOUT_PROPS.has(key))layoutChanged=!0;if(contentChanged!=="text"){if(key==="children"){let oldIsPrimitive=typeof oldProps[key]==="string"||typeof oldProps[key]==="number",newIsPrimitive=typeof newProps[key]==="string"||typeof newProps[key]==="number";if(oldIsPrimitive||newIsPrimitive)contentChanged="text"}else if(TEXT_CONTENT_PROPS.has(key))contentChanged="text";else if(contentChanged!=="style"&&STYLE_PROPS.has(key))contentChanged="style"}if(layoutChanged&&contentChanged==="text")break}if(!sameKeyCount){for(let key of keysB)if(!(key in oldProps)){if(anyChanged=!0,LAYOUT_PROPS.has(key))layoutChanged=!0;if(contentChanged!=="text"){if(key==="children"){if(typeof newProps[key]==="string"||typeof newProps[key]==="number")contentChanged="text"}else if(TEXT_CONTENT_PROPS.has(key))contentChanged="text";else if(contentChanged!=="style"&&STYLE_PROPS.has(key))contentChanged="style"}if(layoutChanged&&contentChanged==="text")break}}if(!anyChanged&&!sameKeyCount)anyChanged=!0;if(!anyChanged)return NO_CHANGES;return{anyChanged,layoutChanged,contentChanged}}var LAYOUT_PROPS,TEXT_CONTENT_PROPS,STYLE_PROPS,NO_CHANGES;var init_helpers2=__esm(()=>{LAYOUT_PROPS=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","flexDirection","flexWrap","justifyContent","alignItems","alignContent","alignSelf","flexGrow","flexShrink","flexBasis","padding","paddingX","paddingY","paddingTop","paddingBottom","paddingLeft","paddingRight","margin","marginX","marginY","marginTop","marginBottom","marginLeft","marginRight","gap","columnGap","rowGap","borderStyle","borderTop","borderBottom","borderLeft","borderRight","display","position","top","left","bottom","right","aspectRatio","overflow","overflowX","overflowY"]),TEXT_CONTENT_PROPS=new Set(["wrap","internal_transform"]),STYLE_PROPS=new Set(["color","backgroundColor","bold","dim","dimColor","italic","underline","underlineStyle","underlineColor","strikethrough","inverse","borderColor","borderBackgroundColor","borderTopBackgroundColor","borderBottomBackgroundColor","borderLeftBackgroundColor","borderRightBackgroundColor","borderStyle","outlineStyle","outlineColor","outlineDimColor","outlineTop","outlineBottom","outlineLeft","outlineRight","theme"]),NO_CHANGES={anyChanged:!1,layoutChanged:!1,contentChanged:!1}});import{createLogger as createLogger10}from"loggily";function createNode(type,props,measurer){let layoutNode=getLayoutEngine().createNode(),epoch=getRenderEpoch(),node={type,props,children:[],parent:null,layoutNode,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:epoch,layoutDirty:!0,dirtyBits:ALL_RECONCILER_BITS,dirtyEpoch:epoch,layoutSubscribers:new Set};if(type==="silvery-box")applyBoxProps(layoutNode,props);if(type==="silvery-text"){let cachedText=null,measureCache=new Map;layoutNode.setMeasureFunc((width,widthMode,height,heightMode)=>{measureStats.calls++,measureLog.debug?.(`measure "${collectPlainTextSkipHidden(node).slice(0,40)}" width=${width} widthMode=${widthMode} height=${height} heightMode=${heightMode}`);let cacheKey=`${width}|${widthMode}|${height}|${heightMode}`,cached=measureCache.get(cacheKey);if(cached&&cachedText!==null&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))return measureStats.cacheHits++,cached;let text;if(cachedText!==null&&!isDirty(node.dirtyBits,node.dirtyEpoch,CONTENT_BIT))text=cachedText;else{measureStats.textCollects++;let newText=collectPlainTextSkipHidden(node);if(newText!==cachedText)measureCache.clear();text=newText,cachedText=text,node.dirtyBits&=~CONTENT_BIT}if(!text)return{width:0,height:0};let cachedAfterCollect=measureCache.get(cacheKey);if(cachedAfterCollect)return measureStats.cacheHits++,cachedAfterCollect;let lines=text.split(`
72
72
  `),maxWidth=widthMode==="undefined"||Number.isNaN(width)?Number.POSITIVE_INFINITY:width,{wrap}=node.props,isTruncate=wrap==="truncate"||wrap==="truncate-start"||wrap==="truncate-middle"||wrap==="truncate-end"||wrap==="clip"||wrap===!1,isHardWrap=wrap==="hard",totalHeight=0,actualWidth=0,dw=measurer?measurer.displayWidth.bind(measurer):displayWidth,wt=measurer?measurer.wrapText.bind(measurer):wrapText,lh=getActiveLineHeight();for(let line of lines){measureStats.displayWidthCalls++;let lineWidth=dw(line);if(isTruncate||lineWidth<=maxWidth)totalHeight+=lh,actualWidth=Math.max(actualWidth,isTruncate?Math.min(lineWidth,maxWidth):lineWidth);else if(isHardWrap)if(Number.isFinite(maxWidth)&&maxWidth>0)totalHeight+=Math.ceil(lineWidth/maxWidth)*lh,actualWidth=Math.max(actualWidth,maxWidth);else totalHeight+=lh,actualWidth=Math.max(actualWidth,lineWidth);else{let wrapped=wt(line,maxWidth,!1,!0);totalHeight+=wrapped.length*lh;for(let wl of wrapped)actualWidth=Math.max(actualWidth,dw(wl))}}let resultHeight=Math.max(lh,totalHeight);if(heightMode==="exactly"&&Number.isFinite(height))resultHeight=height;else if(heightMode==="at-most"&&Number.isFinite(height))resultHeight=Math.min(resultHeight,height);let result={width:Math.min(actualWidth,maxWidth),height:resultHeight};return measureCache.set(cacheKey,result),result})}return node}function createRootNode(){let node=createNode("silvery-root",{}),c=getConstants();return node.layoutNode.setFlexDirection(c.FLEX_DIRECTION_COLUMN),node}function createVirtualTextNode(props){let epoch=getRenderEpoch();return{type:"silvery-text",props,children:[],parent:null,layoutNode:null,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:INITIAL_EPOCH,layoutDirty:!1,dirtyBits:CONTENT_BIT|STYLE_PROPS_BIT|BG_BIT|SUBTREE_BIT,dirtyEpoch:epoch,layoutSubscribers:new Set,isRawText:!1,inlineRects:null}}function applyBoxProps(layoutNode,props,oldProps){let c=getConstants(),wasRemoved=(prop)=>oldProps?.[prop]!==void 0&&props[prop]===void 0;if(props.width!==void 0){if(typeof props.width==="string"&&props.width.endsWith("%"))layoutNode.setWidthPercent(Number.parseFloat(props.width));else if(typeof props.width==="number")layoutNode.setWidth(props.width);else if(props.width==="auto")layoutNode.setWidthAuto()}else if(wasRemoved("width"))layoutNode.setWidthAuto();if(props.height!==void 0){if(typeof props.height==="string"&&props.height.endsWith("%"))layoutNode.setHeightPercent(Number.parseFloat(props.height));else if(typeof props.height==="number")layoutNode.setHeight(props.height);else if(props.height==="auto")layoutNode.setHeightAuto()}else if(wasRemoved("height"))layoutNode.setHeightAuto();if(props.minWidth!==void 0){if(typeof props.minWidth==="string"&&props.minWidth.endsWith("%"))layoutNode.setMinWidthPercent(Number.parseFloat(props.minWidth));else if(typeof props.minWidth==="number")layoutNode.setMinWidth(props.minWidth)}else if(wasRemoved("minWidth"))layoutNode.setMinWidth(0);if(props.minHeight!==void 0){if(typeof props.minHeight==="string"&&props.minHeight.endsWith("%"))layoutNode.setMinHeightPercent(Number.parseFloat(props.minHeight));else if(typeof props.minHeight==="number")layoutNode.setMinHeight(props.minHeight)}else if(wasRemoved("minHeight"))layoutNode.setMinHeight(0);if(props.maxWidth!==void 0){if(typeof props.maxWidth==="string"&&props.maxWidth.endsWith("%"))layoutNode.setMaxWidthPercent(Number.parseFloat(props.maxWidth));else if(typeof props.maxWidth==="number")layoutNode.setMaxWidth(props.maxWidth)}else if(wasRemoved("maxWidth"))layoutNode.setMaxWidth(Number.POSITIVE_INFINITY);if(props.maxHeight!==void 0){if(typeof props.maxHeight==="string"&&props.maxHeight.endsWith("%"))layoutNode.setMaxHeightPercent(Number.parseFloat(props.maxHeight));else if(typeof props.maxHeight==="number")layoutNode.setMaxHeight(props.maxHeight)}else if(wasRemoved("maxHeight"))layoutNode.setMaxHeight(Number.POSITIVE_INFINITY);if(props.flexGrow!==void 0)layoutNode.setFlexGrow(props.flexGrow);else if(wasRemoved("flexGrow"))layoutNode.setFlexGrow(0);if(props.flexShrink!==void 0)layoutNode.setFlexShrink(props.flexShrink);else if(wasRemoved("flexShrink"))layoutNode.setFlexShrink(1);if(props.flexBasis!==void 0){if(typeof props.flexBasis==="string"&&props.flexBasis.endsWith("%"))layoutNode.setFlexBasisPercent(Number.parseFloat(props.flexBasis));else if(props.flexBasis==="auto")layoutNode.setFlexBasisAuto();else if(typeof props.flexBasis==="number")layoutNode.setFlexBasis(props.flexBasis)}else if(wasRemoved("flexBasis"))layoutNode.setFlexBasisAuto();if(props.flexDirection!==void 0){let directionMap={row:c.FLEX_DIRECTION_ROW,column:c.FLEX_DIRECTION_COLUMN,"row-reverse":c.FLEX_DIRECTION_ROW_REVERSE,"column-reverse":c.FLEX_DIRECTION_COLUMN_REVERSE};layoutNode.setFlexDirection(directionMap[props.flexDirection]??c.FLEX_DIRECTION_ROW)}else if(wasRemoved("flexDirection"))layoutNode.setFlexDirection(c.FLEX_DIRECTION_ROW);if(props.flexWrap!==void 0){let wrapMap={nowrap:c.WRAP_NO_WRAP,wrap:c.WRAP_WRAP,"wrap-reverse":c.WRAP_WRAP_REVERSE};layoutNode.setFlexWrap(wrapMap[props.flexWrap]??c.WRAP_NO_WRAP)}else if(wasRemoved("flexWrap"))layoutNode.setFlexWrap(c.WRAP_NO_WRAP);if(props.alignItems!==void 0)layoutNode.setAlignItems(alignToConstant(props.alignItems));else if(wasRemoved("alignItems"))layoutNode.setAlignItems(c.ALIGN_STRETCH);if(props.alignSelf!==void 0)if(props.alignSelf==="auto")layoutNode.setAlignSelf(c.ALIGN_AUTO);else layoutNode.setAlignSelf(alignToConstant(props.alignSelf));else if(wasRemoved("alignSelf"))layoutNode.setAlignSelf(c.ALIGN_AUTO);if(props.alignContent!==void 0)layoutNode.setAlignContent(alignToConstant(props.alignContent));else if(wasRemoved("alignContent"))layoutNode.setAlignContent(c.ALIGN_FLEX_START);if(props.justifyContent!==void 0)layoutNode.setJustifyContent(justifyToConstant(props.justifyContent));else if(wasRemoved("justifyContent"))layoutNode.setJustifyContent(c.JUSTIFY_FLEX_START);if(applySpacing(layoutNode,"padding",props),applySpacing(layoutNode,"margin",props),props.gap!==void 0)layoutNode.setGap(c.GUTTER_ALL,props.gap);else if(wasRemoved("gap"))layoutNode.setGap(c.GUTTER_ALL,0);if(props.columnGap!==void 0)layoutNode.setGap(c.GUTTER_COLUMN,props.columnGap);else if(wasRemoved("columnGap"))layoutNode.setGap(c.GUTTER_COLUMN,0);if(props.rowGap!==void 0)layoutNode.setGap(c.GUTTER_ROW,props.rowGap);else if(wasRemoved("rowGap"))layoutNode.setGap(c.GUTTER_ROW,0);if(props.display!==void 0)layoutNode.setDisplay(props.display==="none"?c.DISPLAY_NONE:c.DISPLAY_FLEX);else if(wasRemoved("display"))layoutNode.setDisplay(c.DISPLAY_FLEX);if(props.position!==void 0)if(props.position==="absolute")layoutNode.setPositionType(c.POSITION_TYPE_ABSOLUTE);else if(props.position==="static")layoutNode.setPositionType(c.POSITION_TYPE_STATIC);else layoutNode.setPositionType(c.POSITION_TYPE_RELATIVE);else if(wasRemoved("position"))layoutNode.setPositionType(c.POSITION_TYPE_RELATIVE);if(props.position!=="static")applyPositionOffset(layoutNode,c.EDGE_TOP,props.top),applyPositionOffset(layoutNode,c.EDGE_LEFT,props.left),applyPositionOffset(layoutNode,c.EDGE_BOTTOM,props.bottom),applyPositionOffset(layoutNode,c.EDGE_RIGHT,props.right);if(props.aspectRatio!==void 0)layoutNode.setAspectRatio(props.aspectRatio);else if(wasRemoved("aspectRatio"))layoutNode.setAspectRatio(NaN);let effectiveOverflow=props.overflow??(props.overflowX==="hidden"||props.overflowY==="hidden"?"hidden":void 0);if(effectiveOverflow!==void 0)if(effectiveOverflow==="hidden")layoutNode.setOverflow(c.OVERFLOW_HIDDEN);else if(effectiveOverflow==="scroll")layoutNode.setOverflow(c.OVERFLOW_HIDDEN);else layoutNode.setOverflow(c.OVERFLOW_VISIBLE);else if(wasRemoved("overflow")||wasRemoved("overflowX")||wasRemoved("overflowY"))layoutNode.setOverflow(c.OVERFLOW_VISIBLE);if(props.borderStyle){let borderWidth=getActiveLineHeight()>1?0:1;if(props.borderTop!==!1)layoutNode.setBorder(c.EDGE_TOP,borderWidth);else layoutNode.setBorder(c.EDGE_TOP,0);if(props.borderBottom!==!1)layoutNode.setBorder(c.EDGE_BOTTOM,borderWidth);else layoutNode.setBorder(c.EDGE_BOTTOM,0);if(props.borderLeft!==!1)layoutNode.setBorder(c.EDGE_LEFT,borderWidth);else layoutNode.setBorder(c.EDGE_LEFT,0);if(props.borderRight!==!1)layoutNode.setBorder(c.EDGE_RIGHT,borderWidth);else layoutNode.setBorder(c.EDGE_RIGHT,0)}else layoutNode.setBorder(c.EDGE_TOP,0),layoutNode.setBorder(c.EDGE_BOTTOM,0),layoutNode.setBorder(c.EDGE_LEFT,0),layoutNode.setBorder(c.EDGE_RIGHT,0)}function applySpacing(layoutNode,type,props){let c=getConstants(),set=type==="padding"?layoutNode.setPadding.bind(layoutNode):layoutNode.setMargin.bind(layoutNode),all=props[type],x=props[`${type}X`],yy=props[`${type}Y`],top=props[`${type}Top`],bottom=props[`${type}Bottom`],left=props[`${type}Left`],right=props[`${type}Right`];set(c.EDGE_TOP,top??yy??all??0),set(c.EDGE_BOTTOM,bottom??yy??all??0),set(c.EDGE_LEFT,left??x??all??0),set(c.EDGE_RIGHT,right??x??all??0)}function applyPositionOffset(layoutNode,edge,value){if(value===void 0){layoutNode.setPosition(edge,NaN);return}if(typeof value==="string"&&value.endsWith("%"))layoutNode.setPositionPercent(edge,Number.parseFloat(value));else if(typeof value==="number")layoutNode.setPosition(edge,value)}function alignToConstant(align){let c=getConstants();return{"flex-start":c.ALIGN_FLEX_START,"flex-end":c.ALIGN_FLEX_END,center:c.ALIGN_CENTER,stretch:c.ALIGN_STRETCH,baseline:c.ALIGN_BASELINE,"space-between":c.ALIGN_SPACE_BETWEEN,"space-around":c.ALIGN_SPACE_AROUND,"space-evenly":c.ALIGN_SPACE_EVENLY}[align]??c.ALIGN_STRETCH}function justifyToConstant(justify){let c=getConstants();return{"flex-start":c.JUSTIFY_FLEX_START,"flex-end":c.JUSTIFY_FLEX_END,center:c.JUSTIFY_CENTER,"space-between":c.JUSTIFY_SPACE_BETWEEN,"space-around":c.JUSTIFY_SPACE_AROUND,"space-evenly":c.JUSTIFY_SPACE_EVENLY}[justify]??c.JUSTIFY_FLEX_START}var measureLog;var init_nodes=__esm(()=>{init_unicode();init_measure_stats();measureLog=createLogger10("silvery:measure")});import{createContext as createContext2}from"react";import{DefaultEventPriority,DiscreteEventPriority,NoEventPriority}from"react-reconciler/constants.js";import{createLogger as createLogger11}from"loggily";function normalizeNodeType(type){if(type==="ink-box")return"silvery-box";if(type==="ink-text")return"silvery-text";return type}function setOnNodeRemoved(callback){onNodeRemovedCallback=callback}function markSubtreeDirty(node){let epoch=getRenderEpoch();while(node&&!isDirty(node.dirtyBits,node.dirtyEpoch,SUBTREE_BIT)){if(node.dirtyEpoch!==epoch)node.dirtyBits=SUBTREE_BIT,node.dirtyEpoch=epoch;else node.dirtyBits|=SUBTREE_BIT;node=node.parent}}function markLayoutAncestorDirty(node){if(node.layoutNode)return;let ancestor=node.parent;while(ancestor&&!ancestor.layoutNode)ancestor=ancestor.parent;if(ancestor?.layoutNode){let epoch=getRenderEpoch();if(ancestor.dirtyEpoch!==epoch)ancestor.dirtyBits=CONTENT_BIT|STYLE_PROPS_BIT,ancestor.dirtyEpoch=epoch;else ancestor.dirtyBits|=CONTENT_BIT|STYLE_PROPS_BIT;ancestor.layoutDirty=!0,ancestor.layoutNode.markDirty(),trackLayoutDirty(ancestor),trackContentDirty(ancestor)}}function runWithDiscreteEvent(fn){let prev=currentUpdatePriority;currentUpdatePriority=DiscreteEventPriority;try{fn()}finally{currentUpdatePriority=prev}}var log9,onNodeRemovedCallback=null,hasWarnedBoxInsideText=!1,inkStrictValidation=!1,currentUpdatePriority,hostConfig;var init_host_config=__esm(()=>{init_dirty_tracking();init_helpers2();init_nodes();log9=createLogger11("silvery:reconciler");currentUpdatePriority=NoEventPriority;hostConfig={rendererPackageName:"@silvery/ag-react",rendererVersion:"0.0.1",supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,isPrimaryRenderer:!0,scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,supportsMicrotasks:!0,scheduleMicrotask:queueMicrotask,getRootHostContext(){return{isInsideText:!1}},getChildHostContext(parentHostContext,type){let normalizedType=normalizeNodeType(type),isInsideText=parentHostContext.isInsideText||normalizedType==="silvery-text";if(isInsideText===parentHostContext.isInsideText)return parentHostContext;return{isInsideText}},createInstance(type,props,_rootContainer,hostContext){if(type=normalizeNodeType(type),"style"in props&&props.style&&typeof props.style==="object")props={...props.style,...props};if(type==="silvery-box"&&hostContext.isInsideText){if(inkStrictValidation)throw Error("<Box> can’t be nested inside <Text> component");if(!hasWarnedBoxInsideText)hasWarnedBoxInsideText=!0,log9.warn?.("<Box> cannot be nested inside <Text>. This produces undefined layout behavior.")}if(type==="silvery-text"&&hostContext.isInsideText)return createVirtualTextNode(props);return createNode(type,props)},createTextInstance(text,_rootContainer,hostContext){if(inkStrictValidation&&!hostContext.isInsideText&&text.trim().length>0)throw Error(`Text string "${text}" must be rendered inside <Text> component`);let epoch=getRenderEpoch();return{type:"silvery-text",props:{children:text},children:[],parent:null,layoutNode:null,boxRect:null,scrollRect:null,screenRect:null,prevLayout:null,prevScrollRect:null,prevScreenRect:null,layoutChangedThisFrame:INITIAL_EPOCH,layoutDirty:!1,dirtyBits:CONTENT_BIT|STYLE_PROPS_BIT|BG_BIT|SUBTREE_BIT,dirtyEpoch:epoch,layoutSubscribers:new Set,textContent:text,isRawText:!0}},appendChild(parentInstance,child){let existingIndex=parentInstance.children.indexOf(child);if(existingIndex!==-1){if(parentInstance.children.splice(existingIndex,1),parentInstance.layoutNode&&child.layoutNode)parentInstance.layoutNode.removeChild(child.layoutNode)}if(child.parent=parentInstance,parentInstance.children.push(child),parentInstance.layoutNode&&child.layoutNode){let layoutIndex=parentInstance.children.filter((c)=>c.layoutNode!==null).length-1;parentInstance.layoutNode.insertChild(child.layoutNode,layoutIndex)}{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;parentInstance.dirtyBits=parentInstance.dirtyEpoch!==epoch?bits:parentInstance.dirtyBits|bits,parentInstance.dirtyEpoch=epoch}parentInstance.layoutDirty=!0,parentInstance.layoutNode?.markDirty(),trackLayoutDirty(parentInstance),trackContentDirty(parentInstance),markLayoutAncestorDirty(parentInstance),markSubtreeDirty(parentInstance)},appendInitialChild(parentInstance,child){if(child.parent=parentInstance,parentInstance.children.push(child),parentInstance.layoutNode&&child.layoutNode){let layoutIndex=parentInstance.children.filter((c)=>c.layoutNode!==null).length-1;parentInstance.layoutNode.insertChild(child.layoutNode,layoutIndex)}},appendChildToContainer(container,child){let existingIndex=container.root.children.indexOf(child);if(existingIndex!==-1){if(container.root.children.splice(existingIndex,1),container.root.layoutNode&&child.layoutNode)container.root.layoutNode.removeChild(child.layoutNode)}if(child.parent=container.root,container.root.children.push(child),container.root.layoutNode&&child.layoutNode){let layoutIndex=container.root.children.filter((c)=>c.layoutNode!==null).length-1;container.root.layoutNode.insertChild(child.layoutNode,layoutIndex)}{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;container.root.dirtyBits=container.root.dirtyEpoch!==epoch?bits:container.root.dirtyBits|bits,container.root.dirtyEpoch=epoch}container.root.layoutDirty=!0,container.root.layoutNode?.markDirty(),trackLayoutDirty(container.root),trackContentDirty(container.root),markSubtreeDirty(container.root)},removeChild(parentInstance,child){let index=parentInstance.children.indexOf(child);if(index!==-1){if(onNodeRemovedCallback?.(child),parentInstance.children.splice(index,1),parentInstance.layoutNode&&child.layoutNode)parentInstance.layoutNode.removeChild(child.layoutNode),child.layoutNode.free();child.parent=null;{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;parentInstance.dirtyBits=parentInstance.dirtyEpoch!==epoch?bits:parentInstance.dirtyBits|bits,parentInstance.dirtyEpoch=epoch}parentInstance.layoutDirty=!0,parentInstance.layoutNode?.markDirty(),trackLayoutDirty(parentInstance),trackContentDirty(parentInstance),markLayoutAncestorDirty(parentInstance),markSubtreeDirty(parentInstance)}},removeChildFromContainer(container,child){let index=container.root.children.indexOf(child);if(index!==-1){if(onNodeRemovedCallback?.(child),container.root.children.splice(index,1),container.root.layoutNode&&child.layoutNode)container.root.layoutNode.removeChild(child.layoutNode),child.layoutNode.free();child.parent=null;{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;container.root.dirtyBits=container.root.dirtyEpoch!==epoch?bits:container.root.dirtyBits|bits,container.root.dirtyEpoch=epoch}container.root.layoutDirty=!0,container.root.layoutNode?.markDirty(),trackLayoutDirty(container.root),trackContentDirty(container.root),markSubtreeDirty(container.root)}},insertBefore(parentInstance,child,beforeChild){let existingIndex=parentInstance.children.indexOf(child);if(existingIndex!==-1){if(parentInstance.children.splice(existingIndex,1),parentInstance.layoutNode&&child.layoutNode)parentInstance.layoutNode.removeChild(child.layoutNode)}let beforeIndex=parentInstance.children.indexOf(beforeChild);if(beforeIndex!==-1){if(child.parent=parentInstance,parentInstance.children.splice(beforeIndex,0,child),parentInstance.layoutNode&&child.layoutNode){let layoutIndex=parentInstance.children.slice(0,beforeIndex).filter((c)=>c.layoutNode!==null).length;parentInstance.layoutNode.insertChild(child.layoutNode,layoutIndex)}{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;parentInstance.dirtyBits=parentInstance.dirtyEpoch!==epoch?bits:parentInstance.dirtyBits|bits,parentInstance.dirtyEpoch=epoch}parentInstance.layoutDirty=!0,parentInstance.layoutNode?.markDirty(),trackLayoutDirty(parentInstance),trackContentDirty(parentInstance),markLayoutAncestorDirty(parentInstance),markSubtreeDirty(parentInstance)}},insertInContainerBefore(container,child,beforeChild){let existingIndex=container.root.children.indexOf(child);if(existingIndex!==-1){if(container.root.children.splice(existingIndex,1),container.root.layoutNode&&child.layoutNode)container.root.layoutNode.removeChild(child.layoutNode)}let beforeIndex=container.root.children.indexOf(beforeChild);if(beforeIndex!==-1){if(child.parent=container.root,container.root.children.splice(beforeIndex,0,child),container.root.layoutNode&&child.layoutNode){let layoutIndex=container.root.children.slice(0,beforeIndex).filter((c)=>c.layoutNode!==null).length;container.root.layoutNode.insertChild(child.layoutNode,layoutIndex)}{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;container.root.dirtyBits=container.root.dirtyEpoch!==epoch?bits:container.root.dirtyBits|bits,container.root.dirtyEpoch=epoch}container.root.layoutDirty=!0,container.root.layoutNode?.markDirty(),trackLayoutDirty(container.root),trackContentDirty(container.root),markSubtreeDirty(container.root)}},prepareUpdate(_instance,_type,oldProps,newProps){return classifyPropChanges(oldProps,newProps).anyChanged},commitUpdate(instance,_type,oldProps,newProps,_finishedWork){if("style"in oldProps&&oldProps.style&&typeof oldProps.style==="object")oldProps={...oldProps.style,...oldProps};if("style"in newProps&&newProps.style&&typeof newProps.style==="object")newProps={...newProps.style,...newProps};let{anyChanged,layoutChanged,contentChanged}=classifyPropChanges(oldProps,newProps);if(!anyChanged){instance.props=newProps;return}if(layoutChanged){if(instance.layoutNode)applyBoxProps(instance.layoutNode,newProps,oldProps),instance.layoutNode.markDirty();instance.layoutDirty=!0,trackLayoutDirty(instance)}if(contentChanged){let epoch=getRenderEpoch(),bits=STYLE_PROPS_BIT;if(contentChanged==="text"){if(bits|=CONTENT_BIT,instance.layoutNode)instance.layoutNode.markDirty()}if(oldProps.backgroundColor!==newProps.backgroundColor)bits|=BG_BIT;if(oldProps.borderStyle&&!newProps.borderStyle)bits|=BG_BIT;if(oldProps.outlineStyle&&!newProps.outlineStyle)bits|=BG_BIT;if(oldProps.theme!==newProps.theme)bits|=BG_BIT;instance.dirtyBits=instance.dirtyEpoch!==epoch?bits:instance.dirtyBits|bits,instance.dirtyEpoch=epoch}if(contentChanged)trackContentDirty(instance);if(contentChanged==="style"&&!layoutChanged&&!isDirty(instance.dirtyBits,instance.dirtyEpoch,BG_BIT)&&!isDirty(instance.dirtyBits,instance.dirtyEpoch,CONTENT_BIT)&&!isDirty(instance.dirtyBits,instance.dirtyEpoch,CHILDREN_BIT))trackStyleOnlyDirty(instance);instance.props=newProps;let scrollToChanged=oldProps.scrollTo!==newProps.scrollTo,scrollOffsetChanged=oldProps.scrollOffset!==newProps.scrollOffset;if(scrollToChanged||scrollOffsetChanged)trackScrollDirty(instance);if(instance.layoutDirty||contentChanged||scrollToChanged||scrollOffsetChanged)markLayoutAncestorDirty(instance),markSubtreeDirty(instance)},commitTextUpdate(textInstance,_oldText,newText){textInstance.textContent=newText,textInstance.props={children:newText};let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;textInstance.dirtyBits=textInstance.dirtyEpoch!==epoch?bits:textInstance.dirtyBits|bits,textInstance.dirtyEpoch=epoch,trackContentDirty(textInstance),markLayoutAncestorDirty(textInstance),markSubtreeDirty(textInstance)},finalizeInitialChildren(){return!1},prepareForCommit(){return null},resetAfterCommit(container){container.onRender()},getPublicInstance(instance){return instance},shouldSetTextContent(){return!1},clearContainer(container){for(let child of container.root.children)onNodeRemovedCallback?.(child);for(let child of container.root.children)if(container.root.layoutNode&&child.layoutNode)container.root.layoutNode.removeChild(child.layoutNode),child.layoutNode.free();container.root.children=[];{let epoch=getRenderEpoch(),bits=CHILDREN_BIT|CONTENT_BIT;container.root.dirtyBits=container.root.dirtyEpoch!==epoch?bits:container.root.dirtyBits|bits,container.root.dirtyEpoch=epoch}container.root.layoutDirty=!0,container.root.layoutNode?.markDirty(),trackLayoutDirty(container.root),trackContentDirty(container.root),markSubtreeDirty(container.root)},preparePortalMount(){},getCurrentEventPriority(){if(currentUpdatePriority!==NoEventPriority)return currentUpdatePriority;return DefaultEventPriority},getInstanceFromNode(){return null},beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},prepareScopeUpdate(){},getInstanceFromScope(){return null},detachDeletedInstance(){},setCurrentUpdatePriority(newPriority){currentUpdatePriority=newPriority},getCurrentUpdatePriority(){return currentUpdatePriority},resolveUpdatePriority(){if(currentUpdatePriority!==NoEventPriority)return currentUpdatePriority;return DefaultEventPriority},maySuspendCommit(){return!1},NotPendingTransition:null,HostTransitionContext:createContext2(null),resetFormInstance(){},requestPostPaintCallback(){},shouldAttemptEagerTransition(){return!1},trackSchedulerEvent(){},resolveEventType(){return null},resolveEventTimeStamp(){return-1.1},preloadInstance(){return!0},startSuspendingCommit(){},suspendInstance(){},waitForCommitToBeReady(){return null},hideInstance(instance){instance.hidden=!0;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(instance.dirtyBits=instance.dirtyEpoch!==epoch?bits:instance.dirtyBits|bits,instance.dirtyEpoch=epoch,instance.layoutDirty=!0,instance.layoutNode)instance.layoutNode.markDirty();if(trackLayoutDirty(instance),trackContentDirty(instance),instance.parent){if(instance.parent.dirtyEpoch!==epoch)instance.parent.dirtyBits=CONTENT_BIT,instance.parent.dirtyEpoch=epoch;else instance.parent.dirtyBits|=CONTENT_BIT;trackContentDirty(instance.parent)}markLayoutAncestorDirty(instance),markSubtreeDirty(instance)},unhideInstance(instance,_props){instance.hidden=!1;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(instance.dirtyBits=instance.dirtyEpoch!==epoch?bits:instance.dirtyBits|bits,instance.dirtyEpoch=epoch,instance.layoutDirty=!0,instance.layoutNode)instance.layoutNode.markDirty();if(trackLayoutDirty(instance),trackContentDirty(instance),instance.parent){if(instance.parent.dirtyEpoch!==epoch)instance.parent.dirtyBits=CONTENT_BIT,instance.parent.dirtyEpoch=epoch;else instance.parent.dirtyBits|=CONTENT_BIT;trackContentDirty(instance.parent)}markLayoutAncestorDirty(instance),markSubtreeDirty(instance)},hideTextInstance(textInstance){textInstance.hidden=!0;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(textInstance.dirtyBits=textInstance.dirtyEpoch!==epoch?bits:textInstance.dirtyBits|bits,textInstance.dirtyEpoch=epoch,trackContentDirty(textInstance),textInstance.parent){if(textInstance.parent.dirtyEpoch!==epoch)textInstance.parent.dirtyBits=CONTENT_BIT,textInstance.parent.dirtyEpoch=epoch;else textInstance.parent.dirtyBits|=CONTENT_BIT;trackContentDirty(textInstance.parent)}markLayoutAncestorDirty(textInstance),markSubtreeDirty(textInstance)},unhideTextInstance(textInstance,_text){textInstance.hidden=!1;let epoch=getRenderEpoch(),bits=CONTENT_BIT|STYLE_PROPS_BIT;if(textInstance.dirtyBits=textInstance.dirtyEpoch!==epoch?bits:textInstance.dirtyBits|bits,textInstance.dirtyEpoch=epoch,trackContentDirty(textInstance),textInstance.parent){if(textInstance.parent.dirtyEpoch!==epoch)textInstance.parent.dirtyBits=CONTENT_BIT,textInstance.parent.dirtyEpoch=epoch;else textInstance.parent.dirtyBits|=CONTENT_BIT;trackContentDirty(textInstance.parent)}markLayoutAncestorDirty(textInstance),markSubtreeDirty(textInstance)}}});import Reconciler from"react-reconciler";function createContainer(onRender){return{root:createRootNode(),onRender}}function createFiberRoot(container){return reconciler.createContainer(container,1,null,!1,null,"",()=>{},()=>{},()=>{},null)}function getContainerRoot(container){return container.root}var reconciler;var init_reconciler=__esm(()=>{init_host_config();init_nodes();init_host_config();reconciler=Reconciler(hostConfig)});import Reconciler2 from"react-reconciler";var stringReconciler;var init_string_reconciler=__esm(()=>{init_host_config();stringReconciler=Reconciler2({...hostConfig,isPrimaryRenderer:!1})});var exports_render_string={};__export(exports_render_string,{renderStringSync:()=>renderStringSync,renderString:()=>renderString});import React,{act}from"react";async function ensureLayoutEngine(){if(engineInitialized||isLayoutEngineInitialized())return;let{ensureDefaultLayoutEngine:ensureDefaultLayoutEngine2}=await Promise.resolve().then(() => exports_layout_engine);await ensureDefaultLayoutEngine2(),engineInitialized=!0}async function renderString(element,options={}){return await ensureLayoutEngine(),renderStringSync(element,options)}function renderStringSync(element,options={}){if(!isLayoutEngineInitialized())throw Error("Layout engine not initialized. Use renderString() (async) or initialize with setLayoutEngine().");let{width=80,height=24,plain=!1,pipelineConfig,trimTrailingWhitespace=!0,trimEmptyLines=!0,onContentHeight,alwaysStyled=!1}=options,hadReactCommit=!1,container=createContainer(()=>{hadReactCommit=!0}),uncaughtError=null,onUncaughtError=(error)=>{uncaughtError=error},fiberRoot=stringReconciler.createContainer(container,1,null,!1,null,"",onUncaughtError,()=>{},()=>{},null),mockStdout={columns:width,rows:height,write:()=>!0,isTTY:!1,on:()=>mockStdout,off:()=>mockStdout,once:()=>mockStdout,removeListener:()=>mockStdout,addListener:()=>mockStdout},mockTerm=createTerm({color:plain?null:"truecolor"}),wrapped=React.createElement(TermContext.Provider,{value:mockTerm},React.createElement(StdoutContext.Provider,{value:{stdout:mockStdout,write:()=>{}}},React.createElement(StderrContext.Provider,{value:{stderr:process.stderr,write:(data)=>{process.stderr.write(data)}}},element)));if(withActEnvironment(()=>{act(()=>{stringReconciler.updateContainerSync(wrapped,fiberRoot,null,null),stringReconciler.flushSyncWork()})}),uncaughtError)throw uncaughtError instanceof Error?uncaughtError:Error(String(uncaughtError));let buffer,rootNode,MAX_ITERATIONS=5;for(let i=0;i<MAX_ITERATIONS;i++)if(hadReactCommit=!1,withActEnvironment(()=>{if(act(()=>{let root=getContainerRoot(container);rootNode=root,buffer=executeRender(root,width,height,null,void 0,pipelineConfig).buffer}),!hadReactCommit)act(()=>{stringReconciler.flushSyncWork()})}),!hadReactCommit)break;if(onContentHeight&&rootNode){let maxBottom=0,hasChildren=!1;for(let child of rootNode.children)if(child.boxRect){hasChildren=!0;let props=child.props,mb=props.marginBottom??props.marginY??props.margin??0,childBottom=child.boxRect.y+child.boxRect.height+mb;if(childBottom>maxBottom)maxBottom=childBottom}onContentHeight(hasChildren?maxBottom:0)}return withActEnvironment(()=>{act(()=>{stringReconciler.updateContainerSync(null,fiberRoot,null,null),stringReconciler.flushSyncWork()})}),plain&&!alwaysStyled?bufferToText(buffer,{trimTrailingWhitespace,trimEmptyLines}):bufferToStyledText(buffer,{trimTrailingWhitespace,trimEmptyLines})}function withActEnvironment(fn){let prev=globalThis.IS_REACT_ACT_ENVIRONMENT;globalThis.IS_REACT_ACT_ENVIRONMENT=!0;try{fn()}finally{globalThis.IS_REACT_ACT_ENVIRONMENT=prev}}var engineInitialized=!1;var init_render_string=__esm(()=>{init_ansi2();init_buffer();init_context();init_pipeline2();init_reconciler();init_string_reconciler()});var require_constants=__commonJS((exports,module)=>{var BINARY_TYPES=["nodebuffer","arraybuffer","fragments"],hasBlob=typeof Blob<"u";if(hasBlob)BINARY_TYPES.push("blob");module.exports={BINARY_TYPES,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var require_buffer_util=__commonJS((exports,module)=>{var{EMPTY_BUFFER}=require_constants(),FastBuffer=Buffer[Symbol.species];function concat(list,totalLength){if(list.length===0)return EMPTY_BUFFER;if(list.length===1)return list[0];let target=Buffer.allocUnsafe(totalLength),offset=0;for(let i=0;i<list.length;i++){let buf=list[i];target.set(buf,offset),offset+=buf.length}if(offset<totalLength)return new FastBuffer(target.buffer,target.byteOffset,offset);return target}function _mask(source,mask,output,offset,length){for(let i=0;i<length;i++)output[offset+i]=source[i]^mask[i&3]}function _unmask(buffer,mask){for(let i=0;i<buffer.length;i++)buffer[i]^=mask[i&3]}function toArrayBuffer(buf){if(buf.length===buf.buffer.byteLength)return buf.buffer;return buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.length)}function toBuffer(data){if(toBuffer.readOnly=!0,Buffer.isBuffer(data))return data;let buf;if(data instanceof ArrayBuffer)buf=new FastBuffer(data);else if(ArrayBuffer.isView(data))buf=new FastBuffer(data.buffer,data.byteOffset,data.byteLength);else buf=Buffer.from(data),toBuffer.readOnly=!1;return buf}module.exports={concat,mask:_mask,toArrayBuffer,toBuffer,unmask:_unmask};if(!process.env.WS_NO_BUFFER_UTIL)try{let bufferUtil=(()=>{throw new Error("Cannot require module "+"bufferutil");})();module.exports.mask=function(source,mask,output,offset,length){if(length<48)_mask(source,mask,output,offset,length);else bufferUtil.mask(source,mask,output,offset,length)},module.exports.unmask=function(buffer,mask){if(buffer.length<32)_unmask(buffer,mask);else bufferUtil.unmask(buffer,mask)}}catch(e){}});var require_limiter=__commonJS((exports,module)=>{var kDone=Symbol("kDone"),kRun=Symbol("kRun");class Limiter{constructor(concurrency){this[kDone]=()=>{this.pending--,this[kRun]()},this.concurrency=concurrency||1/0,this.jobs=[],this.pending=0}add(job){this.jobs.push(job),this[kRun]()}[kRun](){if(this.pending===this.concurrency)return;if(this.jobs.length){let job=this.jobs.shift();this.pending++,job(this[kDone])}}}module.exports=Limiter});var require_permessage_deflate=__commonJS((exports,module)=>{var zlib=__require("zlib"),bufferUtil=require_buffer_util(),Limiter=require_limiter(),{kStatusCode}=require_constants(),FastBuffer=Buffer[Symbol.species],TRAILER=Buffer.from([0,0,255,255]),kPerMessageDeflate=Symbol("permessage-deflate"),kTotalLength=Symbol("total-length"),kCallback=Symbol("callback"),kBuffers=Symbol("buffers"),kError=Symbol("error"),zlibLimiter;class PerMessageDeflate{constructor(options){if(this._options=options||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!zlibLimiter){let concurrency=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zlibLimiter=new Limiter(concurrency)}}static get extensionName(){return"permessage-deflate"}offer(){let params={};if(this._options.serverNoContextTakeover)params.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)params.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)params.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)params.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)params.client_max_window_bits=!0;return params}accept(configurations){return configurations=this.normalizeParams(configurations),this.params=this._isServer?this.acceptAsServer(configurations):this.acceptAsClient(configurations),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let callback=this._deflate[kCallback];if(this._deflate.close(),this._deflate=null,callback)callback(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(offers){let opts=this._options,accepted=offers.find((params)=>{if(opts.serverNoContextTakeover===!1&&params.server_no_context_takeover||params.server_max_window_bits&&(opts.serverMaxWindowBits===!1||typeof opts.serverMaxWindowBits==="number"&&opts.serverMaxWindowBits>params.server_max_window_bits)||typeof opts.clientMaxWindowBits==="number"&&!params.client_max_window_bits)return!1;return!0});if(!accepted)throw Error("None of the extension offers can be accepted");if(opts.serverNoContextTakeover)accepted.server_no_context_takeover=!0;if(opts.clientNoContextTakeover)accepted.client_no_context_takeover=!0;if(typeof opts.serverMaxWindowBits==="number")accepted.server_max_window_bits=opts.serverMaxWindowBits;if(typeof opts.clientMaxWindowBits==="number")accepted.client_max_window_bits=opts.clientMaxWindowBits;else if(accepted.client_max_window_bits===!0||opts.clientMaxWindowBits===!1)delete accepted.client_max_window_bits;return accepted}acceptAsClient(response){let params=response[0];if(this._options.clientNoContextTakeover===!1&&params.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!params.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")params.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&params.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return params}normalizeParams(configurations){return configurations.forEach((params)=>{Object.keys(params).forEach((key)=>{let value=params[key];if(value.length>1)throw Error(`Parameter "${key}" must have only a single value`);if(value=value[0],key==="client_max_window_bits"){if(value!==!0){let num=+value;if(!Number.isInteger(num)||num<8||num>15)throw TypeError(`Invalid value for parameter "${key}": ${value}`);value=num}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${key}": ${value}`)}else if(key==="server_max_window_bits"){let num=+value;if(!Number.isInteger(num)||num<8||num>15)throw TypeError(`Invalid value for parameter "${key}": ${value}`);value=num}else if(key==="client_no_context_takeover"||key==="server_no_context_takeover"){if(value!==!0)throw TypeError(`Invalid value for parameter "${key}": ${value}`)}else throw Error(`Unknown parameter "${key}"`);params[key]=value})}),configurations}decompress(data,fin,callback){zlibLimiter.add((done)=>{this._decompress(data,fin,(err,result)=>{done(),callback(err,result)})})}compress(data,fin,callback){zlibLimiter.add((done)=>{this._compress(data,fin,(err,result)=>{done(),callback(err,result)})})}_decompress(data,fin,callback){let endpoint=this._isServer?"client":"server";if(!this._inflate){let key=`${endpoint}_max_window_bits`,windowBits=typeof this.params[key]!=="number"?zlib.Z_DEFAULT_WINDOWBITS:this.params[key];this._inflate=zlib.createInflateRaw({...this._options.zlibInflateOptions,windowBits}),this._inflate[kPerMessageDeflate]=this,this._inflate[kTotalLength]=0,this._inflate[kBuffers]=[],this._inflate.on("error",inflateOnError),this._inflate.on("data",inflateOnData)}if(this._inflate[kCallback]=callback,this._inflate.write(data),fin)this._inflate.write(TRAILER);this._inflate.flush(()=>{let err=this._inflate[kError];if(err){this._inflate.close(),this._inflate=null,callback(err);return}let data2=bufferUtil.concat(this._inflate[kBuffers],this._inflate[kTotalLength]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[kTotalLength]=0,this._inflate[kBuffers]=[],fin&&this.params[`${endpoint}_no_context_takeover`])this._inflate.reset();callback(null,data2)})}_compress(data,fin,callback){let endpoint=this._isServer?"server":"client";if(!this._deflate){let key=`${endpoint}_max_window_bits`,windowBits=typeof this.params[key]!=="number"?zlib.Z_DEFAULT_WINDOWBITS:this.params[key];this._deflate=zlib.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits}),this._deflate[kTotalLength]=0,this._deflate[kBuffers]=[],this._deflate.on("data",deflateOnData)}this._deflate[kCallback]=callback,this._deflate.write(data),this._deflate.flush(zlib.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let data2=bufferUtil.concat(this._deflate[kBuffers],this._deflate[kTotalLength]);if(fin)data2=new FastBuffer(data2.buffer,data2.byteOffset,data2.length-4);if(this._deflate[kCallback]=null,this._deflate[kTotalLength]=0,this._deflate[kBuffers]=[],fin&&this.params[`${endpoint}_no_context_takeover`])this._deflate.reset();callback(null,data2)})}}module.exports=PerMessageDeflate;function deflateOnData(chunk){this[kBuffers].push(chunk),this[kTotalLength]+=chunk.length}function inflateOnData(chunk){if(this[kTotalLength]+=chunk.length,this[kPerMessageDeflate]._maxPayload<1||this[kTotalLength]<=this[kPerMessageDeflate]._maxPayload){this[kBuffers].push(chunk);return}this[kError]=RangeError("Max payload size exceeded"),this[kError].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[kError][kStatusCode]=1009,this.removeListener("data",inflateOnData),this.reset()}function inflateOnError(err){if(this[kPerMessageDeflate]._inflate=null,this[kError]){this[kCallback](this[kError]);return}err[kStatusCode]=1007,this[kCallback](err)}});var require_validation=__commonJS((exports,module)=>{var{isUtf8}=__require("buffer"),{hasBlob}=require_constants(),tokenChars=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function isValidStatusCode(code){return code>=1000&&code<=1014&&code!==1004&&code!==1005&&code!==1006||code>=3000&&code<=4999}function _isValidUTF8(buf){let len=buf.length,i=0;while(i<len)if((buf[i]&128)===0)i++;else if((buf[i]&224)===192){if(i+1===len||(buf[i+1]&192)!==128||(buf[i]&254)===192)return!1;i+=2}else if((buf[i]&240)===224){if(i+2>=len||(buf[i+1]&192)!==128||(buf[i+2]&192)!==128||buf[i]===224&&(buf[i+1]&224)===128||buf[i]===237&&(buf[i+1]&224)===160)return!1;i+=3}else if((buf[i]&248)===240){if(i+3>=len||(buf[i+1]&192)!==128||(buf[i+2]&192)!==128||(buf[i+3]&192)!==128||buf[i]===240&&(buf[i+1]&240)===128||buf[i]===244&&buf[i+1]>143||buf[i]>244)return!1;i+=4}else return!1;return!0}function isBlob(value){return hasBlob&&typeof value==="object"&&typeof value.arrayBuffer==="function"&&typeof value.type==="string"&&typeof value.stream==="function"&&(value[Symbol.toStringTag]==="Blob"||value[Symbol.toStringTag]==="File")}module.exports={isBlob,isValidStatusCode,isValidUTF8:_isValidUTF8,tokenChars};if(isUtf8)module.exports.isValidUTF8=function(buf){return buf.length<24?_isValidUTF8(buf):isUtf8(buf)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let isValidUTF8=(()=>{throw new Error("Cannot require module "+"utf-8-validate");})();module.exports.isValidUTF8=function(buf){return buf.length<32?_isValidUTF8(buf):isValidUTF8(buf)}}catch(e){}});var require_receiver=__commonJS((exports,module)=>{var{Writable}=__require("stream"),PerMessageDeflate=require_permessage_deflate(),{BINARY_TYPES,EMPTY_BUFFER,kStatusCode,kWebSocket}=require_constants(),{concat,toArrayBuffer,unmask}=require_buffer_util(),{isValidStatusCode,isValidUTF8}=require_validation(),FastBuffer=Buffer[Symbol.species];class Receiver extends Writable{constructor(options={}){super();this._allowSynchronousEvents=options.allowSynchronousEvents!==void 0?options.allowSynchronousEvents:!0,this._binaryType=options.binaryType||BINARY_TYPES[0],this._extensions=options.extensions||{},this._isServer=!!options.isServer,this._maxPayload=options.maxPayload|0,this._skipUTF8Validation=!!options.skipUTF8Validation,this[kWebSocket]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(chunk,encoding,cb){if(this._opcode===8&&this._state==0)return cb();this._bufferedBytes+=chunk.length,this._buffers.push(chunk),this.startLoop(cb)}consume(n){if(this._bufferedBytes-=n,n===this._buffers[0].length)return this._buffers.shift();if(n<this._buffers[0].length){let buf=this._buffers[0];return this._buffers[0]=new FastBuffer(buf.buffer,buf.byteOffset+n,buf.length-n),new FastBuffer(buf.buffer,buf.byteOffset,n)}let dst=Buffer.allocUnsafe(n);do{let buf=this._buffers[0],offset=dst.length-n;if(n>=buf.length)dst.set(this._buffers.shift(),offset);else dst.set(new Uint8Array(buf.buffer,buf.byteOffset,n),offset),this._buffers[0]=new FastBuffer(buf.buffer,buf.byteOffset+n,buf.length-n);n-=buf.length}while(n>0);return dst}startLoop(cb){this._loop=!0;do switch(this._state){case 0:this.getInfo(cb);break;case 1:this.getPayloadLength16(cb);break;case 2:this.getPayloadLength64(cb);break;case 3:this.getMask();break;case 4:this.getData(cb);break;case 5:case 6:this._loop=!1;return}while(this._loop);if(!this._errored)cb()}getInfo(cb){if(this._bufferedBytes<2){this._loop=!1;return}let buf=this.consume(2);if((buf[0]&48)!==0){let error=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");cb(error);return}let compressed=(buf[0]&64)===64;if(compressed&&!this._extensions[PerMessageDeflate.extensionName]){let error=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");cb(error);return}if(this._fin=(buf[0]&128)===128,this._opcode=buf[0]&15,this._payloadLength=buf[1]&127,this._opcode===0){if(compressed){let error=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");cb(error);return}if(!this._fragmented){let error=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");cb(error);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let error=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");cb(error);return}this._compressed=compressed}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let error=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");cb(error);return}if(compressed){let error=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");cb(error);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let error=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");cb(error);return}}else{let error=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");cb(error);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(buf[1]&128)===128,this._isServer){if(!this._masked){let error=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");cb(error);return}}else if(this._masked){let error=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");cb(error);return}if(this._payloadLength===126)this._state=1;else if(this._payloadLength===127)this._state=2;else this.haveLength(cb)}getPayloadLength16(cb){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(cb)}getPayloadLength64(cb){if(this._bufferedBytes<8){this._loop=!1;return}let buf=this.consume(8),num=buf.readUInt32BE(0);if(num>Math.pow(2,21)-1){let error=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");cb(error);return}this._payloadLength=num*Math.pow(2,32)+buf.readUInt32BE(4),this.haveLength(cb)}haveLength(cb){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let error=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");cb(error);return}}if(this._masked)this._state=3;else this._state=4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(cb){let data=EMPTY_BUFFER;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(data=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)unmask(data,this._mask)}if(this._opcode>7){this.controlMessage(data,cb);return}if(this._compressed){this._state=5,this.decompress(data,cb);return}if(data.length)this._messageLength=this._totalPayloadLength,this._fragments.push(data);this.dataMessage(cb)}decompress(data,cb){this._extensions[PerMessageDeflate.extensionName].decompress(data,this._fin,(err,buf)=>{if(err)return cb(err);if(buf.length){if(this._messageLength+=buf.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let error=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");cb(error);return}this._fragments.push(buf)}if(this.dataMessage(cb),this._state===0)this.startLoop(cb)})}dataMessage(cb){if(!this._fin){this._state=0;return}let messageLength=this._messageLength,fragments=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let data;if(this._binaryType==="nodebuffer")data=concat(fragments,messageLength);else if(this._binaryType==="arraybuffer")data=toArrayBuffer(concat(fragments,messageLength));else if(this._binaryType==="blob")data=new Blob(fragments);else data=fragments;if(this._allowSynchronousEvents)this.emit("message",data,!0),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",data,!0),this._state=0,this.startLoop(cb)})}else{let buf=concat(fragments,messageLength);if(!this._skipUTF8Validation&&!isValidUTF8(buf)){let error=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");cb(error);return}if(this._state===5||this._allowSynchronousEvents)this.emit("message",buf,!1),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",buf,!1),this._state=0,this.startLoop(cb)})}}controlMessage(data,cb){if(this._opcode===8){if(data.length===0)this._loop=!1,this.emit("conclude",1005,EMPTY_BUFFER),this.end();else{let code=data.readUInt16BE(0);if(!isValidStatusCode(code)){let error=this.createError(RangeError,`invalid status code ${code}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");cb(error);return}let buf=new FastBuffer(data.buffer,data.byteOffset+2,data.length-2);if(!this._skipUTF8Validation&&!isValidUTF8(buf)){let error=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");cb(error);return}this._loop=!1,this.emit("conclude",code,buf),this.end()}this._state=0;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",data),this._state=0;else this._state=6,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",data),this._state=0,this.startLoop(cb)})}createError(ErrorCtor,message,prefix,statusCode,errorCode){this._loop=!1,this._errored=!0;let err=new ErrorCtor(prefix?`Invalid WebSocket frame: ${message}`:message);return Error.captureStackTrace(err,this.createError),err.code=errorCode,err[kStatusCode]=statusCode,err}}module.exports=Receiver});var require_sender=__commonJS((exports,module)=>{var{Duplex}=__require("stream"),{randomFillSync}=__require("crypto"),PerMessageDeflate=require_permessage_deflate(),{EMPTY_BUFFER,kWebSocket,NOOP}=require_constants(),{isBlob,isValidStatusCode}=require_validation(),{mask:applyMask,toBuffer}=require_buffer_util(),kByteLength=Symbol("kByteLength"),maskBuffer=Buffer.alloc(4),randomPool,randomPoolPointer=8192,DEFAULT=0,DEFLATING=1,GET_BLOB_DATA=2;class Sender{constructor(socket,extensions,generateMask){if(this._extensions=extensions||{},generateMask)this._generateMask=generateMask,this._maskBuffer=Buffer.alloc(4);this._socket=socket,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=DEFAULT,this.onerror=NOOP,this[kWebSocket]=void 0}static frame(data,options){let mask,merge=!1,offset=2,skipMasking=!1;if(options.mask){if(mask=options.maskBuffer||maskBuffer,options.generateMask)options.generateMask(mask);else{if(randomPoolPointer===8192){if(randomPool===void 0)randomPool=Buffer.alloc(8192);randomFillSync(randomPool,0,8192),randomPoolPointer=0}mask[0]=randomPool[randomPoolPointer++],mask[1]=randomPool[randomPoolPointer++],mask[2]=randomPool[randomPoolPointer++],mask[3]=randomPool[randomPoolPointer++]}skipMasking=(mask[0]|mask[1]|mask[2]|mask[3])===0,offset=6}let dataLength;if(typeof data==="string")if((!options.mask||skipMasking)&&options[kByteLength]!==void 0)dataLength=options[kByteLength];else data=Buffer.from(data),dataLength=data.length;else dataLength=data.length,merge=options.mask&&options.readOnly&&!skipMasking;let payloadLength=dataLength;if(dataLength>=65536)offset+=8,payloadLength=127;else if(dataLength>125)offset+=2,payloadLength=126;let target=Buffer.allocUnsafe(merge?dataLength+offset:offset);if(target[0]=options.fin?options.opcode|128:options.opcode,options.rsv1)target[0]|=64;if(target[1]=payloadLength,payloadLength===126)target.writeUInt16BE(dataLength,2);else if(payloadLength===127)target[2]=target[3]=0,target.writeUIntBE(dataLength,4,6);if(!options.mask)return[target,data];if(target[1]|=128,target[offset-4]=mask[0],target[offset-3]=mask[1],target[offset-2]=mask[2],target[offset-1]=mask[3],skipMasking)return[target,data];if(merge)return applyMask(data,mask,target,offset,dataLength),[target];return applyMask(data,mask,data,0,dataLength),[target,data]}close(code,data,mask,cb){let buf;if(code===void 0)buf=EMPTY_BUFFER;else if(typeof code!=="number"||!isValidStatusCode(code))throw TypeError("First argument must be a valid error code number");else if(data===void 0||!data.length)buf=Buffer.allocUnsafe(2),buf.writeUInt16BE(code,0);else{let length=Buffer.byteLength(data);if(length>123)throw RangeError("The message must not be greater than 123 bytes");if(buf=Buffer.allocUnsafe(2+length),buf.writeUInt16BE(code,0),typeof data==="string")buf.write(data,2);else buf.set(data,2)}let options={[kByteLength]:buf.length,fin:!0,generateMask:this._generateMask,mask,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==DEFAULT)this.enqueue([this.dispatch,buf,!1,options,cb]);else this.sendFrame(Sender.frame(buf,options),cb)}ping(data,mask,cb){let byteLength,readOnly;if(typeof data==="string")byteLength=Buffer.byteLength(data),readOnly=!1;else if(isBlob(data))byteLength=data.size,readOnly=!1;else data=toBuffer(data),byteLength=data.length,readOnly=toBuffer.readOnly;if(byteLength>125)throw RangeError("The data size must not be greater than 125 bytes");let options={[kByteLength]:byteLength,fin:!0,generateMask:this._generateMask,mask,maskBuffer:this._maskBuffer,opcode:9,readOnly,rsv1:!1};if(isBlob(data))if(this._state!==DEFAULT)this.enqueue([this.getBlobData,data,!1,options,cb]);else this.getBlobData(data,!1,options,cb);else if(this._state!==DEFAULT)this.enqueue([this.dispatch,data,!1,options,cb]);else this.sendFrame(Sender.frame(data,options),cb)}pong(data,mask,cb){let byteLength,readOnly;if(typeof data==="string")byteLength=Buffer.byteLength(data),readOnly=!1;else if(isBlob(data))byteLength=data.size,readOnly=!1;else data=toBuffer(data),byteLength=data.length,readOnly=toBuffer.readOnly;if(byteLength>125)throw RangeError("The data size must not be greater than 125 bytes");let options={[kByteLength]:byteLength,fin:!0,generateMask:this._generateMask,mask,maskBuffer:this._maskBuffer,opcode:10,readOnly,rsv1:!1};if(isBlob(data))if(this._state!==DEFAULT)this.enqueue([this.getBlobData,data,!1,options,cb]);else this.getBlobData(data,!1,options,cb);else if(this._state!==DEFAULT)this.enqueue([this.dispatch,data,!1,options,cb]);else this.sendFrame(Sender.frame(data,options),cb)}send(data,options,cb){let perMessageDeflate=this._extensions[PerMessageDeflate.extensionName],opcode=options.binary?2:1,rsv1=options.compress,byteLength,readOnly;if(typeof data==="string")byteLength=Buffer.byteLength(data),readOnly=!1;else if(isBlob(data))byteLength=data.size,readOnly=!1;else data=toBuffer(data),byteLength=data.length,readOnly=toBuffer.readOnly;if(this._firstFragment){if(this._firstFragment=!1,rsv1&&perMessageDeflate&&perMessageDeflate.params[perMessageDeflate._isServer?"server_no_context_takeover":"client_no_context_takeover"])rsv1=byteLength>=perMessageDeflate._threshold;this._compress=rsv1}else rsv1=!1,opcode=0;if(options.fin)this._firstFragment=!0;let opts={[kByteLength]:byteLength,fin:options.fin,generateMask:this._generateMask,mask:options.mask,maskBuffer:this._maskBuffer,opcode,readOnly,rsv1};if(isBlob(data))if(this._state!==DEFAULT)this.enqueue([this.getBlobData,data,this._compress,opts,cb]);else this.getBlobData(data,this._compress,opts,cb);else if(this._state!==DEFAULT)this.enqueue([this.dispatch,data,this._compress,opts,cb]);else this.dispatch(data,this._compress,opts,cb)}getBlobData(blob,compress,options,cb){this._bufferedBytes+=options[kByteLength],this._state=GET_BLOB_DATA,blob.arrayBuffer().then((arrayBuffer)=>{if(this._socket.destroyed){let err=Error("The socket was closed while the blob was being read");process.nextTick(callCallbacks,this,err,cb);return}this._bufferedBytes-=options[kByteLength];let data=toBuffer(arrayBuffer);if(!compress)this._state=DEFAULT,this.sendFrame(Sender.frame(data,options),cb),this.dequeue();else this.dispatch(data,compress,options,cb)}).catch((err)=>{process.nextTick(onError,this,err,cb)})}dispatch(data,compress,options,cb){if(!compress){this.sendFrame(Sender.frame(data,options),cb);return}let perMessageDeflate=this._extensions[PerMessageDeflate.extensionName];this._bufferedBytes+=options[kByteLength],this._state=DEFLATING,perMessageDeflate.compress(data,options.fin,(_2,buf)=>{if(this._socket.destroyed){let err=Error("The socket was closed while data was being compressed");callCallbacks(this,err,cb);return}this._bufferedBytes-=options[kByteLength],this._state=DEFAULT,options.readOnly=!1,this.sendFrame(Sender.frame(buf,options),cb),this.dequeue()})}dequeue(){while(this._state===DEFAULT&&this._queue.length){let params=this._queue.shift();this._bufferedBytes-=params[3][kByteLength],Reflect.apply(params[0],this,params.slice(1))}}enqueue(params){this._bufferedBytes+=params[3][kByteLength],this._queue.push(params)}sendFrame(list,cb){if(list.length===2)this._socket.cork(),this._socket.write(list[0]),this._socket.write(list[1],cb),this._socket.uncork();else this._socket.write(list[0],cb)}}module.exports=Sender;function callCallbacks(sender,err,cb){if(typeof cb==="function")cb(err);for(let i=0;i<sender._queue.length;i++){let params=sender._queue[i],callback=params[params.length-1];if(typeof callback==="function")callback(err)}}function onError(sender,err,cb){callCallbacks(sender,err,cb),sender.onerror(err)}});var require_event_target=__commonJS((exports,module)=>{var{kForOnEventAttribute,kListener}=require_constants(),kCode=Symbol("kCode"),kData=Symbol("kData"),kError=Symbol("kError"),kMessage=Symbol("kMessage"),kReason=Symbol("kReason"),kTarget=Symbol("kTarget"),kType=Symbol("kType"),kWasClean=Symbol("kWasClean");class Event{constructor(type){this[kTarget]=null,this[kType]=type}get target(){return this[kTarget]}get type(){return this[kType]}}Object.defineProperty(Event.prototype,"target",{enumerable:!0});Object.defineProperty(Event.prototype,"type",{enumerable:!0});class CloseEvent extends Event{constructor(type,options={}){super(type);this[kCode]=options.code===void 0?0:options.code,this[kReason]=options.reason===void 0?"":options.reason,this[kWasClean]=options.wasClean===void 0?!1:options.wasClean}get code(){return this[kCode]}get reason(){return this[kReason]}get wasClean(){return this[kWasClean]}}Object.defineProperty(CloseEvent.prototype,"code",{enumerable:!0});Object.defineProperty(CloseEvent.prototype,"reason",{enumerable:!0});Object.defineProperty(CloseEvent.prototype,"wasClean",{enumerable:!0});class ErrorEvent extends Event{constructor(type,options={}){super(type);this[kError]=options.error===void 0?null:options.error,this[kMessage]=options.message===void 0?"":options.message}get error(){return this[kError]}get message(){return this[kMessage]}}Object.defineProperty(ErrorEvent.prototype,"error",{enumerable:!0});Object.defineProperty(ErrorEvent.prototype,"message",{enumerable:!0});class MessageEvent extends Event{constructor(type,options={}){super(type);this[kData]=options.data===void 0?null:options.data}get data(){return this[kData]}}Object.defineProperty(MessageEvent.prototype,"data",{enumerable:!0});var EventTarget={addEventListener(type,handler,options={}){for(let listener of this.listeners(type))if(!options[kForOnEventAttribute]&&listener[kListener]===handler&&!listener[kForOnEventAttribute])return;let wrapper;if(type==="message")wrapper=function(data,isBinary){let event=new MessageEvent("message",{data:isBinary?data:data.toString()});event[kTarget]=this,callListener(handler,this,event)};else if(type==="close")wrapper=function(code,message){let event=new CloseEvent("close",{code,reason:message.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});event[kTarget]=this,callListener(handler,this,event)};else if(type==="error")wrapper=function(error){let event=new ErrorEvent("error",{error,message:error.message});event[kTarget]=this,callListener(handler,this,event)};else if(type==="open")wrapper=function(){let event=new Event("open");event[kTarget]=this,callListener(handler,this,event)};else return;if(wrapper[kForOnEventAttribute]=!!options[kForOnEventAttribute],wrapper[kListener]=handler,options.once)this.once(type,wrapper);else this.on(type,wrapper)},removeEventListener(type,handler){for(let listener of this.listeners(type))if(listener[kListener]===handler&&!listener[kForOnEventAttribute]){this.removeListener(type,listener);break}}};module.exports={CloseEvent,ErrorEvent,Event,EventTarget,MessageEvent};function callListener(listener,thisArg,event){if(typeof listener==="object"&&listener.handleEvent)listener.handleEvent.call(listener,event);else listener.call(thisArg,event)}});var require_extension=__commonJS((exports,module)=>{var{tokenChars}=require_validation();function push(dest,name,elem){if(dest[name]===void 0)dest[name]=[elem];else dest[name].push(elem)}function parse(header){let offers=Object.create(null),params=Object.create(null),mustUnescape=!1,isEscaping=!1,inQuotes=!1,extensionName,paramName,start=-1,code=-1,end=-1,i=0;for(;i<header.length;i++)if(code=header.charCodeAt(i),extensionName===void 0)if(end===-1&&tokenChars[code]===1){if(start===-1)start=i}else if(i!==0&&(code===32||code===9)){if(end===-1&&start!==-1)end=i}else if(code===59||code===44){if(start===-1)throw SyntaxError(`Unexpected character at index ${i}`);if(end===-1)end=i;let name=header.slice(start,end);if(code===44)push(offers,name,params),params=Object.create(null);else extensionName=name;start=end=-1}else throw SyntaxError(`Unexpected character at index ${i}`);else if(paramName===void 0)if(end===-1&&tokenChars[code]===1){if(start===-1)start=i}else if(code===32||code===9){if(end===-1&&start!==-1)end=i}else if(code===59||code===44){if(start===-1)throw SyntaxError(`Unexpected character at index ${i}`);if(end===-1)end=i;if(push(params,header.slice(start,end),!0),code===44)push(offers,extensionName,params),params=Object.create(null),extensionName=void 0;start=end=-1}else if(code===61&&start!==-1&&end===-1)paramName=header.slice(start,i),start=end=-1;else throw SyntaxError(`Unexpected character at index ${i}`);else if(isEscaping){if(tokenChars[code]!==1)throw SyntaxError(`Unexpected character at index ${i}`);if(start===-1)start=i;else if(!mustUnescape)mustUnescape=!0;isEscaping=!1}else if(inQuotes)if(tokenChars[code]===1){if(start===-1)start=i}else if(code===34&&start!==-1)inQuotes=!1,end=i;else if(code===92)isEscaping=!0;else throw SyntaxError(`Unexpected character at index ${i}`);else if(code===34&&header.charCodeAt(i-1)===61)inQuotes=!0;else if(end===-1&&tokenChars[code]===1){if(start===-1)start=i}else if(start!==-1&&(code===32||code===9)){if(end===-1)end=i}else if(code===59||code===44){if(start===-1)throw SyntaxError(`Unexpected character at index ${i}`);if(end===-1)end=i;let value=header.slice(start,end);if(mustUnescape)value=value.replace(/\\/g,""),mustUnescape=!1;if(push(params,paramName,value),code===44)push(offers,extensionName,params),params=Object.create(null),extensionName=void 0;paramName=void 0,start=end=-1}else throw SyntaxError(`Unexpected character at index ${i}`);if(start===-1||inQuotes||code===32||code===9)throw SyntaxError("Unexpected end of input");if(end===-1)end=i;let token=header.slice(start,end);if(extensionName===void 0)push(offers,token,params);else{if(paramName===void 0)push(params,token,!0);else if(mustUnescape)push(params,paramName,token.replace(/\\/g,""));else push(params,paramName,token);push(offers,extensionName,params)}return offers}function format(extensions){return Object.keys(extensions).map((extension)=>{let configurations=extensions[extension];if(!Array.isArray(configurations))configurations=[configurations];return configurations.map((params)=>{return[extension].concat(Object.keys(params).map((k)=>{let values=params[k];if(!Array.isArray(values))values=[values];return values.map((v)=>v===!0?k:`${k}=${v}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}module.exports={format,parse}});var require_websocket=__commonJS((exports,module)=>{var EventEmitter=__require("events"),https=__require("https"),http=__require("http"),net=__require("net"),tls=__require("tls"),{randomBytes,createHash}=__require("crypto"),{Duplex,Readable}=__require("stream"),{URL:URL2}=__require("url"),PerMessageDeflate=require_permessage_deflate(),Receiver=require_receiver(),Sender=require_sender(),{isBlob}=require_validation(),{BINARY_TYPES,CLOSE_TIMEOUT,EMPTY_BUFFER,GUID,kForOnEventAttribute,kListener,kStatusCode,kWebSocket,NOOP}=require_constants(),{EventTarget:{addEventListener,removeEventListener}}=require_event_target(),{format,parse}=require_extension(),{toBuffer}=require_buffer_util(),kAborted=Symbol("kAborted"),protocolVersions=[8,13],readyStates=["CONNECTING","OPEN","CLOSING","CLOSED"],subprotocolRegex=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class WebSocket extends EventEmitter{constructor(address,protocols,options){super();if(this._binaryType=BINARY_TYPES[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=EMPTY_BUFFER,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=WebSocket.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,address!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,protocols===void 0)protocols=[];else if(!Array.isArray(protocols))if(typeof protocols==="object"&&protocols!==null)options=protocols,protocols=[];else protocols=[protocols];initAsClient(this,address,protocols,options)}else this._autoPong=options.autoPong,this._closeTimeout=options.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(type){if(!BINARY_TYPES.includes(type))return;if(this._binaryType=type,this._receiver)this._receiver._binaryType=type}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(socket,head,options){let receiver=new Receiver({allowSynchronousEvents:options.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:options.maxPayload,skipUTF8Validation:options.skipUTF8Validation}),sender=new Sender(socket,this._extensions,options.generateMask);if(this._receiver=receiver,this._sender=sender,this._socket=socket,receiver[kWebSocket]=this,sender[kWebSocket]=this,socket[kWebSocket]=this,receiver.on("conclude",receiverOnConclude),receiver.on("drain",receiverOnDrain),receiver.on("error",receiverOnError),receiver.on("message",receiverOnMessage),receiver.on("ping",receiverOnPing),receiver.on("pong",receiverOnPong),sender.onerror=senderOnError,socket.setTimeout)socket.setTimeout(0);if(socket.setNoDelay)socket.setNoDelay();if(head.length>0)socket.unshift(head);socket.on("close",socketOnClose),socket.on("data",socketOnData),socket.on("end",socketOnEnd),socket.on("error",socketOnError),this._readyState=WebSocket.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=WebSocket.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[PerMessageDeflate.extensionName])this._extensions[PerMessageDeflate.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=WebSocket.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(code,data){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){abortHandshake(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===WebSocket.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=WebSocket.CLOSING,this._sender.close(code,data,!this._isServer,(err)=>{if(err)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),setCloseTimer(this)}pause(){if(this.readyState===WebSocket.CONNECTING||this.readyState===WebSocket.CLOSED)return;this._paused=!0,this._socket.pause()}ping(data,mask,cb){if(this.readyState===WebSocket.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof data==="function")cb=data,data=mask=void 0;else if(typeof mask==="function")cb=mask,mask=void 0;if(typeof data==="number")data=data.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,data,cb);return}if(mask===void 0)mask=!this._isServer;this._sender.ping(data||EMPTY_BUFFER,mask,cb)}pong(data,mask,cb){if(this.readyState===WebSocket.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof data==="function")cb=data,data=mask=void 0;else if(typeof mask==="function")cb=mask,mask=void 0;if(typeof data==="number")data=data.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,data,cb);return}if(mask===void 0)mask=!this._isServer;this._sender.pong(data||EMPTY_BUFFER,mask,cb)}resume(){if(this.readyState===WebSocket.CONNECTING||this.readyState===WebSocket.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(data,options,cb){if(this.readyState===WebSocket.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof options==="function")cb=options,options={};if(typeof data==="number")data=data.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,data,cb);return}let opts={binary:typeof data!=="string",mask:!this._isServer,compress:!0,fin:!0,...options};if(!this._extensions[PerMessageDeflate.extensionName])opts.compress=!1;this._sender.send(data||EMPTY_BUFFER,opts,cb)}terminate(){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){abortHandshake(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=WebSocket.CLOSING,this._socket.destroy()}}Object.defineProperty(WebSocket,"CONNECTING",{enumerable:!0,value:readyStates.indexOf("CONNECTING")});Object.defineProperty(WebSocket.prototype,"CONNECTING",{enumerable:!0,value:readyStates.indexOf("CONNECTING")});Object.defineProperty(WebSocket,"OPEN",{enumerable:!0,value:readyStates.indexOf("OPEN")});Object.defineProperty(WebSocket.prototype,"OPEN",{enumerable:!0,value:readyStates.indexOf("OPEN")});Object.defineProperty(WebSocket,"CLOSING",{enumerable:!0,value:readyStates.indexOf("CLOSING")});Object.defineProperty(WebSocket.prototype,"CLOSING",{enumerable:!0,value:readyStates.indexOf("CLOSING")});Object.defineProperty(WebSocket,"CLOSED",{enumerable:!0,value:readyStates.indexOf("CLOSED")});Object.defineProperty(WebSocket.prototype,"CLOSED",{enumerable:!0,value:readyStates.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((property)=>{Object.defineProperty(WebSocket.prototype,property,{enumerable:!0})});["open","error","close","message"].forEach((method)=>{Object.defineProperty(WebSocket.prototype,`on${method}`,{enumerable:!0,get(){for(let listener of this.listeners(method))if(listener[kForOnEventAttribute])return listener[kListener];return null},set(handler){for(let listener of this.listeners(method))if(listener[kForOnEventAttribute]){this.removeListener(method,listener);break}if(typeof handler!=="function")return;this.addEventListener(method,handler,{[kForOnEventAttribute]:!0})}})});WebSocket.prototype.addEventListener=addEventListener;WebSocket.prototype.removeEventListener=removeEventListener;module.exports=WebSocket;function initAsClient(websocket,address,protocols,options){let opts={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:CLOSE_TIMEOUT,protocolVersion:protocolVersions[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...options,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(websocket._autoPong=opts.autoPong,websocket._closeTimeout=opts.closeTimeout,!protocolVersions.includes(opts.protocolVersion))throw RangeError(`Unsupported protocol version: ${opts.protocolVersion} (supported versions: ${protocolVersions.join(", ")})`);let parsedUrl;if(address instanceof URL2)parsedUrl=address;else try{parsedUrl=new URL2(address)}catch{throw SyntaxError(`Invalid URL: ${address}`)}if(parsedUrl.protocol==="http:")parsedUrl.protocol="ws:";else if(parsedUrl.protocol==="https:")parsedUrl.protocol="wss:";websocket._url=parsedUrl.href;let isSecure=parsedUrl.protocol==="wss:",isIpcUrl=parsedUrl.protocol==="ws+unix:",invalidUrlMessage;if(parsedUrl.protocol!=="ws:"&&!isSecure&&!isIpcUrl)invalidUrlMessage=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(isIpcUrl&&!parsedUrl.pathname)invalidUrlMessage="The URL's pathname is empty";else if(parsedUrl.hash)invalidUrlMessage="The URL contains a fragment identifier";if(invalidUrlMessage){let err=SyntaxError(invalidUrlMessage);if(websocket._redirects===0)throw err;else{emitErrorAndClose(websocket,err);return}}let defaultPort=isSecure?443:80,key=randomBytes(16).toString("base64"),request=isSecure?https.request:http.request,protocolSet=new Set,perMessageDeflate;if(opts.createConnection=opts.createConnection||(isSecure?tlsConnect:netConnect),opts.defaultPort=opts.defaultPort||defaultPort,opts.port=parsedUrl.port||defaultPort,opts.host=parsedUrl.hostname.startsWith("[")?parsedUrl.hostname.slice(1,-1):parsedUrl.hostname,opts.headers={...opts.headers,"Sec-WebSocket-Version":opts.protocolVersion,"Sec-WebSocket-Key":key,Connection:"Upgrade",Upgrade:"websocket"},opts.path=parsedUrl.pathname+parsedUrl.search,opts.timeout=opts.handshakeTimeout,opts.perMessageDeflate)perMessageDeflate=new PerMessageDeflate({...opts.perMessageDeflate,isServer:!1,maxPayload:opts.maxPayload}),opts.headers["Sec-WebSocket-Extensions"]=format({[PerMessageDeflate.extensionName]:perMessageDeflate.offer()});if(protocols.length){for(let protocol of protocols){if(typeof protocol!=="string"||!subprotocolRegex.test(protocol)||protocolSet.has(protocol))throw SyntaxError("An invalid or duplicated subprotocol was specified");protocolSet.add(protocol)}opts.headers["Sec-WebSocket-Protocol"]=protocols.join(",")}if(opts.origin)if(opts.protocolVersion<13)opts.headers["Sec-WebSocket-Origin"]=opts.origin;else opts.headers.Origin=opts.origin;if(parsedUrl.username||parsedUrl.password)opts.auth=`${parsedUrl.username}:${parsedUrl.password}`;if(isIpcUrl){let parts=opts.path.split(":");opts.socketPath=parts[0],opts.path=parts[1]}let req;if(opts.followRedirects){if(websocket._redirects===0){websocket._originalIpc=isIpcUrl,websocket._originalSecure=isSecure,websocket._originalHostOrSocketPath=isIpcUrl?opts.socketPath:parsedUrl.host;let headers=options&&options.headers;if(options={...options,headers:{}},headers)for(let[key2,value]of Object.entries(headers))options.headers[key2.toLowerCase()]=value}else if(websocket.listenerCount("redirect")===0){let isSameHost=isIpcUrl?websocket._originalIpc?opts.socketPath===websocket._originalHostOrSocketPath:!1:websocket._originalIpc?!1:parsedUrl.host===websocket._originalHostOrSocketPath;if(!isSameHost||websocket._originalSecure&&!isSecure){if(delete opts.headers.authorization,delete opts.headers.cookie,!isSameHost)delete opts.headers.host;opts.auth=void 0}}if(opts.auth&&!options.headers.authorization)options.headers.authorization="Basic "+Buffer.from(opts.auth).toString("base64");if(req=websocket._req=request(opts),websocket._redirects)websocket.emit("redirect",websocket.url,req)}else req=websocket._req=request(opts);if(opts.timeout)req.on("timeout",()=>{abortHandshake(websocket,req,"Opening handshake has timed out")});if(req.on("error",(err)=>{if(req===null||req[kAborted])return;req=websocket._req=null,emitErrorAndClose(websocket,err)}),req.on("response",(res)=>{let location=res.headers.location,statusCode=res.statusCode;if(location&&opts.followRedirects&&statusCode>=300&&statusCode<400){if(++websocket._redirects>opts.maxRedirects){abortHandshake(websocket,req,"Maximum redirects exceeded");return}req.abort();let addr;try{addr=new URL2(location,address)}catch(e){let err=SyntaxError(`Invalid URL: ${location}`);emitErrorAndClose(websocket,err);return}initAsClient(websocket,addr,protocols,options)}else if(!websocket.emit("unexpected-response",req,res))abortHandshake(websocket,req,`Unexpected server response: ${res.statusCode}`)}),req.on("upgrade",(res,socket,head)=>{if(websocket.emit("upgrade",res),websocket.readyState!==WebSocket.CONNECTING)return;req=websocket._req=null;let upgrade=res.headers.upgrade;if(upgrade===void 0||upgrade.toLowerCase()!=="websocket"){abortHandshake(websocket,socket,"Invalid Upgrade header");return}let digest=createHash("sha1").update(key+GUID).digest("base64");if(res.headers["sec-websocket-accept"]!==digest){abortHandshake(websocket,socket,"Invalid Sec-WebSocket-Accept header");return}let serverProt=res.headers["sec-websocket-protocol"],protError;if(serverProt!==void 0){if(!protocolSet.size)protError="Server sent a subprotocol but none was requested";else if(!protocolSet.has(serverProt))protError="Server sent an invalid subprotocol"}else if(protocolSet.size)protError="Server sent no subprotocol";if(protError){abortHandshake(websocket,socket,protError);return}if(serverProt)websocket._protocol=serverProt;let secWebSocketExtensions=res.headers["sec-websocket-extensions"];if(secWebSocketExtensions!==void 0){if(!perMessageDeflate){abortHandshake(websocket,socket,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let extensions;try{extensions=parse(secWebSocketExtensions)}catch(err){abortHandshake(websocket,socket,"Invalid Sec-WebSocket-Extensions header");return}let extensionNames=Object.keys(extensions);if(extensionNames.length!==1||extensionNames[0]!==PerMessageDeflate.extensionName){abortHandshake(websocket,socket,"Server indicated an extension that was not requested");return}try{perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName])}catch(err){abortHandshake(websocket,socket,"Invalid Sec-WebSocket-Extensions header");return}websocket._extensions[PerMessageDeflate.extensionName]=perMessageDeflate}websocket.setSocket(socket,head,{allowSynchronousEvents:opts.allowSynchronousEvents,generateMask:opts.generateMask,maxPayload:opts.maxPayload,skipUTF8Validation:opts.skipUTF8Validation})}),opts.finishRequest)opts.finishRequest(req,websocket);else req.end()}function emitErrorAndClose(websocket,err){websocket._readyState=WebSocket.CLOSING,websocket._errorEmitted=!0,websocket.emit("error",err),websocket.emitClose()}function netConnect(options){return options.path=options.socketPath,net.connect(options)}function tlsConnect(options){if(options.path=void 0,!options.servername&&options.servername!=="")options.servername=net.isIP(options.host)?"":options.host;return tls.connect(options)}function abortHandshake(websocket,stream,message){websocket._readyState=WebSocket.CLOSING;let err=Error(message);if(Error.captureStackTrace(err,abortHandshake),stream.setHeader){if(stream[kAborted]=!0,stream.abort(),stream.socket&&!stream.socket.destroyed)stream.socket.destroy();process.nextTick(emitErrorAndClose,websocket,err)}else stream.destroy(err),stream.once("error",websocket.emit.bind(websocket,"error")),stream.once("close",websocket.emitClose.bind(websocket))}function sendAfterClose(websocket,data,cb){if(data){let length=isBlob(data)?data.size:toBuffer(data).length;if(websocket._socket)websocket._sender._bufferedBytes+=length;else websocket._bufferedAmount+=length}if(cb){let err=Error(`WebSocket is not open: readyState ${websocket.readyState} (${readyStates[websocket.readyState]})`);process.nextTick(cb,err)}}function receiverOnConclude(code,reason){let websocket=this[kWebSocket];if(websocket._closeFrameReceived=!0,websocket._closeMessage=reason,websocket._closeCode=code,websocket._socket[kWebSocket]===void 0)return;if(websocket._socket.removeListener("data",socketOnData),process.nextTick(resume,websocket._socket),code===1005)websocket.close();else websocket.close(code,reason)}function receiverOnDrain(){let websocket=this[kWebSocket];if(!websocket.isPaused)websocket._socket.resume()}function receiverOnError(err){let websocket=this[kWebSocket];if(websocket._socket[kWebSocket]!==void 0)websocket._socket.removeListener("data",socketOnData),process.nextTick(resume,websocket._socket),websocket.close(err[kStatusCode]);if(!websocket._errorEmitted)websocket._errorEmitted=!0,websocket.emit("error",err)}function receiverOnFinish(){this[kWebSocket].emitClose()}function receiverOnMessage(data,isBinary){this[kWebSocket].emit("message",data,isBinary)}function receiverOnPing(data){let websocket=this[kWebSocket];if(websocket._autoPong)websocket.pong(data,!this._isServer,NOOP);websocket.emit("ping",data)}function receiverOnPong(data){this[kWebSocket].emit("pong",data)}function resume(stream){stream.resume()}function senderOnError(err){let websocket=this[kWebSocket];if(websocket.readyState===WebSocket.CLOSED)return;if(websocket.readyState===WebSocket.OPEN)websocket._readyState=WebSocket.CLOSING,setCloseTimer(websocket);if(this._socket.end(),!websocket._errorEmitted)websocket._errorEmitted=!0,websocket.emit("error",err)}function setCloseTimer(websocket){websocket._closeTimer=setTimeout(websocket._socket.destroy.bind(websocket._socket),websocket._closeTimeout)}function socketOnClose(){let websocket=this[kWebSocket];if(this.removeListener("close",socketOnClose),this.removeListener("data",socketOnData),this.removeListener("end",socketOnEnd),websocket._readyState=WebSocket.CLOSING,!this._readableState.endEmitted&&!websocket._closeFrameReceived&&!websocket._receiver._writableState.errorEmitted&&this._readableState.length!==0){let chunk=this.read(this._readableState.length);websocket._receiver.write(chunk)}if(websocket._receiver.end(),this[kWebSocket]=void 0,clearTimeout(websocket._closeTimer),websocket._receiver._writableState.finished||websocket._receiver._writableState.errorEmitted)websocket.emitClose();else websocket._receiver.on("error",receiverOnFinish),websocket._receiver.on("finish",receiverOnFinish)}function socketOnData(chunk){if(!this[kWebSocket]._receiver.write(chunk))this.pause()}function socketOnEnd(){let websocket=this[kWebSocket];websocket._readyState=WebSocket.CLOSING,websocket._receiver.end(),this.end()}function socketOnError(){let websocket=this[kWebSocket];if(this.removeListener("error",socketOnError),this.on("error",NOOP),websocket)websocket._readyState=WebSocket.CLOSING,this.destroy()}});var require_stream=__commonJS((exports,module)=>{var WebSocket=require_websocket(),{Duplex}=__require("stream");function emitClose(stream){stream.emit("close")}function duplexOnEnd(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function duplexOnError(err){if(this.removeListener("error",duplexOnError),this.destroy(),this.listenerCount("error")===0)this.emit("error",err)}function createWebSocketStream(ws,options){let terminateOnDestroy=!0,duplex=new Duplex({...options,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return ws.on("message",function(msg,isBinary){let data=!isBinary&&duplex._readableState.objectMode?msg.toString():msg;if(!duplex.push(data))ws.pause()}),ws.once("error",function(err){if(duplex.destroyed)return;terminateOnDestroy=!1,duplex.destroy(err)}),ws.once("close",function(){if(duplex.destroyed)return;duplex.push(null)}),duplex._destroy=function(err,callback){if(ws.readyState===ws.CLOSED){callback(err),process.nextTick(emitClose,duplex);return}let called=!1;if(ws.once("error",function(err2){called=!0,callback(err2)}),ws.once("close",function(){if(!called)callback(err);process.nextTick(emitClose,duplex)}),terminateOnDestroy)ws.terminate()},duplex._final=function(callback){if(ws.readyState===ws.CONNECTING){ws.once("open",function(){duplex._final(callback)});return}if(ws._socket===null)return;if(ws._socket._writableState.finished){if(callback(),duplex._readableState.endEmitted)duplex.destroy()}else ws._socket.once("finish",function(){callback()}),ws.close()},duplex._read=function(){if(ws.isPaused)ws.resume()},duplex._write=function(chunk,encoding,callback){if(ws.readyState===ws.CONNECTING){ws.once("open",function(){duplex._write(chunk,encoding,callback)});return}ws.send(chunk,callback)},duplex.on("end",duplexOnEnd),duplex.on("error",duplexOnError),duplex}module.exports=createWebSocketStream});var require_subprotocol=__commonJS((exports,module)=>{var{tokenChars}=require_validation();function parse(header){let protocols=new Set,start=-1,end=-1,i=0;for(i;i<header.length;i++){let code=header.charCodeAt(i);if(end===-1&&tokenChars[code]===1){if(start===-1)start=i}else if(i!==0&&(code===32||code===9)){if(end===-1&&start!==-1)end=i}else if(code===44){if(start===-1)throw SyntaxError(`Unexpected character at index ${i}`);if(end===-1)end=i;let protocol2=header.slice(start,end);if(protocols.has(protocol2))throw SyntaxError(`The "${protocol2}" subprotocol is duplicated`);protocols.add(protocol2),start=end=-1}else throw SyntaxError(`Unexpected character at index ${i}`)}if(start===-1||end!==-1)throw SyntaxError("Unexpected end of input");let protocol=header.slice(start,i);if(protocols.has(protocol))throw SyntaxError(`The "${protocol}" subprotocol is duplicated`);return protocols.add(protocol),protocols}module.exports={parse}});var require_websocket_server=__commonJS((exports,module)=>{var EventEmitter=__require("events"),http=__require("http"),{Duplex}=__require("stream"),{createHash}=__require("crypto"),extension=require_extension(),PerMessageDeflate=require_permessage_deflate(),subprotocol=require_subprotocol(),WebSocket=require_websocket(),{CLOSE_TIMEOUT,GUID,kWebSocket}=require_constants(),keyRegex=/^[+/0-9A-Za-z]{22}==$/;class WebSocketServer extends EventEmitter{constructor(options,callback){super();if(options={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:CLOSE_TIMEOUT,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket,...options},options.port==null&&!options.server&&!options.noServer||options.port!=null&&(options.server||options.noServer)||options.server&&options.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(options.port!=null)this._server=http.createServer((req,res)=>{let body=http.STATUS_CODES[426];res.writeHead(426,{"Content-Length":body.length,"Content-Type":"text/plain"}),res.end(body)}),this._server.listen(options.port,options.host,options.backlog,callback);else if(options.server)this._server=options.server;if(this._server){let emitConnection=this.emit.bind(this,"connection");this._removeListeners=addListeners(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(req,socket,head)=>{this.handleUpgrade(req,socket,head,emitConnection)}})}if(options.perMessageDeflate===!0)options.perMessageDeflate={};if(options.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=options,this._state=0}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(cb){if(this._state===2){if(cb)this.once("close",()=>{cb(Error("The server is not running"))});process.nextTick(emitClose,this);return}if(cb)this.once("close",cb);if(this._state===1)return;if(this._state=1,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(emitClose,this);else this._shouldEmitClose=!0;else process.nextTick(emitClose,this)}else{let server=this._server;this._removeListeners(),this._removeListeners=this._server=null,server.close(()=>{emitClose(this)})}}shouldHandle(req){if(this.options.path){let index=req.url.indexOf("?");if((index!==-1?req.url.slice(0,index):req.url)!==this.options.path)return!1}return!0}handleUpgrade(req,socket,head,cb){socket.on("error",socketOnError);let key=req.headers["sec-websocket-key"],upgrade=req.headers.upgrade,version=+req.headers["sec-websocket-version"];if(req.method!=="GET"){abortHandshakeOrEmitwsClientError(this,req,socket,405,"Invalid HTTP method");return}if(upgrade===void 0||upgrade.toLowerCase()!=="websocket"){abortHandshakeOrEmitwsClientError(this,req,socket,400,"Invalid Upgrade header");return}if(key===void 0||!keyRegex.test(key)){abortHandshakeOrEmitwsClientError(this,req,socket,400,"Missing or invalid Sec-WebSocket-Key header");return}if(version!==13&&version!==8){abortHandshakeOrEmitwsClientError(this,req,socket,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(req)){abortHandshake(socket,400);return}let secWebSocketProtocol=req.headers["sec-websocket-protocol"],protocols=new Set;if(secWebSocketProtocol!==void 0)try{protocols=subprotocol.parse(secWebSocketProtocol)}catch(err){abortHandshakeOrEmitwsClientError(this,req,socket,400,"Invalid Sec-WebSocket-Protocol header");return}let secWebSocketExtensions=req.headers["sec-websocket-extensions"],extensions={};if(this.options.perMessageDeflate&&secWebSocketExtensions!==void 0){let perMessageDeflate=new PerMessageDeflate({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let offers=extension.parse(secWebSocketExtensions);if(offers[PerMessageDeflate.extensionName])perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]),extensions[PerMessageDeflate.extensionName]=perMessageDeflate}catch(err){abortHandshakeOrEmitwsClientError(this,req,socket,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let info={origin:req.headers[`${version===8?"sec-websocket-origin":"origin"}`],secure:!!(req.socket.authorized||req.socket.encrypted),req};if(this.options.verifyClient.length===2){this.options.verifyClient(info,(verified,code,message,headers)=>{if(!verified)return abortHandshake(socket,code||401,message,headers);this.completeUpgrade(extensions,key,protocols,req,socket,head,cb)});return}if(!this.options.verifyClient(info))return abortHandshake(socket,401)}this.completeUpgrade(extensions,key,protocols,req,socket,head,cb)}completeUpgrade(extensions,key,protocols,req,socket,head,cb){if(!socket.readable||!socket.writable)return socket.destroy();if(socket[kWebSocket])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return abortHandshake(socket,503);let headers=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${createHash("sha1").update(key+GUID).digest("base64")}`],ws=new this.options.WebSocket(null,void 0,this.options);if(protocols.size){let protocol=this.options.handleProtocols?this.options.handleProtocols(protocols,req):protocols.values().next().value;if(protocol)headers.push(`Sec-WebSocket-Protocol: ${protocol}`),ws._protocol=protocol}if(extensions[PerMessageDeflate.extensionName]){let params=extensions[PerMessageDeflate.extensionName].params,value=extension.format({[PerMessageDeflate.extensionName]:[params]});headers.push(`Sec-WebSocket-Extensions: ${value}`),ws._extensions=extensions}if(this.emit("headers",headers,req),socket.write(headers.concat(`\r
73
73
  `).join(`\r
74
74
  `)),socket.removeListener("error",socketOnError),ws.setSocket(socket,head,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(ws),ws.on("close",()=>{if(this.clients.delete(ws),this._shouldEmitClose&&!this.clients.size)process.nextTick(emitClose,this)});cb(ws,req)}}module.exports=WebSocketServer;function addListeners(server,map){for(let event of Object.keys(map))server.on(event,map[event]);return function(){for(let event of Object.keys(map))server.removeListener(event,map[event])}}function emitClose(server){server._state=2,server.emit("close")}function socketOnError(){this.destroy()}function abortHandshake(socket,code,message,headers){message=message||http.STATUS_CODES[code],headers={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(message),...headers},socket.once("finish",socket.destroy),socket.end(`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r
@@ -341,4 +341,4 @@ ${details}`+(violations.length>10?`
341
341
  ... and ${violations.length-10} more`:"")+(screenshotPath?`
342
342
  Screenshot saved: ${screenshotPath}`:""))}}};return Object.defineProperties(wrapped,{id:{value:command.id,enumerable:!0},name:{value:command.name,enumerable:!0},help:{value:command.help,enumerable:!0},keys:{value:command.keys,enumerable:!0}}),wrapped},has(target,prop){return Reflect.has(target,prop)},ownKeys(target){return Reflect.ownKeys(target)},getOwnPropertyDescriptor(target,prop){return Reflect.getOwnPropertyDescriptor(target,prop)}});return Object.assign(app,{cmd:wrappedCmd})}init_context();init_keys();import{useCallback as useCallback30,useId,useLayoutEffect as useLayoutEffect7,useMemo as useMemo19,useRef as useRef28}from"react";import{jsxDEV as jsxDEV47}from"react/jsx-dev-runtime";function createSubscriberList2(){return{input:new Set,paste:new Set}}function toRawData(input,key){let name=keyToName(key);if(name){let mods=[];if(key.ctrl)mods.push("Control");if(key.shift)mods.push("Shift");if(key.meta)mods.push("Meta");if(key.super)mods.push("Super");if(key.hyper)mods.push("Hyper");return mods.push(name),keyToAnsi(mods.join("+"))}if(key.ctrl)return keyToAnsi(`Control+${input}`);return input}function InputBoundary({active,onEscape,exitKey="Escape",children}){let subscribersRef=useRef28(null);if(!subscribersRef.current)subscribersRef.current=createSubscriberList2();let subscribers=subscribersRef.current,activeRef=useRef28(active);activeRef.current=active;let onEscapeRef=useRef28(onEscape);onEscapeRef.current=onEscape;let exitKeyRef=useRef28(exitKey);exitKeyRef.current=exitKey;let handler=useCallback30((input,key)=>{if(!activeRef.current)return!1;let currentExitKey=exitKeyRef.current;if(currentExitKey!==null){let name=keyToName(key);if(name===currentExitKey||!name&&input===currentExitKey)return onEscapeRef.current?.(),!0}let raw=toRawData(input,key),[parsedInput,parsedKey]=parseKey(raw);for(let h of subscribers.input)h(parsedInput,parsedKey);return!0},[subscribers]),layerId=useId();useInputLayer(`input-boundary-${layerId}`,handler);let runtimeContextValue=useMemo19(()=>({on(event,handler2){if(event==="input"){let typed=handler2;return subscribers.input.add(typed),()=>{subscribers.input.delete(typed)}}if(event==="paste"){let typed=handler2;return subscribers.paste.add(typed),()=>{subscribers.paste.delete(typed)}}return()=>{}},emit(){},exit:()=>{}}),[subscribers]);return useLayoutEffect7(()=>{return()=>{subscribers.input.clear(),subscribers.paste.clear()}},[subscribers]),jsxDEV47(RuntimeContext.Provider,{value:runtimeContextValue,children:jsxDEV47(InputLayerProvider,{children},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var easings={linear:(t)=>t,ease:(t)=>t<0.5?2*t*t:-1+(4-2*t)*t,easeIn:(t)=>t*t,easeOut:(t)=>t*(2-t),easeInOut:(t)=>t<0.5?2*t*t:-1+(4-2*t)*t,easeInCubic:(t)=>t*t*t,easeOutCubic:(t)=>--t*t*t+1};function resolveEasing(easing){return typeof easing==="function"?easing:easings[easing]}import{useState as useState21,useEffect as useEffect24,useRef as useRef29,useCallback as useCallback31}from"react";var TICK_MS=33;function useAnimation2(options){let{duration,easing="linear",delay=0,onComplete,enabled=!0}=options,[value,setValue]=useState21(0),[isAnimating,setIsAnimating]=useState21(!1),startTimeRef=useRef29(0),intervalRef=useRef29(null),onCompleteRef=useRef29(onComplete);onCompleteRef.current=onComplete;let epochRef=useRef29(0),easingFn=resolveEasing(easing),stopInterval=useCallback31(()=>{if(intervalRef.current!==null)clearInterval(intervalRef.current),intervalRef.current=null},[]),startAnimation=useCallback31(()=>{stopInterval(),epochRef.current++;let epoch=epochRef.current;setValue(0),setIsAnimating(!0);let begin=()=>{if(epochRef.current!==epoch)return;startTimeRef.current=performance.now(),intervalRef.current=setInterval(()=>{if(epochRef.current!==epoch)return;let elapsed=performance.now()-startTimeRef.current,raw=Math.min(elapsed/duration,1),eased=easingFn(raw);if(setValue(eased),raw>=1)stopInterval(),setIsAnimating(!1),onCompleteRef.current?.()},TICK_MS)};if(delay>0)setTimeout(()=>begin(),delay);else begin()},[duration,delay,easingFn,stopInterval]);useEffect24(()=>{if(!enabled){stopInterval(),setValue(0),setIsAnimating(!1);return}return startAnimation(),()=>{stopInterval()}},[enabled,startAnimation,stopInterval]);let reset=useCallback31(()=>{startAnimation()},[startAnimation]);return{value,isAnimating,reset}}import{useState as useState22,useEffect as useEffect25,useRef as useRef30}from"react";var TICK_MS2=33;function useTransition(targetValue,options){let{duration=300,easing="easeOut"}=options??{},[currentValue,setCurrentValue]=useState22(targetValue),fromRef=useRef30(targetValue),toRef=useRef30(targetValue),startTimeRef=useRef30(0),intervalRef=useRef30(null),isFirstRef=useRef30(!0),easingFn=resolveEasing(easing);return useEffect25(()=>{if(isFirstRef.current){isFirstRef.current=!1;return}if(targetValue===toRef.current)return;if(fromRef.current=currentValue,toRef.current=targetValue,startTimeRef.current=performance.now(),intervalRef.current!==null)clearInterval(intervalRef.current);return intervalRef.current=setInterval(()=>{let elapsed=performance.now()-startTimeRef.current,raw=Math.min(elapsed/duration,1),eased=easingFn(raw),interpolated=fromRef.current+(toRef.current-fromRef.current)*eased;if(setCurrentValue(interpolated),raw>=1){if(setCurrentValue(toRef.current),intervalRef.current!==null)clearInterval(intervalRef.current),intervalRef.current=null}},TICK_MS2),()=>{if(intervalRef.current!==null)clearInterval(intervalRef.current),intervalRef.current=null}},[targetValue,duration,easingFn]),currentValue}import{useEffect as useEffect26,useRef as useRef31}from"react";function useInterval(callback,ms,enabled=!0){let callbackRef=useRef31(callback);callbackRef.current=callback,useEffect26(()=>{if(!enabled)return;let id=setInterval(()=>{callbackRef.current()},ms);return()=>{clearInterval(id)}},[ms,enabled])}import{useCallback as useCallback32,useEffect as useEffect27,useRef as useRef32}from"react";function useTimeout(callback,ms,enabled=!0){let callbackRef=useRef32(callback);callbackRef.current=callback;let timerRef=useRef32(null),clear=useCallback32(()=>{if(timerRef.current!==null)clearTimeout(timerRef.current),timerRef.current=null},[]),reset=useCallback32(()=>{if(clear(),enabled)timerRef.current=setTimeout(()=>{timerRef.current=null,callbackRef.current()},ms)},[ms,enabled,clear]);return useEffect27(()=>{if(!enabled){clear();return}return timerRef.current=setTimeout(()=>{timerRef.current=null,callbackRef.current()},ms),clear},[ms,enabled,clear]),{reset,clear}}import{useRef as useRef33}from"react";function useLatest(value){let ref=useRef33(value);return ref.current=value,ref}import{useCallback as useCallback33,useEffect as useEffect28,useRef as useRef34,useReducer as useReducer4}from"react";function collect(result){if(Array.isArray(result))return result;return[result,[]]}function delay(ms,msg,id){return{type:"delay",ms,msg,id}}function interval(ms,msg,id){return{type:"interval",ms,msg,id}}function cancel(id){return{type:"cancel",id}}var fx={delay,interval,cancel};function createTimerRunners(){let timers=new Map,nextAnon=0;function clearTimer(id){let existing=timers.get(id);if(existing!==void 0)clearTimeout(existing),clearInterval(existing),timers.delete(id)}let runners={delay(effect2,dispatch){let id=effect2.id??`__anon_${nextAnon++}`;clearTimer(id);let timer=setTimeout(()=>{timers.delete(id),dispatch(effect2.msg)},effect2.ms);timers.set(id,timer)},interval(effect2,dispatch){clearTimer(effect2.id);let timer=setInterval(()=>{dispatch(effect2.msg)},effect2.ms);timers.set(effect2.id,timer)},cancel(effect2){clearTimer(effect2.id)}};function cleanup(){for(let[id]of timers)clearTimer(id)}return{runners,cleanup}}function useTea(initialState,update,customRunners){let timerRef=useRef34(null);if(timerRef.current===null)timerRef.current=createTimerRunners();let{runners:timerRunners,cleanup}=timerRef.current,customRunnersRef=useRef34(customRunners);customRunnersRef.current=customRunners;let pendingEffectsRef=useRef34([]),[state,reactDispatch]=useReducer4((prevState,msg)=>{let result=update(prevState,msg),[newState,effects]=collect(result);if(effects.length>0)pendingEffectsRef.current.push(...effects);return newState},void 0,()=>typeof initialState==="function"?initialState():initialState),sendRef=useRef34(()=>{}),executeEffects=useCallback33(()=>{if(pendingEffectsRef.current.length===0)return;let effects=pendingEffectsRef.current.splice(0);for(let effect2 of effects){let timerRunner=timerRunners[effect2.type];if(timerRunner){timerRunner(effect2,sendRef.current);continue}let customRunner=customRunnersRef.current?.[effect2.type];if(customRunner)customRunner(effect2,sendRef.current)}},[timerRunners]),send=useCallback33((msg)=>{reactDispatch(msg),queueMicrotask(executeEffects)},[reactDispatch,executeEffects]);return sendRef.current=send,useEffect28(()=>{executeEffects()},[executeEffects]),useEffect28(()=>cleanup,[cleanup]),[state,send]}init_keys();init_ag();init_ag();init_output_phase();init_ag();init_reconciler();init_context();import React25 from"react";init_keys();init_buffer();init_pipeline2();init_output_phase();init_text_sizing();init_src2();init_mouse();init_unicode();init_unicode();init_errors();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_ansi2();init_unicode();init_keys();import React26,{createContext as createContext13,Fragment as Fragment4}from"react";var InkCursorStoreCtx=createContext13(null);import React27,{createContext as createContext14,Fragment as Fragment5,useCallback as useCallback34,useEffect as useEffect29,useMemo as useMemo20,useState as useState23}from"react";var InkFocusContext=createContext14({activeId:void 0,isFocusEnabled:!0,add(){},remove(){},activate(){},deactivate(){},enableFocus(){},disableFocus(){},focusNext(){},focusPrevious(){},focus(){},blur(){}});import process3 from"node:process";import React29,{createContext as createContext15,useContext as useContext36,useEffect as useEffect30,useRef as useRef35}from"react";init_esm();init_ansi2();init_context();init_pipeline2();init_ag();init_text_sizing();init_reconciler();init_buffer();init_output_phase();init_pipeline2();init_reconciler();init_keys();init_keys2();init_ansi2();init_buffer();init_context();init_pipeline2();init_reconciler();import React28 from"react";init_term_provider();init_output_guard();import{createLogger as createLogger17}from"loggily";var perfLog=createLogger17("silvery:perf");import{createLogger as createLogger18}from"loggily";import{jsxDEV as jsxDEV48}from"react/jsx-dev-runtime";var log14=createLogger18("silvery:app"),ENV=typeof process3<"u"?process3.env:void 0,NO_INCREMENTAL=ENV?.SILVERY_NO_INCREMENTAL==="1",STRICT_MODE=(()=>{let v=ENV?.SILVERY_STRICT;return!!v&&v!=="0"&&v!=="false"})(),CELL_DEBUG=(()=>{let v=ENV?.SILVERY_CELL_DEBUG;if(!v||!v.includes(","))return null;let[cx,cy]=v.split(",").map(Number);if(!Number.isFinite(cx)||!Number.isFinite(cy))return null;return{x:cx,y:cy}})();var StoreContext=createContext15(null);import{jsxDEV as jsxDEV49}from"react/jsx-dev-runtime";function ReactiveThemeInner({dark=defaultDarkTheme,light=defaultLightTheme,initial,children}){let scheme=useColorScheme(),theme2;if(scheme==="light")theme2=light;else if(scheme==="dark")theme2=dark;else theme2=initial??dark;return jsxDEV49(ThemeProvider,{theme:theme2,children},void 0,!1,void 0,this)}function ReactiveThemeProvider(props){return jsxDEV49(ReactiveThemeInner,{...props},void 0,!1,void 0,this)}var VERSION="0.0.1";function render2(element,termOrDef,options){if(!termOrDef&&process.stdin?.isTTY&&process.stdout?.isTTY){let ttyDef={stdin:process.stdin,stdout:process.stdout};return render(element,ttyDef,options)}return render(element,termOrDef,options)}export{writeTextTruncated,writeTextToBuffer,writeLinesToBuffer,wrapText,withRender,withMeasurer,withKeybindings,withDiagnostics,withCommands,useWindowSize,useVirtualizer,useTransition2 as useTransition,useToast,useTimeout,useTheme,useTextArea,useTerminalFocused,useTerm,useTea,useStdout,useStderr,useSelection,useSearchOptional,useSearch,useScrollRect,useScreenRect,useRuntime,useReadline,usePositionRegistry,usePasteEvents,usePaste,useMouseCursor,useModifierKeys,useListItem,useLatest,useInterval,useInteractiveState,useInputLayerContext,useInputLayer,useInput,useId2 as useId,useHitRegistry,useHitRegionCallback,useHitRegion,useGridPosition,useFocusable,useFocusWithin,useFocusManager,useFocus,useFindState,useEditContext,useDragState,useDeferredValue,useCursor,useCopyModeState,useConsole,useColorScheme,useBoxRect,useBoxMetrics,useApp,useAnimation2 as useAnimation,useTransition as useAnimatedTransition,truncateText,truncateAnsi,textSized,term,swapPanes,supportsScrollRegions,subscribeCursor,stripAnsi2 as stripAnsiUnicode,stripAnsi2 as stripAnsi,splitPane,splitGraphemes,sliceByWidthRange,sliceByWidthFromEnd,sliceByWidth,shallow,setWindowTitle,setWindowAndIconTitle,setTextSizingEnabled,setTextEmojiWide,setScrollRegion2 as setScrollRegion,setPaletteColor,setOutputCaps,setMouseCursorShape,setLayoutEngine,setForegroundColor,setCursorStyle,setCursorColor,setBackgroundColor,scrollUp2 as scrollUp,scrollDown2 as scrollDown,runWithMeasurer,runTermtest,rowColToCursor,resolveThemeColor,resolveNonTTYMode,resolveEasing,resizeSplit,resetWindowTitle,resetScrollRegion2 as resetScrollRegion,resetMouseCursorShape,resetHitRegionIdCounter,resetForegroundColor,resetCursorStyle,resetCursorState,resetCursorColor,resetBackgroundColor,requestClipboard,reportDirectory,renderSync,renderStringSync,renderString,renderStatic,renderScreenReaderOutput,render2 as render,removePane,queryTextAreaSize,queryTextAreaPixels,queryTertiaryDA,queryTerminalVersion,querySecondaryDA,queryPrimaryDA,queryPaletteColor,queryMultiplePaletteColors,queryModes,queryMode,queryKittyKeyboard,queryForegroundColor,queryDeviceAttributes,queryCursorPosition,queryCursorFromStdio,queryCursorColor,queryCellSize,queryBackgroundColor,processMouseEvent,patchConsole,parsePaletteResponse,parseMouseSequence,parseKeypress,parseKey,parseHotkey,parseFocusEvent,parseClipboardResponse,parseBracketedPaste,parseAnsiText,padText,notifyKitty,notifyITerm2,notify,normalizeText,moveCursor2 as moveCursor,mergeTextOps,measureText,measureElement,matchHotkey,lastModifierState,keyToName,keyToModifiers,isZeroWidthGrapheme,isWideGrapheme,isTextSizingLikelySupported,isTextSizingEnabled,isTerm,isTTY,isSixelSupported,isPrivateUseArea,isMouseSequence,isLikelyEmoji,isLayoutEngineInitialized,isKittyGraphicsSupported,isInspectorEnabled,isDevToolsConnected,isCJK,invertTextOp,inspectTree,inspectFrame,injectDOMStyles,initYogaEngine,hitTest,hasZeroWidthCharacters,hasWideCharacters,hasAnsi,graphemeWidth,graphemeCount,getWrappedLines,getThemeByName,getTabOrder2 as getTabOrder,getTabOrder as getSplitTabOrder,getPaneIds,getModifierState,getInternalClipboard,getFirstCodePoint,getExplicitFocusLink,getCursorState,generateTheme,fx,formatTitleWithHotkey,findSpatialTarget,findFocusableAncestor,findEnclosingScope,findByTestID,findAdjacentPane,ensureEmojiPresentation,encodeSixel,encodeKittyImage,enableMouse2 as enableMouse,enableKittyKeyboard2 as enableKittyKeyboard,enableInspector,enableFocusReporting,enableBracketedPaste2 as enableBracketedPaste,emptyKey,easings,displayWidthAnsi,displayWidth,dispatchMouseEvent,dispatchKeyEvent,dispatchFocusEvent,disableMouse2 as disableMouse,disableKittyKeyboard2 as disableKittyKeyboard,disableInspector,disableFocusReporting,disableBracketedPaste2 as disableBracketedPaste,detectTheme2 as detectTheme,detectTextSizingSupport,detectTerminalCaps,detectKittySupport,detectKittyFromStdio,detectColorScheme,deriveTheme,deleteKittyImage,defaultLightTheme,defaultDarkTheme,defaultCaps,cursorToRowCol,cursorMoveUp,cursorMoveDown,createYogaEngine,createWidthMeasurer,createWheelEvent,createTermEditContext,createTerm,createPositionRegistry,createPipeline,createPasteEvent,createOutputPhase,createMouseEventProcessor,createMouseEvent,createMeasurer,createLeaf,createKeyEvent,createInputEvents,createFocusManager,createFocusEvent,createFlexilyZeroEngine as createFlexilyEngine,createDoubleClickState,createDOMAdapter,createCursorStore,createCopyProvider,createCanvasAdapter,countVisualLines,copyToClipboard,constrainText,connectDevTools,computeEnterLeave,collect,clampScroll,checkDoubleClick,calcEdgeBasedScrollOffset,builtinThemes,autoEnableInspector,applyTextOp,ansi16LightTheme2 as ansi16LightTheme,ansi16DarkTheme2 as ansi16DarkTheme,activeEditTargetRef,activeEditContextRef,Z_INDEX,YogaLayoutEngine,VirtualTerminal,VERSION,UL,TreeView,Transform,Tooltip,Toggle,ToastItem,ToastContainer,ThemeProvider,TextInput,TextArea,Text,TermContext,Tabs,Table,TabPanel,TabList,Tab,TERMTEST_SECTIONS,Strong,StderrContext,Static,SplitView,Spinner,Spacer,Small,Skeleton,SilveryErrorBoundary,SelectList,SearchProvider,SearchBar,Screen,RuntimeContext,ReactiveThemeProvider,ProgressBar,PositionRegistryProvider,PickerList,PickerDialog,PasteProvider,PASTE_START,PASTE_END,P,OSC133,OL,Newline,Muted,ModalDialog,ListView,Link,Lead,LI,KittyFlags,Kbd,InputLayerProvider,InputLayerContext,InputBoundary,IncrementalRenderMismatchError,Image,HorizontalVirtualList,HitRegistryContext,HitRegistry,Heading,HR,H3,H2,H1,GridCell,FormField,Form,FocusManagerContext,FlexilyZeroLayoutEngine as FlexilyLayoutEngine,Fill,ErrorBoundary,Em,EditContextDisplay,Divider,DecMode,DOMRenderBuffer,CursorProvider,CursorLine,Console,CommandPalette,CodeBlock,Code,CapabilityRegistryContext,CanvasRenderBuffer,CacheBackendContext,Button,Breadcrumb,Box,Blockquote,Badge,BEL,ANSI};
343
343
 
344
- //# debugId=F8F7193E44E1E9F364756E2164756E21
344
+ //# debugId=5C0666DE0583D5DE64756E2164756E21