This component no longer exists. It was in diceui/base’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-13 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
relative-time-card
diceui-base/relative-time-cardRemovedComponent
diceui/base publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/sadmann7/diceui/HEAD/docs/public/r/styles/base-vega/relative-time-card.jsonSource
1"use client";23import { cva, type VariantProps } from "class-variance-authority";4import * as React from "react";5import { cn } from "@/lib/utils";6import {7 HoverCard,8 HoverCardContent,9 HoverCardTrigger,10} from "@/registry/bases/base/ui/hover-card";1112function pluralize(n: number, word: string) {13 return `${n} ${word}${n === 1 ? "" : "s"}`;14}1516function formatRelativeTime(date: Date): string {17 const now = new Date();18 const diff = now.getTime() - date.getTime();19 const isInFuture = diff < 0;20 const absDiff = Math.abs(diff);2122 const seconds = Math.floor(absDiff / 1000);23 const minutes = Math.floor(seconds / 60);24 const hours = Math.floor(minutes / 60);25 const days = Math.floor(hours / 24);2627 if (seconds < 5) return "just now";2829 if (isInFuture) {30 if (seconds < 60) return `in ${pluralize(seconds, "second")}`;31 if (minutes < 60) return `in ${pluralize(minutes, "minute")}`;32 if (hours < 24) return `in ${pluralize(hours, "hour")}`;33 if (days < 7) return `in ${pluralize(days, "day")}`;34 return date.toLocaleDateString();35 }3637 if (seconds < 60) return `${pluralize(seconds, "second")} ago`;38 if (minutes < 60)39 return `${pluralize(minutes, "minute")} ${pluralize(seconds % 60, "second")} ago`;40 if (hours < 24) return `${pluralize(hours, "hour")} ago`;41 if (days < 7) return `${pluralize(days, "day")} ago`;42 return date.toLocaleDateString();43}4445interface TimezoneCardProps extends React.ComponentProps<"div"> {46 date: Date;47 timezone?: string;48}4950function TimezoneCard(props: TimezoneCardProps) {51 const { date, timezone, ...cardProps } = props;5253 const locale = React.useMemo(54 () => Intl.DateTimeFormat().resolvedOptions().locale,55 [],56 );5758 const timezoneName = React.useMemo(59 () =>60 timezone ??61 new Intl.DateTimeFormat(locale, { timeZoneName: "shortOffset" })62 .formatToParts(date)63 .find((part) => part.type === "timeZoneName")?.value,64 [date, timezone, locale],65 );6667 const { formattedDate, formattedTime } = React.useMemo(68 () => ({69 formattedDate: new Intl.DateTimeFormat(locale, {70 month: "long",71 day: "numeric",72 year: "numeric",73 timeZone: timezone,74 }).format(date),75 formattedTime: new Intl.DateTimeFormat(locale, {76 hour: "2-digit",77 minute: "2-digit",78 second: "2-digit",79 hour12: true,80 timeZone: timezone,81 }).format(date),82 }),83 [date, timezone, locale],84 );8586 return (87 <div88// … truncated
What it pulls in
npm packages
Other registry items
