From 6aeb790cb88b95e0bd2101d94eccac1fecd75624 Mon Sep 17 00:00:00 2001 From: Wildan Nursahidan Date: Mon, 12 May 2025 00:17:49 +0700 Subject: [PATCH] release version 1.8.5 --- CHANGELOG.md | 15 ++++++++++ app/docs/[[...slug]]/page.tsx | 2 +- components/SidebarToggle.tsx | 23 +++++++++++++++ components/Sponsor.tsx | 37 +++++++++++++++++++++++++ components/changelog/version-entry.tsx | 22 +++++++-------- components/footer.tsx | 14 ++++++++-- components/leftbar.tsx | 34 +++++++++++++++++++---- components/toc.tsx | 18 ++++++++---- docu.json | 13 +++++++-- package.json | 2 +- public/images/vercel.png | Bin 0 -> 4431 bytes tailwind.config.ts | 2 +- 12 files changed, 152 insertions(+), 30 deletions(-) create mode 100644 components/SidebarToggle.tsx create mode 100644 components/Sponsor.tsx create mode 100644 public/images/vercel.png diff --git a/CHANGELOG.md b/CHANGELOG.md index c165e71..3b71425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,28 @@ ### Added +- Expandables Leftbar +- sponsor badges or ads - boolean show/hide `edit on github` +- with the same code run anywhere (bun or nodejs) +- add fronmatter (metadata) to playground editor ### Improved - adjusment docu.json - adjustment navbar, footer and components +### Fixed + +- bun compability rename .js to common js +- cli manage packageManager on package.json +- inconsistent design moved to better UI/UX +- error handle render footer.social + +### Removed + +- remove confused and verbose cli on installer + ## [1.8.0] - 2025-03-01 > Now looks more modern and clean which is a big change in layout and design diff --git a/app/docs/[[...slug]]/page.tsx b/app/docs/[[...slug]]/page.tsx index 7fb2d1e..7022893 100644 --- a/app/docs/[[...slug]]/page.tsx +++ b/app/docs/[[...slug]]/page.tsx @@ -88,7 +88,7 @@ export default async function DocsPage({ params: { slug = [] } }: PageProps) {

{description}

{res.content}
diff --git a/components/SidebarToggle.tsx b/components/SidebarToggle.tsx new file mode 100644 index 0000000..8c977d0 --- /dev/null +++ b/components/SidebarToggle.tsx @@ -0,0 +1,23 @@ +import { Button } from "@/components/ui/button"; +import { ChevronLeft, ChevronRight } from "lucide-react"; + +type Props = { + isOpen: boolean; + onToggle: () => void; +}; + +export function SidebarToggle({ isOpen, onToggle }: Props) { + return ( +
+ +
+ ); +} diff --git a/components/Sponsor.tsx b/components/Sponsor.tsx new file mode 100644 index 0000000..c1c5b31 --- /dev/null +++ b/components/Sponsor.tsx @@ -0,0 +1,37 @@ +import docuConfig from "@/docu.json"; +import Image from "next/image"; +import Link from "next/link"; + +export function Sponsor() { + const sponsor = docuConfig.sponsor; + const item = sponsor?.item; + + if (!item) return null; + + return ( +
+

{sponsor.title || "Sponsor"}

+ +
+ {item.title} +
+
+

{item.title}

+

{item.description}

+
+ +
+ ); +} + +export default Sponsor; diff --git a/components/changelog/version-entry.tsx b/components/changelog/version-entry.tsx index 4e32da1..1b89242 100644 --- a/components/changelog/version-entry.tsx +++ b/components/changelog/version-entry.tsx @@ -24,13 +24,13 @@ interface VersionEntryProps { isLast?: boolean; } -export function VersionEntry({ - version, - date, +export function VersionEntry({ + version, + date, description, - image, + image, changes, - isLast + isLast }: VersionEntryProps) { const [expanded, setExpanded] = useState(false); @@ -45,7 +45,7 @@ export function VersionEntry({ {formatDate2(date)}
- + {description && (

{description}

)} @@ -69,8 +69,8 @@ export function VersionEntry({
{Object.entries(changes).map(([type, items]) => ( items && items.length > 0 && ( - items && items.length > 5) && (
); -} \ No newline at end of file +} diff --git a/components/footer.tsx b/components/footer.tsx index 67d513a..5dbaeeb 100644 --- a/components/footer.tsx +++ b/components/footer.tsx @@ -30,12 +30,20 @@ export function Footer() { } export function FooterButtons() { - const { footer } = docuConfig; + const footer = docuConfig?.footer; + + // Jangan render apapun jika tidak ada data sosial + if (!footer?.social || !Array.isArray(footer.social) || footer.social.length === 0) { + return null; + } return ( <> - {footer.social?.map((item) => { - const IconComponent = (LucideIcons[item.iconName as keyof typeof LucideIcons] ?? LucideIcons["Globe"]) as unknown as React.FC<{ className?: string }>; + {footer.social.map((item) => { + const IconComponent = + (LucideIcons[item.iconName as keyof typeof LucideIcons] ?? + LucideIcons["Globe"]) as React.FC<{ className?: string }>; + return ( - - + ); @@ -36,7 +60,7 @@ export function SheetLeftbar() { Menu - +
diff --git a/components/toc.tsx b/components/toc.tsx index 099291a..ff81fed 100644 --- a/components/toc.tsx +++ b/components/toc.tsx @@ -2,19 +2,25 @@ import { getDocsTocs } from "@/lib/markdown"; import TocObserver from "./toc-observer"; import { ScrollArea } from "@/components/ui/scroll-area"; import { ListIcon } from "lucide-react"; +import Sponsor from "./Sponsor"; + export default async function Toc({ path }: { path: string }) { const tocs = await getDocsTocs(path); return (
-
-
-

On this page

+
+
+
+ +

On this page

+
+ + +
- - - +
); diff --git a/docu.json b/docu.json index bf87854..1d64772 100644 --- a/docu.json +++ b/docu.json @@ -17,12 +17,12 @@ "social": [ { "name": "Gitlab", - "url": "https://gitlab.com/mywildancloud/docubook", + "url": "https://gitlab.com/mywildancloud", "iconName": "GitlabIcon" }, { "name": "Instagram", - "url": "https://www.instagram.com/wildan.nrs/", + "url": "https://www.instagram.com/wildan.nrs", "iconName": "InstagramIcon" }, { @@ -53,6 +53,15 @@ "editPathTemplate": "/blob/main/{filePath}", "editLink": true }, + "sponsor": { + "title": "Our Sponsor", + "item": { + "title": "Vercel", + "description": "Deploy your Next.js app with zero configuration.", + "image": "/images/vercel.png", + "url": "https://vercel.com" + } + }, "routes": [ { "title": "Getting Started", diff --git a/package.json b/package.json index 1248c9d..ec48371 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docubook", - "version": "1.8.0", + "version": "1.8.5", "private": true, "scripts": { "dev": "next dev", diff --git a/public/images/vercel.png b/public/images/vercel.png new file mode 100644 index 0000000000000000000000000000000000000000..43f8281005fb855c7c644ca19285da43f06b573d GIT binary patch literal 4431 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 B-