import { createContext } from 'react' import type { DOMElement } from '../dom.js' export type CursorDeclaration = { /** Display column (terminal cell width) within the declared node */ readonly relativeX: number /** Line number within the declared node */ readonly relativeY: number /** The ink-box DOMElement whose yoga layout provides the absolute origin */ readonly node: DOMElement } /** * Setter for the declared cursor position. * * The optional second argument makes `null` a conditional clear: the * declaration is only cleared if the currently-declared node matches * `clearIfNode`. This makes the hook safe for sibling components * (e.g. list items) that transfer focus among themselves — without the * node check, a newly-unfocused item's clear could clobber a * newly-focused sibling's set depending on layout-effect order. */ export type CursorDeclarationSetter = ( declaration: CursorDeclaration | null, clearIfNode?: DOMElement | null, ) => void const CursorDeclarationContext = createContext( () => {}, ) export default CursorDeclarationContext