@artmate/chat
Version:
**开箱即用的AI组件库(基于 Vue3 + ElementPlus)**
2 lines (1 loc) • 1.26 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("vue"),I=require("../hooks/useEventCallback.js");function D(i,o,f,b,m){const t=u.ref([]),c=(e,n=t.value)=>{let a=u.toValue(i);for(let r=0;r<e-1;r+=1){const l=n[r],s=a.find(v=>v.value===l);if(!s)break;a=s.children||[]}return a},k=e=>e.map((n,a)=>{const l=c(a+1,e).find(s=>s.value===n);return l==null?void 0:l.value}),g=e=>{const n=t.value.length||1,a=c(n),r=a.findIndex(v=>v.value===t.value[n-1]),l=a.length,s=a[(r+e+l)%l];t.value=[...t.value.slice(0,n-1),s.value]},h=()=>{t.value.length>1&&(t.value=t.value.slice(0,t.value.length-1))},d=()=>{const e=c(t.value.length+1);e.length&&(t.value=[...t.value,e[0].value])},w=I.useEventCallback(e=>{if(u.toValue(o))switch(e.key){case"ArrowDown":g(1),e.preventDefault();break;case"ArrowUp":g(-1),e.preventDefault();break;case"ArrowRight":u.toValue(f)?h():d(),e.preventDefault();break;case"ArrowLeft":u.toValue(f)?d():h(),e.preventDefault();break;case"Enter":c(t.value.length+1).length||b(k(t.value)),e.preventDefault();break;case"Escape":m(),e.preventDefault();break}});return u.watch(()=>u.toValue(o),()=>{u.toValue(o)&&(t.value=[u.toValue(i)[0].value])},{immediate:!0}),[t,w]}exports.default=D;