Skip to content
WingoUI
ComponentsTemplatesDocsPricingAI agentsBlogChangelog
Components
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerEmail InputFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime PickerTimezone Select
Forms
Address InputCSV 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 LightboxLocation MapPDF ViewerPowerPoint ViewerQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Background PatternGravity LettersMarqueeText 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 FlowPost Listing WizardPricing PageRegister PageSettings PageUsers Admin Page
Templates
About PageAcademy PageAccessibility PageAffiliate PageAI Product 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 PageImpact PageIntegration Detail PageIntegrations PageJob Detail PageLanding PageLaunch PageLegal PageManifesto PagePress PageProduct Tour PagePromo PageReferral PageResearch Report PageRoadmap PageROI Calculator PageSecurity PageSolutions PageStartups PageStatus PageSwitch PageTemplate Gallery PageWaitlist PageYear in Review Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryTheme

Templates

Research Report Page

Templates

Research Report Page React template for Tailwind CSS v4

Design
Referral PageRoadmap Page
Design
Live props
Appearance
design
background
backgroundColor
bandBackground
bandColor
coverColor
tone
ctaTone
State
defaultMeetingHours
defaultTools
Behavior
minSample
requireWorkEmail
reportHref
pressKitHref
privacyHref
siteUrl
animateIn
locale
Layout
header
footer
showAnnouncement
showHeadlines
showFindings
showExplorer
showQuotes
showChapters
showMethodology
showAuthors
showPress
showArchive
showCta
ctaVariant
Code
import { ResearchReportPage } from "@/components/templates/research-report-page"

<ResearchReportPage />
  1. Home
  2. Templates
  3. Research Report Page
Pro

Research Report Page React template for Tailwind CSS v4

v1.0.0·Added in 1.9.0

A gated research report landing page: a drawn report cover, a download form, five key findings with charts and a benchmark explorer.

The hero sets the report title beside a tilted, layered report cover whose pattern is drawn from the survey's week split, and a gated download form. Name, work email (personal addresses are turned away), company size and role validate on submit and focus the first problem; the button spins, then the form turns into a success card with a Download PDF link, an Add to calendar file for the live briefing and Send to another email (onDownload, or a 900 ms pretend). The headline numbers and the five findings roll up and their charts grow once (final in the server markup). Every chart has a title, the survey question as a note, a legend where it needs one and a View data toggle that swaps the drawing for its table; hover, tap or Tab to a dot group (arrow keys switch groups), a week segment, a slope line, a blocker bar, a Likert answer or a histogram bin for its values, Escape hides the tooltip. The explorer filters the survey by industry and region (selects, bottom sheets on phones) and company size (a segmented control); the respondent count, a small sample warning, four KPIs with their difference from all respondents and three charts update live, and Reset filters clears them. Two sliders (arrow keys work) place your team on the meeting hours and tools distributions with a marker and a Top N% badge. Two chapters expand inline to read; the others show a lock until the report is downloaded. The press block copies an iframe embed code for any chart and a citation in APA, MLA or Chicago.

Built with

The sections this page is made of. In the full-screen preview, hold Alt to outline each one on the page.

  • Marketing Sectionmarketing-section
  • Marketing Headermarketing-header
  • Marketing Footermarketing-footer
  • CTA Sectioncta-section

Add to a project

npx wingo-ui@latest add research-report-page

Pro item: the CLI needs a Pro account. See plans

Usage

Import ResearchReportPage from @/components/templates/research-report-page.

// app/(marketing)/report/page.tsx
"use client"

import Link from "next/link"
import { ResearchReportPage } from "@/components/templates/research-report-page"

export default function ReportRoute() {
  return (
    <ResearchReportPage
      linkComponent={Link}
      ctaTone="brand"
      onDownload={async (values) => {
        await fetch("/api/report-leads", { method: "POST", body: JSON.stringify(values) })
      }}
    />
  )
}

Props

  • designdefault "classic"
    "classic" | "editorial" | "bold"

    The whole page's look. classic: copy, a tilted report cover and a form card side by side, raised chart cards and muted bands over a faint grid; editorial: a printed journal with a masthead, giant start-aligned type, an inline form, numbered ruled findings and flat charts; bold: a deep dark cover band in the page tint with a glowing report, giant numbers on flat tiles and a wordmark footer. ctaProps, headerProps and footerProps still win.

  • backgrounddefault "grid"
    "plain" | "soft" | "glow" | "aurora" | "grid" | "dots"

    The main background: plain is the bare page color; the others tint the page and add a glow, an aurora, a grid or dots over the first screen. A design picks its own unless you set one. classic uses grid, editorial and bold soft (bold covers it with a dark band in the page tint).

  • backgroundColordefault "oklch(0.62 0.14 275)"
    string

    The tint and glow color of the main background.

  • bandBackgrounddefault "muted"
    "muted" | "tinted" | "gradient" | "dots"

    The secondary background of the alternating bands (classic design). Cards, fields and tiles inside a band are lifted one step above it, so they never share its color.

  • bandColordefault "oklch(0.62 0.14 275)"
    string

    The tint of tinted and gradient bands; defaults to backgroundColor.

  • reportdefault "REPORT_INFO"
    ReportInfo

    { title, year, subtitle, publisher, volume, published, pages, respondents, countries, marginOfError, fileSize }: the cover, the hero copy and the form.

  • headlinesdefault "REPORT_HEADLINES"
    ReportHeadline[]

    { id, value, decimals?, prefix?, suffix?, label }: the strip of survey facts under the hero.

  • findingsdefault "REPORT_FINDINGS"
    ReportFinding[]

    { id, value, prefix?, suffix?, title, body, chartTitle, source, chart }: the key findings; chart.type is dots, stack, slope, ranked or likert. They also feed the embed picker.

  • cellsdefault "REPORT_CELLS"
    ReportCell[]

    The explorer cube: one cell per industry, size and region with its respondents (n), weekly hours, tools, shares and two histograms. Every view is the respondent weighted average of the matching cells.

  • industriesdefault "REPORT_INDUSTRIES"
    ReportOption[]

    { value, label }: the industry filter and the sample chart.

  • sizesdefault "REPORT_SIZES"
    ReportOption[]

    { value, label }: the company size segments.

  • regionsdefault "REPORT_REGIONS"
    ReportOption[]

    { value, label }: the region filter.

  • filters
    ReportExplorerFilters

    { industry, size, region }, each an option value or "all": the explorer's filters, controlled.

  • defaultFilters
    Partial<ReportExplorerFilters>

    The explorer's filters on load, uncontrolled; missing keys are "all".

  • onFiltersChange
    (filters: ReportExplorerFilters) => void

    Runs when a filter changes or Reset filters is pressed.

  • defaultMeetingHoursdefault 10
    number

    Where the Your team meeting hours slider starts (0 to 30).

  • defaultToolsdefault 8
    number

    Where the Your team tools slider starts (1 to 20).

  • minSampledefault 100
    number

    Explorer views with fewer respondents show a small sample warning.

  • quotesdefault "REPORT_QUOTES"
    ReportQuote[]

    { id, quote, role, context }: anonymous respondent quotes; the first is the large one.

  • chaptersdefault "REPORT_CHAPTERS"
    ReportChapter[]

    { id, title, summary, page, unlocked?, body?, takeaway? }: the table of contents; unlocked chapters with a body expand inline.

  • methoddefault "REPORT_METHOD"
    ReportMethodItem[]

    { id, label, value, detail }: sample, fieldwork, margin of error and weighting.

  • authorsdefault "REPORT_AUTHORS"
    ReportAuthor[]

    { id, name, role, bio }: the research team, with initials avatars.

  • citationsdefault "REPORT_CITATIONS"
    ReportCitation[]

    { id, label, text }: the citation styles to copy.

  • pastReportsdefault "REPORT_PAST"
    ReportPastReport[]

    { id, year, title, headline, pages, href }: earlier editions, each with its own drawn cover.

  • briefingdefault "REPORT_BRIEFING"
    ReportBriefing

    { title, start (iso), durationMinutes, timeZone, timeZoneLabel, href }: the live briefing in the announcement, the calendar file and the closing band.

  • companySizesdefault "REPORT_COMPANY_SIZES"
    ReportOption[]

    The form's company size options.

  • rolesdefault "REPORT_ROLES"
    ReportOption[]

    The form's role options.

  • requireWorkEmaildefault true
    boolean

    Turns away personal email addresses (freeEmailDomains) with an error.

  • freeEmailDomainsdefault "REPORT_FREE_EMAIL_DOMAINS"
    string[]

    The personal email domains requireWorkEmail rejects.

  • reportHrefdefault "/report/acme-state-of-teamwork-2026.pdf"
    string

    The PDF behind Download PDF after the form succeeds.

  • pressKitHrefdefault "/report/acme-state-of-teamwork-2026-press-kit.zip"
    string

    The press kit link.

  • privacyHrefdefault "/legal/privacy"
    string

    The privacy policy link under the form.

  • siteUrldefault "https://acme.com"
    string

    The base url of the embed codes and the calendar file.

  • onDownload
    (values: ResearchReportDownloadValues) => (void | Promise<unknown>)

    Runs with { name, email, companySize, role } once the form is valid. A returned promise keeps the button loading; a rejection shows an error. Without it: 900 ms, then the success card.

  • coverColordefault "#14213d"
    string

    The drawn report covers' paper color; the cover text turns black or white to match.

  • headerdefault true
    boolean

    The marketing header; off inside a site layout that has one.

  • footerdefault true
    boolean

    The marketing footer.

  • showAnnouncementdefault true
    boolean

    The strip above the header bar with the briefing date (labels.announcement).

  • showHeadlinesdefault true
    boolean

    The survey facts under the hero.

  • showFindingsdefault true
    boolean

    The key findings and their charts.

  • showExplorerdefault true
    boolean

    The benchmark explorer with filters, KPIs, distributions and the Your team sliders.

  • showQuotesdefault true
    boolean

    Respondent quotes.

  • showChaptersdefault true
    boolean

    The table of contents with the readable and locked chapters.

  • showMethodologydefault true
    boolean

    Sample, fieldwork, margin of error, weighting and the sample composition chart.

  • showAuthorsdefault true
    boolean

    The research team and the press contact.

  • showPressdefault true
    boolean

    Embed a chart, cite the report and the press kit.

  • showArchivedefault true
    boolean

    Past reports.

  • showCtadefault true
    boolean

    The closing band.

  • ctaVariantdefault "inverted"
    "inverted" | "soft" | "split"

    The closing band: a solid band, a soft band, or copy beside the buttons on a raised panel. Applies to the classic design.

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

    The explorer's size segments, sliders and Top N% badges, and the citation style switch.

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

    Download the report, Download PDF, Get the full report, the header's Get started and the closing band.

  • headerProps
    Partial<MarketingHeaderProps>

    Passed to MarketingHeader.

  • footerProps
    Partial<MarketingFooterProps>

    Passed to MarketingFooter.

  • ctaProps
    Partial<CtaSectionProps>

    Passed to the closing CtaSection, spread last.

  • onSubscribe
    (email: string) => (void | Promise<unknown>)

    The footer newsletter; a rejected promise shows an error. Without it: 900 ms, then success.

  • animateIndefault true
    boolean

    The hero rises in once, numbers roll up and charts grow the first time they scroll into view (never under reduced motion). Everything is final in the server markup.

  • localedefault "en-US"
    string

    Intl locale for every number, percent and date.

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

    The router link for every link on the page (next/link in an app).

  • labelsdefault "DEFAULT_RESEARCH_REPORT_PAGE_LABELS"
    Partial<ResearchReportPageLabels>

    Every visible string; {placeholders} are filled from the data.

  • className
    string

    Classes for the root.

  • classNames
    Partial<Record<ResearchReportPageSlot, string>>

    Classes for header, hero, cover, form, headlines, findings, finding, panel, explorer, quotes, chapters, methodology, authors, press, archive, cta and footer.

Parts

  • RESEARCH_REPORT_PAGE_DESIGNS

    constant

    The design names: classic, editorial, bold.

  • DEFAULT_RESEARCH_REPORT_PAGE_LABELS

    constant

    Every default string, in English.

  • REPORT_SAMPLE

    constant

    All the sample content in one object.

  • REPORT_INFO

    constant

    The State of Teamwork 2026: 64 pages, 4,200 respondents in 18 countries.

  • REPORT_HEADLINES

    constant

    Respondents, countries, pages and the margin of error.

  • REPORT_WEEK

    constant

    The 40 hour week split: deep work, meetings, status updates, chat and admin.

  • REPORT_FINDINGS

    constant

    Five findings, one of each chart type.

  • REPORT_INDUSTRIES

    constant

    Five industries.

  • REPORT_SIZES

    constant

    Four company size bands.

  • REPORT_REGIONS

    constant

    Four regions.

  • REPORT_MEETING_BINS

    constant

    Meeting hours histogram edges; the last bin is open.

  • REPORT_TOOL_BINS

    constant

    Tools histogram edges; the last bin is open.

  • REPORT_WORK_WEEK

    constant

    40, the hours the week split is read against.

  • REPORT_CELLS

    constant

    80 cells generated from a few factors and normalized so every view agrees with the findings.

  • REPORT_QUOTES

    constant

    Five anonymous respondent quotes.

  • REPORT_CHAPTERS

    constant

    Seven chapters with page numbers; the first two are readable.

  • REPORT_METHOD

    constant

    Sample, fieldwork, margin of error and weighting.

  • REPORT_AUTHORS

    constant

    Sophia Reed, Ethan Parker, Mason Hayes and Olivia Bennett.

  • REPORT_CITATIONS

    constant

    APA, MLA and Chicago citations.

  • REPORT_PAST

    constant

    The 2025 and 2024 editions.

  • REPORT_BRIEFING

    constant

    The live briefing on Nov 18, 2026, 45 minutes.

  • REPORT_COMPANY_SIZES

    constant

    The form's company size options.

  • REPORT_ROLES

    constant

    The form's role options.

  • REPORT_FREE_EMAIL_DOMAINS

    constant

    Personal email domains the work email check rejects.

  • ResearchReportPageDesign

    type

    classic | editorial | bold.

  • ResearchReportPageSlot

    type

    The classNames keys.

  • ResearchReportPageLabels

    type

    The labels object.

  • ResearchReportDownloadValues

    type

    { name, email, companySize, role }: what onDownload gets.

  • ReportInfo

    type

    The report's title, year and numbers.

  • ReportHeadline

    type

    One survey fact.

  • ReportSegment

    type

    { id, label, value }: a part of a whole or a ranked item.

  • ReportLikertItem

    type

    One statement with its five answer shares.

  • ReportFindingChart

    type

    The chart of a finding: dots, stack, slope, ranked or likert.

  • ReportFinding

    type

    One key finding.

  • ReportOption

    type

    { value, label }.

  • ReportCell

    type

    One explorer cell.

  • ReportExplorerFilters

    type

    { industry, size, region }.

  • ReportQuote

    type

    One respondent quote.

  • ReportChapter

    type

    One chapter of the report.

  • ReportMethodItem

    type

    One methodology fact.

  • ReportAuthor

    type

    One author.

  • ReportCitation

    type

    One citation style.

  • ReportPastReport

    type

    One earlier edition.

  • ReportBriefing

    type

    The live briefing.

Examples

Open

Editorial design

design="editorial": a printed journal. A masthead, giant start-aligned type, the form in one ruled row, numbered findings with flat charts.

Open

Bold design

design="bold": a dark cover band with a glowing report, giant numbers on flat tiles and a wordmark footer.

Open

Brand orange, burgundy cover

ctaTone="brand" on the download buttons and the closing band, tone="brand" on the explorer, a custom coverColor and ctaVariant="split".

Open

Benchmark only, filtered

Without the header and footer, the explorer starts on European software companies with 51 to 250 people and a busier team.

Dependencies

lucide-reactmotionmarketing-sectionmarketing-headermarketing-footercta-sectionanimated-counteravatarbuttoncopy-buttoninputsegmented-controlselectslideruse-controllable-statechart-kitmotionnavigationtonesui-config

Files

  • components/templates/research-report-page.tsx
  • components/templates/research-report-page-data.ts

See also

Impact PageYear in Review PageBar chartSegmented ControlCTA Section
PreviousReferral PageNext Roadmap Page