diff --git a/docs/app/source.tsx b/docs/app/source.tsx
index be6b4e919..3fa4abdbe 100644
--- a/docs/app/source.tsx
+++ b/docs/app/source.tsx
@@ -1,9 +1,10 @@
-import { docs, reactDocs, breezeDocs, lynxDocs } from "@/.source";
+import { breezeDocs, docs, lynxDocs, reactDocs } from "@/.source";
import { getRootageMetadata } from "@/components/rootage";
import { IconContainer } from "@/components/ui/icon";
import type { Node, Root } from "fumadocs-core/page-tree";
import { loader } from "fumadocs-core/source";
+import { NotificationBadge } from "@seed-design/react";
import { icons } from "lucide-react";
const DeprecatedBadge = () => {
@@ -14,6 +15,19 @@ const DeprecatedBadge = () => {
);
};
+const UpdatedBadge = () => {
+ return ;
+};
+
+const RECENTLY_UPDATED_DAYS = 14;
+
+function isRecentlyUpdated(lastModified: Date | undefined): boolean {
+ if (!lastModified) return false;
+ const fourteenDaysAgo = new Date();
+ fourteenDaysAgo.setDate(fourteenDaysAgo.getDate() - RECENTLY_UPDATED_DAYS);
+ return new Date(lastModified) > fourteenDaysAgo;
+}
+
function getComponentIdFromUrl(url: string): string | null {
const urlParts = url.split("/");
const isComponentPage = urlParts.includes("components");
@@ -27,18 +41,25 @@ async function transformPageTreeWithBadges(
try {
async function transformNode(node: Node): Promise {
if (node.type === "page") {
- const componentId = getComponentIdFromUrl(node.url);
const page = sourceLoader.getNodePage(node);
- if (!componentId) return node;
-
- // 1. Check frontmatter deprecated (priority 1)
- const frontmatterDeprecated = page?.data?.deprecated;
- // 2. Get rootage metadata once if needed
- const metadata = frontmatterDeprecated ? null : await getRootageMetadata(componentId);
- // Determine deprecated status and message
- const deprecated = frontmatterDeprecated ? true : Boolean(metadata?.deprecated);
- // 3. Check updated status (priority 3) - only if not deprecated
- if (deprecated) {
+ if (!page) return node;
+
+ // 1. Check deprecated status (only for component pages)
+ const componentId = getComponentIdFromUrl(node.url);
+ let isDeprecated = false;
+ if (componentId) {
+ const frontmatterDeprecated = page?.data?.deprecated;
+ const metadata = frontmatterDeprecated ? null : await getRootageMetadata(componentId);
+ isDeprecated = frontmatterDeprecated ? true : Boolean(metadata?.deprecated);
+ }
+
+ // 2. Check updated status (for all pages, only if not deprecated)
+ // Use fumadocs lastModified from page.data.load()
+ const { lastModified } = await page.data.load();
+ const isUpdated = !isDeprecated && isRecentlyUpdated(lastModified);
+
+ // 3. Render badges
+ if (isDeprecated) {
return {
...node,
name: (
@@ -50,6 +71,18 @@ async function transformPageTreeWithBadges(
};
}
+ if (isUpdated) {
+ return {
+ ...node,
+ name: (
+
+ {node.name}
+
+
+ ),
+ };
+ }
+
return node;
}