vue-hooks-plus
Version:
Vue hooks library
40 lines (39 loc) • 1.32 kB
JavaScript
const useEventListener = require("../useEventListener");
const useBoolean = require("../useBoolean");
const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const useEventListener__default = /* @__PURE__ */ _interopDefaultLegacy(useEventListener);
const useBoolean__default = /* @__PURE__ */ _interopDefaultLegacy(useBoolean);
function useFocusWithin(target, options) {
const [isFocusWithin, { set: setIsFocusWithin }] = useBoolean__default.default(false);
const { onFocus, onBlur, onChange } = options || {};
useEventListener__default.default(
"focusin",
(e) => {
if (!isFocusWithin.value) {
onFocus == null ? void 0 : onFocus(e);
onChange == null ? void 0 : onChange(true);
setIsFocusWithin(true);
}
},
{
target
}
);
useEventListener__default.default(
"focusout",
(e) => {
var _a, _b;
if (isFocusWithin.value && !((_b = (_a = e.currentTarget) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, e.relatedTarget))) {
onBlur == null ? void 0 : onBlur(e);
onChange == null ? void 0 : onChange(false);
setIsFocusWithin(false);
}
},
{
target
}
);
return isFocusWithin;
}
module.exports = useFocusWithin;
;