@oh-my-pi/pi-tui 17.0.5 → 17.0.6

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +3 -3
  3. package/src/tui.ts +20 -14
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [17.0.6] - 2026-07-20
6
+
7
+ ### Fixed
8
+
9
+ - Fixed idle Loader animations on WSL repeatedly entering render scheduling after an expired ConPTY post-paint settle window instead of resuming direct component writes ([#6024](https://github.com/can1357/oh-my-pi/issues/6024)).
10
+
5
11
  ## [17.0.5] - 2026-07-18
6
12
 
7
13
  ### Changed
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-tui",
4
- "version": "17.0.5",
4
+ "version": "17.0.6",
5
5
  "description": "Terminal User Interface library with differential rendering for efficient text-based applications",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Can Boluk",
@@ -37,8 +37,8 @@
37
37
  "fmt": "biome format --write ."
38
38
  },
39
39
  "dependencies": {
40
- "@oh-my-pi/pi-natives": "17.0.5",
41
- "@oh-my-pi/pi-utils": "17.0.5",
40
+ "@oh-my-pi/pi-natives": "17.0.6",
41
+ "@oh-my-pi/pi-utils": "17.0.6",
42
42
  "lru-cache": "11.5.2",
43
43
  "marked": "^18.0.6"
44
44
  },
package/src/tui.ts CHANGED
@@ -1967,7 +1967,7 @@ export class TUI extends Container {
1967
1967
  if (
1968
1968
  this.#renderRequested ||
1969
1969
  this.#postFullPaintSettleTimer !== undefined ||
1970
- this.#postFullPaintSettleUntilMs > 0
1970
+ this.#postFullPaintSettleDelay() > 0
1971
1971
  ) {
1972
1972
  this.requestComponentRender(component);
1973
1973
  return;
@@ -2106,6 +2106,15 @@ export class TUI extends Container {
2106
2106
  this.#commit(this.#composedFrame, previousWindow, width, height, cursorControl);
2107
2107
  }
2108
2108
 
2109
+ #postFullPaintSettleDelay(): number {
2110
+ const until = this.#postFullPaintSettleUntilMs;
2111
+ if (until <= 0) return 0;
2112
+ const remaining = until - this.#renderScheduler.now();
2113
+ if (remaining > 0) return remaining;
2114
+ this.#postFullPaintSettleUntilMs = 0;
2115
+ return 0;
2116
+ }
2117
+
2109
2118
  /** Ordinary (non-forced) scheduling shared by full and component-scoped requests. */
2110
2119
  #requestOrdinaryRender(): void {
2111
2120
  // Coalesce non-forced renders inside the post-full-paint ConPTY settle
@@ -2114,20 +2123,17 @@ export class TUI extends Container {
2114
2123
  // catching up with the previous big paint, and each follow-up viewport
2115
2124
  // repaint nudges Windows Terminal's viewport tracker further off the
2116
2125
  // last row (see #2095).
2117
- if (this.#postFullPaintSettleUntilMs > 0) {
2118
- const now = this.#renderScheduler.now();
2119
- if (now < this.#postFullPaintSettleUntilMs) {
2120
- if (this.#postFullPaintSettleTimer === undefined) {
2121
- this.#postFullPaintSettleTimer = this.#renderScheduler.scheduleRender(() => {
2122
- this.#postFullPaintSettleTimer = undefined;
2123
- this.#postFullPaintSettleUntilMs = 0;
2124
- if (this.#stopped) return;
2125
- this.#requestOrdinaryRender();
2126
- }, this.#postFullPaintSettleUntilMs - now);
2127
- }
2128
- return;
2126
+ const settleDelayMs = this.#postFullPaintSettleDelay();
2127
+ if (settleDelayMs > 0) {
2128
+ if (this.#postFullPaintSettleTimer === undefined) {
2129
+ this.#postFullPaintSettleTimer = this.#renderScheduler.scheduleRender(() => {
2130
+ this.#postFullPaintSettleTimer = undefined;
2131
+ this.#postFullPaintSettleUntilMs = 0;
2132
+ if (this.#stopped) return;
2133
+ this.#requestOrdinaryRender();
2134
+ }, settleDelayMs);
2129
2135
  }
2130
- this.#postFullPaintSettleUntilMs = 0;
2136
+ return;
2131
2137
  }
2132
2138
  if (this.#renderRequested) return;
2133
2139
  this.#renderRequested = true;