@apholdings/jensen-tui 0.1.3 → 0.1.5
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtE;;;GAGG;AACH,qBAAa,MAAO,SAAQ,IAAI;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtE;;;GAGG;AACH,qBAAa,MAAO,SAAQ,IAAI;IA8B9B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,OAAO;IA/BhB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAYrB;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgE;IAE3F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IAEvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,EAAE,CAAoB;IAE9B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAK;IAE1B,YACC,EAAE,EAAE,GAAG,EACC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACvC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACvC,OAAO,GAAE,MAAqB,EAKtC;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiDvC;IAED,KAAK,SAuBJ;IAED,IAAI,SAaH;IAED,OAAO,SAiBN;IAED,UAAU,CAAC,OAAO,EAAE,MAAM,QAOzB;IAED,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,aAAa;CASrB","sourcesContent":["import type { TUI } from \"../tui.js\";\nimport { visibleWidth } from \"../utils.js\";\nimport { Text } from \"./text.js\";\n\nexport type LoaderState = \"idle\" | \"running\" | \"stopped\" | \"disposed\";\n\n/**\n * Loader component that updates with a moonwalking stickman animation.\n * Kept as a single-line loader so it still fits the current status row layout.\n */\nexport class Loader extends Text {\n\tprivate readonly frames = [\n\t\t\"▰▱▱▱▱\",\n\t\t\"▰▰▱▱▱\",\n\t\t\"▱▰▰▱▱\",\n\t\t\"▱▱▰▰▱\",\n\t\t\"▱▱▱▰▰\",\n\t\t\"▱▱▱▱▰\",\n\t\t\"▱▱▱▰▰\",\n\t\t\"▱▱▰▰▱\",\n\t\t\"▱▰▰▱▱\",\n\t\t\"▰▰▱▱▱\",\n\t\t\"▰▱▱▱▱\",\n\t];\n\n\tprivate readonly frameWidth = Math.max(...this.frames.map((frame) => visibleWidth(frame)));\n\n\tprivate readonly frameIntervalMs = 100;\n\n\tprivate currentFrame = 0;\n\tprivate intervalId: ReturnType<typeof setInterval> | null = null;\n\tprivate ui: TUI | null = null;\n\n\tprivate state: LoaderState = \"idle\";\n\tprivate epoch = 0;\n\tprivate startTime: number | null = null;\n\tprivate elapsedAtStop = 0;\n\n\tconstructor(\n\t\tui: TUI,\n\t\tprivate spinnerColorFn: (str: string) => string,\n\t\tprivate messageColorFn: (str: string) => string,\n\t\tprivate message: string = \"Loading...\",\n\t) {\n\t\tsuper(\"\", 1, 0);\n\t\tthis.ui = ui;\n\t\tthis.start();\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn [\"\"];\n\t\t}\n\n\t\tconst rawFrame = this.frames[this.currentFrame] ?? this.frames[0];\n\t\tconst paddedFrame = this.padFrame(rawFrame);\n\t\tconst frame = this.spinnerColorFn(paddedFrame);\n\t\tconst prefix = `${frame} ${this.messageColorFn(this.message)}`;\n\n\t\tlet elapsed = this.elapsedAtStop;\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\telapsed = performance.now() - this.startTime;\n\t\t}\n\n\t\tif (elapsed === 0 && this.state !== \"running\") {\n\t\t\tif (this.text !== prefix) {\n\t\t\t\tthis.setText(prefix);\n\t\t\t}\n\t\t\treturn super.render(width);\n\t\t}\n\n\t\tconst totalTenths = Math.floor(elapsed / 100);\n\t\tconst tenths = totalTenths % 10;\n\t\tconst totalSeconds = Math.floor(totalTenths / 10);\n\t\tconst seconds = totalSeconds % 60;\n\t\tconst minutes = Math.floor(totalSeconds / 60);\n\n\t\tconst minStr = minutes.toString().padStart(2, \"0\");\n\t\tconst secStr = seconds.toString().padStart(2, \"0\");\n\t\tconst timerStr = this.messageColorFn(`${minStr}:${secStr}.${tenths}`);\n\n\t\tconst contentWidth = Math.max(1, width - this.paddingX * 2);\n\t\tconst prefixWidth = visibleWidth(prefix);\n\t\tconst timerWidth = visibleWidth(timerStr);\n\n\t\tlet nextText: string;\n\t\tif (prefixWidth + timerWidth + 2 <= contentWidth) {\n\t\t\tconst padding = \" \".repeat(contentWidth - prefixWidth - timerWidth);\n\t\t\tnextText = prefix + padding + timerStr;\n\t\t} else {\n\t\t\tnextText = `${prefix} ${timerStr}`;\n\t\t}\n\n\t\tif (this.text !== nextText) {\n\t\t\tthis.setText(nextText);\n\t\t}\n\n\t\treturn super.render(width);\n\t}\n\n\tstart() {\n\t\tif (this.state === \"disposed\" || this.state === \"running\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = \"running\";\n\t\tthis.epoch++;\n\t\tthis.currentFrame = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.elapsedAtStop = 0;\n\n\t\tthis.updateDisplay();\n\n\t\tconst currentEpoch = this.epoch;\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tif (this.epoch !== currentEpoch || this.state !== \"running\") {\n\t\t\t\tthis.cleanupInterval();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.currentFrame = (this.currentFrame + 1) % this.frames.length;\n\t\t\tthis.updateDisplay();\n\t\t}, this.frameIntervalMs);\n\t}\n\n\tstop() {\n\t\tif (this.state === \"disposed\" || this.state === \"stopped\" || this.state === \"idle\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"stopped\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.updateDisplay();\n\t}\n\n\tdispose() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"disposed\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.ui = null;\n\t\tthis.cachedLines = undefined;\n\t\tthis.cachedText = undefined;\n\t\tthis.cachedWidth = undefined;\n\t\tthis.text = \"\";\n\t}\n\n\tsetMessage(message: string) {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.message = message;\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate cleanupInterval() {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = null;\n\t\t}\n\t}\n\n\tprivate padFrame(frame: string): string {\n\t\tconst padding = Math.max(0, this.frameWidth - visibleWidth(frame));\n\t\treturn frame + \" \".repeat(padding);\n\t}\n\n\tprivate updateDisplay() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.ui) {\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n}\n"]}
|
|
@@ -8,7 +8,19 @@ export class Loader extends Text {
|
|
|
8
8
|
spinnerColorFn;
|
|
9
9
|
messageColorFn;
|
|
10
10
|
message;
|
|
11
|
-
frames = [
|
|
11
|
+
frames = [
|
|
12
|
+
"▰▱▱▱▱",
|
|
13
|
+
"▰▰▱▱▱",
|
|
14
|
+
"▱▰▰▱▱",
|
|
15
|
+
"▱▱▰▰▱",
|
|
16
|
+
"▱▱▱▰▰",
|
|
17
|
+
"▱▱▱▱▰",
|
|
18
|
+
"▱▱▱▰▰",
|
|
19
|
+
"▱▱▰▰▱",
|
|
20
|
+
"▱▰▰▱▱",
|
|
21
|
+
"▰▰▱▱▱",
|
|
22
|
+
"▰▱▱▱▱",
|
|
23
|
+
];
|
|
12
24
|
frameWidth = Math.max(...this.frames.map((frame) => visibleWidth(frame)));
|
|
13
25
|
frameIntervalMs = 100;
|
|
14
26
|
currentFrame = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TUI } from \"../tui.js\";\nimport { visibleWidth } from \"../utils.js\";\nimport { Text } from \"./text.js\";\n\nexport type LoaderState = \"idle\" | \"running\" | \"stopped\" | \"disposed\";\n\n/**\n * Loader component that updates with a moonwalking stickman animation.\n * Kept as a single-line loader so it still fits the current status row layout.\n */\nexport class Loader extends Text {\n\tprivate readonly frames = [\"▱▱▱\", \"▰▱▱\", \"▰▰▱\", \"▰▰▰\", \"▱▱▱\"];\n\n\tprivate readonly frameWidth = Math.max(...this.frames.map((frame) => visibleWidth(frame)));\n\n\tprivate readonly frameIntervalMs = 100;\n\n\tprivate currentFrame = 0;\n\tprivate intervalId: ReturnType<typeof setInterval> | null = null;\n\tprivate ui: TUI | null = null;\n\n\tprivate state: LoaderState = \"idle\";\n\tprivate epoch = 0;\n\tprivate startTime: number | null = null;\n\tprivate elapsedAtStop = 0;\n\n\tconstructor(\n\t\tui: TUI,\n\t\tprivate spinnerColorFn: (str: string) => string,\n\t\tprivate messageColorFn: (str: string) => string,\n\t\tprivate message: string = \"Loading...\",\n\t) {\n\t\tsuper(\"\", 1, 0);\n\t\tthis.ui = ui;\n\t\tthis.start();\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn [\"\"];\n\t\t}\n\n\t\tconst rawFrame = this.frames[this.currentFrame] ?? this.frames[0];\n\t\tconst paddedFrame = this.padFrame(rawFrame);\n\t\tconst frame = this.spinnerColorFn(paddedFrame);\n\t\tconst prefix = `${frame} ${this.messageColorFn(this.message)}`;\n\n\t\tlet elapsed = this.elapsedAtStop;\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\telapsed = performance.now() - this.startTime;\n\t\t}\n\n\t\tif (elapsed === 0 && this.state !== \"running\") {\n\t\t\tif (this.text !== prefix) {\n\t\t\t\tthis.setText(prefix);\n\t\t\t}\n\t\t\treturn super.render(width);\n\t\t}\n\n\t\tconst totalTenths = Math.floor(elapsed / 100);\n\t\tconst tenths = totalTenths % 10;\n\t\tconst totalSeconds = Math.floor(totalTenths / 10);\n\t\tconst seconds = totalSeconds % 60;\n\t\tconst minutes = Math.floor(totalSeconds / 60);\n\n\t\tconst minStr = minutes.toString().padStart(2, \"0\");\n\t\tconst secStr = seconds.toString().padStart(2, \"0\");\n\t\tconst timerStr = this.messageColorFn(`${minStr}:${secStr}.${tenths}`);\n\n\t\tconst contentWidth = Math.max(1, width - this.paddingX * 2);\n\t\tconst prefixWidth = visibleWidth(prefix);\n\t\tconst timerWidth = visibleWidth(timerStr);\n\n\t\tlet nextText: string;\n\t\tif (prefixWidth + timerWidth + 2 <= contentWidth) {\n\t\t\tconst padding = \" \".repeat(contentWidth - prefixWidth - timerWidth);\n\t\t\tnextText = prefix + padding + timerStr;\n\t\t} else {\n\t\t\tnextText = `${prefix} ${timerStr}`;\n\t\t}\n\n\t\tif (this.text !== nextText) {\n\t\t\tthis.setText(nextText);\n\t\t}\n\n\t\treturn super.render(width);\n\t}\n\n\tstart() {\n\t\tif (this.state === \"disposed\" || this.state === \"running\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = \"running\";\n\t\tthis.epoch++;\n\t\tthis.currentFrame = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.elapsedAtStop = 0;\n\n\t\tthis.updateDisplay();\n\n\t\tconst currentEpoch = this.epoch;\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tif (this.epoch !== currentEpoch || this.state !== \"running\") {\n\t\t\t\tthis.cleanupInterval();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.currentFrame = (this.currentFrame + 1) % this.frames.length;\n\t\t\tthis.updateDisplay();\n\t\t}, this.frameIntervalMs);\n\t}\n\n\tstop() {\n\t\tif (this.state === \"disposed\" || this.state === \"stopped\" || this.state === \"idle\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"stopped\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.updateDisplay();\n\t}\n\n\tdispose() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"disposed\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.ui = null;\n\t\tthis.cachedLines = undefined;\n\t\tthis.cachedText = undefined;\n\t\tthis.cachedWidth = undefined;\n\t\tthis.text = \"\";\n\t}\n\n\tsetMessage(message: string) {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.message = message;\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate cleanupInterval() {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = null;\n\t\t}\n\t}\n\n\tprivate padFrame(frame: string): string {\n\t\tconst padding = Math.max(0, this.frameWidth - visibleWidth(frame));\n\t\treturn frame + \" \".repeat(padding);\n\t}\n\n\tprivate updateDisplay() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.ui) {\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TUI } from \"../tui.js\";\nimport { visibleWidth } from \"../utils.js\";\nimport { Text } from \"./text.js\";\n\nexport type LoaderState = \"idle\" | \"running\" | \"stopped\" | \"disposed\";\n\n/**\n * Loader component that updates with a moonwalking stickman animation.\n * Kept as a single-line loader so it still fits the current status row layout.\n */\nexport class Loader extends Text {\n\tprivate readonly frames = [\n\t\t\"▰▱▱▱▱\",\n\t\t\"▰▰▱▱▱\",\n\t\t\"▱▰▰▱▱\",\n\t\t\"▱▱▰▰▱\",\n\t\t\"▱▱▱▰▰\",\n\t\t\"▱▱▱▱▰\",\n\t\t\"▱▱▱▰▰\",\n\t\t\"▱▱▰▰▱\",\n\t\t\"▱▰▰▱▱\",\n\t\t\"▰▰▱▱▱\",\n\t\t\"▰▱▱▱▱\",\n\t];\n\n\tprivate readonly frameWidth = Math.max(...this.frames.map((frame) => visibleWidth(frame)));\n\n\tprivate readonly frameIntervalMs = 100;\n\n\tprivate currentFrame = 0;\n\tprivate intervalId: ReturnType<typeof setInterval> | null = null;\n\tprivate ui: TUI | null = null;\n\n\tprivate state: LoaderState = \"idle\";\n\tprivate epoch = 0;\n\tprivate startTime: number | null = null;\n\tprivate elapsedAtStop = 0;\n\n\tconstructor(\n\t\tui: TUI,\n\t\tprivate spinnerColorFn: (str: string) => string,\n\t\tprivate messageColorFn: (str: string) => string,\n\t\tprivate message: string = \"Loading...\",\n\t) {\n\t\tsuper(\"\", 1, 0);\n\t\tthis.ui = ui;\n\t\tthis.start();\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn [\"\"];\n\t\t}\n\n\t\tconst rawFrame = this.frames[this.currentFrame] ?? this.frames[0];\n\t\tconst paddedFrame = this.padFrame(rawFrame);\n\t\tconst frame = this.spinnerColorFn(paddedFrame);\n\t\tconst prefix = `${frame} ${this.messageColorFn(this.message)}`;\n\n\t\tlet elapsed = this.elapsedAtStop;\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\telapsed = performance.now() - this.startTime;\n\t\t}\n\n\t\tif (elapsed === 0 && this.state !== \"running\") {\n\t\t\tif (this.text !== prefix) {\n\t\t\t\tthis.setText(prefix);\n\t\t\t}\n\t\t\treturn super.render(width);\n\t\t}\n\n\t\tconst totalTenths = Math.floor(elapsed / 100);\n\t\tconst tenths = totalTenths % 10;\n\t\tconst totalSeconds = Math.floor(totalTenths / 10);\n\t\tconst seconds = totalSeconds % 60;\n\t\tconst minutes = Math.floor(totalSeconds / 60);\n\n\t\tconst minStr = minutes.toString().padStart(2, \"0\");\n\t\tconst secStr = seconds.toString().padStart(2, \"0\");\n\t\tconst timerStr = this.messageColorFn(`${minStr}:${secStr}.${tenths}`);\n\n\t\tconst contentWidth = Math.max(1, width - this.paddingX * 2);\n\t\tconst prefixWidth = visibleWidth(prefix);\n\t\tconst timerWidth = visibleWidth(timerStr);\n\n\t\tlet nextText: string;\n\t\tif (prefixWidth + timerWidth + 2 <= contentWidth) {\n\t\t\tconst padding = \" \".repeat(contentWidth - prefixWidth - timerWidth);\n\t\t\tnextText = prefix + padding + timerStr;\n\t\t} else {\n\t\t\tnextText = `${prefix} ${timerStr}`;\n\t\t}\n\n\t\tif (this.text !== nextText) {\n\t\t\tthis.setText(nextText);\n\t\t}\n\n\t\treturn super.render(width);\n\t}\n\n\tstart() {\n\t\tif (this.state === \"disposed\" || this.state === \"running\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = \"running\";\n\t\tthis.epoch++;\n\t\tthis.currentFrame = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.elapsedAtStop = 0;\n\n\t\tthis.updateDisplay();\n\n\t\tconst currentEpoch = this.epoch;\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tif (this.epoch !== currentEpoch || this.state !== \"running\") {\n\t\t\t\tthis.cleanupInterval();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.currentFrame = (this.currentFrame + 1) % this.frames.length;\n\t\t\tthis.updateDisplay();\n\t\t}, this.frameIntervalMs);\n\t}\n\n\tstop() {\n\t\tif (this.state === \"disposed\" || this.state === \"stopped\" || this.state === \"idle\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"stopped\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.updateDisplay();\n\t}\n\n\tdispose() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.state === \"running\" && this.startTime !== null) {\n\t\t\tthis.elapsedAtStop = performance.now() - this.startTime;\n\t\t}\n\n\t\tthis.state = \"disposed\";\n\t\tthis.epoch++;\n\t\tthis.cleanupInterval();\n\t\tthis.ui = null;\n\t\tthis.cachedLines = undefined;\n\t\tthis.cachedText = undefined;\n\t\tthis.cachedWidth = undefined;\n\t\tthis.text = \"\";\n\t}\n\n\tsetMessage(message: string) {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.message = message;\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate cleanupInterval() {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = null;\n\t\t}\n\t}\n\n\tprivate padFrame(frame: string): string {\n\t\tconst padding = Math.max(0, this.frameWidth - visibleWidth(frame));\n\t\treturn frame + \" \".repeat(padding);\n\t}\n\n\tprivate updateDisplay() {\n\t\tif (this.state === \"disposed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.ui) {\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n}\n"]}
|
package/package.json
CHANGED