diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 73be8b752..d77076523 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -9,6 +9,7 @@ import { resourcesSidebar } from './sidebar/resources'; import getStructuredData from './getStructuredData'; import { createGeneralOGImage, createIconOGImage } from './createOGImage'; import llmstxt from 'vitepress-plugin-llms'; +import getHead from './getHead'; const defaultSandpackCSS = await readFile( fileURLToPath(new URL('./theme/sandpack-default.css', import.meta.url)), @@ -76,121 +77,7 @@ export default defineConfig({ }), ], }, - head: [ - [ - 'link', - { - rel: 'preconnect', - href: 'https://analytics.lucide.dev', - }, - ], - [ - 'script', - { - src: 'https://analytics.lucide.dev/js/script.js', - 'data-domain': 'lucide.dev', - defer: '', - }, - ], - [ - 'meta', - { - property: 'og:locale', - content: 'en_US', - }, - ], - [ - 'meta', - { - property: 'og:type', - content: 'website', - }, - ], - [ - 'meta', - { - property: 'og:site_name', - content: title, - }, - ], - [ - 'meta', - { - property: 'og:title', - content: socialTitle, - }, - ], - [ - 'meta', - { - property: 'og:description', - content: description, - }, - ], - [ - 'meta', - { - property: 'og:url', - content: 'https://lucide.dev', - }, - ], - [ - 'meta', - { - property: 'og:image', - content: 'https://lucide.dev/og.png', - }, - ], - [ - 'meta', - { - property: 'og:image:width', - content: '1200', - }, - ], - [ - 'meta', - { - property: 'og:image:height', - content: '630', - }, - ], - [ - 'meta', - { - property: 'og:image:type', - content: 'image/png', - }, - ], - [ - 'meta', - { - property: 'twitter:card', - content: 'summary_large_image', - }, - ], - [ - 'meta', - { - property: 'twitter:title', - content: socialTitle, - }, - ], - [ - 'meta', - { - property: 'twitter:description', - content: description, - }, - ], - [ - 'meta', - { - property: 'twitter:image', - content: 'https://lucide.dev/og.png', - }, - ], - ], + head: getHead({ title, socialTitle, description }), async transformPageData(pageData) { pageData.frontmatter.head ??= []; if ( diff --git a/docs/.vitepress/getHead.ts b/docs/.vitepress/getHead.ts new file mode 100644 index 000000000..76be7c299 --- /dev/null +++ b/docs/.vitepress/getHead.ts @@ -0,0 +1,178 @@ +import { HeadConfig } from "vitepress" + +interface GetHeadOptions { + title: string; + socialTitle: string; + description: string; +} + +const getHead = ({ title, socialTitle, description }: GetHeadOptions): HeadConfig[] => [ + // Favicons and meta tags + [ + 'link', + { + rel: 'shortcut icon', + href: '/favicon.ico', + sizes: 'any', + }, + ], + [ + 'link', + { + rel: 'icon', + href: '/favicon-dark.svg', + type: 'image/svg+xml', + }, + ], + [ + 'link', + { + rel: 'apple-touch-icon', + href: '/apple-touch-icon.png', + sizes: '180x180', + }, + ], + [ + 'link', + { + rel: 'icon', + type: 'image/png', + href: '/favicon-32x32.png', + sizes: '32x32', + }, + ], + [ + 'link', + { + rel: 'icon', + type: 'image/png', + href: '/favicon-16x16.png', + sizes: '16x16', + }, + ], + [ + 'link', + { + rel: 'mask-icon', + href: '/safari-pinned-tab.svg', + color: '#020308', + }, + ], + // Analytics + [ + 'link', + { + rel: 'preconnect', + href: 'https://analytics.lucide.dev', + }, + ], + [ + 'script', + { + src: 'https://analytics.lucide.dev/js/script.js', + 'data-domain': 'lucide.dev', + defer: '', + }, + ], + // Open Graph and Twitter Card meta tags + [ + 'meta', + { + property: 'og:locale', + content: 'en_US', + }, + ], + [ + 'meta', + { + property: 'og:type', + content: 'website', + }, + ], + [ + 'meta', + { + property: 'og:site_name', + content: title, + }, + ], + [ + 'meta', + { + property: 'og:title', + content: socialTitle, + }, + ], + [ + 'meta', + { + property: 'og:description', + content: description, + }, + ], + [ + 'meta', + { + property: 'og:url', + content: 'https://lucide.dev', + }, + ], + [ + 'meta', + { + property: 'og:image', + content: 'https://lucide.dev/og.png', + }, + ], + [ + 'meta', + { + property: 'og:image:width', + content: '1200', + }, + ], + [ + 'meta', + { + property: 'og:image:height', + content: '630', + }, + ], + [ + 'meta', + { + property: 'og:image:type', + content: 'image/png', + }, + ], + [ + 'meta', + { + property: 'twitter:card', + content: 'summary_large_image', + }, + ], + [ + 'meta', + { + property: 'twitter:title', + content: socialTitle, + }, + ], + [ + 'meta', + { + property: 'twitter:description', + content: description, + }, + ], + [ + 'meta', + { + property: 'twitter:image', + content: 'https://lucide.dev/og.png', + }, + ], +] + +export default getHead