{"version":3,"file":"CustomLogoRenderer.BcdTO0sf.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/hxEb9fzCoq15DWSYBImb/p5Rpqdf5G5oz2k5Zyn7f/FrameHoverReveal_Prod.js","https:/framerusercontent.com/modules/SsT9j29SCFSPH34fz0IC/B10hF0cfllLm1zmcCg7j/CustomLogoRenderer.js"],"sourcesContent":["// Interactive Frame with hover-reveal opacity effect\n// Behaves like a native Framer Frame, with fill, border, shadow, radius, and interactive opacity mask\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useState,useEffect,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";// Global hover state\nlet globalHover={hovered:false,x:0,y:0,listeners:new Set};function notifyGlobalHover(){for(const fn of globalHover.listeners)typeof fn===\"function\"&&fn(globalHover);}function subscribeGlobalHover(fn){globalHover.listeners.add(fn);return()=>globalHover.listeners.delete(fn);}// Use a symbol to avoid polluting window with a string property\nconst FRAMER_FRAME_REVEAL_LISTENER=Symbol.for(\"__framerFrameRevealGlobalListener\");if(typeof window!==\"undefined\"&&!window[FRAMER_FRAME_REVEAL_LISTENER]){window[FRAMER_FRAME_REVEAL_LISTENER]=true;window.addEventListener(\"mousemove\",e=>{globalHover.hovered=true;globalHover.x=e.clientX;globalHover.y=e.clientY;notifyGlobalHover();});window.addEventListener(\"mouseout\",e=>{globalHover.hovered=false;notifyGlobalHover();});}/**\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n * @framerDisableUnlink\n */function FrameReveal(props){const{fill,border,borderWidth,borderColor,borderStyle,shadow,borderRadius,baseOpacity,hoverOpacity,range,style,children}=props;const ref=useRef(null);const[localHover,setLocalHover]=useState({hovered:false,x:0,y:0});const isStatic=useIsStaticRenderer();// Subscribe to global hover\nuseEffect(()=>{if(isStatic)return;function update(global){if(!ref.current)return;const rect=ref.current.getBoundingClientRect();// Check if the global cursor is within the reveal range of this frame\nconst cx=global.x-rect.left;const cy=global.y-rect.top;const inside=global.x>=rect.left&&global.x<=rect.right&&global.y>=rect.top&&global.y<=rect.bottom;// If cursor is within the reveal range of this frame, set hovered true\n// But we want the mask to appear even if the cursor is NEAR the frame (within range)\nconst distX=Math.max(0,rect.left-global.x,global.x-rect.right);const distY=Math.max(0,rect.top-global.y,global.y-rect.bottom);const dist=Math.sqrt(distX*distX+distY*distY);const reveal=dist<=props.range;startTransition(()=>setLocalHover({hovered:global.hovered&&reveal,x:cx,y:cy}));}update(globalHover);const unsub=subscribeGlobalHover(update);return()=>{unsub();};},[props.range,isStatic]);// Compose border style\nconst borderStr=border?`${border.borderWidth}px ${border.borderStyle} ${border.borderColor}`:\"none\";const boxShadow=shadow?shadow:\"none\";const radius=borderRadius;// Mask for the top layer\nconst[showMask,setShowMask]=useState(false);const[topOpacity,setTopOpacity]=useState(0);// Animate opacity and mask removal\nuseEffect(()=>{if(isStatic)return;let timeout;if(localHover.hovered){setShowMask(true);startTransition(()=>setTopOpacity(hoverOpacity));}else{startTransition(()=>setTopOpacity(0));// Remove mask after transition\ntimeout=window.setTimeout(()=>{setShowMask(false);},250);}return()=>{if(timeout)clearTimeout(timeout);};},[localHover.hovered,hoverOpacity,isStatic]);const maskImage=!isStatic&&showMask?`radial-gradient(circle ${range}px at ${localHover.x}px ${localHover.y}px, black 0%, transparent 100%)`:undefined;return /*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"visible\"},tabIndex:0,\"aria-label\":\"Interactive Frame\",children:[/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"absolute\",top:0,left:0,background:fill,border:borderStr,boxShadow,borderRadius:radius,opacity:baseOpacity,pointerEvents:\"none\",overflow:\"hidden\"},children:children}),/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"absolute\",top:0,left:0,background:fill,border:borderStr,boxShadow,borderRadius:radius,WebkitMaskImage:maskImage,maskImage:maskImage,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskSize:\"100% 100%\",maskSize:\"100% 100%\",opacity:topOpacity,transition:\"opacity 0.25s cubic-bezier(0.4,0,0.2,1)\",pointerEvents:\"none\",overflow:\"hidden\"},children:children})]});}FrameReveal.displayName=\"Frame Hover Reveal\";addPropertyControls(FrameReveal,{fill:{type:ControlType.Color,title:\"Fill\",defaultValue:\"#FFFFFF\"},border:{type:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:1,borderStyle:\"solid\",borderColor:\"#EEEEEE\"},optional:true},shadow:{type:ControlType.BoxShadow,title:\"Shadow\"},borderRadius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"4px\"},baseOpacity:{type:ControlType.Number,title:\"Base\",defaultValue:0,min:0,max:1,step:.01,unit:\"\"},hoverOpacity:{type:ControlType.Number,title:\"Hover\",defaultValue:1,min:0,max:1,step:.01,unit:\"\"},range:{type:ControlType.Number,title:\"Range\",defaultValue:80,min:1,max:2e3,step:1,unit:\"px\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});export default FrameReveal;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FrameReveal\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"400\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"200\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FrameHoverReveal_Prod.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";export function LogoFetcher({domains=\"google.com, notion.so, github.com\",spacing=20,logoSize=20,direction=\"horizontal\"}){// Split domains by comma and trim whitespace\nconst domainList=domains.split(\",\").map(d=>d.trim()).filter(d=>d);const containerStyle={display:\"flex\",flexDirection:direction===\"horizontal\"?\"row\":\"column\",gap:`${spacing}px`,flexWrap:\"wrap\",alignItems:\"center\",width:\"100%\",height:\"100%\"};const imageStyle={width:logoSize,height:logoSize,objectFit:\"contain\",border:\"1px solid #E5E5E5\",borderRadius:\"8px\",padding:\"5px\"};return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:domainList.map((domain,index)=>/*#__PURE__*/_jsx(\"img\",{src:`https://img.logo.dev/${domain}?token=pk_J_hJ3vucTNK-YUVaagza_w`,alt:`${domain} logo`,style:imageStyle,onError:e=>{// Hide image if it fails to load\n    e.currentTarget.style.display=\"none\";}},`${domain}-${index}`))});}// Property controls for Framer UI\naddPropertyControls(LogoFetcher,{domains:{type:ControlType.String,title:\"Domains\",defaultValue:\"google.com, notion.so, github.com\",placeholder:\"Enter domains separated by commas\",displayTextArea:true},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],defaultValue:\"horizontal\"},logoSize:{type:ControlType.Number,title:\"Logo Size\",defaultValue:50,min:20,max:300,step:10,displayStepper:true},spacing:{type:ControlType.Number,title:\"Spacing\",defaultValue:20,min:0,max:100,step:5,displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"LogoFetcher\":{\"type\":\"reactComponent\",\"name\":\"LogoFetcher\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CustomLogoRenderer.map"],"mappings":"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"}