{"version":3,"file":"UserInteraction.CvrFTVKY.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/w06sksnu5f5AorDAfm2I/7dTC67qrfRugKuYVX8cg/UserInteraction.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{ControlType,addPropertyControls}from\"framer\";import{useEffect,useRef,cloneElement,useState,useInsertionEffect}from\"react\";import{useInView}from\"framer-motion\";// ------------------------------------------------------------ //\n// INTERACTION MANAGER CLASS (Exported)\n// ------------------------------------------------------------ //\nclass InteractionManager{static getInstance(){if(!InteractionManager.instance){InteractionManager.instance=new InteractionManager;}return InteractionManager.instance;}addListener(id,listener){if(!this.listeners[id]){this.listeners[id]=[];}const wrappedListener=()=>{if(InteractionManager.instanceId===this.getCurrentInstanceId()){listener();}};this.listeners[id].push(wrappedListener);}removeListener(id,listener){if(!this.listeners[id])return;this.listeners[id]=this.listeners[id].filter(l=>l!==listener);if(this.listeners[id].length===0){delete this.listeners[id];}}clearAllListeners(){this.listeners={};InteractionManager.instanceId=Math.random().toString(36).substring(7);}getCurrentInstanceId(){return InteractionManager.instanceId;}trigger(id){if(!this.listeners[id])return;this.listeners[id].forEach(listener=>listener());}static clearPreviewOnce(){if(!InteractionManager.isPreviewCleared){InteractionManager.getInstance().clearAllListeners();InteractionManager.isPreviewCleared=true;}}constructor(){this.listeners={};if(typeof window!==\"undefined\"){window.addEventListener(\"unload\",()=>{this.clearAllListeners();});}}}// Static properties\nInteractionManager.instance=undefined;InteractionManager.instanceId=Math.random().toString(36).substring(7);InteractionManager.isPreviewCleared=false;// ------------------------------------------------------------ //\n// HELPER FUNCTIONS (Exported for reuse)\n// ------------------------------------------------------------ //\nconst isReactElement=el=>{return el&&typeof el===\"object\"&&\"props\"in el;};/**\n * 递归克隆一个 React element,在沿途遇到的\"消费 variant 的层\"上注入新的 variant、\n * 同时按 componentWidth/componentHeight 设置外层尺寸。\n *\n * 用途:在 Framer 中,设计师传入的 ComponentInstance 经常是包过一层 motion 容器\n * 的嵌套结构。直接 cloneElement 顶层并不会让真正持有 variant prop 的内层组件\n * 切换 variant。这里通过递归穿透嵌套,找到第一层带 variant prop 的元素并注入。\n *\n * 参数:\n * - element: 要克隆的元素(通常是 props.nativeComponent[0])\n * - targetVariant: 目标 variant 名(必须和设计师组件 propertyControls 里的\n *   options 完全一致)\n * - componentWidth: \"fill\" 强制 100%,其他值保留元素自身宽度\n * - componentHeight: 同上\n */const cloneWithVariant=(element,targetVariant,componentWidth,componentHeight)=>{if(!isReactElement(element)){return element;}const hasVariantProp=element.props&&\"variant\"in element.props;if(hasVariantProp){const newProps={...element.props,variant:targetVariant,style:{...element.props.style,width:componentWidth===\"fill\"?\"100%\":element.props.width,height:componentHeight===\"fill\"?\"100%\":element.props.height}};if(element.props.children){newProps.children=cloneWithVariant(element.props.children,targetVariant,componentWidth,componentHeight);}return /*#__PURE__*/cloneElement(element,newProps);}if(element.props?.children){return /*#__PURE__*/cloneElement(element,{...element.props,style:{...element.props.style,width:componentWidth===\"fill\"?\"100%\":element.props.width,height:componentHeight===\"fill\"?\"100%\":element.props.height},children:cloneWithVariant(element.props.children,targetVariant,componentWidth,componentHeight)});}return element;};/**\n * 递归查找设计师组件的 variant property control 定义。\n *\n * 当外部代码想知道\"这个 ComponentInstance 支持哪些 variant\"时调用。\n * 返回值是 propertyControls.variant 对象,包含 options 和 optionTitles。\n * 找不到返回 null。\n */const findVariantControl=element=>{if(!element)return null;if(element.type?.propertyControls?.variant?.options&&element.type?.propertyControls?.variant?.optionTitles){return element.type.propertyControls.variant;}if(element.props?.children){return findVariantControl(element.props.children);}return null;};// @plugin-hidden\n// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\n/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n * @framerDisableUnlink\n */export default function InteractionUnit(props){const containerRef=useRef(null);const isInView=useInView(containerRef,{once:false,amount:\"some\"});const offScreenIsInView=props.offScreen===\"pause\"?isInView:true;// Generate unique instance ID\nconst instanceIdRef=useRef(`unit-${Math.random().toString(36).substring(2,11)}`);const instanceId=instanceIdRef.current;// Trigger logic - trigger itself when interacted\nuseTrigger({containerRef:containerRef,instanceId:instanceId,interaction:props.interaction,isInView:offScreenIsInView,delay:props.delay});// Target logic - listen to its own trigger\nconst clonedContent=useTarget(props.nativeComponent,instanceId,props.interactionVariants,props.componentWidth,props.componentHeight);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:props.componentWidth===\"default\"?\"fit-content\":\"100%\",height:props.componentHeight===\"default\"?\"fit-content\":\"100%\",display:\"flex\"},children:clonedContent})});}// ------------------------------------------------------------ //\n// CUSTOM HOOKS\n// ------------------------------------------------------------ //\nconst useTrigger=props=>{useEffect(()=>{if(!props.containerRef.current)return;const subparent=props.containerRef.current.parentElement;const parent=subparent?.parentElement;if(!parent)return;// Handle \"appear\" interaction\nif(props.interaction===\"appear\"){if(props.isInView){setTimeout(()=>{InteractionManager.getInstance().trigger(props.instanceId);},props.delay*1e3);}return;}// Handle \"click\" interaction\nconst handleClick=()=>{setTimeout(()=>{InteractionManager.getInstance().trigger(props.instanceId);},props.delay*1e3);};parent.addEventListener(\"click\",handleClick);return()=>{parent.removeEventListener(\"click\",handleClick);};},[props.instanceId,props.interaction,props.isInView,props.containerRef,props.delay]);};const useTarget=(nativeComponent,instanceId,interactionVariants,componentWidth,componentHeight)=>{const[clonedContent,setClonedContent]=useState(nativeComponent);const cycleStateRef=useRef({});const lastUpdateTimeRef=useRef({});const DEBOUNCE_TIME=50;// Clear interaction manager on mount in preview mode\nuseEffect(()=>{if(typeof window!==\"undefined\"&&window.location.href.includes(\"framercanvas.com\")){InteractionManager.clearPreviewOnce();}},[]);// Initialize size and variants\nuseInsertionEffect(()=>{if(!nativeComponent||!nativeComponent.length)return;const sizeAdjustedContent=nativeComponent.map(component=>{if(!isReactElement(component))return component;return /*#__PURE__*/cloneElement(component,{style:{...component.props.style,width:componentWidth===\"fill\"?\"100%\":component.props.width,height:componentHeight===\"fill\"?\"100%\":component.props.height}});});setClonedContent(sizeAdjustedContent);},[nativeComponent,componentWidth,componentHeight]);// Extract variants and initialize cycles\nuseEffect(()=>{if(!nativeComponent||!nativeComponent.length)return;const variantControl=findVariantControl(nativeComponent[0]);if(!variantControl)return;const{options}=variantControl;const getDefaultVariant=component=>{if(!component)return undefined;if(component.props?.variant)return component.props.variant;if(component.props?.children)return getDefaultVariant(component.props.children);return undefined;};const defaultVariant=getDefaultVariant(nativeComponent[0]);// Initialize cycle state\nconst newVariantCycles={};interactionVariants.forEach(pair=>{if(pair.repeat===\"cycle\"){const startIndex=defaultVariant?options.indexOf(defaultVariant):0;newVariantCycles[instanceId]={currentIndex:startIndex>=0?startIndex:0,variants:options};}});cycleStateRef.current=newVariantCycles;},[nativeComponent,interactionVariants,instanceId,componentWidth,componentHeight]);// Handle variant changes\nuseEffect(()=>{if(!instanceId||!nativeComponent||!nativeComponent.length)return;const handleVariantChange=()=>{const now=Date.now();const lastUpdate=lastUpdateTimeRef.current[instanceId]||0;if(now-lastUpdate<DEBOUNCE_TIME){return;}lastUpdateTimeRef.current[instanceId]=now;const matchingPair=interactionVariants[0];if(!matchingPair)return;const sizeAdjustedContent=nativeComponent.map(component=>{if(!isReactElement(component))return component;return /*#__PURE__*/cloneElement(component,{style:{...component.props.style,width:componentWidth===\"fill\"?\"100%\":component.props.width,height:componentHeight===\"fill\"?\"100%\":component.props.height}});});if(matchingPair.repeat===\"cycle\"){const cycle=cycleStateRef.current[instanceId];if(!cycle||!cycle.variants||cycle.variants.length===0){return;}const nextIndex=(cycle.currentIndex+1)%cycle.variants.length;const nextVariant=cycle.variants[nextIndex];const newContent=sizeAdjustedContent.map(component=>cloneWithVariant(component,nextVariant,componentWidth,componentHeight));setClonedContent(newContent);cycleStateRef.current={...cycleStateRef.current,[instanceId]:{...cycle,currentIndex:nextIndex}};}else{const newContent=sizeAdjustedContent.map(component=>cloneWithVariant(component,matchingPair.variant,componentWidth,componentHeight));setClonedContent(newContent);}};const manager=InteractionManager.getInstance();manager.addListener(instanceId,handleVariantChange);return()=>{manager.removeListener(instanceId,handleVariantChange);};},[nativeComponent,interactionVariants,instanceId,componentWidth,componentHeight]);return clonedContent;};// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\naddPropertyControls(InteractionUnit,{nativeComponent:{type:ControlType.ComponentInstance,title:\"Component\"},interaction:{type:ControlType.Enum,title:\"Trigger\",options:[\"click\",\"appear\"],optionTitles:[\"Click\",\"Appear\"],defaultValue:\"click\"},offScreen:{type:ControlType.Enum,title:\"Off Screen\",options:[\"play\",\"pause\"],optionTitles:[\"Play\",\"Pause\"],defaultValue:\"pause\",displaySegmentedControl:true,hidden:props=>props.interaction!==\"appear\"},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:10,step:.1,unit:\"s\",displayStepper:true},componentWidth:{type:ControlType.Enum,title:\"Width\",options:[\"default\",\"fill\"],optionTitles:[\"Default\",\"Fill\"],defaultValue:\"default\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},componentHeight:{type:ControlType.Enum,title:\"Height\",options:[\"default\",\"fill\"],optionTitles:[\"Default\",\"Fill\"],defaultValue:\"default\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},interactionVariants:{type:ControlType.Array,title:\"Variants\",control:{type:ControlType.Object,controls:{repeat:{type:ControlType.Enum,title:\"Repeat\",options:[\"once\",\"cycle\"],optionTitles:[\"Once\",\"Cycle\"],defaultValue:\"once\",displaySegmentedControl:true},variant:{type:ControlType.String,title:\"Variant\",placeholder:\"Variant 2\",hidden:props=>props.repeat===\"cycle\",description:\"Exact name of the variant to switch to\"}}},defaultValue:[{variant:\"\",repeat:\"once\"}]}});// ------------------------------------------------------------ //\n// DEFAULT PROPS\n// ------------------------------------------------------------ //\nInteractionUnit.defaultProps={nativeComponent:null,interaction:\"click\",offScreen:\"pause\",delay:0,componentWidth:\"default\",componentHeight:\"default\",interactionVariants:[{variant:\"\",repeat:\"once\"}]};InteractionUnit.displayName=\"InteractionUnit\";export{cloneWithVariant,findVariantControl,InteractionManager};\nexport const __FramerMetadata__ = {\"exports\":{\"InteractionManager\":{\"type\":\"class\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"findVariantControl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"InteractionUnit\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerDisableUnlink\":\"\",\"framerIntrinsicWidth\":\"400\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\"}},\"cloneWithVariant\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./UserInteraction.map"],"mappings":"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"}