Data retention

Pro

How long each kind of data is kept, and what happens after. Read-only: the rows are the service's policy, with the version and date it last changed, so nothing here can drift from what actually happens.

Markdown

Preview

Install

With the Candor CLI

First time? Get started sets up the registry and theme. Or with shadcn directly: npx shadcn@latest add @candor/data-retention

Brings in: locale, utils · npm: lucide-react@^1.67.0

Usage

TSX · The example above
"use client"

import { DataRetention, type RetentionRow } from "@/components/data-retention"

const rows: RetentionRow[] = [
  { kind: "Threads and messages", kept: "Until you delete it", after: "Deleted within 30 days", note: "Visible to members of the account" },
  { kind: "Run logs", kept: "90 days", after: "Summarised, then deleted" },
  { kind: "Audit log", kept: "1 year", after: "Deleted" },
  { kind: "Uploaded files", kept: "Until you delete it", after: "Deleted within 30 days" },
]

export default function Example() {
  return <DataRetention className="max-w-2xl" rows={rows} version="v4" changedAt="2026-09-14" />
}

<DataRetention>

PropTypeDefaultDescription
rowsrequiredRetentionRow[]—One row per kind of data: how long it's kept and what happens after.
versionrequiredstring—The policy's version, shown in the header.
changedAtrequiredstring—When the policy last changed, as an ISO date.
classNamestring | undefined—Extra classes for the outer element.

Strings

The fixed words, in English by default. Change any of them under dataRetention in <LocaleProvider strings={{ … }}>; the table is exported as dataRetentionStrings.

KeyEnglish
labelData retention
headingHow long data is kept
policyPolicy {version} · changed {changed}
dataData
keptKept
thenThen

Types

RetentionRow
{ /** What kind of data, e.g. "Threads and messages". */ kind: string /** How long it's kept, e.g. "Until you delete it", "90 days". */ kept: string /** What happens then, e.g. "Deleted", "Summarised, then deleted". */ after: string /** Optional detail: where it lives, who can see it. */ note?: string | undefined }