@cran/vue.use
Version:
Cranberry Vue Use Utilities
43 lines (42 loc) • 1.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKeys = void 0;
const vue_ref_1 = require("@cran/vue.ref");
const useEventListener_1 = require("./useEventListener");
const runtime_dom_1 = require("@vue/runtime-dom");
function trim(value) { return value.trim(); }
function useKeys(target = window) {
const keys = Object.create(null);
function update(e, value) {
const code = e.code.toLowerCase();
if (code in keys) {
keys[code].value = value;
}
}
(0, useEventListener_1.useEventListener)(target, "keydown", function onKeydown(e) { update(e, true); }, { capture: true, });
(0, useEventListener_1.useEventListener)(target, "keyup", function onKeydown(e) { update(e, false); }, { capture: true, });
const proxy = new Proxy(keys, {
get(_target, property) {
if ("symbol" === typeof property) {
return undefined;
}
const prop = property.toLowerCase();
if (!(prop in keys)) {
if (-1 < prop.indexOf("+")) {
const split = prop.split("+").map(trim);
keys[prop] = (0, vue_ref_1.eager)(function checkKeys() {
return split.every(function checkKey(key) {
return (0, runtime_dom_1.unref)(proxy[key]);
});
});
}
else {
keys[prop] = (0, runtime_dom_1.ref)(false);
}
}
return keys[prop];
},
});
return proxy;
}
exports.useKeys = useKeys;