(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[2086],{91978:function(ae,F,m){"use strict";m.d(F,{Z:function(){return gt}});var c=m(67294),Y=m(87462),s=m(1413),U=m(15671),I=m(43144),H=m(82963),$=m(78814),M=m(61120),X=m(60136),g=m(4942),Pe=m(71002),We=m(45987),Re={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0},pe=Re,Ne=m(27856),ge=m(93967),N=m.n(ge),xe={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(t){return c.createElement("ul",{style:{display:"block"}},t)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(t){return c.createElement("button",null,t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0,asNavFor:null},Se=xe;function Le(o,t,r){return Math.max(t,Math.min(o,r))}var te=function(t){var r=["onTouchStart","onTouchMove","onWheel"];r.includes(t._reactName)||t.preventDefault()},de=function(t){for(var r=[],e=me(t),l=ye(t),n=e;n<l;n++)t.lazyLoadedList.indexOf(n)<0&&r.push(n);return r},Qe=function(t){for(var r=[],e=me(t),l=ye(t),n=e;n<l;n++)r.push(n);return r},me=function(t){return t.currentSlide-ue(t)},ye=function(t){return t.currentSlide+Ae(t)},ue=function(t){return t.centerMode?Math.floor(t.slidesToShow/2)+(parseInt(t.centerPadding)>0?1:0):0},Ae=function(t){return t.centerMode?Math.floor((t.slidesToShow-1)/2)+1+(parseInt(t.centerPadding)>0?1:0):t.slidesToShow},Ce=function(t){return t&&t.offsetWidth||0},Oe=function(t){return t&&t.offsetHeight||0},be=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,e,l,n,i;return e=t.startX-t.curX,l=t.startY-t.curY,n=Math.atan2(l,e),i=Math.round(n*180/Math.PI),i<0&&(i=360-Math.abs(i)),i<=45&&i>=0||i<=360&&i>=315?"left":i>=135&&i<=225?"right":r===!0?i>=35&&i<=135?"up":"down":"vertical"},ce=function(t){var r=!0;return t.infinite||(t.centerMode&&t.currentSlide>=t.slideCount-1||t.slideCount<=t.slidesToShow||t.currentSlide>=t.slideCount-t.slidesToShow)&&(r=!1),r},u=function(t,r){var e={};return r.forEach(function(l){return e[l]=t[l]}),e},L=function(t){var r=c.Children.count(t.children),e=t.listRef,l=Math.ceil(Ce(e)),n=t.trackRef&&t.trackRef.node,i=Math.ceil(Ce(n)),a;if(t.vertical)a=l;else{var d=t.centerMode&&parseInt(t.centerPadding)*2;typeof t.centerPadding=="string"&&t.centerPadding.slice(-1)==="%"&&(d*=l/100),a=Math.ceil((l-d)/t.slidesToShow)}var p=e&&Oe(e.querySelector('[data-index="0"]')),S=p*t.slidesToShow,f=t.currentSlide===void 0?t.initialSlide:t.currentSlide;t.rtl&&t.currentSlide===void 0&&(f=r-1-t.initialSlide);var b=t.lazyLoadedList||[],k=de((0,s.Z)((0,s.Z)({},t),{},{currentSlide:f,lazyLoadedList:b}));b=b.concat(k);var C={slideCount:r,slideWidth:a,listWidth:l,trackWidth:i,currentSlide:f,slideHeight:p,listHeight:S,lazyLoadedList:b};return t.autoplaying===null&&t.autoplay&&(C.autoplaying="playing"),C},z=function(t){var r=t.waitForAnimate,e=t.animating,l=t.fade,n=t.infinite,i=t.index,a=t.slideCount,d=t.lazyLoad,p=t.currentSlide,S=t.centerMode,f=t.slidesToScroll,b=t.slidesToShow,k=t.useCSS,C=t.lazyLoadedList;if(r&&e)return{};var v=i,y,T,h,Z={},E={},O=n?i:Le(i,0,a-1);if(l){if(!n&&(i<0||i>=a))return{};i<0?v=i+a:i>=a&&(v=i-a),d&&C.indexOf(v)<0&&(C=C.concat(v)),Z={animating:!0,currentSlide:v,lazyLoadedList:C,targetSlide:v},E={animating:!1,targetSlide:v}}else y=v,v<0?(y=v+a,n?a%f!==0&&(y=a-a%f):y=0):!ce(t)&&v>p?v=y=p:S&&v>=a?(v=n?a:a-1,y=n?0:a-1):v>=a&&(y=v-a,n?a%f!==0&&(y=0):y=a-b),!n&&v+b>=a&&(y=a-b),T=_((0,s.Z)((0,s.Z)({},t),{},{slideIndex:v})),h=_((0,s.Z)((0,s.Z)({},t),{},{slideIndex:y})),n||(T===h&&(v=y),T=h),d&&(C=C.concat(de((0,s.Z)((0,s.Z)({},t),{},{currentSlide:v})))),k?(Z={animating:!0,currentSlide:y,trackStyle:fe((0,s.Z)((0,s.Z)({},t),{},{left:T})),lazyLoadedList:C,targetSlide:O},E={animating:!1,currentSlide:y,trackStyle:A((0,s.Z)((0,s.Z)({},t),{},{left:h})),swipeLeft:null,targetSlide:O}):Z={currentSlide:y,trackStyle:A((0,s.Z)((0,s.Z)({},t),{},{left:h})),lazyLoadedList:C,targetSlide:O};return{state:Z,nextState:E}},w=function(t,r){var e,l,n,i,a,d=t.slidesToScroll,p=t.slidesToShow,S=t.slideCount,f=t.currentSlide,b=t.targetSlide,k=t.lazyLoad,C=t.infinite;if(i=S%d!==0,e=i?0:(S-f)%d,r.message==="previous")n=e===0?d:p-e,a=f-n,k&&!C&&(l=f-n,a=l===-1?S-1:l),C||(a=b-d);else if(r.message==="next")n=e===0?d:e,a=f+n,k&&!C&&(a=(f+d)%S+e),C||(a=b+d);else if(r.message==="dots")a=r.index*r.slidesToScroll;else if(r.message==="children"){if(a=r.index,C){var v=De((0,s.Z)((0,s.Z)({},t),{},{targetSlide:a}));a>r.currentSlide&&v==="left"?a=a-S:a<r.currentSlide&&v==="right"&&(a=a+S)}}else r.message==="index"&&(a=Number(r.index));return a},x=function(t,r,e){return t.target.tagName.match("TEXTAREA|INPUT|SELECT")||!r?"":t.keyCode===37?e?"next":"previous":t.keyCode===39?e?"previous":"next":""},j=function(t,r,e){return t.target.tagName==="IMG"&&te(t),!r||!e&&t.type.indexOf("mouse")!==-1?"":{dragging:!0,touchObject:{startX:t.touches?t.touches[0].pageX:t.clientX,startY:t.touches?t.touches[0].pageY:t.clientY,curX:t.touches?t.touches[0].pageX:t.clientX,curY:t.touches?t.touches[0].pageY:t.clientY}}},R=function(t,r){var e=r.scrolling,l=r.animating,n=r.vertical,i=r.swipeToSlide,a=r.verticalSwiping,d=r.rtl,p=r.currentSlide,S=r.edgeFriction,f=r.edgeDragged,b=r.onEdge,k=r.swiped,C=r.swiping,v=r.slideCount,y=r.slidesToScroll,T=r.infinite,h=r.touchObject,Z=r.swipeEvent,E=r.listHeight,O=r.listWidth;if(!e){if(l)return te(t);n&&i&&a&&te(t);var P,V={},K=_(r);h.curX=t.touches?t.touches[0].pageX:t.clientX,h.curY=t.touches?t.touches[0].pageY:t.clientY,h.swipeLength=Math.round(Math.sqrt(Math.pow(h.curX-h.startX,2)));var le=Math.round(Math.sqrt(Math.pow(h.curY-h.startY,2)));if(!a&&!C&&le>10)return{scrolling:!0};a&&(h.swipeLength=le);var oe=(d?-1:1)*(h.curX>h.startX?1:-1);a&&(oe=h.curY>h.startY?1:-1);var Ke=Math.ceil(v/y),Q=be(r.touchObject,a),se=h.swipeLength;return T||(p===0&&(Q==="right"||Q==="down")||p+1>=Ke&&(Q==="left"||Q==="up")||!ce(r)&&(Q==="left"||Q==="up"))&&(se=h.swipeLength*S,f===!1&&b&&(b(Q),V.edgeDragged=!0)),!k&&Z&&(Z(Q),V.swiped=!0),n?P=K+se*(E/O)*oe:d?P=K-se*oe:P=K+se*oe,a&&(P=K+se*oe),V=(0,s.Z)((0,s.Z)({},V),{},{touchObject:h,swipeLeft:P,trackStyle:A((0,s.Z)((0,s.Z)({},r),{},{left:P}))}),Math.abs(h.curX-h.startX)<Math.abs(h.curY-h.startY)*.8||h.swipeLength>10&&(V.swiping=!0,te(t)),V}},J=function(t,r){var e=r.dragging,l=r.swipe,n=r.touchObject,i=r.listWidth,a=r.touchThreshold,d=r.verticalSwiping,p=r.listHeight,S=r.swipeToSlide,f=r.scrolling,b=r.onSwipe,k=r.targetSlide,C=r.currentSlide,v=r.infinite;if(!e)return l&&te(t),{};var y=d?p/a:i/a,T=be(n,d),h={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(f||!n.swipeLength)return h;if(n.swipeLength>y){te(t),b&&b(T);var Z,E,O=v?C:k;switch(T){case"left":case"up":E=O+B(r),Z=S?re(r,E):E,h.currentDirection=0;break;case"right":case"down":E=O-B(r),Z=S?re(r,E):E,h.currentDirection=1;break;default:Z=O}h.triggerSlideHandler=Z}else{var P=_(r);h.trackStyle=fe((0,s.Z)((0,s.Z)({},r),{},{left:P}))}return h},G=function(t){for(var r=t.infinite?t.slideCount*2:t.slideCount,e=t.infinite?t.slidesToShow*-1:0,l=t.infinite?t.slidesToShow*-1:0,n=[];e<r;)n.push(e),e=l+t.slidesToScroll,l+=Math.min(t.slidesToScroll,t.slidesToShow);return n},re=function(t,r){var e=G(t),l=0;if(r>e[e.length-1])r=e[e.length-1];else for(var n in e){if(r<e[n]){r=l;break}l=e[n]}return r},B=function(t){var r=t.centerMode?t.slideWidth*Math.floor(t.slidesToShow/2):0;if(t.swipeToSlide){var e,l=t.listRef,n=l.querySelectorAll&&l.querySelectorAll(".slick-slide")||[];if(Array.from(n).every(function(d){if(t.vertical){if(d.offsetTop+Oe(d)/2>t.swipeLeft*-1)return e=d,!1}else if(d.offsetLeft-r+Ce(d)/2>t.swipeLeft*-1)return e=d,!1;return!0}),!e)return 0;var i=t.rtl===!0?t.slideCount-t.currentSlide:t.currentSlide,a=Math.abs(e.dataset.index-i)||1;return a}else return t.slidesToScroll},q=function(t,r){return r.reduce(function(e,l){return e&&t.hasOwnProperty(l)},!0)?null:console.error("Keys Missing:",t)},A=function(t){q(t,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r,e;if(!t.vertical)r=ve(t)*t.slideWidth;else{var l=t.unslick?t.slideCount:t.slideCount+2*t.slidesToShow;e=l*t.slideHeight}var n={opacity:1,transition:"",WebkitTransition:""};if(t.useTransform){var i=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",a=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",d=t.vertical?"translateY("+t.left+"px)":"translateX("+t.left+"px)";n=(0,s.Z)((0,s.Z)({},n),{},{WebkitTransform:i,transform:a,msTransform:d})}else t.vertical?n.top=t.left:n.left=t.left;return t.fade&&(n={opacity:1}),r&&(n.width=r),e&&(n.height=e),window&&!window.addEventListener&&window.attachEvent&&(t.vertical?n.marginTop=t.left+"px":n.marginLeft=t.left+"px"),n},fe=function(t){q(t,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var r=A(t);return t.useTransform?(r.WebkitTransition="-webkit-transform "+t.speed+"ms "+t.cssEase,r.transition="transform "+t.speed+"ms "+t.cssEase):t.vertical?r.transition="top "+t.speed+"ms "+t.cssEase:r.transition="left "+t.speed+"ms "+t.cssEase,r},_=function(t){if(t.unslick)return 0;q(t,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var r=t.slideIndex,e=t.trackRef,l=t.infinite,n=t.centerMode,i=t.slideCount,a=t.slidesToShow,d=t.slidesToScroll,p=t.slideWidth,S=t.listWidth,f=t.variableWidth,b=t.slideHeight,k=t.fade,C=t.vertical,v=0,y,T,h=0;if(k||t.slideCount===1)return 0;var Z=0;if(l?(Z=-W(t),i%d!==0&&r+d>i&&(Z=-(r>i?a-(r-i):i%d)),n&&(Z+=parseInt(a/2))):(i%d!==0&&r+d>i&&(Z=a-i%d),n&&(Z=parseInt(a/2))),v=Z*p,h=Z*b,C?y=r*b*-1+h:y=r*p*-1+v,f===!0){var E,O=e&&e.node;if(E=r+W(t),T=O&&O.childNodes[E],y=T?T.offsetLeft*-1:0,n===!0){E=l?r+W(t):r,T=O&&O.children[E],y=0;for(var P=0;P<E;P++)y-=O&&O.children[P]&&O.children[P].offsetWidth;y-=parseInt(t.centerPadding),y+=T&&(S-T.offsetWidth)/2}}return y},W=function(t){return t.unslick||!t.infinite?0:t.variableWidth?t.slideCount:t.slidesToShow+(t.centerMode?1:0)},ne=function(t){return t.unslick||!t.infinite?0:t.slideCount},ve=function(t){return t.slideCount===1?1:W(t)+t.slideCount+ne(t)},De=function(t){return t.targetSlide>t.currentSlide?t.targetSlide>t.currentSlide+Ee(t)?"left":"right":t.targetSlide<t.currentSlide-ze(t)?"right":"left"},Ee=function(t){var r=t.slidesToShow,e=t.centerMode,l=t.rtl,n=t.centerPadding;if(e){var i=(r-1)/2+1;return parseInt(n)>0&&(i+=1),l&&r%2===0&&(i+=1),i}return l?0:r-1},ze=function(t){var r=t.slidesToShow,e=t.centerMode,l=t.rtl,n=t.centerPadding;if(e){var i=(r-1)/2+1;return parseInt(n)>0&&(i+=1),!l&&r%2===0&&(i+=1),i}return l?r-1:0},he=function(){return!!(typeof window!="undefined"&&window.document&&window.document.createElement)},$e=Object.keys(Se);function D(o){return $e.reduce(function(t,r){return o.hasOwnProperty(r)&&(t[r]=o[r]),t},{})}function je(o,t,r){return t=(0,M.Z)(t),(0,H.Z)(o,(0,$.Z)()?Reflect.construct(t,r||[],(0,M.Z)(o).constructor):t.apply(o,r))}var we=function(t){var r,e,l,n,i;t.rtl?i=t.slideCount-1-t.index:i=t.index,l=i<0||i>=t.slideCount,t.centerMode?(n=Math.floor(t.slidesToShow/2),e=(i-t.currentSlide)%t.slideCount===0,i>t.currentSlide-n-1&&i<=t.currentSlide+n&&(r=!0)):r=t.currentSlide<=i&&i<t.currentSlide+t.slidesToShow;var a;t.targetSlide<0?a=t.targetSlide+t.slideCount:t.targetSlide>=t.slideCount?a=t.targetSlide-t.slideCount:a=t.targetSlide;var d=i===a;return{"slick-slide":!0,"slick-active":r,"slick-center":e,"slick-cloned":l,"slick-current":d}},Xe=function(t){var r={};return(t.variableWidth===void 0||t.variableWidth===!1)&&(r.width=t.slideWidth),t.fade&&(r.position="relative",t.vertical&&t.slideHeight?r.top=-t.index*parseInt(t.slideHeight):r.left=-t.index*parseInt(t.slideWidth),r.opacity=t.currentSlide===t.index?1:0,r.zIndex=t.currentSlide===t.index?999:998,t.useCSS&&(r.transition="opacity "+t.speed+"ms "+t.cssEase+", visibility "+t.speed+"ms "+t.cssEase)),r},ke=function(t,r){return t.key+"-"+r},Me=function(t){var r,e=[],l=[],n=[],i=c.Children.count(t.children),a=me(t),d=ye(t);return c.Children.forEach(t.children,function(p,S){var f,b={message:"children",index:S,slidesToScroll:t.slidesToScroll,currentSlide:t.currentSlide};!t.lazyLoad||t.lazyLoad&&t.lazyLoadedList.indexOf(S)>=0?f=p:f=c.createElement("div",null);var k=Xe((0,s.Z)((0,s.Z)({},t),{},{index:S})),C=f.props.className||"",v=we((0,s.Z)((0,s.Z)({},t),{},{index:S}));if(e.push(c.cloneElement(f,{key:"original"+ke(f,S),"data-index":S,className:N()(v,C),tabIndex:"-1","aria-hidden":!v["slick-active"],style:(0,s.Z)((0,s.Z)({outline:"none"},f.props.style||{}),k),onClick:function(h){f.props&&f.props.onClick&&f.props.onClick(h),t.focusOnSelect&&t.focusOnSelect(b)}})),t.infinite&&i>1&&t.fade===!1&&!t.unslick){var y=i-S;y<=W(t)&&(r=-y,r>=a&&(f=p),v=we((0,s.Z)((0,s.Z)({},t),{},{index:r})),l.push(c.cloneElement(f,{key:"precloned"+ke(f,r),"data-index":r,tabIndex:"-1",className:N()(v,C),"aria-hidden":!v["slick-active"],style:(0,s.Z)((0,s.Z)({},f.props.style||{}),k),onClick:function(h){f.props&&f.props.onClick&&f.props.onClick(h),t.focusOnSelect&&t.focusOnSelect(b)}}))),r=i+S,r<d&&(f=p),v=we((0,s.Z)((0,s.Z)({},t),{},{index:r})),n.push(c.cloneElement(f,{key:"postcloned"+ke(f,r),"data-index":r,tabIndex:"-1",className:N()(v,C),"aria-hidden":!v["slick-active"],style:(0,s.Z)((0,s.Z)({},f.props.style||{}),k),onClick:function(h){f.props&&f.props.onClick&&f.props.onClick(h),t.focusOnSelect&&t.focusOnSelect(b)}}))}}),t.rtl?l.concat(e,n).reverse():l.concat(e,n)},Be=function(o){function t(){var r;(0,U.Z)(this,t);for(var e=arguments.length,l=new Array(e),n=0;n<e;n++)l[n]=arguments[n];return r=je(this,t,[].concat(l)),(0,g.Z)(r,"node",null),(0,g.Z)(r,"handleRef",function(i){r.node=i}),r}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"render",value:function(){var e=Me(this.props),l=this.props,n=l.onMouseEnter,i=l.onMouseOver,a=l.onMouseLeave,d={onMouseEnter:n,onMouseOver:i,onMouseLeave:a};return c.createElement("div",(0,Y.Z)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},d),e)}}])}(c.PureComponent);function Fe(o,t,r){return t=(0,M.Z)(t),(0,H.Z)(o,(0,$.Z)()?Reflect.construct(t,r||[],(0,M.Z)(o).constructor):t.apply(o,r))}var Ie=function(t){var r;return t.infinite?r=Math.ceil(t.slideCount/t.slidesToScroll):r=Math.ceil((t.slideCount-t.slidesToShow)/t.slidesToScroll)+1,r},Ye=function(o){function t(){return(0,U.Z)(this,t),Fe(this,t,arguments)}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"clickHandler",value:function(e,l){l.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e=this.props,l=e.onMouseEnter,n=e.onMouseOver,i=e.onMouseLeave,a=e.infinite,d=e.slidesToScroll,p=e.slidesToShow,S=e.slideCount,f=e.currentSlide,b=Ie({slideCount:S,slidesToScroll:d,slidesToShow:p,infinite:a}),k={onMouseEnter:l,onMouseOver:n,onMouseLeave:i},C=[],v=0;v<b;v++){var y=(v+1)*d-1,T=a?y:Le(y,0,S-1),h=T-(d-1),Z=a?h:Le(h,0,S-1),E=N()({"slick-active":a?f>=Z&&f<=T:f===Z}),O={message:"dots",index:v,slidesToScroll:d,currentSlide:f},P=this.clickHandler.bind(this,O);C=C.concat(c.createElement("li",{key:v,className:E},c.cloneElement(this.props.customPaging(v),{onClick:P})))}return c.cloneElement(this.props.appendDots(C),(0,s.Z)({className:this.props.dotsClass},k))}}])}(c.PureComponent);function Ze(o,t,r){return t=(0,M.Z)(t),(0,H.Z)(o,(0,$.Z)()?Reflect.construct(t,r||[],(0,M.Z)(o).constructor):t.apply(o,r))}var ie=function(o){function t(){return(0,U.Z)(this,t),Ze(this,t,arguments)}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"clickHandler",value:function(e,l){l&&l.preventDefault(),this.props.clickHandler(e,l)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},l=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(this.props.currentSlide===0||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,l=null);var n={key:"0","data-role":"none",className:N()(e),style:{display:"block"},onClick:l},i={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},a;return this.props.prevArrow?a=c.cloneElement(this.props.prevArrow,(0,s.Z)((0,s.Z)({},n),i)):a=c.createElement("button",(0,Y.Z)({key:"0",type:"button"},n)," ","Previous"),a}}])}(c.PureComponent),Ue=function(o){function t(){return(0,U.Z)(this,t),Ze(this,t,arguments)}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"clickHandler",value:function(e,l){l&&l.preventDefault(),this.props.clickHandler(e,l)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},l=this.clickHandler.bind(this,{message:"next"});ce(this.props)||(e["slick-disabled"]=!0,l=null);var n={key:"1","data-role":"none",className:N()(e),style:{display:"block"},onClick:l},i={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},a;return this.props.nextArrow?a=c.cloneElement(this.props.nextArrow,(0,s.Z)((0,s.Z)({},n),i)):a=c.createElement("button",(0,Y.Z)({key:"1",type:"button"},n)," ","Next"),a}}])}(c.PureComponent),ee=m(91033),He=["animating"];function Te(o,t,r){return t=(0,M.Z)(t),(0,H.Z)(o,(0,$.Z)()?Reflect.construct(t,r||[],(0,M.Z)(o).constructor):t.apply(o,r))}var et=function(o){function t(r){var e;(0,U.Z)(this,t),e=Te(this,t,[r]),(0,g.Z)(e,"listRefHandler",function(n){return e.list=n}),(0,g.Z)(e,"trackRefHandler",function(n){return e.track=n}),(0,g.Z)(e,"adaptHeight",function(){if(e.props.adaptiveHeight&&e.list){var n=e.list.querySelector('[data-index="'.concat(e.state.currentSlide,'"]'));e.list.style.height=Oe(n)+"px"}}),(0,g.Z)(e,"componentDidMount",function(){if(e.props.onInit&&e.props.onInit(),e.props.lazyLoad){var n=de((0,s.Z)((0,s.Z)({},e.props),e.state));n.length>0&&(e.setState(function(a){return{lazyLoadedList:a.lazyLoadedList.concat(n)}}),e.props.onLazyLoad&&e.props.onLazyLoad(n))}var i=(0,s.Z)({listRef:e.list,trackRef:e.track},e.props);e.updateState(i,!0,function(){e.adaptHeight(),e.props.autoplay&&e.autoPlay("playing")}),e.props.lazyLoad==="progressive"&&(e.lazyLoadTimer=setInterval(e.progressiveLazyLoad,1e3)),e.ro=new ee.Z(function(){e.state.animating?(e.onWindowResized(!1),e.callbackTimers.push(setTimeout(function(){return e.onWindowResized()},e.props.speed))):e.onWindowResized()}),e.ro.observe(e.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),function(a){a.onfocus=e.props.pauseOnFocus?e.onSlideFocus:null,a.onblur=e.props.pauseOnFocus?e.onSlideBlur:null}),window.addEventListener?window.addEventListener("resize",e.onWindowResized):window.attachEvent("onresize",e.onWindowResized)}),(0,g.Z)(e,"componentWillUnmount",function(){e.animationEndCallback&&clearTimeout(e.animationEndCallback),e.lazyLoadTimer&&clearInterval(e.lazyLoadTimer),e.callbackTimers.length&&(e.callbackTimers.forEach(function(n){return clearTimeout(n)}),e.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",e.onWindowResized):window.detachEvent("onresize",e.onWindowResized),e.autoplayTimer&&clearInterval(e.autoplayTimer),e.ro.disconnect()}),(0,g.Z)(e,"componentDidUpdate",function(n){if(e.checkImagesLoad(),e.props.onReInit&&e.props.onReInit(),e.props.lazyLoad){var i=de((0,s.Z)((0,s.Z)({},e.props),e.state));i.length>0&&(e.setState(function(p){return{lazyLoadedList:p.lazyLoadedList.concat(i)}}),e.props.onLazyLoad&&e.props.onLazyLoad(i))}e.adaptHeight();var a=(0,s.Z)((0,s.Z)({listRef:e.list,trackRef:e.track},e.props),e.state),d=e.didPropsChange(n);d&&e.updateState(a,d,function(){e.state.currentSlide>=c.Children.count(e.props.children)&&e.changeSlide({message:"index",index:c.Children.count(e.props.children)-e.props.slidesToShow,currentSlide:e.state.currentSlide}),(n.autoplay!==e.props.autoplay||n.autoplaySpeed!==e.props.autoplaySpeed)&&(!n.autoplay&&e.props.autoplay?e.autoPlay("playing"):e.props.autoplay?e.autoPlay("update"):e.pause("paused"))})}),(0,g.Z)(e,"onWindowResized",function(n){e.debouncedResize&&e.debouncedResize.cancel(),e.debouncedResize=(0,Ne.D)(50,function(){return e.resizeWindow(n)}),e.debouncedResize()}),(0,g.Z)(e,"resizeWindow",function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,i=!!(e.track&&e.track.node);if(i){var a=(0,s.Z)((0,s.Z)({listRef:e.list,trackRef:e.track},e.props),e.state);e.updateState(a,n,function(){e.props.autoplay?e.autoPlay("update"):e.pause("paused")}),e.setState({animating:!1}),clearTimeout(e.animationEndCallback),delete e.animationEndCallback}}),(0,g.Z)(e,"updateState",function(n,i,a){var d=L(n);n=(0,s.Z)((0,s.Z)((0,s.Z)({},n),d),{},{slideIndex:d.currentSlide});var p=_(n);n=(0,s.Z)((0,s.Z)({},n),{},{left:p});var S=A(n);(i||c.Children.count(e.props.children)!==c.Children.count(n.children))&&(d.trackStyle=S),e.setState(d,a)}),(0,g.Z)(e,"ssrInit",function(){if(e.props.variableWidth){var n=0,i=0,a=[],d=W((0,s.Z)((0,s.Z)((0,s.Z)({},e.props),e.state),{},{slideCount:e.props.children.length})),p=ne((0,s.Z)((0,s.Z)((0,s.Z)({},e.props),e.state),{},{slideCount:e.props.children.length}));e.props.children.forEach(function(P){a.push(P.props.style.width),n+=P.props.style.width});for(var S=0;S<d;S++)i+=a[a.length-1-S],n+=a[a.length-1-S];for(var f=0;f<p;f++)n+=a[f];for(var b=0;b<e.state.currentSlide;b++)i+=a[b];var k={width:n+"px",left:-i+"px"};if(e.props.centerMode){var C="".concat(a[e.state.currentSlide],"px");k.left="calc(".concat(k.left," + (100% - ").concat(C,") / 2 ) ")}return{trackStyle:k}}var v=c.Children.count(e.props.children),y=(0,s.Z)((0,s.Z)((0,s.Z)({},e.props),e.state),{},{slideCount:v}),T=W(y)+ne(y)+v,h=100/e.props.slidesToShow*T,Z=100/T,E=-Z*(W(y)+e.state.currentSlide)*h/100;e.props.centerMode&&(E+=(100-Z*h/100)/2);var O={width:h+"%",left:E+"%"};return{slideWidth:Z+"%",trackStyle:O}}),(0,g.Z)(e,"checkImagesLoad",function(){var n=e.list&&e.list.querySelectorAll&&e.list.querySelectorAll(".slick-slide img")||[],i=n.length,a=0;Array.prototype.forEach.call(n,function(d){var p=function(){return++a&&a>=i&&e.onWindowResized()};if(!d.onclick)d.onclick=function(){return d.parentNode.focus()};else{var S=d.onclick;d.onclick=function(f){S(f),d.parentNode.focus()}}d.onload||(e.props.lazyLoad?d.onload=function(){e.adaptHeight(),e.callbackTimers.push(setTimeout(e.onWindowResized,e.props.speed))}:(d.onload=p,d.onerror=function(){p(),e.props.onLazyLoadError&&e.props.onLazyLoadError()}))})}),(0,g.Z)(e,"progressiveLazyLoad",function(){for(var n=[],i=(0,s.Z)((0,s.Z)({},e.props),e.state),a=e.state.currentSlide;a<e.state.slideCount+ne(i);a++)if(e.state.lazyLoadedList.indexOf(a)<0){n.push(a);break}for(var d=e.state.currentSlide-1;d>=-W(i);d--)if(e.state.lazyLoadedList.indexOf(d)<0){n.push(d);break}n.length>0?(e.setState(function(p){return{lazyLoadedList:p.lazyLoadedList.concat(n)}}),e.props.onLazyLoad&&e.props.onLazyLoad(n)):e.lazyLoadTimer&&(clearInterval(e.lazyLoadTimer),delete e.lazyLoadTimer)}),(0,g.Z)(e,"slideHandler",function(n){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=e.props,d=a.asNavFor,p=a.beforeChange,S=a.onLazyLoad,f=a.speed,b=a.afterChange,k=e.state.currentSlide,C=z((0,s.Z)((0,s.Z)((0,s.Z)({index:n},e.props),e.state),{},{trackRef:e.track,useCSS:e.props.useCSS&&!i})),v=C.state,y=C.nextState;if(v){p&&p(k,v.currentSlide);var T=v.lazyLoadedList.filter(function(h){return e.state.lazyLoadedList.indexOf(h)<0});S&&T.length>0&&S(T),!e.props.waitForAnimate&&e.animationEndCallback&&(clearTimeout(e.animationEndCallback),b&&b(k),delete e.animationEndCallback),e.setState(v,function(){d&&e.asNavForIndex!==n&&(e.asNavForIndex=n,d.innerSlider.slideHandler(n)),y&&(e.animationEndCallback=setTimeout(function(){var h=y.animating,Z=(0,We.Z)(y,He);e.setState(Z,function(){e.callbackTimers.push(setTimeout(function(){return e.setState({animating:h})},10)),b&&b(v.currentSlide),delete e.animationEndCallback})},f))})}}),(0,g.Z)(e,"changeSlide",function(n){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=(0,s.Z)((0,s.Z)({},e.props),e.state),d=w(a,n);if(!(d!==0&&!d)&&(i===!0?e.slideHandler(d,i):e.slideHandler(d),e.props.autoplay&&e.autoPlay("update"),e.props.focusOnSelect)){var p=e.list.querySelectorAll(".slick-current");p[0]&&p[0].focus()}}),(0,g.Z)(e,"clickHandler",function(n){e.clickable===!1&&(n.stopPropagation(),n.preventDefault()),e.clickable=!0}),(0,g.Z)(e,"keyHandler",function(n){var i=x(n,e.props.accessibility,e.props.rtl);i!==""&&e.changeSlide({message:i})}),(0,g.Z)(e,"selectHandler",function(n){e.changeSlide(n)}),(0,g.Z)(e,"disableBodyScroll",function(){var n=function(a){a=a||window.event,a.preventDefault&&a.preventDefault(),a.returnValue=!1};window.ontouchmove=n}),(0,g.Z)(e,"enableBodyScroll",function(){window.ontouchmove=null}),(0,g.Z)(e,"swipeStart",function(n){e.props.verticalSwiping&&e.disableBodyScroll();var i=j(n,e.props.swipe,e.props.draggable);i!==""&&e.setState(i)}),(0,g.Z)(e,"swipeMove",function(n){var i=R(n,(0,s.Z)((0,s.Z)((0,s.Z)({},e.props),e.state),{},{trackRef:e.track,listRef:e.list,slideIndex:e.state.currentSlide}));i&&(i.swiping&&(e.clickable=!1),e.setState(i))}),(0,g.Z)(e,"swipeEnd",function(n){var i=J(n,(0,s.Z)((0,s.Z)((0,s.Z)({},e.props),e.state),{},{trackRef:e.track,listRef:e.list,slideIndex:e.state.currentSlide}));if(i){var a=i.triggerSlideHandler;delete i.triggerSlideHandler,e.setState(i),a!==void 0&&(e.slideHandler(a),e.props.verticalSwiping&&e.enableBodyScroll())}}),(0,g.Z)(e,"touchEnd",function(n){e.swipeEnd(n),e.clickable=!0}),(0,g.Z)(e,"slickPrev",function(){e.callbackTimers.push(setTimeout(function(){return e.changeSlide({message:"previous"})},0))}),(0,g.Z)(e,"slickNext",function(){e.callbackTimers.push(setTimeout(function(){return e.changeSlide({message:"next"})},0))}),(0,g.Z)(e,"slickGoTo",function(n){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(n=Number(n),isNaN(n))return"";e.callbackTimers.push(setTimeout(function(){return e.changeSlide({message:"index",index:n,currentSlide:e.state.currentSlide},i)},0))}),(0,g.Z)(e,"play",function(){var n;if(e.props.rtl)n=e.state.currentSlide-e.props.slidesToScroll;else if(ce((0,s.Z)((0,s.Z)({},e.props),e.state)))n=e.state.currentSlide+e.props.slidesToScroll;else return!1;e.slideHandler(n)}),(0,g.Z)(e,"autoPlay",function(n){e.autoplayTimer&&clearInterval(e.autoplayTimer);var i=e.state.autoplaying;if(n==="update"){if(i==="hovered"||i==="focused"||i==="paused")return}else if(n==="leave"){if(i==="paused"||i==="focused")return}else if(n==="blur"&&(i==="paused"||i==="hovered"))return;e.autoplayTimer=setInterval(e.play,e.props.autoplaySpeed+50),e.setState({autoplaying:"playing"})}),(0,g.Z)(e,"pause",function(n){e.autoplayTimer&&(clearInterval(e.autoplayTimer),e.autoplayTimer=null);var i=e.state.autoplaying;n==="paused"?e.setState({autoplaying:"paused"}):n==="focused"?(i==="hovered"||i==="playing")&&e.setState({autoplaying:"focused"}):i==="playing"&&e.setState({autoplaying:"hovered"})}),(0,g.Z)(e,"onDotsOver",function(){return e.props.autoplay&&e.pause("hovered")}),(0,g.Z)(e,"onDotsLeave",function(){return e.props.autoplay&&e.state.autoplaying==="hovered"&&e.autoPlay("leave")}),(0,g.Z)(e,"onTrackOver",function(){return e.props.autoplay&&e.pause("hovered")}),(0,g.Z)(e,"onTrackLeave",function(){return e.props.autoplay&&e.state.autoplaying==="hovered"&&e.autoPlay("leave")}),(0,g.Z)(e,"onSlideFocus",function(){return e.props.autoplay&&e.pause("focused")}),(0,g.Z)(e,"onSlideBlur",function(){return e.props.autoplay&&e.state.autoplaying==="focused"&&e.autoPlay("blur")}),(0,g.Z)(e,"render",function(){var n=N()("slick-slider",e.props.className,{"slick-vertical":e.props.vertical,"slick-initialized":!0}),i=(0,s.Z)((0,s.Z)({},e.props),e.state),a=u(i,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=e.props.pauseOnHover;a=(0,s.Z)((0,s.Z)({},a),{},{onMouseEnter:d?e.onTrackOver:null,onMouseLeave:d?e.onTrackLeave:null,onMouseOver:d?e.onTrackOver:null,focusOnSelect:e.props.focusOnSelect&&e.clickable?e.selectHandler:null});var p;if(e.props.dots===!0&&e.state.slideCount>=e.props.slidesToShow){var S=u(i,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),f=e.props.pauseOnDotsHover;S=(0,s.Z)((0,s.Z)({},S),{},{clickHandler:e.changeSlide,onMouseEnter:f?e.onDotsLeave:null,onMouseOver:f?e.onDotsOver:null,onMouseLeave:f?e.onDotsLeave:null}),p=c.createElement(Ye,S)}var b,k,C=u(i,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);C.clickHandler=e.changeSlide,e.props.arrows&&(b=c.createElement(ie,C),k=c.createElement(Ue,C));var v=null;e.props.vertical&&(v={height:e.state.listHeight});var y=null;e.props.vertical===!1?e.props.centerMode===!0&&(y={padding:"0px "+e.props.centerPadding}):e.props.centerMode===!0&&(y={padding:e.props.centerPadding+" 0px"});var T=(0,s.Z)((0,s.Z)({},v),y),h=e.props.touchMove,Z={className:"slick-list",style:T,onClick:e.clickHandler,onMouseDown:h?e.swipeStart:null,onMouseMove:e.state.dragging&&h?e.swipeMove:null,onMouseUp:h?e.swipeEnd:null,onMouseLeave:e.state.dragging&&h?e.swipeEnd:null,onTouchStart:h?e.swipeStart:null,onTouchMove:e.state.dragging&&h?e.swipeMove:null,onTouchEnd:h?e.touchEnd:null,onTouchCancel:e.state.dragging&&h?e.swipeEnd:null,onKeyDown:e.props.accessibility?e.keyHandler:null},E={className:n,dir:"ltr",style:e.props.style};return e.props.unslick&&(Z={className:"slick-list"},E={className:n,style:e.props.style}),c.createElement("div",E,e.props.unslick?"":b,c.createElement("div",(0,Y.Z)({ref:e.listRefHandler},Z),c.createElement(Be,(0,Y.Z)({ref:e.trackRefHandler},a),e.props.children)),e.props.unslick?"":k,e.props.unslick?"":p)}),e.list=null,e.track=null,e.state=(0,s.Z)((0,s.Z)({},pe),{},{currentSlide:e.props.initialSlide,targetSlide:e.props.initialSlide?e.props.initialSlide:0,slideCount:c.Children.count(e.props.children)}),e.callbackTimers=[],e.clickable=!0,e.debouncedResize=null;var l=e.ssrInit();return e.state=(0,s.Z)((0,s.Z)({},e.state),l),e}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"didPropsChange",value:function(e){for(var l=!1,n=0,i=Object.keys(this.props);n<i.length;n++){var a=i[n];if(!e.hasOwnProperty(a)){l=!0;break}if(!((0,Pe.Z)(e[a])==="object"||typeof e[a]=="function"||isNaN(e[a]))&&e[a]!==this.props[a]){l=!0;break}}return l||c.Children.count(this.props.children)!==c.Children.count(e.children)}}])}(c.Component),tt=m(80973),Ge=m.n(tt);function rt(o,t,r){return t=(0,M.Z)(t),(0,H.Z)(o,(0,$.Z)()?Reflect.construct(t,r||[],(0,M.Z)(o).constructor):t.apply(o,r))}var nt=function(o){function t(r){var e;return(0,U.Z)(this,t),e=rt(this,t,[r]),(0,g.Z)(e,"innerSliderRefHandler",function(l){return e.innerSlider=l}),(0,g.Z)(e,"slickPrev",function(){return e.innerSlider.slickPrev()}),(0,g.Z)(e,"slickNext",function(){return e.innerSlider.slickNext()}),(0,g.Z)(e,"slickGoTo",function(l){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return e.innerSlider.slickGoTo(l,n)}),(0,g.Z)(e,"slickPause",function(){return e.innerSlider.pause("paused")}),(0,g.Z)(e,"slickPlay",function(){return e.innerSlider.autoPlay("play")}),e.state={breakpoint:null},e._responsiveMediaHandlers=[],e}return(0,X.Z)(t,o),(0,I.Z)(t,[{key:"media",value:function(e,l){var n=window.matchMedia(e),i=function(d){var p=d.matches;p&&l()};n.addListener(i),i(n),this._responsiveMediaHandlers.push({mql:n,query:e,listener:i})}},{key:"componentDidMount",value:function(){var e=this;if(this.props.responsive){var l=this.props.responsive.map(function(i){return i.breakpoint});l.sort(function(i,a){return i-a}),l.forEach(function(i,a){var d;a===0?d=Ge()({minWidth:0,maxWidth:i}):d=Ge()({minWidth:l[a-1]+1,maxWidth:i}),he()&&e.media(d,function(){e.setState({breakpoint:i})})});var n=Ge()({minWidth:l.slice(-1)[0]});he()&&this.media(n,function(){e.setState({breakpoint:null})})}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach(function(e){e.mql.removeListener(e.listener)})}},{key:"render",value:function(){var e=this,l,n;this.state.breakpoint?(n=this.props.responsive.filter(function(v){return v.breakpoint===e.state.breakpoint}),l=n[0].settings==="unslick"?"unslick":(0,s.Z)((0,s.Z)((0,s.Z)({},Se),this.props),n[0].settings)):l=(0,s.Z)((0,s.Z)({},Se),this.props),l.centerMode&&(l.slidesToScroll>1,l.slidesToScroll=1),l.fade&&(l.slidesToShow>1,l.slidesToScroll>1,l.slidesToShow=1,l.slidesToScroll=1);var i=c.Children.toArray(this.props.children);i=i.filter(function(v){return typeof v=="string"?!!v.trim():!!v}),l.variableWidth&&(l.rows>1||l.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),l.variableWidth=!1);for(var a=[],d=null,p=0;p<i.length;p+=l.rows*l.slidesPerRow){for(var S=[],f=p;f<p+l.rows*l.slidesPerRow;f+=l.slidesPerRow){for(var b=[],k=f;k<f+l.slidesPerRow&&(l.variableWidth&&i[k].props.style&&(d=i[k].props.style.width),!(k>=i.length));k+=1)b.push(c.cloneElement(i[k],{key:100*p+10*f+k,tabIndex:-1,style:{width:"".concat(100/l.slidesPerRow,"%"),display:"inline-block"}}));S.push(c.createElement("div",{key:10*p+f},b))}l.variableWidth?a.push(c.createElement("div",{key:p,style:{width:d}},S)):a.push(c.createElement("div",{key:p},S))}if(l==="unslick"){var C="regular slider "+(this.props.className||"");return c.createElement("div",{className:C},i)}else a.length<=l.slidesToShow&&!l.infinite&&(l.unslick=!0);return c.createElement(et,(0,Y.Z)({style:this.props.style,ref:this.innerSliderRefHandler},D(l)),a)}}])}(c.Component),it=nt,at=m(53124),lt=m(11568),ot=m(14747),st=m(83559);const Ve="--dot-duration",dt=o=>{const{componentCls:t,antCls:r}=o;return{[t]:Object.assign(Object.assign({},(0,ot.Wf)(o)),{".slick-slider":{position:"relative",display:"block",boxSizing:"border-box",touchAction:"pan-y",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",".slick-track, .slick-list":{transform:"translate3d(0, 0, 0)",touchAction:"pan-y"}},".slick-list":{position:"relative",display:"block",margin:0,padding:0,overflow:"hidden","&:focus":{outline:"none"},"&.dragging":{cursor:"pointer"},".slick-slide":{pointerEvents:"none",[`input${r}-radio-input, input${r}-checkbox-input`]:{visibility:"hidden"},"&.slick-active":{pointerEvents:"auto",[`input${r}-radio-input, input${r}-checkbox-input`]:{visibility:"visible"}},"> div > div":{verticalAlign:"bottom"}}},".slick-track":{position:"relative",top:0,insetInlineStart:0,display:"block","&::before, &::after":{display:"table",content:'""'},"&::after":{clear:"both"}},".slick-slide":{display:"none",float:"left",height:"100%",minHeight:1,img:{display:"block"},"&.dragging img":{pointerEvents:"none"}},".slick-initialized .slick-slide":{display:"block"},".slick-vertical .slick-slide":{display:"block",height:"auto"}})}},ut=o=>{const{componentCls:t,motionDurationSlow:r,arrowSize:e,arrowOffset:l}=o,n=o.calc(e).div(Math.SQRT2).equal();return{[t]:{".slick-prev, .slick-next":{position:"absolute",top:"50%",width:e,height:e,transform:"translateY(-50%)",color:"#fff",opacity:.4,background:"transparent",padding:0,lineHeight:0,border:0,outline:"none",cursor:"pointer",zIndex:1,transition:`opacity ${r}`,"&:hover, &:focus":{opacity:1},"&.slick-disabled":{pointerEvents:"none",opacity:0},"&::after":{boxSizing:"border-box",position:"absolute",top:o.calc(e).sub(n).div(2).equal(),insetInlineStart:o.calc(e).sub(n).div(2).equal(),display:"inline-block",width:n,height:n,border:"0 solid currentcolor",borderInlineWidth:"2px 0",borderBlockWidth:"2px 0",borderRadius:1,content:'""'}},".slick-prev":{insetInlineStart:l,"&::after":{transform:"rotate(-45deg)"}},".slick-next":{insetInlineEnd:l,"&::after":{transform:"rotate(135deg)"}}}}},ct=o=>{const{componentCls:t,dotOffset:r,dotWidth:e,dotHeight:l,dotGap:n,colorBgContainer:i,motionDurationSlow:a}=o;return{[t]:{".slick-dots":{position:"absolute",insetInlineEnd:0,bottom:0,insetInlineStart:0,zIndex:15,display:"flex !important",justifyContent:"center",paddingInlineStart:0,margin:0,listStyle:"none","&-bottom":{bottom:r},"&-top":{top:r,bottom:"auto"},li:{position:"relative",display:"inline-block",flex:"0 1 auto",boxSizing:"content-box",width:e,height:l,marginInline:n,padding:0,textAlign:"center",textIndent:-999,verticalAlign:"top",transition:`all ${a}`,borderRadius:l,overflow:"hidden","&::after":{display:"block",position:"absolute",top:0,insetInlineStart:0,width:"100%",height:l,content:'""',background:i,borderRadius:l,opacity:1,outline:"none",cursor:"pointer",overflow:"hidden",transform:"translate3d(-100%, 0, 0)"},button:{position:"relative",display:"block",width:"100%",height:l,padding:0,color:"transparent",fontSize:0,background:i,border:0,borderRadius:l,outline:"none",cursor:"pointer",opacity:.2,transition:`all ${a}`,overflow:"hidden","&:hover":{opacity:.75},"&::after":{position:"absolute",inset:o.calc(n).mul(-1).equal(),content:'""'}},"&.slick-active":{width:o.dotActiveWidth,position:"relative","&:hover":{opacity:1},"&::after":{transform:"translate3d(0, 0, 0)",transition:`transform var(${Ve}) ease-out`}}}}}}},ft=o=>{const{componentCls:t,dotOffset:r,arrowOffset:e,marginXXS:l}=o,n={width:o.dotHeight,height:o.dotWidth};return{[`${t}-vertical`]:{".slick-prev, .slick-next":{insetInlineStart:"50%",marginBlockStart:"unset",transform:"translateX(-50%)"},".slick-prev":{insetBlockStart:e,insetInlineStart:"50%","&::after":{transform:"rotate(45deg)"}},".slick-next":{insetBlockStart:"auto",insetBlockEnd:e,"&::after":{transform:"rotate(-135deg)"}},".slick-dots":{top:"50%",bottom:"auto",flexDirection:"column",width:o.dotHeight,height:"auto",margin:0,transform:"translateY(-50%)","&-left":{insetInlineEnd:"auto",insetInlineStart:r},"&-right":{insetInlineEnd:r,insetInlineStart:"auto"},li:Object.assign(Object.assign({},n),{margin:`${(0,lt.bf)(l)} 0`,verticalAlign:"baseline",button:n,"&::after":Object.assign(Object.assign({},n),{height:0}),"&.slick-active":Object.assign(Object.assign({},n),{button:n,"&::after":Object.assign(Object.assign({},n),{transition:`height var(${Ve}) ease-out`})})})}}}},vt=o=>{const{componentCls:t}=o;return[{[`${t}-rtl`]:{direction:"rtl",".slick-dots":{[`${t}-rtl&`]:{flexDirection:"row-reverse"}}}},{[`${t}-vertical`]:{".slick-dots":{[`${t}-rtl&`]:{flexDirection:"column"}}}}]},ht=o=>({arrowSize:16,arrowOffset:o.marginXS,dotWidth:16,dotHeight:3,dotGap:o.marginXXS,dotOffset:12,dotWidthActive:24,dotActiveWidth:24});var pt=(0,st.I$)("Carousel",o=>[dt(o),ut(o),ct(o),ft(o),vt(o)],ht,{deprecatedTokens:[["dotWidthActive","dotActiveWidth"]]}),Je=function(o,t){var r={};for(var e in o)Object.prototype.hasOwnProperty.call(o,e)&&t.indexOf(e)<0&&(r[e]=o[e]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,e=Object.getOwnPropertySymbols(o);l<e.length;l++)t.indexOf(e[l])<0&&Object.prototype.propertyIsEnumerable.call(o,e[l])&&(r[e[l]]=o[e[l]]);return r};const qe="slick-dots",_e=o=>{var{currentSlide:t,slideCount:r}=o,e=Je(o,["currentSlide","slideCount"]);return c.createElement("button",Object.assign({type:"button"},e))};var gt=c.forwardRef((o,t)=>{const{dots:r=!0,arrows:e=!1,prevArrow:l=c.createElement(_e,{"aria-label":"prev"}),nextArrow:n=c.createElement(_e,{"aria-label":"next"}),draggable:i=!1,waitForAnimate:a=!1,dotPosition:d="bottom",vertical:p=d==="left"||d==="right",rootClassName:S,className:f,style:b,id:k,autoplay:C=!1,autoplaySpeed:v=3e3}=o,y=Je(o,["dots","arrows","prevArrow","nextArrow","draggable","waitForAnimate","dotPosition","vertical","rootClassName","className","style","id","autoplay","autoplaySpeed"]),{getPrefixCls:T,direction:h,className:Z,style:E}=(0,at.dj)("carousel"),O=c.useRef(null),P=function(Ct){let bt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;O.current.slickGoTo(Ct,bt)};c.useImperativeHandle(t,()=>({goTo:P,autoPlay:O.current.innerSlider.autoPlay,innerSlider:O.current.innerSlider,prev:O.current.slickPrev,next:O.current.slickNext}),[O.current]);const V=c.useRef(c.Children.count(o.children));c.useEffect(()=>{V.current!==c.Children.count(o.children)&&(P(o.initialSlide||0,!1),V.current=c.Children.count(o.children))},[o.children]);const K=Object.assign({vertical:p,className:N()(f,Z),style:Object.assign(Object.assign({},E),b),autoplay:!!C},y);K.effect==="fade"&&(K.fade=!0);const le=T("carousel",K.prefixCls),oe=!!r,Ke=N()(qe,`${qe}-${d}`,typeof r=="boolean"?!1:r==null?void 0:r.className),[Q,se,St]=pt(le),mt=N()(le,{[`${le}-rtl`]:h==="rtl",[`${le}-vertical`]:K.vertical},se,St,S),yt=C&&(typeof C=="object"?C.dotDuration:!1)?{[Ve]:`${v}ms`}:{};return Q(c.createElement("div",{className:mt,id:k,style:yt},c.createElement(it,Object.assign({ref:O},K,{dots:oe,dotsClass:Ke,arrows:e,prevArrow:l,nextArrow:n,draggable:i,verticalSwiping:p,autoplaySpeed:v,waitForAnimate:a}))))})},15746:function(ae,F,m){"use strict";var c=m(21584);F.Z=c.Z},71230:function(ae,F,m){"use strict";var c=m(17621);F.Z=c.Z},66309:function(ae,F,m){"use strict";m.d(F,{Z:function(){return ce}});var c=m(67294),Y=m(93967),s=m.n(Y),U=m(98423),I=m(98787),H=m(69760),$=m(96159),M=m(45353),X=m(53124),g=m(11568),Pe=m(15063),We=m(14747),Re=m(83262),pe=m(83559);const Ne=u=>{const{paddingXXS:L,lineWidth:z,tagPaddingHorizontal:w,componentCls:x,calc:j}=u,R=j(w).sub(z).equal(),J=j(L).sub(z).equal();return{[x]:Object.assign(Object.assign({},(0,We.Wf)(u)),{display:"inline-block",height:"auto",marginInlineEnd:u.marginXS,paddingInline:R,fontSize:u.tagFontSize,lineHeight:u.tagLineHeight,whiteSpace:"nowrap",background:u.defaultBg,border:`${(0,g.bf)(u.lineWidth)} ${u.lineType} ${u.colorBorder}`,borderRadius:u.borderRadiusSM,opacity:1,transition:`all ${u.motionDurationMid}`,textAlign:"start",position:"relative",[`&${x}-rtl`]:{direction:"rtl"},"&, a, a:hover":{color:u.defaultColor},[`${x}-close-icon`]:{marginInlineStart:J,fontSize:u.tagIconSize,color:u.colorTextDescription,cursor:"pointer",transition:`all ${u.motionDurationMid}`,"&:hover":{color:u.colorTextHeading}},[`&${x}-has-color`]:{borderColor:"transparent",[`&, a, a:hover, ${u.iconCls}-close, ${u.iconCls}-close:hover`]:{color:u.colorTextLightSolid}},"&-checkable":{backgroundColor:"transparent",borderColor:"transparent",cursor:"pointer",[`&:not(${x}-checkable-checked):hover`]:{color:u.colorPrimary,backgroundColor:u.colorFillSecondary},"&:active, &-checked":{color:u.colorTextLightSolid},"&-checked":{backgroundColor:u.colorPrimary,"&:hover":{backgroundColor:u.colorPrimaryHover}},"&:active":{backgroundColor:u.colorPrimaryActive}},"&-hidden":{display:"none"},[`> ${u.iconCls} + span, > span + ${u.iconCls}`]:{marginInlineStart:R}}),[`${x}-borderless`]:{borderColor:"transparent",background:u.tagBorderlessBg}}},ge=u=>{const{lineWidth:L,fontSizeIcon:z,calc:w}=u,x=u.fontSizeSM;return(0,Re.IX)(u,{tagFontSize:x,tagLineHeight:(0,g.bf)(w(u.lineHeightSM).mul(x).equal()),tagIconSize:w(z).sub(w(L).mul(2)).equal(),tagPaddingHorizontal:8,tagBorderlessBg:u.defaultBg})},N=u=>({defaultBg:new Pe.t(u.colorFillQuaternary).onBackground(u.colorBgContainer).toHexString(),defaultColor:u.colorText});var xe=(0,pe.I$)("Tag",u=>{const L=ge(u);return Ne(L)},N),Se=function(u,L){var z={};for(var w in u)Object.prototype.hasOwnProperty.call(u,w)&&L.indexOf(w)<0&&(z[w]=u[w]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function")for(var x=0,w=Object.getOwnPropertySymbols(u);x<w.length;x++)L.indexOf(w[x])<0&&Object.prototype.propertyIsEnumerable.call(u,w[x])&&(z[w[x]]=u[w[x]]);return z},te=c.forwardRef((u,L)=>{const{prefixCls:z,style:w,className:x,checked:j,onChange:R,onClick:J}=u,G=Se(u,["prefixCls","style","className","checked","onChange","onClick"]),{getPrefixCls:re,tag:B}=c.useContext(X.E_),q=ve=>{R==null||R(!j),J==null||J(ve)},A=re("tag",z),[fe,_,W]=xe(A),ne=s()(A,`${A}-checkable`,{[`${A}-checkable-checked`]:j},B==null?void 0:B.className,x,_,W);return fe(c.createElement("span",Object.assign({},G,{ref:L,style:Object.assign(Object.assign({},w),B==null?void 0:B.style),className:ne,onClick:q})))}),de=m(98719);const Qe=u=>(0,de.Z)(u,(L,z)=>{let{textColor:w,lightBorderColor:x,lightColor:j,darkColor:R}=z;return{[`${u.componentCls}${u.componentCls}-${L}`]:{color:w,background:j,borderColor:x,"&-inverse":{color:u.colorTextLightSolid,background:R,borderColor:R},[`&${u.componentCls}-borderless`]:{borderColor:"transparent"}}}});var me=(0,pe.bk)(["Tag","preset"],u=>{const L=ge(u);return Qe(L)},N);function ye(u){return typeof u!="string"?u:u.charAt(0).toUpperCase()+u.slice(1)}const ue=(u,L,z)=>{const w=ye(z);return{[`${u.componentCls}${u.componentCls}-${L}`]:{color:u[`color${z}`],background:u[`color${w}Bg`],borderColor:u[`color${w}Border`],[`&${u.componentCls}-borderless`]:{borderColor:"transparent"}}}};var Ae=(0,pe.bk)(["Tag","status"],u=>{const L=ge(u);return[ue(L,"success","Success"),ue(L,"processing","Info"),ue(L,"error","Error"),ue(L,"warning","Warning")]},N),Ce=function(u,L){var z={};for(var w in u)Object.prototype.hasOwnProperty.call(u,w)&&L.indexOf(w)<0&&(z[w]=u[w]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function")for(var x=0,w=Object.getOwnPropertySymbols(u);x<w.length;x++)L.indexOf(w[x])<0&&Object.prototype.propertyIsEnumerable.call(u,w[x])&&(z[w[x]]=u[w[x]]);return z};const be=c.forwardRef((u,L)=>{const{prefixCls:z,className:w,rootClassName:x,style:j,children:R,icon:J,color:G,onClose:re,bordered:B=!0,visible:q}=u,A=Ce(u,["prefixCls","className","rootClassName","style","children","icon","color","onClose","bordered","visible"]),{getPrefixCls:fe,direction:_,tag:W}=c.useContext(X.E_),[ne,ve]=c.useState(!0),De=(0,U.Z)(A,["closeIcon","closable"]);c.useEffect(()=>{q!==void 0&&ve(q)},[q]);const Ee=(0,I.o2)(G),ze=(0,I.yT)(G),he=Ee||ze,$e=Object.assign(Object.assign({backgroundColor:G&&!he?G:void 0},W==null?void 0:W.style),j),D=fe("tag",z),[je,we,Xe]=xe(D),ke=s()(D,W==null?void 0:W.className,{[`${D}-${G}`]:he,[`${D}-has-color`]:G&&!he,[`${D}-hidden`]:!ne,[`${D}-rtl`]:_==="rtl",[`${D}-borderless`]:!B},w,x,we,Xe),Me=ie=>{ie.stopPropagation(),re==null||re(ie),!ie.defaultPrevented&&ve(!1)},[,Be]=(0,H.Z)((0,H.w)(u),(0,H.w)(W),{closable:!1,closeIconRender:ie=>{const Ue=c.createElement("span",{className:`${D}-close-icon`,onClick:Me},ie);return(0,$.wm)(ie,Ue,ee=>({onClick:He=>{var Te;(Te=ee==null?void 0:ee.onClick)===null||Te===void 0||Te.call(ee,He),Me(He)},className:s()(ee==null?void 0:ee.className,`${D}-close-icon`)}))}}),Fe=typeof A.onClick=="function"||R&&R.type==="a",Ie=J||null,Ye=Ie?c.createElement(c.Fragment,null,Ie,R&&c.createElement("span",null,R)):R,Ze=c.createElement("span",Object.assign({},De,{ref:L,className:ke,style:$e}),Ye,Be,Ee&&c.createElement(me,{key:"preset",prefixCls:D}),ze&&c.createElement(Ae,{key:"status",prefixCls:D}));return je(Fe?c.createElement(M.Z,{component:"Tag"},Ze):Ze)});be.CheckableTag=te;var ce=be},80973:function(ae,F,m){var c=m(71169),Y=function(I){var H=/[height|width]$/;return H.test(I)},s=function(I){var H="",$=Object.keys(I);return $.forEach(function(M,X){var g=I[M];M=c(M),Y(M)&&typeof g=="number"&&(g=g+"px"),g===!0?H+=M:g===!1?H+="not "+M:H+="("+M+": "+g+")",X<$.length-1&&(H+=" and ")}),H},U=function(I){var H="";return typeof I=="string"?I:I instanceof Array?(I.forEach(function($,M){H+=s($),M<I.length-1&&(H+=", ")}),H):s(I)};ae.exports=U},71169:function(ae){var F=function(m){return m.replace(/[A-Z]/g,function(c){return"-"+c.toLowerCase()}).toLowerCase()};ae.exports=F}}]);
