{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "header-mega-menu",
  "title": "Header — Mega Menu",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/header-mega-menu/header-mega-menu.component.ts",
      "content": "// Navbar whose product and resources items open a full-width mega panel of grouped,\n// described links plus a highlighted feature card — keyboard navigable, closing on\n// Escape. Port of the Vue/React block 1:1: panel columns derive from the `menus`\n// array, so a new group needs no extra markup.\nimport { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core'\nimport {\n  ArrowRight,\n  BarChart3,\n  BookOpen,\n  Boxes,\n  Layers,\n  LifeBuoy,\n  Lock,\n  LucideAngularModule,\n  Menu,\n  Workflow,\n  type LucideIconData,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiNavigationMenuComponent,\n  UiNavigationMenuContentComponent,\n  UiNavigationMenuItemComponent,\n  UiNavigationMenuListComponent,\n  UiNavigationMenuTriggerComponent,\n  navigationMenuTriggerStyle,\n} from '@/ui/navigation-menu/navigation-menu.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\nimport {\n  UiSheetCloseComponent,\n  UiSheetComponent,\n  UiSheetContentComponent,\n  UiSheetHeaderComponent,\n  UiSheetTitleComponent,\n} from '@/ui/sheet/sheet.component'\n\nexport interface MegaMenuLink {\n  icon: LucideIconData\n  title: string\n  body: string\n}\n\nexport interface MegaMenuGroup {\n  heading: string\n  items: MegaMenuLink[]\n}\n\nexport interface MegaMenuHighlight {\n  title: string\n  body: string\n  cta: string\n}\n\nexport interface MegaMenu {\n  label: string\n  groups: MegaMenuGroup[]\n  highlight: MegaMenuHighlight\n}\n\nexport interface MegaMenuPlainLink {\n  label: string\n  href: string\n}\n\nconst menus: MegaMenu[] = [\n  {\n    label: 'Product',\n    groups: [\n      {\n        heading: 'Core',\n        items: [\n          { icon: Boxes, title: 'Metric layer', body: 'Versioned definitions your whole org shares.' },\n          { icon: BarChart3, title: 'Dashboards', body: 'Composed from certified metrics, not raw SQL.' },\n          { icon: Workflow, title: 'Pipelines', body: 'Scheduled materialisation with cost ceilings.' },\n        ],\n      },\n      {\n        heading: 'Governance',\n        items: [\n          { icon: Lock, title: 'Row-level access', body: 'Scope evaluated per query, per identity.' },\n          { icon: BookOpen, title: 'Change history', body: 'Every definition edit reviewed and revertible.' },\n          { icon: LifeBuoy, title: 'Audit exports', body: 'Generated from the same history, not by hand.' },\n        ],\n      },\n    ],\n    highlight: {\n      title: 'Ship your first dashboard today',\n      body: 'Connect a warehouse, publish one certified metric, and invite the team. No migration required.',\n      cta: 'Start the walkthrough',\n    },\n  },\n  {\n    label: 'Resources',\n    groups: [\n      {\n        heading: 'Learn',\n        items: [\n          { icon: BookOpen, title: 'Documentation', body: 'Setup, modelling, and the access model.' },\n          { icon: Layers, title: 'Guides', body: 'Reconciliation and first-close checklists.' },\n          { icon: BarChart3, title: 'Benchmarks', body: 'Close speed across 240 finance teams.' },\n        ],\n      },\n      {\n        heading: 'Support',\n        items: [\n          { icon: LifeBuoy, title: 'Help centre', body: 'Answers to the questions support gets most.' },\n          { icon: Workflow, title: 'Status', body: 'Live uptime and incident history.' },\n          { icon: Lock, title: 'Trust centre', body: 'SOC 2, subprocessors, and data residency.' },\n        ],\n      },\n    ],\n    highlight: {\n      title: 'Read the rollout plan',\n      body: 'The five-week implementation we run for every customer, written down so you can run it yourself.',\n      cta: 'Open the plan',\n    },\n  },\n]\n\nconst plainLinks: MegaMenuPlainLink[] = [\n  { label: 'Pricing', href: '#pricing' },\n  { label: 'Customers', href: '#customers' },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-header-mega-menu, [ui-header-mega-menu]',\n  standalone: true,\n  // The block renders its own <header>: keep this wrapper out of the layout.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiButtonComponent,\n    UiNavigationMenuComponent,\n    UiNavigationMenuContentComponent,\n    UiNavigationMenuItemComponent,\n    UiNavigationMenuListComponent,\n    UiNavigationMenuTriggerComponent,\n    UiSeparatorComponent,\n    UiSheetCloseComponent,\n    UiSheetComponent,\n    UiSheetContentComponent,\n    UiSheetHeaderComponent,\n    UiSheetTitleComponent,\n  ],\n  template: `\n    <header data-slot=\"header-mega-menu\" [class]=\"rootClass\">\n      <div class=\"mx-auto flex h-16 max-w-6xl items-center gap-6 px-6\">\n        <a href=\"#top\" class=\"flex shrink-0 items-center gap-2 font-semibold tracking-tight\">\n          <lucide-icon [img]=\"Layers\" class=\"text-primary size-5\" />\n          Northwind\n        </a>\n\n        <nav ui-navigation-menu class=\"hidden lg:flex\">\n          <ui-navigation-menu-list>\n            @for (menu of megaMenus; track menu.label) {\n              <li ui-navigation-menu-item [value]=\"menu.label\">\n                <button ui-navigation-menu-trigger>{{ menu.label }}</button>\n                <ui-navigation-menu-content>\n                  <div class=\"grid w-[46rem] grid-cols-[1fr_1fr_16rem] gap-6 p-6\">\n                    @for (group of menu.groups; track group.heading) {\n                      <div>\n                        <p class=\"text-muted-foreground font-mono text-xs tracking-[0.14em] uppercase\">\n                          {{ group.heading }}\n                        </p>\n                        <ul class=\"mt-3 space-y-1\">\n                          @for (item of group.items; track item.title) {\n                            <li>\n                              <a\n                                href=\"#\"\n                                class=\"hover:bg-muted focus-visible:ring-ring flex gap-3 rounded-md p-2 transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n                              >\n                                <lucide-icon [img]=\"item.icon\" class=\"text-muted-foreground mt-0.5 size-4 shrink-0\" />\n                                <span class=\"min-w-0\">\n                                  <span class=\"block text-sm font-medium\">{{ item.title }}</span>\n                                  <span class=\"text-muted-foreground block text-xs leading-snug\">{{ item.body }}</span>\n                                </span>\n                              </a>\n                            </li>\n                          }\n                        </ul>\n                      </div>\n                    }\n\n                    <!-- Highlight rail: one promoted destination per panel, on the\n                         muted surface so it reads as an aside, not a sixth link. -->\n                    <div class=\"bg-muted/50 flex flex-col rounded-lg p-4\">\n                      <p class=\"text-sm font-semibold\">{{ menu.highlight.title }}</p>\n                      <p class=\"text-muted-foreground mt-2 text-xs leading-relaxed\">{{ menu.highlight.body }}</p>\n                      <button ui-button variant=\"link\" class=\"mt-auto h-auto justify-start p-0 pt-4 text-xs\">\n                        {{ menu.highlight.cta }}\n                        <lucide-icon [img]=\"ArrowRight\" class=\"ml-1 size-3\" />\n                      </button>\n                    </div>\n                  </div>\n                </ui-navigation-menu-content>\n              </li>\n            }\n\n            @for (link of plain; track link.href) {\n              <li ui-navigation-menu-item [value]=\"link.label\">\n                <a [href]=\"link.href\" [class]=\"plainLinkClass\">{{ link.label }}</a>\n              </li>\n            }\n          </ui-navigation-menu-list>\n        </nav>\n\n        <div class=\"ml-auto flex items-center gap-2\">\n          <button ui-button variant=\"ghost\" size=\"sm\" class=\"hidden sm:inline-flex\">Sign in</button>\n          <div ui-separator orientation=\"vertical\" class=\"hidden h-5 sm:block\"></div>\n          <button ui-button size=\"sm\">Book a demo</button>\n        </div>\n\n        <div ui-sheet [open]=\"mobileOpen()\" (openChange)=\"mobileOpen.set($event)\">\n          <button\n            ui-button\n            variant=\"ghost\"\n            size=\"icon\"\n            class=\"ml-auto lg:hidden\"\n            aria-label=\"Open navigation menu\"\n            (click)=\"mobileOpen.set(true)\"\n          >\n            <lucide-icon [img]=\"Menu\" class=\"size-5\" />\n          </button>\n          <div ui-sheet-content side=\"right\" class=\"w-72 overflow-y-auto\">\n            <div ui-sheet-header>\n              <h2 ui-sheet-title>Menu</h2>\n            </div>\n            <nav class=\"mt-6 grid gap-5\" aria-label=\"Mobile\">\n              @for (menu of megaMenus; track menu.label) {\n                <div>\n                  <p class=\"text-muted-foreground/70 text-xs font-medium tracking-wide uppercase\">{{ menu.label }}</p>\n                  <ul class=\"mt-2 grid gap-1\">\n                    @for (group of menu.groups; track group.heading) {\n                      @for (item of group.items; track item.title) {\n                        <li>\n                          <a\n                            href=\"#\"\n                            class=\"hover:bg-muted block rounded-md px-3 py-2 text-sm font-medium transition-colors\"\n                            (click)=\"mobileOpen.set(false)\"\n                          >\n                            {{ item.title }}\n                          </a>\n                        </li>\n                      }\n                    }\n                  </ul>\n                </div>\n              }\n              <div ui-separator></div>\n              @for (link of plain; track link.href) {\n                <a\n                  [href]=\"link.href\"\n                  class=\"hover:bg-muted rounded-md px-3 py-2 text-sm font-medium transition-colors\"\n                  (click)=\"mobileOpen.set(false)\"\n                >\n                  {{ link.label }}\n                </a>\n              }\n              <div ui-separator></div>\n              <div class=\"grid gap-2\">\n                <button ui-button variant=\"outline\">Sign in</button>\n                <button ui-button>Book a demo</button>\n              </div>\n            </nav>\n          </div>\n        </div>\n      </div>\n    </header>\n  `,\n})\nexport class UiHeaderMegaMenuComponent {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Layers = Layers\n  protected readonly Menu = Menu\n\n  protected readonly megaMenus = menus\n  protected readonly plain = plainLinks\n  protected readonly plainLinkClass = navigationMenuTriggerStyle()\n\n  @Input('class') className?: string\n\n  readonly mobileOpen = signal(false)\n\n  get rootClass(): string {\n    return cn('border-border bg-background/90 border-b backdrop-blur', this.className)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/header-mega-menu/header-mega-menu.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/header-mega-menu/index.ts",
      "content": "export {\n  UiHeaderMegaMenuComponent,\n  type MegaMenu,\n  type MegaMenuGroup,\n  type MegaMenuHighlight,\n  type MegaMenuLink,\n  type MegaMenuPlainLink,\n} from './header-mega-menu.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/header-mega-menu/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/navigation-menu.json",
    "https://uipkge.dev/r/angular/separator.json",
    "https://uipkge.dev/r/angular/sheet.json"
  ],
  "description": "Navbar whose product and resources items open a full-width mega panel of grouped, described links plus a highlighted feature card, keyboard navigable and closing on Escape.",
  "categories": [
    "marketing"
  ],
  "deprecated": true,
  "replacedBy": "header"
}