UNPKG

@artmate/chat

Version:

**开箱即用的AI组件库(基于 Vue3 + ElementPlus)**

63 lines (62 loc) 1.72 kB
import { ref as p, watch as b, toValue as l } from "vue"; import { useEventCallback as D } from "../hooks/useEventCallback.js"; function C(f, o, i, w, I) { const t = p([]), c = (e, r = t.value) => { let n = l(f); for (let u = 0; u < e - 1; u += 1) { const a = r[u], s = n.find((v) => v.value === a); if (!s) break; n = s.children || []; } return n; }, d = (e) => e.map((r, n) => { const a = c(n + 1, e).find((s) => s.value === r); return a == null ? void 0 : a.value; }), m = (e) => { const r = t.value.length || 1, n = c(r), u = n.findIndex( (v) => v.value === t.value[r - 1] ), a = n.length, s = n[(u + e + a) % a]; t.value = [ ...t.value.slice(0, r - 1), s.value ]; }, h = () => { t.value.length > 1 && (t.value = t.value.slice(0, t.value.length - 1)); }, g = () => { const e = c(t.value.length + 1); e.length && (t.value = [...t.value, e[0].value]); }, k = D((e) => { if (l(o)) switch (e.key) { case "ArrowDown": m(1), e.preventDefault(); break; case "ArrowUp": m(-1), e.preventDefault(); break; case "ArrowRight": l(i) ? h() : g(), e.preventDefault(); break; case "ArrowLeft": l(i) ? g() : h(), e.preventDefault(); break; case "Enter": c(t.value.length + 1).length || w(d(t.value)), e.preventDefault(); break; case "Escape": I(), e.preventDefault(); break; } }); return b( () => l(o), () => { l(o) && (t.value = [l(f)[0].value]); }, { immediate: !0 } ), [t, k]; } export { C as default };