Compare `scrollHeight` to `clientHeight`; if `scrollHeight > clientHeight`, the textarea content is wrapping vertically
Compare `scrollWidth` to `clientWidth`; if `scrollWidth > clientWidth`, horizontal overflow exists and wrapping is not fully preventing overflow
Measure text with a hidden mirror element using the same font, width, padding, border, and line-height as the textarea
Split the textarea value by lines and calculate rendered line count based on available width and text metrics
Use `getComputedStyle(textarea).whiteSpace` and `wrap`/`cols` attributes to infer wrapping behavior
Detect wrap changes on `input`, `keyup`, `resize`, and `change` events
For precise detection, create a `Range` or use canvas `measureText()` to estimate line breaks against textarea width
Check whether `textarea.selectionStart` and `selectionEnd` positions map to different visual lines using a mirror div
Use an offscreen div with `white-space: pre-wrap; word-wrap: break-word;` and compare its `offsetHeight` to a single-line baseline
Determine wrapped lines by dividing `scrollHeight` by computed `lineHeight` and comparing to the number of newline characters plus one
