# Weekly Timesheet block

> Weekly team timesheet data grid with per-day hours and billable target tracking

People rows plus seven day cells of logged hours with progress bars, and a weekly Total with target-coverage. Team, tracked-time, and billable Select filters, a Calendar week navigator, pagination. ReUI DataGrid, Frame; shadcn Avatar, Tooltip.

- Type: Pro block
- Category: [Base](https://web.dev.reui.io/blocks/data-grid/base.md)
- Page: https://web.dev.reui.io/blocks/data-grid/base/data-grid-base-4
- Docs (Base UI): https://web.dev.reui.io/docs/components/base/data-grid.md
- Docs (Radix UI): https://web.dev.reui.io/docs/components/radix/data-grid.md
- MCP: `get_block("data-grid-base-4")`
- Built with: Avatar, Button, Button Group, Calendar, Data Grid, Frame, Popover, Select, Separator, Tooltip
- Installs with a ReUI Pro or Ultimate license; setup: https://web.dev.reui.io/docs/license-setup

## Best for

A row per person with 7 day cells of logged hours, a work kind bar and a note tooltip, plus a Calendar week picker

## Agent notes

- Replace `TIMESHEET_PEOPLE`; sample `entries` cover only the weeks of 2026-03-16, 2026-03-23 and 2026-03-30, other weeks show `EMPTY_ENTRY`
- `weeklyTargetMinutes` sets each target; `getTrackedTimeState` calls under 85% under-target and over 108% overtime
- `DayCell` is a read-only tooltip trigger with no click handler, so logging or editing hours needs your own form

## When not to use

- A month calendar beside a day agenda of dated events: use [Appointment Planner](https://web.dev.reui.io/blocks/application/schedule/schedule-1.md) (`get_block("schedule-1")`)

## Third-party libraries

- TanStack Table v9: [API reference](https://tanstack.com/table/v9/docs/framework/react/reference/index), [docs](https://tanstack.com/table/v9/docs/framework/react/quick-start)
- date-fns v4: [docs](https://date-fns.org/v4.1.0/docs/Getting-Started)
- React DayPicker v9: [API reference](https://daypicker.dev/v9/api), [docs](https://daypicker.dev/v9/start), through shadcn Calendar

## Install

```bash
npx shadcn@latest add @reui/data-grid-base-4
```

## About Base blocks

### When to use

- A whole table section: a title, a create button, filter controls, the rows and pagination
- Customer, contact and deal tables for a sales team, with a row menu, pinned rows or a rule filter bar
- Operations tables for support tickets, weekly timesheets, team members, project modules or SKU prices

### When not to use

- A bare table for your own columns and rows, without a title bar, toolbar or demo rows: use [Data Grid](https://web.dev.reui.io/components/data-grid.md) (`get_component("data-grid")`)
- Thousands of rows in one scrolling list that loads more as the reader nears the end: use the [Virtualization blocks](https://web.dev.reui.io/blocks/data-grid/virtualization.md)
- A payments ledger, a renewals queue or an automation library led by a rule filter bar: use the [Filtering blocks](https://web.dev.reui.io/blocks/data-grid/filtering.md)

### Agent notes

- Each page.tsx wraps the table in a centered `min-h-svh` main under an sr-only `h1`; drop that wrapper and keep a single `h1` once it sits in your page
- Each block filters and pages its data.tsx rows in the browser with `pagination` in local state; move both to your API before the row count grows large

Every ReUI item has a twin like this one; the index is https://web.dev.reui.io/llms.txt. Agents with the ReUI MCP (https://web.dev.reui.io/docs/mcp) get the same guidance from the getters named above.
