import { focusGuard } from '@robonen/platform/browsers'; import { onMounted, onUnmounted } from 'vue'; // Global counter to drop the focus guards when the last instance is unmounted let counter = 0; /** * @name useFocusGuard * @category Elements * @description Adds a pair of focus guards at the boundaries of the DOM tree to ensure consistent focus behavior * * @param {string} [namespace] - A namespace to group the focus guards * @returns {void} * * @example * useFocusGuard(); * * @example * useFocusGuard('my-namespace'); * * @since 0.0.3 */ export function useFocusGuard(namespace?: string) { const manager = focusGuard(namespace); const createGuard = () => { manager.createGuard(); counter++; }; const removeGuard = () => { if (counter <= 1) manager.removeGuard(); counter = Math.max(0, counter - 1); }; onMounted(createGuard); onUnmounted(removeGuard); }