{"version":3,"file":"CopyPortfolioEmail.CBKN8YNN.mjs","names":["useState","useRef","useCallback","useMemo","_Fragment"],"sources":["https:/framerusercontent.com/modules/tZ7n8bDKr4i6viXfkbUT/NMvgJu6m3GUibNXPWMvq/CopyPortfolioEmail.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,startTransition,useCallback,useMemo,useRef,useState}from\"react\";/**\n * User request:\n * Create a code OVERRIDE export (not a code component) named CopyPortfolioEmail to attach to an existing native canvas button.\n * On user click copy minghuiwang765@gmail.com to clipboard with safe fallback if clipboard unavailable.\n * Preserve existing canvas children, visual styling, sizing, and native editability.\n * Add accessible keyboard activation if needed without duplicate activation on native button, aria-label and success announcement accessible.\n * Do not replace children or alter visible label. No auto-run effects or external dependencies.\n * Only behavioral override; all layout stays native.\n */export function CopyPortfolioEmail(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[announcement,setAnnouncement]=useState(\"\");const clearTimerRef=useRef(null);const email=\"minghuiwang765@gmail.com\";const clearAnnouncementSoon=useCallback(()=>{if(typeof window===\"undefined\")return;if(clearTimerRef.current!==null){window.clearTimeout(clearTimerRef.current);}clearTimerRef.current=window.setTimeout(()=>{startTransition(()=>setAnnouncement(\"\"));clearTimerRef.current=null;},1800);},[]);const copyWithFallback=useCallback(async()=>{if(typeof window===\"undefined\")return false;try{if(navigator?.clipboard?.writeText){await navigator.clipboard.writeText(email);return true;}}catch(_error){// Continue to fallback below.\n}try{const textarea=document.createElement(\"textarea\");textarea.value=email;textarea.setAttribute(\"readonly\",\"true\");textarea.setAttribute(\"aria-hidden\",\"true\");textarea.style.position=\"fixed\";textarea.style.left=\"-9999px\";textarea.style.top=\"0\";document.body.appendChild(textarea);textarea.focus();textarea.select();const copied=document.execCommand(\"copy\");document.body.removeChild(textarea);return copied;}catch(_error){return false;}},[]);const activateCopy=useCallback(async()=>{const success=await copyWithFallback();startTransition(()=>setAnnouncement(success?\"Portfolio email copied to clipboard.\":\"Unable to copy portfolio email.\"));clearAnnouncementSoon();},[clearAnnouncementSoon,copyWithFallback]);const onClick=useCallback(async event=>{if(props.onClick)props.onClick(event);if(event?.defaultPrevented)return;await activateCopy();},[activateCopy,props]);const isNativeButton=useMemo(()=>{const asTag=typeof props.as===\"string\"?props.as.toLowerCase():\"\";const role=typeof props.role===\"string\"?props.role.toLowerCase():\"\";return asTag===\"button\"||role===\"button\"||props.type===\"button\";},[props.as,props.role,props.type]);const onKeyDown=useCallback(async event=>{if(props.onKeyDown)props.onKeyDown(event);if(event?.defaultPrevented||isNativeButton)return;if(event.key===\"Enter\"||event.key===\" \"){event.preventDefault();await activateCopy();}},[activateCopy,isNativeButton,props]);const accessibilityProps=useMemo(()=>{if(isNativeButton)return{};return{role:props.role??\"button\",tabIndex:props.tabIndex??0};},[isNativeButton,props.role,props.tabIndex]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{ref:ref,...props,...accessibilityProps,onClick:onClick,onKeyDown:onKeyDown,\"aria-label\":props[\"aria-label\"]??\"Copy portfolio email address\"}),/*#__PURE__*/_jsx(\"span\",{\"aria-live\":\"polite\",role:\"status\",style:{position:\"absolute\",width:1,height:1,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",border:0},children:announcement})]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"CopyPortfolioEmail\":{\"type\":\"reactHoc\",\"name\":\"CopyPortfolioEmail\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CopyPortfolioEmail.map"],"mappings":"mLAQG,SAAgB,EAAmB,EAAU,CAAC,OAAoB,GAAY,EAAM,IAAM,CAAC,GAAK,CAAC,EAAa,GAAiBA,EAAS,EAAE,EAAQ,EAAcC,EAAO,IAAI,EAAQ,EAAM,2BAAiC,EAAsBC,MAAgB,CAAW,IAAS,SAAsB,EAAc,UAAU,MAAM,EAAO,aAAa,EAAc,OAAO,EAAG,EAAc,QAAQ,EAAO,eAAe,CAAC,MAAoB,EAAgB,EAAE,CAAC,EAAE,EAAc,QAAQ,IAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAQ,EAAiBA,EAAY,SAAS,CAAC,GAAU,IAAS,OAAY,MAAO,GAAM,GAAG,CAAC,GAAG,GAAW,WAAW,UAAsD,OAA3C,MAAM,EAAU,UAAU,UAAU,CAAK,EAAS,EAAM,MAAc,CAC7rB,CAAC,GAAG,CAAC,IAAM,EAAS,SAAS,cAAc,UAAU,EAAE,EAAS,MAAM,EAAM,EAAS,aAAa,WAAW,MAAM,EAAE,EAAS,aAAa,cAAc,MAAM,EAAE,EAAS,MAAM,SAAS,QAAQ,EAAS,MAAM,KAAK,UAAU,EAAS,MAAM,IAAI,IAAI,SAAS,KAAK,YAAY,CAAQ,EAAE,EAAS,MAAM,EAAE,EAAS,OAAO,EAAE,IAAM,EAAO,SAAS,YAAY,MAAM,EAAsC,OAApC,SAAS,KAAK,YAAY,CAAQ,EAAS,CAAO,MAAc,CAAC,MAAO,EAAM,CAAC,EAAE,CAAC,CAAC,EAAQ,EAAaA,EAAY,SAAS,CAAC,IAAM,EAAQ,MAAM,EAAiB,EAAE,MAAoB,EAAgB,EAAQ,uCAAuC,iCAAiC,CAAC,EAAE,EAAsB,CAAE,EAAE,CAAC,EAAsB,CAAgB,CAAC,EAAQ,EAAQA,EAAY,KAAM,IAAO,CAAI,EAAM,SAAQ,EAAM,QAAQ,CAAK,EAAK,IAAO,kBAAwB,MAAM,EAAa,CAAE,EAAE,CAAC,EAAa,CAAK,CAAC,EAAQ,EAAeC,MAAY,CAAC,IAAM,EAAM,OAAO,EAAM,IAAK,SAAS,EAAM,GAAG,YAAY,EAAE,GAAS,EAAK,OAAO,EAAM,MAAO,SAAS,EAAM,KAAK,YAAY,EAAE,GAAG,OAAO,IAAQ,UAAU,IAAO,UAAU,EAAM,OAAO,QAAS,EAAE,CAAC,EAAM,GAAG,EAAM,KAAK,EAAM,IAAI,CAAC,EAAQ,EAAUD,EAAY,KAAM,IAAO,CAAI,EAAM,WAAU,EAAM,UAAU,CAAK,EAAK,KAAO,kBAAkB,KAAyB,EAAM,MAAM,SAAS,EAAM,MAAM,OAAK,EAAM,eAAe,EAAE,MAAM,EAAa,EAAG,EAAE,CAAC,EAAa,EAAe,CAAK,CAAC,EAAQ,EAAmBC,MAAgB,EAAqB,CAAC,EAAQ,CAAC,KAAK,EAAM,MAAM,SAAS,SAAS,EAAM,UAAU,CAAC,EAAI,CAAC,EAAe,EAAM,KAAK,EAAM,QAAQ,CAAC,EAAE,OAAoB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAK,EAAU,CAAK,MAAI,GAAG,EAAM,GAAG,EAA2B,UAAkB,YAAU,aAAa,EAAM,eAAe,8BAA8B,CAAC,EAAe,EAAK,OAAO,CAAC,YAAY,SAAS,KAAK,SAAS,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,SAAS,KAAK,mBAAmB,WAAW,SAAS,OAAO,CAAC,EAAE,SAAS,CAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,qBAT74D,IAAkF"}