{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "how-it-works-before-after",
  "title": "How It Works — Before & After",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/how-it-works-before-after/how-it-works-before-after.component.ts",
      "content": "// Two-column process contrast setting the old workflow against the new one step for\n// step, with matched row heights so the saving at each stage reads at a glance.\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\nexport interface BeforeAfterComparisonRow {\n  stage: string\n  before: string\n  after: string\n  saving: string\n}\n\n// Rows are paired, not two independent lists — the saving only reads when the\n// old and new step for the same stage sit on one line.\nconst rows: BeforeAfterComparisonRow[] = [\n  {\n    stage: 'Collect',\n    before: 'Analyst exports four CSVs from three systems and reconciles them by hand.',\n    after: 'Metrics resolve against the warehouse at query time. Nothing is exported.',\n    saving: '~6 h per close',\n  },\n  {\n    stage: 'Define',\n    before: 'Each team keeps its own revenue formula in a spreadsheet nobody reviews.',\n    after: 'One certified definition, versioned, with an owner and a review step.',\n    saving: '11 → 1 definition',\n  },\n  {\n    stage: 'Publish',\n    before: 'Dashboards are rebuilt by hand and drift from the deck within a week.',\n    after: 'Publishing a definition updates every consumer at once, revertible.',\n    saving: 'No rebuild',\n  },\n  {\n    stage: 'Audit',\n    before: 'Restatements are reconstructed from email threads at year end.',\n    after: 'The change history is the audit trail; the pack exports from it.',\n    saving: '~3 days saved',\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-how-it-works-before-after, [ui-how-it-works-before-after]',\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=\"how-it-works-before-after\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-6xl px-6 py-20 lg:py-28\">\n        <div class=\"max-w-2xl\">\n          <span ui-badge variant=\"secondary\">Before and after</span>\n          <h2 class=\"mt-4 text-3xl font-semibold tracking-tight sm:text-4xl\">The same four stages, minus the relay</h2>\n          <p class=\"text-muted-foreground mt-3 text-lg\">\n            Nothing here is new work. It is the existing close, with the manual steps removed.\n          </p>\n        </div>\n\n        <div class=\"mt-12 space-y-4\">\n          @for (row of allRows; track row.stage) {\n            <div>\n              <div class=\"flex items-baseline gap-3\">\n                <span class=\"text-muted-foreground font-mono text-xs tracking-[0.14em] uppercase\">{{ row.stage }}</span>\n                <ui-separator class=\"flex-1\" />\n                <span class=\"text-muted-foreground shrink-0 font-mono text-xs\">{{ row.saving }}</span>\n              </div>\n\n              <!-- items-stretch so both cards in a row share a height and the\n                   comparison stays line-for-line. -->\n              <div class=\"mt-3 grid items-stretch gap-3 md:grid-cols-[1fr_auto_1fr]\">\n                <div ui-card class=\"bg-muted/30\">\n                  <div ui-card-content class=\"flex h-full items-start gap-3 p-4\">\n                    <lucide-icon [img]=\"X\" class=\"text-destructive mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n                    <p class=\"text-muted-foreground text-sm leading-relaxed\">{{ row.before }}</p>\n                  </div>\n                </div>\n\n                <div class=\"hidden items-center justify-center md:flex\">\n                  <lucide-icon [img]=\"ArrowRight\" class=\"text-muted-foreground/50 size-4\" aria-hidden=\"true\" />\n                </div>\n\n                <div ui-card>\n                  <div ui-card-content class=\"flex h-full items-start gap-3 p-4\">\n                    <lucide-icon [img]=\"Check\" class=\"text-success mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n                    <p class=\"text-sm leading-relaxed\">{{ row.after }}</p>\n                  </div>\n                </div>\n              </div>\n            </div>\n          }\n        </div>\n\n        <div class=\"border-border mt-10 flex flex-wrap items-center justify-between gap-4 border-t pt-6\">\n          <p class=\"text-muted-foreground text-sm\">\n            Measured against Northwind's own close, the quarter before rollout.\n          </p>\n          <button ui-button>\n            See the rollout plan\n            <lucide-icon [img]=\"ArrowRight\" class=\"ml-2 size-4\" aria-hidden=\"true\" />\n          </button>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiHowItWorksBeforeAfterComponent {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Check = Check\n  protected readonly X = X\n\n  protected readonly allRows = rows\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/how-it-works-before-after/how-it-works-before-after.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/how-it-works-before-after/index.ts",
      "content": "export { UiHowItWorksBeforeAfterComponent, type BeforeAfterComparisonRow } from './how-it-works-before-after.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/how-it-works-before-after/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": "Two-column process contrast setting the old workflow against the new one step for step, with matched row heights so the saving at each stage reads at a glance.",
  "categories": [
    "marketing"
  ]
}