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ă:

Maria Popescu

Maria Popescu

Senior Full Stack Developer

Development

Activ

Card simplu pentru un angajat.

Maria Popescu

Maria Popescu

Senior Full Stack Developer

Development

Activ
✉️maria.popescu@example.com
📞+40 123 456 789
📅Angajat: ianuarie 2020

Card cu detalii complete și acțiuni.

Maria Popescu

Maria Popescu

Senior Full Stack Developer

Development

Activ
✉️maria.popescu@example.com
📞+40 123 456 789
📅Angajat: ianuarie 2020
Ion Ionescu

Ion Ionescu

UI/UX Designer

Design

Activ
✉️ion.ionescu@example.com
📅Angajat: iunie 2019
Ana Georgescu

Ana Georgescu

Project Manager

Management

În concediu
✉️ana.georgescu@example.com
📅Angajat: martie 2018

Grid de angajați, perfect pentru pagini de evidență.

AngajatPozițieDepartamentEmailStatusAcțiuni
Maria Popescu
Maria Popescu
+40 123 456 789
Senior Full Stack DeveloperDevelopmentmaria.popescu@example.comActiv
Ion Ionescu
Ion Ionescu
UI/UX DesignerDesignion.ionescu@example.comActiv
Ana Georgescu
Ana Georgescu
Project ManagerManagementana.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:

Tech Solutions SRL

Tech Solutions SRL

Tech Solutions

Activ
EnterpriseLong-term

Card simplu pentru un client.

Tech Solutions SRL

Tech Solutions SRL

Tech Solutions

Activ
✉️contact@techsolutions.ro
📞+40 21 123 4567
📁12 proiecte
💰250.000 RON
EnterpriseLong-term

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

Tech Solutions SRL

Tech Solutions SRL

Tech Solutions

Activ
✉️contact@techsolutions.ro
📞+40 21 123 4567
📁12 proiecte
💰250.000 RON
EnterpriseLong-term

Startup Innovator

Startup Innovator

Activ
✉️hello@startupinnovator.com
📁5 proiecte
💰75.000 RON
Startup

Digital Agency Pro

Digital Agency Pro

În așteptare
✉️info@digitalagencypro.ro
📁0 proiecte
Agency

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

Ion Ionescu
Ion Ionescu
🟠
15.02
designui

Card simplu pentru un task.

Implementare backend API

API endpoints pentru produse, comenzi și utilizatori

🔄
Maria Popescu
Maria Popescu
🔴
30.03
backendapi

Card cu acțiuni pentru schimbarea statusului.

De făcut

1

Integrare plată

Integrare cu gateway-ul de plată Stripe

📋
Maria Popescu
Maria Popescu
🟠
15.04
paymentintegration

În progres

1

Implementare backend API

API endpoints pentru produse, comenzi și utilizatori

🔄
Maria Popescu
Maria Popescu
🔴
30.03
backendapi

În review

1

Testing & QA

Testare completă a funcționalităților

👀
Elena Stoica
Elena Stoica
🟡
15.06
testingqa

Finalizat

1

Design UI/UX

Crearea design-ului pentru toate paginile: homepage, produse, coș, checkout

Ion Ionescu
Ion Ionescu
🟠
15.02
designui

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

Activ
Client: Tech Solutions SRL (Tech Solutions)
Progres65%
E-commerceReactNode.js

Card simplu pentru un proiect.

Platformă E-commerce

Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL

Activ
Client: Tech Solutions SRL (Tech Solutions)
Echipă:
Maria Popescu
Ion Ionescu
Task-uri: 1/2 finalizate
Buget: 85.000 / 150.000 RON
Progres65%
E-commerceReactNode.js

Card cu detalii complete: echipă, task-uri, buget, progres.

Platformă E-commerce

Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL

Activ
Client: Tech Solutions SRL (Tech Solutions)
Echipă:
Maria Popescu
Ion Ionescu
Task-uri: 1/2 finalizate
Buget: 85.000 / 150.000 RON
Progres65%
E-commerceReactNode.js

Aplicație Mobile

Aplicație mobile pentru fitness tracking

Activ
Client: Startup Innovator
Progres35%
MobileReact Native

Grid de proiecte, perfect pentru pagini de evidență.

Platformă E-commerce

Dezvoltare platformă completă de e-commerce cu React, Node.js și PostgreSQL

Activ
Client: Tech Solutions SRL (Tech Solutions)
Progres proiect65%
Data început
15.01.2024
Deadline
30.06.2024
Task-uri
1/2 finalizate
Buget
150.000 RON

Echipă

Maria Popescu
Maria Popescu
Lead Developer
Ion Ionescu
Ion Ionescu
UI/UX Designer

Task-uri

De făcut

0
Nu sunt task-uri

În progres

1

Implementare backend

🔄
Maria Popescu
🔴

În review

0
Nu sunt task-uri

Finalizat

1

Design UI/UX

Ion Ionescu
🟠

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:

Contract dezvoltare platformă e-commerce

#CT-2024-001

Tech Solutions SRL

Contract pentru dezvoltarea unei platforme complete de e-commerce

Activ
Valoare
150.000 RON
Tip
Preț fix

Card simplu pentru un contract.

Contract dezvoltare platformă e-commerce

#CT-2024-001

Tech Solutions SRL

Contract pentru dezvoltarea unei platforme complete de e-commerce

Activ
Valoare
150.000 RON
Tip
Preț fix
Data început:15.01.2024
Data sfârșit:31.12.2024
Data semnării:10.01.2024

Card cu detalii complete și acțiuni.

Contract dezvoltare platformă e-commerce

#CT-2024-001

Tech Solutions SRL

Contract pentru dezvoltarea unei platforme complete de e-commerce

Activ
Valoare
150.000 RON
Tip
Preț fix
Data început:15.01.2024
Data sfârșit:31.12.2024
Data semnării:10.01.2024

Contract retainer lunar

#CT-2024-002

Startup Innovator

Contract retainer pentru suport și mentenanță

Activ
Valoare
5.000 RON
Tip
Retainer
Data început:01.02.2024
Data semnării:28.01.2024

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ă:

Factură #INV-2024-001

Tech Solutions SRL

Proiect: Platformă E-commerce

Plătită
Total
59.500 RON
Scadență
15.02.2024

Card simplu pentru o factură.

Factură #INV-2024-001

Tech Solutions SRL

Proiect: Platformă E-commerce

Plătită
Total
59.500 RON
Scadență
15.02.2024
Emisă:01.02.2024
Plătită:10.02.2024
Metodă plată:Transfer bancar
Articole (1)

Card cu detalii complete și acțiuni.

Factură #INV-2024-001

Tech Solutions SRL

Proiect: Platformă E-commerce

Plătită
Total
59.500 RON
Scadență
15.02.2024
Emisă:01.02.2024
Plătită:10.02.2024
Metodă plată:Transfer bancar
Articole (1)

Factură #INV-2024-002

Startup Innovator

Trimisă
Total
29.750 RON
Scadență
01.03.2024
Emisă:15.02.2024
Articole (1)

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ă:

Angajați totali
25
22 activi
👥
Clienți totali
45
38 activi
🏢
Proiecte totale
67
12 active
📁
Venit total
1.250.000 RON
125.000 RON/lună
💰
Facturi
8 în așteptare
3 restante
📄
Contracte
28 active
5 expiră curând
📋

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.

Users
1,284
+8%
Conv.
4.2%
+0.3pp

Minimalist dark, 2 coloane, accent pe contrast.

MRR
€12,430
+€920
Subscrieri
430
+12
Churn
5.2%
-0.4pp
LTV
€240
+€30

Varianta light cu 4 carduri, KPI detaliați.

Uptime
99.99%
+0.01%
Errors
23
-5
Latency
120ms
-20ms

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 (implicit rounded-lg).
  • cardPadding — padding carduri (implicit p-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.

IDNumeStatus
1Produs Aactive
2Produs Bpaused

Minimal dark: tabel simplu cu 3 coloane.

IDProdusStatusActualizat
PRD-1012Abonament Proactive2025-09-20
PRD-1013SQL 101paused2025-09-18
PRD-1099Consultanță 1:1active2025-09-17

Varianta light: 4 coloane, mai multe rânduri, header contrastant.

IDEventSeverity
EVT-22Login failhigh
EVT-23API timeoutmedium
EVT-24Deploy completelow

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 (implicit w-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 (implicit rounded-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 pentru border-*).
  • 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).