diff --git a/components/icons.tsx b/components/icons.tsx
new file mode 100644
index 0000000..b9dfbb2
--- /dev/null
+++ b/components/icons.tsx
@@ -0,0 +1,114 @@
+import {
+ AlertTriangle,
+ ArrowRight,
+ Check,
+ ChevronLeft,
+ ChevronRight,
+ Circle,
+ ClipboardCheck,
+ Copy,
+ CreditCard,
+ File,
+ FileText,
+ HelpCircle,
+ Image,
+ Laptop,
+ Loader2,
+ LucideProps,
+ Moon,
+ MoreVertical,
+ Pizza,
+ Plus,
+ Settings,
+ SunMedium,
+ Trash,
+ Twitter,
+ User,
+ X,
+ type Icon as LucideIcon,
+} from "lucide-react";
+
+export type Icon = LucideIcon;
+
+export const Icons = {
+ logo: (props: LucideProps) => (
+
+ ),
+ close: X,
+ spinner: Loader2,
+ chevronLeft: ChevronLeft,
+ chevronRight: ChevronRight,
+ trash: Trash,
+ post: FileText,
+ page: File,
+ media: Image,
+ settings: Settings,
+ billing: CreditCard,
+ ellipsis: MoreVertical,
+ add: Plus,
+ warning: AlertTriangle,
+ user: User,
+ arrowRight: ArrowRight,
+ help: HelpCircle,
+ pizza: Pizza,
+ twitter: Twitter,
+ check: Check,
+ copy: Copy,
+ copyDone: ClipboardCheck,
+ sun: SunMedium,
+ moon: Moon,
+ laptop: Laptop,
+ gitHub: (props: LucideProps) => (
+
+ ),
+ radix: (props: LucideProps) => (
+
+ ),
+ npm: (props: LucideProps) => (
+
+ ),
+ yarn: (props: LucideProps) => (
+
+ ),
+ pnpm: (props: LucideProps) => (
+
+ ),
+ react: (props: LucideProps) => (
+
+ ),
+ tailwind: (props: LucideProps) => (
+
+ ),
+};
diff --git a/components/loading.tsx b/components/loading.tsx
new file mode 100644
index 0000000..7e592a8
--- /dev/null
+++ b/components/loading.tsx
@@ -0,0 +1,27 @@
+import React, { SVGProps } from "react";
+
+export function Loading({
+ width = 24,
+ height = 24,
+ dur = "0.75s",
+}: SVGProps): JSX.Element {
+ return (
+
+ );
+}
diff --git a/components/logo.tsx b/components/logo.tsx
index ef54a98..03b5d24 100644
--- a/components/logo.tsx
+++ b/components/logo.tsx
@@ -11,9 +11,9 @@ export const Logo: React.FC = ({ className }) => {
viewBox="0 0 24 24"
fill="none"
stroke="current"
- stroke-width="2"
- stroke-linecap="round"
- stroke-linejoin="round">
+ strokeWidth="2"
+ strokeLinecap="round"
+ strokeLinejoin="round">
diff --git a/components/mobile-nav.tsx b/components/mobile-nav.tsx
new file mode 100644
index 0000000..0883aaa
--- /dev/null
+++ b/components/mobile-nav.tsx
@@ -0,0 +1,78 @@
+"use client";
+
+import * as React from "react";
+import Link from "next/link";
+
+// import { docsConfig } from "@/config/docs"
+import { cn } from "@/lib/utils";
+import { Icons } from "@/components/icons";
+import { Button } from "@/components/ui/button";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuGroup,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu";
+import { ScrollArea } from "@/components/ui/scroll-area";
+
+export function MobileNav() {
+ return (
+
+
+
+
+
+
+
+ Omnidash
+
+
+
+
+ {/* {docsConfig.sidebarNav?.map(
+ (item, index) =>
+ item.href && (
+
+ {item.title}
+
+ )
+ )}
+ {docsConfig.sidebarNav.map((item, index) => (
+
+
+ {item.title}
+
+ {item?.items?.length &&
+ item.items.map((item) => (
+
+ {item.href ? (
+ {item.title}
+ ) : (
+ item.title
+ )}
+
+ ))}
+
+ ))} */}
+
+
+
+ );
+}
diff --git a/components/page-header.tsx b/components/page-header.tsx
new file mode 100644
index 0000000..00859ac
--- /dev/null
+++ b/components/page-header.tsx
@@ -0,0 +1,21 @@
+type Props = {
+ title: string;
+ description?: string;
+ actions?: React.ReactNode[];
+};
+
+export const PageHeader: React.FC = ({ title, description, actions }) => {
+ return (
+
+
+
{title}
+
{description}
+
+
+ {(actions ?? []).map((action, i) => (
+ - {action}
+ ))}
+
+
+ );
+};