ant-design-x-vue
Version:
Craft AI-driven interfaces effortlessly
2 lines (1 loc) • 2.81 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),q=require("../attachments/Attachments2.js"),H=require("../_util/hooks/use-event-callback.js"),M=require("../_util/pick-attrs.js");require("../x-provider/index.js");const U=require("./Bubble.js"),z=require("./hooks/useDisplayData.js"),O=require("./hooks/useListData.js"),X=require("./style/index.js"),m=require("../_util/hooks/use-state.js"),$=require("./context.js"),j=require("../x-provider/hooks/use-x-provider-context.js"),K=1,W=e.defineComponent({name:"AXBubbleList",inheritAttrs:!1,__name:"BubbleList",props:e.mergeDefaults({prefixCls:null,rootClassName:null,items:null,autoScroll:{type:Boolean},roles:null},{autoScroll:!0}),setup(t,{expose:R}){const p=q.createPropsRestProxy(t,["prefixCls","rootClassName","items","autoScroll","roles"]);e.toRef(t,"roles"),e.toRef(t,"items"),e.toRef(t,"prefixCls");const E=e.useAttrs(),I=M.default(e.mergeProps(p,E),{attr:!0,aria:!0}),h=e.ref(t.items),C=e.ref(t.roles);e.watch(()=>t.items,()=>{h.value=t.items}),e.watch(()=>t.roles,()=>{C.value=t.roles});const r=e.ref(null),a=e.ref({}),{getPrefixCls:V}=j.default(),g=V("bubble",t.prefixCls),v=`${g}-list`,[k,w,y]=X.default(g),[N,x]=m.default(!1);e.watchEffect(()=>{x(!0),e.onWatcherCleanup(()=>{x(!1)})});const T=O.default(h,C),[u,A]=z.default(T),[S,i]=m.default(!0),[f,P]=m.default(0),D=s=>{const l=s.target;i(l.scrollHeight-Math.abs(l.scrollTop)-l.clientHeight<=K)};e.watch(f,()=>{t.autoScroll&&e.unref(r)&&e.unref(S)&&e.nextTick(()=>{e.unref(r).scrollTo({top:e.unref(r).scrollHeight})})}),e.watch(()=>e.unref(u).length,()=>{var s;if(t.autoScroll){const l=(s=e.unref(u)[e.unref(u).length-2])==null?void 0:s.key,o=e.unref(a)[l];if(o){const{nativeElement:n}=o,{top:c=0,bottom:d=0}=(n==null?void 0:n.getBoundingClientRect())??{},{top:b,bottom:L}=e.unref(r).getBoundingClientRect();c<L&&d>b&&(P(e.unref(f)+1),i(!0))}}});const B=H.useEventCallback(()=>{t.autoScroll&&P(e.unref(f)+1)}),_=e.computed(()=>({onUpdate:B}));return R({nativeElement:r,scrollTo:({key:s,offset:l,behavior:o="smooth",block:n})=>{if(typeof l=="number")e.unref(r).scrollTo({top:l,behavior:o});else if(s!==void 0){const c=e.unref(a)[s];if(c){const d=e.unref(u).findIndex(b=>b.key===s);i(d===e.unref(u).length-1),c.nativeElement.scrollIntoView({behavior:o,block:n})}}}}),()=>k(e.createVNode($.BubbleContextProvider,{value:_.value},{default:()=>[e.createVNode("div",e.mergeProps(I,{class:q.classnames(v,t.rootClassName,w.value,y,{[`${v}-reach-end`]:S.value}),ref:r,onScroll:D}),[e.unref(u).map(({key:s,onTypingComplete:l,...o})=>e.createVNode(U.default,e.mergeProps(o,{key:s,ref:n=>{n?a.value[s]=n:delete a.value[s]},typing:N.value?o.typing:!1,onTypingComplete:()=>{l==null||l(),A(s)}}),null))])]}))}});exports.default=W;