(codeRef: RefObject<HTMLDivElement | null>, urls: {[name: string]: string})
| 323 | } |
| 324 | |
| 325 | function getExampleCode(codeRef: RefObject<HTMLDivElement | null>, urls: {[name: string]: string}) { |
| 326 | let code = getTextContent(codeRef.current!.querySelector('pre')!); |
| 327 | let fileTabs = codeRef.current!.closest('[data-files]'); |
| 328 | if (fileTabs) { |
| 329 | let example = fileTabs.querySelector('[data-example] pre'); |
| 330 | if (example) { |
| 331 | code = getTextContent(example); |
| 332 | } |
| 333 | } |
| 334 | |
| 335 | if (!code.includes('export default function')) { |
| 336 | // Export the last function |
| 337 | code = code.replace( |
| 338 | /\nfunction ([^(]+)((.|\n)+\n\}\n?)$/, |
| 339 | '\nexport default function Example$2' |
| 340 | ); |
| 341 | } |
| 342 | |
| 343 | return ( |
| 344 | code |
| 345 | // Add function wrapper around raw JSX in examples. |
| 346 | .replace(/\n<((?:.|\n)+)/, (_, code) => { |
| 347 | let res = '\nexport default function Example() {\n return (\n <'; |
| 348 | let lines = code.split('\n'); |
| 349 | res += lines.shift(); |
| 350 | |
| 351 | for (let line of lines) { |
| 352 | res += '\n ' + line; |
| 353 | } |
| 354 | |
| 355 | res += '\n );\n}\n'; |
| 356 | return res; |
| 357 | }) |
| 358 | // Resolve urls |
| 359 | .replace(/import (.*?) from ['"](url:.*?)['"]/g, (_, name, specifier) => { |
| 360 | return `const ${name} = '${urls[specifier]}'`; |
| 361 | }) |
| 362 | ); |
| 363 | } |
| 364 | |
| 365 | // const V0 = createIcon(props => ( |
| 366 | // <svg viewBox="0 0 40 20" {...props}> |
no test coverage detected