Fix selector mouse routing against linked SelectList
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
import { Container, type SelectItem, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
|
||||
import { getSelectListTheme } from "../theme/theme";
|
||||
import { DynamicBorder } from "./dynamic-border";
|
||||
import { routeSelectListMouseWithTopBorder } from "./select-list-mouse-routing";
|
||||
|
||||
export interface PluginSelectorCallbacks {
|
||||
onSelect: (pluginName: string, marketplace: string, scope?: "user" | "project") => void;
|
||||
@@ -84,8 +85,7 @@ export class PluginSelectorComponent extends Container {
|
||||
}
|
||||
|
||||
routeMouse(event: SgrMouseEvent, line: number, col: number): void {
|
||||
const topBorderRows = 1;
|
||||
this.#selectList.routeMouse(event, line - topBorderRows, col);
|
||||
routeSelectListMouseWithTopBorder(this.#selectList, event, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Container, type SelectItem, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
|
||||
import { getSelectListTheme } from "../../modes/theme/theme";
|
||||
import { DynamicBorder } from "./dynamic-border";
|
||||
import { routeSelectListMouseWithTopBorder } from "./select-list-mouse-routing";
|
||||
|
||||
/**
|
||||
* Component that renders a queue mode selector with borders
|
||||
@@ -55,7 +56,6 @@ export class QueueModeSelectorComponent extends Container {
|
||||
}
|
||||
|
||||
routeMouse(event: SgrMouseEvent, line: number, col: number): void {
|
||||
const topBorderRows = 1;
|
||||
this.#selectList.routeMouse(event, line - topBorderRows, col);
|
||||
routeSelectListMouseWithTopBorder(this.#selectList, event, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import type { SelectList, SgrMouseEvent } from "@oh-my-pi/pi-tui";
|
||||
|
||||
interface RoutableSelectList {
|
||||
routeMouse?: (event: SgrMouseEvent, line: number, col: number) => void;
|
||||
handleWheel(delta: -1 | 1): void;
|
||||
hitTest(line: number): number | undefined;
|
||||
setHoverIndex(index: number | null): void;
|
||||
clickItem(index: number): void;
|
||||
}
|
||||
|
||||
export function routeSelectListMouseWithTopBorder(
|
||||
selectList: SelectList,
|
||||
event: SgrMouseEvent,
|
||||
line: number,
|
||||
col: number,
|
||||
): void {
|
||||
const localLine = line - 1;
|
||||
const target = selectList as RoutableSelectList;
|
||||
if (typeof target.routeMouse === "function") {
|
||||
target.routeMouse(event, localLine, col);
|
||||
return;
|
||||
}
|
||||
if (event.wheel !== null) {
|
||||
target.handleWheel(event.wheel);
|
||||
return;
|
||||
}
|
||||
const index = target.hitTest(localLine);
|
||||
if (event.motion) {
|
||||
target.setHoverIndex(index ?? null);
|
||||
return;
|
||||
}
|
||||
if (event.leftClick && index !== undefined) {
|
||||
target.clickItem(index);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Container, type SelectItem, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
|
||||
import { getSelectListTheme } from "../../modes/theme/theme";
|
||||
import { DynamicBorder } from "./dynamic-border";
|
||||
import { routeSelectListMouseWithTopBorder } from "./select-list-mouse-routing";
|
||||
|
||||
/**
|
||||
* Component that renders a show images selector with borders
|
||||
@@ -44,7 +45,6 @@ export class ShowImagesSelectorComponent extends Container {
|
||||
}
|
||||
|
||||
routeMouse(event: SgrMouseEvent, line: number, col: number): void {
|
||||
const topBorderRows = 1;
|
||||
this.#selectList.routeMouse(event, line - topBorderRows, col);
|
||||
routeSelectListMouseWithTopBorder(this.#selectList, event, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Container, type SelectItem, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
|
||||
import { getSelectListTheme } from "../../modes/theme/theme";
|
||||
import { DynamicBorder } from "./dynamic-border";
|
||||
import { routeSelectListMouseWithTopBorder } from "./select-list-mouse-routing";
|
||||
|
||||
/**
|
||||
* Component that renders a theme selector.
|
||||
@@ -62,7 +63,6 @@ export class ThemeSelectorComponent extends Container {
|
||||
}
|
||||
|
||||
routeMouse(event: SgrMouseEvent, line: number, col: number): void {
|
||||
const topBorderRows = 1;
|
||||
this.#selectList.routeMouse(event, line - topBorderRows, col);
|
||||
routeSelectListMouseWithTopBorder(this.#selectList, event, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Container, type SelectItem, SelectList, type SgrMouseEvent } from "@oh-
|
||||
import { getSelectListTheme } from "../../modes/theme/theme";
|
||||
import { getThinkingLevelMetadata } from "../../thinking";
|
||||
import { DynamicBorder } from "./dynamic-border";
|
||||
import { routeSelectListMouseWithTopBorder } from "./select-list-mouse-routing";
|
||||
|
||||
/**
|
||||
* Component that renders a thinking level selector with borders
|
||||
@@ -51,7 +52,6 @@ export class ThinkingSelectorComponent extends Container {
|
||||
}
|
||||
|
||||
routeMouse(event: SgrMouseEvent, line: number, col: number): void {
|
||||
const topBorderRows = 1;
|
||||
this.#selectList.routeMouse(event, line - topBorderRows, col);
|
||||
routeSelectListMouseWithTopBorder(this.#selectList, event, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user