{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "trademark-patent-portfolio",
  "title": "Trademark Patent Portfolio",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-vue/blocks/trademark-patent-portfolio/TrademarkPatentPortfolio.vue",
      "content": "<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue'\nimport { computed, ref } from 'vue'\nimport {\n  AlertCircle,\n  ArrowUpRight,\n  Award,\n  BadgeCheck,\n  Building2,\n  Calendar,\n  CheckCircle2,\n  ChevronDown,\n  Clock,\n  Copy,\n  Download,\n  ExternalLink,\n  FilePlus2,\n  FileSpreadsheet,\n  FileText,\n  Filter,\n  Globe,\n  MoreHorizontal,\n  Plus,\n  Scale,\n  Search,\n  ShieldCheck,\n  UserCheck,\n} from 'lucide-vue-next'\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  class?: HTMLAttributes['class']\n}\n\nconst props = defineProps<TrademarkPatentPortfolioProps>()\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\nconst searchQuery = ref('')\nconst selectedType = ref<'all' | AssetType>('all')\nconst selectedStatus = ref<'all' | FilingStatus>('all')\n\nfunction resetFilters() {\n  searchQuery.value = ''\n  selectedType.value = 'all'\n  selectedStatus.value = 'all'\n}\nconst copiedId = ref<string | null>(null)\nconst feedbackMessage = ref<string | null>(null)\n\nconst filteredAssets = computed(() => {\n  const query = searchQuery.value.trim().toLowerCase()\n  return ipAssets.filter((asset) => {\n    const matchesType = selectedType.value === 'all' || asset.type === selectedType.value\n    const matchesStatus = selectedStatus.value === 'all' || asset.status === selectedStatus.value\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})\n\nfunction copyText(id: string, text: string) {\n  navigator.clipboard?.writeText(text)\n  copiedId.value = id\n  setTimeout(() => {\n    copiedId.value = null\n  }, 2000)\n}\n\nfunction handleExport() {\n  feedbackMessage.value = 'Exporting IP Portfolio summary (CSV / PDF)...'\n  setTimeout(() => {\n    feedbackMessage.value = null\n  }, 3000)\n}\n\nfunction handleFileNewAsset() {\n  feedbackMessage.value = 'Opening USPTO / WIPO EFS-Web filing wizard...'\n  setTimeout(() => {\n    feedbackMessage.value = null\n  }, 3000)\n}\n\nfunction handleAction(action: string, asset: IpAsset) {\n  feedbackMessage.value = `${action}: ${asset.identifier}`\n  setTimeout(() => {\n    feedbackMessage.value = null\n  }, 3000)\n}\n</script>\n\n<template>\n  <div data-slot=\"trademark-patent-portfolio\" :class=\"cn('w-full space-y-6', props.class)\">\n    <!-- Header Section -->\n    <Card class=\"border-border shadow-xs\">\n      <CardHeader class=\"flex flex-col gap-4 pb-6 lg:flex-row lg:items-center lg:justify-between\">\n        <div class=\"space-y-1.5\">\n          <div class=\"flex flex-wrap items-center gap-2\">\n            <Badge variant=\"outline\" class=\"gap-1.5 font-medium\">\n              <Building2 class=\"text-muted-foreground size-3.5\" aria-hidden=\"true\" />\n              <span>UIPKGE Technologies Inc.</span>\n            </Badge>\n            <Badge wrap variant=\"secondary\" class=\"gap-1 font-mono text-xs\">\n              <Scale class=\"text-primary size-3\" aria-hidden=\"true\" />\n              <span>12 Patents · 6 Registered Trademarks</span>\n            </Badge>\n          </div>\n          <CardTitle class=\"text-xl font-bold tracking-tight sm:text-2xl\">\n            Intellectual Property &amp; Patent Portfolio\n          </CardTitle>\n          <CardDescription class=\"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 class=\"flex flex-wrap items-center gap-2.5\">\n          <Button aria-label=\"Download attachment\" variant=\"outline\" class=\"gap-2 shadow-xs\" @click=\"handleExport\">\n            <Download class=\"size-4\" aria-hidden=\"true\" />\n            <span>Export Portfolio Report</span>\n          </Button>\n          <Button variant=\"default\" class=\"gap-2 shadow-xs\" @click=\"handleFileNewAsset\">\n            <Plus class=\"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    <div\n      v-if=\"feedbackMessage\"\n      class=\"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    >\n      <div class=\"flex items-center gap-2\">\n        <CheckCircle2 class=\"size-4 shrink-0\" aria-hidden=\"true\" />\n        <span>{{ feedbackMessage }}</span>\n      </div>\n      <button\n        type=\"button\"\n        @click=\"feedbackMessage = null\"\n        class=\"text-primary/70 hover:text-primary rounded text-xs underline underline-offset-2\"\n      >\n        Dismiss\n      </button>\n    </div>\n\n    <!-- 4 IP Portfolio KPI Cards Grid -->\n    <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n      <!-- Card 1: Granted Utility Patents -->\n      <Card class=\"border-border shadow-xs\">\n        <CardContent class=\"p-5\">\n          <div class=\"flex items-center justify-between\">\n            <span class=\"text-muted-foreground text-xs font-medium\">Granted Patents</span>\n            <div class=\"bg-success/10 text-success flex size-8 items-center justify-center rounded-md\">\n              <Award class=\"size-4\" aria-hidden=\"true\" />\n            </div>\n          </div>\n          <div class=\"mt-3\">\n            <div class=\"text-success text-success text-2xl font-bold tracking-tight tabular-nums\">\n              8 Patents Granted\n            </div>\n            <p class=\"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 class=\"border-border shadow-xs\">\n        <CardContent class=\"p-5\">\n          <div class=\"flex items-center justify-between\">\n            <span class=\"text-muted-foreground text-xs font-medium\">Pending Examination</span>\n            <div class=\"bg-warning/10 text-warning flex size-8 items-center justify-center rounded-md\">\n              <Clock class=\"size-4\" aria-hidden=\"true\" />\n            </div>\n          </div>\n          <div class=\"mt-3\">\n            <div class=\"text-warning text-warning text-2xl font-bold tracking-tight tabular-nums\">\n              4 Under Examination · USPTO\n            </div>\n            <p class=\"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 class=\"border-border shadow-xs\">\n        <CardContent class=\"p-5\">\n          <div class=\"flex items-center justify-between\">\n            <span class=\"text-muted-foreground text-xs font-medium\">Registered Trademarks</span>\n            <div class=\"bg-info/10 text-info flex size-8 items-center justify-center rounded-md\">\n              <BadgeCheck class=\"size-4\" aria-hidden=\"true\" />\n            </div>\n          </div>\n          <div class=\"mt-3\">\n            <div class=\"text-info text-info text-2xl font-bold tracking-tight tabular-nums\">6 Trademarks Active</div>\n            <p class=\"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 class=\"border-border shadow-xs\">\n        <CardContent class=\"p-5\">\n          <div class=\"flex items-center justify-between\">\n            <span class=\"text-muted-foreground text-xs font-medium\">Next Maintenance Fee</span>\n            <div class=\"bg-destructive/10 text-destructive flex size-8 items-center justify-center rounded-md\">\n              <Calendar class=\"size-4\" aria-hidden=\"true\" />\n            </div>\n          </div>\n          <div class=\"mt-3\">\n            <div class=\"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 class=\"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 class=\"border-border shadow-xs\">\n      <CardHeader class=\"border-border border-b pb-4\">\n        <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n          <div>\n            <CardTitle class=\"text-base font-semibold\">Registered Intellectual Property Assets</CardTitle>\n            <CardDescription class=\"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 class=\"flex flex-wrap items-center gap-2\">\n            <div class=\"relative min-w-[200px] flex-1 sm:w-64\">\n              <Search\n                aria-hidden=\"true\"\n                class=\"text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2\"\n              />\n              <Input\n                v-model=\"searchQuery\"\n                type=\"text\"\n                placeholder=\"Search patent #, title, class...\"\n                class=\"h-8 pl-8 text-xs\"\n              />\n            </div>\n\n            <!-- Type Filter Dropdown -->\n            <DropdownMenu>\n              <DropdownMenuTrigger as-child>\n                <Button variant=\"outline\" size=\"sm\" class=\"h-8 gap-1.5 text-xs\">\n                  <Filter class=\"size-3.5 opacity-70\" aria-hidden=\"true\" />\n                  <span>{{ selectedType === 'all' ? 'Type: All' : selectedType }}</span>\n                  <ChevronDown class=\"size-3 opacity-50\" aria-hidden=\"true\" />\n                </Button>\n              </DropdownMenuTrigger>\n              <DropdownMenuContent align=\"end\" class=\"w-48\">\n                <DropdownMenuLabel class=\"text-xs\">Filter by Type</DropdownMenuLabel>\n                <DropdownMenuSeparator />\n                <DropdownMenuItem @click=\"selectedType = 'all'\">All Types</DropdownMenuItem>\n                <DropdownMenuItem @click=\"selectedType = 'Utility Patent'\">Utility Patent</DropdownMenuItem>\n                <DropdownMenuItem @click=\"selectedType = 'Trademark'\">Trademark</DropdownMenuItem>\n                <DropdownMenuItem @click=\"selectedType = 'PCT International'\">PCT International</DropdownMenuItem>\n              </DropdownMenuContent>\n            </DropdownMenu>\n\n            <!-- Status Filter Dropdown -->\n            <DropdownMenu>\n              <DropdownMenuTrigger as-child>\n                <Button variant=\"outline\" size=\"sm\" class=\"h-8 gap-1.5 text-xs\">\n                  <span>{{ selectedStatus === 'all' ? 'Status: All' : selectedStatus }}</span>\n                  <ChevronDown class=\"size-3 opacity-50\" aria-hidden=\"true\" />\n                </Button>\n              </DropdownMenuTrigger>\n              <DropdownMenuContent align=\"end\" class=\"w-52\">\n                <DropdownMenuLabel class=\"text-xs\">Filter by Status</DropdownMenuLabel>\n                <DropdownMenuSeparator />\n                <DropdownMenuItem @click=\"selectedStatus = 'all'\">All Statuses</DropdownMenuItem>\n                <DropdownMenuItem @click=\"selectedStatus = 'Granted / Registered'\"\n                  >Granted / Registered</DropdownMenuItem\n                >\n                <DropdownMenuItem @click=\"selectedStatus = 'Published / Under Exam'\"\n                  >Published / Under Exam</DropdownMenuItem\n                >\n              </DropdownMenuContent>\n            </DropdownMenu>\n          </div>\n        </div>\n      </CardHeader>\n\n      <CardContent class=\"p-0\">\n        <div class=\"overflow-x-auto\">\n          <Table>\n            <TableHeader class=\"bg-muted/40\">\n              <TableRow>\n                <TableHead class=\"min-w-[280px]\">Asset Identifier &amp; Title</TableHead>\n                <TableHead class=\"w-[140px]\">Type</TableHead>\n                <TableHead class=\"w-[160px]\">Jurisdiction</TableHead>\n                <TableHead class=\"w-[160px]\">App / Grant Date</TableHead>\n                <TableHead class=\"w-[170px]\">Filing Status</TableHead>\n                <TableHead class=\"w-[180px]\">Next Renewal / Deadline</TableHead>\n                <TableHead class=\"w-[70px] text-right\"><span class=\"sr-only\">Actions</span></TableHead>\n              </TableRow>\n            </TableHeader>\n            <TableBody>\n              <TableRow v-for=\"asset in filteredAssets\" :key=\"asset.id\" class=\"hover:bg-muted/40 transition-colors\">\n                <!-- Asset Identifier & Title -->\n                <TableCell class=\"py-3.5 align-top\">\n                  <div class=\"space-y-1\">\n                    <div class=\"flex flex-wrap items-center gap-1.5\">\n                      <span class=\"text-foreground font-mono text-xs font-bold tracking-tight\">\n                        {{ asset.identifier }}\n                      </span>\n                      <button\n                        type=\"button\"\n                        @click=\"copyText(asset.id, asset.officialNumber)\"\n                        class=\"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                        <Check v-if=\"copiedId === asset.id\" class=\"text-success size-3\" aria-hidden=\"true\" />\n                        <Copy v-else class=\"size-3\" aria-hidden=\"true\" />\n                      </button>\n                    </div>\n                    <div class=\"text-foreground text-xs font-medium\">\n                      {{ asset.title }}\n                    </div>\n                    <div class=\"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 class=\"align-top\">\n                  <Badge\n                    variant=\"outline\"\n                    :class=\"\n                      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                  >\n                    {{ asset.type }}\n                  </Badge>\n                </TableCell>\n\n                <!-- Jurisdiction Flag & Office -->\n                <TableCell class=\"align-top\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"text-base leading-none\" :aria-label=\"asset.jurisdictionName\">\n                      {{ asset.jurisdictionFlag }}\n                    </span>\n                    <div>\n                      <div class=\"text-foreground text-xs font-medium\">\n                        {{ asset.jurisdictionName }}\n                      </div>\n                      <div class=\"text-muted-foreground font-mono text-xs\">\n                        {{ asset.patentOffice }}\n                      </div>\n                    </div>\n                  </div>\n                </TableCell>\n\n                <!-- Application / Grant Date in tabular-nums -->\n                <TableCell class=\"align-top\">\n                  <div class=\"space-y-0.5 font-mono text-xs tabular-nums\">\n                    <div class=\"text-muted-foreground flex items-center gap-1.5\">\n                      <span class=\"text-muted-foreground/70\">Filing:</span>\n                      <span class=\"text-foreground font-medium\">{{ asset.applicationDate }}</span>\n                    </div>\n                    <div class=\"text-muted-foreground flex items-center gap-1.5\">\n                      <span class=\"text-muted-foreground/70\">Grant:</span>\n                      <span\n                        :class=\"\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 class=\"align-top\">\n                  <div\n                    v-if=\"asset.status === 'Granted / Registered'\"\n                    class=\"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                  >\n                    <span class=\"relative flex size-1.5\">\n                      <span class=\"bg-success absolute inline-flex h-full w-full rounded-full opacity-75\"></span>\n                      <span class=\"bg-success relative inline-flex size-1.5 rounded-full\"></span>\n                    </span>\n                    <span>Granted / Registered</span>\n                  </div>\n                  <div\n                    v-else\n                    class=\"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                  >\n                    <Clock class=\"text-warning size-3\" aria-hidden=\"true\" />\n                    <span>Published / Under Exam</span>\n                  </div>\n                </TableCell>\n\n                <!-- Next Renewal / Maintenance Deadline -->\n                <TableCell class=\"align-top\">\n                  <div class=\"space-y-0.5\">\n                    <div class=\"text-foreground flex items-center gap-1.5 font-mono text-xs font-semibold tabular-nums\">\n                      <Calendar class=\"text-muted-foreground size-3.5\" aria-hidden=\"true\" />\n                      <span>{{ asset.nextDeadline }}</span>\n                    </div>\n                    <p class=\"text-muted-foreground text-xs leading-tight\">\n                      {{ asset.deadlineNote }}\n                    </p>\n                  </div>\n                </TableCell>\n\n                <!-- Actions Dropdown -->\n                <TableCell class=\"py-3.5 text-right align-top\">\n                  <DropdownMenu>\n                    <DropdownMenuTrigger as-child>\n                      <Button\n                        variant=\"ghost\"\n                        size=\"icon-sm\"\n                        class=\"text-muted-foreground hover:text-foreground focus-visible:ring-ring\"\n                      >\n                        <MoreHorizontal class=\"size-4\" aria-hidden=\"true\" />\n                        <span class=\"sr-only\">Open actions for {{ asset.identifier }}</span>\n                      </Button>\n                    </DropdownMenuTrigger>\n                    <DropdownMenuContent align=\"end\" class=\"w-56\">\n                      <DropdownMenuLabel class=\"text-xs\">Asset Operations</DropdownMenuLabel>\n                      <DropdownMenuSeparator />\n                      <DropdownMenuItem @click=\"handleAction(asset.gazetteLabel, asset)\">\n                        <ExternalLink class=\"mr-2 size-4\" aria-hidden=\"true\" />\n                        <span>{{ asset.gazetteLabel }}</span>\n                      </DropdownMenuItem>\n                      <DropdownMenuItem @click=\"handleAction('Download Grant Certificate', asset)\">\n                        <Download class=\"mr-2 size-4\" aria-hidden=\"true\" />\n                        <span>Download Grant Certificate</span>\n                      </DropdownMenuItem>\n                      <DropdownMenuItem @click=\"handleAction('Assign Counsel', asset)\">\n                        <UserCheck class=\"mr-2 size-4\" aria-hidden=\"true\" />\n                        <span>Assign Counsel</span>\n                      </DropdownMenuItem>\n                      <DropdownMenuSeparator />\n                      <DropdownMenuItem @click=\"copyText(asset.id, asset.officialNumber)\">\n                        <Copy class=\"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              <!-- Empty Filter State -->\n              <TableRow v-if=\"filteredAssets.length === 0\">\n                <TableCell colspan=\"7\" class=\"text-muted-foreground py-10 text-center text-xs\">\n                  <div class=\"flex flex-col items-center justify-center gap-2\">\n                    <FileText class=\"text-muted-foreground/60 size-8\" aria-hidden=\"true\" />\n                    <p class=\"font-medium\">No intellectual property assets match your search filters.</p>\n                    <Button variant=\"outline\" size=\"sm\" class=\"mt-1 text-xs\" @click=\"resetFilters\">\n                      Reset Filters\n                    </Button>\n                  </div>\n                </TableCell>\n              </TableRow>\n            </TableBody>\n          </Table>\n        </div>\n      </CardContent>\n    </Card>\n  </div>\n</template>\n",
      "type": "registry:block",
      "target": "~/app/components/blocks/TrademarkPatentPortfolio.vue"
    }
  ],
  "dependencies": [
    "lucide-vue-next"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/vue/badge.json",
    "https://uipkge.dev/r/vue/button.json",
    "https://uipkge.dev/r/vue/card.json",
    "https://uipkge.dev/r/vue/dropdown-menu.json",
    "https://uipkge.dev/r/vue/input.json",
    "https://uipkge.dev/r/vue/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"
  ]
}