import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react'; import { useState } from 'react'; import { Badge } from '#/components/atoms/badge.jsx'; import { CopyCommand } from '#/components/molecules/copy-command.jsx'; import { bytes, timeAgo } from '#/lib/format.js'; /** One release line: its name, what it weighs, and when it was published. */ function ReleaseRow({ release }) { return (
{release.name} {release.digest && ( {release.digest} )} {release.size > 0 && bytes(release.size)} {release.publishedAt ? ` ยท ${timeAgo(release.publishedAt)}` : ''}
); } /** * One package: what installs it, and every release behind a disclosure. An * npm package lists its versions, an image its tags. */ export function PackageCard({ pkg }) { const [open, setOpen] = useState(false); const Chevron = open ? ChevronDownIcon : ChevronRightIcon; const count = pkg.releases.length; const noun = pkg.registry === 'oci' ? 'tag' : 'version'; return (
  • {pkg.name} {pkg.latest && {pkg.latest}} {pkg.label} {pkg.size > 0 && {bytes(pkg.size)}} {pkg.updatedAt && published {timeAgo(pkg.updatedAt)}}
    {count > 0 && ( <> {open && (
    {pkg.releases.map((release) => ( ))}
    )} )}
  • ); }