{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "payouts-management-table",
  "title": "Payouts Management Table",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/payouts-management-table/payouts-management-table.component.ts",
      "content": "import { ChangeDetectionStrategy, Component, Input } from '@angular/core'\nimport {\n  Building2,\n  CalendarClock,\n  CheckCircle2,\n  Clock,\n  Download,\n  ExternalLink,\n  FileText,\n  Landmark,\n  LucideAngularModule,\n  MoreHorizontal,\n  ShieldCheck,\n  Wallet,\n  Zap,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport { UiCardComponent, UiCardContentComponent } from '@/ui/card/card.component'\nimport {\n  UiDropdownMenuComponent,\n  UiDropdownMenuContentComponent,\n  UiDropdownMenuItemComponent,\n  UiDropdownMenuSeparatorComponent,\n  UiDropdownMenuTriggerComponent,\n} from '@/ui/dropdown-menu/dropdown-menu.component'\nimport {\n  UiTableBodyComponent,\n  UiTableCellComponent,\n  UiTableComponent,\n  UiTableHeadComponent,\n  UiTableHeaderComponent,\n  UiTableRowComponent,\n} from '@/ui/table/table.component'\n\nexport type PayoutStatus = 'paid' | 'in_transit' | 'pending' | 'failed'\n\nexport interface PayoutBatch {\n  id: string\n  initiatedDate: string\n  arrivalDate: string\n  destination: string\n  grossAmount: string\n  feeAmount: string\n  netAmount: string\n  status: PayoutStatus\n}\n\nconst statusConfig: Record<PayoutStatus, { label: string; className: string }> = {\n  paid: { label: 'Paid', className: 'bg-success/10 text-success border-success/20' },\n  in_transit: { label: 'In Transit', className: 'bg-info/10 text-info border-info/20' },\n  pending: { label: 'Pending', className: 'bg-warning/10 text-warning border-warning/20' },\n  failed: { label: 'Failed', className: 'bg-destructive/10 text-destructive border-destructive/20' },\n}\n\ninterface SummaryItem {\n  title: string\n  amount: string\n  description: string\n  icon: unknown\n  iconClass: string\n}\n\nconst summary: SummaryItem[] = [\n  {\n    title: 'Available for Payout',\n    amount: '$18,420.50',\n    description: 'Auto-transfers daily at 00:00 UTC',\n    icon: Wallet,\n    iconClass: 'bg-success/10 text-success',\n  },\n  {\n    title: 'In Transit / Scheduled',\n    amount: '$4,250.00',\n    description: 'Estimated arrival: Aug 23, 2026',\n    icon: Clock,\n    iconClass: 'bg-info/10 text-info',\n  },\n  {\n    title: 'Rolling Reserve / Held',\n    amount: '$1,500.00',\n    description: 'Released in 14 days',\n    icon: ShieldCheck,\n    iconClass: 'bg-warning/10 text-warning',\n  },\n]\n\nconst payouts: PayoutBatch[] = [\n  {\n    id: 'PO-84920',\n    initiatedDate: 'Aug 21, 2026',\n    arrivalDate: 'Est. Aug 23, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$12,780.00',\n    feeAmount: '-$330.00',\n    netAmount: '$12,450.00',\n    status: 'in_transit',\n  },\n  {\n    id: 'PO-84919',\n    initiatedDate: 'Aug 20, 2026',\n    arrivalDate: 'Est. Aug 22, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$8,950.00',\n    feeAmount: '-$245.50',\n    netAmount: '$8,704.50',\n    status: 'pending',\n  },\n  {\n    id: 'PO-84918',\n    initiatedDate: 'Aug 19, 2026',\n    arrivalDate: 'Aug 21, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$15,400.00',\n    feeAmount: '-$398.00',\n    netAmount: '$15,002.00',\n    status: 'paid',\n  },\n  {\n    id: 'PO-84917',\n    initiatedDate: 'Aug 18, 2026',\n    arrivalDate: 'Aug 20, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$9,220.00',\n    feeAmount: '-$238.40',\n    netAmount: '$8,981.60',\n    status: 'paid',\n  },\n  {\n    id: 'PO-84916',\n    initiatedDate: 'Aug 17, 2026',\n    arrivalDate: 'Aug 19, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$6,100.00',\n    feeAmount: '-$162.00',\n    netAmount: '$5,938.00',\n    status: 'failed',\n  },\n  {\n    id: 'PO-84915',\n    initiatedDate: 'Aug 16, 2026',\n    arrivalDate: 'Aug 18, 2026',\n    destination: 'Chase •••• 4892',\n    grossAmount: '$18,340.00',\n    feeAmount: '-$460.00',\n    netAmount: '$17,880.00',\n    status: 'paid',\n  },\n]\n\n/**\n * PayoutsManagementTable -- the React block, 1:1: header with payout schedule + instant\n * payout actions, three KPI cards (available, in-transit, rolling reserve), a verified\n * settlement bank destination card, and a batch transfer history table with gross/fee/net\n * amounts, status badges and per-row action menus, closed by a pagination hint.\n */\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-payouts-management-table, [ui-payouts-management-table]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiDropdownMenuComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuItemComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiDropdownMenuTriggerComponent,\n    UiTableComponent,\n    UiTableBodyComponent,\n    UiTableCellComponent,\n    UiTableHeadComponent,\n    UiTableHeaderComponent,\n    UiTableRowComponent,\n  ],\n  template: `\n    <div data-slot=\"payouts-management-table\" [class]=\"rootClass\">\n      <div class=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n        <div>\n          <h2 class=\"text-2xl font-bold tracking-tight\">Payouts & Transfers</h2>\n          <p class=\"text-muted-foreground mt-1 text-sm\">\n            Track automated scheduled settlements, rolling reserves, and bank transfers.\n          </p>\n        </div>\n        <div class=\"flex flex-wrap items-center gap-2.5\">\n          <button ui-button variant=\"outline\">\n            <lucide-icon [img]=\"CalendarClock\" />\n            Configure Payout Schedule\n          </button>\n          <button ui-button>\n            <lucide-icon [img]=\"Zap\" />\n            Instant Payout\n          </button>\n        </div>\n      </div>\n\n      <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n        @for (item of summary; track item.title) {\n          <div ui-card class=\"shadow-xs\">\n            <div ui-card-content class=\"space-y-2 p-5\">\n              <div class=\"flex items-center justify-between\">\n                <p class=\"text-muted-foreground text-sm font-medium\">{{ item.title }}</p>\n                <div [class]=\"summaryIconClass(item)\">\n                  <lucide-icon [img]=\"asIcon(item.icon)\" class=\"size-4\" />\n                </div>\n              </div>\n              <div>\n                <p class=\"text-2xl font-bold tracking-tight tabular-nums\">{{ item.amount }}</p>\n                <p class=\"text-muted-foreground mt-1 text-xs\">{{ item.description }}</p>\n              </div>\n            </div>\n          </div>\n        }\n      </div>\n\n      <div ui-card class=\"shadow-xs\">\n        <div ui-card-content class=\"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between\">\n          <div class=\"flex items-start gap-3.5\">\n            <div class=\"bg-primary/10 text-primary flex size-10 shrink-0 items-center justify-center rounded-lg\">\n              <lucide-icon [img]=\"Landmark\" class=\"size-5\" />\n            </div>\n            <div class=\"space-y-1\">\n              <div class=\"flex flex-wrap items-center gap-2\">\n                <span class=\"text-sm font-semibold\">Chase Commercial •••• 4892</span>\n                <span\n                  ui-badge\n                  variant=\"outline\"\n                  class=\"border-success/20 bg-success/10 text-success text-xs font-medium\"\n                >\n                  <lucide-icon [img]=\"CheckCircle2\" class=\"size-3\" />\n                  Verified\n                </span>\n                <span ui-badge variant=\"secondary\" class=\"text-xs\">Primary Settlement</span>\n              </div>\n              <p class=\"text-muted-foreground text-xs\">\n                Routing <span class=\"font-mono tabular-nums\">021000021</span> · Checking account · Daily automated\n                transfer\n              </p>\n            </div>\n          </div>\n          <button ui-button variant=\"outline\" size=\"sm\" class=\"self-start sm:self-auto\">\n            <lucide-icon [img]=\"Building2\" />\n            Update Bank Account\n          </button>\n        </div>\n      </div>\n\n      <div class=\"bg-card overflow-x-auto rounded-lg border shadow-xs\">\n        <table ui-table>\n          <thead ui-table-header>\n            <tr ui-table-row>\n              <th ui-table-head>Payout ID</th>\n              <th ui-table-head>Initiated / Expected</th>\n              <th ui-table-head>Destination</th>\n              <th ui-table-head class=\"text-right\">Gross</th>\n              <th ui-table-head class=\"text-right\">Fees</th>\n              <th ui-table-head class=\"text-right\">Net Amount</th>\n              <th ui-table-head>Status</th>\n              <th ui-table-head class=\"w-12\">\n                <span class=\"sr-only\">Actions</span>\n              </th>\n            </tr>\n          </thead>\n          <tbody ui-table-body>\n            @for (payout of payouts; track payout.id) {\n              <tr ui-table-row class=\"hover:bg-muted/50\">\n                <td ui-table-cell class=\"font-mono text-xs font-semibold\">{{ payout.id }}</td>\n                <td ui-table-cell>\n                  <div class=\"text-sm font-medium\">{{ payout.initiatedDate }}</div>\n                  <div class=\"text-muted-foreground text-xs\">{{ payout.arrivalDate }}</div>\n                </td>\n                <td ui-table-cell>\n                  <div class=\"flex items-center gap-1.5 text-sm font-medium\">\n                    <lucide-icon [img]=\"Landmark\" class=\"text-muted-foreground size-3.5 shrink-0\" />\n                    <span>{{ payout.destination }}</span>\n                  </div>\n                </td>\n                <td ui-table-cell class=\"text-muted-foreground text-right text-sm tabular-nums\">\n                  {{ payout.grossAmount }}\n                </td>\n                <td ui-table-cell class=\"text-muted-foreground text-right text-xs tabular-nums\">\n                  {{ payout.feeAmount }}\n                </td>\n                <td ui-table-cell class=\"text-right text-sm font-semibold tabular-nums\">{{ payout.netAmount }}</td>\n                <td ui-table-cell>\n                  <span ui-badge variant=\"outline\" [class]=\"statusClass(payout.status)\">\n                    {{ statusLabel(payout.status) }}\n                  </span>\n                </td>\n                <td ui-table-cell>\n                  <ui-dropdown-menu>\n                    <button\n                      ui-button\n                      ui-dropdown-menu-trigger\n                      variant=\"ghost\"\n                      size=\"icon-sm\"\n                      class=\"text-muted-foreground\"\n                    >\n                      <lucide-icon [img]=\"MoreHorizontal\" />\n                      <span class=\"sr-only\">Open actions for {{ payout.id }}</span>\n                    </button>\n                    <ui-dropdown-menu-content align=\"end\" class=\"w-52\">\n                      <ui-dropdown-menu-item>\n                        <lucide-icon [img]=\"FileText\" class=\"mr-2 size-3.5\" />\n                        <span>View itemized breakdown</span>\n                      </ui-dropdown-menu-item>\n                      <ui-dropdown-menu-item>\n                        <lucide-icon [img]=\"Download\" class=\"mr-2 size-3.5\" />\n                        <span>Download receipt</span>\n                      </ui-dropdown-menu-item>\n                      <ui-dropdown-menu-separator />\n                      <ui-dropdown-menu-item>\n                        <lucide-icon [img]=\"ExternalLink\" class=\"mr-2 size-3.5\" />\n                        <span>Trace transfer</span>\n                      </ui-dropdown-menu-item>\n                    </ui-dropdown-menu-content>\n                  </ui-dropdown-menu>\n                </td>\n              </tr>\n            }\n          </tbody>\n        </table>\n      </div>\n\n      <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n        <p class=\"text-muted-foreground text-sm\">\n          Showing <span class=\"text-foreground font-medium\">6</span> of\n          <span class=\"text-foreground font-medium\">128</span> payout batches\n        </p>\n        <div class=\"flex items-center gap-2\">\n          <button ui-button variant=\"outline\" size=\"sm\" disabled>Previous</button>\n          <button ui-button variant=\"outline\" size=\"sm\">Next</button>\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiPayoutsManagementTableComponent {\n  protected readonly Building2 = Building2\n  protected readonly CalendarClock = CalendarClock\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Download = Download\n  protected readonly ExternalLink = ExternalLink\n  protected readonly FileText = FileText\n  protected readonly Landmark = Landmark\n  protected readonly MoreHorizontal = MoreHorizontal\n  protected readonly Zap = Zap\n\n  @Input('class') className?: string\n\n  protected readonly summary = summary\n  protected readonly payouts = payouts\n\n  get rootClass(): string {\n    return cn('w-full space-y-6', this.className)\n  }\n\n  summaryIconClass(item: SummaryItem): string {\n    return cn('flex size-8 items-center justify-center rounded-md', item.iconClass)\n  }\n\n  asIcon(icon: unknown): never {\n    return icon as never\n  }\n\n  statusClass(status: PayoutStatus): string {\n    return cn('font-medium', statusConfig[status].className)\n  }\n\n  statusLabel(status: PayoutStatus): string {\n    return statusConfig[status].label\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/payouts-management-table/payouts-management-table.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/payouts-management-table/index.ts",
      "content": "export {\n  UiPayoutsManagementTableComponent,\n  type PayoutStatus,\n  type PayoutBatch,\n} from './payouts-management-table.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/payouts-management-table/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json",
    "https://uipkge.dev/r/angular/dropdown-menu.json",
    "https://uipkge.dev/r/angular/table.json"
  ],
  "description": "Merchant payout management page: automated payout schedule controls, instant payout trigger, summary balance cards for available, in-transit, and rolling reserve balances, verified settlement bank account destination card, and an itemized batch transfer history table with gross/fee/net amounts, status badges, and action menus.",
  "categories": [
    "finance",
    "app",
    "billing"
  ]
}