{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "z-date-display",
  "title": "Z Date Display",
  "dependencies": [],
  "devDependencies": [],
  "registryDependencies": [
    "https://ui.orchid.ai/r/orchid-foundation.json",
    "https://ui.orchid.ai/r/orchid-theme.json"
  ],
  "files": [
    {
      "path": "registry/ui/orchid/spectrum/atoms/z-date-display/z-date-display.tsx",
      "content": "\"use client\";\nimport { cn } from \"../../../lib/ui-utils\";\ntype Props = {\n    className?: string;\n    date: Date | string;\n    showRelative?: boolean;\n};\nfunction formatRelativeTime(date: Date): string {\n    const now = new Date();\n    const diffInMs = now.getTime() - date.getTime();\n    const diffInDays = Math.floor(diffInMs / (1000 * 60 * 60 * 24));\n    if (diffInDays === 0) {\n        const diffInSeconds = Math.floor(diffInMs / 1000);\n        const diffInMinutes = Math.floor(diffInMs / (1000 * 60));\n        const diffInHours = Math.floor(diffInMs / (1000 * 60 * 60));\n        if (diffInSeconds < 60) {\n            return `${diffInSeconds}s ago`;\n        }\n        else if (diffInMinutes < 60) {\n            return `${diffInMinutes}m ago`;\n        }\n        else {\n            return `${diffInHours}h ago`;\n        }\n    }\n    else if (diffInDays === 1) {\n        return '1d ago';\n    }\n    else if (diffInDays < 7) {\n        return `${diffInDays}d ago`;\n    }\n    else if (diffInDays < 30) {\n        const weeks = Math.floor(diffInDays / 7);\n        return `${weeks}w ago`;\n    }\n    else if (diffInDays < 365) {\n        const months = Math.floor(diffInDays / 30);\n        return `${months}mo ago`;\n    }\n    else {\n        const years = Math.floor(diffInDays / 365);\n        return `${years}y ago`;\n    }\n}\nfunction formatDate(date: Date): string {\n    const day = date.getDate();\n    const month = date.toLocaleDateString('en-US', { month: 'short' }).slice(0, 3);\n    return `${day} ${month}`;\n}\nexport default function ZDateDisplay({ className, date, showRelative = true }: Props) {\n    const dateObj = typeof date === 'string' ? new Date(date) : date;\n    if (isNaN(dateObj.getTime()) || dateObj.getTime() <= 0) {\n        return <></>;\n    }\n    const formattedDate = formatDate(dateObj);\n    const relativeTime = showRelative ? formatRelativeTime(dateObj) : '';\n    const now = new Date();\n    const diffInMs = now.getTime() - dateObj.getTime();\n    const diffInHours = Math.floor(diffInMs / (1000 * 60 * 60));\n    const shouldShowDate = diffInHours >= 24 * 7;\n    let displayText;\n    if (showRelative && shouldShowDate) {\n        displayText = `${formattedDate}, ${relativeTime}`;\n    }\n    else if (showRelative) {\n        displayText = relativeTime;\n    }\n    else {\n        displayText = formattedDate;\n    }\n    if (showRelative && diffInMs < 0) {\n        return <></>;\n    }\n    return <span className={cn('whitespace-nowrap', className)}>{displayText}</span>;\n}\n",
      "type": "registry:ui",
      "target": "@ui/orchid/spectrum/atoms/z-date-display/z-date-display.tsx"
    }
  ],
  "type": "registry:ui"
}