{"version":3,"file":"Code_Block_v3.4RGrKbSA.mjs","names":["React.useState","React.useRef","React.useCallback","_Fragment","React.Fragment"],"sources":["https:/framerusercontent.com/modules/k9SHsKr9JKk8XiecfvBH/j6Pq1mVgiS8ltlSrboJM/Code_Block_v3.js"],"sourcesContent":["// import * as React from \"react\"\n// import { createPortal } from \"react-dom\"\n// import { addPropertyControls, ControlType } from \"framer\"\n// type SyntaxVariant = \"typescript\" | \"javascript\" | \"python\" | \"curl\"\n// type CodeSnippetItem = {\n//     language: string\n//     code: string\n//     syntax: SyntaxVariant\n// }\n// type Props = {\n//     style?: React.CSSProperties\n//     codeSnippets: CodeSnippetItem[]\n//     apiKeyUrl: string\n//     buttonLabel: string\n//     background: string\n//     border: string\n//     codeText: string\n//     codeHighlight: string\n//     buttonText: string\n//     buttonBackground: string\n//     copyHover: string\n//     languageBackground: string\n//     menuBackground: string\n//     menuBorder: string\n//     menuItemHover: string\n//     lineNumberColor: string\n//     borderRadius: number\n//     fontSize: number\n//     lineHeight: number\n//     codeFontSize: number\n//     codeLineHeight: number\n//     copySuccessBackground: string\n// }\n// const DEFAULT_SNIPPETS: CodeSnippetItem[] = [\n//     {\n//         language: \"Typescript\",\n//         syntax: \"typescript\",\n//         code: `import { ApiClient } from \"@sdk/client\"\n// const client = new ApiClient()\n// const response = await client.generate({\n//   text: \"Hello there!\",\n//   modelId: \"v3\",\n// })`,\n//     },\n//     {\n//         language: \"Python\",\n//         syntax: \"python\",\n//         code: `from sdk.client import ApiClient\n// client = ApiClient()\n// response = client.generate(\n//     text=\"Hello there!\",\n//     model_id=\"v3\",\n// )`,\n//     },\n// ]\n// function escapeHtml(line: string) {\n//     return line\n//         .replaceAll(\"&\", \"&amp;\")\n//         .replaceAll(\"<\", \"&lt;\")\n//         .replaceAll(\">\", \"&gt;\")\n// }\n// function highlightJsLike(escaped: string) {\n//     return escaped\n//         .replace(/(\\/\\/.*)$/g, '<span class=\"tok-comment\">$1</span>')\n//         .replace(\n//             /(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/g,\n//             '<span class=\"tok-string\">$1</span>'\n//         )\n//         .replace(\n//             /\\b(import|from|const|let|var|new|await|return|async)\\b/g,\n//             '<span class=\"tok-keyword\">$1</span>'\n//         )\n//         .replace(\n//             /\\b(text|modelId)\\b(?=\\s*:)/g,\n//             '<span class=\"tok-property\">$1</span>'\n//         )\n//         .replace(\n//             /\\b(ApiClient|client|response)\\b/g,\n//             '<span class=\"tok-variable\">$1</span>'\n//         )\n// }\n// function highlightPython(escaped: string) {\n//     return escaped\n//         .replace(/(#.*)$/g, '<span class=\"tok-comment\">$1</span>')\n//         .replace(\n//             /(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/g,\n//             '<span class=\"tok-string\">$1</span>'\n//         )\n//         .replace(/\\b(from|import)\\b/g, '<span class=\"tok-keyword\">$1</span>')\n//         .replace(\n//             /\\b(client|response|text|model_id)\\b(?=\\s*=|\\s*:)/g,\n//             '<span class=\"tok-property\">$1</span>'\n//         )\n//         .replace(/\\b(ApiClient)\\b/g, '<span class=\"tok-variable\">$1</span>')\n// }\n// // function highlightCurl(escaped: string) {\n// //     return escaped\n// //         .replace(/\\b(curl)\\b/g, '<span class=\"tok-command\">$1</span>')\n// //         .replace(/(\\s-[A-Za-z]\\b)/g, '<span class=\"tok-flag\">$1</span>')\n// //         .replace(\n// //             /(\\$[A-Za-z_][A-Za-z0-9_]*)/g,\n// //             '<span class=\"tok-env\">$1</span>'\n// //         )\n// //         .replace(/(\"(?:[^\"\\\\]|\\\\.)*\")/g, '<span class=\"tok-string\">$1</span>')\n// // }\n// function highlightCurl(escaped: string) {\n//     return escaped\n//         .replace(/^(curl)\\b/gm, '<span class=\"tok-command\">$1</span>')\n//         .replace(/(?:^|\\s)(-[A-Za-z]\\b)/g, (m, flag) =>\n//             m.replace(flag, `<span class=\"tok-flag\">${flag}</span>`)\n//         )\n//         .replace(\n//             /(\\$[A-Za-z_][A-Za-z0-9_]*)/g,\n//             '<span class=\"tok-env\">$1</span>'\n//         )\n//         .replace(/(\"(?:[^\"\\\\]|\\\\.)*\")/g, '<span class=\"tok-string\">$1</span>')\n// }\n// // function highlightLine(line: string, syntax: SyntaxVariant) {\n// //     const escaped = escapeHtml(line)\n// //     if (syntax === \"typescript\" || syntax === \"javascript\") {\n// //         return highlightJsLike(escaped)\n// //     }\n// //     if (syntax === \"python\") return highlightPython(escaped)\n// //     if (syntax === \"curl\") return highlightCurl(escaped)\n// //     return escaped\n// // }\n// function highlightLine(line: string, syntax: SyntaxVariant) {\n//     const decoded = line\n//         .replace(/&amp;/g, \"&\")\n//         .replace(/&lt;/g, \"<\")\n//         .replace(/&gt;/g, \">\")\n//         .replace(/&quot;/g, '\"')\n//         .replace(/&#39;/g, \"'\")\n//     const clean = decoded\n//         .replace(/<[^>]*>/g, \"\")\n//         .replace(/\"tok-[^\"]*\">/g, \"\")\n//     const escaped = escapeHtml(clean)\n//     if (syntax === \"typescript\" || syntax === \"javascript\") {\n//         return highlightJsLike(escaped)\n//     }\n//     if (syntax === \"python\") return highlightPython(escaped)\n//     if (syntax === \"curl\") return highlightCurl(escaped)\n//     return escaped\n// }\n// function buttonHoverBg(hex: string) {\n//     const value = hex.replace(\"#\", \"\").trim()\n//     if (value.length !== 6) return \"#262626\"\n//     const r = Math.min(255, parseInt(value.slice(0, 2), 16) + 18)\n//     const g = Math.min(255, parseInt(value.slice(2, 4), 16) + 18)\n//     const b = Math.min(255, parseInt(value.slice(4, 6), 16) + 18)\n//     return `#${r.toString(16).padStart(2, \"0\")}${g\n//         .toString(16)\n//         .padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`\n// }\n// function stripLayoutOverrides(style?: React.CSSProperties) {\n//     if (!style) return {}\n//     const { height, minHeight, maxHeight, ...rest } = style\n//     return rest\n// }\n// export default function CodeSnippetBlock(props: Props) {\n//     const {\n//         style,\n//         codeSnippets,\n//         apiKeyUrl,\n//         buttonLabel,\n//         background,\n//         border,\n//         codeText,\n//         codeHighlight,\n//         buttonText,\n//         buttonBackground,\n//         copyHover,\n//         languageBackground,\n//         menuBackground,\n//         menuBorder,\n//         menuItemHover,\n//         lineNumberColor,\n//         borderRadius,\n//         fontSize,\n//         lineHeight,\n//         codeFontSize,\n//         codeLineHeight,\n//         copySuccessBackground,\n//     } = props\n//     const list = codeSnippets?.length ? codeSnippets : DEFAULT_SNIPPETS\n//     const [index, setIndex] = React.useState(0)\n//     const [menuOpen, setMenuOpen] = React.useState(false)\n//     const [copied, setCopied] = React.useState(false)\n//     const [menuPos, setMenuPos] = React.useState({\n//         top: 0,\n//         left: 0,\n//     })\n//     const [cardHeight, setCardHeight] = React.useState<number | null>(null)\n//     const safeIndex = Math.min(index, Math.max(0, list.length - 1))\n//     const item = list[safeIndex] ?? list[0]\n//     const lines = item.code.split(\"\\n\")\n//     const langBtnRef = React.useRef<HTMLButtonElement>(null)\n//     const menuRef = React.useRef<HTMLDivElement>(null)\n//     const measureRef = React.useRef<HTMLDivElement>(null)\n//     const copyTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n//     const measureHeight = React.useCallback(() => {\n//         const el = measureRef.current\n//         if (!el) return\n//         setCardHeight(Math.ceil(el.getBoundingClientRect().height) + 2)\n//     }, [])\n//     React.useLayoutEffect(() => {\n//         measureHeight()\n//         const el = measureRef.current\n//         if (!el || typeof ResizeObserver === \"undefined\") return\n//         const observer = new ResizeObserver(measureHeight)\n//         observer.observe(el)\n//         return () => observer.disconnect()\n//     }, [\n//         measureHeight,\n//         item.code,\n//         item.syntax,\n//         fontSize,\n//         lineHeight,\n//         codeFontSize,\n//         codeLineHeight,\n//         buttonLabel,\n//         borderRadius,\n//     ])\n//     React.useEffect(() => {\n//         const href =\n//             \"https://fonts.googleapis.com/css2?family=Geist:wght@400;500&family=Geist+Mono:wght@400&display=swap\"\n//         if (!document.querySelector(`link[href=\"${href}\"]`)) {\n//             const link = document.createElement(\"link\")\n//             link.href = href\n//             link.rel = \"stylesheet\"\n//             document.head.appendChild(link)\n//         }\n//     }, [])\n//     const positionMenu = React.useCallback(() => {\n//         if (!langBtnRef.current) return\n//         const rect = langBtnRef.current.getBoundingClientRect()\n//         setMenuPos({\n//             left: rect.left,\n//             top: rect.bottom + 8,\n//         })\n//     }, [])\n//     React.useEffect(() => {\n//         if (!menuOpen) return\n//         positionMenu()\n//         window.addEventListener(\"resize\", positionMenu)\n//         window.addEventListener(\"scroll\", positionMenu, true)\n//         return () => {\n//             window.removeEventListener(\"resize\", positionMenu)\n//             window.removeEventListener(\"scroll\", positionMenu, true)\n//         }\n//     }, [menuOpen, positionMenu])\n//     React.useEffect(() => {\n//         const close = (event: MouseEvent) => {\n//             const target = event.target as Node\n//             if (menuRef.current?.contains(target)) return\n//             if (langBtnRef.current?.contains(target)) return\n//             setMenuOpen(false)\n//         }\n//         document.addEventListener(\"click\", close)\n//         return () => document.removeEventListener(\"click\", close)\n//     }, [])\n//     const copyCode = async () => {\n//         try {\n//             await navigator.clipboard.writeText(item.code)\n//             setCopied(true)\n//             if (copyTimer.current) {\n//                 clearTimeout(copyTimer.current)\n//             }\n//             copyTimer.current = setTimeout(() => {\n//                 setCopied(false)\n//             }, 2200)\n//         } catch {\n//             setCopied(false)\n//         }\n//     }\n//     const buttonHover = buttonHoverBg(buttonBackground)\n//     return (\n//         <>\n//             <style>{`\n//                 .code-snippet-root .tok-keyword {\n//                     color: #7c3aed;\n//                 }\n//                 .code-snippet-root .tok-property,\n//                 .code-snippet-root .tok-variable {\n//                     color: var(--highlight);\n//                 }\n//                 .code-snippet-root .tok-string {\n//                     color: #166534;\n//                 }\n//                 .code-snippet-root .tok-comment {\n//                     color: #737373;\n//                 }\n//                 .code-snippet-root .tok-command {\n//                     color: #7c3aed;\n//                 }\n//                 .code-snippet-root .tok-flag {\n//                     color: #be185d;\n//                 }\n//                 .code-snippet-root .tok-env {\n//                     color: #0f766e;\n//                 }\n//                 .code-snippet-root .code-scroll {\n//                     width: 100%;\n//                     overflow-x: auto;\n//                     overflow-y: hidden;\n//                     scrollbar-width: none;\n//                     -ms-overflow-style: none;\n//                     overscroll-behavior-x: contain;\n//                     overscroll-behavior-y: auto;\n//                     touch-action: pan-y pan-x;\n//                     -webkit-overflow-scrolling: touch;\n//                 }\n//                 .code-snippet-root .code-scroll::-webkit-scrollbar {\n//                     display: none;\n//                     width: 0;\n//                     height: 0;\n//                 }\n//                 .code-snippet-root .icon-btn,\n//                 .code-snippet-root .lang-btn,\n//                 .code-snippet-root .cta-btn {\n//                     transition:\n//                         transform 120ms cubic-bezier(0.4, 0, 0.2, 1),\n//                         background-color 160ms ease,\n//                         box-shadow 160ms ease;\n//                 }\n//                 .code-snippet-root .icon-btn:hover {\n//                     background: var(--copy-hover) !important;\n//                 }\n//                 .code-snippet-root .icon-btn[data-copied=\"true\"] {\n//                     background: var(--copy-success) !important;\n//                 }\n//                 .code-snippet-root .lang-btn:hover,\n//                 .code-snippet-root .lang-btn[data-open=\"true\"] {\n//                     background: var(--language-hover) !important;\n//                 }\n//                 .code-snippet-root .cta-btn:hover {\n//                     background: var(--button-hover) !important;\n//                     box-shadow:\n//                         0 2px 8px rgba(0, 0, 0, 0.18);\n//                 }\n//                 .code-snippet-root .icon-btn:active,\n//                 .code-snippet-root .lang-btn:active,\n//                 .code-snippet-root .cta-btn:active {\n//                     transform: scale(0.96);\n//                 }\n//             `}</style>\n//             <div\n//                 className=\"code-snippet-root\"\n//                 style={{\n//                     width: \"100%\",\n//                     height: cardHeight ?? \"auto\",\n//                     overflow: \"hidden\",\n//                     boxSizing: \"border-box\",\n//                     transition: \"height 280ms cubic-bezier(0.4, 0, 0.2, 1)\",\n//                     [\"--highlight\" as string]: codeHighlight,\n//                     [\"--copy-hover\" as string]: copyHover,\n//                     [\"--copy-success\" as string]: copySuccessBackground,\n//                     [\"--language-hover\" as string]: languageBackground,\n//                     [\"--button-hover\" as string]: buttonHover,\n//                     ...stripLayoutOverrides(style),\n//                 }}\n//             >\n//                 <div\n//                     ref={measureRef}\n//                     style={{\n//                         background,\n//                         border: `1px solid ${border}`,\n//                         borderRadius,\n//                         padding: 16,\n//                         overflow: \"hidden\",\n//                         boxSizing: \"border-box\",\n//                         fontFamily: '\"Aeonik Regular\", Arial, sans-serif',\n//                     }}\n//                 >\n//                     <div className=\"code-scroll\">\n//                         <div\n//                             style={{\n//                                 display: \"grid\",\n//                                 gridTemplateColumns: \"28px max-content\",\n//                                 columnGap: 10,\n//                                 width: \"max-content\",\n//                                 minWidth: \"100%\",\n//                                 padding: \"12px 24px 12px 6px\",\n//                                 boxSizing: \"border-box\",\n//                                 fontFamily: '\"Geist Mono Perf\", \"Geist Mono\", monospace',\n//                                 fontSize: codeFontSize,\n//                                 lineHeight: `${codeLineHeight}px`,\n//                                 color: codeText,\n//                             }}\n//                         >\n//                             {lines.map((line, idx) => (\n//                                 <React.Fragment key={idx}>\n//                                     <span\n//                                         style={{\n//                                             position: \"sticky\",\n//                                             left: 0,\n//                                             zIndex: 2,\n//                                             background,\n//                                             color: lineNumberColor,\n//                                             textAlign: \"right\",\n//                                             paddingRight: 4,\n//                                             userSelect: \"none\",\n//                                             boxShadow: `10px 0 18px -4px ${background}, 4px 0 12px -2px ${background}`,\n//                                         }}\n//                                     >\n//                                         {String(idx + 1).padStart(2, \"0\")}\n//                                     </span>\n//                                     <span\n//                                         style={{\n//                                             whiteSpace: \"pre\",\n//                                         }}\n//                                         dangerouslySetInnerHTML={{\n//                                             __html:\n//                                                 highlightLine(\n//                                                     line,\n//                                                     item.syntax\n//                                                 ) || \"&nbsp;\",\n//                                         }}\n//                                     />\n//                                 </React.Fragment>\n//                             ))}\n//                         </div>\n//                     </div>\n//                     <div\n//                         style={{\n//                             display: \"flex\",\n//                             justifyContent: \"space-between\",\n//                             alignItems: \"center\",\n//                             marginTop: 24,\n//                         }}\n//                     >\n//                         <div\n//                             style={{\n//                                 display: \"flex\",\n//                                 alignItems: \"center\",\n//                                 gap: 4,\n//                             }}\n//                         >\n//                             <button\n//                                 className=\"icon-btn\"\n//                                 data-copied={copied ? \"true\" : undefined}\n//                                 onClick={copyCode}\n//                                 style={{\n//                                     width: 40,\n//                                     height: 40,\n//                                     border: \"none\",\n//                                     borderRadius: 12,\n//                                     background: \"transparent\",\n//                                     cursor: \"pointer\",\n//                                     display: \"flex\",\n//                                     alignItems: \"center\",\n//                                     justifyContent: \"center\",\n//                                 }}\n//                             >\n//                                 {!copied ? (\n//                                     <svg\n//                                         width=\"18\"\n//                                         height=\"18\"\n//                                         viewBox=\"0 0 18 18\"\n//                                         fill=\"none\"\n//                                     >\n//                                         <path\n//                                             d=\"M6.5625 6.5625V3C6.5625 2.48223 6.98223 2.0625 7.5 2.0625H15C15.5178 2.0625 15.9375 2.48223 15.9375 3V10.5C15.9375 11.0178 15.5178 11.4375 15 11.4375H11.4375\"\n//                                             stroke=\"#737373\"\n//                                             strokeWidth=\"1.5\"\n//                                             strokeLinecap=\"round\"\n//                                             strokeLinejoin=\"round\"\n//                                         />\n//                                         <path\n//                                             d=\"M3 6.5625H10.5C11.0178 6.5625 11.4375 6.98223 11.4375 7.5V15C11.4375 15.5178 11.0178 15.9375 10.5 15.9375H3C2.48223 15.9375 2.0625 15.5178 2.0625 15V7.5C2.0625 6.98223 2.48223 6.5625 3 6.5625Z\"\n//                                             stroke=\"#737373\"\n//                                             strokeWidth=\"1.5\"\n//                                             strokeLinecap=\"round\"\n//                                             strokeLinejoin=\"round\"\n//                                         />\n//                                     </svg>\n//                                 ) : (\n//                                     <svg\n//                                         width=\"18\"\n//                                         height=\"18\"\n//                                         viewBox=\"0 0 24 24\"\n//                                     >\n//                                         <circle\n//                                             cx=\"12\"\n//                                             cy=\"12\"\n//                                             r=\"10\"\n//                                             fill=\"#16a34a\"\n//                                         />\n//                                         <path\n//                                             d=\"M8 12.5l2.2 2.2 5.8-5.8\"\n//                                             stroke=\"#ffffff\"\n//                                             strokeWidth=\"2\"\n//                                             strokeLinecap=\"round\"\n//                                             strokeLinejoin=\"round\"\n//                                             fill=\"none\"\n//                                         />\n//                                     </svg>\n//                                 )}\n//                             </button>\n//                             <button\n//                                 ref={langBtnRef}\n//                                 className=\"lang-btn\"\n//                                 data-open={menuOpen ? \"true\" : \"false\"}\n//                                 onClick={() => setMenuOpen(!menuOpen)}\n//                                 style={{\n//                                     height: 40,\n//                                     border: \"none\",\n//                                     borderRadius: 12,\n//                                     display: \"flex\",\n//                                     alignItems: \"center\",\n//                                     gap: 8,\n//                                     padding: \"8px 16px\",\n//                                     background: \"transparent\",\n//                                     cursor: \"pointer\",\n//                                     fontFamily: '\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',\n//                                     fontSize,\n//                                     fontWeight: 500,\n//                                     color: codeText,\n//                                 }}\n//                             >\n//                                 {item.language}\n//                                 <svg\n//                                     width=\"16\"\n//                                     height=\"16\"\n//                                     viewBox=\"0 0 24 24\"\n//                                     fill=\"none\"\n//                                     style={{\n//                                         transition: \"transform 180ms ease\",\n//                                         transform: menuOpen\n//                                             ? \"rotate(180deg)\"\n//                                             : \"rotate(0deg)\",\n//                                     }}\n//                                 >\n//                                     <path\n//                                         d=\"M6 9l6 6 6-6\"\n//                                         stroke=\"#737373\"\n//                                         strokeWidth=\"2\"\n//                                         strokeLinecap=\"round\"\n//                                         strokeLinejoin=\"round\"\n//                                     />\n//                                 </svg>\n//                             </button>\n//                         </div>\n//                         <button\n//                             className=\"cta-btn\"\n//                             onClick={() => {\n//                                 if (apiKeyUrl?.trim()) {\n//                                     window.open(\n//                                         apiKeyUrl.trim(),\n//                                         \"_blank\",\n//                                         \"noopener,noreferrer\"\n//                                     )\n//                                 }\n//                             }}\n//                             style={{\n//                                 border: \"none\",\n//                                 borderRadius: 12,\n//                                 background: buttonBackground,\n//                                 color: buttonText,\n//                                 padding: \"10px 18px\",\n//                                 cursor: \"pointer\",\n//                                 fontFamily: '\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',\n//                                 fontSize,\n//                                 fontWeight: 500,\n//                             }}\n//                         >\n//                             {buttonLabel}\n//                         </button>\n//                     </div>\n//                 </div>\n//             </div>\n//             {menuOpen &&\n//                 createPortal(\n//                     <div\n//                         ref={menuRef}\n//                         style={{\n//                             position: \"fixed\",\n//                             left: menuPos.left,\n//                             top: menuPos.top,\n//                             zIndex: 10000,\n//                             minWidth: 170,\n//                             padding: 6,\n//                             border: `1px solid ${menuBorder}`,\n//                             borderRadius: 12,\n//                             background: menuBackground,\n//                             boxShadow: \"0 10px 26px rgba(23,23,23,0.1)\",\n//                         }}\n//                     >\n//                         {list.map((snippet, i) => (\n//                             <button\n//                                 key={`${snippet.language}-${i}`}\n//                                 onClick={() => {\n//                                     setIndex(i)\n//                                     setMenuOpen(false)\n//                                 }}\n//                                 style={{\n//                                     width: \"100%\",\n//                                     border: \"none\",\n//                                     borderRadius: 8,\n//                                     padding: \"8px 10px\",\n//                                     textAlign: \"left\",\n//                                     background:\n//                                         i === safeIndex\n//                                             ? menuItemHover\n//                                             : \"transparent\",\n//                                     cursor: \"pointer\",\n//                                     fontFamily: '\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',\n//                                     fontSize,\n//                                     color: codeText,\n//                                 }}\n//                             >\n//                                 {snippet.language}\n//                             </button>\n//                         ))}\n//                     </div>,\n//                     document.body\n//                 )}\n//         </>\n//     )\n// }\n// CodeSnippetBlock.defaultProps = {\n//     codeSnippets: DEFAULT_SNIPPETS,\n//     apiKeyUrl: \"\",\n//     buttonLabel: \"Get API key\",\n//     background: \"#FFFFFF\",\n//     border: \"#E5E5E5\",\n//     codeText: \"#404040\",\n//     codeHighlight: \"#0066CC\",\n//     buttonText: \"#FAFAFA\",\n//     buttonBackground: \"#171717\",\n//     copyHover: \"#F5F5F5\",\n//     languageBackground: \"#F5F5F5\",\n//     menuBackground: \"#FFFFFF\",\n//     menuBorder: \"#EBEBEB\",\n//     menuItemHover: \"#FAFAFA\",\n//     lineNumberColor: \"#D4D4D4\",\n//     borderRadius: 24,\n//     fontSize: 14,\n//     lineHeight: 20,\n//     codeFontSize: 16,\n//     codeLineHeight: 26,\n//     copySuccessBackground: \"#DCFCE7\",\n// }\n// addPropertyControls(CodeSnippetBlock, {\n//     codeSnippets: {\n//         title: \"Code Snippets\",\n//         type: ControlType.Array,\n//         control: {\n//             type: ControlType.Object,\n//             controls: {\n//                 language: {\n//                     type: ControlType.String,\n//                 },\n//                 syntax: {\n//                     type: ControlType.Enum,\n//                     options: [\"typescript\", \"javascript\", \"python\", \"curl\"],\n//                 },\n//                 code: {\n//                     type: ControlType.String,\n//                     displayTextArea: true,\n//                 },\n//             },\n//         },\n//     },\n//     apiKeyUrl: {\n//         type: ControlType.String,\n//     },\n//     buttonLabel: {\n//         type: ControlType.String,\n//     },\n//     background: {\n//         type: ControlType.Color,\n//     },\n//     border: {\n//         type: ControlType.Color,\n//     },\n//     codeText: {\n//         type: ControlType.Color,\n//     },\n//     codeHighlight: {\n//         type: ControlType.Color,\n//     },\n//     buttonText: {\n//         type: ControlType.Color,\n//     },\n//     buttonBackground: {\n//         type: ControlType.Color,\n//     },\n//     copyHover: {\n//         type: ControlType.Color,\n//     },\n//     languageBackground: {\n//         type: ControlType.Color,\n//     },\n//     menuBackground: {\n//         type: ControlType.Color,\n//     },\n//     menuBorder: {\n//         type: ControlType.Color,\n//     },\n//     menuItemHover: {\n//         type: ControlType.Color,\n//     },\n//     lineNumberColor: {\n//         type: ControlType.Color,\n//     },\n//     borderRadius: {\n//         type: ControlType.Number,\n//         min: 0,\n//         max: 48,\n//     },\n//     fontSize: {\n//         type: ControlType.Number,\n//         min: 10,\n//         max: 20,\n//     },\n//     lineHeight: {\n//         type: ControlType.Number,\n//         min: 14,\n//         max: 32,\n//     },\n//     codeFontSize: {\n//         type: ControlType.Number,\n//         min: 10,\n//         max: 24,\n//     },\n//     codeLineHeight: {\n//         type: ControlType.Number,\n//         min: 16,\n//         max: 40,\n//     },\n//     copySuccessBackground: {\n//         type: ControlType.Color,\n//     },\n// })\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType}from\"framer\";const DEFAULT_SNIPPETS=[{language:\"Typescript\",syntax:\"typescript\",code:`import { ApiClient } from \"@sdk/client\"\n\nconst client = new ApiClient()\n\nconst response = await client.generate({\n  text: \"Hello there!\",\n  modelId: \"v3\",\n})`},{language:\"Python\",syntax:\"python\",code:`from sdk.client import ApiClient\n\nclient = ApiClient()\n\nresponse = client.generate(\n    text=\"Hello there!\",\n    model_id=\"v3\",\n)`}];const STT_SNIPPETS=[{language:\"cURL\",syntax:\"curl\",code:`curl -X POST https://api.smallest.ai/waves/v1/pulse/get_text \\\\\n     -H \"Authorization: Bearer <BearerAuth>\" \\\\\n     -H \"Content-Type: application/octet-stream\"`}];const TTS_SNIPPETS=[{language:\"cURL\",syntax:\"curl\",code:`curl --request POST \\\\\n  --url \"https://api.smallest.ai/waves/v1/stt/?model=pulse&language=en\" \\\\\n  --header \"Authorization: Bearer $SMALLEST_API_KEY\" \\\\\n  --header \"Content-Type: audio/wav\" \\\\\n  --data-binary \"@audio.wav\"`}];function escapeHtml(text){return text.replaceAll(\"&\",\"&amp;\").replaceAll(\"<\",\"&lt;\").replaceAll(\">\",\"&gt;\");}function tokenize(code,patterns){const tokens=[];let pos=0;while(pos<code.length){let earliest=null;for(const{type,regex}of patterns){regex.lastIndex=pos;const m=regex.exec(code);if(m&&(earliest===null||m.index<earliest.start)){earliest={start:m.index,end:m.index+m[0].length,type};}}if(!earliest){tokens.push({type:null,text:code.slice(pos)});break;}if(earliest.start>pos){tokens.push({type:null,text:code.slice(pos,earliest.start)});}tokens.push({type:earliest.type,text:code.slice(earliest.start,earliest.end)});pos=earliest.end;}return tokens;}function renderTokens(tokens){return tokens.map(t=>{const escaped=escapeHtml(t.text);return t.type?`<span class=\"tok-${t.type}\">${escaped}</span>`:escaped;}).join(\"\");}const JS_PATTERNS=[{type:\"comment\",regex:/\\/\\/[^\\n]*/g},{type:\"string\",regex:/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/g},{type:\"keyword\",regex:/\\b(?:import|from|const|let|var|new|await|return|async)\\b/g},{type:\"property\",regex:/\\b(?:text|modelId)\\b(?=\\s*:)/g},{type:\"variable\",regex:/\\b(?:ApiClient|client|response)\\b/g}];const PY_PATTERNS=[{type:\"comment\",regex:/#[^\\n]*/g},{type:\"string\",regex:/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/g},{type:\"keyword\",regex:/\\b(?:from|import)\\b/g},{type:\"property\",regex:/\\b(?:client|response|text|model_id)\\b(?=\\s*[=:])/g},{type:\"variable\",regex:/\\bApiClient\\b/g}];const CURL_PATTERNS=[{type:\"string\",regex:/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/g},{type:\"command\",regex:/^curl\\b/g},{type:\"flag\",regex:RegExp(\"(?<=^|\\\\s)-[A-Za-z]\\\\b\",\"g\")},{type:\"env\",regex:/\\$[A-Za-z_][A-Za-z0-9_]*/g}];function highlightLine(line,syntax){if(syntax===\"typescript\"||syntax===\"javascript\"){return renderTokens(tokenize(line,JS_PATTERNS));}if(syntax===\"python\"){return renderTokens(tokenize(line,PY_PATTERNS));}if(syntax===\"curl\"){return renderTokens(tokenize(line,CURL_PATTERNS));}return escapeHtml(line);}function buttonHoverBg(hex){const value=hex.replace(\"#\",\"\").trim();if(value.length!==6)return\"#262626\";const r=Math.min(255,parseInt(value.slice(0,2),16)+18);const g=Math.min(255,parseInt(value.slice(2,4),16)+18);const b=Math.min(255,parseInt(value.slice(4,6),16)+18);return`#${r.toString(16).padStart(2,\"0\")}${g.toString(16).padStart(2,\"0\")}${b.toString(16).padStart(2,\"0\")}`;}function stripLayoutOverrides(style){if(!style)return{};const{height,minHeight,maxHeight,...rest}=style;return rest;}function clampNumber(value,fallback,minimum,maximum){const numeric=typeof value===\"number\"?value:Number(value);if(!Number.isFinite(numeric))return fallback;return Math.min(maximum,Math.max(minimum,numeric));}/**\n * @framerIntrinsicWidth 598\n * @framerIntrinsicHeight 520\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function CodeSnippetBlock(props){const{style,controlsLayout=\"row\",appearanceSettings,typographySettings,codeSnippets=DEFAULT_SNIPPETS,snippetPreset=\"custom\",showLanguageDropdown=true,apiKeyUrl=\"\",buttonLabel=\"Get API key\",background:legacyBackground=\"#FFFFFF\",border:legacyBorder=\"#E5E5E5\",codeText:legacyCodeText=\"#404040\",codeHighlight:legacyCodeHighlight=\"#0066CC\",buttonText:legacyButtonText=\"#FAFAFA\",buttonBackground:legacyButtonBackground=\"#171717\",copyHover:legacyCopyHover=\"#F5F5F5\",languageBackground:legacyLanguageBackground=\"#F5F5F5\",menuBackground:legacyMenuBackground=\"#FFFFFF\",menuBorder:legacyMenuBorder=\"#EBEBEB\",menuItemHover:legacyMenuItemHover=\"#FAFAFA\",lineNumberColor:legacyLineNumberColor=\"#D4D4D4\",borderRadius:legacyBorderRadius=24,fontSize:legacyFontSize=14,lineHeight:legacyLineHeight=20,codeFontSize:legacyCodeFontSize=16,codeLineHeight:legacyCodeLineHeight=26,copySuccessBackground:legacyCopySuccessBackground=\"#DCFCE7\"}=props;const customAppearance=appearanceSettings?.customize?appearanceSettings:undefined;const background=customAppearance?.background??legacyBackground;const border=customAppearance?.border??legacyBorder;const codeText=customAppearance?.codeText??legacyCodeText;const codeHighlight=customAppearance?.codeHighlight??legacyCodeHighlight;const buttonText=customAppearance?.buttonText??legacyButtonText;const buttonBackground=customAppearance?.buttonBackground??legacyButtonBackground;const copyHover=customAppearance?.copyHover??legacyCopyHover;const languageBackground=customAppearance?.languageBackground??legacyLanguageBackground;const menuBackground=customAppearance?.menuBackground??legacyMenuBackground;const menuBorder=customAppearance?.menuBorder??legacyMenuBorder;const menuItemHover=customAppearance?.menuItemHover??legacyMenuItemHover;const lineNumberColor=customAppearance?.lineNumberColor??legacyLineNumberColor;const copySuccessBackground=customAppearance?.copySuccessBackground??legacyCopySuccessBackground;const borderRadius=clampNumber(customAppearance?.borderRadius,legacyBorderRadius,0,48);const customTypography=typographySettings?.customize?typographySettings:undefined;const fontSize=clampNumber(customTypography?.fontSize,legacyFontSize,10,20);const lineHeight=clampNumber(customTypography?.lineHeight,legacyLineHeight,14,32);const codeFontSize=clampNumber(customTypography?.codeFontSize,legacyCodeFontSize,10,24);const codeLineHeight=clampNumber(customTypography?.codeLineHeight,legacyCodeLineHeight,16,40);const normalizedPreset=snippetPreset.trim().toLowerCase();const list=normalizedPreset===\"stt\"?STT_SNIPPETS:normalizedPreset===\"tts\"?TTS_SNIPPETS:codeSnippets?.length?codeSnippets:DEFAULT_SNIPPETS;const[index,setIndex]=React.useState(0);const[menuOpen,setMenuOpen]=React.useState(false);const[copied,setCopied]=React.useState(false);React.useEffect(()=>{if(!showLanguageDropdown)setMenuOpen(false);},[showLanguageDropdown]);const[menuPos,setMenuPos]=React.useState({top:0,left:0});const safeIndex=Math.min(index,Math.max(0,list.length-1));const item=list[safeIndex]??list[0];const lines=item.code.split(\"\\n\");const langBtnRef=React.useRef(null);const menuRef=React.useRef(null);const copyTimer=React.useRef(null);const positionMenu=React.useCallback(()=>{if(!langBtnRef.current)return;const rect=langBtnRef.current.getBoundingClientRect();setMenuPos({left:rect.left,top:rect.bottom+8});},[]);React.useEffect(()=>{if(!menuOpen)return;positionMenu();window.addEventListener(\"resize\",positionMenu);window.addEventListener(\"scroll\",positionMenu,true);return()=>{window.removeEventListener(\"resize\",positionMenu);window.removeEventListener(\"scroll\",positionMenu,true);};},[menuOpen,positionMenu]);React.useEffect(()=>{const close=event=>{const target=event.target;if(menuRef.current?.contains(target))return;if(langBtnRef.current?.contains(target))return;setMenuOpen(false);};document.addEventListener(\"click\",close);return()=>document.removeEventListener(\"click\",close);},[]);const copyCode=async()=>{try{await navigator.clipboard.writeText(item.code);setCopied(true);if(copyTimer.current){clearTimeout(copyTimer.current);}copyTimer.current=setTimeout(()=>{setCopied(false);},2200);}catch{setCopied(false);}};const buttonHover=buttonHoverBg(buttonBackground);const fillsHeight=style?.height===\"100%\";return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                @font-face {\n                    font-family: \"Geist Mono Perf\";\n                    font-style: normal;\n                    font-weight: 400;\n                    font-display: swap;\n                    src: url(\"https://fonts.gstatic.com/s/geistmono/v6/or3yQ6H-1_WfwkMZI_qYPLs1a-t7PU0AbeE9KK5U5Cl4PuCTfNg.woff2\") format(\"woff2\");\n                    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n                }\n\n                .code-snippet-root .tok-keyword {\n                    color: #7c3aed;\n                }\n\n                .code-snippet-root .tok-property,\n                .code-snippet-root .tok-variable {\n                    color: var(--highlight);\n                }\n\n                .code-snippet-root .tok-string {\n                    color: #166534;\n                }\n\n                .code-snippet-root .tok-comment {\n                    color: #737373;\n                }\n\n                .code-snippet-root .tok-command {\n                    color: #7c3aed;\n                }\n\n                .code-snippet-root .tok-flag {\n                    color: #be185d;\n                }\n\n                .code-snippet-root .tok-env {\n                    color: #0f766e;\n                }\n\n                .code-snippet-root .code-scroll {\n                    width: 100%;\n                    overflow-x: auto;\n                    overflow-y: hidden;\n\n                    scrollbar-width: none;\n                    -ms-overflow-style: none;\n\n                    overscroll-behavior-x: contain;\n                    overscroll-behavior-y: auto;\n\n                    touch-action: pan-y pan-x;\n\n                    -webkit-overflow-scrolling: touch;\n                }\n\n                .code-snippet-root .code-scroll::-webkit-scrollbar {\n                    display: none;\n                    width: 0;\n                    height: 0;\n                }\n\n                .code-snippet-root .icon-btn,\n                .code-snippet-root .lang-btn,\n                .code-snippet-root .cta-btn {\n                    transition:\n                        transform 120ms cubic-bezier(0.4, 0, 0.2, 1),\n                        background-color 160ms ease,\n                        box-shadow 160ms ease;\n                }\n\n                .code-snippet-root .icon-btn:hover {\n                    background: var(--copy-hover) !important;\n                }\n\n                .code-snippet-root .icon-btn[data-copied=\"true\"] {\n                    background: var(--copy-success) !important;\n                }\n\n                .code-snippet-root .lang-btn:hover,\n                .code-snippet-root .lang-btn[data-open=\"true\"] {\n                    background: var(--language-hover) !important;\n                }\n\n                .code-snippet-root .cta-btn:hover {\n                    background: var(--button-hover) !important;\n                    box-shadow:\n                        0 2px 8px rgba(0, 0, 0, 0.18);\n                }\n\n                .code-snippet-root .icon-btn:active,\n                .code-snippet-root .lang-btn:active,\n                .code-snippet-root .cta-btn:active {\n                    transform: scale(0.96);\n                }\n            `}),/*#__PURE__*/_jsx(\"div\",{className:\"code-snippet-root\",style:{position:\"relative\",width:\"100%\",height:fillsHeight?\"100%\":\"max-content\",minHeight:fillsHeight?0:\"max-content\",overflow:fillsHeight?\"auto\":\"visible\",boxSizing:\"border-box\",transition:\"height 280ms cubic-bezier(0.4, 0, 0.2, 1)\",[\"--highlight\"]:codeHighlight,[\"--copy-hover\"]:copyHover,[\"--copy-success\"]:copySuccessBackground,[\"--language-hover\"]:languageBackground,[\"--button-hover\"]:buttonHover,...stripLayoutOverrides(style)},children:/*#__PURE__*/_jsxs(\"div\",{style:{background,border:`1px solid ${border}`,borderRadius,padding:16,overflow:\"hidden\",boxSizing:\"border-box\",fontFamily:'\"Aeonik Regular\", Arial, sans-serif'},children:[/*#__PURE__*/_jsx(\"div\",{className:\"code-scroll\",children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"grid\",gridTemplateColumns:\"28px max-content\",columnGap:10,width:\"max-content\",minWidth:\"100%\",padding:\"12px 24px 12px 6px\",boxSizing:\"border-box\",fontFamily:'\"Geist Mono Perf\", \"Geist Mono\", monospace',fontSize:codeFontSize,lineHeight:`${codeLineHeight}px`,color:codeText},children:lines.map((line,idx)=>/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{style:{position:\"sticky\",left:0,zIndex:2,background,color:lineNumberColor,textAlign:\"right\",paddingRight:4,userSelect:\"none\",boxShadow:`10px 0 18px -4px ${background}, 4px 0 12px -2px ${background}`},children:String(idx+1).padStart(2,\"0\")}),/*#__PURE__*/_jsx(\"span\",{style:{whiteSpace:\"pre\"},dangerouslySetInnerHTML:{__html:highlightLine(line,item.syntax)||\"&nbsp;\"}})]},idx))})}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:controlsLayout===\"stack\"?\"column\":\"row\",justifyContent:\"space-between\",alignItems:controlsLayout===\"stack\"?\"stretch\":\"center\",gap:controlsLayout===\"stack\"?8:undefined,marginTop:24},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:4},children:[/*#__PURE__*/_jsx(\"button\",{className:\"icon-btn\",\"data-copied\":copied?\"true\":undefined,onClick:copyCode,\"aria-label\":copied?\"Code copied\":\"Copy code\",title:copied?\"Copied\":\"Copy code\",style:{width:40,height:40,border:\"none\",borderRadius:12,background:\"transparent\",cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:!copied?/*#__PURE__*/_jsxs(\"svg\",{width:\"18\",height:\"18\",viewBox:\"0 0 18 18\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M6.5625 6.5625V3C6.5625 2.48223 6.98223 2.0625 7.5 2.0625H15C15.5178 2.0625 15.9375 2.48223 15.9375 3V10.5C15.9375 11.0178 15.5178 11.4375 15 11.4375H11.4375\",stroke:\"#737373\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M3 6.5625H10.5C11.0178 6.5625 11.4375 6.98223 11.4375 7.5V15C11.4375 15.5178 11.0178 15.9375 10.5 15.9375H3C2.48223 15.9375 2.0625 15.5178 2.0625 15V7.5C2.0625 6.98223 2.48223 6.5625 3 6.5625Z\",stroke:\"#737373\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]}):/*#__PURE__*/_jsxs(\"svg\",{width:\"18\",height:\"18\",viewBox:\"0 0 24 24\",children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"12\",cy:\"12\",r:\"10\",fill:\"#16a34a\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M8 12.5l2.2 2.2 5.8-5.8\",stroke:\"#ffffff\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",fill:\"none\"})]})}),showLanguageDropdown?/*#__PURE__*/_jsxs(\"button\",{ref:langBtnRef,className:\"lang-btn\",\"data-open\":menuOpen?\"true\":\"false\",onClick:()=>setMenuOpen(!menuOpen),\"aria-haspopup\":\"menu\",\"aria-expanded\":menuOpen,\"aria-label\":`Select code language. Current language: ${item.language}`,style:{height:40,border:\"none\",borderRadius:12,display:\"flex\",alignItems:\"center\",gap:8,padding:\"8px 16px\",background:\"transparent\",cursor:\"pointer\",fontFamily:'\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',fontSize,lineHeight:`${lineHeight}px`,fontWeight:500,color:codeText},children:[item.language,/*#__PURE__*/_jsx(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 24 24\",fill:\"none\",style:{transition:\"transform 180ms ease\",transform:menuOpen?\"rotate(180deg)\":\"rotate(0deg)\"},children:/*#__PURE__*/_jsx(\"path\",{d:\"M6 9l6 6 6-6\",stroke:\"#737373\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})})]}):/*#__PURE__*/_jsx(\"span\",{style:{height:40,display:\"flex\",alignItems:\"center\",padding:\"8px 16px\",boxSizing:\"border-box\",fontFamily:'\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',fontSize,fontWeight:500,color:codeText},children:item.language})]}),/*#__PURE__*/_jsx(\"button\",{className:\"cta-btn\",onClick:()=>{if(apiKeyUrl?.trim()){window.open(apiKeyUrl.trim(),\"_blank\",\"noopener,noreferrer\");}},style:{border:\"none\",borderRadius:12,background:buttonBackground,color:buttonText,padding:\"10px 18px\",cursor:\"pointer\",fontFamily:'\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',fontSize,lineHeight:`${lineHeight}px`,fontWeight:500},children:buttonLabel})]})]})}),showLanguageDropdown&&menuOpen&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{ref:menuRef,style:{position:\"fixed\",left:menuPos.left,top:menuPos.top,zIndex:1e4,minWidth:170,padding:6,border:`1px solid ${menuBorder}`,borderRadius:12,background:menuBackground,boxShadow:\"0 10px 26px rgba(23,23,23,0.1)\"},children:list.map((snippet,i)=>/*#__PURE__*/_jsx(\"button\",{onClick:()=>{setIndex(i);setMenuOpen(false);},style:{width:\"100%\",border:\"none\",borderRadius:8,padding:\"8px 10px\",textAlign:\"left\",background:i===safeIndex?menuItemHover:\"transparent\",cursor:\"pointer\",fontFamily:'\"Aeonik Medium\", \"Aeonik Regular\", Arial, sans-serif',fontSize,color:codeText},children:snippet.language},`${snippet.language}-${i}`))}),document.body)]});}addPropertyControls(CodeSnippetBlock,{snippetPreset:{title:\"Snippet Preset\",type:ControlType.Enum,options:[\"custom\",\"stt\",\"tts\"],optionTitles:[\"Custom\",\"Speech to Text\",\"Text to Speech\"],defaultValue:\"custom\"},codeSnippets:{title:\"Code Snippets\",type:ControlType.Array,hidden:props=>props.snippetPreset===\"stt\"||props.snippetPreset===\"tts\",maxCount:12,defaultValue:DEFAULT_SNIPPETS,control:{type:ControlType.Object,controls:{language:{type:ControlType.String,title:\"Language\",defaultValue:\"JavaScript\"},syntax:{type:ControlType.Enum,title:\"Syntax\",options:[\"typescript\",\"javascript\",\"python\",\"curl\"],optionTitles:[\"TypeScript\",\"JavaScript\",\"Python\",\"cURL\"],defaultValue:\"javascript\"},code:{type:ControlType.String,title:\"Code\",displayTextArea:true,defaultValue:\"\"}}}},showLanguageDropdown:{title:\"Language Dropdown\",type:ControlType.Boolean,defaultValue:true},buttonLabel:{title:\"Button Label\",type:ControlType.String,defaultValue:\"Get API key\"},apiKeyUrl:{type:ControlType.Link,defaultValue:\"\"},controlsLayout:{type:ControlType.Enum,title:\"Controls Layout\",options:[\"row\",\"stack\"],optionTitles:[\"Row\",\"Stack\"],defaultValue:\"row\",displaySegmentedControl:true,description:\"Stack places Copy and language above the API button. Set per breakpoint.\"},appearanceSettings:{type:ControlType.Object,title:\"Appearance\",icon:\"color\",controls:{customize:{type:ControlType.Boolean,title:\"Customize\",defaultValue:false},background:{type:ControlType.Color,title:\"Surface\",defaultValue:\"#FFFFFF\",hidden:value=>!value.customize},border:{type:ControlType.Color,title:\"Border\",defaultValue:\"#E5E5E5\",hidden:value=>!value.customize},codeText:{type:ControlType.Color,title:\"Code Text\",defaultValue:\"#404040\",hidden:value=>!value.customize},codeHighlight:{type:ControlType.Color,title:\"Highlight\",defaultValue:\"#0066CC\",hidden:value=>!value.customize},buttonText:{type:ControlType.Color,title:\"Button Text\",defaultValue:\"#FAFAFA\",hidden:value=>!value.customize},buttonBackground:{type:ControlType.Color,title:\"Button Surface\",defaultValue:\"#171717\",hidden:value=>!value.customize},copyHover:{type:ControlType.Color,title:\"Copy Hover\",defaultValue:\"#F5F5F5\",hidden:value=>!value.customize},copySuccessBackground:{type:ControlType.Color,title:\"Copy Success\",defaultValue:\"#DCFCE7\",hidden:value=>!value.customize},languageBackground:{type:ControlType.Color,title:\"Language Hover\",defaultValue:\"#F5F5F5\",hidden:value=>!value.customize},menuBackground:{type:ControlType.Color,title:\"Menu Surface\",defaultValue:\"#FFFFFF\",hidden:value=>!value.customize},menuBorder:{type:ControlType.Color,title:\"Menu Border\",defaultValue:\"#EBEBEB\",hidden:value=>!value.customize},menuItemHover:{type:ControlType.Color,title:\"Menu Item\",defaultValue:\"#FAFAFA\",hidden:value=>!value.customize},lineNumberColor:{type:ControlType.Color,title:\"Line Numbers\",defaultValue:\"#D4D4D4\",hidden:value=>!value.customize},borderRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:20,min:0,max:48,step:4,unit:\"px\",hidden:value=>!value.customize}}},typographySettings:{type:ControlType.Object,title:\"Typography\",icon:\"object\",controls:{customize:{type:ControlType.Boolean,title:\"Customize\",defaultValue:false},fontSize:{type:ControlType.Number,title:\"Controls Size\",defaultValue:14,min:10,max:20,unit:\"px\",hidden:value=>!value.customize},lineHeight:{type:ControlType.Number,title:\"Controls Line\",defaultValue:20,min:14,max:32,unit:\"px\",hidden:value=>!value.customize},codeFontSize:{type:ControlType.Number,title:\"Code Size\",defaultValue:16,min:10,max:24,unit:\"px\",hidden:value=>!value.customize},codeLineHeight:{type:ControlType.Number,title:\"Code Line\",defaultValue:26,min:16,max:40,unit:\"px\",hidden:value=>!value.customize}}},background:{type:ControlType.Color,defaultValue:\"#FFFFFF\",hidden:true},border:{type:ControlType.Color,defaultValue:\"#E5E5E5\",hidden:true},codeText:{type:ControlType.Color,defaultValue:\"#404040\",hidden:true},codeHighlight:{type:ControlType.Color,defaultValue:\"#0066CC\",hidden:true},buttonText:{type:ControlType.Color,defaultValue:\"#FAFAFA\",hidden:true},buttonBackground:{type:ControlType.Color,defaultValue:\"#171717\",hidden:true},copyHover:{type:ControlType.Color,defaultValue:\"#F5F5F5\",hidden:true},languageBackground:{type:ControlType.Color,defaultValue:\"#F5F5F5\",hidden:true},menuBackground:{type:ControlType.Color,defaultValue:\"#FFFFFF\",hidden:true},menuBorder:{type:ControlType.Color,defaultValue:\"#EBEBEB\",hidden:true},menuItemHover:{type:ControlType.Color,defaultValue:\"#FAFAFA\",hidden:true},lineNumberColor:{type:ControlType.Color,defaultValue:\"#D4D4D4\",hidden:true},borderRadius:{type:ControlType.Number,defaultValue:24,hidden:true},fontSize:{type:ControlType.Number,defaultValue:14,hidden:true},lineHeight:{type:ControlType.Number,defaultValue:20,hidden:true},codeFontSize:{type:ControlType.Number,defaultValue:16,hidden:true},codeLineHeight:{type:ControlType.Number,defaultValue:26,hidden:true},copySuccessBackground:{type:ControlType.Color,defaultValue:\"#DCFCE7\",hidden:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CodeSnippetBlock\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"520\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"598\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Code_Block_v3.map"],"mappings":"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"}