-
Quick Actions
+ {/* RIGHT - QUICK ACTIONS */}
+
+
Quick Actions
-
diff --git a/components/main/media-library.tsx b/components/main/media-library.tsx
new file mode 100644
index 0000000..5d2d3a2
--- /dev/null
+++ b/components/main/media-library.tsx
@@ -0,0 +1,156 @@
+"use client";
+
+import { Card, CardContent } from "@/components/ui/card";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { Badge } from "@/components/ui/badge";
+import { Upload, Search, Filter, ImageIcon, Film, Music } from "lucide-react";
+import { useState } from "react";
+
+const stats = [
+ { title: "Total Files", value: 24 },
+ { title: "Images", value: 18 },
+ { title: "Videos", value: 4 },
+ { title: "Audio", value: 2 },
+];
+
+const files = [
+ {
+ name: "hero-banner.jpg",
+ type: "image",
+ size: "2.4 MB",
+ date: "2024-01-20",
+ },
+ {
+ name: "product-showcase.jpg",
+ type: "image",
+ size: "2.4 MB",
+ date: "2024-01-20",
+ },
+ {
+ name: "company-logo.svg",
+ type: "image",
+ size: "124 KB",
+ date: "2024-01-20",
+ },
+ {
+ name: "promo-video.mp4",
+ type: "video",
+ size: "2.4 MB",
+ date: "2024-01-20",
+ },
+];
+
+const getFileIcon = (type: string) => {
+ switch (type) {
+ case "video":
+ return
;
+ case "audio":
+ return
;
+ default:
+ return
;
+ }
+};
+
+const getBadgeStyle = (type: string) => {
+ switch (type) {
+ case "video":
+ return "bg-purple-100 text-purple-600";
+ case "audio":
+ return "bg-green-100 text-green-600";
+ default:
+ return "bg-blue-100 text-blue-600";
+ }
+};
+
+export default function MediaLibrary() {
+ const [search, setSearch] = useState("");
+
+ return (
+
+ {/* ================= HEADER ================= */}
+
+
Media Library
+
+ Upload and manage images, videos, and documents
+
+
+
+ {/* ================= UPLOAD AREA ================= */}
+
+
+
+
+
Upload Media Files
+
+ Drag and drop files here, or click to browse
+
+
+
+ Select Files
+
+
+
+ Supports: JPG, PNG, SVG, PDF, MP4 (Max 50MB)
+
+
+
+
+
+ {/* ================= STATS ================= */}
+
+ {stats.map((item, i) => (
+
+
+ {item.value}
+ {item.title}
+
+
+ ))}
+
+
+ {/* ================= SEARCH + FILTER ================= */}
+
+
+
+ setSearch(e.target.value)}
+ />
+
+
+
+
+ Filters
+
+
+
+ {/* ================= FILE GRID ================= */}
+
+ {files.map((file, index) => (
+
+
+ {getFileIcon(file.type)}
+
+
+
+ {file.name}
+
+
+ {file.type}
+ {file.size}
+
+
+ {file.date}
+
+
+ ))}
+
+
+ );
+}
diff --git a/components/main/my-content.tsx b/components/main/my-content.tsx
new file mode 100644
index 0000000..f86bb02
--- /dev/null
+++ b/components/main/my-content.tsx
@@ -0,0 +1,186 @@
+"use client";
+
+import { Card, CardContent } from "@/components/ui/card";
+import { Input } from "@/components/ui/input";
+import { Button } from "@/components/ui/button";
+import { Badge } from "@/components/ui/badge";
+import { Search, Filter } from "lucide-react";
+import Image from "next/image";
+import { useState } from "react";
+
+const stats = [
+ { title: "Total Content", value: 24, color: "bg-blue-500" },
+ { title: "Drafts", value: 8, color: "bg-slate-600" },
+ { title: "Pending", value: 10, color: "bg-yellow-500" },
+ { title: "Approved", value: 10, color: "bg-green-600" },
+ { title: "Revision/Rejected", value: 6, color: "bg-red-600" },
+];
+
+const contents = [
+ {
+ id: 1,
+ title: "Bharatu Mardi Hadji Gugur Saat Bertugas...",
+ image: "/image/bharatu.jpg",
+ status: "Pending",
+ category: "News",
+ date: "2024-01-20",
+ },
+ {
+ id: 2,
+ title: "Novita Hardini: Jangan Sampai Pariwisata...",
+ image: "/image/novita2.png",
+ status: "Approved",
+ category: "News",
+ date: "2024-01-20",
+ },
+ {
+ id: 3,
+ title: "Lestari Moerdijat: Butuh Afirmasi...",
+ image: "/image/lestari2.png",
+ status: "Rejected",
+ category: "News",
+ date: "2024-01-20",
+ },
+ {
+ id: 4,
+ title: "Lestari Moerdijat: Butuh Afirmasi...",
+ image: "/image/lestari2.png",
+ status: "Draft",
+ category: "News",
+ date: "2024-01-20",
+ },
+];
+
+const getStatusStyle = (status: string) => {
+ switch (status) {
+ case "Pending Approval":
+ return "bg-yellow-100 text-yellow-700 border border-yellow-200";
+
+ case "Approved":
+ return "bg-green-100 text-green-700 border border-green-200";
+
+ case "Rejected":
+ return "bg-red-100 text-red-700 border border-red-200";
+
+ case "Draft":
+ return "bg-slate-100 text-slate-600 border border-slate-200";
+
+ default:
+ return "";
+ }
+};
+
+export default function MyContent() {
+ const [search, setSearch] = useState("");
+
+ return (
+
+
+
My Content
+
+ Track all your content submissions and drafts
+
+
+
+
+ {stats.map((item, index) => (
+
+
+
+ {item.value}
+
+
+
{item.value}
+
{item.title}
+
+
+
+ ))}
+
+
+
+
+
+ setSearch(e.target.value)}
+ />
+
+
+
+
+ Filters
+
+
+
+
+ {contents.map((item) => (
+
+
+
+ {item.status}
+
+
+
+ {item.category}
+
+
+
+
+
+
+
+
+ {/* TITLE */}
+
+ {item.title}
+
+
+ {item.date}
+
+
+ ))}
+
+
+
+
+ Previous
+
+
+
+ 1
+
+
+
+ 2
+
+
+
+ 3
+
+
+
+ Next
+
+
+
+ );
+}
diff --git a/components/main/news-image.tsx b/components/main/news-image.tsx
new file mode 100644
index 0000000..7b1e842
--- /dev/null
+++ b/components/main/news-image.tsx
@@ -0,0 +1,224 @@
+"use client";
+
+import { useState } from "react";
+import { Card, CardContent } from "@/components/ui/card";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { Badge } from "@/components/ui/badge";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "@/components/ui/table";
+import { Search, Filter, Eye, Pencil, Trash2, Plus } from "lucide-react";
+
+export default function NewsImage() {
+ const [activeCategory, setActiveCategory] = useState("All");
+
+ const categories = [
+ { name: "All", count: 24 },
+ { name: "Technology", count: 8 },
+ { name: "Partnership", count: 5 },
+ { name: "Investment", count: 3 },
+ { name: "News", count: 4 },
+ { name: "Event", count: 2 },
+ { name: "CSR", count: 2 },
+ ];
+
+ const articles = [
+ {
+ title:
+ "Novita Hardini: Jangan Sampai Pariwisata Meminggirkan Warga Lokal",
+ category: "Technology",
+ author: "John Kontributor",
+ status: "Published",
+ date: "2024-01-15",
+ },
+ {
+ title:
+ "Bharatu Mardi Hadji Gugur Saat Bertugas, Diganjar Kenaikan Pangkat Luar Biasa",
+ category: "Partnership",
+ author: "Sarah Editor",
+ status: "Pending",
+ date: "2024-01-14",
+ },
+ {
+ title:
+ "Lestari Moerdijat: Butuh Afirmasi dan Edukasi untuk Dorong Perempuan Aktif di Dunia Politik",
+ category: "Investment",
+ author: "Mike Writer",
+ status: "Draft",
+ date: "2024-01-13",
+ },
+ {
+ title: "SEKRETARIS MAHKAMAH AGUNG LANTIK HAKIM TINGGI PENGAWAS",
+ category: "CSR",
+ author: "Jane Content",
+ status: "Published",
+ date: "2024-01-12",
+ },
+ {
+ title:
+ "Mudik Nyaman Bersama Pertamina: Layanan 24 Jam, Motoris, dan Fasilitas Lengkap",
+ category: "Event",
+ author: "John Kontributor",
+ status: "Rejected",
+ date: "2024-01-11",
+ },
+ ];
+
+ const statusVariant = (status: string) => {
+ switch (status) {
+ case "Published":
+ return "bg-green-100 text-green-700";
+ case "Pending":
+ return "bg-yellow-100 text-yellow-700";
+ case "Draft":
+ return "bg-gray-200 text-gray-600";
+ case "Rejected":
+ return "bg-red-100 text-red-600";
+ default:
+ return "";
+ }
+ };
+
+ return (
+
+ {/* ================= HEADER ================= */}
+
+
+
+ News & Articles
+
+
+ Create and manage news articles and blog posts
+
+
+
+
+
+ Create New Article
+
+
+
+ {/* ================= CATEGORY FILTER ================= */}
+
+ {categories.map((cat) => (
+ setActiveCategory(cat.name)}
+ >
+ {cat.name}
+ {cat.count}
+
+ ))}
+
+
+ {/* ================= SEARCH + FILTER ================= */}
+
+
+
+
+
+
+
+
+ Filters
+
+
+
+ {/* ================= TABLE ================= */}
+
+
+
+
+
+ Article
+ Category
+ Author
+ Status
+ Date
+ Actions
+
+
+
+
+ {articles.map((article, index) => (
+
+
+ {article.title}
+
+
+
+ {article.category}
+
+
+ {article.author}
+
+
+
+ {article.status}
+
+
+
+ {article.date}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+ {/* ================= PAGINATION ================= */}
+
+
Showing 1 to 5 of 24 articles
+
+
+
+ Previous
+
+
+
+ 1
+
+
+
+ 2
+
+
+
+ 3
+
+
+
+ Next
+
+
+
+
+
+
+ );
+}