@artmate/chat
Version:
**开箱即用的AI组件库(基于 Vue3 + ElementPlus)**
2 lines (1 loc) • 2.82 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),q=require("../bubble/index.vue.js");;/* empty css */const w=require("../hooks/useNamespace.js"),D=require("./hooks/useDisplayData.js"),L=require("./hooks/useListData.js"),V=1,H=e.defineComponent({__name:"index",props:{autoScroll:{type:Boolean,default:!0},className:{},items:{default:()=>[]},roles:{},rootClassName:{}},setup(h,{expose:C}){const l=h,v=e.useSlots(),m=w.useNamespace("bubble-list"),_=e.ref(!0),u=e.ref(!1),p=e.ref(0),s=e.ref(),d=e.ref({}),{ListData:g,setListData:B}=L.default(l.items,l.roles),[i,T,k]=D.default(g);e.watch(()=>l.items,()=>{B(l.items)},{deep:!0}),e.watch(()=>g.value,()=>{k()});function S(t){const o=t.target;u.value=o.scrollHeight-Math.abs(o.scrollTop)-o.clientHeight<=V}e.watch(()=>p.value,()=>{l.autoScroll&&s.value&&u.value&&s.value.scrollTo({top:s.value.scrollHeight})}),e.watch(()=>i.value.length,()=>{e.nextTick(()=>{var t;if(l.autoScroll){const o=(t=i.value[i.value.length-2])==null?void 0:t.key,n=d.value[o];if(n){const{nativeElement:a}=n,{top:r=0,bottom:c=0}=(a==null?void 0:a.getBoundingClientRect())??{},{top:f,bottom:I}=s.value.getBoundingClientRect();r<I&&c>f&&(p.value+=1,u.value=!0)}}})});function R(){l.autoScroll&&(p.value=p.value+1)}function E(t){var o;t!=null&&t.key&&((o=t==null?void 0:t.onTypingComplete)==null||o.call(t),T(t.key))}function y({key:t,offset:o,behavior:n="smooth",block:a}){if(typeof o=="number")s.value.scrollTo({top:o,behavior:n});else if(t!==void 0){const r=d.value[t];if(r){const c=i.value.findIndex(f=>f.key===t);u.value=c===i.value.length-1,r.nativeElement.scrollIntoView({behavior:n,block:a})}}}function N(t,o){o!=null&&(t?Reflect.set(d.value,o,t):Reflect.deleteProperty(d.value,o))}return e.onMounted(()=>{l.autoScroll&&setTimeout(()=>{y({offset:s.value.scrollHeight,behavior:"auto"})})}),C({nativeElement:s,scrollTo:y}),(t,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"listRef",ref:s,class:e.normalizeClass([e.unref(m).b(),t.rootClassName,t.className,u.value&&e.unref(m).b("reach-end")]),onScroll:S},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i),(n,a)=>(e.openBlock(),e.createElementBlock("div",{key:n.key},[v.leading?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(e.unref(m).b("leading"))},[e.renderSlot(t.$slots,"leading",{info:n,index:a})],2)):e.createCommentVNode("",!0),e.createVNode(q.default,e.mergeProps({ref_for:!0},n,{ref_for:!0,ref:r=>N(r,n.key),typing:_.value?n.typing:!1,onTypingComplete:r=>E(n),onUpdate:R}),e.createSlots({_:2},[e.renderList(v,(r,c)=>({name:c,fn:e.withCtx(f=>[e.renderSlot(t.$slots,c,{info:{...f,...n},index:a})])}))]),1040,["typing","onTypingComplete"])]))),128))],34))}});exports.default=H;