* fix(caret): getting last letter top in long multiline words (@NadAlaba)
* no need to check for invisible extra letters
This check was needed when `letterPosTop` was
`currentLetter?.offsetTop ?? previousLetter?.offsetTop ??
lastWordLetter?.offsetTop` where `previousLetter?.offsetTop` was defined
but 0 in extra letters in blind mode, so we got the value of zero
although in some fonts the real value (`lastWordLetter` value) is not 0.
However, now we don't use `previousLetter`, and `currentLetter` is
undefined in extra letters (blind mode or not), so we'll get the value
we want (`lastWordLetter` value) in extra letters.
* update comment
* fix(zen mode): undefined word when changing tape mode during test (@NadAlaba)
* fix(zen mode): shrinking full-width-caret when changing tape mode during test (@NadAlaba)
* fix(zen mode): messed up caret in RTL languages (@NadAlaba)
because of the letter '_' that is added to the beginning of a word
in zen mode, the caret is getting positioned on the 2nd letter.
Also, since lastWordLetter is always undefined (because wordLen is
always 0) offsetHeight and offsetTop are getting the default values
regardless of font characteristics.
* fix caret staying in position in (blind + word tape + zen) mode
* refactor: combine last 2 solutions
* rename parameter
* refactor: use active word based on logical value, not DOM class
* use existing const instead of querying DOM
activeWord.offsetTop changes when the DOM element gets updated
no need to query the active word again
* better naming
* no need to requery DOM, we have the top of the previous word saved
* fixed bug where presets wouldnt change auto light and dark theme checkbox values
* mode code to setting.ts
* updated variable name
* updated setting.ts
* fix(hints): update hints position on blind mode and hide extra letters (@NadAlaba)
* update hints position on font family preview
* hide hints in blind mode
* allow wide hints to overflow horizontally when tapeMode=off
---------
Co-authored-by: Jack <jack@monkeytype.com>