-
+
-
+
{{ author.name }}
•
@@ -29,19 +33,16 @@ const date = useBlogDate(() => frontmatter.value.date);
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index b0de0d303..c4813e140 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -8,6 +8,7 @@ import {
prepareTypedocSidebar,
} from './utils/menus';
import { meta, script } from './utils/head';
+// @ts-expect-error; it isn't TypeScript lib
import footnote from 'markdown-it-footnote';
import { version as wxtVersion } from '../../packages/wxt/package.json';
import { version as i18nVersion } from '../../packages/i18n/package.json';
@@ -26,15 +27,14 @@ import { Feed } from 'feed';
import { writeFile } from 'node:fs/promises';
import { join } from 'node:path';
-const origin = 'https://wxt.dev';
-
-const title = 'Next-gen Web Extension Framework';
-const titleSuffix = ' – WXT';
-const description =
+const ORIGIN = 'https://wxt.dev';
+const TITLE = 'Next-gen Web Extension Framework';
+const TITLE_SUFFIX = ' – WXT';
+const DESCRIPTION =
"WXT provides the best developer experience, making it quick, easy, and fun to develop web extensions. With built-in utilities for building, zipping, and publishing your extension, it's easy to get started.";
-const ogTitle = `${title}${titleSuffix}`;
-const ogUrl = origin;
-const ogImage = `${origin}/social-preview.png`;
+const OG_TITLE = `${TITLE}${TITLE_SUFFIX}`;
+const OG_URL = ORIGIN;
+const OG_IMAGE = `${ORIGIN}/social-preview.png`;
const otherPackages = {
analytics: analyticsVersion,
@@ -65,12 +65,13 @@ const knowledge = addKnowledge({
export default defineConfig({
extends: knowledge,
- titleTemplate: `:title${titleSuffix}`,
+ titleTemplate: `:title${TITLE_SUFFIX}`,
title: 'WXT',
- description,
+ description: DESCRIPTION,
vite: {
clearScreen: false,
plugins: [
+ // @ts-expect-error: Vite version mismatch between this project and the plugin
groupIconVitePlugin({
customIcon: {
'wxt.config.ts': localIconLoader(
@@ -83,7 +84,7 @@ export default defineConfig({
},
lastUpdated: true,
sitemap: {
- hostname: origin,
+ hostname: ORIGIN,
},
async buildEnd(site) {
@@ -97,27 +98,25 @@ export default defineConfig({
copyright: 'MIT',
id: 'wxt',
title: 'WXT Blog',
- link: `${origin}/blog`,
+ link: `${ORIGIN}/blog`,
});
posts.forEach((post) => {
feed.addItem({
- date: post.frontmatter.date,
- link: new URL(post.url, origin).href,
+ date: new Date(post.frontmatter.date),
+ link: new URL(post.url, ORIGIN).href,
title: post.frontmatter.title,
description: post.frontmatter.description,
});
});
- // console.log('rss.xml:');
- // console.log(feed.rss2());
await writeFile(join(site.outDir, 'rss.xml'), feed.rss2(), 'utf8');
},
head: [
meta('og:type', 'website'),
- meta('og:title', ogTitle),
- meta('og:image', ogImage),
- meta('og:url', ogUrl),
- meta('og:description', description),
+ meta('og:title', OG_TITLE),
+ meta('og:image', OG_IMAGE),
+ meta('og:url', OG_URL),
+ meta('og:description', DESCRIPTION),
meta('twitter:card', 'summary_large_image', { useName: true }),
script('https://umami.aklinker1.io/script.js', {
'data-website-id': 'c1840c18-a12c-4a45-a848-55ae85ef7915',
diff --git a/docs/.vitepress/loaders/blog.data.ts b/docs/.vitepress/loaders/blog.data.ts
index 980fd820f..411bb4f78 100644
--- a/docs/.vitepress/loaders/blog.data.ts
+++ b/docs/.vitepress/loaders/blog.data.ts
@@ -1,3 +1,20 @@
-import { createContentLoader } from 'vitepress';
+import { type ContentData, createContentLoader } from 'vitepress';
-export default createContentLoader('blog/*.md');
+export interface PostFrontmatter {
+ title: string;
+ description?: string;
+ date: string;
+ authors: { name: string; github: string }[];
+}
+
+export interface Post
+ extends Omit, Omit {
+ date: Date;
+}
+
+declare const data: Array;
+export { data };
+
+export default createContentLoader<
+ Array
+>('blog/*.md');
diff --git a/docs/.vitepress/loaders/cli.data.ts b/docs/.vitepress/loaders/cli.data.ts
index 77327e703..f2bb8d2d3 100644
--- a/docs/.vitepress/loaders/cli.data.ts
+++ b/docs/.vitepress/loaders/cli.data.ts
@@ -54,8 +54,3 @@ async function getPublishExtensionHelp(command: string): Promise {
);
return res.replace(/\$ publish-extension/g, '$ wxt submit');
}
-
-export interface Command {
- name: string;
- docs: string;
-}
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
index 275cd0c36..8fde4b238 100644
--- a/docs/.vitepress/theme/custom.css
+++ b/docs/.vitepress/theme/custom.css
@@ -1,9 +1,21 @@
+/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */
/* Colors */
:root {
--wxt-c-green-1: #0b8a00;
--wxt-c-green-2: #096600;
--wxt-c-green-3: #096600;
--wxt-c-green-soft: rgba(11, 138, 0, 0.14);
+
+ --vp-c-brand-1: var(--wxt-c-green-1);
+ --vp-c-brand-2: var(--wxt-c-green-2);
+ --vp-c-brand-3: var(--wxt-c-green-3);
+ --vp-c-brand-soft: var(--wxt-c-green-soft);
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
}
.dark {
@@ -13,17 +25,7 @@
--wxt-c-green-soft: rgba(103, 212, 94, 0.14);
}
-/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */
-
-:root {
- --vp-c-brand-1: var(--wxt-c-green-1);
- --vp-c-brand-2: var(--wxt-c-green-2);
- --vp-c-brand-3: var(--wxt-c-green-3);
- --vp-c-brand-soft: var(--wxt-c-green-soft);
-}
-
/* Customize Individual Components */
-
.vp-doc .no-vertical-dividers th,
.vp-doc .no-vertical-dividers td {
border: none;
@@ -37,20 +39,15 @@ body {
overflow-y: scroll;
}
-.VPSidebar {
- user-select: none;
-}
-
.VPSidebarItem .badge {
- display: inline-block;
- min-width: 1.6em;
- padding: 0.3em 0.4em 0.2em;
- border-radius: 1rem;
- font-size: 0.75em;
- line-height: 1;
- margin-left: 0.5rem;
- text-align: center;
- vertical-align: middle;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 1.75em;
+ height: 1.75em;
+ border-radius: 10rem;
+ font-size: 0.8em;
+ margin-left: 0.25rem;
background-color: var(--vp-c-default-2);
}
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
index e616c58a7..1c45031e5 100644
--- a/docs/.vitepress/theme/index.ts
+++ b/docs/.vitepress/theme/index.ts
@@ -6,10 +6,11 @@ import ExampleSearch from '../components/ExampleSearch.vue';
import BlogLayout from '../components/BlogLayout.vue';
import './custom.css';
import 'virtual:group-icons.css';
+import type { EnhanceAppContext } from 'vitepress/client';
export default {
extends: DefaultTheme,
- enhanceApp(ctx) {
+ enhanceApp(ctx: EnhanceAppContext) {
ctx.app
.component('Icon', Icon)
.component('EntrypointPatterns', EntrypointPatterns)
diff --git a/docs/.vitepress/utils/head.ts b/docs/.vitepress/utils/head.ts
index 5c776c965..d6d8adf91 100644
--- a/docs/.vitepress/utils/head.ts
+++ b/docs/.vitepress/utils/head.ts
@@ -1,4 +1,4 @@
-import { HeadConfig } from 'vitepress/types/shared';
+import type { HeadConfig } from 'vitepress';
export function meta(
property: string,
diff --git a/docs/.vitepress/utils/menus.ts b/docs/.vitepress/utils/menus.ts
index 5eadec1ed..c888206d5 100644
--- a/docs/.vitepress/utils/menus.ts
+++ b/docs/.vitepress/utils/menus.ts
@@ -1,8 +1,6 @@
import { DefaultTheme } from 'vitepress';
type SidebarItem = DefaultTheme.SidebarItem;
-type NavItem = DefaultTheme.NavItem;
-type NavItemWithLink = DefaultTheme.NavItemWithLink;
type NavItemWithChildren = DefaultTheme.NavItemWithChildren;
type NavItemChildren = DefaultTheme.NavItemChildren;
@@ -19,7 +17,7 @@ export function navItem(text: string, arg2?: unknown): any {
}
export function menuRoot(items: SidebarItem[]) {
- return items.map((item, index) => {
+ return items.map((item) => {
// item.collapsed = false; // uncomment to expand all level-0 items
return item;
});
@@ -60,12 +58,6 @@ export function menuGroup(
throw Error('Unknown overload');
}
-export function menuItems(items: SidebarItem[]) {
- return {
- items,
- };
-}
-
export function menuItem(
text: string,
link: string,
@@ -102,6 +94,5 @@ export function prepareTypedocSidebar(items: SidebarItem[]) {
// process
prepareItems(filtered);
- // return
return filtered;
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b1a2f73d3..0da277a2c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4328,8 +4328,8 @@ packages:
'@testing-library/jest-dom':
optional: true
- vite@5.4.19:
- resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -5908,9 +5908,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@20.19.13)(sass@1.97.0))(vue@3.5.25(typescript@5.9.3))':
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.13)(sass@1.97.0))(vue@3.5.25(typescript@5.9.3))':
dependencies:
- vite: 5.4.19(@types/node@20.19.13)(sass@1.97.0)
+ vite: 5.4.21(@types/node@20.19.13)(sass@1.97.0)
vue: 3.5.25(typescript@5.9.3)
'@vitejs/plugin-vue@6.0.1(vite@7.3.0(@types/node@20.19.13)(jiti@2.6.1)(sass@1.97.0)(tsx@4.21.0)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))':
@@ -8510,7 +8510,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vite@5.4.19(@types/node@20.19.13)(sass@1.97.0):
+ vite@5.4.21(@types/node@20.19.13)(sass@1.97.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
@@ -8567,7 +8567,7 @@ snapshots:
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@20.19.13)(sass@1.97.0))(vue@3.5.25(typescript@5.9.3))
+ '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@20.19.13)(sass@1.97.0))(vue@3.5.25(typescript@5.9.3))
'@vue/devtools-api': 7.7.7
'@vue/shared': 3.5.21
'@vueuse/core': 12.8.2(typescript@5.9.3)
@@ -8576,7 +8576,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 7.1.2
shiki: 2.5.0
- vite: 5.4.19(@types/node@20.19.13)(sass@1.97.0)
+ vite: 5.4.21(@types/node@20.19.13)(sass@1.97.0)
vue: 3.5.25(typescript@5.9.3)
optionalDependencies:
postcss: 8.5.6