UNPKG

@agnos-ui/core

Version:

Framework-agnostic headless component library.

48 lines (47 loc) 1.42 kB
import { readable, computed } from "@amadeus-it-group/tansu"; import { g as createBrowserStoreArrayDirective } from "../dom-gfxqXJpK.js"; import { BROWSER } from "esm-env"; const evtFocusIn = "focusin"; const evtFocusOut = "focusout"; const activeElement$ = !BROWSER ? readable(null) : readable(null, { onUse({ set }) { function setActiveElement() { set(document.activeElement); } setActiveElement(); const container = document.documentElement; function onFocusOut() { setTimeout(setActiveElement); } container.addEventListener(evtFocusIn, setActiveElement, { capture: true }); container.addEventListener(evtFocusOut, onFocusOut, { capture: true }); return () => { container.removeEventListener(evtFocusIn, setActiveElement, { capture: true }); container.removeEventListener(evtFocusOut, onFocusOut, { capture: true }); }; }, equal: Object.is }); function createHasFocus() { const { elements$, directive } = createBrowserStoreArrayDirective(); const hasFocus$ = computed(() => { const activeElement = activeElement$(); if (!activeElement) { return false; } for (const element of elements$()) { if (element === activeElement || element.contains(activeElement)) { return true; } } return false; }); return { directive, hasFocus$ }; } export { activeElement$, createHasFocus };