{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "pricing-01",
  "title": "Seat Pricing Matrix",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/pricing-01/pricing-01.component.ts",
      "content": "// Seat pricing matrix: monthly/annual billing toggle, currency selector (USD/EUR/GBP),\n// team seat simulator slider, dynamic add-on calculators, and an expandable side-by-side\n// feature comparison matrix. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport { ArrowRight, Check, ChevronDown, ChevronUp, LucideAngularModule, ShieldCheck, Users, Zap } 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  UiCardFooterComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\nimport { UiSliderComponent } from '@/ui/slider/slider.component'\nimport { UiSwitchComponent } from '@/ui/switch/switch.component'\nimport {\n  UiTableBodyComponent,\n  UiTableCellComponent,\n  UiTableComponent,\n  UiTableHeadComponent,\n  UiTableHeaderComponent,\n  UiTableRowComponent,\n} from '@/ui/table/table.component'\nimport { UiToggleGroupComponent, UiToggleGroupItemComponent } from '@/ui/toggle-group/toggle-group.component'\n\nexport type Pricing01BillingCycle = 'monthly' | 'yearly'\nexport type Pricing01Currency = 'USD' | 'EUR' | 'GBP'\n\nconst currencySymbols: Record<Pricing01Currency, string> = {\n  USD: '$',\n  EUR: '€',\n  GBP: '£',\n}\n\nconst currencyRates: Record<Pricing01Currency, number> = {\n  USD: 1.0,\n  EUR: 0.92,\n  GBP: 0.79,\n}\n\nexport interface Pricing01FeatureRow {\n  name: string\n  starter: string\n  team: string\n  enterprise: string\n}\n\nexport interface Pricing01ComparisonGroup {\n  category: string\n  features: Pricing01FeatureRow[]\n}\n\nconst comparisonMatrix: Pricing01ComparisonGroup[] = [\n  {\n    category: 'Platform & Compute Core',\n    features: [\n      { name: 'Active Team Members', starter: 'Up to 10', team: 'Unlimited', enterprise: 'Unlimited + Org Units' },\n      { name: 'Monthly API Requests', starter: '100,000 / mo', team: '2,500,000 / mo', enterprise: 'Custom Unlimited' },\n      { name: 'Workflow Automations', starter: '10 active', team: '100 active', enterprise: 'Unlimited real-time' },\n      { name: 'Data Retention History', starter: '30 days', team: '365 days', enterprise: '7 years immutable' },\n    ],\n  },\n  {\n    category: 'Security & Enterprise Governance',\n    features: [\n      {\n        name: 'SOC 2 Type II & ISO 27001',\n        starter: 'Standard',\n        team: 'Included',\n        enterprise: 'Included + Auditor Portal',\n      },\n      { name: 'SAML SSO & SCIM Provisioning', starter: '—', team: 'Google / Okta', enterprise: 'Custom IdP + SCIM v2' },\n      {\n        name: 'Role-Based Access (RBAC)',\n        starter: '3 predefined roles',\n        team: 'Granular permissions',\n        enterprise: 'Custom policy engine',\n      },\n      {\n        name: 'Immutable Audit Trail Logs',\n        starter: '—',\n        team: '90 days exportable',\n        enterprise: 'Real-time SIEM streaming',\n      },\n    ],\n  },\n  {\n    category: 'Support & Success SLAs',\n    features: [\n      {\n        name: 'Support Channel',\n        starter: 'Community & Email',\n        team: 'Priority Email + Chat',\n        enterprise: 'Dedicated Private Slack',\n      },\n      {\n        name: 'First-Response SLA',\n        starter: '24 business hours',\n        team: '4 business hours',\n        enterprise: '< 15 mins (24/7/365)',\n      },\n      { name: 'Uptime SLA Guarantee', starter: '99.9%', team: '99.95%', enterprise: '99.99% financially backed' },\n      { name: 'Dedicated Solutions Architect', starter: '—', team: '—', enterprise: 'Assigned Principal Engineer' },\n    ],\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-pricing-01, [ui-pricing-01]',\n  standalone: true,\n  // React renders the root <section> 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    UiCardFooterComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiSeparatorComponent,\n    UiSliderComponent,\n    UiSwitchComponent,\n    UiTableBodyComponent,\n    UiTableCellComponent,\n    UiTableComponent,\n    UiTableHeadComponent,\n    UiTableHeaderComponent,\n    UiTableRowComponent,\n    UiToggleGroupComponent,\n    UiToggleGroupItemComponent,\n  ],\n  template: `\n    <section data-slot=\"pricing-01\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n        <!-- Section Header -->\n        <div class=\"mx-auto max-w-3xl space-y-4 text-center\">\n          <div\n            class=\"border-primary/20 bg-primary/5 text-primary inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs font-medium shadow-2xs\"\n          >\n            <lucide-icon [img]=\"ShieldCheck\" class=\"size-3.5\" />\n            <span>Predictable Enterprise Pricing</span>\n          </div>\n          <h2 class=\"text-foreground text-3xl font-bold tracking-tight sm:text-4xl lg:text-5xl\">\n            Scale effortlessly without seat tax surprises\n          </h2>\n          <p class=\"text-muted-foreground text-base sm:text-lg\">\n            Zero setup fees, transparent volume discounts, and instant self-serve provisioning. Switch or cancel plans\n            anytime.\n          </p>\n\n          <!-- Billing Cycle & Currency Switcher Toolbar -->\n          <div class=\"mt-8 flex flex-wrap items-center justify-center gap-4 pt-2\">\n            <!-- Monthly vs Yearly -->\n            <div class=\"border-border bg-card inline-flex rounded-lg border p-1 shadow-2xs\">\n              <ui-toggle-group type=\"single\" [value]=\"billingCycle()\" (valueChange)=\"setBillingCycle($event)\">\n                <button ui-toggle-group-item value=\"monthly\" class=\"px-3.5 py-1.5 text-xs font-medium\">Monthly</button>\n                <button\n                  ui-toggle-group-item\n                  value=\"yearly\"\n                  class=\"flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium\"\n                >\n                  <span>Annual</span>\n                  <span\n                    ui-badge\n                    variant=\"secondary\"\n                    class=\"bg-primary/10 text-primary border-primary/20 px-1.5 py-0 text-xs\"\n                  >\n                    Save 20%\n                  </span>\n                </button>\n              </ui-toggle-group>\n            </div>\n\n            <!-- Currency Selector -->\n            <div class=\"border-border bg-card inline-flex rounded-lg border p-1 shadow-2xs\">\n              <ui-toggle-group type=\"single\" [value]=\"currency()\" (valueChange)=\"setCurrency($event)\">\n                <button ui-toggle-group-item value=\"USD\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                  USD ($)\n                </button>\n                <button ui-toggle-group-item value=\"EUR\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                  EUR (€)\n                </button>\n                <button ui-toggle-group-item value=\"GBP\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                  GBP (£)\n                </button>\n              </ui-toggle-group>\n            </div>\n          </div>\n\n          <!-- Interactive Team Seat Simulator Bar -->\n          <div class=\"border-border bg-card mx-auto mt-6 max-w-xl rounded-xl border p-4 shadow-2xs\">\n            <div class=\"flex flex-wrap items-center justify-between gap-2 text-xs\">\n              <div class=\"text-foreground flex items-center gap-2 font-medium\">\n                <lucide-icon [img]=\"Users\" class=\"text-primary size-4\" />\n                <span>Simulate Team Size:</span>\n              </div>\n              <div class=\"flex items-center gap-2\">\n                <span class=\"bg-muted text-foreground rounded px-2 py-0.5 font-mono text-xs font-semibold\">\n                  {{ currentSeats() }} {{ currentSeats() === 1 ? 'seat' : 'seats' }}\n                </span>\n                @if (billingCycle() === 'yearly' && annualSavingsTeam() > 0) {\n                  <span class=\"text-success text-xs font-medium\">\n                    (Saves ~{{ sym() }}{{ annualSavingsTeam().toLocaleString() }}/yr on Team plan)\n                  </span>\n                }\n              </div>\n            </div>\n            <div class=\"mt-3\">\n              <ui-slider\n                [value]=\"[currentSeats()]\"\n                [min]=\"1\"\n                [max]=\"50\"\n                [step]=\"1\"\n                (valueChange)=\"onSeatsChange($event)\"\n                class=\"cursor-pointer\"\n              />\n            </div>\n            <div class=\"text-muted-foreground mt-2 flex justify-between font-mono text-xs\">\n              <span>1 seat</span>\n              <span>25 seats</span>\n              <span>50+ seats</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- Plan Cards Grid -->\n        <div class=\"mt-12 grid grid-cols-1 gap-8 lg:grid-cols-3 lg:items-stretch\">\n          <!-- Tier 1: Starter -->\n          <div\n            ui-card\n            class=\"border-border bg-card hover:border-primary/40 relative flex flex-col justify-between shadow-xs transition-colors duration-200 hover:shadow-md\"\n          >\n            <div>\n              <div ui-card-header class=\"pb-4\">\n                <div class=\"flex items-center justify-between\">\n                  <span ui-badge variant=\"outline\" class=\"font-mono text-xs\">Bootstrap & Indie</span>\n                </div>\n                <h3 ui-card-title class=\"text-foreground text-xl font-bold tracking-tight\">Starter Studio</h3>\n                <p ui-card-description class=\"text-muted-foreground text-xs\">\n                  For agile squads and early-stage product teams validating core workflows.\n                </p>\n\n                <div class=\"mt-6 space-y-1\">\n                  <div class=\"flex items-baseline gap-1.5\">\n                    <span class=\"text-foreground text-4xl font-bold tracking-tight\">\n                      {{ sym() }}{{ starterUnit() }}\n                    </span>\n                    <span class=\"text-muted-foreground text-xs font-medium\">/ seat / month</span>\n                  </div>\n                  <div class=\"text-muted-foreground font-mono text-xs\">\n                    Est. {{ sym() }}{{ starterMonthlyTotal().toLocaleString() }}/mo for {{ currentSeats() }}\n                    {{ currentSeats() === 1 ? 'seat' : 'seats' }}\n                  </div>\n                </div>\n              </div>\n\n              <div ui-card-content class=\"space-y-4 pt-2\">\n                <div ui-separator></div>\n                <div class=\"space-y-2.5\">\n                  <p class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">Included features</p>\n                  <ul class=\"text-foreground space-y-2.5 text-xs\">\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Up to 10 team seats & unlimited guests</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>100,000 monthly API event calls</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>30-day continuous audit & revision history</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Standard Community & Email support (24h)</span>\n                    </li>\n                    <li class=\"text-muted-foreground flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-muted-foreground/50 mt-0.5 size-4 shrink-0\" />\n                      <span>Community Discord access & quickstarts</span>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n\n            <div ui-card-footer class=\"border-border mt-auto border-t pt-4\">\n              <button ui-button variant=\"outline\" class=\"h-10 w-full gap-1.5 text-xs font-semibold\">\n                <span>Start Free 14-Day Trial</span>\n                <lucide-icon [img]=\"ArrowRight\" class=\"size-3.5\" />\n              </button>\n            </div>\n          </div>\n\n          <!-- Tier 2: Team Pro (Highlighted Flagship) -->\n          <div\n            ui-card\n            class=\"border-primary bg-card ring-primary/20 relative flex flex-col justify-between shadow-lg ring-2 transition-colors duration-200 hover:shadow-xl lg:-translate-y-2\"\n          >\n            <div class=\"absolute -top-3.5 left-1/2 -translate-x-1/2\">\n              <span\n                ui-badge\n                class=\"bg-primary text-primary-foreground gap-1.5 px-3 py-0.5 text-xs font-semibold shadow-sm\"\n              >\n                <lucide-icon [img]=\"Zap\" class=\"size-3 fill-current\" />\n                <span>Most Popular Choice</span>\n              </span>\n            </div>\n\n            <div>\n              <div ui-card-header class=\"pt-7 pb-4\">\n                <div class=\"flex items-center justify-between\">\n                  <span\n                    ui-badge\n                    variant=\"secondary\"\n                    class=\"bg-primary/10 text-primary border-primary/20 font-mono text-xs\"\n                  >\n                    Scale & High-Growth\n                  </span>\n                </div>\n                <h3 ui-card-title class=\"text-foreground text-2xl font-bold tracking-tight\">Team Scale</h3>\n                <p ui-card-description class=\"text-muted-foreground text-xs\">\n                  For fast-scaling engineering and product organizations requiring deep automation.\n                </p>\n\n                <div class=\"mt-6 space-y-1\">\n                  <div class=\"flex items-baseline gap-1.5\">\n                    <span class=\"text-foreground text-4xl font-bold tracking-tight\"> {{ sym() }}{{ teamUnit() }} </span>\n                    <span class=\"text-muted-foreground text-xs font-medium\">/ seat / month</span>\n                  </div>\n                  <div class=\"text-primary font-mono text-xs font-medium\">\n                    Est. {{ sym() }}{{ teamMonthlyTotal().toLocaleString() }}/mo for {{ currentSeats() }}\n                    {{ currentSeats() === 1 ? 'seat' : 'seats' }}\n                  </div>\n                </div>\n              </div>\n\n              <div ui-card-content class=\"space-y-4 pt-2\">\n                <div ui-separator></div>\n                <div class=\"space-y-2.5\">\n                  <p class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                    Everything in Starter, plus\n                  </p>\n                  <ul class=\"text-foreground space-y-2.5 text-xs\">\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span class=\"font-medium\">Unlimited team seats & custom workspace roles</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>2.5M monthly API calls & priority queue</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Google & Okta SAML SSO integration</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>365-day immutable compliance logs</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Priority ticketing with 4h guaranteed SLA</span>\n                    </li>\n                  </ul>\n                </div>\n\n                <!-- Addons Selector for Team -->\n                <div class=\"border-border bg-muted/30 space-y-2.5 rounded-lg border p-3\">\n                  <p class=\"text-foreground text-xs font-semibold\">Optional Power Add-ons</p>\n                  <div class=\"flex items-center justify-between text-xs\">\n                    <span class=\"text-muted-foreground\">\n                      24/7 Dedicated SLA (+{{ sym() }}{{ slaAddonUnit() }}/mo)\n                    </span>\n                    <button\n                      ui-switch\n                      aria-label=\"Toggle dedicated SLA add-on\"\n                      [checked]=\"addDedicatedSla()\"\n                      (checkedChange)=\"addDedicatedSla.set($event)\"\n                    ></button>\n                  </div>\n                  <div class=\"flex items-center justify-between text-xs\">\n                    <span class=\"text-muted-foreground\">\n                      SOC 2 Vault Streaming (+{{ sym() }}{{ vaultAddonUnit() }}/mo)\n                    </span>\n                    <button\n                      ui-switch\n                      aria-label=\"Toggle audit vault add-on\"\n                      [checked]=\"addAuditVault()\"\n                      (checkedChange)=\"addAuditVault.set($event)\"\n                    ></button>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div ui-card-footer class=\"border-border mt-auto border-t pt-4\">\n              <button ui-button class=\"h-10 w-full gap-1.5 text-xs font-semibold shadow-sm\">\n                <span>Deploy Team Workspace</span>\n                <lucide-icon [img]=\"ArrowRight\" class=\"size-3.5\" />\n              </button>\n            </div>\n          </div>\n\n          <!-- Tier 3: Enterprise Platform -->\n          <div\n            ui-card\n            class=\"border-border bg-card hover:border-primary/40 relative flex flex-col justify-between shadow-xs transition-colors duration-200 hover:shadow-md\"\n          >\n            <div>\n              <div ui-card-header class=\"pb-4\">\n                <div class=\"flex items-center justify-between\">\n                  <span ui-badge variant=\"outline\" class=\"font-mono text-xs\">Enterprise & Security</span>\n                </div>\n                <h3 ui-card-title class=\"text-foreground text-xl font-bold tracking-tight\">Enterprise Suite</h3>\n                <p ui-card-description class=\"text-muted-foreground text-xs\">\n                  Dedicated infrastructure, custom security controls, and bespoke compliance SLAs.\n                </p>\n\n                <div class=\"mt-6 space-y-1\">\n                  <div class=\"flex items-baseline gap-1.5\">\n                    <span class=\"text-foreground text-4xl font-bold tracking-tight\">\n                      {{ sym() }}{{ enterpriseUnit() }}\n                    </span>\n                    <span class=\"text-muted-foreground text-xs font-medium\">/ seat / month</span>\n                  </div>\n                  <div class=\"text-muted-foreground font-mono text-xs\">\n                    Custom volume licensing available for 100+ seats\n                  </div>\n                </div>\n              </div>\n\n              <div ui-card-content class=\"space-y-4 pt-2\">\n                <div ui-separator></div>\n                <div class=\"space-y-2.5\">\n                  <p class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                    Everything in Team, plus\n                  </p>\n                  <ul class=\"text-foreground space-y-2.5 text-xs\">\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Custom SCIM v2 user provisioning & directory sync</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Dedicated VPC peering & custom data residency</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>99.99% uptime SLA with financial penalty backing</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Assigned Principal Solutions Engineer & private Slack</span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                      <span>Custom Master Service Agreement (MSA) & DPA</span>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n\n            <div ui-card-footer class=\"border-border mt-auto border-t pt-4\">\n              <button ui-button variant=\"outline\" class=\"h-10 w-full gap-1.5 text-xs font-semibold\">\n                <lucide-icon [img]=\"ShieldCheck\" class=\"text-primary size-3.5\" />\n                <span>Contact Solutions Team</span>\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <!-- Collapsible Feature Matrix Trigger -->\n        <div class=\"mt-12 text-center\">\n          <button\n            ui-button\n            variant=\"ghost\"\n            size=\"sm\"\n            class=\"text-foreground hover:bg-muted gap-2 text-xs font-semibold\"\n            (click)=\"toggleComparison()\"\n          >\n            <span>{{\n              showComparisonTable() ? 'Hide Detailed Feature Comparison' : 'Compare All Features & Enterprise Limits'\n            }}</span>\n            @if (showComparisonTable()) {\n              <lucide-icon [img]=\"ChevronUp\" class=\"size-4\" />\n            } @else {\n              <lucide-icon [img]=\"ChevronDown\" class=\"size-4\" />\n            }\n          </button>\n        </div>\n\n        <!-- Feature Comparison Matrix Table -->\n        @if (showComparisonTable()) {\n          <div class=\"border-border bg-card mt-8 overflow-hidden rounded-xl border shadow-xs\">\n            <div\n              class=\"border-border bg-muted/20 flex flex-wrap items-center justify-between gap-4 border-b p-4 sm:p-6\"\n            >\n              <div>\n                <h3 class=\"text-foreground text-base font-bold\">Detailed Specification & Limits</h3>\n                <p class=\"text-muted-foreground text-xs\">Comprehensive side-by-side breakdown across every tier.</p>\n              </div>\n              <span ui-badge variant=\"outline\" class=\"font-mono text-xs\"\n                >All plans include SSL & automated backups</span\n              >\n            </div>\n\n            <div class=\"overflow-x-auto\">\n              <table ui-table>\n                <thead ui-table-header>\n                  <tr ui-table-row class=\"bg-muted/40\">\n                    <th ui-table-head class=\"text-foreground w-[34%] text-xs font-semibold\">Capabilities</th>\n                    <th ui-table-head class=\"text-foreground w-[22%] text-xs font-semibold\">Starter Studio</th>\n                    <th ui-table-head class=\"text-primary w-[22%] text-xs font-bold font-semibold\">Team Scale</th>\n                    <th ui-table-head class=\"text-foreground w-[22%] text-xs font-semibold\">Enterprise Suite</th>\n                  </tr>\n                </thead>\n                <tbody ui-table-body>\n                  @for (group of comparisonGroups; track group.category) {\n                    <tr ui-table-row class=\"bg-muted/60 text-muted-foreground text-xs font-semibold\">\n                      <td ui-table-cell colspan=\"4\" class=\"py-2.5 font-mono text-xs tracking-wider uppercase\">\n                        {{ group.category }}\n                      </td>\n                    </tr>\n                    @for (feat of group.features; track feat.name) {\n                      <tr ui-table-row class=\"text-xs\">\n                        <td ui-table-cell class=\"text-foreground py-3 font-medium\">{{ feat.name }}</td>\n                        <td ui-table-cell class=\"text-muted-foreground py-3\">{{ feat.starter }}</td>\n                        <td ui-table-cell class=\"text-foreground bg-primary/5 py-3 font-medium\">{{ feat.team }}</td>\n                        <td ui-table-cell class=\"text-foreground py-3\">{{ feat.enterprise }}</td>\n                      </tr>\n                    }\n                  }\n                </tbody>\n              </table>\n            </div>\n          </div>\n        }\n      </div>\n    </section>\n  `,\n})\nexport class UiPricing01Component {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Check = Check\n  protected readonly ChevronDown = ChevronDown\n  protected readonly ChevronUp = ChevronUp\n  protected readonly ShieldCheck = ShieldCheck\n  protected readonly Users = Users\n  protected readonly Zap = Zap\n\n  protected readonly comparisonGroups = comparisonMatrix\n\n  @Input() set initialBillingCycle(v: Pricing01BillingCycle) {\n    if (v) this.billingCycle.set(v)\n  }\n  @Input() set initialCurrency(v: Pricing01Currency) {\n    if (v) this.currency.set(v)\n  }\n  @Input() set initialShowComparison(v: boolean) {\n    this.showComparisonTable.set(!!v)\n  }\n  @Input('class') className?: string\n\n  readonly billingCycle = signal<Pricing01BillingCycle>('yearly')\n  readonly currency = signal<Pricing01Currency>('USD')\n  readonly teamSeats = signal<number[]>([12])\n  readonly addDedicatedSla = signal(false)\n  readonly addAuditVault = signal(false)\n  readonly showComparisonTable = signal(false)\n\n  readonly rates = computed(() => currencyRates[this.currency()])\n  readonly sym = computed(() => currencySymbols[this.currency()])\n\n  readonly starterBase = computed(() => (this.billingCycle() === 'yearly' ? 12 : 15))\n  readonly teamBase = computed(() => (this.billingCycle() === 'yearly' ? 28 : 35))\n  readonly enterpriseBase = computed(() => (this.billingCycle() === 'yearly' ? 68 : 85))\n\n  readonly slaCost = computed(() => (this.addDedicatedSla() ? 99 : 0))\n  readonly vaultCost = computed(() => (this.addAuditVault() ? 49 : 0))\n\n  readonly currentSeats = computed(() => this.teamSeats()[0] ?? 1)\n\n  readonly starterUnit = computed(() => Math.round(this.starterBase() * this.rates()))\n  readonly teamUnit = computed(() => Math.round(this.teamBase() * this.rates()))\n  readonly enterpriseUnit = computed(() => Math.round(this.enterpriseBase() * this.rates()))\n  readonly slaAddonUnit = computed(() => Math.round(99 * this.rates()))\n  readonly vaultAddonUnit = computed(() => Math.round(49 * this.rates()))\n\n  readonly starterMonthlyTotal = computed(() => {\n    const base = this.starterBase() * this.currentSeats()\n    return Math.round((base + (this.addAuditVault() ? 29 : 0)) * this.rates())\n  })\n\n  readonly teamMonthlyTotal = computed(() => {\n    const base = this.teamBase() * this.currentSeats()\n    return Math.round((base + this.slaCost() + this.vaultCost()) * this.rates())\n  })\n\n  readonly enterpriseMonthlyTotal = computed(() => {\n    const base = this.enterpriseBase() * this.currentSeats()\n    return Math.round((base + this.slaCost() + this.vaultCost()) * this.rates())\n  })\n\n  readonly annualSavingsTeam = computed(() => {\n    const monthlyCost = 35 * this.currentSeats() * 12\n    const yearlyCost = 28 * this.currentSeats() * 12\n    return Math.round((monthlyCost - yearlyCost) * this.rates())\n  })\n\n  get rootClass(): string {\n    return cn('bg-background w-full py-16 sm:py-24', this.className)\n  }\n\n  setBillingCycle(value: string): void {\n    if (value === 'monthly' || value === 'yearly') this.billingCycle.set(value)\n  }\n\n  setCurrency(value: string): void {\n    if (value === 'USD' || value === 'EUR' || value === 'GBP') this.currency.set(value)\n  }\n\n  onSeatsChange(value: number[]): void {\n    if (value.length > 0) this.teamSeats.set(value)\n  }\n\n  toggleComparison(): void {\n    this.showComparisonTable.update((v) => !v)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/pricing-01/pricing-01.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/pricing-01/index.ts",
      "content": "export {\n  UiPricing01Component,\n  type Pricing01BillingCycle,\n  type Pricing01Currency,\n  type Pricing01ComparisonGroup,\n  type Pricing01FeatureRow,\n} from './pricing-01.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/pricing-01/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/separator.json",
    "https://uipkge.dev/r/angular/slider.json",
    "https://uipkge.dev/r/angular/switch.json",
    "https://uipkge.dev/r/angular/table.json",
    "https://uipkge.dev/r/angular/toggle-group.json"
  ],
  "description": "Comprehensive enterprise pricing workbench with monthly/annual billing cycle toggle, currency selector (USD/EUR/GBP), team seat simulator slider, dynamic add-on calculators, and an expandable side-by-side feature comparison matrix.",
  "categories": [
    "marketing"
  ]
}