Panel Components
Colecție de componente pentru paneluri în proiecte Next.js + TailwindCSS. Exemple live + explicații de utilizare.
EmployeeCard
Componente pentru evidența angajaților. Suportă card-uri individuale, grid și tabel. Perfect pentru panouri administrative ERP.
📄 Pagină disponibilă:
- /panels/employees - Evidența angajaților (cu toggle grid/tabel pentru admin)

Maria Popescu
Senior Full Stack Developer
Development
Card simplu pentru un angajat.

Maria Popescu
Senior Full Stack Developer
Development
Card cu detalii complete și acțiuni.

Maria Popescu
Senior Full Stack Developer
Development

Ion Ionescu
UI/UX Designer
Design

Ana Georgescu
Project Manager
Management
Grid de angajați, perfect pentru pagini de evidență.
| Angajat | Poziție | Departament | Status | Acțiuni | |
|---|---|---|---|---|---|
![]() Maria Popescu +40 123 456 789 | Senior Full Stack Developer | Development | maria.popescu@example.com | Activ | |
![]() Ion Ionescu | UI/UX Designer | Design | ion.ionescu@example.com | Activ | |
![]() Ana Georgescu | Project Manager | Management | ana.georgescu@example.com | În concediu |
Tabel de angajați, perfect pentru vizualizare compactă și sortare.
Utilizare
import EmployeeCard from "@/components/panel-components/EmployeeCard";
import EmployeeGrid from "@/components/panel-components/EmployeeGrid";
import EmployeeTable from "@/components/panel-components/EmployeeTable";
const employee: Employee = {
id: "1",
firstName: "Maria",
lastName: "Popescu",
email: "maria@example.com",
position: "Senior Developer",
department: "Development",
status: "active",
hireDate: "2020-01-15",
};
<EmployeeCard employee={employee} showDetails={true} showActions={true} />
<EmployeeGrid employees={[employee]} showDetails={true} />
<EmployeeTable employees={[employee]} showActions={true} />status— statusul angajatului:active|inactive|on-leave.showDetails— afișează email, telefon și data angajării.showActions— afișează butoane pentru acțiuni (editare, ștergere).
ClientCard
Componente pentru evidența clienților. Suportă card-uri individuale și grid. Perfect pentru panouri administrative și CRM.
📄 Pagini disponibile:
- /panels/clients - Evidența clienților (cu tabel pentru admin)
- /panels/clients/[id]/contracts - Contractele unui client

Tech Solutions SRL
Tech Solutions
Card simplu pentru un client.

Tech Solutions SRL
Tech Solutions
Card cu detalii complete: proiecte, venituri, tag-uri.

Tech Solutions SRL
Tech Solutions
Startup Innovator
Startup Innovator
Digital Agency Pro
Digital Agency Pro
Grid de clienți, perfect pentru pagini de evidență.
Utilizare
import ClientCard from "@/components/panel-components/ClientCard";
import ClientGrid from "@/components/panel-components/ClientGrid";
const client: Client = {
id: "1",
name: "Tech Solutions SRL",
company: "Tech Solutions",
email: "contact@example.com",
status: "active",
joinDate: "2020-05-15",
totalProjects: 12,
totalRevenue: 250000,
tags: ["Enterprise"],
};
<ClientCard client={client} showDetails={true} showActions={true} />
<ClientGrid clients={[client]} showDetails={true} />status— statusul clientului:active|inactive|pending.totalProjects— numărul total de proiecte (opțional).totalRevenue— venitul total generat (opțional).tags— tag-uri pentru categorizare (opțional).
TaskCard & TaskBoard
Componente pentru gestionarea task-urilor. Suportă card-uri individuale și board Kanban cu coloane pentru status. Perfect pentru managementul proiectelor.
Design UI/UX
Crearea design-ului pentru toate paginile: homepage, produse, coș, checkout

Card simplu pentru un task.
Implementare backend API
API endpoints pentru produse, comenzi și utilizatori

Card cu acțiuni pentru schimbarea statusului.
De făcut
1Integrare plată
Integrare cu gateway-ul de plată Stripe

În progres
1Implementare backend API
API endpoints pentru produse, comenzi și utilizatori

În review
1Testing & QA
Testare completă a funcționalităților

Finalizat
1Design UI/UX
Crearea design-ului pentru toate paginile: homepage, produse, coș, checkout

Board Kanban cu 4 coloane: De făcut, În progres, În review, Finalizat.
Utilizare
import TaskCard from "@/components/panel-components/TaskCard";
import TaskBoard from "@/components/panel-components/TaskBoard";
const task: Task = {
id: "t1",
title: "Design UI/UX",
description: "Crearea design-ului...",
status: "in-progress", // "todo" | "in-progress" | "review" | "done"
assignee: { id: "1", name: "Ion Ionescu" },
priority: "high", // "low" | "medium" | "high" | "urgent"
dueDate: "2024-02-15",
tags: ["design", "ui"],
};
<TaskCard task={task} showAssignee={true} showActions={true} />
<TaskBoard tasks={[task]} showActions={true} />status— statusul task-ului:todo|in-progress|review|done.priority— prioritatea:low|medium|high|urgent.assignee— persoana responsabilă pentru task (opțional).- TaskBoard organizează automat task-urile pe coloane după status.
ProjectCard & ProjectView
Componente pentru evidența proiectelor. Suportă card-uri, grid și view complet cu task-uri. Perfect pentru panouri administrative ERP.
📄 Pagini disponibile:
- /panels/projects - Evidența proiectelor
- /panels/projects/[id] - Pagina unui proiect cu task-uri
Platformă E-commerce
Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL
Card simplu pentru un proiect.
Platformă E-commerce
Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL


Card cu detalii complete: echipă, task-uri, buget, progres.
Platformă E-commerce
Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL


Aplicație Mobile
Aplicație mobile pentru fitness tracking
Grid de proiecte, perfect pentru pagini de evidență.
Platformă E-commerce
Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL
Echipă


Task-uri
De făcut
0În progres
1Implementare backend
În review
0Finalizat
1Design UI/UX
View complet al proiectului cu header, echipă și task board.
Utilizare
import ProjectCard from "@/components/panel-components/ProjectCard";
import ProjectGrid from "@/components/panel-components/ProjectGrid";
import ProjectView from "@/components/panel-components/ProjectView";
const project: Project = {
id: "1",
name: "Platformă E-commerce",
description: "Dezvoltare platformă...",
status: "active", // "planning" | "active" | "on-hold" | "completed" | "cancelled"
startDate: "2024-01-15",
deadline: "2024-06-30",
budget: 150000,
progress: 65,
team: [...],
tasks: [...],
};
<ProjectCard project={project} showDetails={true} />
<ProjectGrid projects={[project]} showDetails={true} />
<ProjectView project={project} showTeam={true} showBudget={true} />status— statusul proiectului:planning|active|on-hold|completed|cancelled.progress— progresul proiectului (0-100, opțional).tasks— array de task-uri asociate proiectului (opțional).- ProjectView include automat TaskBoard pentru gestionarea task-urilor.
ContractCard
Componente pentru evidența contractelor. Suportă card-uri individuale și listă. Perfect pentru gestionarea contractelor cu clienții.
📄 Pagini disponibile:
- /panels/contracts - Evidența contractelor
- /panels/clients/[id]/contracts - Contractele unui client
Contract dezvoltare platformă e-commerce
#CT-2024-001Tech Solutions SRL
Contract pentru dezvoltarea unei platforme complete de e-commerce
Card simplu pentru un contract.
Contract dezvoltare platformă e-commerce
#CT-2024-001Tech Solutions SRL
Contract pentru dezvoltarea unei platforme complete de e-commerce
Card cu detalii complete și acțiuni.
Contract dezvoltare platformă e-commerce
#CT-2024-001Tech Solutions SRL
Contract pentru dezvoltarea unei platforme complete de e-commerce
Contract retainer lunar
#CT-2024-002Startup Innovator
Contract retainer pentru suport și mentenanță
Listă de contracte, perfect pentru pagini de evidență.
Utilizare
import ContractCard from "@/components/panel-components/ContractCard";
import ContractList from "@/components/panel-components/ContractList";
const contract: Contract = {
id: "1",
clientId: "1",
clientName: "Tech Solutions SRL",
contractNumber: "CT-2024-001",
title: "Contract dezvoltare...",
status: "active", // "draft" | "active" | "expired" | "terminated"
value: 150000,
type: "fixed", // "fixed" | "hourly" | "retainer"
startDate: "2024-01-15",
};
<ContractCard contract={contract} showDetails={true} />
<ContractList contracts={[contract]} showDetails={true} />InvoiceCard
Componente pentru evidența facturilor. Suportă card-uri individuale și listă. Perfect pentru gestionarea facturilor și plăților.
📄 Pagină disponibilă:
- /panels/invoices - Evidența facturilor
Factură #INV-2024-001
Tech Solutions SRL
Proiect: Platformă E-commerce
Card simplu pentru o factură.
Factură #INV-2024-001
Tech Solutions SRL
Proiect: Platformă E-commerce
Card cu detalii complete și acțiuni.
Factură #INV-2024-001
Tech Solutions SRL
Proiect: Platformă E-commerce
Factură #INV-2024-002
Startup Innovator
Listă de facturi, perfect pentru pagini de evidență.
Utilizare
import InvoiceCard from "@/components/panel-components/InvoiceCard";
import InvoiceList from "@/components/panel-components/InvoiceList";
const invoice: Invoice = {
id: "1",
invoiceNumber: "INV-2024-001",
clientId: "1",
clientName: "Tech Solutions SRL",
status: "paid", // "draft" | "sent" | "paid" | "overdue" | "cancelled"
issueDate: "2024-02-01",
dueDate: "2024-02-15",
subtotal: 50000,
tax: 9500,
total: 59500,
items: [...],
};
<InvoiceCard invoice={invoice} showDetails={true} />
<InvoiceList invoices={[invoice]} showDetails={true} />DashboardStats
Componentă pentru dashboard administrativ. Afișează statistici generale despre angajați, clienți, proiecte, facturi și contracte.
📄 Pagină disponibilă:
- /panels/dashboard - Dashboard administrativ complet
Dashboard cu toate statisticile principale, perfect pentru panouri administrative.
Utilizare
import DashboardStats from "@/components/panel-components/DashboardStats";
const stats: DashboardStats = {
totalEmployees: 25,
activeEmployees: 22,
totalClients: 45,
activeClients: 38,
totalProjects: 67,
activeProjects: 12,
totalRevenue: 1250000,
monthlyRevenue: 125000,
pendingInvoices: 8,
overdueInvoices: 3,
contractsActive: 28,
contractsExpiring: 5,
};
<DashboardStats stats={stats} />StatsPanel
Panou de tip overview cu carduri statistice. Poți controla datele, numărul de coloane, culorile și tipografia pentru a crea dashboard-uri flexibile.
Minimalist dark, 2 coloane, accent pe contrast.
Varianta light cu 4 carduri, KPI detaliați.
Dark cu accent indigo, ideal pentru metrici tehnici.
Utilizare
import StatsPanel from "@/components/panels-components/StatsPanel";
/** Minimalist dark */
<StatsPanel
stats={[
{ key: "users", label: "Users", value: "1,284", delta: "+8%" },
{ key: "conv", label: "Conv.", value: "4.2%", delta: "+0.3pp" },
]}
cols={{ base: 1, md: 2 }}
cardBg="bg-neutral-900"
cardBorder="border-neutral-800"
/>
/** Light complex */
<StatsPanel
stats={[
{ key: "mrr", label: "MRR", value: "€12,430", delta: "+€920" },
{ key: "subs", label: "Subscrieri", value: "430", delta: "+12" },
{ key: "churn", label: "Churn", value: "5.2%", delta: "-0.4pp" },
{ key: "ltv", label: "LTV", value: "€240", delta: "+€30" },
]}
cols={{ base: 1, md: 2, xl: 4 }}
cardBg="bg-white"
cardBorder="border-zinc-200"
/>
/** Dark v2 */
<StatsPanel
stats={[
{ key: "uptime", label: "Uptime", value: "99.99%", delta: "+0.01%" },
{ key: "errors", label: "Errors", value: "23", delta: "-5" },
{ key: "latency", label: "Latency", value: "120ms", delta: "-20ms" },
]}
cols={{ base: 1, md: 3 }}
cardBg="bg-neutral-900"
cardBorder="border-neutral-800"
/>Caracteristici dinamice
stats— array de obiecte { key, label, value, delta?, deltaColor? }.cols— număr de coloane responsive (ex: { base:1, md:2, xl:4 }).gap— spațiere între carduri (ex:gap-4).cardBg— culoare fundal card (ex:bg-white,bg-neutral-900).cardBorder— clasă Tailwind pentru border (ex:border-zinc-200).cardRounded— radius carduri (implicitrounded-lg).cardPadding— padding carduri (implicitp-4).labelClassName,valueClassName,deltaClassName— controlează tipografia și stilurile textului.
TablePanel
Panou de tabel dinamic: definești coloanele și rândurile, poți personaliza randarea celulelor, stilurile și layout-ul.
| ID | Nume | Status |
|---|---|---|
| 1 | Produs A | active |
| 2 | Produs B | paused |
Minimal dark: tabel simplu cu 3 coloane.
| ID | Produs | Status | Actualizat |
|---|---|---|---|
| PRD-1012 | Abonament Pro | active | 2025-09-20 |
| PRD-1013 | SQL 101 | paused | 2025-09-18 |
| PRD-1099 | Consultanță 1:1 | active | 2025-09-17 |
Varianta light: 4 coloane, mai multe rânduri, header contrastant.
| ID | Event | Severity |
|---|---|---|
| EVT-22 | Login fail | high |
| EVT-23 | API timeout | medium |
| EVT-24 | Deploy complete | low |
Dark v2 cu randare custom pentru severitate.
Utilizare
import TablePanel from "@/components/panels-components/TablePanel";
/** Minimalist dark */
<TablePanel
columns={[
{ key: "id", header: "ID" },
{ key: "name", header: "Nume" },
{ key: "status", header: "Status" },
]}
rows={[
{ id: "1", name: "Produs A", status: "active" },
{ id: "2", name: "Produs B", status: "paused" },
]}
/>
/** Light complex */
<TablePanel
columns={[
{ key: "id", header: "ID" },
{ key: "name", header: "Produs" },
{ key: "status", header: "Status" },
{ key: "updatedAt", header: "Actualizat" },
]}
rows={[
{ id: "PRD-1012", name: "Abonament Pro", status: "active", updatedAt: "2025-09-20" },
{ id: "PRD-1013", name: "SQL 101", status: "paused", updatedAt: "2025-09-18" },
]}
/>
/** Dark v2 (custom render) */
<TablePanel
columns={[
{ key: "id", header: "ID" },
{ key: "event", header: "Event" },
{ key: "severity", header: "Severity", render: (r: { id: string; event: string; severity: string }) => <b>{r.severity}</b> },
]}
rows={[
{ id: "EVT-22", event: "Login fail", severity: "high" },
{ id: "EVT-23", event: "API timeout", severity: "medium" },
]}
/>Caracteristici dinamice
columns— definiția coloanelor:key,header,className?,render?.rows— array de obiecte cu datele pentru rânduri.tableClassName— clase pentru tabel (implicitw-full text-sm).headClassName— clase pentru<thead>.rowClassName— clase pentru fiecare<tr>.cellClassName— clase pentru fiecare<td>.striped— activează culoare alternativă pe rânduri.bordered— aplică border la container.rounded— radius pentru container (implicitrounded-lg).
SettingsPanel
Trei exemple rapide: minimalist dark, light mai complex, apoi încă un dark cu alt accent.
Minimal, contrat și aerisit pentru view-uri simple.
Varianta light, mai bogată în opțiuni și descrieri.
Dark cu accent pe securitate și notificări.
Utilizare
// Minimalist dark
<SettingsPanel
layout="vertical"
bgColor="bg-neutral-950"
borderColor="border-neutral-800"
textColor="text-neutral-100"
rounded="rounded-lg"
padding="p-4"
gap="space-y-3"
options={[
{ key: "dm", label: "Dark mode", defaultValue: true },
{ key: "alerts", label: "Alerte critice", defaultValue: true },
]}
buttonLabel="Save"
buttonClassName="rounded-md border border-neutral-800 px-3 py-1.5 text-sm text-neutral-200 hover:bg-neutral-900"
/>
// Light complex (2 coloane)
<SettingsPanel
layout="horizontal"
bgColor="bg-white"
borderColor="border-zinc-200"
textColor="text-black"
rounded="rounded-xl"
padding="p-6"
gap="space-y-6"
options={[
{ key: "weekly", label: "Raport săptămânal", defaultValue: true, description: "Trimis în fiecare luni la 09:00." },
{ key: "monthly", label: "Raport lunar", defaultValue: false, description: "Rezumat KPI + trenduri." },
{ key: "beta", label: "Program beta", defaultValue: false, description: "Funcționalități înainte de lansare." },
{ key: "newsletter", label: "Newsletter", defaultValue: true, description: "Noutăți și articole." },
]}
buttonLabel="Aplică preferințele"
buttonClassName="rounded-md border border-zinc-200 bg-white px-4 py-2 text-sm hover:bg-zinc-50 text-black"
/>
// Dark v2
<SettingsPanel
layout="vertical"
bgColor="bg-neutral-950"
borderColor="border-neutral-800"
textColor="text-neutral-100"
rounded="rounded-lg"
padding="p-5"
gap="space-y-4"
options={[
{ key: "twofa", label: "2FA", defaultValue: true, description: "Securitate suplimentară la login." },
{ key: "emails", label: "Emailuri tranzacționale", defaultValue: true },
{ key: "productUpdates", label: "Product updates", defaultValue: false },
]}
buttonLabel="Save changes"
buttonClassName="rounded-md border border-neutral-800 px-4 py-2 text-sm text-neutral-100 hover:bg-neutral-900"
/>Caracteristici dinamice
options— listă de opțiuni (array). Fiecare element:key,label,defaultValue?,description?,onChange?.layout— "vertical" (stack) sau "horizontal" (grid în 2 coloane).bgColor— culoarea de fundal a panoului (clasă Tailwind).borderColor— culoarea/forța border-ului (clasă Tailwind pentruborder-*).textColor— culoare text (clasă Tailwind).rounded— radius-ul containerelor (ex:rounded-lg,rounded-xl).padding— padding intern (ex:p-4,p-6).gap— spațiere între elemente (ex:space-y-4).buttonLabel— textul butonului (ex:Save,Aplică preferințele).buttonClassName— stilul butonului (clase Tailwind).