{"version":3,"file":"SW_CodeBlock.B5NJawyB.mjs","names":["useRef","useState","useMemo","c"],"sources":["https:/framerusercontent.com/modules/a2qEc7FQSAzeqRfSRPTT/HE22RYiN16u3mzoNw7ot/SW_CodeBlock.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useMemo,useRef,useState}from\"react\";/**\n * SW_CodeBlock\n *\n * Width comes from one property. The block lifts only the wrappers that are\n * narrower than the target, so it can exceed a constrained CMS column without\n * a stylesheet. Semantic <pre><code>; line numbers are aria-hidden and\n * unselectable so a copied selection contains code and nothing else.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */const C={surface:\"#1E1E1F\",header:\"rgba(255,255,255,0.05)\",border:\"rgba(255,255,255,0.10)\",text:\"#EEEEEE\",punct:\"#999999\",gutter:\"#666666\",keyword:\"#00BBFF\",string:\"#BB88FF\",number:\"#FFCC66\",comment:\"#666666\",func:\"#FFCC66\"};const KEYWORDS={python:[\"def\",\"class\",\"return\",\"if\",\"elif\",\"else\",\"for\",\"while\",\"import\",\"from\",\"as\",\"with\",\"try\",\"except\",\"finally\",\"raise\",\"yield\",\"lambda\",\"pass\",\"break\",\"continue\",\"not\",\"in\",\"is\",\"and\",\"or\",\"None\",\"True\",\"False\",\"self\",\"await\",\"async\",\"global\"],javascript:[\"const\",\"let\",\"var\",\"function\",\"return\",\"if\",\"else\",\"for\",\"while\",\"import\",\"from\",\"as\",\"class\",\"extends\",\"new\",\"await\",\"async\",\"try\",\"catch\",\"finally\",\"throw\",\"typeof\",\"instanceof\",\"null\",\"undefined\",\"true\",\"false\",\"this\",\"export\",\"default\"],bash:[\"export\",\"curl\",\"echo\",\"cd\",\"if\",\"then\",\"fi\",\"for\",\"do\",\"done\",\"while\",\"case\",\"esac\",\"function\",\"local\",\"return\"],yaml:[\"true\",\"false\",\"null\"],json:[\"true\",\"false\",\"null\"]};const esc=s=>s.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");// Strings and comments are matched before keywords and numbers, so those rules\n// can never fire inside a literal.\nfunction highlight(src,lang){const words=KEYWORDS[lang]??[];const kw=words.length?`\\\\b(${words.map(w=>w.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")).join(\"|\")})\\\\b`:null;const rx=new RegExp([`(\"\"\"[\\\\s\\\\S]*?\"\"\"|'''[\\\\s\\\\S]*?''')`,`(\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\"|'(?:\\\\\\\\.|[^'\\\\\\\\])*')`,`(#[^\\\\n]*|\\\\/\\\\/[^\\\\n]*)`,`\\\\b(\\\\d+(?:\\\\.\\\\d+)?)\\\\b`,kw,`([A-Za-z_][A-Za-z0-9_]*)(?=\\\\()`].filter(Boolean).join(\"|\"),\"g\");let out=\"\",last=0;for(const m of src.matchAll(rx)){const i=m.index??0;out+=esc(src.slice(last,i));const tok=m[0];let color=C.text;if(m[1]||m[2])color=C.string;else if(m[3])color=C.comment;else if(m[4])color=C.number;else if(m[5])color=C.keyword;else if(m[6])color=C.func;out+=`<span style=\"color:${color}\">${esc(tok)}</span>`;last=i+tok.length;}out+=esc(src.slice(last));return out;}export default function SW_CodeBlock(props){const{heading,code,language,blockWidth,wrapLines,showLineNumbers,showChrome,fontSize,lineHeight,radius,docsUrl,docsLabel,style}=props;const rootRef=useRef(null);const[copied,setCopied]=useState(false);const source=(code??\"\").replace(/\\s+$/,\"\");const lines=useMemo(()=>source.split(\"\\n\"),[source]);// Lift only the wrappers narrower than the target width, and stop at the\n// first ancestor already wide enough. Restored on unmount.\nuseEffect(()=>{const el=rootRef.current;if(!el||!blockWidth)return;const touched=[];let n=el.parentElement;for(let i=0;i<8&&n;i++){if(n.clientWidth>=blockWidth)break;touched.push([n,n.style.cssText]);n.style.setProperty(\"overflow\",\"visible\",\"important\");n.style.setProperty(\"width\",`${blockWidth}px`,\"important\");n.style.setProperty(\"max-width\",\"none\",\"important\");n=n.parentElement;}// A rich-text field with an empty value renders a stray empty paragraph.\n// Widened, it reads as a dark bar above the block. Hide the empty\n// siblings around the embed, and put them back on unmount.\nconst mod=el.closest(\".framer-text-module\");for(const sib of[mod?.previousElementSibling,mod?.nextElementSibling]){const p=sib;if(p&&!p.textContent?.trim()&&!p.querySelector(\"img,svg,canvas,video\")){touched.push([p,p.style.cssText]);p.style.setProperty(\"display\",\"none\",\"important\");}}return()=>touched.forEach(([node,css])=>{node.style.cssText=css;});},[blockWidth,source]);const copy=async()=>{try{await navigator.clipboard.writeText(source);setCopied(true);setTimeout(()=>setCopied(false),1600);}catch{}};const mono=\"'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace\";return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,\"data-sw-codeblock\":\"\",style:{width:blockWidth?`${blockWidth}px`:\"100%\",maxWidth:\"none\",boxSizing:\"border-box\",background:C.surface,border:`1px solid ${C.border}`,borderRadius:radius,overflow:\"hidden\",fontFamily:mono,...style},children:[(showChrome||heading)&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:12,padding:\"10px 16px\",background:C.header,borderBottom:`1px solid ${C.border}`},children:[showChrome&&/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{display:\"flex\",gap:6,flex:\"0 0 auto\"},children:[\"#FF5F57\",\"#FEBC2E\",\"#28C840\"].map(c=>/*#__PURE__*/_jsx(\"span\",{style:{width:10,height:10,borderRadius:999,background:c}},c))}),/*#__PURE__*/_jsx(\"span\",{style:{flex:1,minWidth:0,color:C.punct,fontSize:12,letterSpacing:\"0.06em\",textTransform:\"uppercase\",overflow:\"hidden\",textOverflow:\"ellipsis\",whiteSpace:\"nowrap\"},children:heading}),/*#__PURE__*/_jsx(\"button\",{onClick:copy,style:{flex:\"0 0 auto\",cursor:\"pointer\",fontSize:12,color:copied?C.keyword:C.punct,background:\"transparent\",border:`1px solid ${C.border}`,borderRadius:6,padding:\"4px 10px\",fontFamily:\"inherit\"},children:copied?\"copied\":\"copy\"}),docsUrl?/*#__PURE__*/_jsx(\"a\",{href:docsUrl,target:\"_blank\",rel:\"noopener noreferrer\",style:{flex:\"0 0 auto\",fontSize:12,textDecoration:\"none\",color:C.keyword,background:\"transparent\",border:`1px solid ${C.border}`,borderRadius:6,padding:\"4px 10px\",fontFamily:\"inherit\"},children:docsLabel}):null]}),/*#__PURE__*/_jsx(\"pre\",{style:{margin:0,padding:\"18px 20px\",overflowX:wrapLines?\"hidden\":\"auto\",fontSize,lineHeight:`${lineHeight}px`,color:C.text,tabSize:4},children:/*#__PURE__*/_jsx(\"code\",{style:{fontFamily:\"inherit\",display:\"block\"},children:lines.map((line,i)=>/*#__PURE__*/_jsxs(\"span\",{style:{display:\"block\",whiteSpace:wrapLines?\"pre-wrap\":\"pre\",paddingLeft:showLineNumbers?48:0,textIndent:showLineNumbers?-48:0},children:[showLineNumbers&&/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{display:\"inline-block\",width:32,marginRight:16,textAlign:\"right\",color:C.gutter,userSelect:\"none\",textIndent:0},children:String(i+1).padStart(2,\"0\")}),/*#__PURE__*/_jsx(\"span\",{dangerouslySetInnerHTML:{__html:highlight(line,language)||\"&nbsp;\"}})]},i))})})]});}SW_CodeBlock.defaultProps={heading:\"example.py\",code:'print(\"hello\")',language:\"python\",blockWidth:1024,wrapLines:false,showLineNumbers:true,showChrome:true,fontSize:14,lineHeight:28,radius:12,docsUrl:\"https://signalwire.com/docs/agents-sdk\",docsLabel:\"docs ↗\"};addPropertyControls(SW_CodeBlock,{heading:{type:ControlType.String,title:\"Heading\"},code:{type:ControlType.String,title:\"Code\",displayTextArea:true},language:{type:ControlType.Enum,title:\"Language\",options:[\"python\",\"javascript\",\"bash\",\"yaml\",\"json\",\"plain\"],optionTitles:[\"Python\",\"JavaScript\",\"Bash\",\"YAML\",\"JSON\",\"Plain\"]},blockWidth:{type:ControlType.Number,title:\"Width\",min:320,max:1600,step:8,displayStepper:false},wrapLines:{type:ControlType.Boolean,title:\"Wrap\"},showLineNumbers:{type:ControlType.Boolean,title:\"Numbers\"},showChrome:{type:ControlType.Boolean,title:\"Chrome\"},fontSize:{type:ControlType.Number,title:\"Size\",min:10,max:20,step:1},lineHeight:{type:ControlType.Number,title:\"Leading\",min:14,max:44,step:1},radius:{type:ControlType.Number,title:\"Radius\",min:0,max:32,step:1},docsUrl:{type:ControlType.Link,title:\"Docs link\"},docsLabel:{type:ControlType.String,title:\"Docs label\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SW_CodeBlock\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SW_CodeBlock.map"],"mappings":"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"}