@code-yeongyu/senpi-tui 2026.9.19-2 → 2026.9.20

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":"tui-main-screen.d.ts","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"AAQA,OAAO,EAKN,OAAO,EAIP,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,OAAO;IACzC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,UAAU,CAAC,CAA4F;IAC/G,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,wBAAwB,CAAmB;IAEnD,YAAY,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,OAAO,CAAC,EAGzD;IAED,UAAmB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW5D;IAED,UAAmB,kBAAkB,IAAI,IAAI,CAK5C;IAED,UAAmB,QAAQ,IAAI,IAAI,CAoClC;IAED,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IA0DxB,kBAAkB,IAAI,wBAAwB,CAU7C;IAED,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CASxD;CACD"}
1
+ {"version":3,"file":"tui-main-screen.d.ts","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"AAQA,OAAO,EAKN,OAAO,EAIP,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,OAAO;IACzC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,UAAU,CAAC,CAA4F;IAC/G,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,wBAAwB,CAAmB;IAEnD,YAAY,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,OAAO,CAAC,EAGzD;IAED,UAAmB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW5D;IAED,UAAmB,kBAAkB,IAAI,IAAI,CAK5C;IAED,UAAmB,QAAQ,IAAI,IAAI,CAoClC;IAED,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IA8DxB,kBAAkB,IAAI,wBAAwB,CAU7C;IAED,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CASxD;CACD"}
@@ -71,8 +71,11 @@ export class TuiMainScreen extends TuiBase {
71
71
  this.calibrateMouseAnchor();
72
72
  }
73
73
  applyMouseResult(result) {
74
- if (result?.focus)
75
- this.setFocus(this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component));
74
+ if (!result?.focus)
75
+ return;
76
+ const target = this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component);
77
+ if (target)
78
+ this.setFocus(target);
76
79
  }
77
80
  handleMouseInput(data) {
78
81
  if (!isMouseSequence(data))
@@ -126,7 +129,12 @@ export class TuiMainScreen extends TuiBase {
126
129
  const count = this.clicks.release(raw, press.target.component, this.placementEpoch);
127
130
  if (count !== undefined) {
128
131
  const click = { ...event, type: "click", clickCount: count };
129
- this.applyMouseResult(dispatchMouseEvent(press.target.component, retargetMouseEvent(click, press.target)));
132
+ // A click handler that moves focus (an ask-user submit restoring the composer) owns the
133
+ // outcome; re-applying the click target afterwards would steal focus back from it.
134
+ const focusBeforeClick = this.getFocusedComponent();
135
+ const clickResult = dispatchMouseEvent(press.target.component, retargetMouseEvent(click, press.target));
136
+ if (this.getFocusedComponent() === focusBeforeClick)
137
+ this.applyMouseResult(clickResult);
130
138
  this.requestRender();
131
139
  }
132
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tui-main-screen.js","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tisMouseSequence,\n\tMOUSE_TRACKING,\n\tMouseClickSynthesizer,\n\tparseSgrMouseEvent,\n\ttoTuiMouseEvent,\n} from \"./mouse-input.ts\";\nimport { isImageLine } from \"./terminal-image.ts\";\nimport {\n\ttype Component,\n\tContainer,\n\tdispatchMouseEvent,\n\tretargetMouseEvent,\n\tTuiBase,\n\ttype TuiMouseDispatchResult,\n\ttype TuiMouseDispatchTarget,\n\ttype TuiMouseEvent,\n} from \"./tui.ts\";\n\nexport interface TuiMainScreenRenderState {\n\tpreviousLines: string[];\n\tpreviousWidth: number;\n\tpreviousHeight: number;\n\tcursorRow: number;\n\thardwareCursorRow: number;\n\tmaxLinesRendered: number;\n\tpreviousViewportTop: number;\n}\n\n/** TUI implementation that renders into the terminal's main screen and scrollback. */\nexport class TuiMainScreen extends TuiBase {\n\treadonly mode = \"regular\" as const;\n\tprivate trackingEnabled = false;\n\tprivate readonly clicks = new MouseClickSynthesizer();\n\tprivate mousePress?: { target: TuiMouseDispatchTarget; epoch: number; revision: number; x: number; y: number };\n\tprivate layoutRevision = 0;\n\tprivate committedMouseLines: string[] = [];\n\tprivate committedMouseComponents: Component[] = [];\n\n\tconstructor(...args: ConstructorParameters<typeof TuiBase>) {\n\t\tsuper(...args);\n\t\tthis.addInputListener((data) => this.handleMouseInput(data));\n\t}\n\n\tprotected override applyMouseTracking(enabled: boolean): void {\n\t\tconst supported =\n\t\t\tBoolean(process.stdout.isTTY) &&\n\t\t\t!process.env.TERMUX_VERSION &&\n\t\t\t(process.platform !== \"win32\" || Boolean(process.env.WT_SESSION));\n\t\tconst next = enabled && supported && !this.stopped;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t\tif (this.trackingEnabled === next) return;\n\t\tthis.trackingEnabled = next;\n\t\tthis.terminal.write(next ? MOUSE_TRACKING.inline : MOUSE_TRACKING.disable);\n\t}\n\n\tprotected override beforeTerminalStop(): void {\n\t\tthis.terminal.write(MOUSE_TRACKING.disable);\n\t\tthis.trackingEnabled = false;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t}\n\n\tprotected override doRender(): void {\n\t\tif (this.stopped) return;\n\t\tif (this.mouseExternalWritePending) {\n\t\t\t// CPR locates the cursor, not an old frame displaced by arbitrary output.\n\t\t\t// Append a new working frame without erasing diagnostics or scrollback.\n\t\t\tthis.mouseExternalWritePending = false;\n\t\t\tthis.terminal.write(\"\\r\\n\");\n\t\t\tthis.restoreRenderState({\n\t\t\t\tpreviousLines: [],\n\t\t\t\tpreviousWidth: 0,\n\t\t\t\tpreviousHeight: 0,\n\t\t\t\tcursorRow: 0,\n\t\t\t\thardwareCursorRow: 0,\n\t\t\t\tmaxLinesRendered: 0,\n\t\t\t\tpreviousViewportTop: 0,\n\t\t\t});\n\t\t}\n\t\tsuper.doRender();\n\t\tthis.noteCommittedMouseFrame();\n\t\tconst components: Component[] = [];\n\t\tconst visit = (component: Component): void => {\n\t\t\tcomponents.push(component);\n\t\t\tif (component instanceof Container) for (const child of component.children) visit(child);\n\t\t};\n\t\tfor (const root of this.getMouseLayoutRoots()) visit(root);\n\t\tif (\n\t\t\tthis.previousLines.length !== this.committedMouseLines.length ||\n\t\t\tthis.previousLines.some((line, index) => line !== this.committedMouseLines[index]) ||\n\t\t\tcomponents.length !== this.committedMouseComponents.length ||\n\t\t\tcomponents.some((component, index) => component !== this.committedMouseComponents[index])\n\t\t) {\n\t\t\tthis.layoutRevision++;\n\t\t}\n\t\tthis.committedMouseLines = [...this.previousLines];\n\t\tthis.committedMouseComponents = components;\n\t\tthis.calibrateMouseAnchor();\n\t}\n\n\tprivate applyMouseResult(result: TuiMouseDispatchResult | undefined): void {\n\t\tif (result?.focus) this.setFocus(this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component));\n\t}\n\n\tprivate handleMouseInput(data: string): { consume: boolean } {\n\t\tif (!isMouseSequence(data)) return { consume: false };\n\t\tconst raw = parseSgrMouseEvent(data);\n\t\tif (!this.trackingEnabled || !raw || raw.button !== 0) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst frameLine = this.resolveFrameLine(raw.y + 1);\n\t\tif (frameLine === undefined || raw.x >= this.terminal.columns) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst event = toTuiMouseEvent(raw.release ? \"release\" : \"press\", raw, this.terminal);\n\t\tif (!raw.release) {\n\t\t\tconst overlay = this.dispatchMouseToOverlay(event);\n\t\t\tconst result =\n\t\t\t\toverlay.result ??\n\t\t\t\t(overlay.hit\n\t\t\t\t\t? undefined\n\t\t\t\t\t: dispatchMouseEvent(this, { ...event, y: frameLine, height: this.previousLines.length }));\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (result) {\n\t\t\t\tthis.applyMouseResult(result);\n\t\t\t\tthis.mousePress = {\n\t\t\t\t\ttarget: result.target,\n\t\t\t\t\tepoch: this.placementEpoch,\n\t\t\t\t\trevision: this.layoutRevision,\n\t\t\t\t\tx: raw.x,\n\t\t\t\t\ty: raw.y,\n\t\t\t\t};\n\t\t\t\tthis.clicks.press(raw, result.target.component, this.placementEpoch);\n\t\t\t} else this.clicks.cancel();\n\t\t\tthis.requestRender();\n\t\t} else {\n\t\t\tconst press = this.mousePress;\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (\n\t\t\t\t!press ||\n\t\t\t\tpress.epoch !== this.placementEpoch ||\n\t\t\t\tpress.revision !== this.layoutRevision ||\n\t\t\t\tpress.x !== raw.x ||\n\t\t\t\tpress.y !== raw.y\n\t\t\t) {\n\t\t\t\tthis.clicks.cancel();\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tconst count = this.clicks.release(raw, press.target.component, this.placementEpoch);\n\t\t\tif (count !== undefined) {\n\t\t\t\tconst click: TuiMouseEvent = { ...event, type: \"click\", clickCount: count };\n\t\t\t\tthis.applyMouseResult(dispatchMouseEvent(press.target.component, retargetMouseEvent(click, press.target)));\n\t\t\t\tthis.requestRender();\n\t\t\t}\n\t\t}\n\t\treturn { consume: true };\n\t}\n\n\tcaptureRenderState(): TuiMainScreenRenderState {\n\t\treturn {\n\t\t\tpreviousLines: [...this.previousLines],\n\t\t\tpreviousWidth: this.previousWidth,\n\t\t\tpreviousHeight: this.previousHeight,\n\t\t\tcursorRow: this.cursorRow,\n\t\t\thardwareCursorRow: this.hardwareCursorRow,\n\t\t\tmaxLinesRendered: this.maxLinesRendered,\n\t\t\tpreviousViewportTop: this.previousViewportTop,\n\t\t};\n\t}\n\n\trestoreRenderState(state: TuiMainScreenRenderState): void {\n\t\tthis.previousLines = state.previousLines.map((line) => (isImageLine(line) ? \"\" : line));\n\t\tthis.previousKittyImageIds = new Set();\n\t\tthis.previousWidth = state.previousWidth;\n\t\tthis.previousHeight = state.previousHeight;\n\t\tthis.cursorRow = state.cursorRow;\n\t\tthis.hardwareCursorRow = state.hardwareCursorRow;\n\t\tthis.maxLinesRendered = state.maxLinesRendered;\n\t\tthis.previousViewportTop = state.previousViewportTop;\n\t}\n}\n"]}
1
+ {"version":3,"file":"tui-main-screen.js","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tisMouseSequence,\n\tMOUSE_TRACKING,\n\tMouseClickSynthesizer,\n\tparseSgrMouseEvent,\n\ttoTuiMouseEvent,\n} from \"./mouse-input.ts\";\nimport { isImageLine } from \"./terminal-image.ts\";\nimport {\n\ttype Component,\n\tContainer,\n\tdispatchMouseEvent,\n\tretargetMouseEvent,\n\tTuiBase,\n\ttype TuiMouseDispatchResult,\n\ttype TuiMouseDispatchTarget,\n\ttype TuiMouseEvent,\n} from \"./tui.ts\";\n\nexport interface TuiMainScreenRenderState {\n\tpreviousLines: string[];\n\tpreviousWidth: number;\n\tpreviousHeight: number;\n\tcursorRow: number;\n\thardwareCursorRow: number;\n\tmaxLinesRendered: number;\n\tpreviousViewportTop: number;\n}\n\n/** TUI implementation that renders into the terminal's main screen and scrollback. */\nexport class TuiMainScreen extends TuiBase {\n\treadonly mode = \"regular\" as const;\n\tprivate trackingEnabled = false;\n\tprivate readonly clicks = new MouseClickSynthesizer();\n\tprivate mousePress?: { target: TuiMouseDispatchTarget; epoch: number; revision: number; x: number; y: number };\n\tprivate layoutRevision = 0;\n\tprivate committedMouseLines: string[] = [];\n\tprivate committedMouseComponents: Component[] = [];\n\n\tconstructor(...args: ConstructorParameters<typeof TuiBase>) {\n\t\tsuper(...args);\n\t\tthis.addInputListener((data) => this.handleMouseInput(data));\n\t}\n\n\tprotected override applyMouseTracking(enabled: boolean): void {\n\t\tconst supported =\n\t\t\tBoolean(process.stdout.isTTY) &&\n\t\t\t!process.env.TERMUX_VERSION &&\n\t\t\t(process.platform !== \"win32\" || Boolean(process.env.WT_SESSION));\n\t\tconst next = enabled && supported && !this.stopped;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t\tif (this.trackingEnabled === next) return;\n\t\tthis.trackingEnabled = next;\n\t\tthis.terminal.write(next ? MOUSE_TRACKING.inline : MOUSE_TRACKING.disable);\n\t}\n\n\tprotected override beforeTerminalStop(): void {\n\t\tthis.terminal.write(MOUSE_TRACKING.disable);\n\t\tthis.trackingEnabled = false;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t}\n\n\tprotected override doRender(): void {\n\t\tif (this.stopped) return;\n\t\tif (this.mouseExternalWritePending) {\n\t\t\t// CPR locates the cursor, not an old frame displaced by arbitrary output.\n\t\t\t// Append a new working frame without erasing diagnostics or scrollback.\n\t\t\tthis.mouseExternalWritePending = false;\n\t\t\tthis.terminal.write(\"\\r\\n\");\n\t\t\tthis.restoreRenderState({\n\t\t\t\tpreviousLines: [],\n\t\t\t\tpreviousWidth: 0,\n\t\t\t\tpreviousHeight: 0,\n\t\t\t\tcursorRow: 0,\n\t\t\t\thardwareCursorRow: 0,\n\t\t\t\tmaxLinesRendered: 0,\n\t\t\t\tpreviousViewportTop: 0,\n\t\t\t});\n\t\t}\n\t\tsuper.doRender();\n\t\tthis.noteCommittedMouseFrame();\n\t\tconst components: Component[] = [];\n\t\tconst visit = (component: Component): void => {\n\t\t\tcomponents.push(component);\n\t\t\tif (component instanceof Container) for (const child of component.children) visit(child);\n\t\t};\n\t\tfor (const root of this.getMouseLayoutRoots()) visit(root);\n\t\tif (\n\t\t\tthis.previousLines.length !== this.committedMouseLines.length ||\n\t\t\tthis.previousLines.some((line, index) => line !== this.committedMouseLines[index]) ||\n\t\t\tcomponents.length !== this.committedMouseComponents.length ||\n\t\t\tcomponents.some((component, index) => component !== this.committedMouseComponents[index])\n\t\t) {\n\t\t\tthis.layoutRevision++;\n\t\t}\n\t\tthis.committedMouseLines = [...this.previousLines];\n\t\tthis.committedMouseComponents = components;\n\t\tthis.calibrateMouseAnchor();\n\t}\n\n\tprivate applyMouseResult(result: TuiMouseDispatchResult | undefined): void {\n\t\tif (!result?.focus) return;\n\t\tconst target = this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component);\n\t\tif (target) this.setFocus(target);\n\t}\n\n\tprivate handleMouseInput(data: string): { consume: boolean } {\n\t\tif (!isMouseSequence(data)) return { consume: false };\n\t\tconst raw = parseSgrMouseEvent(data);\n\t\tif (!this.trackingEnabled || !raw || raw.button !== 0) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst frameLine = this.resolveFrameLine(raw.y + 1);\n\t\tif (frameLine === undefined || raw.x >= this.terminal.columns) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst event = toTuiMouseEvent(raw.release ? \"release\" : \"press\", raw, this.terminal);\n\t\tif (!raw.release) {\n\t\t\tconst overlay = this.dispatchMouseToOverlay(event);\n\t\t\tconst result =\n\t\t\t\toverlay.result ??\n\t\t\t\t(overlay.hit\n\t\t\t\t\t? undefined\n\t\t\t\t\t: dispatchMouseEvent(this, { ...event, y: frameLine, height: this.previousLines.length }));\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (result) {\n\t\t\t\tthis.applyMouseResult(result);\n\t\t\t\tthis.mousePress = {\n\t\t\t\t\ttarget: result.target,\n\t\t\t\t\tepoch: this.placementEpoch,\n\t\t\t\t\trevision: this.layoutRevision,\n\t\t\t\t\tx: raw.x,\n\t\t\t\t\ty: raw.y,\n\t\t\t\t};\n\t\t\t\tthis.clicks.press(raw, result.target.component, this.placementEpoch);\n\t\t\t} else this.clicks.cancel();\n\t\t\tthis.requestRender();\n\t\t} else {\n\t\t\tconst press = this.mousePress;\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (\n\t\t\t\t!press ||\n\t\t\t\tpress.epoch !== this.placementEpoch ||\n\t\t\t\tpress.revision !== this.layoutRevision ||\n\t\t\t\tpress.x !== raw.x ||\n\t\t\t\tpress.y !== raw.y\n\t\t\t) {\n\t\t\t\tthis.clicks.cancel();\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tconst count = this.clicks.release(raw, press.target.component, this.placementEpoch);\n\t\t\tif (count !== undefined) {\n\t\t\t\tconst click: TuiMouseEvent = { ...event, type: \"click\", clickCount: count };\n\t\t\t\t// A click handler that moves focus (an ask-user submit restoring the composer) owns the\n\t\t\t\t// outcome; re-applying the click target afterwards would steal focus back from it.\n\t\t\t\tconst focusBeforeClick = this.getFocusedComponent();\n\t\t\t\tconst clickResult = dispatchMouseEvent(press.target.component, retargetMouseEvent(click, press.target));\n\t\t\t\tif (this.getFocusedComponent() === focusBeforeClick) this.applyMouseResult(clickResult);\n\t\t\t\tthis.requestRender();\n\t\t\t}\n\t\t}\n\t\treturn { consume: true };\n\t}\n\n\tcaptureRenderState(): TuiMainScreenRenderState {\n\t\treturn {\n\t\t\tpreviousLines: [...this.previousLines],\n\t\t\tpreviousWidth: this.previousWidth,\n\t\t\tpreviousHeight: this.previousHeight,\n\t\t\tcursorRow: this.cursorRow,\n\t\t\thardwareCursorRow: this.hardwareCursorRow,\n\t\t\tmaxLinesRendered: this.maxLinesRendered,\n\t\t\tpreviousViewportTop: this.previousViewportTop,\n\t\t};\n\t}\n\n\trestoreRenderState(state: TuiMainScreenRenderState): void {\n\t\tthis.previousLines = state.previousLines.map((line) => (isImageLine(line) ? \"\" : line));\n\t\tthis.previousKittyImageIds = new Set();\n\t\tthis.previousWidth = state.previousWidth;\n\t\tthis.previousHeight = state.previousHeight;\n\t\tthis.cursorRow = state.cursorRow;\n\t\tthis.hardwareCursorRow = state.hardwareCursorRow;\n\t\tthis.maxLinesRendered = state.maxLinesRendered;\n\t\tthis.previousViewportTop = state.previousViewportTop;\n\t}\n}\n"]}
package/dist/tui.d.ts CHANGED
@@ -114,6 +114,12 @@ export interface Focusable {
114
114
  }
115
115
  /** Type guard to check if a component implements Focusable */
116
116
  export declare function isFocusable(component: Component | null): component is Component & Focusable;
117
+ /**
118
+ * Only a component that can receive keys may own keyboard focus. A wrapper that merely
119
+ * handles mouse events (MouseRegion and friends) has no handleInput, so focusing it would
120
+ * silently swallow every later keystroke.
121
+ */
122
+ export declare function canReceiveKeys(component: Component | null): boolean;
117
123
  /**
118
124
  * Cursor position marker - APC (Application Program Command) sequence.
119
125
  * This is a zero-width escape sequence that terminals ignore.
@@ -355,8 +361,15 @@ export declare abstract class TuiBase extends Container {
355
361
  hasOverlay(): boolean;
356
362
  /** Check if the focused component is a visible overlay */
357
363
  protected isOverlayFocused(): boolean;
358
- /** Keep overlay containers as keyboard focus owners when a nested control is clicked. */
359
- protected resolveMouseFocusTarget(component: Component): Component;
364
+ /**
365
+ * Keyboard focus owner for a clicked component: the overlay that owns it, else the component
366
+ * itself when it can receive keys, else the nearest surrounding component that can. Null when
367
+ * nothing in that chain can - a mouse-only control (a clickable row, a tab strip) that owned
368
+ * focus would swallow every later keystroke.
369
+ */
370
+ protected resolveMouseFocusTarget(component: Component): Component | null;
371
+ /** Deepest mounted ancestor of `target` that can receive keys, excluding `target` itself. */
372
+ private findKeyFocusOwner;
360
373
  /** Dispatch to the visually topmost overlay under the pointer. */
361
374
  protected dispatchMouseToOverlay(event: TuiMouseEvent): {
362
375
  hit: boolean;
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
package/dist/tui.js CHANGED
@@ -99,6 +99,14 @@ export function retargetMouseEvent(event, target) {
99
99
  export function isFocusable(component) {
100
100
  return component !== null && "focused" in component;
101
101
  }
102
+ /**
103
+ * Only a component that can receive keys may own keyboard focus. A wrapper that merely
104
+ * handles mouse events (MouseRegion and friends) has no handleInput, so focusing it would
105
+ * silently swallow every later keystroke.
106
+ */
107
+ export function canReceiveKeys(component) {
108
+ return component !== null && typeof component.handleInput === "function";
109
+ }
102
110
  /**
103
111
  * Cursor position marker - APC (Application Program Command) sequence.
104
112
  * This is a zero-width escape sequence that terminals ignore.
@@ -854,7 +862,12 @@ export class TuiBase extends Container {
854
862
  isOverlayFocused() {
855
863
  return this.overlayStack.some((entry) => entry.component === this.focusedComponent && this.isOverlayVisible(entry));
856
864
  }
857
- /** Keep overlay containers as keyboard focus owners when a nested control is clicked. */
865
+ /**
866
+ * Keyboard focus owner for a clicked component: the overlay that owns it, else the component
867
+ * itself when it can receive keys, else the nearest surrounding component that can. Null when
868
+ * nothing in that chain can - a mouse-only control (a clickable row, a tab strip) that owned
869
+ * focus would swallow every later keystroke.
870
+ */
858
871
  resolveMouseFocusTarget(component) {
859
872
  for (let index = this.overlayStack.length - 1; index >= 0; index--) {
860
873
  const overlay = this.overlayStack[index];
@@ -862,7 +875,37 @@ export class TuiBase extends Container {
862
875
  return overlay.component;
863
876
  }
864
877
  }
865
- return component;
878
+ if (canReceiveKeys(component))
879
+ return component;
880
+ return this.findKeyFocusOwner(component);
881
+ }
882
+ /** Deepest mounted ancestor of `target` that can receive keys, excluding `target` itself. */
883
+ findKeyFocusOwner(target) {
884
+ const path = [];
885
+ const walk = (node) => {
886
+ path.push(node);
887
+ if (node === target)
888
+ return true;
889
+ if (node instanceof Container) {
890
+ for (const child of node.children)
891
+ if (walk(child))
892
+ return true;
893
+ }
894
+ path.pop();
895
+ return false;
896
+ };
897
+ for (const root of this.getMouseLayoutRoots()) {
898
+ path.length = 0;
899
+ if (!walk(root))
900
+ continue;
901
+ for (let index = path.length - 2; index >= 0; index--) {
902
+ const candidate = path[index];
903
+ if (canReceiveKeys(candidate))
904
+ return candidate;
905
+ }
906
+ return null;
907
+ }
908
+ return null;
866
909
  }
867
910
  /** Dispatch to the visually topmost overlay under the pointer. */
868
911
  dispatchMouseToOverlay(event) {