voraa, спасибо
Про inert не знал
Но кажется, что это не совсем правильный селектор. Здесь как минимум некорректно проверять наличие атрибута disabled у элементов форм, потому что он может отсутствовать, но при этом состояние наследоваться от fieldset.
Про inert прочитал, он также может быть выставлен у родителя, чего здесь не учитывается
Вот такой селектор сделал:
const sfocusable = ':where(:any-link, :read-write, audio, button, input, select, video, details summary, [tabindex]):not(:disabled):not([tabindex^="-"])';
Но кажется, что селектором не получится исключить родительский inert без извращений.
Нужно по скорости проверить, что будет быстрее, селектор попроще + проверки на JS, или просто один сложный селектор.
P.S.: селектор :read-write покрывает сразу кейс с contenteditable и textarea