{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "tax-summary-report",
  "title": "Tax Summary Report",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/tax-summary-report/tax-summary-report.component.ts",
      "content": "// QuickBooks and Stripe Tax style quarterly estimated tax calculator and liability report:\n// four KPI summary cards, jurisdictional liability breakdown (federal, state, FICA), IRS\n// Schedule C deductible expenses table with tax savings, and a quarterly filing timeline.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core'\nimport {\n  Calendar,\n  CheckCircle2,\n  Clock,\n  CreditCard,\n  Download,\n  FileCheck,\n  LucideAngularModule,\n  Receipt,\n  Scale,\n  ShieldCheck,\n  TrendingUp,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardDescriptionComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiProgressComponent } from '@/ui/progress/progress.component'\nimport {\n  UiSelectComponent,\n  UiSelectContentComponent,\n  UiSelectItemComponent,\n  UiSelectTriggerComponent,\n  UiSelectValueComponent,\n} from '@/ui/select/select.component'\nimport {\n  UiTableBodyComponent,\n  UiTableCellComponent,\n  UiTableComponent,\n  UiTableFooterComponent,\n  UiTableHeadComponent,\n  UiTableHeaderComponent,\n  UiTableRowComponent,\n} from '@/ui/table/table.component'\n\ntype BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info'\n\nconst metrics: {\n  title: string\n  value: string\n  subtitle: string\n  badge: string\n  badgeVariant: BadgeVariant\n  icon: unknown\n}[] = [\n  {\n    title: 'Estimated Q3 Tax Liability',\n    value: '$14,280.00',\n    subtitle: 'Due Sep 15, 2026 · Payment pending',\n    badge: 'Due in 24 days',\n    badgeVariant: 'warning',\n    icon: Receipt,\n  },\n  {\n    title: 'Gross Taxable Income',\n    value: '$128,450.00',\n    subtitle: 'YTD revenue across 4 client contracts',\n    badge: '+18.4% YoY',\n    badgeVariant: 'success',\n    icon: TrendingUp,\n  },\n  {\n    title: 'Total Deductible Expenses',\n    value: '$34,820.00',\n    subtitle: 'YTD deductions across 5 categories',\n    badge: '27.1% ratio',\n    badgeVariant: 'info',\n    icon: FileCheck,\n  },\n  {\n    title: 'Effective Tax Rate',\n    value: '21.4%',\n    subtitle: 'Federal (15.2%) + CA State (6.2%)',\n    badge: 'Blended rate',\n    badgeVariant: 'secondary',\n    icon: Scale,\n  },\n]\n\nconst jurisdictions = [\n  {\n    id: 'federal',\n    name: 'Federal Income Tax',\n    authority: 'Internal Revenue Service (IRS)',\n    amount: '$8,420.00',\n    percentage: 59,\n    rateDescription: 'Estimated at 24% marginal individual / corporate bracket',\n    accentColor: 'bg-primary',\n  },\n  {\n    id: 'state',\n    name: 'State & Local Tax',\n    authority: 'California Franchise Tax Board (FTB)',\n    amount: '$3,860.00',\n    percentage: 27,\n    rateDescription: 'California Schedule CA (540) estimated at 9.3% bracket',\n    accentColor: 'bg-warning bg-warning',\n  },\n  {\n    id: 'fica',\n    name: 'Self-Employment / FICA',\n    authority: 'Social Security & Medicare (Schedule SE)',\n    amount: '$2,000.00',\n    percentage: 14,\n    rateDescription: '15.3% self-employment contribution on 92.35% net earnings',\n    accentColor: 'bg-success bg-success',\n  },\n]\n\nconst deductionCategories: {\n  id: string\n  name: string\n  description: string\n  spent: string\n  rate: string\n  rateBadgeVariant: BadgeVariant\n  savings: string\n}[] = [\n  {\n    id: 'software',\n    name: 'Software & Subscriptions',\n    description: 'Cloud hosting, SaaS tooling, API subscriptions, and dev licenses',\n    spent: '$12,450.00',\n    rate: '100%',\n    rateBadgeVariant: 'default',\n    savings: '$2,664.30',\n  },\n  {\n    id: 'contractors',\n    name: 'Contractor Payments',\n    description: '1099-NEC engineering contractors, QA specialists, and design partners',\n    spent: '$11,200.00',\n    rate: '100%',\n    rateBadgeVariant: 'default',\n    savings: '$2,396.80',\n  },\n  {\n    id: 'office',\n    name: 'Office & Equipment',\n    description: 'Workstations, displays, ergonomic chairs, and home office deduction',\n    spent: '$5,670.00',\n    rate: '100%',\n    rateBadgeVariant: 'default',\n    savings: '$1,213.38',\n  },\n  {\n    id: 'travel',\n    name: 'Travel & Meals',\n    description: 'Client on-sites, tech conferences, and 50% eligible business dining',\n    spent: '$3,100.00',\n    rate: '50% for meals',\n    rateBadgeVariant: 'secondary',\n    savings: '$331.70',\n  },\n  {\n    id: 'professional',\n    name: 'Professional Services',\n    description: 'Corporate legal counsel, CPA tax advisory, and payroll processing',\n    spent: '$2,400.00',\n    rate: '100%',\n    rateBadgeVariant: 'default',\n    savings: '$513.60',\n  },\n]\n\nconst quarterlySchedule = [\n  {\n    quarter: 'Q1 2026',\n    period: 'Jan 1 – Mar 31',\n    dueDate: 'April 15, 2026',\n    status: 'Paid',\n    amount: '$11,850.00',\n    note: 'EFTPS Conf #98214 · Paid Apr 12',\n    isCurrent: false,\n  },\n  {\n    quarter: 'Q2 2026',\n    period: 'Apr 1 – May 31',\n    dueDate: 'June 15, 2026',\n    status: 'Paid',\n    amount: '$12,400.00',\n    note: 'EFTPS Conf #45091 · Paid Jun 14',\n    isCurrent: false,\n  },\n  {\n    quarter: 'Q3 2026',\n    period: 'Jun 1 – Aug 31',\n    dueDate: 'September 15, 2026',\n    status: 'Upcoming',\n    amount: '$14,280.00',\n    note: 'Auto-debit scheduled for Sep 15',\n    isCurrent: true,\n  },\n  {\n    quarter: 'Q4 2026',\n    period: 'Sep 1 – Dec 31',\n    dueDate: 'January 15, 2027',\n    status: 'Future',\n    amount: '$13,500.00',\n    note: 'Projected year-end estimate',\n    isCurrent: false,\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-tax-summary-report, [ui-tax-summary-report]',\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    UiCardDescriptionComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiProgressComponent,\n    UiSelectComponent,\n    UiSelectContentComponent,\n    UiSelectItemComponent,\n    UiSelectTriggerComponent,\n    UiSelectValueComponent,\n    UiTableComponent,\n    UiTableBodyComponent,\n    UiTableCellComponent,\n    UiTableFooterComponent,\n    UiTableHeadComponent,\n    UiTableHeaderComponent,\n    UiTableRowComponent,\n  ],\n  template: `\n    <div data-slot=\"tax-summary-report\" [class]=\"rootClass\">\n      <!-- Header Section -->\n      <div class=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between\">\n        <div>\n          <div class=\"flex flex-wrap items-center gap-3\">\n            <h2 class=\"text-foreground text-2xl font-bold tracking-tight\">Tax Summary & Estimated Liability</h2>\n            <span ui-badge variant=\"warning\" class=\"gap-1.5 px-2.5 py-1 text-xs font-medium\">\n              <lucide-icon [img]=\"Clock\" class=\"size-3.5\" />\n              Q3 Estimated Taxes Due Sep 15\n            </span>\n          </div>\n          <p class=\"text-muted-foreground mt-1 text-sm\">\n            Quarterly estimated tax obligations, IRS Schedule C deductible expenses, and jurisdictional liabilities.\n          </p>\n        </div>\n\n        <div class=\"flex flex-wrap items-center gap-2.5\">\n          <ui-select [value]=\"selectedYear()\" (valueChange)=\"selectedYear.set($event)\">\n            <button ui-select-trigger size=\"sm\" class=\"w-36 text-xs font-medium\" aria-label=\"Select Tax Year\">\n              <ui-select-value placeholder=\"Tax Year\" />\n            </button>\n            <ui-select-content>\n              <ui-select-item value=\"2026\">2026 Tax Year</ui-select-item>\n              <ui-select-item value=\"2025\">2025 Tax Year</ui-select-item>\n              <ui-select-item value=\"2024\">2024 Tax Year</ui-select-item>\n            </ui-select-content>\n          </ui-select>\n\n          <button ui-button aria-label=\"Download attachment\" variant=\"outline\" size=\"sm\" class=\"gap-1.5 text-xs\">\n            <lucide-icon [img]=\"Download\" class=\"size-4\" />\n            Export Tax Package\n          </button>\n\n          <button ui-button size=\"sm\" class=\"gap-1.5 text-xs\">\n            <lucide-icon [img]=\"CreditCard\" class=\"size-4\" />\n            Pay Estimated Tax\n          </button>\n        </div>\n      </div>\n\n      <!-- 4 Key Tax Metrics Cards -->\n      <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        @for (metric of metrics; track metric.title) {\n          <div ui-card class=\"shadow-xs\">\n            <div ui-card-content class=\"p-5\">\n              <div class=\"flex items-center justify-between gap-2\">\n                <p class=\"text-muted-foreground text-xs font-medium\">{{ metric.title }}</p>\n                <div\n                  class=\"bg-muted text-muted-foreground border-border/60 flex size-8 shrink-0 items-center justify-center rounded-md border shadow-2xs\"\n                  aria-hidden=\"true\"\n                >\n                  <lucide-icon [img]=\"metricIcon(metric.icon)\" class=\"size-4\" />\n                </div>\n              </div>\n              <div class=\"mt-3\">\n                <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">{{ metric.value }}</p>\n                <div class=\"mt-2 flex items-center gap-2\">\n                  <span ui-badge [variant]=\"metric.badgeVariant\" class=\"px-1.5 py-0 text-xs font-medium\">\n                    {{ metric.badge }}\n                  </span>\n                  <span class=\"text-muted-foreground truncate text-xs\">{{ metric.subtitle }}</span>\n                </div>\n              </div>\n            </div>\n          </div>\n        }\n      </div>\n\n      <!-- Tax Liability Breakdown by Jurisdiction -->\n      <div ui-card class=\"shadow-xs\">\n        <div ui-card-header>\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div>\n              <h3 ui-card-title class=\"text-base font-semibold\">Tax Liability Breakdown by Jurisdiction</h3>\n              <p ui-card-description class=\"text-xs sm:text-sm\">\n                Estimated Q3 distribution across federal, state, and payroll authorities ($14,280.00 total).\n              </p>\n            </div>\n            <span ui-badge variant=\"outline\" class=\"text-xs tabular-nums\">3 Jurisdictions Active</span>\n          </div>\n        </div>\n        <div ui-card-content class=\"space-y-6\">\n          <!-- Visual Multi-segment bar -->\n          <div class=\"space-y-1.5\">\n            <div class=\"bg-muted/60 ring-border/50 flex h-3 w-full overflow-hidden rounded-full p-0.5 ring-1\">\n              <div\n                class=\"bg-primary h-full rounded-l-full transition-[width] duration-300\"\n                style=\"width: 59%\"\n                title=\"Federal Income Tax: 59%\"\n              ></div>\n              <div\n                class=\"bg-warning bg-warning h-full transition-[width] duration-300\"\n                style=\"width: 27%\"\n                title=\"State & Local Tax: 27%\"\n              ></div>\n              <div\n                class=\"bg-success bg-success h-full rounded-r-full transition-[width] duration-300\"\n                style=\"width: 14%\"\n                title=\"Self-Employment / FICA: 14%\"\n              ></div>\n            </div>\n            <div class=\"text-muted-foreground flex items-center justify-between text-xs\">\n              <span>Federal (59%)</span>\n              <span>State (27%)</span>\n              <span>Self-Employment (14%)</span>\n            </div>\n          </div>\n\n          <!-- Jurisdiction Cards Grid -->\n          <div class=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n            @for (j of jurisdictions; track j.id) {\n              <div class=\"bg-muted/30 border-border/80 flex flex-col justify-between rounded-lg border p-4 shadow-2xs\">\n                <div>\n                  <div class=\"flex flex-wrap items-start justify-between gap-2\">\n                    <div>\n                      <div class=\"flex items-center gap-2\">\n                        <span [class]=\"jurisdictionDotClass(j.accentColor)\" aria-hidden=\"true\"></span>\n                        <h4 class=\"text-foreground min-w-0 text-sm font-semibold\">{{ j.name }}</h4>\n                      </div>\n                      <p class=\"text-muted-foreground mt-0.5 text-xs\">{{ j.authority }}</p>\n                    </div>\n                    <span ui-badge variant=\"secondary\" class=\"text-xs font-semibold tabular-nums\"\n                      >{{ j.percentage }}%</span\n                    >\n                  </div>\n\n                  <div class=\"my-4\">\n                    <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">{{ j.amount }}</p>\n                    <p class=\"text-muted-foreground mt-1 text-xs\">{{ j.rateDescription }}</p>\n                  </div>\n                </div>\n\n                <ui-progress [value]=\"j.percentage\" class=\"h-1.5\" />\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n\n      <!-- Deductible Expense Categories Table -->\n      <div ui-card class=\"shadow-xs\">\n        <div ui-card-header>\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div>\n              <h3 ui-card-title class=\"text-base font-semibold\">Deductible Expense Categories</h3>\n              <p ui-card-description class=\"text-xs sm:text-sm\">\n                IRS Schedule C business deductions applied YTD to reduce gross taxable revenue ($34,820.00 total spent).\n              </p>\n            </div>\n            <span ui-badge variant=\"outline\" class=\"text-xs font-medium tabular-nums\">YTD Tax Savings: $7,119.78</span>\n          </div>\n        </div>\n        <div ui-card-content class=\"p-0\">\n          <table ui-table>\n            <thead ui-table-header>\n              <tr ui-table-row>\n                <th ui-table-head class=\"w-[45%]\">Category & Description</th>\n                <th ui-table-head class=\"text-right\">Total Spent YTD</th>\n                <th ui-table-head class=\"text-center\">Deductible Rate</th>\n                <th ui-table-head class=\"text-right\">Total Tax Savings</th>\n              </tr>\n            </thead>\n            <tbody ui-table-body>\n              @for (category of deductionCategories; track category.id) {\n                <tr ui-table-row>\n                  <td ui-table-cell>\n                    <div class=\"text-foreground text-sm font-medium\">{{ category.name }}</div>\n                    <div class=\"text-muted-foreground text-xs\">{{ category.description }}</div>\n                  </td>\n                  <td ui-table-cell class=\"text-foreground text-right font-medium tabular-nums\">\n                    {{ category.spent }}\n                  </td>\n                  <td ui-table-cell class=\"text-center\">\n                    <span ui-badge [variant]=\"category.rateBadgeVariant\" class=\"text-xs font-medium\">\n                      {{ category.rate }}\n                    </span>\n                  </td>\n                  <td ui-table-cell class=\"text-success text-success text-right font-medium tabular-nums\">\n                    {{ category.savings }}\n                  </td>\n                </tr>\n              }\n            </tbody>\n            <tfoot ui-table-footer>\n              <tr ui-table-row class=\"font-medium\">\n                <td ui-table-cell>Total Business Deductions (5 categories)</td>\n                <td ui-table-cell class=\"text-foreground text-right font-bold tabular-nums\">$34,820.00</td>\n                <td ui-table-cell class=\"text-center\">\n                  <span ui-badge variant=\"outline\" class=\"text-xs font-medium\">95.5% blended</span>\n                </td>\n                <td ui-table-cell class=\"text-success text-success text-right font-bold tabular-nums\">$7,119.78</td>\n              </tr>\n            </tfoot>\n          </table>\n        </div>\n      </div>\n\n      <!-- Quarterly Tax Filing Schedule Timeline -->\n      <div ui-card class=\"shadow-xs\">\n        <div ui-card-header>\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div>\n              <h3 ui-card-title class=\"text-base font-semibold\">Quarterly Estimated Tax Schedule</h3>\n              <p ui-card-description class=\"text-xs sm:text-sm\">\n                2026 fiscal tax year remittance timeline, due dates, and IRS EFTPS confirmations.\n              </p>\n            </div>\n            <div class=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n              <lucide-icon [img]=\"ShieldCheck\" class=\"text-success size-4\" />\n              <span>IRS EFTPS Integrated</span>\n            </div>\n          </div>\n        </div>\n        <div ui-card-content>\n          <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n            @for (q of quarterlySchedule; track q.quarter) {\n              <div [class]=\"quarterCardClass(q.isCurrent)\">\n                <div>\n                  <div class=\"flex items-center justify-between gap-2\">\n                    <span class=\"text-foreground text-sm font-semibold\">{{ q.quarter }}</span>\n                    <span\n                      ui-badge\n                      [variant]=\"quarterStatusVariant(q.status)\"\n                      class=\"text-xs font-medium whitespace-normal\"\n                    >\n                      {{ q.status }}\n                    </span>\n                  </div>\n\n                  <div class=\"mt-2 space-y-1\">\n                    <div class=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n                      <lucide-icon [img]=\"Calendar\" class=\"size-3.5\" />\n                      <span>Due: {{ q.dueDate }}</span>\n                    </div>\n                    <p class=\"text-muted-foreground text-xs\">Period: {{ q.period }}</p>\n                  </div>\n                </div>\n\n                <div class=\"border-border/60 mt-4 border-t pt-3\">\n                  <div class=\"flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5\">\n                    <span class=\"text-muted-foreground text-xs\">Amount</span>\n                    <span [class]=\"quarterAmountClass(q.isCurrent)\">{{ q.amount }}</span>\n                  </div>\n                  <div [class]=\"quarterNoteClass(q.status)\">\n                    <lucide-icon [img]=\"quarterNoteIcon(q.status)\" class=\"size-3.5 shrink-0\" />\n                    <span class=\"truncate\">{{ q.note }}</span>\n                  </div>\n                </div>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiTaxSummaryReportComponent {\n  protected readonly Calendar = Calendar\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Clock = Clock\n  protected readonly CreditCard = CreditCard\n  protected readonly Download = Download\n  protected readonly ShieldCheck = ShieldCheck\n\n  protected readonly metrics = metrics\n  protected readonly jurisdictions = jurisdictions\n  protected readonly deductionCategories = deductionCategories\n  protected readonly quarterlySchedule = quarterlySchedule\n\n  @Input('class') className?: string\n\n  readonly selectedYear = signal('2026')\n\n  get rootClass(): string {\n    return cn('w-full space-y-6', this.className)\n  }\n\n  jurisdictionDotClass(accentColor: string): string {\n    return cn('size-2.5 shrink-0 self-start rounded-full', accentColor)\n  }\n\n  quarterCardClass(isCurrent: boolean): string {\n    return cn(\n      'relative flex flex-col justify-between rounded-lg border p-4 transition-colors',\n      isCurrent ? 'border-primary/60 bg-primary/[0.03] shadow-xs' : 'border-border bg-card shadow-2xs',\n    )\n  }\n\n  quarterAmountClass(isCurrent: boolean): string {\n    return cn('text-lg font-bold tabular-nums', isCurrent ? 'text-primary' : 'text-foreground')\n  }\n\n  quarterStatusVariant(status: string): BadgeVariant {\n    if (status === 'Paid') return 'success'\n    if (status === 'Upcoming') return 'warning'\n    return 'secondary'\n  }\n\n  quarterNoteClass(status: string): string {\n    return cn(\n      'mt-1 flex items-center gap-1.5 text-xs',\n      status === 'Paid' ? 'text-success' : status === 'Upcoming' ? 'text-warning' : 'text-muted-foreground',\n    )\n  }\n\n  quarterNoteIcon(status: string): unknown {\n    if (status === 'Paid') return CheckCircle2\n    if (status === 'Upcoming') return Clock\n    return Calendar\n  }\n\n  metricIcon(icon: unknown): unknown {\n    return icon\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/tax-summary-report/tax-summary-report.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/tax-summary-report/index.ts",
      "content": "export { UiTaxSummaryReportComponent } from './tax-summary-report.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/tax-summary-report/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/progress.json",
    "https://uipkge.dev/r/angular/select.json",
    "https://uipkge.dev/r/angular/table.json"
  ],
  "description": "QuickBooks and Stripe Tax style quarterly estimated tax calculator and liability report: four KPI summary cards, jurisdictional liability breakdown (federal, state, FICA), IRS Schedule C deductible expenses table with tax savings, and a quarterly filing timeline.",
  "categories": [
    "finance",
    "app",
    "billing",
    "dashboard"
  ]
}