Skip to content
WingoUI
ComponentsTemplatesDocsPricingAI agentsBlogChangelogContact
Components
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCountry SelectCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerEmail InputEmoji PickerFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime PickerTimezone SelectTree Select
Forms
Address InputBooking WidgetCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text EditorSchema Builder
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverShare DialogSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSetup ChecklistSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadar chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselCSV ViewerDOCX EditorDOCX ViewerExcel ViewerFile SystemImage compareImage CropperImage GalleryImage LightboxLocation MapPDF ViewerPowerPoint ViewerQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadChat WidgetConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Background PatternGravity LettersMarqueeTerminalText AnimateText Rotate
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Marketing Sections
App Download SectionBlog Cards SectionCTA SectionFAQ SectionFeature GridFeature ShowcaseHero SectionIntegrations SectionLogo CloudMarketing FooterMarketing HeaderMarketing SectionNewsletter SectionPricing SectionStats SectionSteps SectionTeam SectionTestimonials SectionTimeline SectionVideo Section
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAPI Keys PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowOrder History PagePost Listing WizardPricing PageProfile PageRegister PageSettings PageUsers Admin Page
Templates
About PageAcademy PageAccessibility PageAffiliate PageAgency PageAI Product PageAppointment Booking PageBlog PageBlog Post PageBug Bounty PageCareers PageChangelog PageCommunity PageCompare PageContact PageCustomer Story PageCustomers PageDemo Booking PageDevelopers PageDocs Home PageDownload PageEnterprise PageEvents PageExperts PageFAQ PageFeature PageGlossary PageHelp Article PageHelp Center PageHome Services PageImpact PageIntegration Detail PageIntegrations PageJob Detail PageLanding PageLaunch PageLegal PageManifesto PagePortfolio PagePress PageProduct Tour PagePromo PageReal Estate PageReferral PageResearch Report PageRestaurant PageRoadmap PageROI Calculator PageSecurity PageSolutions PageStartups PageStatus PageStorefront PageSwitch PageTemplate Gallery PageTravel PageWaitlist PageYear in Review Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryTheme

Blocks

Admin Dashboard Page

Blocks

Admin Dashboard Page React block for Tailwind CSS v4

Video SectionAdmin Shell
Live props
Content
userName
ordersHref
activityHref
Behavior
compare
orderSheet
locale
currency
animateIn
Appearance
chartType
kpiIcons
chartTone
tone
radius
State
defaultGranularity
defaultOpenOrder
loading
Layout
showAttention
attentionEmpty
showActivity
showTopProducts
ordersPageSize8
Code
import { AdminDashboardPage } from "@/components/blocks/admin-dashboard-page"

<AdminDashboardPage />
  1. Home
  2. Components
  3. Blocks
  4. Admin Dashboard Page
Pro

Admin Dashboard Page React block for Tailwind CSS v4

v1.2.1·Updated in 1.9.0

A React admin dashboard page: greeting and period, four KPIs, revenue against the previous period, recent orders, alerts and team activity.

Pick the period in the date range field (presets such as Last 7 days or Last month beside two months on desktop, a bottom sheet on phones): every panel fades to the new numbers, the KPI values count to theirs and the chart grows again. Each KPI tile is a link with a spoken name ("Revenue, $248,300, up 12.4%"); the (i) buttons explain revenue and conversion. Switch the revenue chart between Daily and Weekly (weekly needs 14 days or more), hover, tap or arrow through its points to read both periods, and click a legend entry to hide a series. The Needs attention rows are links with a count. In Recent orders, search by number or client, toggle the New, Shipping and Unpaid chips, sort by a header, select rows for the bulk bar (Confirm, Export, Cancel), open a row's menu (View, Confirm order, Print label, Cancel; Shift+F10 on a focused row) or click a row, or press Enter on it, to open the order sheet: its status, the delivery tracker with the carrier and tracking number, the products, the client and the payment, with Confirm order, Print label and Cancel in the footer. Confirming shows a spinner in the row's badge while it saves; cancelling asks first, then offers Undo in a toast for 5 seconds. The sheet slides in from the right (a tall bottom sheet on phones, drag the handle down to close), Escape closes it and focus returns to the row. On phones the orders are cards with Load more, the header keeps the period field, a + button and a menu with Export, and the KPIs sit two by two. Sections rise in once on mount; reduced motion keeps everything still.

Admin Dashboard Page is a Pro React block in the React blocks category, written in TypeScript for React 19 and Tailwind CSS v4. It installs as source with npx wingo-ui@latest add admin-dashboard-page, together with Alert Dialog, Area chart, Avatar, Badge, Button and 26 more and the npm packages motion and lucide-react.

Add to a project

Requirements: React 19 and Tailwind CSS v4, in Next.js (App Router or Pages), Vite or React Router. Installation guide · Next.js setup · Vite setup

npx wingo-ui@latest add admin-dashboard-page

Admin Dashboard Page is part of Pro, with 298 more Pro items: $8 a month or $150 once. 14-day refund before you download any Pro item. See plans

Usage

Import AdminDashboardPage from @/components/blocks/admin-dashboard-page.

// app/(admin)/page.tsx (the shell lives in app/(admin)/layout.tsx: <AdminShell>{children}</AdminShell>)
"use client"

import { useRouter } from "next/navigation"
import { AdminDashboardPage } from "@/components/blocks/admin-dashboard-page"

export default function HomePage() {
  const router = useRouter()
  return (
    <AdminDashboardPage
      userName="Anna"
      onCreateOrder={() => router.push("/orders/new")}
      onOrderAction={async (action, order) => {
        await fetch(`/api/orders/${order.id}/${action}`, { method: "POST" })
      }}
    />
  )
}

Props

  • userNamedefault "Anna"
    string

    The name in the greeting ("Hi, Anna").

  • children
    ReactNode

    Extra sections after the built-in rows (more charts, a funnel, a table), in the page column; they rise in with the rest.

  • period
    DateRange

    The reporting period, controlled; pair it with onPeriodChange.

  • defaultPeriod
    DateRange

    The period while uncontrolled; defaults to August 26 to September 24, 2026. A change regenerates the sample through generateDashboardData when the data props are not given.

  • onPeriodChange
    (period: DateRange) => void

    Called when a complete range is applied in the date field.

  • presets
    DateRangePreset[]

    The quick ranges beside the calendar ({ key, label, value }). Defaults to Last 7 days, Last 30 days, This month, Last month, This quarter and This year, measured from now.

  • kpis
    DashboardKpi[]

    The four tiles ({ id, label, value, format, delta, deltaFormat, sparkline, goal, href, info, icon, tone, caption }); defaults to the sample for the period (ADMIN_DASHBOARD_SAMPLE.kpis). A null value shows a dash. Every card in the row keeps one anatomy: when any card has a sparkline the others get a flat baseline in its place, and when any has a delta the others show caption (default labels.noComparison). A zero change reads No change.

  • revenue
    { date: string; current: number | null; previous: number | null }[]

    Daily revenue for the chart, ISO days; defaults to the sample for the period (ADMIN_DASHBOARD_SAMPLE.revenue).

  • orders
    DashboardOrder[]

    The recent orders ({ id, number, client, date, status, payment, paid, total, items, courier, awb }); defaults to the 40 newest orders of the period (ADMIN_DASHBOARD_SAMPLE.orders).

  • recent
    ReactNode

    Your own content for the recent panel (a table of payments or sign-ups); replaces the orders table. The panel keeps its title (labels.orders) and See all link (ordersHref).

  • tasks
    DashboardTask[]

    The Needs attention rows ({ id, title, description, tone, href, count, icon }); defaults to ADMIN_DASHBOARD_SAMPLE.tasks. An empty list shows "All good".

  • activity
    TimelineItemData[]

    The team feed with actors and times; defaults to ADMIN_DASHBOARD_SAMPLE.activity (8 items).

  • topProducts
    { id; title; quantity; revenue; trend? }[]

    The Products sold table, with a 14 day sparkline from trend; defaults to the five Summit CRM products of the sample.

  • comparedefault true
    boolean

    The dashed previous-period series, the revenue change and the KPI deltas.

  • chartTypedefault "area"
    "area" | "line"

    The revenue chart: AreaChart, or LineChart with a soft area.

  • granularity
    "day" | "week"

    The revenue grouping, controlled; pair it with onGranularityChange.

  • defaultGranularitydefault "day"
    "day" | "week"

    The revenue grouping while uncontrolled; week falls back to days for periods under 14 days.

  • onGranularityChange
    (granularity: DashboardGranularity) => void

    Called when the Daily / Weekly switch changes.

  • showAttentiondefault true
    boolean

    The Needs attention panel beside the chart.

  • attentionEmptydefault "compact"
    "compact" | "panel" (AdminDashboardPageAttentionEmpty)

    With no tasks (tasks=[]): a slim "All good" strip above the revenue row, with the chart taking the full width, or the full Needs attention panel with its empty state. With tasks the panel always shows.

  • kpiIconsdefault true
    boolean

    Tinted icon tiles on the KPI cards: kpi.icon and kpi.tone, else an icon and a tone picked from the id (revenue orange, orders blue, clients green, conversion amber).

  • chartTonedefault ""
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    The revenue line's color. Unset, it follows tone (neutral: the chart's first series color); the previous period stays a muted dashed line.

  • showActivitydefault true
    boolean

    The team activity feed.

  • showTopProductsdefault true
    boolean

    The Products sold table.

  • topProductsColumnsdefault "["quantity", "revenue", "trend"]"
    ("quantity" | "revenue" | "trend")[]

    The value columns of the top table, in order. The first one is the phone card's value; ["quantity"] turns it into a plain ranking (installs, views).

  • ordersPageSizedefault 8
    number

    Orders per page on desktop, and per load on phones.

  • onOrderAction
    (action: DashboardOrderAction, order: DashboardOrder) => (void | Promise<unknown>)

    Runs a row, bulk or sheet action (confirm, cancel or print). The status changes at once and the row shows a spinner until the promise settles; a rejection rolls it back with an error toast. Without it the page waits 900 ms and toasts.

  • onExport
    (period: DateRange) => (void | Promise<unknown>)

    The Export action; a promise keeps the button loading. Without it a toast confirms the export.

  • onCreateOrder
    () => (void | Promise<unknown>)

    The New order action. Without it a toast stands in for the form.

  • orderSheetdefault true
    boolean

    A row click opens the order sheet; false only calls onOrderClick.

  • onOrderClick
    (order: DashboardOrder) => void

    Called when a row or its View action is chosen (before the sheet opens).

  • defaultOpenOrderdefault ""
    string

    An order id whose sheet is open on mount (o1042 is the one in delivery).

  • ordersHrefdefault "/orders"
    string

    Where the orders panel's See all goes.

  • activityHrefdefault "/activity"
    string

    Where the activity panel's See all goes.

  • labels
    Partial<AdminDashboardPageLabels>

    Every visible string (English, DEFAULT_ADMIN_DASHBOARD_PAGE_LABELS; ADMIN_DASHBOARD_PAGE_LABELS_EN is the same set). Nested keys (statCard, chart, dateRange, ordersTable, table, list, timeline, orderTracker, sparkline) translate the composed items.

  • localedefault "en-US"
    string

    Intl locale for numbers, money and dates.

  • currencydefault "USD"
    string

    ISO 4217 code for the KPIs, the chart, the orders and the products.

  • now
    Date | number

    The reference time for today, the presets and the relative times; default the live clock.

  • tonedefault "neutral"
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    The primary actions, the KPI sparklines and goal bar, the chart's current series and the date selection.

  • radiusdefault "md"
    "sm" | "md" | "lg"

    Corner size of the KPI tiles and the panels (12 / 16 / 24px).

  • loadingdefault false
    boolean

    Skeletons in the real layout: the header, the tiles, the chart, the rows and the feed.

  • animateIndefault true
    boolean

    Sections rise in once when the page mounts on the client; off in thumbnails and under reduced motion.

  • linkComponentdefault "<a>"
    (props: LinkComponentProps) => ReactNode

    The router link for the panel links and the attention rows; default the surrounding LinkProvider's (the admin shell's).

  • className
    string

    Classes for the root.

  • classNames
    Partial<Record<AdminDashboardPageSlot, string>>

    Classes for header, kpis, row, revenue, attention, orders, top, activity and orderSheet.

Parts

  • DEFAULT_ADMIN_DASHBOARD_PAGE_LABELS

    constant

    Every English string of the dashboard: greeting, period, KPI names, chart, orders, alerts and activity. Spread it and override what you translate.

  • ADMIN_DASHBOARD_PAGE_LABELS_EN

    constant

    An alias of DEFAULT_ADMIN_DASHBOARD_PAGE_LABELS, kept so older imports keep working.

  • generateDashboardData

    function

    Builds the whole dashboard (KPIs, revenue series, orders, alerts) for one period; the same period and seed always give the same numbers.

  • sampleTasks

    function

    Returns the sample alerts: overdue invoices, unconfirmed orders, low stock and a failed payment, each with a tone and a link.

  • sampleActivity

    function

    Returns the team's latest actions for the activity timeline, timed relative to a given now.

  • ADMIN_DASHBOARD_SAMPLE

    constant

    The demo dashboard for the default period, with its period and now. Replace it with data from your API.

  • ADMIN_DASHBOARD_DEFAULT_PERIOD

    constant

    The period the dashboard opens on when defaultPeriod is not set: the 30 days up to the sample's now (August 26 to September 24, 2026).

  • ADMIN_DASHBOARD_NOW

    constant

    The fixed "now" of the sample (September 24, 2026, 4:40 PM), so server and client render the same numbers.

  • ADMIN_DASHBOARD_ORDER_IDS

    constant

    The four sample order ids the demo offers for defaultOpenOrder.

Examples

Open

Order sheet open on #1042

defaultOpenOrder="o1042": out for delivery with UPS, tracking 1Z 999 AA1 01 2345 678.

Open

Loading

loading: skeleton tiles, chart, rows and feed in the real layout.

Open

An empty period

January 1 to January 7, 2026, the office was closed: KPIs show a dash, the table offers another period.

Open

Launch day

No sales yet: zero KPIs read No change, the revenue panel is one row, All good is a slim strip and empty tables drop their headers.

Open

Brand tone, weekly line chart

tone="brand", chartType="line", defaultGranularity="week".

Open

All clear, no comparison

tasks={[]} shows All good; compare={false} hides the previous period and the deltas.

Open

Your own sections

recent replaces the orders table, children add sections, topProductsColumns={["quantity"]} and two presets.

Open

British English, euros

locale="en-GB", currency="EUR" with a controlled period regenerating the sample.

Dependencies

motionlucide-reactalert-dialogarea-chartavatarbadgebuttondata-tabledate-range-pickerdescription-listdropdown-menuempty-stateline-chartlistorder-trackerpage-headersegmented-controlsheetsparklinestat-cardtabletimelinetoastuse-controllable-stateuse-media-querycommercedate-utilsmotionnavigationnumber-formatrelative-timetonesui-config

Files

  • components/blocks/admin-dashboard-page.tsx
  • components/blocks/admin-dashboard-page-data.ts

FAQ

Is the React Admin Dashboard Page block free?

The preview, props and docs are free; copying the source needs a Pro plan. See plans.

How do I install Admin Dashboard Page?

Run npx wingo-ui@latest add admin-dashboard-page. It also adds the Wingo UI items it builds on (Alert Dialog, Area chart, Avatar, Badge, Button and 26 more) and the npm packages motion and lucide-react. With shadcn, add the @wingo-ui registry with your API key, then run npx shadcn@latest add @wingo-ui/admin-dashboard-page.

How does Admin Dashboard Page behave on phones?

Pick the period in the date range field (presets such as Last 7 days or Last month beside two months on desktop, a bottom sheet on phones): every panel fades to the new numbers, the KPI values count to theirs and the chart grows again.

See also

KPI DashboardAdmin ShellData TableStat CardOrder trackerArea chart

More React blocks

AI Chat PageAPI Keys PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline Page
All 26 React blocks

Articles using this component

  • Best shadcn Templates in 2026: Free and Paid, Tested

    Comparisons and alternatives · Nov 6, 2026 · 11 min read

  • Nextjs Admin Dashboard Tutorial: 5 Screens, Phone-Ready

    Build it: screens and apps · Oct 9, 2026 · 23 min read

PreviousVideo SectionNext Admin Shell