import { Event } from './event.js' /** * Mouse click event. Fired on left-button release without drag, only when * mouse tracking is enabled (i.e. inside ). * * Bubbles from the deepest hit node up through parentNode. Call * stopImmediatePropagation() to prevent ancestors' onClick from firing. */ export class ClickEvent extends Event { /** 0-indexed screen column of the click */ readonly col: number /** 0-indexed screen row of the click */ readonly row: number /** * Click column relative to the current handler's Box (col - box.x). * Recomputed by dispatchClick before each handler fires, so an onClick * on a container sees coords relative to that container, not to any * child the click landed on. */ localCol = 0 /** Click row relative to the current handler's Box (row - box.y). */ localRow = 0 /** * True if the clicked cell has no visible content (unwritten in the * screen buffer — both packed words are 0). Handlers can check this to * ignore clicks on blank space to the right of text, so accidental * clicks on empty terminal space don't toggle state. */ readonly cellIsBlank: boolean constructor(col: number, row: number, cellIsBlank: boolean) { super() this.col = col this.row = row this.cellIsBlank = cellIsBlank } }