{"version":3,"file":"WrapButton.C5jYYHyS.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/zBKuV1aMGfcieyHkdyJ5/U3gNUThgD2XwlQwPKHYJ/WrapButton.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";const MONO='\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace';const CHARS=\"abcdefghijklmnopqrstuvwxyz0123456789\";function prefersReduced(){return typeof window!==\"undefined\"&&typeof window.matchMedia===\"function\"&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}/**\n * Hover override for canvas buttons: the shell and any solid-background\n * inner boxes morph from square corners into the brand diagonal\n * (14px 0 14px 0, 220ms) on hover. No label scramble — that lives only on\n * the nav menu links via withLinkScramble. Layout-neutral wrapper.\n */export function withHoverScramble(Component){return function HoverScramble(props){const ref=useRef(null);const morphed=useRef([]);function morphTargets(){const root=ref.current?.firstElementChild;if(!root)return[];const targets=[root];for(const el of Array.from(root.querySelectorAll(\"div\"))){const bg=getComputedStyle(el).backgroundColor;if(bg&&bg!==\"transparent\"&&bg!==\"rgba(0, 0, 0, 0)\")targets.push(el);}return targets;}function morph(on){if(typeof window===\"undefined\"||prefersReduced())return;if(on)morphed.current=morphTargets();for(const el of morphed.current){el.style.transition=\"border-radius 220ms cubic-bezier(0.4, 0, 0.2, 1)\";el.style.borderRadius=on?\"14px 0px 14px 0px\":\"\";}}useEffect(()=>{return()=>morph(false);},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},onMouseEnter:()=>{morph(true);},onMouseLeave:()=>{morph(false);},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Small-screen behaviour for the Work Browser sector tab row: below 1000px\n * the row stops wrapping and becomes a single horizontally-scrollable strip\n * (scrollbar hidden, touch momentum on); at desktop widths it reverts to the\n * authored wrapping layout. Runtime-applied because the component has no\n * breakpoint variants.\n */export function withTabRowScroll(Component){return function TabRowScroll(props){const ref=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const host=ref.current?.firstElementChild;if(!host)return;if(!document.getElementById(\"wrap-tabscroll-css\")){const tag=document.createElement(\"style\");tag.id=\"wrap-tabscroll-css\";tag.textContent=\".wrap-tabscroll::-webkit-scrollbar{display:none}\"+\"@media (max-width: 999px){ #wrap-work-grid, #wrap-work-grid > div, #wrap-work-grid > ul, #wrap-work-grid [data-framer-name] { grid-template-columns: 1fr !important } }\";document.head.appendChild(tag);}function apply(){if(!host)return;const w=document.documentElement.clientWidth||window.innerWidth;if(w<1e3){host.classList.add(\"wrap-tabscroll\");host.style.flexWrap=\"nowrap\";host.style.overflowX=\"auto\";host.style.overflowY=\"hidden\";host.style.scrollbarWidth=\"none\";host.style.WebkitOverflowScrolling=\"touch\";}else{host.classList.remove(\"wrap-tabscroll\");host.style.flexWrap=\"\";host.style.overflowX=\"\";host.style.overflowY=\"\";host.style.scrollbarWidth=\"\";}}apply();window.addEventListener(\"resize\",apply);return()=>window.removeEventListener(\"resize\",apply);},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Single-column collapse for the Work Browser project grid: below 1000px the\n * grid renders one full-width card per row; at desktop widths the authored\n * two-column layout applies. Runtime-applied (fixed grid counts don't\n * collapse, and layout attrs can't bind to variables).\n */export function withResponsiveGridCols(Component){return function ResponsiveGridCols(props){const ref=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const host=ref.current?.firstElementChild;if(!host)return;function apply(){if(!host)return;const w=document.documentElement.clientWidth||window.innerWidth;host.style.gridTemplateColumns=w<1e3?\"1fr\":\"\";}apply();window.addEventListener(\"resize\",apply);return()=>window.removeEventListener(\"resize\",apply);},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Scramble-only hover for the nav menu page links: the label decodes through\n * random characters and restores. No corner morph. Survives Framer's\n * hover-variant remounts via the mount-time :hover check, and never\n * overwrites framework-driven label swaps (last-writer guard).\n */export function withLinkScramble(Component){return function LinkScramble(props){const ref=useRef(null);const timer=useRef(0);const original=useRef(null);const written=useRef(\"\");function stop(){if(typeof window===\"undefined\")return;window.clearInterval(timer.current);if(original.current){if(original.current.node.textContent===written.current){original.current.node.textContent=original.current.text;}original.current=null;}}function start(){if(typeof window===\"undefined\"||prefersReduced()||!ref.current)return;const walker=document.createTreeWalker(ref.current,NodeFilter.SHOW_TEXT);let best=null;let node;while(node=walker.nextNode()){const t=node;const len=(t.textContent||\"\").trim().length;if(len>1&&len>(best&&best.textContent||\"\").trim().length)best=t;}if(!best)return;const target=best;const value=target.textContent||\"\";stop();original.current={node:target,text:value};written.current=value;let i=0;const frames=value.length+5;timer.current=window.setInterval(()=>{i++;if(target.textContent!==written.current){window.clearInterval(timer.current);original.current=null;return;}const resolved=Math.floor(i/frames*value.length);if(resolved>=value.length){stop();return;}const next=value.split(\"\").map((c,idx)=>idx<resolved||c===\" \"?c:CHARS[Math.floor(Math.random()*CHARS.length)]).join(\"\");target.textContent=next;written.current=next;},56);}useEffect(()=>{const host=ref.current?.firstElementChild;if(host&&typeof host.matches===\"function\"&&host.matches(\":hover\"))start();return stop;},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},onMouseEnter:start,onMouseLeave:stop,children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Responsive width cap for the hero discipline label: 250px on phones,\n * 500px otherwise (the label lives inside a component with no breakpoint\n * variants, so the cap has to be applied at runtime). Height grows with\n * the wrapped text naturally.\n */export function withHeroLabelCap(Component){return function HeroLabelCap(props){const ref=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const el=ref.current?.firstElementChild;if(!el)return;function apply(){const w=document.documentElement.clientWidth||window.innerWidth;if(el)el.style.maxWidth=w<700?\"250px\":\"500px\";}apply();window.addEventListener(\"resize\",apply);return()=>window.removeEventListener(\"resize\",apply);},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Tab hover: corner morph only (no label scramble). The morph applies ONLY\n * to the wrapped root (the ghost tab shell) — background children such as a\n * selected-state pill keep their square corners, and an active tab is inert.\n */export function withTabHover(Component){return function TabHover(props){const ref=useRef(null);function isActive(){/* the selected-state pill is the only background-bearing child; when\n               it is rendered this tab is active and hover effects stay off */const root=ref.current?.firstElementChild;if(!root)return false;for(const el of Array.from(root.querySelectorAll(\"div\"))){const bg=getComputedStyle(el).backgroundColor;if(bg&&bg!==\"transparent\"&&bg!==\"rgba(0, 0, 0, 0)\")return true;}return false;}function morph(on){if(typeof window===\"undefined\"||prefersReduced())return;const root=ref.current?.firstElementChild;if(!root)return;root.style.transition=\"border-radius 220ms cubic-bezier(0.4, 0, 0.2, 1)\";root.style.borderRadius=on?\"14px 0px 14px 0px\":\"\";}useEffect(()=>{return()=>morph(false);},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},onMouseEnter:()=>{if(isActive())return;morph(true);},onMouseLeave:()=>{morph(false);},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * Hover scramble in WRAP Blue: like withHoverScramble, but the decoding text\n * also turns accent (#6AC1C3) while hovered and restores on leave. Also starts\n * on mount if the pointer is already inside (covers Framer hover-variant swaps\n * that remount the subtree mid-hover) — apply to hover variants too.\n */export function withHoverScrambleAccent(Component){return function HoverScrambleAccent(props){const ref=useRef(null);const timer=useRef(0);const original=useRef(null);const written=useRef(\"\");const colored=useRef(null);function stop(){if(typeof window===\"undefined\")return;window.clearInterval(timer.current);if(original.current){/* restore ONLY if we were the last writer — if the framework\n                   swapped the label meanwhile, leave it alone */if(original.current.node.textContent===written.current){original.current.node.textContent=original.current.text;}original.current=null;}if(colored.current){colored.current.el.style.color=colored.current.color;colored.current=null;}}function start(){if(typeof window===\"undefined\"||prefersReduced()||!ref.current)return;const walker=document.createTreeWalker(ref.current,NodeFilter.SHOW_TEXT);let best=null;let node;while(node=walker.nextNode()){const t=node;const len=(t.textContent||\"\").trim().length;if(len>1&&len>(best&&best.textContent||\"\").trim().length)best=t;}if(!best)return;const target=best;const value=target.textContent||\"\";stop();original.current={node:target,text:value};written.current=value;const holder=target.parentElement;if(holder){colored.current={el:holder,color:holder.style.color};holder.style.color=\"#6AC1C3\";}let i=0;const frames=value.length+5;timer.current=window.setInterval(()=>{i++;/* framework rewrote the label mid-scramble? abandon quietly */if(target.textContent!==written.current){window.clearInterval(timer.current);original.current=null;return;}const resolved=Math.floor(i/frames*value.length);if(resolved>=value.length){/* decoded: restore the text, keep the accent while hovered */window.clearInterval(timer.current);if(original.current){if(original.current.node.textContent===written.current){original.current.node.textContent=original.current.text;}original.current=null;}return;}const next=value.split(\"\").map((c,idx)=>idx<resolved||c===\" \"?c:CHARS[Math.floor(Math.random()*CHARS.length)]).join(\"\");target.textContent=next;written.current=next;},56);}useEffect(()=>{/* hover-variant swap mounts this subtree with the pointer already\n               inside, so mouseenter never fires — detect and start */const host=ref.current?.firstElementChild;if(host&&typeof host.matches===\"function\"&&host.matches(\":hover\"))start();return stop;},[]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{display:\"contents\"},onMouseEnter:start,onMouseLeave:stop,children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * WRAP Button\n *\n * Primary (WRAP Blue) and ghost variants. Idle corners are square; on hover\n * they ease into the brand diagonal (14px 0 14px 0, 220ms) and the mono\n * label scrambles/decodes (~300ms). No colour change on hover by design.\n *\n * @framerIntrinsicWidth 150\n * @framerIntrinsicHeight 46\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function WrapButton(props){const{label=\"View projects\",variant=\"primary\",link,openInNewTab=false,accent=\"#6AC1C3\",textOnAccent=\"#0F1214\",text=\"#E9ECEC\",borderColor=\"#7B7B7B\"}=props;const isStatic=useIsStaticRenderer();const[hover,setHover]=useState(false);const base={...props.style,position:\"relative\",display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",boxSizing:\"border-box\",fontFamily:MONO,fontSize:14,lineHeight:\"1.2em\",letterSpacing:0,whiteSpace:\"nowrap\",minWidth:\"max-content\",padding:\"14px clamp(10px, 1.2vw, 18px)\",borderRadius:hover?\"14px 0px 14px 0px\":\"0px\",transition:\"border-radius 220ms cubic-bezier(0.4, 0, 0.2, 1)\",cursor:\"pointer\",textDecoration:\"none\",userSelect:\"none\"};const look=variant===\"ghost\"?{background:\"transparent\",color:text,border:\"1.5px solid \"+borderColor}:{background:accent,color:textOnAccent,border:\"none\"};return /*#__PURE__*/_jsx(\"a\",{href:link||undefined,target:openInNewTab?\"_blank\":undefined,rel:openInNewTab?\"noopener\":undefined,style:{...base,...look},onMouseEnter:()=>{setHover(true);},onMouseLeave:()=>{setHover(false);},children:label});}addPropertyControls(WrapButton,{label:{type:ControlType.String,title:\"Label\",defaultValue:\"View projects\"},variant:{type:ControlType.Enum,title:\"Variant\",options:[\"primary\",\"ghost\"],optionTitles:[\"Primary\",\"Ghost\"],defaultValue:\"primary\",displaySegmentedControl:true},link:{type:ControlType.Link,title:\"Link\"},openInNewTab:{type:ControlType.Boolean,title:\"New Tab\",defaultValue:false},accent:{type:ControlType.Color,title:\"Accent\",defaultValue:\"#6AC1C3\"},textOnAccent:{type:ControlType.Color,title:\"Text / Accent\",defaultValue:\"#0F1214\"},text:{type:ControlType.Color,title:\"Text / Ghost\",defaultValue:\"#E9ECEC\"},borderColor:{type:ControlType.Color,title:\"Border\",defaultValue:\"#7B7B7B\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"withTabHover\":{\"type\":\"reactHoc\",\"name\":\"withTabHover\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTabRowScroll\":{\"type\":\"reactHoc\",\"name\":\"withTabRowScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHoverScramble\":{\"type\":\"reactHoc\",\"name\":\"withHoverScramble\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withResponsiveGridCols\":{\"type\":\"reactHoc\",\"name\":\"withResponsiveGridCols\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHoverScrambleAccent\":{\"type\":\"reactHoc\",\"name\":\"withHoverScrambleAccent\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLinkScramble\":{\"type\":\"reactHoc\",\"name\":\"withLinkScramble\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"WrapButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"150\",\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"46\",\"framerSupportedLayoutHeight\":\"auto\"}},\"withHeroLabelCap\":{\"type\":\"reactHoc\",\"name\":\"withHeroLabelCap\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WrapButton.map"],"mappings":"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"}