TextSelection
data class TextSelection(val pageIndex: Int, val start: Int, val end: Int, val text: String, val quads: List<Rectangle>)
A finalized or in-progress text selection on one page (cross-page selection is out of scope). start/end are INCLUSIVE flattened char indices into the page's io.github.yuroyami.kitepdf.core.KiteStructuredText reading order; text carries \n/\n\n line/block separators exactly like the extraction text; quads are display-space, one per line touched.