vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
49 lines (48 loc) • 1.28 kB
JavaScript
import { ref as i, watch as f, onMounted as m, onBeforeUnmount as g, nextTick as E } from "vue";
import T from "../../Toast/src/toast.mjs";
const w = (o, n, a) => {
const u = i(o.modelValue), t = i(!1), l = () => {
E(() => {
if (n.value) {
n.value.focus();
const e = document.createRange(), s = window.getSelection();
e.selectNodeContents(n.value), e.collapse(!1), s?.removeAllRanges(), s?.addRange(e);
}
});
}, v = () => {
o.disabled || t.value || (t.value = !0, l());
}, r = () => {
if (!t.value || !n.value)
return;
const e = n.value.innerText.trim();
if (!e) {
T.open("内容不能为空"), l();
return;
}
u.value = e, a("update:modelValue", e), a("finish", e), t.value = !1;
}, c = (e) => {
!t.value || !n.value || n.value.contains(e.target) || r();
};
f(
() => o.modelValue,
(e) => {
t.value || (u.value = e);
}
);
const d = (e) => {
n.value && e.key === "Enter" && (e.preventDefault(), r());
};
return m(() => {
document.addEventListener("click", c);
}), g(() => {
document.removeEventListener("click", c);
}), {
innerValue: u,
editing: t,
enableEdit: v,
handleKeydown: d
};
};
export {
w as useEditorText
};