Skip to content

chore(report): migrate away from @tremor/react to a React 19-compatible component library #1709

@SamErde

Description

@SamErde

Note

We're looking for volunteers who are familiar with Vite and Tailwind to pick this task up! 🙏 I could vibe-code the replacement but would love to see what someone with more experience could do with a more comprehensive approach to optimizing and future-proofing the report. I suspect there may be other components that could be consolidated or patched along with this one!

Background

The /report sub-project currently depends on @tremor/react@3.18.7 for several UI components (Card, Grid, Dialog/DialogPanel, Tab/TabGroup/TabList/TabPanel/TabPanels). This dependency is a blocker for achieving a fully clean dependency tree with React 19.

The Problem

@tremor/react declares its peer dependency as react: "^18.0.0" and pins react-day-picker: "^8.10.1" (a major version behind the current 9.x release). As a result, running npm ls against the /report project produces ELSPROBLEMS warnings because the project uses react@19.2.5.

npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @tremor/react@3.18.7
npm warn Found: react@19.2.5
npm warn node_modules/react
npm warn   peer react@"^18.0.0" from @tremor/react@3.18.7

This pre-existing conflict blocks 100%-confidence merging of Dependabot PRs (e.g., #1706, #1707, #1708) that otherwise build and audit cleanly.

Tremor Maintenance Status

@tremor/react does not appear to be actively maintained for current React compatibility:

Signal Detail
Last npm release 3.18.7 on 2025-01-13 — no movement in over 15 months
React 19 support issue tremorlabs/tremor-npm#1072 — open since May 2024, no fix landed
Open PRs for React 19 None found
Headless UI pinned to 2.2.0 React 19 compatibility would require dependency updates beyond peer range changes
react-day-picker pinned to ^8.10.1 DayPicker 9 is a breaking major update; would require Tremor source changes
Community signals Comments on open issues call it "unmaintained" as of early 2026

Scope of Tremor Usage in /report

Usage is limited — Tremor charts and date pickers are not used. Only layout/UI primitives are imported:

File Imported components
src/pages/ConfigPage.tsx Card
src/pages/ExcelPage.tsx Dialog, DialogPanel
src/pages/HomePage.tsx Grid
src/pages/MarkdownPage.tsx Dialog, DialogPanel, Tab, TabGroup, TabList, TabPanel, TabPanels

This narrow footprint makes migration realistic without a full rewrite.

Recommended Migration Path

The /report project already has the building blocks to replace Tremor:

  • Tailwind CSS — already configured for layout and utility classes
  • @radix-ui/react-dialog — already a direct dependency; can replace Dialog/DialogPanel
  • @headlessui/react — already a direct dependency (independent of Tremor's pinned copy); can replace Tabs
  • Local Tailwind wrapperCard and Grid can be simple div-based components

Alternatively, if a richer component library is needed, Mantine (@mantine/core@9.x) explicitly targets react: "^19.2.0" and is actively released (latest 9.1.1 published 2026-04-27).

Acceptance Criteria

  • @tremor/react is removed from /report/package.json
  • All four files above are updated to use replacement components
  • npm ls in /report produces no ELSPROBLEMS peer dependency warnings related to React 19
  • npm run build in /report succeeds
  • Visual output of the generated report is verified to be equivalent

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency filehelp wantedExtra attention is neededjavascriptPull requests that update javascript codereportRelated to the Maester report functionality

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions