{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "trademark-patent-portfolio",
  "title": "Trademark Patent Portfolio",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-react/blocks/trademark-patent-portfolio/TrademarkPatentPortfolio.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport {\n  Award,\n  BadgeCheck,\n  Building2,\n  Calendar,\n  Check,\n  Clock,\n  Copy,\n  Download,\n  ExternalLink,\n  FileText,\n  Filter,\n  MoreHorizontal,\n  Plus,\n  Scale,\n  Search,\n  CheckCircle2,\n  UserCheck,\n} from 'lucide-react'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\nimport { cn } from '@/lib/utils'\n\nexport interface TrademarkPatentPortfolioProps {\n  className?: string\n}\n\nexport type AssetType = 'Utility Patent' | 'Trademark' | 'PCT International'\nexport type FilingStatus = 'Granted / Registered' | 'Published / Under Exam'\n\nexport interface IpAsset {\n  id: string\n  identifier: string\n  officialNumber: string\n  title: string\n  type: AssetType\n  jurisdictionCode: string\n  jurisdictionName: string\n  jurisdictionFlag: string\n  patentOffice: string\n  applicationDate: string\n  grantDate: string\n  status: FilingStatus\n  nextDeadline: string\n  deadlineNumber: string\n  deadlineNote: string\n  ipcClass: string\n  attorney: string\n  gazetteUrl: string\n  gazetteLabel: string\n}\n\nconst ipAssets: IpAsset[] = [\n  {\n    id: 'ip-1',\n    identifier: 'US Patent #11,849,201',\n    officialNumber: 'US 11,849,201 B2',\n    title: 'Zero-Dependency Dual-Framework AST Generation',\n    type: 'Utility Patent',\n    jurisdictionCode: 'US',\n    jurisdictionName: 'United States',\n    jurisdictionFlag: '🇺🇸',\n    patentOffice: 'USPTO',\n    applicationDate: '2023-04-12',\n    grantDate: '2024-06-18',\n    status: 'Granted / Registered',\n    nextDeadline: 'Dec 2026',\n    deadlineNumber: '2026-12-15',\n    deadlineNote: 'USPTO 3.5-Year Maintenance Window',\n    ipcClass: 'CPC G06F 8/41 · Abstract Syntax Trees',\n    attorney: 'Vance & Morrison LLP',\n    gazetteUrl: 'https://patents.google.com/patent/US11849201B2/en',\n    gazetteLabel: 'View USPTO Gazette',\n  },\n  {\n    id: 'ip-2',\n    identifier: 'US Patent #11,420,184',\n    officialNumber: 'US 11,420,184 B1',\n    title: 'Perceptually Uniform OKLCH Dark Mode Algorithm',\n    type: 'Utility Patent',\n    jurisdictionCode: 'US',\n    jurisdictionName: 'United States',\n    jurisdictionFlag: '🇺🇸',\n    patentOffice: 'USPTO',\n    applicationDate: '2022-09-14',\n    grantDate: '2023-08-22',\n    status: 'Granted / Registered',\n    nextDeadline: 'Feb 2027',\n    deadlineNumber: '2027-02-22',\n    deadlineNote: 'USPTO 3.5-Year Maintenance Window',\n    ipcClass: 'CPC G06T 11/00 · Perceptual Colorimetry',\n    attorney: 'Vance & Morrison LLP',\n    gazetteUrl: 'https://patents.google.com/patent/US11420184B1/en',\n    gazetteLabel: 'View USPTO Gazette',\n  },\n  {\n    id: 'ip-3',\n    identifier: 'US Trademark #98421042',\n    officialNumber: 'Reg. #7,294,810 (SN 98421042)',\n    title: 'UIPKGE™ (Class 09, 42)',\n    type: 'Trademark',\n    jurisdictionCode: 'US',\n    jurisdictionName: 'United States',\n    jurisdictionFlag: '🇺🇸',\n    patentOffice: 'USPTO',\n    applicationDate: '2023-02-10',\n    grantDate: '2023-11-14',\n    status: 'Granted / Registered',\n    nextDeadline: 'Nov 2029',\n    deadlineNumber: '2029-11-14',\n    deadlineNote: 'Section 8 & 15 Affidavit of Use',\n    ipcClass: 'IC 009, 042 · Computer Software & SaaS',\n    attorney: 'Kilpatrick Townsend & Stockton',\n    gazetteUrl: 'https://tsdr.uspto.gov/',\n    gazetteLabel: 'View USPTO TSDR',\n  },\n  {\n    id: 'ip-4',\n    identifier: 'WIPO PCT/US2026/018249',\n    officialNumber: 'WO 2026/148201 A1',\n    title: 'Headless Component State Serialization',\n    type: 'PCT International',\n    jurisdictionCode: 'WIPO',\n    jurisdictionName: 'WIPO International',\n    jurisdictionFlag: '🌍',\n    patentOffice: 'WIPO IB',\n    applicationDate: '2026-01-15',\n    grantDate: 'Pending',\n    status: 'Published / Under Exam',\n    nextDeadline: 'Jul 2027',\n    deadlineNumber: '2027-07-15',\n    deadlineNote: '30-Mo National Phase Entry Deadline',\n    ipcClass: 'IPC G06F 9/44 · Component State Transfer',\n    attorney: 'Vance & Morrison LLP',\n    gazetteUrl: 'https://patentscope.wipo.int/',\n    gazetteLabel: 'View WIPO Patentscope',\n  },\n  {\n    id: 'ip-5',\n    identifier: 'EP Patent #3,948,102',\n    officialNumber: 'EP 3,948,102 A1',\n    title: 'Reactive Virtual DOM Diffing Engine for Web Components',\n    type: 'Utility Patent',\n    jurisdictionCode: 'EU',\n    jurisdictionName: 'European Union',\n    jurisdictionFlag: '🇪🇺',\n    patentOffice: 'EPO',\n    applicationDate: '2024-03-02',\n    grantDate: 'Pending',\n    status: 'Published / Under Exam',\n    nextDeadline: 'Mar 2027',\n    deadlineNumber: '2027-03-31',\n    deadlineNote: 'EPO 3rd Year Annuity Maintenance Fee',\n    ipcClass: 'CPC G06F 9/455 · Virtualized DOM Execution',\n    attorney: 'Bardehle Pagenberg Partnerschaft',\n    gazetteUrl: 'https://worldwide.espacenet.com/',\n    gazetteLabel: 'View EPO Espacenet',\n  },\n  {\n    id: 'ip-6',\n    identifier: 'EU Trademark #018942001',\n    officialNumber: 'Reg. #018942001',\n    title: 'UIPKGE DESIGN SYSTEM™ (Class 09, 35, 42)',\n    type: 'Trademark',\n    jurisdictionCode: 'EU',\n    jurisdictionName: 'European Union',\n    jurisdictionFlag: '🇪🇺',\n    patentOffice: 'EUIPO',\n    applicationDate: '2023-08-05',\n    grantDate: '2024-01-19',\n    status: 'Granted / Registered',\n    nextDeadline: 'May 2030',\n    deadlineNumber: '2030-05-08',\n    deadlineNote: 'EUIPO 10-Year Trademark Renewal',\n    ipcClass: 'IC 009, 035, 042 · Design Systems & Tooling',\n    attorney: 'Bardehle Pagenberg Partnerschaft',\n    gazetteUrl: 'https://euipo.europa.eu/eSearch/',\n    gazetteLabel: 'View EUIPO eSearch',\n  },\n]\n\nexport function TrademarkPatentPortfolio({ className }: TrademarkPatentPortfolioProps) {\n  const [searchQuery, setSearchQuery] = React.useState('')\n  const [selectedType, setSelectedType] = React.useState<'all' | AssetType>('all')\n  const [selectedStatus, setSelectedStatus] = React.useState<'all' | FilingStatus>('all')\n  const [copiedId, setCopiedId] = React.useState<string | null>(null)\n  const [feedbackMessage, setFeedbackMessage] = React.useState<string | null>(null)\n\n  const filteredAssets = React.useMemo(() => {\n    const query = searchQuery.trim().toLowerCase()\n    return ipAssets.filter((asset) => {\n      const matchesType = selectedType === 'all' || asset.type === selectedType\n      const matchesStatus = selectedStatus === 'all' || asset.status === selectedStatus\n      const matchesSearch =\n        !query ||\n        asset.identifier.toLowerCase().includes(query) ||\n        asset.officialNumber.toLowerCase().includes(query) ||\n        asset.title.toLowerCase().includes(query) ||\n        asset.jurisdictionName.toLowerCase().includes(query) ||\n        asset.patentOffice.toLowerCase().includes(query) ||\n        asset.ipcClass.toLowerCase().includes(query)\n      return matchesType && matchesStatus && matchesSearch\n    })\n  }, [searchQuery, selectedType, selectedStatus])\n\n  const copyText = (id: string, text: string) => {\n    navigator.clipboard?.writeText(text)\n    setCopiedId(id)\n    setTimeout(() => {\n      setCopiedId(null)\n    }, 2000)\n  }\n\n  const handleExport = () => {\n    setFeedbackMessage('Exporting IP Portfolio summary (CSV / PDF)...')\n    setTimeout(() => {\n      setFeedbackMessage(null)\n    }, 3000)\n  }\n\n  const handleFileNewAsset = () => {\n    setFeedbackMessage('Opening USPTO / WIPO EFS-Web filing wizard...')\n    setTimeout(() => {\n      setFeedbackMessage(null)\n    }, 3000)\n  }\n\n  const handleAction = (action: string, asset: IpAsset) => {\n    setFeedbackMessage(`${action}: ${asset.identifier}`)\n    setTimeout(() => {\n      setFeedbackMessage(null)\n    }, 3000)\n  }\n\n  return (\n    <div data-slot=\"trademark-patent-portfolio\" className={cn('w-full space-y-6', className)}>\n      {/* Header Section */}\n      <Card className=\"border-border shadow-xs\">\n        <CardHeader className=\"flex flex-col gap-4 pb-6 lg:flex-row lg:items-center lg:justify-between\">\n          <div className=\"space-y-1.5\">\n            <div className=\"flex flex-wrap items-center gap-2\">\n              <Badge variant=\"outline\" className=\"gap-1.5 font-medium\">\n                <Building2 className=\"text-muted-foreground size-3.5\" aria-hidden=\"true\" />\n                <span>UIPKGE Technologies Inc.</span>\n              </Badge>\n              <Badge wrap variant=\"secondary\" className=\"gap-1 font-mono text-xs\">\n                <Scale className=\"text-primary size-3\" aria-hidden=\"true\" />\n                <span>12 Patents · 6 Registered Trademarks</span>\n              </Badge>\n            </div>\n            <CardTitle className=\"text-xl font-bold tracking-tight sm:text-2xl\">\n              Intellectual Property &amp; Patent Portfolio\n            </CardTitle>\n            <CardDescription className=\"text-xs sm:text-sm\">\n              USPTO, EPO, and WIPO asset docket, grant prosecution tracker, and statutory maintenance timeline.\n            </CardDescription>\n          </div>\n\n          {/* Action Buttons */}\n          <div className=\"flex flex-wrap items-center gap-2.5\">\n            <Button\n              aria-label=\"Download attachment\"\n              variant=\"outline\"\n              className=\"gap-2 shadow-xs\"\n              onClick={handleExport}\n            >\n              <Download className=\"size-4\" aria-hidden=\"true\" />\n              <span>Export Portfolio Report</span>\n            </Button>\n            <Button variant=\"default\" className=\"gap-2 shadow-xs\" onClick={handleFileNewAsset}>\n              <Plus className=\"size-4\" aria-hidden=\"true\" />\n              <span>File New IP Asset</span>\n            </Button>\n          </div>\n        </CardHeader>\n      </Card>\n\n      {/* Feedback Notification Toast/Banner if active */}\n      {feedbackMessage && (\n        <div className=\"border-primary/30 bg-primary/10 text-primary flex items-center justify-between rounded-lg border px-4 py-2.5 text-xs font-medium shadow-xs transition-colors\">\n          <div className=\"flex items-center gap-2\">\n            <CheckCircle2 className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n            <span>{feedbackMessage}</span>\n          </div>\n          <button\n            type=\"button\"\n            onClick={() => setFeedbackMessage(null)}\n            className=\"text-primary/70 hover:text-primary rounded text-xs underline underline-offset-2\"\n          >\n            Dismiss\n          </button>\n        </div>\n      )}\n\n      {/* 4 IP Portfolio KPI Cards Grid */}\n      <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        {/* Card 1: Granted Utility Patents */}\n        <Card className=\"border-border shadow-xs\">\n          <CardContent className=\"p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium\">Granted Patents</span>\n              <div className=\"bg-success/10 text-success flex size-8 items-center justify-center rounded-md\">\n                <Award className=\"size-4\" aria-hidden=\"true\" />\n              </div>\n            </div>\n            <div className=\"mt-3\">\n              <div className=\"text-success text-success text-2xl font-bold tracking-tight tabular-nums\">\n                8 Patents Granted\n              </div>\n              <p className=\"text-muted-foreground mt-1 text-xs\">6 USPTO · 2 EPO · 100% Enforceable</p>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 2: Pending Applications */}\n        <Card className=\"border-border shadow-xs\">\n          <CardContent className=\"p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium\">Pending Examination</span>\n              <div className=\"bg-warning/10 text-warning flex size-8 items-center justify-center rounded-md\">\n                <Clock className=\"size-4\" aria-hidden=\"true\" />\n              </div>\n            </div>\n            <div className=\"mt-3\">\n              <div className=\"text-warning text-warning text-2xl font-bold tracking-tight tabular-nums\">\n                4 Under Examination · USPTO\n              </div>\n              <p className=\"text-muted-foreground mt-1 text-xs\">2 PCT International · 1 USPTO · 1 EPO</p>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 3: Registered Trademarks */}\n        <Card className=\"border-border shadow-xs\">\n          <CardContent className=\"p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium\">Registered Trademarks</span>\n              <div className=\"bg-info/10 text-info flex size-8 items-center justify-center rounded-md\">\n                <BadgeCheck className=\"size-4\" aria-hidden=\"true\" />\n              </div>\n            </div>\n            <div className=\"mt-3\">\n              <div className=\"text-info text-info text-2xl font-bold tracking-tight tabular-nums\">\n                6 Trademarks Active\n              </div>\n              <p className=\"text-muted-foreground mt-1 text-xs\">Classes 09, 35, 42 · Global Protection</p>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 4: Next Maintenance Fee */}\n        <Card className=\"border-border shadow-xs\">\n          <CardContent className=\"p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium\">Next Maintenance Fee</span>\n              <div className=\"bg-destructive/10 text-destructive flex size-8 items-center justify-center rounded-md\">\n                <Calendar className=\"size-4\" aria-hidden=\"true\" />\n              </div>\n            </div>\n            <div className=\"mt-3\">\n              <div className=\"text-destructive text-destructive text-2xl font-bold tracking-tight tabular-nums\">\n                Due Dec 15, 2026 · USPTO 3.5-Year Window\n              </div>\n              <p className=\"text-muted-foreground mt-1 text-xs\">Est. fee $2,000 · Surcharge window opens</p>\n            </div>\n          </CardContent>\n        </Card>\n      </div>\n\n      {/* Filters & Table Container Card */}\n      <Card className=\"border-border shadow-xs\">\n        <CardHeader className=\"border-border border-b pb-4\">\n          <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n            <div>\n              <CardTitle className=\"text-base font-semibold\">Registered Intellectual Property Assets</CardTitle>\n              <CardDescription className=\"text-xs\">\n                Showing {filteredAssets.length} of {ipAssets.length} assets across USPTO, EUIPO, and WIPO\n              </CardDescription>\n            </div>\n\n            {/* Controls: Search and Filters */}\n            <div className=\"flex flex-wrap items-center gap-2\">\n              <div className=\"relative min-w-[200px] flex-1 sm:w-64\">\n                <Search\n                  aria-hidden=\"true\"\n                  className=\"text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2\"\n                />\n                <Input\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  type=\"text\"\n                  placeholder=\"Search patent #, title, class...\"\n                  className=\"h-8 pl-8 text-xs\"\n                />\n              </div>\n\n              {/* Type Filter Dropdown */}\n              <DropdownMenu>\n                <DropdownMenuTrigger asChild>\n                  <Button variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs\">\n                    <Filter className=\"size-3.5 opacity-70\" aria-hidden=\"true\" />\n                    <span>{selectedType === 'all' ? 'Type: All' : selectedType}</span>\n                    <MoreHorizontal className=\"sr-only\" />\n                  </Button>\n                </DropdownMenuTrigger>\n                <DropdownMenuContent align=\"end\" className=\"w-48\">\n                  <DropdownMenuLabel className=\"text-xs\">Filter by Type</DropdownMenuLabel>\n                  <DropdownMenuSeparator />\n                  <DropdownMenuItem onClick={() => setSelectedType('all')}>All Types</DropdownMenuItem>\n                  <DropdownMenuItem onClick={() => setSelectedType('Utility Patent')}>Utility Patent</DropdownMenuItem>\n                  <DropdownMenuItem onClick={() => setSelectedType('Trademark')}>Trademark</DropdownMenuItem>\n                  <DropdownMenuItem onClick={() => setSelectedType('PCT International')}>\n                    PCT International\n                  </DropdownMenuItem>\n                </DropdownMenuContent>\n              </DropdownMenu>\n\n              {/* Status Filter Dropdown */}\n              <DropdownMenu>\n                <DropdownMenuTrigger asChild>\n                  <Button variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs\">\n                    <span>{selectedStatus === 'all' ? 'Status: All' : selectedStatus}</span>\n                  </Button>\n                </DropdownMenuTrigger>\n                <DropdownMenuContent align=\"end\" className=\"w-52\">\n                  <DropdownMenuLabel className=\"text-xs\">Filter by Status</DropdownMenuLabel>\n                  <DropdownMenuSeparator />\n                  <DropdownMenuItem onClick={() => setSelectedStatus('all')}>All Statuses</DropdownMenuItem>\n                  <DropdownMenuItem onClick={() => setSelectedStatus('Granted / Registered')}>\n                    Granted / Registered\n                  </DropdownMenuItem>\n                  <DropdownMenuItem onClick={() => setSelectedStatus('Published / Under Exam')}>\n                    Published / Under Exam\n                  </DropdownMenuItem>\n                </DropdownMenuContent>\n              </DropdownMenu>\n            </div>\n          </div>\n        </CardHeader>\n\n        <CardContent className=\"p-0\">\n          <div className=\"overflow-x-auto\">\n            <Table>\n              <TableHeader className=\"bg-muted/40\">\n                <TableRow>\n                  <TableHead className=\"min-w-[280px]\">Asset Identifier &amp; Title</TableHead>\n                  <TableHead className=\"w-[140px]\">Type</TableHead>\n                  <TableHead className=\"w-[160px]\">Jurisdiction</TableHead>\n                  <TableHead className=\"w-[160px]\">App / Grant Date</TableHead>\n                  <TableHead className=\"w-[170px]\">Filing Status</TableHead>\n                  <TableHead className=\"w-[180px]\">Next Renewal / Deadline</TableHead>\n                  <TableHead className=\"w-[70px] text-right\">\n                    <span className=\"sr-only\">Actions</span>\n                  </TableHead>\n                </TableRow>\n              </TableHeader>\n              <TableBody>\n                {filteredAssets.map((asset) => (\n                  <TableRow key={asset.id} className=\"hover:bg-muted/40 transition-colors\">\n                    {/* Asset Identifier & Title */}\n                    <TableCell className=\"py-3.5 align-top\">\n                      <div className=\"space-y-1\">\n                        <div className=\"flex flex-wrap items-center gap-1.5\">\n                          <span className=\"text-foreground font-mono text-xs font-bold tracking-tight\">\n                            {asset.identifier}\n                          </span>\n                          <button\n                            type=\"button\"\n                            onClick={() => copyText(asset.id, asset.officialNumber)}\n                            className=\"text-muted-foreground hover:text-foreground focus-visible:ring-ring inline-flex items-center gap-1 rounded p-0.5 transition-colors focus-visible:ring-2 focus-visible:outline-hidden\"\n                            title={`Copy ${asset.officialNumber}`}\n                          >\n                            {copiedId === asset.id ? (\n                              <Check className=\"text-success size-3\" aria-hidden=\"true\" />\n                            ) : (\n                              <Copy className=\"size-3\" aria-hidden=\"true\" />\n                            )}\n                          </button>\n                        </div>\n                        <div className=\"text-foreground text-xs font-medium\">{asset.title}</div>\n                        <div className=\"text-muted-foreground flex flex-wrap items-center gap-2 text-xs\">\n                          <span>{asset.ipcClass}</span>\n                          <span>•</span>\n                          <span>Counsel: {asset.attorney}</span>\n                        </div>\n                      </div>\n                    </TableCell>\n\n                    {/* Type Badge */}\n                    <TableCell className=\"align-top\">\n                      <Badge\n                        variant=\"outline\"\n                        className={cn('font-mono text-xs font-medium', {\n                          'border-chart-1/30 bg-chart-1/10 text-chart-1': asset.type === 'Utility Patent',\n                          'border-info/30 bg-info/10 text-info': asset.type === 'Trademark',\n                          'border-warning/30 bg-warning/10 text-warning': asset.type === 'PCT International',\n                        })}\n                      >\n                        {asset.type}\n                      </Badge>\n                    </TableCell>\n\n                    {/* Jurisdiction Flag & Office */}\n                    <TableCell className=\"align-top\">\n                      <div className=\"flex items-center gap-2\">\n                        <span className=\"text-base leading-none\" aria-label={asset.jurisdictionName}>\n                          {asset.jurisdictionFlag}\n                        </span>\n                        <div>\n                          <div className=\"text-foreground text-xs font-medium\">{asset.jurisdictionName}</div>\n                          <div className=\"text-muted-foreground font-mono text-xs\">{asset.patentOffice}</div>\n                        </div>\n                      </div>\n                    </TableCell>\n\n                    {/* Application / Grant Date in tabular-nums */}\n                    <TableCell className=\"align-top\">\n                      <div className=\"space-y-0.5 font-mono text-xs tabular-nums\">\n                        <div className=\"text-muted-foreground flex items-center gap-1.5\">\n                          <span className=\"text-muted-foreground/70\">Filing:</span>\n                          <span className=\"text-foreground font-medium\">{asset.applicationDate}</span>\n                        </div>\n                        <div className=\"text-muted-foreground flex items-center gap-1.5\">\n                          <span className=\"text-muted-foreground/70\">Grant:</span>\n                          <span\n                            className={\n                              asset.grantDate === 'Pending' ? 'text-warning font-medium' : 'text-foreground font-medium'\n                            }\n                          >\n                            {asset.grantDate}\n                          </span>\n                        </div>\n                      </div>\n                    </TableCell>\n\n                    {/* Filing Status */}\n                    <TableCell className=\"align-top\">\n                      {asset.status === 'Granted / Registered' ? (\n                        <div className=\"border-success/30 bg-success/10 text-success inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium\">\n                          <span className=\"relative flex size-1.5\">\n                            <span className=\"bg-success absolute inline-flex h-full w-full rounded-full opacity-75\" />\n                            <span className=\"bg-success relative inline-flex size-1.5 rounded-full\" />\n                          </span>\n                          <span>Granted / Registered</span>\n                        </div>\n                      ) : (\n                        <div className=\"border-warning/30 bg-warning/10 text-warning inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium\">\n                          <Clock className=\"text-warning size-3\" aria-hidden=\"true\" />\n                          <span>Published / Under Exam</span>\n                        </div>\n                      )}\n                    </TableCell>\n\n                    {/* Next Renewal / Maintenance Deadline */}\n                    <TableCell className=\"align-top\">\n                      <div className=\"space-y-0.5\">\n                        <div className=\"text-foreground flex items-center gap-1.5 font-mono text-xs font-semibold tabular-nums\">\n                          <Calendar className=\"text-muted-foreground size-3.5\" aria-hidden=\"true\" />\n                          <span>{asset.nextDeadline}</span>\n                        </div>\n                        <p className=\"text-muted-foreground text-xs leading-tight\">{asset.deadlineNote}</p>\n                      </div>\n                    </TableCell>\n\n                    {/* Actions Dropdown */}\n                    <TableCell className=\"py-3.5 text-right align-top\">\n                      <DropdownMenu>\n                        <DropdownMenuTrigger asChild>\n                          <Button\n                            variant=\"ghost\"\n                            size=\"icon-sm\"\n                            className=\"text-muted-foreground hover:text-foreground focus-visible:ring-ring\"\n                          >\n                            <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n                            <span className=\"sr-only\">Open actions for {asset.identifier}</span>\n                          </Button>\n                        </DropdownMenuTrigger>\n                        <DropdownMenuContent align=\"end\" className=\"w-56\">\n                          <DropdownMenuLabel className=\"text-xs\">Asset Operations</DropdownMenuLabel>\n                          <DropdownMenuSeparator />\n                          <DropdownMenuItem onClick={() => handleAction(asset.gazetteLabel, asset)}>\n                            <ExternalLink className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                            <span>{asset.gazetteLabel}</span>\n                          </DropdownMenuItem>\n                          <DropdownMenuItem onClick={() => handleAction('Download Grant Certificate', asset)}>\n                            <Download className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                            <span>Download Grant Certificate</span>\n                          </DropdownMenuItem>\n                          <DropdownMenuItem onClick={() => handleAction('Assign Counsel', asset)}>\n                            <UserCheck className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                            <span>Assign Counsel</span>\n                          </DropdownMenuItem>\n                          <DropdownMenuSeparator />\n                          <DropdownMenuItem onClick={() => copyText(asset.id, asset.officialNumber)}>\n                            <Copy className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                            <span>Copy Docket Number</span>\n                          </DropdownMenuItem>\n                        </DropdownMenuContent>\n                      </DropdownMenu>\n                    </TableCell>\n                  </TableRow>\n                ))}\n\n                {/* Empty Filter State */}\n                {filteredAssets.length === 0 && (\n                  <TableRow>\n                    <TableCell colSpan={7} className=\"text-muted-foreground py-10 text-center text-xs\">\n                      <div className=\"flex flex-col items-center justify-center gap-2\">\n                        <FileText className=\"text-muted-foreground/60 size-8\" aria-hidden=\"true\" />\n                        <p className=\"font-medium\">No intellectual property assets match your search filters.</p>\n                        <Button\n                          variant=\"outline\"\n                          size=\"sm\"\n                          className=\"mt-1 text-xs\"\n                          onClick={() => {\n                            setSearchQuery('')\n                            setSelectedType('all')\n                            setSelectedStatus('all')\n                          }}\n                        >\n                          Reset Filters\n                        </Button>\n                      </div>\n                    </TableCell>\n                  </TableRow>\n                )}\n              </TableBody>\n            </Table>\n          </div>\n        </CardContent>\n      </Card>\n    </div>\n  )\n}\n\nexport default TrademarkPatentPortfolio\n",
      "type": "registry:block",
      "target": "~/components/blocks/TrademarkPatentPortfolio.tsx"
    }
  ],
  "dependencies": [
    "lucide-react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/react/badge.json",
    "https://uipkge.dev/r/react/button.json",
    "https://uipkge.dev/r/react/card.json",
    "https://uipkge.dev/r/react/dropdown-menu.json",
    "https://uipkge.dev/r/react/input.json",
    "https://uipkge.dev/r/react/table.json"
  ],
  "description": "USPTO and WIPO intellectual property asset portfolio tracker, patent grant status, jurisdiction coverage, and maintenance fee timeline with docket action workflow.",
  "categories": [
    "legal",
    "app",
    "table",
    "dashboard"
  ]
}