{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "pricing-single-plan",
  "title": "Pricing — Single Plan",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/pricing-single-plan/pricing-single-plan.component.ts",
      "content": "// One-plan pricing section stating the price, what is included, what is explicitly\n// not, and the usage line at which a conversation becomes worthwhile.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core'\nimport { ArrowRight, Check, LucideAngularModule, X } 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 { UiSeparatorComponent } from '@/ui/separator/separator.component'\n\nconst included = [\n  'Unlimited certified metric definitions',\n  'Unlimited viewers and editors',\n  'Row-level access from your identity provider',\n  'Query budgets enforced per team',\n  'Audit log export, 7-year retention',\n  'SOC 2 report under NDA',\n]\n\n// Naming exclusions is what makes a single plan credible. A list of only\n// inclusions invites the reader to assume the gap is hidden somewhere.\nconst excluded = [\n  'On-premise deployment behind your firewall',\n  'Custom SLAs below 99.9%',\n  'Professional services beyond the five-week rollout',\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-pricing-single-plan, [ui-pricing-single-plan]',\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    UiSeparatorComponent,\n  ],\n  template: `\n    <section data-slot=\"pricing-single-plan\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-3xl px-6 py-20 lg:py-28\">\n        <div class=\"text-center\">\n          <span ui-badge variant=\"secondary\">Pricing</span>\n          <h2 class=\"mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl\">One plan, one number</h2>\n          <p class=\"text-muted-foreground mt-3 text-lg\">\n            No seat maths and no feature gates. The only thing that scales is query volume.\n          </p>\n        </div>\n\n        <div ui-card class=\"mt-10\">\n          <div ui-card-content class=\"p-8\">\n            <div class=\"flex flex-wrap items-baseline gap-3\">\n              <span class=\"font-display text-4xl font-bold tracking-tight\">£1,400</span>\n              <span class=\"text-muted-foreground\">per month, billed annually</span>\n            </div>\n            <p class=\"text-muted-foreground mt-2 text-sm\">\n              Includes 2 million queries a month. Beyond that it is £0.0004 per query, capped by your own budgets.\n            </p>\n\n            <button ui-button size=\"lg\" class=\"mt-6 w-full sm:w-auto\">\n              Start the 30-day trial\n              <lucide-icon [img]=\"ArrowRight\" class=\"ml-2 size-4\" aria-hidden=\"true\" />\n            </button>\n\n            <ui-separator class=\"my-8\" />\n\n            <p class=\"text-muted-foreground font-mono text-xs tracking-[0.14em] uppercase\">Included</p>\n            <ul class=\"mt-3 grid gap-2.5 sm:grid-cols-2\">\n              @for (item of included; track item) {\n                <li class=\"flex items-start gap-2.5 text-sm\">\n                  <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n                  <span>{{ item }}</span>\n                </li>\n              }\n            </ul>\n\n            <ui-separator class=\"my-6\" />\n\n            <p class=\"text-muted-foreground font-mono text-xs tracking-[0.14em] uppercase\">Not included</p>\n            <ul class=\"mt-3 space-y-2.5\">\n              @for (item of excluded; track item) {\n                <li class=\"flex items-start gap-2.5 text-sm\">\n                  <lucide-icon [img]=\"X\" class=\"text-muted-foreground/50 mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n                  <span class=\"text-muted-foreground\">{{ item }}</span>\n                </li>\n              }\n            </ul>\n\n            <ui-separator class=\"my-6\" />\n\n            <p class=\"text-muted-foreground text-sm leading-relaxed\">\n              Past roughly 20 million queries a month, or if any of the exclusions above are hard requirements, a\n              conversation will get you a better answer than this page can.\n            </p>\n            <button ui-button variant=\"outline\" class=\"mt-4\">Talk to us instead</button>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiPricingSinglePlanComponent {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Check = Check\n  protected readonly X = X\n\n  readonly included = included\n  readonly excluded = excluded\n\n  @Input('class') className?: string\n\n  get rootClass(): string {\n    return cn('bg-background', this.className)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/pricing-single-plan/pricing-single-plan.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/pricing-single-plan/index.ts",
      "content": "export { UiPricingSinglePlanComponent } from './pricing-single-plan.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/pricing-single-plan/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"
  ],
  "description": "One-plan pricing section stating the price, what is included, what is explicitly not, and the usage line at which a conversation becomes worthwhile.",
  "categories": [
    "marketing"
  ],
  "deprecated": true,
  "replacedBy": "pricing"
}