From 9eb2863e48d2796904f5b3de9bd2133810591462 Mon Sep 17 00:00:00 2001
From: catloversg <152669316+catloversg@users.noreply.github.com>
Date: Mon, 9 Mar 2026 04:00:06 +0700
Subject: [PATCH] API: Add API to minimize and expand tail windows (#2556)
---
markdown/bitburner.tailproperties.fontsize.md | 2 +-
markdown/bitburner.tailproperties.md | 21 ++++-
.../bitburner.tailproperties.minimized.md | 13 ++++
markdown/bitburner.userinterface.md | 11 +++
...itburner.userinterface.settailminimized.md | 76 +++++++++++++++++++
src/Documentation/pages.ts | 4 +
src/Netscript/NetscriptHelpers.tsx | 1 +
src/Netscript/RamCostGenerator.ts | 1 +
src/NetscriptFunctions/UserInterface.ts | 13 ++++
src/ScriptEditor/NetscriptDefinitions.d.ts | 19 ++++-
src/ui/React/LogBoxManager.tsx | 26 ++++---
11 files changed, 175 insertions(+), 12 deletions(-)
create mode 100644 markdown/bitburner.tailproperties.minimized.md
create mode 100644 markdown/bitburner.userinterface.settailminimized.md
diff --git a/markdown/bitburner.tailproperties.fontsize.md b/markdown/bitburner.tailproperties.fontsize.md
index 4e5728697..6886f5381 100644
--- a/markdown/bitburner.tailproperties.fontsize.md
+++ b/markdown/bitburner.tailproperties.fontsize.md
@@ -4,7 +4,7 @@
## TailProperties.fontSize property
-The font size of the tail window. Defaults to the font size set in the style editor.
+The font size of the log window. Defaults to the font size set in the style editor.
**Signature:**
diff --git a/markdown/bitburner.tailproperties.md b/markdown/bitburner.tailproperties.md
index 624321248..64544c0d4 100644
--- a/markdown/bitburner.tailproperties.md
+++ b/markdown/bitburner.tailproperties.md
@@ -49,7 +49,7 @@ number
diff --git a/markdown/bitburner.userinterface.settailminimized.md b/markdown/bitburner.userinterface.settailminimized.md
new file mode 100644
index 000000000..bc4389219
--- /dev/null
+++ b/markdown/bitburner.userinterface.settailminimized.md
@@ -0,0 +1,76 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [setTailMinimized](./bitburner.userinterface.settailminimized.md)
+
+## UserInterface.setTailMinimized() method
+
+Minimize or expand the tail window of a script.
+
+**Signature:**
+
+```typescript
+setTailMinimized(minimized: boolean, pid?: number): void;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+minimized
+
+
+ |
+
+boolean
+
+
+ |
+
+
+ |
+|
+
+pid
+
+
+ |
+
+number
+
+
+ |
+
+_(Optional)_ Optional. The PID of the script. If omitted, the current script is used.
+
+
+ |
+
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+Equivalent to pressing the "Minimize"/"Expand" button on the tail window.
+
+If called without arguments, this function minimizes/expands the tail window of the current script. If a PID is provided, it minimizes/expands the tail window of the specified script instead.
+
diff --git a/src/Documentation/pages.ts b/src/Documentation/pages.ts
index 1772241a0..fce697828 100644
--- a/src/Documentation/pages.ts
+++ b/src/Documentation/pages.ts
@@ -1472,6 +1472,7 @@ import nsDoc_bitburner_successresult_md from "../../markdown/bitburner.successre
import nsDoc_bitburner_tailproperties_fontsize_md from "../../markdown/bitburner.tailproperties.fontsize.md?raw";
import nsDoc_bitburner_tailproperties_height_md from "../../markdown/bitburner.tailproperties.height.md?raw";
import nsDoc_bitburner_tailproperties_md from "../../markdown/bitburner.tailproperties.md?raw";
+import nsDoc_bitburner_tailproperties_minimized_md from "../../markdown/bitburner.tailproperties.minimized.md?raw";
import nsDoc_bitburner_tailproperties_width_md from "../../markdown/bitburner.tailproperties.width.md?raw";
import nsDoc_bitburner_tailproperties_x_md from "../../markdown/bitburner.tailproperties.x.md?raw";
import nsDoc_bitburner_tailproperties_y_md from "../../markdown/bitburner.tailproperties.y.md?raw";
@@ -1496,6 +1497,7 @@ import nsDoc_bitburner_userinterface_resettheme_md from "../../markdown/bitburne
import nsDoc_bitburner_userinterface_resizetail_md from "../../markdown/bitburner.userinterface.resizetail.md?raw";
import nsDoc_bitburner_userinterface_setstyles_md from "../../markdown/bitburner.userinterface.setstyles.md?raw";
import nsDoc_bitburner_userinterface_settailfontsize_md from "../../markdown/bitburner.userinterface.settailfontsize.md?raw";
+import nsDoc_bitburner_userinterface_settailminimized_md from "../../markdown/bitburner.userinterface.settailminimized.md?raw";
import nsDoc_bitburner_userinterface_settailtitle_md from "../../markdown/bitburner.userinterface.settailtitle.md?raw";
import nsDoc_bitburner_userinterface_settheme_md from "../../markdown/bitburner.userinterface.settheme.md?raw";
import nsDoc_bitburner_userinterface_windowsize_md from "../../markdown/bitburner.userinterface.windowsize.md?raw";
@@ -3063,6 +3065,7 @@ AllPages["nsDoc/bitburner.successresult.md"] = nsDoc_bitburner_successresult_md;
AllPages["nsDoc/bitburner.tailproperties.fontsize.md"] = nsDoc_bitburner_tailproperties_fontsize_md;
AllPages["nsDoc/bitburner.tailproperties.height.md"] = nsDoc_bitburner_tailproperties_height_md;
AllPages["nsDoc/bitburner.tailproperties.md"] = nsDoc_bitburner_tailproperties_md;
+AllPages["nsDoc/bitburner.tailproperties.minimized.md"] = nsDoc_bitburner_tailproperties_minimized_md;
AllPages["nsDoc/bitburner.tailproperties.width.md"] = nsDoc_bitburner_tailproperties_width_md;
AllPages["nsDoc/bitburner.tailproperties.x.md"] = nsDoc_bitburner_tailproperties_x_md;
AllPages["nsDoc/bitburner.tailproperties.y.md"] = nsDoc_bitburner_tailproperties_y_md;
@@ -3087,6 +3090,7 @@ AllPages["nsDoc/bitburner.userinterface.resettheme.md"] = nsDoc_bitburner_userin
AllPages["nsDoc/bitburner.userinterface.resizetail.md"] = nsDoc_bitburner_userinterface_resizetail_md;
AllPages["nsDoc/bitburner.userinterface.setstyles.md"] = nsDoc_bitburner_userinterface_setstyles_md;
AllPages["nsDoc/bitburner.userinterface.settailfontsize.md"] = nsDoc_bitburner_userinterface_settailfontsize_md;
+AllPages["nsDoc/bitburner.userinterface.settailminimized.md"] = nsDoc_bitburner_userinterface_settailminimized_md;
AllPages["nsDoc/bitburner.userinterface.settailtitle.md"] = nsDoc_bitburner_userinterface_settailtitle_md;
AllPages["nsDoc/bitburner.userinterface.settheme.md"] = nsDoc_bitburner_userinterface_settheme_md;
AllPages["nsDoc/bitburner.userinterface.windowsize.md"] = nsDoc_bitburner_userinterface_windowsize_md;
diff --git a/src/Netscript/NetscriptHelpers.tsx b/src/Netscript/NetscriptHelpers.tsx
index 56d8fce31..f6fe0f5c2 100644
--- a/src/Netscript/NetscriptHelpers.tsx
+++ b/src/Netscript/NetscriptHelpers.tsx
@@ -833,6 +833,7 @@ function createPublicRunningScript(runningScript: RunningScript, workerScript?:
width: logProps.width,
height: logProps.height,
fontSize: logProps.fontSize ?? Settings.styles.tailFontSize,
+ minimized: logProps.minimized,
},
title: runningScript.title,
threads: runningScript.threads,
diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts
index cb3441d5f..e5761f22d 100644
--- a/src/Netscript/RamCostGenerator.ts
+++ b/src/Netscript/RamCostGenerator.ts
@@ -442,6 +442,7 @@ const ui = {
closeTail: 0,
setTailTitle: 0,
setTailFontSize: 0,
+ setTailMinimized: 0,
getTheme: 0,
setTheme: 0,
resetTheme: 0,
diff --git a/src/NetscriptFunctions/UserInterface.ts b/src/NetscriptFunctions/UserInterface.ts
index 5fdae88e7..46854d30d 100644
--- a/src/NetscriptFunctions/UserInterface.ts
+++ b/src/NetscriptFunctions/UserInterface.ts
@@ -105,6 +105,19 @@ export function NetscriptUserInterface(): InternalAPI {
else runningScriptObj.tailProps?.setFontSize(helpers.number(ctx, "pixel", _pixel));
},
+ setTailMinimized:
+ (ctx) =>
+ (_minimized, _pid = ctx.workerScript.scriptRef.pid) => {
+ const minimized = helpers.boolean(ctx, "minimized", _minimized);
+ const pid = helpers.number(ctx, "pid", _pid);
+ const runningScriptObj = helpers.getRunningScript(ctx, pid);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
+ return;
+ }
+ runningScriptObj.tailProps?.setMinimized(minimized);
+ },
+
windowSize: () => () => {
return [window.innerWidth, window.innerHeight];
},
diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts
index 02229b97e..53f317fbf 100644
--- a/src/ScriptEditor/NetscriptDefinitions.d.ts
+++ b/src/ScriptEditor/NetscriptDefinitions.d.ts
@@ -210,8 +210,10 @@ interface TailProperties {
width: number;
/** Height of the log window content area */
height: number;
- /** The font size of the tail window. Defaults to the font size set in the style editor. */
+ /** The font size of the log window. Defaults to the font size set in the style editor. */
fontSize: number;
+ /** Whether the log window is minimized. */
+ minimized: boolean;
}
/**
@@ -6809,6 +6811,21 @@ interface UserInterface {
*/
setTailFontSize(pixel?: number, fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
+ /**
+ * Minimize or expand the tail window of a script.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Equivalent to pressing the "Minimize"/"Expand" button on the tail window.
+ *
+ * If called without arguments, this function minimizes/expands the tail window of the current script. If a PID is
+ * provided, it minimizes/expands the tail window of the specified script instead.
+ *
+ * @param pid - Optional. The PID of the script. If omitted, the current script is used.
+ */
+ setTailMinimized(minimized: boolean, pid?: number): void;
+
/**
* Get the current window size
* @remarks
diff --git a/src/ui/React/LogBoxManager.tsx b/src/ui/React/LogBoxManager.tsx
index df4105c64..af6da24f5 100644
--- a/src/ui/React/LogBoxManager.tsx
+++ b/src/ui/React/LogBoxManager.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, useRef, useCallback, useMemo } from "react";
+import React, { useEffect, useRef, useCallback, useMemo } from "react";
import { EventEmitter } from "../../utils/EventEmitter";
import { RunningScript } from "../../Script/RunningScript";
import { killWorkerScriptByPid } from "../../Netscript/killWorkerScript";
@@ -45,6 +45,7 @@ export class LogBoxProperties {
width = 500;
height = 500;
fontSize: number | undefined = undefined;
+ minimized = false;
rerender: () => void;
rootRef: React.RefObject;
@@ -79,6 +80,11 @@ export class LogBoxProperties {
this.rerender();
}
+ setMinimized(minimized: boolean): void {
+ this.minimized = minimized;
+ this.rerender();
+ }
+
isVisible(): boolean {
return this.rootRef.current !== null;
}
@@ -183,7 +189,6 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
const rerender = useRerender(Settings.TailRenderInterval);
const propsRef = useRef(new LogBoxProperties(rerender, rootRef));
script.tailProps = propsRef.current;
- const [minimized, setMinimized] = useState(false);
const textAreaKeyDown = (e: React.KeyboardEvent) => {
if (e.ctrlKey && e.key === "a") {
@@ -198,7 +203,7 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
}
};
- const onResize = (e: React.SyntheticEvent, { size }: ResizeCallbackData) => {
+ const onResize = (_: React.SyntheticEvent, { size }: ResizeCallbackData) => {
propsRef.current.setSize(size.width, size.height);
};
@@ -263,7 +268,7 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
}
function minimize(): void {
- setMinimized(!minimized);
+ propsRef.current.setMinimized(!propsRef.current.minimized);
}
function lineColor(s: string): "error" | "success" | "warn" | "info" | "primary" {
@@ -345,7 +350,7 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
zIndex: 1400,
minWidth: `${minWindowSize[0]}px`,
minHeight: `${minWindowSize[1]}px`,
- ...(minimized
+ ...(propsRef.current.minimized
? {
border: "none",
margin: 0,
@@ -370,7 +375,7 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
right: "-10px",
bottom: "-16px",
cursor: "nw-resize",
- display: minimized ? "none" : "inline-block",
+ display: propsRef.current.minimized ? "none" : "inline-block",
}}
>
@@ -392,12 +397,12 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
)}
- {minimized ? : }
+ {propsRef.current.minimized ? : }
@@ -407,7 +412,10 @@ function LogWindow({ hidden, script, onClose }: LogWindowProps): React.ReactElem
|