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