import { bundledLanguages, createHighlighter, type ThemeRegistration } from 'shiki'; type CodeExampleType = { title: string; language: string; code: string; }[]; const getIconCodes = (): CodeExampleType => { return [ { language: 'js', title: 'Vanilla', code: `\ import { createIcons, icons } from 'lucide'; createIcons({ icons }); document.body.append('');\ `, }, { language: 'tsx', title: 'React', code: `import { $PascalCase } from 'lucide-react'; const App = () => { return ( <$PascalCase /> ); }; export default App; `, }, { language: 'vue', title: 'Vue', code: ` `, }, { language: 'svelte', title: 'Svelte', code: ` <$PascalCase /> `, }, { language: 'tsx', title: 'Preact', code: `import { $PascalCase } from 'lucide-preact'; const App = () => { return ( <$PascalCase /> ); }; export default App; `, }, { language: 'tsx', title: 'Solid', code: `import { $PascalCase } from 'lucide-solid'; const App = () => { return ( <$PascalCase /> ); }; export default App; `, }, { language: 'tsx', title: 'Angular', code: `// app.module.ts import { LucideAngularModule, $PascalCase } from 'lucide-angular'; @NgModule({ imports: [ LucideAngularModule.pick({ $PascalCase }) ], }) // app.component.html `, }, { language: 'html', title: 'Icon font', code: `
`, }, ]; }; export type ThemeOptions = | ThemeRegistration | { light: ThemeRegistration; dark: ThemeRegistration }; const highLightCode = async (code: string, lang: string, active?: boolean) => { const highlighter = await createHighlighter({ themes: ['github-light', 'github-dark'], langs: Object.keys(bundledLanguages), }); const highlightedCode = highlighter .codeToHtml(code, { lang, themes: { light: 'github-light', dark: 'github-dark', }, defaultColor: false, }) .replace('shiki-themes', 'shiki-themes vp-code'); return `
${lang} ${highlightedCode}
`; }; export default async function createCodeExamples() { const codes = getIconCodes(); const codeExamplePromises = codes.map(async ({ title, language, code }, index) => { const isFirst = index === 0; const codeString = await highLightCode(code, language, isFirst); return { title, language: language, code: codeString, }; }); return Promise.all(codeExamplePromises); }