{"version":3,"file":"TextReveal.CGIOTmLR.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/1TzyURRjS15FpRiaioQn/0mKRjeiSAtkzK8X6ggIU/TextReveal.js"],"sourcesContent":["// Text Reveal component with line-by-line animation, Framer property controls, and robust defaults\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";import{useState,useEffect,useRef,startTransition}from\"react\";/**\n * Text Reveal\n * Reveals text line by line with animation. Supports appear/inView triggers and replay.\n *\n * @framerIntrinsicWidth 400\n *\n * @framerDisableUnlink\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */export default function TextReveal(props){const{text,font,textColor,style,animation,tag}=props;const{trigger,replay,yOffset,delay=0,transition}=animation;const{userSelect=\"none\",textIndent=0,verticalGap=0}=props;const containerRef=useRef(null);const[lines,setLines]=useState([]);// For per-line inView detection\nconst lineRefs=useRef([]);const[linesInView,setLinesInView]=useState([]);// Per-line inView detection\nuseEffect(()=>{if(trigger!==\"inView\")return;if(!lines.length)return;if(RenderTarget.current()===RenderTarget.canvas)return;let observers=[];const newLinesInView=Array(lines.length).fill(false);lines.forEach((_,i)=>{const ref=lineRefs.current[i];if(!ref)return;const observer=new window.IntersectionObserver(([entry])=>{if(entry.isIntersecting){newLinesInView[i]=true;startTransition(()=>setLinesInView([...newLinesInView]));if(replay===\"no\")observer.disconnect();}else if(replay===\"yes\"){newLinesInView[i]=false;startTransition(()=>setLinesInView([...newLinesInView]));}},{threshold:.1});observer.observe(ref);observers.push(observer);});return()=>{observers.forEach(o=>o.disconnect());};},[lines,trigger,replay]);useEffect(()=>{const isFixedWidth=style&&style.width===\"100%\";const userLines=text.split(\"\\n\");if(!isFixedWidth){startTransition(()=>setLines(userLines));return;}if(typeof window===\"undefined\"||!containerRef.current)return;// Polyfill ResizeObserver for SSR safety\nconst ResizeObs=window.ResizeObserver||class{observe(){}disconnect(){}};const detectLines=()=>{const container=containerRef.current;if(!container)return;const allDetectedLines=[];userLines.forEach(userLine=>{const wordsArr=userLine.split(\" \");const tempSpan=document.createElement(\"span\");tempSpan.style.visibility=\"hidden\";tempSpan.style.position=\"absolute\";tempSpan.style.whiteSpace=\"nowrap\";tempSpan.style.width=\"auto\";Object.assign(tempSpan.style,font);container.appendChild(tempSpan);const containerWidth=container.offsetWidth;const detectedLines=[];let currentLine=[];let currentWidth=0;let isFirstLine=true;let availableWidth=containerWidth;if(textIndent&&textIndent>0)availableWidth=containerWidth-textIndent;wordsArr.forEach(word=>{tempSpan.textContent=word;const wordWidth=tempSpan.offsetWidth;if(currentWidth+wordWidth<=availableWidth){currentLine.push(word);currentWidth+=wordWidth+tempSpan.offsetWidth*.25// Space width approximation\n;}else{if(currentLine.length>0){detectedLines.push(currentLine.join(\" \"));}currentLine=[word];currentWidth=wordWidth;isFirstLine=false;availableWidth=containerWidth// reset to full width for subsequent lines\n;}});if(currentLine.length>0){detectedLines.push(currentLine.join(\" \"));}container.removeChild(tempSpan);allDetectedLines.push(...detectedLines);});startTransition(()=>{setLines(allDetectedLines);});};const resizeObserver=new ResizeObs(detectLines);resizeObserver.observe(containerRef.current);detectLines();return()=>resizeObserver.disconnect();},[text,font,style]);const getLineTransition=index=>{// Use transition.delay as the step between lines\nconst step=transition&&typeof transition.delay===\"number\"?transition.delay:.05;const globalDelay=typeof delay===\"number\"?delay:0;let lineDelay=0;if(trigger===\"appear\"||trigger===\"inView\"){lineDelay=globalDelay+(index===0?0:index*step);}// Remove any delay from transition to avoid conflicts\nconst{delay:_removed,...restTransition}=transition||{};return{...restTransition,delay:lineDelay};};const isFixedWidth=style&&style.width===\"100%\";const Tag=tag;// Fallback: always show text as a single line in canvas/thumbnail if lines is empty\n// Reset lineRefs length to match lines\nuseEffect(()=>{if(lineRefs.current.length!==lines.length){lineRefs.current=Array(lines.length).fill(null);}},[lines.length]);const displayLines=RenderTarget.current()===RenderTarget.canvas||RenderTarget.current()===RenderTarget.thumbnail?lines.length>0?lines:[text]:lines;const isStatic=RenderTarget.current()===RenderTarget.canvas||RenderTarget.current()===RenderTarget.thumbnail;return /*#__PURE__*/_jsx(motion.div,{ref:containerRef,style:{position:\"relative\",...isFixedWidth?{...style}:{minWidth:\"max-content\"},...font,color:textColor,userSelect},children:/*#__PURE__*/_jsx(Tag,{style:{margin:0,padding:0,fontSize:\"inherit\",fontWeight:\"inherit\"},children:displayLines.map((line,i)=>{const shouldAnimate=isStatic?true:trigger===\"inView\"?linesInView[i]:true;return /*#__PURE__*/_jsx(\"span\",{ref:el=>lineRefs.current[i]=el,style:{display:\"block\",overflow:\"hidden\",margin:0,padding:0,textIndent:i===0&&textIndent?`${textIndent}px`:undefined,marginTop:i===0?undefined:`${verticalGap}px`},children:/*#__PURE__*/_jsx(motion.span,{style:{display:\"block\"},initial:isStatic?{y:0}:{y:yOffset+\"%\"},animate:shouldAnimate?{y:0}:{y:yOffset+\"%\"},transition:getLineTransition(i),children:line})},i);})})});}TextReveal.displayName=\"DBP Text Reveal\";addPropertyControls(TextReveal,{tag:{type:ControlType.Enum,title:\"Tag\",options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"],defaultValue:\"p\",displaySegmentedControl:true},text:{type:ControlType.String,title:\"Text\",defaultValue:\"The quick brown fox jumps over the lazy dog.\",displayTextArea:true},font:{type:ControlType.Font,controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:40,lineHeight:1.25,letterSpacing:0,textAlign:\"left\"}},textColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},textIndent:{type:ControlType.Number,title:\"Indent\",defaultValue:0,min:0,max:500,step:10,displayStepper:true},verticalGap:{type:ControlType.Number,title:\"Gap\",defaultValue:0,min:-40,max:40,step:4,displayStepper:true},userSelect:{type:ControlType.Enum,title:\"Select\",options:[\"none\",\"auto\"],optionTitles:[\"None\",\"Auto\"],defaultValue:\"auto\",displaySegmentedControl:false},animation:{type:ControlType.Object,title:\"Animation\",description:\"Component Built and [Designed by Paul](https://shop.designedbypaul.com)\",controls:{trigger:{type:ControlType.Enum,title:\"Trigger\",options:[\"appear\",\"inView\"],optionTitles:[\"On Appear\",\"Layer in View\"],defaultValue:\"inView\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},replay:{type:ControlType.Enum,title:\"Replay\",options:[\"yes\",\"no\"],optionTitles:[\"Yes\",\"No\"],defaultValue:\"yes\",displaySegmentedControl:true,hidden:({trigger})=>trigger!==\"inView\"},yOffset:{type:ControlType.Number,title:\"Y Offset\",defaultValue:100,min:-200,max:200,unit:\"%\",step:10},transition:{type:ControlType.Transition,title:\"Transition\",defaultValue:{type:\"spring\",duration:1,bounce:0,delay:.1}},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.1,unit:\"s\",displayStepper:true}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextReveal\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"400\",\"framerDisableUnlink\":\"*\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextReveal.map"],"mappings":"2PAWG,SAAwB,EAAW,EAAM,CAAC,GAAK,CAAC,OAAK,OAAK,YAAU,QAAM,YAAU,OAAK,EAAW,CAAC,UAAQ,SAAO,UAAQ,QAAM,EAAE,cAAY,EAAe,CAAC,aAAW,OAAO,aAAW,EAAE,cAAY,GAAG,EAAY,EAAaA,EAAO,IAAI,EAAO,CAAC,EAAM,GAAUC,EAAS,CAAC,CAAC,EAClR,EAASD,EAAO,CAAC,CAAC,EAAO,CAAC,EAAY,GAAgBC,EAAS,CAAC,CAAC,EACvE,MAAc,CAAsD,GAAlD,IAAU,UAAmB,CAAC,EAAM,QAAiB,EAAa,QAAQ,IAAI,EAAa,OAAO,OAAO,IAAI,EAAU,CAAC,EAAQ,EAAe,MAAM,EAAM,MAAM,CAAC,CAAC,KAAK,EAAK,EAA+b,OAA7b,EAAM,SAAS,EAAE,IAAI,CAAC,IAAM,EAAI,EAAS,QAAQ,GAAG,GAAG,CAAC,EAAI,OAAO,IAAM,EAAS,IAAI,EAAO,sBAAsB,CAAC,KAAS,CAAI,EAAM,gBAAgB,EAAe,GAAG,GAAK,MAAoB,EAAe,CAAC,GAAG,CAAc,CAAC,CAAC,EAAK,IAAS,MAAK,EAAS,WAAW,GAAW,IAAS,QAAO,EAAe,GAAG,GAAM,MAAoB,EAAe,CAAC,GAAG,CAAc,CAAC,CAAC,EAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,EAAS,QAAQ,CAAG,EAAE,EAAU,KAAK,CAAQ,CAAE,CAAC,MAAY,CAAC,EAAU,QAAQ,GAAG,EAAE,WAAW,CAAC,CAAE,CAAE,EAAE,CAAC,EAAM,EAAQ,CAAM,CAAC,EAAE,MAAc,CAAC,IAAM,EAAa,GAAO,EAAM,QAAQ,OAAa,EAAU,EAAK,MAAM;CAAI,EAAE,GAAG,CAAC,EAAa,CAAC,MAAoB,EAAS,CAAS,CAAC,EAAE,MAAO,CAAC,GAAU,IAAS,QAAa,CAAC,EAAa,QAAQ,OACl6B,IAAM,EAAU,EAAO,gBAAgB,KAAK,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,EAAQ,MAAgB,CAAC,IAAM,EAAU,EAAa,QAAQ,GAAG,CAAC,EAAU,OAAO,IAAM,EAAiB,CAAC,EAAE,EAAU,QAAQ,GAAU,CAAC,IAAM,EAAS,EAAS,MAAM,GAAG,EAAQ,EAAS,SAAS,cAAc,MAAM,EAAE,EAAS,MAAM,WAAW,SAAS,EAAS,MAAM,SAAS,WAAW,EAAS,MAAM,WAAW,SAAS,EAAS,MAAM,MAAM,OAAO,OAAO,OAAO,EAAS,MAAM,CAAI,EAAE,EAAU,YAAY,CAAQ,EAAE,IAAM,EAAe,EAAU,YAAkB,EAAc,CAAC,EAAM,EAAY,CAAC,EAAM,EAAa,EAA2B,EAAe,EAAkB,GAAY,EAAW,IAAE,EAAe,EAAe,GAAW,EAAS,QAAQ,GAAM,CAAC,EAAS,YAAY,EAAK,IAAM,EAAU,EAAS,YAAe,EAAa,GAAW,GAAgB,EAAY,KAAK,CAAI,EAAE,GAAc,EAAU,EAAS,YAAY,MACz4B,EAAY,OAAO,GAAG,EAAc,KAAK,EAAY,KAAK,GAAG,CAAC,EAAG,EAAY,CAAC,CAAI,EAAE,EAAa,EAA4B,EAAe,EACpJ,CAAC,EAAK,EAAY,OAAO,GAAG,EAAc,KAAK,EAAY,KAAK,GAAG,CAAC,EAAG,EAAU,YAAY,CAAQ,EAAE,EAAiB,KAAK,GAAG,CAAa,CAAE,CAAC,EAAE,MAAoB,CAAC,EAAS,CAAgB,CAAE,CAAC,CAAE,EAAQ,EAAe,IAAI,EAAU,CAAW,EAA6D,OAA3D,EAAe,QAAQ,EAAa,OAAO,EAAE,EAAY,MAAY,EAAe,WAAW,CAAE,EAAE,CAAC,EAAK,EAAK,CAAK,CAAC,EAAE,IAAM,EAAkB,GAAO,CAC9Y,IAAM,EAAK,GAAY,OAAO,EAAW,OAAQ,SAAS,EAAW,MAAM,IAAU,EAAY,OAAO,GAAQ,SAAS,EAAM,EAAM,EAAU,GAAK,IAAU,UAAU,IAAU,YAAU,EAAU,GAAa,IAAQ,EAAE,EAAE,EAAM,IACrO,GAAK,CAAC,MAAM,EAAS,GAAG,GAAgB,GAAY,CAAC,EAAE,MAAM,CAAC,GAAG,EAAe,MAAM,CAAS,CAAE,EAAQ,EAAa,GAAO,EAAM,QAAQ,OAAa,EAAI,EAE5J,MAAc,CAAI,EAAS,QAAQ,SAAS,EAAM,SAAQ,EAAS,QAAQ,MAAM,EAAM,MAAM,CAAC,CAAC,KAAK,IAAI,EAAG,EAAE,CAAC,EAAM,MAAM,CAAC,EAAE,IAAM,EAAa,EAAa,QAAQ,IAAI,EAAa,QAAQ,EAAa,QAAQ,IAAI,EAAa,UAAU,EAAM,OAAO,EAAE,EAAM,CAAC,CAAI,EAAE,EAAY,EAAS,EAAa,QAAQ,IAAI,EAAa,QAAQ,EAAa,QAAQ,IAAI,EAAa,UAAU,OAAoB,EAAK,EAAO,IAAI,CAAC,IAAI,EAAa,MAAM,CAAC,SAAS,WAAW,GAAG,EAAa,CAAC,GAAG,CAAK,EAAE,CAAC,SAAS,aAAa,EAAE,GAAG,EAAK,MAAM,EAAU,YAAU,EAAE,SAAsB,EAAK,EAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,UAAU,WAAW,SAAS,EAAE,SAAS,EAAa,KAAK,EAAK,IAAI,CAAC,IAAM,EAAc,EAAS,GAAK,IAAU,UAAS,EAAY,GAAQ,OAAoB,EAAK,OAAO,CAAC,IAAI,GAAI,EAAS,QAAQ,GAAG,EAAG,MAAM,CAAC,QAAQ,QAAQ,SAAS,SAAS,OAAO,EAAE,QAAQ,EAAE,WAAW,IAAI,GAAG,EAAW,GAAG,EAAW,IAAI,IAAA,GAAU,UAAU,IAAI,EAAE,IAAA,GAAU,GAAG,EAAY,GAAG,EAAE,SAAsB,EAAK,EAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,OAAO,EAAE,QAAQ,EAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAQ,GAAG,EAAE,QAAQ,EAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAQ,GAAG,EAAE,WAAW,EAAkB,CAAC,EAAE,SAAS,CAAI,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,qBAnB9nC,IAAiE,IAAkC,IAA6D,EAmB+9B,EAAW,YAAY,kBAAkB,EAAoB,EAAW,CAAC,IAAI,CAAC,KAAK,EAAY,KAAK,MAAM,MAAM,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,aAAa,IAAI,wBAAwB,EAAI,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,+CAA+C,gBAAgB,EAAI,EAAE,KAAK,CAAC,KAAK,EAAY,KAAK,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,GAAG,WAAW,KAAK,cAAc,EAAE,UAAU,MAAM,CAAC,EAAE,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG,eAAe,EAAI,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,MAAM,aAAa,EAAE,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,eAAe,EAAI,EAAE,WAAW,CAAC,KAAK,EAAY,KAAK,MAAM,SAAS,QAAQ,CAAC,OAAO,MAAM,EAAE,aAAa,CAAC,OAAO,MAAM,EAAE,aAAa,OAAO,wBAAwB,EAAK,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,YAAY,0EAA0E,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAY,KAAK,MAAM,UAAU,QAAQ,CAAC,SAAS,QAAQ,EAAE,aAAa,CAAC,YAAY,eAAe,EAAE,aAAa,SAAS,wBAAwB,GAAK,0BAA0B,UAAU,EAAE,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,SAAS,QAAQ,CAAC,MAAM,IAAI,EAAE,aAAa,CAAC,MAAM,IAAI,EAAE,aAAa,MAAM,wBAAwB,GAAK,QAAQ,CAAC,aAAW,IAAU,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,EAAE,EAAE,WAAW,CAAC,KAAK,EAAY,WAAW,MAAM,aAAa,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,IAAI,eAAe,EAAI,CAAC,CAAC,CAAC,CAAC"}