Currently when setting focus programmatically to an element with
focus(), there is no way to instruct the browser to apply
:focus-visible styling to it.
This can be problematic when using HTML-over-the-wire technologies like Hotwire or Htmx, where the focused element may be replaced with a new one, and the new one is given focus. If the initial element was showing a focus ring via
:focus-visible styles, that styling will go away for the new element, because the browser has decided that it wasn’t necessary.
focus() currently supports passing an object with
preventScroll:true to prevent the browser from scrolling to the focused element. I propose that the object should support an additional
forceVisible key, which can be set to
true to force
:focus-visible styling on the element.