UNPKG

@cran/vue.use

Version:

Cranberry Vue Use Utilities

43 lines (42 loc) 1.65 kB
"use strict"; 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;