DuyTa's picture
Upload folder using huggingface_hub
bc20498 verified
// Modified from Grail UI v0.9.6 (2023-06-10)
// Source: https://github.com/grail-ui/grail-ui
// https://github.com/grail-ui/grail-ui/tree/master/packages/grail-ui/src/focusTrap/focusTrap.ts
import { writable, readonly } from 'svelte/store';
import { createFocusTrap as _createFocusTrap } from 'focus-trap';
export function createFocusTrap(config = {}) {
let trap;
const { immediate, ...focusTrapOptions } = config;
const hasFocus = writable(false);
const isPaused = writable(false);
const activate = (opts) => trap?.activate(opts);
const deactivate = (opts) => {
trap?.deactivate(opts);
};
const pause = () => {
if (trap) {
trap.pause();
isPaused.set(true);
}
};
const unpause = () => {
if (trap) {
trap.unpause();
isPaused.set(false);
}
};
const useFocusTrap = (node) => {
trap = _createFocusTrap(node, {
...focusTrapOptions,
onActivate() {
hasFocus.set(true);
config.onActivate?.();
},
onDeactivate() {
hasFocus.set(false);
config.onDeactivate?.();
},
});
if (immediate) {
activate();
}
return {
destroy() {
deactivate();
trap = undefined;
},
};
};
return {
useFocusTrap,
hasFocus: readonly(hasFocus),
isPaused: readonly(isPaused),
activate,
deactivate,
pause,
unpause,
};
}