{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "pricing-01",
  "title": "Seat Pricing Matrix",
  "type": "registry:block",
  "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"
  ],
  "deprecated": true,
  "replacedBy": "pricing",
  "files": [
    {
      "path": "packages/elements-lit/src/blocks/pricing-01/pricing-01.ts",
      "content": "import { LitElement, css, html } from 'lit'\nimport { ArrowRight, Check, ChevronDown, ChevronUp, ShieldCheck, Users, Zap } from 'lucide'\nimport { cn } from '../../lib/utils'\nimport { tailwind } from '../../lib/styles'\nimport { ThemeController } from '../../lib/theme'\nimport { icon } from '../../lib/icon'\n// Side-effect imports: register the composed elements for standalone use\n// (consumers who install only this block still get working primitives).\nimport '../../components/badge/badge'\nimport '../../components/button/button'\nimport '../../components/card/card'\nimport '../../components/separator/separator'\nimport '../../components/slider/slider'\nimport '../../components/switch/switch'\nimport '../../components/toggle-group/toggle-group'\nimport type { UipToggleGroup } from '../../components/toggle-group/toggle-group'\n\ntype BillingCycle = 'monthly' | 'yearly'\ntype Currency = 'USD' | 'EUR' | 'GBP'\n\nconst currencySymbols: Record<Currency, string> = {\n  USD: '$',\n  EUR: '€',\n  GBP: '£',\n}\n\nconst currencyRates: Record<Currency, number> = {\n  USD: 1.0,\n  EUR: 0.92,\n  GBP: 0.79,\n}\n\nconst comparisonMatrix = [\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// Rendered class strings of the registry Table primitives verbatim\n// (packages/registry-react/components/table/table.tsx), composed with cn()\n// exactly like the React block does.\nconst rowBase = 'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors duration-150'\nconst headBase =\n  \"text-foreground h-10 px-3 text-left align-middle text-sm font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\"\nconst cellBase =\n  \"px-3 py-2 align-middle text-sm whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\"\n\n/**\n * <uip-pricing-01> — the registry Pricing01 block as a web component.\n *\n * Class strings are React's Pricing01 verbatim. React state (useState) becomes\n * @state fields; the billing/currency switchers become <uip-toggle-group>\n * (value + value-change, with React's `v && set` guard), the seat simulator\n * becomes <uip-slider> (value + value-change), the add-ons become\n * <uip-switch> (.checked + checked-change), and the comparison matrix is a\n * native table carrying the registry Table's rendered classes verbatim.\n */\nexport class UipPricing01 extends LitElement {\n  static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n  // :host display can't be a utility class (the host has no template of its own).\n  static styles = [tailwind, css`:host { display: block; }`]\n\n  static properties = {\n    billingCycle: { state: true },\n    currency: { state: true },\n    teamSeats: { state: true },\n    addDedicatedSla: { state: true },\n    addAuditVault: { state: true },\n    showComparisonTable: { state: true },\n  }\n\n  private billingCycle: BillingCycle = 'yearly'\n  private currency: Currency = 'USD'\n  private teamSeats: number[] = [12]\n  private addDedicatedSla = false\n  private addAuditVault = false\n  private showComparisonTable = false\n\n  constructor() {\n    super()\n    new ThemeController(this)\n  }\n\n  connectedCallback() {\n    super.connectedCallback()\n    this.setAttribute('data-uipkge', '')\n    this.setAttribute('data-slot', 'pricing-01')\n  }\n\n  // React guards onValueChange with `v && setBillingCycle(v)`: clicking the\n  // pressed item must keep the old value. The group clears itself internally\n  // first, so push the kept value back to stay in sync.\n  private onSingleToggle(id: string, value: string | string[], apply: (v: string) => void) {\n    if (typeof value === 'string' && value) {\n      apply(value)\n      return\n    }\n    const el = this.renderRoot.querySelector(id) as UipToggleGroup | null\n    if (el) el.value = (el.value || value) as string\n    this.requestUpdate()\n  }\n\n  render() {\n    const rates = currencyRates[this.currency]\n    const sym = currencySymbols[this.currency]\n\n    const starterBase = this.billingCycle === 'yearly' ? 12 : 15\n    const teamBase = this.billingCycle === 'yearly' ? 28 : 35\n    const enterpriseBase = this.billingCycle === 'yearly' ? 68 : 85\n\n    const slaCost = this.addDedicatedSla ? 99 : 0\n    const vaultCost = this.addAuditVault ? 49 : 0\n\n    const currentSeats = this.teamSeats[0] || 1\n\n    const starterMonthlyTotal = Math.round((starterBase * currentSeats + (this.addAuditVault ? 29 : 0)) * rates)\n    const teamMonthlyTotal = Math.round((teamBase * currentSeats + slaCost + vaultCost) * rates)\n\n    const annualSavingsTeam = Math.round((35 * currentSeats * 12 - 28 * currentSeats * 12) * rates)\n\n    return html`\n      <section data-slot=\"pricing-01\" class=\"bg-background w-full py-16 sm:py-24\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\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              ${icon(ShieldCheck, 'shield-check', '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\n              plans anytime.\n            </p>\n\n            <div class=\"mt-8 flex flex-wrap items-center justify-center gap-4 pt-2\">\n              <div class=\"border-border bg-card inline-flex rounded-lg border p-1 shadow-2xs\">\n                <uip-toggle-group\n                  id=\"billing-toggle\"\n                  type=\"single\"\n                  .value=${this.billingCycle}\n                  @value-change=${(e: CustomEvent<{ value: string | string[] }>) => {\n                    this.onSingleToggle('#billing-toggle', e.detail.value, (v) => {\n                      this.billingCycle = v as BillingCycle\n                    })\n                  }}\n                >\n                  <uip-toggle-group-item value=\"monthly\" class=\"px-3.5 py-1.5 text-xs font-medium\">\n                    Monthly\n                  </uip-toggle-group-item>\n                  <uip-toggle-group-item value=\"yearly\" class=\"flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium\">\n                    <span>Annual</span>\n                    <uip-badge variant=\"secondary\" class=\"bg-primary/10 text-primary border-primary/20 px-1.5 py-0 text-xs\">\n                      Save 20%\n                    </uip-badge>\n                  </uip-toggle-group-item>\n                </uip-toggle-group>\n              </div>\n\n              <div class=\"border-border bg-card inline-flex rounded-lg border p-1 shadow-2xs\">\n                <uip-toggle-group\n                  id=\"currency-toggle\"\n                  type=\"single\"\n                  .value=${this.currency}\n                  @value-change=${(e: CustomEvent<{ value: string | string[] }>) => {\n                    this.onSingleToggle('#currency-toggle', e.detail.value, (v) => {\n                      this.currency = v as Currency\n                    })\n                  }}\n                >\n                  <uip-toggle-group-item value=\"USD\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                    USD ($)\n                  </uip-toggle-group-item>\n                  <uip-toggle-group-item value=\"EUR\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                    EUR (€)\n                  </uip-toggle-group-item>\n                  <uip-toggle-group-item value=\"GBP\" class=\"px-2.5 py-1 font-mono text-xs font-medium\">\n                    GBP (£)\n                  </uip-toggle-group-item>\n                </uip-toggle-group>\n              </div>\n            </div>\n\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                  ${icon(Users, 'users', '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                  ${this.billingCycle === 'yearly' && annualSavingsTeam > 0\n                    ? html`<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                <uip-slider\n                  class=\"cursor-pointer\"\n                  .value=${this.teamSeats}\n                  min=\"1\"\n                  max=\"50\"\n                  step=\"1\"\n                  @value-change=${(e: CustomEvent<number[]>) => {\n                    this.teamSeats = e.detail\n                  }}\n                ></uip-slider>\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          <div class=\"mt-12 grid grid-cols-1 gap-8 lg:grid-cols-3 lg:items-stretch\">\n            <uip-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                <uip-card-header class=\"pb-4\">\n                  <div class=\"flex items-center justify-between\">\n                    <uip-badge variant=\"outline\" class=\"font-mono text-xs\">Bootstrap & Indie</uip-badge>\n                  </div>\n                  <uip-card-title class=\"text-foreground text-xl font-bold tracking-tight\">\n                    Starter Studio\n                  </uip-card-title>\n                  <uip-card-description class=\"text-muted-foreground text-xs\">\n                    For agile squads and early-stage product teams validating core workflows.\n                  </uip-card-description>\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}${Math.round(starterBase * rates)}\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                </uip-card-header>\n\n                <uip-card-content class=\"space-y-4 pt-2\">\n                  <uip-separator></uip-separator>\n                  <div class=\"space-y-2.5\">\n                    <p class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                      Included features\n                    </p>\n                    <ul class=\"text-foreground space-y-2.5 text-xs\">\n                      <li class=\"flex items-start gap-2\">\n                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                </uip-card-content>\n              </div>\n\n              <uip-card-footer class=\"border-border mt-auto border-t pt-4\">\n                <uip-button variant=\"outline\" class=\"h-10 w-full gap-1.5 text-xs font-semibold\">\n                  <span>Start Free 14-Day Trial</span>\n                  ${icon(ArrowRight, 'arrow-right', 'size-3.5')}\n                </uip-button>\n              </uip-card-footer>\n            </uip-card>\n\n            <uip-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\n                class=\"absolute -top-3.5 left-1/2 -translate-x-1/2\"\n              >\n                <uip-badge class=\"bg-primary text-primary-foreground gap-1.5 px-3 py-0.5 text-xs font-semibold shadow-sm\">\n                  ${icon(Zap, 'zap', 'size-3 fill-current')}\n                  <span>Most Popular Choice</span>\n                </uip-badge>\n              </div>\n\n              <div>\n                <uip-card-header class=\"pt-7 pb-4\">\n                  <div class=\"flex items-center justify-between\">\n                    <uip-badge variant=\"secondary\" class=\"bg-primary/10 text-primary border-primary/20 font-mono text-xs\">\n                      Scale & High-Growth\n                    </uip-badge>\n                  </div>\n                  <uip-card-title class=\"text-foreground text-2xl font-bold tracking-tight\">Team Scale</uip-card-title>\n                  <uip-card-description class=\"text-muted-foreground text-xs\">\n                    For fast-scaling engineering and product organizations requiring deep automation.\n                  </uip-card-description>\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}${Math.round(teamBase * rates)}\n                      </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                </uip-card-header>\n\n                <uip-card-content class=\"space-y-4 pt-2\">\n                  <uip-separator></uip-separator>\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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                  <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                      <label for=\"lit-sla-addon\" class=\"text-muted-foreground cursor-pointer\">\n                        24/7 Dedicated SLA (+${sym}${Math.round(99 * rates)}/mo)\n                      </label>\n                      <uip-switch\n                        id=\"lit-sla-addon\"\n                        .checked=${this.addDedicatedSla}\n                        @checked-change=${(e: CustomEvent<boolean>) => {\n                          this.addDedicatedSla = e.detail\n                        }}\n                      ></uip-switch>\n                    </div>\n                    <div class=\"flex items-center justify-between text-xs\">\n                      <label for=\"lit-vault-addon\" class=\"text-muted-foreground cursor-pointer\">\n                        SOC 2 Vault Streaming (+${sym}${Math.round(49 * rates)}/mo)\n                      </label>\n                      <uip-switch\n                        id=\"lit-vault-addon\"\n                        .checked=${this.addAuditVault}\n                        @checked-change=${(e: CustomEvent<boolean>) => {\n                          this.addAuditVault = e.detail\n                        }}\n                      ></uip-switch>\n                    </div>\n                  </div>\n                </uip-card-content>\n              </div>\n\n              <uip-card-footer class=\"border-border mt-auto border-t pt-4\">\n                <uip-button class=\"h-10 w-full gap-1.5 text-xs font-semibold shadow-sm\">\n                  <span>Deploy Team Workspace</span>\n                  ${icon(ArrowRight, 'arrow-right', 'size-3.5')}\n                </uip-button>\n              </uip-card-footer>\n            </uip-card>\n\n            <uip-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                <uip-card-header class=\"pb-4\">\n                  <div class=\"flex items-center justify-between\">\n                    <uip-badge variant=\"outline\" class=\"font-mono text-xs\">Enterprise & Security</uip-badge>\n                  </div>\n                  <uip-card-title class=\"text-foreground text-xl font-bold tracking-tight\">\n                    Enterprise Suite\n                  </uip-card-title>\n                  <uip-card-description class=\"text-muted-foreground text-xs\">\n                    Dedicated infrastructure, custom security controls, and bespoke compliance SLAs.\n                  </uip-card-description>\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}${Math.round(enterpriseBase * rates)}\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                </uip-card-header>\n\n                <uip-card-content class=\"space-y-4 pt-2\">\n                  <uip-separator></uip-separator>\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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                        ${icon(Check, 'check', '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                </uip-card-content>\n              </div>\n\n              <uip-card-footer class=\"border-border mt-auto border-t pt-4\">\n                <uip-button variant=\"outline\" class=\"h-10 w-full gap-1.5 text-xs font-semibold\">\n                  ${icon(ShieldCheck, 'shield-check', 'text-primary size-3.5')}\n                  <span>Contact Solutions Team</span>\n                </uip-button>\n              </uip-card-footer>\n            </uip-card>\n          </div>\n\n          <div class=\"mt-12 text-center\">\n            <uip-button\n              variant=\"ghost\"\n              size=\"sm\"\n              class=\"text-foreground hover:bg-muted gap-2 text-xs font-semibold\"\n              @click=${() => {\n                this.showComparisonTable = !this.showComparisonTable\n              }}\n            >\n              <span>\n                ${this.showComparisonTable ? 'Hide Detailed Feature Comparison' : 'Compare All Features & Enterprise Limits'}\n              </span>\n              ${this.showComparisonTable\n                ? icon(ChevronUp, 'chevron-up', 'size-4')\n                : icon(ChevronDown, 'chevron-down', 'size-4')}\n            </uip-button>\n          </div>\n\n          ${this.showComparisonTable\n            ? html`\n                <div class=\"border-border bg-card mt-8 overflow-hidden rounded-xl border shadow-xs\">\n                  <div class=\"border-border bg-muted/20 flex flex-wrap items-center justify-between gap-4 border-b p-4 sm:p-6\">\n                    <div>\n                      <h3 class=\"text-foreground text-base font-bold\">Detailed Specification & Limits</h3>\n                      <p class=\"text-muted-foreground text-xs\">\n                        Comprehensive side-by-side breakdown across every tier.\n                      </p>\n                    </div>\n                    <uip-badge variant=\"outline\" class=\"font-mono text-xs\">\n                      All plans include SSL & automated backups\n                    </uip-badge>\n                  </div>\n\n                  <div class=\"overflow-x-auto\">\n                    <div data-uipkge=\"\" data-slot=\"table-container\" class=\"relative w-full overflow-auto\">\n                      <table data-uipkge=\"\" data-slot=\"table\" class=\"w-full caption-bottom text-sm\">\n                        <thead data-uipkge=\"\" data-slot=\"table-header\" class=\"bg-muted/50 [&_tr]:border-b\">\n                          <tr data-uipkge=\"\" data-slot=\"table-row\" class=${cn(rowBase, 'bg-muted/40')}>\n                            <th\n                              data-uipkge=\"\"\n                              data-slot=\"table-head\"\n                              class=${cn(headBase, 'text-foreground w-[34%] text-xs font-semibold')}\n                            >\n                              Capabilities\n                            </th>\n                            <th\n                              data-uipkge=\"\"\n                              data-slot=\"table-head\"\n                              class=${cn(headBase, 'text-foreground w-[22%] text-xs font-semibold')}\n                            >\n                              Starter Studio\n                            </th>\n                            <th\n                              data-uipkge=\"\"\n                              data-slot=\"table-head\"\n                              class=${cn(headBase, 'text-primary w-[22%] text-xs font-bold font-semibold')}\n                            >\n                              Team Scale\n                            </th>\n                            <th\n                              data-uipkge=\"\"\n                              data-slot=\"table-head\"\n                              class=${cn(headBase, 'text-foreground w-[22%] text-xs font-semibold')}\n                            >\n                              Enterprise Suite\n                            </th>\n                          </tr>\n                        </thead>\n                        <tbody data-uipkge=\"\" data-slot=\"table-body\" class=\"[&_tr:last-child]:border-0\">\n                          ${comparisonMatrix.map(\n                            (group) => html`\n                              <tr\n                                data-uipkge=\"\"\n                                data-slot=\"table-row\"\n                                class=${cn(rowBase, 'bg-muted/60 text-muted-foreground text-xs font-semibold')}\n                              >\n                                <td\n                                  data-uipkge=\"\"\n                                  data-slot=\"table-cell\"\n                                  colSpan=\"4\"\n                                  class=${cn(cellBase, 'py-2.5 font-mono text-xs tracking-wider uppercase')}\n                                >\n                                  ${group.category}\n                                </td>\n                              </tr>\n                              ${group.features.map(\n                                (feat) => html`\n                                  <tr data-uipkge=\"\" data-slot=\"table-row\" class=${cn(rowBase, 'text-xs')}>\n                                    <td\n                                      data-uipkge=\"\"\n                                      data-slot=\"table-cell\"\n                                      class=${cn(cellBase, 'text-foreground py-3 font-medium')}\n                                    >\n                                      ${feat.name}\n                                    </td>\n                                    <td\n                                      data-uipkge=\"\"\n                                      data-slot=\"table-cell\"\n                                      class=${cn(cellBase, 'text-muted-foreground py-3')}\n                                    >\n                                      ${feat.starter}\n                                    </td>\n                                    <td\n                                      data-uipkge=\"\"\n                                      data-slot=\"table-cell\"\n                                      class=${cn(cellBase, 'text-foreground bg-primary/5 py-3 font-medium')}\n                                    >\n                                      ${feat.team}\n                                    </td>\n                                    <td\n                                      data-uipkge=\"\"\n                                      data-slot=\"table-cell\"\n                                      class=${cn(cellBase, 'text-foreground py-3')}\n                                    >\n                                      ${feat.enterprise}\n                                    </td>\n                                  </tr>\n                                `,\n                              )}\n                            `,\n                          )}\n                        </tbody>\n                      </table>\n                    </div>\n                  </div>\n                </div>\n              `\n            : ''}\n        </div>\n      </section>\n    `\n  }\n}\n\ncustomElements.get('uip-pricing-01') || customElements.define('uip-pricing-01', UipPricing01)\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'uip-pricing-01': UipPricing01\n  }\n}\n",
      "type": "registry:file",
      "target": "src/uip/blocks/pricing-01/pricing-01.ts"
    }
  ],
  "dependencies": [
    "lit",
    "lucide"
  ],
  "registryDependencies": [
    "https://uipkge.dev/r/lit/badge.json",
    "https://uipkge.dev/r/lit/button.json",
    "https://uipkge.dev/r/lit/card.json",
    "https://uipkge.dev/r/lit/lit-core.json",
    "https://uipkge.dev/r/lit/separator.json",
    "https://uipkge.dev/r/lit/slider.json",
    "https://uipkge.dev/r/lit/switch.json",
    "https://uipkge.dev/r/lit/toggle-group.json"
  ]
}
