{"version":3,"file":"MessageChat.CDaxRwBZ.mjs","names":["useState","useRef","useCallback","containerStyle"],"sources":["https:/framerusercontent.com/modules/tjFuC5qK2yQaIxpmQUYa/Pn1DLackGMsOegY1gEvZ/MessageChat.js"],"sourcesContent":["// Message-style bubble chat component with automatic animations and configurable messages\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,startTransition,useRef,useCallback}from\"react\";import{motion,AnimatePresence}from\"framer-motion\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * Animated message-style chat component with smooth typing indicators, bubble animations, and auto-scroll\n *\n * @framerIntrinsicWidth 375\n * @framerIntrinsicHeight 667\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function MessageChat(props){const{messages=[{text:\"Hey! This component is now ready for Framer! 🎉\",sender:\"other\"},{text:\"That's amazing! What can it do?\",sender:\"user\"},{text:\"It's a fully animated message-style chat component with smooth typing indicators, bubble animations, and auto-scroll functionality. Perfect for showcasing conversations, testimonials, or interactive demos in your Framer projects!\",sender:\"other\"},{text:\"Wow, that sounds incredibly useful! Can I customize it?\",sender:\"user\"},{text:\"Absolutely! You can customize bubble colors, fonts, animation timing, contact headers with profile pictures, and even toggle animations on/off. It's designed to be flexible for any use case you have in mind.\",sender:\"other\"},{text:\"This is exactly what I needed for my project! How smooth are the animations?\",sender:\"user\"},{text:\"The animations are buttery smooth with Apple-like spring physics! Messages slide in from the bottom, typing indicators appear before each message, and everything auto-scrolls to keep the newest content visible. It feels just like a real messaging app.\",sender:\"other\"},{text:\"Perfect! I can't wait to use this in my Framer designs 🚀\",sender:\"user\"}],enableAnimations=true,autoPlay=true,animationDelay=1e3,userBubbleColor=\"#007AFF\",otherBubbleColor=\"#E5E5EA\",userTextColor=\"#FFFFFF\",otherTextColor=\"#000000\",backgroundColor=\"#FFFFFF\",bubbleFont,chatPadding=20,bubbleSpacing=12,maxBubbleWidth=80,showContactHeader=false,contactName=\"John Doe\",contactAvatar={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Contact Avatar\"},contactHeaderFont,dividerColor=\"#E5E5EA\"}=props;const[visibleMessages,setVisibleMessages]=useState(0);const[showTyping,setShowTyping]=useState(false);const[typingSender,setTypingSender]=useState(\"other\");const[animatedMessages,setAnimatedMessages]=useState(new Set);const isStatic=useIsStaticRenderer();const chatContainerRef=useRef(null);const timersRef=useRef([]);// Auto-scroll to bottom when new messages appear\nconst scrollToBottom=useCallback(()=>{if(chatContainerRef.current){chatContainerRef.current.scrollTop=chatContainerRef.current.scrollHeight;}},[]);useEffect(()=>{scrollToBottom();},[visibleMessages,showTyping,scrollToBottom]);// Reset animated messages when messages change\nuseEffect(()=>{setAnimatedMessages(new Set);},[messages]);useEffect(()=>{// Clear existing timers\ntimersRef.current.forEach(timer=>{if(typeof window!==\"undefined\"){clearTimeout(timer);}});timersRef.current=[];if(isStatic||!autoPlay||!enableAnimations||!Array.isArray(messages)||messages.length===0){setVisibleMessages(messages?.length||0);setShowTyping(false);return;}setVisibleMessages(0);setShowTyping(false);setAnimatedMessages(new Set);let currentIndex=0;const showNextMessage=()=>{if(currentIndex<messages.length){const currentMessage=messages[currentIndex];// Show typing indicator for the correct sender before each message\nstartTransition(()=>{setTypingSender(currentMessage.sender);setShowTyping(true);});// Show the message after typing delay\nif(typeof window!==\"undefined\"){const messageTimer=setTimeout(()=>{startTransition(()=>{setShowTyping(false);setVisibleMessages(currentIndex+1);});currentIndex++;// Continue to next message after a brief pause\nif(currentIndex<messages.length){const nextTimer=setTimeout(showNextMessage,Math.max(200,animationDelay*.3));timersRef.current.push(nextTimer);}},Math.max(500,animationDelay*.7))// Typing shows for 70% of delay time\n;timersRef.current.push(messageTimer);}}};if(typeof window!==\"undefined\"){const initialTimer=setTimeout(showNextMessage,500);timersRef.current.push(initialTimer);}return()=>{timersRef.current.forEach(timer=>{if(typeof window!==\"undefined\"){clearTimeout(timer);}});timersRef.current=[];};},[messages,autoPlay,animationDelay,isStatic,enableAnimations]);// Cleanup timers on unmount\nuseEffect(()=>{return()=>{timersRef.current.forEach(timer=>{if(typeof window!==\"undefined\"){clearTimeout(timer);}});};},[]);const bubbleVariants={hidden:{opacity:0,y:30,scale:.95},visible:{opacity:1,y:0,scale:1,transition:{type:\"spring\",stiffness:600,damping:30,mass:.6,velocity:0}}};const typingVariants={hidden:{opacity:0,scale:.8,y:8},visible:{opacity:1,scale:1,y:0,transition:{type:\"spring\",stiffness:500,damping:35,mass:.5}},exit:{opacity:0,scale:.8,y:-8,transition:{duration:.15,ease:[.4,0,.2,1]}}};const containerStyle={...props.style,backgroundColor,padding:`${Math.max(8,chatPadding)}px`,borderRadius:\"16px\",maxHeight:\"100%\",overflow:\"auto\",display:\"flex\",flexDirection:\"column\",gap:`${Math.max(4,bubbleSpacing)}px`,position:\"relative\",scrollBehavior:\"smooth\"};const MessageBubble=({message,index})=>{if(!message||typeof message.text!==\"string\"){return null;}const bubbleStyle={backgroundColor:message.sender===\"user\"?userBubbleColor:otherBubbleColor,color:message.sender===\"user\"?userTextColor:otherTextColor,padding:\"8px 12px\",borderRadius:message.sender===\"user\"?\"18px 18px 4px 18px\":\"18px 18px 18px 4px\",maxWidth:\"100%\",wordWrap:\"break-word\",fontSize:\"17px\",lineHeight:\"1.3\",fontWeight:\"400\",...bubbleFont};const containerStyle={display:\"flex\",flexDirection:\"column\",alignItems:message.sender===\"user\"?\"flex-end\":\"flex-start\",maxWidth:`${Math.min(95,Math.max(50,maxBubbleWidth))}%`,alignSelf:message.sender===\"user\"?\"flex-end\":\"flex-start\",position:\"relative\",zIndex:1,marginBottom:\"2px\"};// Only animate if this message hasn't been animated before and animations are enabled\nconst shouldAnimate=enableAnimations&&!animatedMessages.has(index)&&index<visibleMessages;// Mark this message as animated when it appears\nuseEffect(()=>{if(shouldAnimate){setAnimatedMessages(prev=>new Set([...prev,index]));}},[shouldAnimate,index]);if(!enableAnimations){return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,role:\"listitem\",children:/*#__PURE__*/_jsx(\"div\",{style:bubbleStyle,children:message.text})});}return /*#__PURE__*/_jsx(motion.div,{variants:shouldAnimate?bubbleVariants:undefined,initial:shouldAnimate?\"hidden\":undefined,animate:shouldAnimate?\"visible\":undefined,style:containerStyle,layout:true,role:\"listitem\",children:/*#__PURE__*/_jsx(\"div\",{style:bubbleStyle,children:message.text})},index);};const TypingIndicator=()=>{const typingStyle={display:\"flex\",alignItems:\"center\",gap:\"8px\",padding:\"8px 12px\",backgroundColor:typingSender===\"user\"?userBubbleColor:otherBubbleColor,borderRadius:typingSender===\"user\"?\"18px 18px 4px 18px\":\"18px 18px 18px 4px\",maxWidth:\"60px\",alignSelf:typingSender===\"user\"?\"flex-end\":\"flex-start\",position:\"relative\",zIndex:1,marginBottom:\"2px\"};if(!enableAnimations){return /*#__PURE__*/_jsx(\"div\",{style:typingStyle,\"aria-label\":\"Typing indicator\",children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",gap:\"3px\"},children:[0,1,2].map(dot=>/*#__PURE__*/_jsx(\"div\",{style:{width:\"6px\",height:\"6px\",borderRadius:\"50%\",backgroundColor:typingSender===\"user\"?userTextColor:\"#8E8E93\"}},dot))})});}return /*#__PURE__*/_jsx(motion.div,{variants:typingVariants,initial:\"hidden\",animate:\"visible\",exit:\"exit\",style:typingStyle,layout:true,\"aria-label\":\"Typing indicator\",children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",gap:\"3px\"},children:[0,1,2].map(dot=>/*#__PURE__*/_jsx(motion.div,{style:{width:\"6px\",height:\"6px\",borderRadius:\"50%\",backgroundColor:typingSender===\"user\"?userTextColor:\"#8E8E93\"},animate:{scale:[1,1.2,1],opacity:[.5,1,.5]},transition:{duration:1,repeat:Infinity,delay:dot*.2}},dot))})});};// Validate messages array\nconst validMessages=Array.isArray(messages)?messages.filter(msg=>msg&&typeof msg.text===\"string\"&&(msg.sender===\"user\"||msg.sender===\"other\")):[];return /*#__PURE__*/_jsxs(\"div\",{ref:chatContainerRef,style:containerStyle,role:\"log\",\"aria-label\":\"Chat conversation\",\"aria-live\":\"polite\",children:[showContactHeader&&/*#__PURE__*/_jsx(\"header\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",gap:\"8px\",paddingBottom:\"8px\",marginBottom:\"8px\",position:\"relative\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",alignItems:\"center\",gap:\"8px\"},children:[/*#__PURE__*/_jsx(\"img\",{src:contactAvatar?.src||\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:contactAvatar?.alt||\"Contact Avatar\",style:{width:\"32px\",height:\"32px\",borderRadius:\"50%\",objectFit:\"cover\"},onError:e=>{const target=e.target;target.src=\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\";}}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:\"16px\",fontWeight:\"600\",color:\"#000000\",textAlign:\"center\",...contactHeaderFont},children:contactName||\"Contact\"})]})}),showContactHeader&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"1px\",backgroundColor:dividerColor,marginBottom:\"12px\"}}),/*#__PURE__*/_jsxs(\"div\",{role:\"list\",style:{display:\"flex\",flexDirection:\"column\",gap:`${Math.max(4,bubbleSpacing)}px`},children:[enableAnimations?/*#__PURE__*/_jsx(AnimatePresence,{children:validMessages.slice(0,visibleMessages).map((message,index)=>/*#__PURE__*/_jsx(MessageBubble,{message:message,index:index},index))}):validMessages.map((message,index)=>/*#__PURE__*/_jsx(MessageBubble,{message:message,index:index},index)),!isStatic&&enableAnimations&&autoPlay&&showTyping&&/*#__PURE__*/_jsx(AnimatePresence,{mode:\"wait\",children:/*#__PURE__*/_jsx(TypingIndicator,{})})]})]});}addPropertyControls(MessageChat,{showContactHeader:{type:ControlType.Boolean,title:\"Show Contact Header\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},contactName:{type:ControlType.String,title:\"Contact Name\",defaultValue:\"John Doe\",hidden:({showContactHeader})=>!showContactHeader},contactAvatar:{type:ControlType.ResponsiveImage,title:\"Contact Avatar\",hidden:({showContactHeader})=>!showContactHeader},contactHeaderFont:{type:ControlType.Font,title:\"Contact Header Font\",defaultValue:{fontSize:\"17px\",variant:\"Semibold\",letterSpacing:\"-0.01em\",lineHeight:\"1em\"},controls:\"extended\",defaultFontType:\"sans-serif\",hidden:({showContactHeader})=>!showContactHeader},dividerColor:{type:ControlType.Color,title:\"Divider Color\",defaultValue:\"#E5E5EA\",hidden:({showContactHeader})=>!showContactHeader},messages:{type:ControlType.Array,title:\"Messages\",control:{type:ControlType.Object,controls:{text:{type:ControlType.String,title:\"Message\",defaultValue:\"Hello there!\",displayTextArea:true},sender:{type:ControlType.Enum,title:\"Sender\",options:[\"user\",\"other\"],optionTitles:[\"You\",\"Other\"],defaultValue:\"other\",displaySegmentedControl:true}}},defaultValue:[{text:\"Hey! This component is now ready for Framer! 🎉\",sender:\"other\"},{text:\"That's amazing! What can it do?\",sender:\"user\"},{text:\"It's a fully animated message-style chat component with smooth typing indicators, bubble animations, and auto-scroll functionality. Perfect for showcasing conversations, testimonials, or interactive demos in your Framer projects!\",sender:\"other\"},{text:\"Wow, that sounds incredibly useful! Can I customize it?\",sender:\"user\"},{text:\"Absolutely! You can customize bubble colors, fonts, animation timing, contact headers with profile pictures, and even toggle animations on/off. It's designed to be flexible for any use case you have in mind.\",sender:\"other\"},{text:\"This is exactly what I needed for my project! How smooth are the animations?\",sender:\"user\"},{text:\"The animations are buttery smooth with Apple-like spring physics! Messages slide in from the bottom, typing indicators appear before each message, and everything auto-scrolls to keep the newest content visible. It feels just like a real messaging app.\",sender:\"other\"},{text:\"Perfect! I can't wait to use this in my Framer designs 🚀\",sender:\"user\"}],maxCount:20},enableAnimations:{type:ControlType.Boolean,title:\"Enable Animations\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},autoPlay:{type:ControlType.Boolean,title:\"Auto Play\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:({enableAnimations})=>!enableAnimations},animationDelay:{type:ControlType.Number,title:\"Animation Delay\",defaultValue:1e3,min:200,max:5e3,step:100,unit:\"ms\",hidden:({autoPlay,enableAnimations})=>!autoPlay||!enableAnimations},userBubbleColor:{type:ControlType.Color,title:\"Your Bubble Color\",defaultValue:\"#007AFF\"},otherBubbleColor:{type:ControlType.Color,title:\"Other Bubble Color\",defaultValue:\"#E5E5EA\"},userTextColor:{type:ControlType.Color,title:\"Your Text Color\",defaultValue:\"#FFFFFF\"},otherTextColor:{type:ControlType.Color,title:\"Other Text Color\",defaultValue:\"#000000\"},backgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"#FFFFFF\"},bubbleFont:{type:ControlType.Font,title:\"Bubble Font\",defaultValue:{fontSize:\"16px\",variant:\"Regular\",letterSpacing:\"-0.01em\",lineHeight:\"1.3em\"},controls:\"extended\",defaultFontType:\"sans-serif\"},chatPadding:{type:ControlType.Number,title:\"Chat Padding\",defaultValue:20,min:8,max:40,step:2,unit:\"px\"},bubbleSpacing:{type:ControlType.Number,title:\"Bubble Spacing\",defaultValue:12,min:4,max:24,step:2,unit:\"px\"},maxBubbleWidth:{type:ControlType.Number,title:\"Max Bubble Width\",defaultValue:80,min:50,max:95,step:5,unit:\"%\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MessageChat\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"375\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"667\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MessageChat.map"],"mappings":"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"}