epic-designer
Version:
基于vue3的设计器,可视化开发页面表单
77 lines (76 loc) • 2.49 kB
JavaScript
import { onUnmounted as h } from "vue";
import { useClipboard as I } from "../../../../../hooks/src/common/clipboard.js";
import "@vueuse/core";
import "../../../../../hooks/src/store/index.js";
/* empty css */
/* empty css */
/* empty css */
import "../../../../../manager/src/pluginManager.js";
/* empty css */
import "vue-draggable-plus";
import "../../../../../git/epic/epic-designer/node_modules/.pnpm/jsep@1.4.0/node_modules/jsep/dist/jsep.js";
function A(m) {
let c = document;
const { emit: p, handleDelete: f, pageSchema: d, revoke: s, setSelectedNode: k, state: o } = m, { copy: y, cut: E, duplicate: b, paste: N } = I(
d,
k,
(e) => s.push(e)
), v = () => {
const e = document.activeElement;
return !!(e instanceof HTMLInputElement || e instanceof HTMLTextAreaElement || e instanceof HTMLElement && e.isContentEditable || (e == null ? void 0 : e.closest(".monaco-editor")));
};
let n = 0;
const w = 50, i = (e) => {
var l, u;
const t = Date.now();
if (t - n < w || v())
return;
const r = e.key.toLowerCase();
if ((r === "delete" || r === "backspace") && o.selectedNode) {
e.preventDefault(), f(), n = t;
return;
}
if (!(!e.ctrlKey && !e.metaKey))
switch (["c", "d", "s", "v", "x", "y", "z"].includes(r) && e.preventDefault(), r) {
case "c": {
o.selectedNode && (y(o.selectedNode), n = t);
break;
}
case "d": {
o.selectedNode && (b((l = o.selectedNode) == null ? void 0 : l.id), n = t);
break;
}
case "s": {
p("save", d), n = t;
break;
}
case "v": {
N((u = o.selectedNode) == null ? void 0 : u.id), n = t;
break;
}
case "x": {
o.selectedNode && (E(o.selectedNode), n = t);
break;
}
case "y": {
s.redo(), n = t;
break;
}
case "z": {
e.shiftKey ? s.redo() : s.undo(), n = t;
break;
}
}
}, a = () => {
c.removeEventListener("keydown", i, { capture: !0 });
}, T = (e) => {
a(), c = e, c.addEventListener("keydown", i, { capture: !0 });
};
return h(a), {
cleanup: a,
setTarget: T
};
}
export {
A as useHotkeys
};