Files
openchamber/packages/ui/src/hooks/keyboard-shortcut-dom.ts
T
ChangeHowandBohdan Triapitsyn 02581d08c5 feat(chat): turn /btw into an isolated composer (#3398)
* feat(chat): turn /btw into an isolated composer

* fix(chat): preserve direct BTW sends and isolate pending preparation

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-09-07 23:13:07 +03:00

29 lines
977 B
TypeScript

const OPEN_DROPDOWN_SELECTOR = [
'[data-slot="dropdown-menu-content"][data-open]',
'[data-slot="select-content"][data-open]',
].join(',');
export function hasOpenDropdown(root: ParentNode = document): boolean {
return Boolean(root.querySelector(OPEN_DROPDOWN_SELECTOR));
}
export function hasActiveBtwComposer(root: ParentNode = document): boolean {
return Boolean(root.querySelector('[data-btw-composer="true"]'));
}
export function shouldStopDropdownImeEscape(
event: Pick<KeyboardEvent, 'isComposing' | 'key' | 'keyCode'>,
dropdownOpen: boolean,
): boolean {
return dropdownOpen
&& event.key === 'Escape'
&& (event.isComposing || event.keyCode === 229);
}
export function isEditableEventTarget(target: EventTarget | null): boolean {
if (!(target instanceof HTMLElement)) return false;
if (target.isContentEditable) return true;
const tagName = target.tagName;
return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
}