39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { Event } from './event.js'
|
|
|
|
/**
|
|
* Mouse click event. Fired on left-button release without drag, only when
|
|
* mouse tracking is enabled (i.e. inside <AlternateScreen>).
|
|
*
|
|
* 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
|
|
}
|
|
}
|