[
  {
    "name": "a11y-keyboard",
    "tier": "free",
    "category": "component",
    "description": "Collect focusable menu items inside a menu container.",
    "usage": "npx base-ui-cli add a11y-keyboard",
    "keywords": [
      "a11y-keyboard",
      "a11y",
      "keyboard"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "3f9a2bb644d481eb141bd706cb4a01223415db77ace02ad3c115da2968b25941"
  },
  {
    "name": "accordion",
    "tier": "free",
    "category": "component",
    "description": "A container component for accordion items.",
    "usage": "<base-accordion [multi]=\"false\">",
    "keywords": [
      "accordion",
      "collapse",
      "disclosure"
    ],
    "dependencies": [
      "rxjs"
    ],
    "registryDependencies": [
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "b1b5dc1331036ed9ee6c460ecdb1bdd63b8db87b99cdd2710f8700fe1a8919e4"
  },
  {
    "name": "alert",
    "tier": "free",
    "category": "component",
    "description": "A highly configurable alert component for displaying important messages.",
    "usage": "<base-alert color=\"danger\" variant=\"soft\" [close]=\"true\" (closed)=\"onClose()\">",
    "keywords": [
      "alert"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "52998d18540936a136c8d98bc12efc335e7307489cd49fbce147cb802525f411"
  },
  {
    "name": "animated-counter",
    "tier": "free",
    "category": "component",
    "description": "Free tier. Animates a number from a start value to the target the first time the host element enters the viewport (IntersectionObserver, threshold 0.2).",
    "usage": "<base-animated-counter [value]=\"48295\" prefix=\"$\" separator=\",\"></base-animated-counter>",
    "keywords": [
      "animated-counter",
      "animated",
      "counter"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "67c77467bb200d76d066558cbb59dbd399e9dd166f70b31e022d84239d134521"
  },
  {
    "name": "animations",
    "tier": "free",
    "category": "component",
    "description": "Slide-down fade-in animation for dropdown menus and overlays.",
    "usage": "<div [@dropdown]>",
    "keywords": [
      "animations"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "73e462d423b0adc6707d01258d7d3b2469bf17b5ab5f7babc1b87016f503f4e9"
  },
  {
    "name": "article-card-editorial",
    "tier": "pro",
    "category": "block",
    "description": "Editorial-style article card with fully hard-coded demo content, composed from `base-card`/`base-card-body`.",
    "usage": "<base-article-card-editorial></base-article-card-editorial>",
    "keywords": [
      "article-card-editorial",
      "block",
      "article",
      "card",
      "editorial"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon",
      "quote"
    ],
    "type": "components:ui",
    "digest": "c677a5d0926dc212668af5c916f62366d850d8c25312482594685524f191a22e"
  },
  {
    "name": "article-card-full-reader",
    "tier": "pro",
    "category": "block",
    "description": "Full article reading experience rendered inside a `base-card`: byline header with prev/more icon buttons, centered title, view/comment/share stats, hero image with caption, numbered content sections (one with a side-by-side image layout), an avatar-left `base-quote` block, an aut…",
    "usage": "<base-article-card-full-reader></base-article-card-full-reader>",
    "keywords": [
      "article-card-full-reader",
      "block",
      "article",
      "card",
      "full",
      "reader"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon",
      "input-group",
      "quote"
    ],
    "type": "components:ui",
    "digest": "d1622b4a61f461e5ac8c74b3fa46f54c255e66200b6af5fb741e22de45f6da07"
  },
  {
    "name": "article-card-hero-gallery",
    "tier": "pro",
    "category": "block",
    "description": "Static, pre-composed article card (pro tier) with a full-width hero image section and a mini image gallery.",
    "usage": "<base-article-card-hero-gallery></base-article-card-hero-gallery>",
    "keywords": [
      "article-card-hero-gallery",
      "block",
      "article",
      "card",
      "hero",
      "gallery"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "button",
      "card",
      "icon",
      "quote"
    ],
    "type": "components:ui",
    "digest": "7afaadae2da9e96a1c37e2116078a99c654215b55dd2630012381139165fdd6b"
  },
  {
    "name": "article-card-hero-tags",
    "tier": "pro",
    "category": "block",
    "description": "Pre-composed article/blog-post card with a full-bleed hero image header (dark overlay, back/share/more icon buttons, date, title, and view count rendered over the image).",
    "usage": "<base-article-card-hero-tags></base-article-card-hero-tags>",
    "keywords": [
      "article-card-hero-tags",
      "block",
      "article",
      "card",
      "hero",
      "tags"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "de0e709b725ff20f2e0e21094a6b970099eab45404bf0aff912894f1af05b455"
  },
  {
    "name": "aspect-ratio",
    "tier": "free",
    "category": "component",
    "description": "Box that preserves a width-to-height ratio via CSS `aspect-ratio`.",
    "usage": "<base-aspect-ratio ratio=\"16/9\">",
    "keywords": [
      "aspect-ratio",
      "aspect",
      "ratio"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "83428555023f4c837551a3fdf252b87c7340b2a86327f4245d681e2779f0118c"
  },
  {
    "name": "avatar",
    "tier": "free",
    "category": "component",
    "description": "A highly customizable avatar component for displaying user profile images or initials.",
    "usage": "<base-avatar [avatarUrl]=\"user.image\" size=\"lg\" shape=\"circle\" status=\"active\"></base-avatar>",
    "keywords": [
      "avatar"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "caf93631d3f7eab15d9b62807658b1f90997b40dcb3b6c2d5ad55d3302019c6a"
  },
  {
    "name": "avatar-group",
    "tier": "free",
    "category": "component",
    "description": "Displays a stack of overlapping circular avatars with an overflow count badge.",
    "usage": "<base-avatar-group [items]=\"users\" [max]=\"4\" size=\"md\"></base-avatar-group>",
    "keywords": [
      "avatar-group",
      "avatar",
      "group"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "ea28f51dc001f9c2769b8dc2fe184f8005419838ed526e0a1124f3467d646c49"
  },
  {
    "name": "badge",
    "tier": "free",
    "category": "component",
    "description": "A configurable badge component to display tiny statuses, counts, or tags.",
    "usage": "<base-badge color=\"danger\" size=\"sm\" shape=\"rectangular\">New</base-badge>",
    "keywords": [
      "badge"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "af908880a619281ae006b90d38f5089f023a2e8d7c3159ce33df11c7ce5682ea"
  },
  {
    "name": "base-context-menu-item",
    "tier": "free",
    "category": "component",
    "description": "Styles a button or link as a context menu item (`role=\"menuitem\"`).",
    "usage": "<button base-context-menu-item (click)=\"copy()\">Copy</button>",
    "keywords": [
      "base-context-menu-item",
      "context",
      "menu",
      "item",
      "context-menu-item"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "e47e6c8d461cde4fa6deb8615cf25165b470b701134cdce9fc632accdaf2f0df"
  },
  {
    "name": "base-dropdown-menu-item",
    "tier": "free",
    "category": "component",
    "description": "An individual item within a `base-dropdown-menu`.",
    "usage": "<button base-dropdown-menu-item (click)=\"doSomething()\">Click Me</button>",
    "keywords": [
      "base-dropdown-menu-item",
      "dropdown",
      "menu",
      "item",
      "dropdown-menu-item"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "e3a300704673dd78bdd8d5e97f6fde54c380dc80162a3145ce06ed1d5e75de41"
  },
  {
    "name": "base-group-button",
    "tier": "free",
    "category": "component",
    "description": "A standard group button directive applying Lussos theme styles.",
    "usage": "<button base-group-button color=\"primary\" size=\"lg\">Button</button>",
    "keywords": [
      "base-group-button",
      "group",
      "button",
      "group-button"
    ],
    "dependencies": [],
    "registryDependencies": [
      "types"
    ],
    "type": "components:ui",
    "digest": "559a1797bbceabc98d68ddd7795f14d8674fda17c606c3a42afacc25949f375f"
  },
  {
    "name": "base-list-item",
    "tier": "free",
    "category": "component",
    "description": "A stylistic directive that applies standardized padding, height, and hover effects for an item within a generic list view.",
    "usage": "<ul>",
    "keywords": [
      "base-list-item",
      "list",
      "item",
      "list-item"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "b3651905b1df7813322648c986fee14a84b81c09242b777aab765f8d5ed84133"
  },
  {
    "name": "base-tab-icon",
    "tier": "free",
    "category": "component",
    "description": "A structural directive that styles a `<base-icon>` projected inside a `base-tab-label`.",
    "usage": "<base-tab-label>",
    "keywords": [
      "base-tab-icon",
      "tab",
      "icon",
      "baseTabIcon"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "6fb51b1d762f988f9f6d9510c85d1c47fa4bdbd07f5a842d5f3b4e6bd2fe0600"
  },
  {
    "name": "blog-card-centered-hero",
    "tier": "pro",
    "category": "block",
    "description": "Static blog-post card with a centered hero layout, composed from `base-card`, `base-card-body`, and `base-card-footer`.",
    "usage": "<base-blog-card-centered-hero></base-blog-card-centered-hero>",
    "keywords": [
      "blog-card-centered-hero",
      "block",
      "blog",
      "card",
      "centered",
      "hero"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "8d4055a894f0853017565366c6e3669063314117b30f8c0a417ce3064856a18f"
  },
  {
    "name": "blog-card-collage",
    "tier": "pro",
    "category": "block",
    "description": "Pre-composed blog post card with a two-image collage header, a category eyebrow label (\"Feature\"), a title, and a footer showing an author avatar/name plus date and comment-count icon stats.",
    "usage": "<base-blog-card-collage></base-blog-card-collage>",
    "keywords": [
      "blog-card-collage",
      "block",
      "blog",
      "card",
      "collage"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "84f385c452acf75ee1187e58e4c1cd89966b0a4cfd0fe8694da38d924c8eb118"
  },
  {
    "name": "blog-card-compact",
    "tier": "pro",
    "category": "block",
    "description": "Compact blog-post card block (pro tier) composed from `base-card`, `base-card-body`, `base-card-footer`, `base-avatar`, and `base-icon`.",
    "usage": "<base-blog-card-compact></base-blog-card-compact>",
    "keywords": [
      "blog-card-compact",
      "block",
      "blog",
      "card",
      "compact"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "de60789c4b9ace63a8417685441cf28c541a764447b71df5f028f6992b19c7a3"
  },
  {
    "name": "blog-card-floating-panel",
    "tier": "pro",
    "category": "block",
    "description": "Preset blog-post card rendering a full-height cover image with a frosted-glass (backdrop-blur) panel floating over its bottom edge; the panel shows a category eyebrow, post title, and a footer with author avatar/name plus calendar-date and comment-count icon stats.",
    "usage": "<base-blog-card-floating-panel></base-blog-card-floating-panel>",
    "keywords": [
      "blog-card-floating-panel",
      "block",
      "blog",
      "card",
      "floating",
      "panel"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "e5eb076f5500af77eb88153c2b12ff1b0b3a5774075d5f6088a5d3ab258c58ec"
  },
  {
    "name": "blog-card-gradient-hero",
    "tier": "pro",
    "category": "block",
    "description": "Pre-composed blog hero card (pro tier) built from `base-card`, `base-card-body`, `base-card-footer`, `base-avatar`, and `base-icon`.",
    "usage": "<base-blog-card-gradient-hero></base-blog-card-gradient-hero>",
    "keywords": [
      "blog-card-gradient-hero",
      "block",
      "blog",
      "card",
      "gradient",
      "hero"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "4aacc0b334fea4cf05c969e518f2f9b44c637e6036a23f237c3f27893cd6e1a6"
  },
  {
    "name": "blog-card-horizontal-feature",
    "tier": "pro",
    "category": "block",
    "description": "Static horizontal featured blog card composed from `base-card`, `base-card-body`, `base-card-footer`, `base-avatar`, and `base-icon`.",
    "usage": "<base-blog-card-horizontal-feature></base-blog-card-horizontal-feature>",
    "keywords": [
      "blog-card-horizontal-feature",
      "block",
      "blog",
      "card",
      "horizontal",
      "feature"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "921d79cf2a5002641d2fa42dde93770674ed474ca3a771167f80fa791afc0561"
  },
  {
    "name": "blog-card-image-top",
    "tier": "pro",
    "category": "block",
    "description": "Pre-composed blog/article preview card with a top cover image, built from `base-card`, `base-card-body`, `base-card-footer`, `base-avatar`, and `base-icon`.",
    "usage": "<base-blog-card-image-top></base-blog-card-image-top>",
    "keywords": [
      "blog-card-image-top",
      "block",
      "blog",
      "card",
      "image",
      "top"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "81f44e23e52981fe4cf4bc2a6c4d37374033d3934af5b8837e40fc50e9e3553d"
  },
  {
    "name": "blog-card-inline-image",
    "tier": "pro",
    "category": "block",
    "description": "Blog post card with the article image inset between the title block and the footer (title above, full-width 180px cover image in the middle, meta footer below).",
    "usage": "<base-blog-card-inline-image></base-blog-card-inline-image>",
    "keywords": [
      "blog-card-inline-image",
      "block",
      "blog",
      "card",
      "inline",
      "image"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "3b48a2118d09e83336cbd72f36191cefa1c39d29c2ca9fc9bb3aa569044bc3a1"
  },
  {
    "name": "blog-card-mini-grid",
    "tier": "pro",
    "category": "block",
    "description": "Compact blog-list card built on `base-card`/`base-card-body`, rendering four hardcoded mini blog entries (64px square thumbnail plus bold title) in a responsive grid — single column on small screens, 2x2 on `lg`.",
    "usage": "<base-blog-card-mini-grid></base-blog-card-mini-grid>",
    "keywords": [
      "blog-card-mini-grid",
      "block",
      "blog",
      "card",
      "mini",
      "grid"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card"
    ],
    "type": "components:ui",
    "digest": "51b284a2a80f546fb0f31f80ea2aef7f27c17b8aa6e2dc6623516d1408d25c5d"
  },
  {
    "name": "blog-card-newsletter",
    "tier": "pro",
    "category": "block",
    "description": "Static newsletter signup promo card styled as an indigo gradient panel, composed from `base-card`, `base-card-body`, and `base-card-footer` with a large decorative `base-icon` (\"mail\") watermark.",
    "usage": "<base-blog-card-newsletter></base-blog-card-newsletter>",
    "keywords": [
      "blog-card-newsletter",
      "block",
      "blog",
      "card",
      "newsletter"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "61d52d36ac6a013099543d1798875fd448ccca1575896c22b2258bb6a0255d89"
  },
  {
    "name": "blog-card-overlay-featured",
    "tier": "pro",
    "category": "block",
    "description": "Featured blog card with a full-bleed background image and a left-side gradient overlay panel (dark slate to transparent) containing an eyebrow label, large title, and excerpt, plus a footer row with author avatar, name, and a publish date (date hidden below the `sm` breakpoint).",
    "usage": "<base-blog-card-overlay-featured></base-blog-card-overlay-featured>",
    "keywords": [
      "blog-card-overlay-featured",
      "block",
      "blog",
      "card",
      "overlay",
      "featured"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "4d2053d7ffd8d57506da936773c3de6eb4dd60fbd08c44adca219e7fb4232eac"
  },
  {
    "name": "blog-card-overlay-marketing",
    "tier": "pro",
    "category": "block",
    "description": "Pre-styled marketing blog card with a full-bleed cover image and a bottom-anchored text overlay on a dark gradient.",
    "usage": "<base-blog-card-overlay-marketing></base-blog-card-overlay-marketing>",
    "keywords": [
      "blog-card-overlay-marketing",
      "block",
      "blog",
      "card",
      "overlay",
      "marketing"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "82896d3eeb206834c44649fbaa2d757782919181c0ef0b119e328ef41efe07d4"
  },
  {
    "name": "blog-card-quote",
    "tier": "pro",
    "category": "block",
    "description": "Pre-styled blog quote card with fully static content: an orange-tinted `base-card` (left orange accent border, light/dark variants) containing a large serif italic pull-quote, a decorative rotated quotation-mark SVG watermark, and a footer with a `base-avatar` plus hardcoded auth…",
    "usage": "<base-blog-card-quote></base-blog-card-quote>",
    "keywords": [
      "blog-card-quote",
      "block",
      "blog",
      "card",
      "quote"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card"
    ],
    "type": "components:ui",
    "digest": "ace1ce8a17e6c3b14f6a1a32f319c9e89008bbc3811aa173817bf65df333bde9"
  },
  {
    "name": "blog-card-split-image",
    "tier": "pro",
    "category": "block",
    "description": "Pre-composed blog post card with a split two-image header: two side-by-side cover images (each 50% width) above a category label, title, and a footer with author avatar/name plus date and comment-count icon stats.",
    "usage": "<base-blog-card-split-image></base-blog-card-split-image>",
    "keywords": [
      "blog-card-split-image",
      "block",
      "blog",
      "card",
      "split",
      "image"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "ab8b7de3d2c8b5d5f33cd099c217c9cbb3a09e2c398defe2a7b1874216e1d325"
  },
  {
    "name": "blog-card-stats",
    "tier": "pro",
    "category": "block",
    "description": "Preset statistic blog card built from `base-card`, `base-card-body`, and `base-card-footer`.",
    "usage": "<base-blog-card-stats></base-blog-card-stats>",
    "keywords": [
      "blog-card-stats",
      "block",
      "blog",
      "card",
      "stats"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card"
    ],
    "type": "components:ui",
    "digest": "512052f7d312b6dffd82e57ad7cbab2d19dde42f21b02bba1c02cbebc2142b33"
  },
  {
    "name": "blog-card-video",
    "tier": "pro",
    "category": "block",
    "description": "Static video-teaser blog card built on `base-card`/`base-card-body`: a full-bleed cover image (hardcoded to `assets/images/modern_office_architecture_1776362675453.png`) under a dark overlay with a centered frosted-glass \"Play Video\" pill containing a `play-circle` icon.",
    "usage": "<base-blog-card-video></base-blog-card-video>",
    "keywords": [
      "blog-card-video",
      "block",
      "blog",
      "card",
      "video"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "7a94162dcb71dd2b3dd6eebb82e4b6942e8b49d51b956c5cb04f3ae6efa499f4"
  },
  {
    "name": "bottom-sheet",
    "tier": "free",
    "category": "component",
    "description": "Mobile-style modal panel that slides up from the bottom of the screen with a fading, blurred backdrop.",
    "usage": "<base-bottom-sheet [(open)]=\"isOpen\" height=\"half\" (closed)=\"onClosed()\">",
    "keywords": [
      "bottom-sheet",
      "bottom",
      "sheet",
      "drawer"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "animations",
      "button",
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "0e72e2ce041883c4319255b4525ed79509af371825c41ac0595b1075bd42b412"
  },
  {
    "name": "breadcrumb",
    "tier": "free",
    "category": "component",
    "description": "A container component for breadcrumb navigation.",
    "usage": "<base-breadcrumb>",
    "keywords": [
      "breadcrumb"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "125cc48d77a93626a75569a74fc91ea52063d7c4b7c36dec693601e737c8dad4"
  },
  {
    "name": "button",
    "tier": "free",
    "category": "component",
    "description": "A standard button directive applying Lussos theme styles.",
    "usage": "<button base-button color=\"primary\" size=\"lg\">Submit</button>",
    "keywords": [
      "button",
      "cta",
      "submit"
    ],
    "dependencies": [],
    "registryDependencies": [
      "types"
    ],
    "type": "components:ui",
    "digest": "785ee5e8638a160d277f5608df02eba75f23c4b73edc5ef6a7607f357599d8b2"
  },
  {
    "name": "button-group",
    "tier": "free",
    "category": "component",
    "description": "A container for grouping multiple toggle buttons.",
    "usage": "<base-button-group size=\"sm\" [(ngModel)]=\"viewMode\">",
    "keywords": [
      "button-group",
      "button",
      "group",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [
      "rxjs"
    ],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "ddbab92f8facc20cc438c4c3ca672b9e790de9be3aeb96fc210cf2fb53d9ae18"
  },
  {
    "name": "calendar",
    "tier": "free",
    "category": "component",
    "description": "A date picker calendar component that supports single date and date-range selection.",
    "usage": "<base-calendar mode=\"single\" (dateSelected)=\"onDateChange($event)\"></base-calendar>",
    "keywords": [
      "calendar",
      "datepicker",
      "date"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "6c6cea103c13c953ed8226c487d8e17df14191f53f59bb131a6f0ca196bd5fe4"
  },
  {
    "name": "card",
    "tier": "free",
    "category": "component",
    "description": "A flexible card container component used for grouping related content.",
    "usage": "<base-card [horizontal]=\"true\">",
    "keywords": [
      "card"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "640237818e0a6761e8c0ce875cc312c84fe2712d168012a52305582a45616e16"
  },
  {
    "name": "carousel",
    "tier": "free",
    "category": "component",
    "description": "A horizontally scrollable container component for presenting multiple items in a row.",
    "usage": "<base-horizontal-carousel title=\"Featured\">",
    "keywords": [
      "carousel",
      "horizontal-carousel"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "9ea9dc32458f7382aa0ab88136bd9d0be1e791ea32c6fc22c0ec7bb1b56000fe"
  },
  {
    "name": "chart",
    "tier": "pro",
    "category": "component",
    "description": "Native SVG chart for dashboards and analytics.",
    "usage": "<base-chart type=\"bar\" [data]=\"monthlyRevenue\" color=\"primary\"></base-chart>",
    "keywords": [
      "chart"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "699414b2b6f0d47d68c478a12a3c0017b5ff01f79fb60ed262c23df28d722915"
  },
  {
    "name": "chat",
    "tier": "free",
    "category": "component",
    "description": "AI chat kit: message list, streaming cursor, tool-call rows, and a prompt composer.",
    "usage": "<base-chat [messages]=\"thread\" [streaming]=\"busy\" (send)=\"ask($event)\" (stop)=\"abort()\"></base-chat>",
    "keywords": [
      "chat",
      "ai",
      "streaming",
      "llm"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "button",
      "empty-state",
      "icon",
      "spinner",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "231520121ee42ecdf090ff13ecff495d54338ca351ee20bd507da61cc3346462"
  },
  {
    "name": "checkbox",
    "tier": "free",
    "category": "component",
    "description": "A custom styled checkbox component that integrates seamlessly with Angular Forms.",
    "usage": "<base-checkbox [(ngModel)]=\"agree\" color=\"primary\">I agree to the terms</base-checkbox>",
    "keywords": [
      "checkbox",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "da873c0e66f07c9d7bd4383da5ca22eb8f4d682d3e5192847968260b291da0ce"
  },
  {
    "name": "chips",
    "tier": "free",
    "category": "component",
    "description": "Pill-shaped chip that projects its label via `ng-content`, with an optional leading `base-icon` and an optional remove button.",
    "usage": "<base-chip></base-chip>",
    "keywords": [
      "chips",
      "chip"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "dbca6aa21a93ebe079a93f1185628f9f86bcab6305dde9853de5fc242645f074"
  },
  {
    "name": "click-outside",
    "tier": "free",
    "category": "component",
    "description": "A behavior directive that emits an event whenever the user clicks outside the host element's bounds.",
    "usage": "<div (baseClickOutside)=\"closeMenu()\">Menu Content</div>",
    "keywords": [
      "click-outside",
      "click",
      "outside",
      "baseClickOutside"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "e336658d43b909da2372ba7cc2218f604298cd46fb84141a7931ff759a831126"
  },
  {
    "name": "code",
    "tier": "free",
    "category": "component",
    "description": "A component to display formatted code blocks with syntax highlighting and a copy-to-clipboard button.",
    "usage": "<base-code language=\"HTML\" [showCode]=\"true\">",
    "keywords": [
      "code"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "animations",
      "button",
      "icon",
      "safe-timer",
      "toast",
      "tooltip"
    ],
    "type": "components:ui",
    "digest": "195b1cd7b5dd15b5b0302cc1de173db331f29008593b43cb22eb15aef206bafa"
  },
  {
    "name": "color-picker",
    "tier": "free",
    "category": "component",
    "description": "Color picker rendered as a swatch trigger button that opens a `position: fixed` panel containing a native `<input type=\"color\">`, a hex text field (validated against `#RRGGBB` before committing), and a grid of preset swatches.",
    "usage": "<base-color-picker [(ngModel)]=\"brandColor\"></base-color-picker>",
    "keywords": [
      "color-picker",
      "color",
      "picker",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "30294f3e87632b96542398dc78f93fc9dca0a466781950712b242ebb0f5b2c39"
  },
  {
    "name": "combobox",
    "tier": "free",
    "category": "component",
    "description": "Searchable single-select with keyboard navigation, optional create, local or async filtering, and Angular Forms (`string | null`).",
    "usage": "<base-combobox [(ngModel)]=\"userId\" [options]=\"users\" placeholder=\"Search users…\"></base-combobox>",
    "keywords": [
      "combobox",
      "autocomplete",
      "typeahead",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "icon",
      "spinner",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "9e1182ad2a6d33fa21d003f4c5d6cf21f96c61e391da49ca12397090fc3d0077"
  },
  {
    "name": "coming-soon",
    "tier": "free",
    "category": "component",
    "description": "A placeholder component used to indicate that a feature or page is under construction.",
    "usage": "<base-coming-soon title=\"Dashboard Analytics\" description=\"We're currently building advanced reporting features. Check back soon!\">",
    "keywords": [
      "coming-soon",
      "coming",
      "soon"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon"
    ],
    "type": "components:ui",
    "digest": "dc6cfbac0cc7860a008270c5bb339f74dfc8516495105983e372dd58ebd9a01e"
  },
  {
    "name": "command-palette",
    "tier": "pro",
    "category": "component",
    "description": "Cmd+K style command palette: when `open` is true it renders a full-screen backdrop plus a centered dialog panel with a search input, grouped command list, and keyboard-hints footer.",
    "usage": "<base-command-palette [(open)]=\"isOpen\" [items]=\"commands\" (selected)=\"onCommand($event)\">",
    "keywords": [
      "command-palette",
      "command",
      "palette",
      "cmdk",
      "fuzzy",
      "search"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "icon",
      "input-group",
      "safe-timer"
    ],
    "type": "components:ui",
    "digest": "e7f59192fe01f810325e753190968aa52abfd5ceeb2e1088ad2405467f70b978"
  },
  {
    "name": "container",
    "tier": "free",
    "category": "component",
    "description": "A structural directive that forces the host element to act as a centered, max-width container.",
    "usage": "<div container>",
    "keywords": [
      "container"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "2c4d50572f5066e37d64d6ff2119017b5e8bc1b603b5abc339e2e20f9aefc3de"
  },
  {
    "name": "context-menu",
    "tier": "free",
    "category": "component",
    "description": "Right-click context menu panel.",
    "usage": "<div [base-context-menu-trigger]=\"menu\">Right-click me</div>",
    "keywords": [
      "context-menu",
      "context",
      "menu"
    ],
    "dependencies": [
      "@angular/cdk",
      "rxjs"
    ],
    "registryDependencies": [
      "a11y-keyboard",
      "safe-timer"
    ],
    "type": "components:ui",
    "digest": "bbf28562cec7340083a5b5c19162b1c73d7c88582373c3f92073d84be7f3f336"
  },
  {
    "name": "cookie-banner",
    "tier": "free",
    "category": "component",
    "description": "Fixed consent banner. Hidden until the client confirms `localStorage` has no stored choice (`afterNextRender`, SSR-safe).",
    "usage": "<base-cookie-banner (accepted)=\"enableAnalytics()\" (rejected)=\"disableAnalytics()\"></base-cookie-banner>",
    "keywords": [
      "cookie-banner",
      "cookie",
      "banner"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "868cb8e4fc03bd8ddf508a926b8294adfdef7961b38a7c6fce19580b1b7b86f0"
  },
  {
    "name": "countdown",
    "tier": "free",
    "category": "component",
    "description": "Countdown timer that renders a horizontal row (`flex gap-2` host) of boxed digit tiles — days, hours, minutes, seconds — each with a label underneath.",
    "usage": "<base-countdown [targetDate]=\"launchDate\" (finished)=\"onLaunch()\"></base-countdown>",
    "keywords": [
      "countdown"
    ],
    "dependencies": [],
    "registryDependencies": [
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "2a53d1be6ad9f918976bb606768e0dbcd2655292be4dada2c9ac0c7bda62a8d1"
  },
  {
    "name": "crop-image",
    "tier": "pro",
    "category": "component",
    "description": "Pro tier. A component for cropping images, typically used for avatars or profile pictures.",
    "usage": "<base-crop-image (cropped)=\"onImageCropped($event)\"></base-crop-image>",
    "keywords": [
      "crop-image",
      "crop",
      "image",
      "cropper"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "spinner",
      "tooltip"
    ],
    "type": "components:ui",
    "digest": "9ae81dfb31c1390b418d4f0ae1920bfc678a1c4ab4e06c55365704a56252156b"
  },
  {
    "name": "currency-input",
    "tier": "free",
    "category": "component",
    "description": "Locale-aware currency field.",
    "usage": "<base-currency-input [(ngModel)]=\"price\" currency=\"USD\"></base-currency-input>",
    "keywords": [
      "currency-input",
      "currency",
      "input",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "71139d653b47d1977539a8c7d71a9bc7cd7a374b769cdc4caf7ca7dfb5e88aad"
  },
  {
    "name": "current-screen-size",
    "tier": "free",
    "category": "component",
    "description": "A service that monitors viewport resizing and provides the current Tailwind breakpoint (XSmall, Small, Medium, Large, XLarge).",
    "usage": "screen = inject(CurrentScreenSizeService);",
    "keywords": [
      "current-screen-size",
      "current",
      "screen",
      "size",
      "service"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "48cd62069462667fabe121dc89156f9f68b99b22f2890b245ea3bd5016f37596"
  },
  {
    "name": "custom-select",
    "tier": "free",
    "category": "component",
    "description": "A highly customizable dropdown select component.",
    "usage": "<base-custom-select [(ngModel)]=\"selectedId\" [options]=\"users\" displayKey=\"name\" valueKey=\"id\">",
    "keywords": [
      "custom-select",
      "custom",
      "select",
      "dropdown",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "653a3fdb774dacc3ddb48248263510bf23d1be3c49364abe8fdbadfde351f935"
  },
  {
    "name": "data-table",
    "tier": "pro",
    "category": "component",
    "description": "Feature-rich table (generic over row type `T extends DataTableRow`) that renders cells as raw `row[column.key]` values from `TableColumn[]` — no custom cell templates.",
    "usage": "<base-data-table [columns]=\"columns\" [data]=\"rows\" sortable pageable selectable resizable [(selected)]=\"selectedIds\" (sortChange)=\"onSort($event)\" (pageChange)=\"onPage($event)\">",
    "keywords": [
      "data-table",
      "data",
      "table",
      "datagrid",
      "grid"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "58a41a51c25f0d77eec49319fd525055f40c2fba7bbc761cf449daef38a4aa07"
  },
  {
    "name": "date-range-picker",
    "tier": "pro",
    "category": "component",
    "description": "An input field that opens a calendar popup specifically for picking start and end date ranges.",
    "usage": "<base-date-range-picker [(ngModel)]=\"myDateRange\" label=\"Event Period\"></base-date-range-picker>",
    "keywords": [
      "date-range-picker",
      "date",
      "range",
      "picker",
      "daterange",
      "calendar",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "calendar",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "97408b541d1b36494cb1ba6e6a3f7002cb12ca969ac0c487b0aea6ba64a02f0a"
  },
  {
    "name": "datepicker",
    "tier": "pro",
    "category": "component",
    "description": "A standard date picker input field that opens an overlay calendar popup.",
    "usage": "<base-datepicker [(ngModel)]=\"startDate\" label=\"Start Date\" placeholder=\"Pick a day\"></base-datepicker>",
    "keywords": [
      "datepicker",
      "calendar",
      "date",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "button",
      "calendar",
      "icon",
      "input-group",
      "time-picker",
      "types"
    ],
    "type": "components:ui",
    "digest": "30ee7a9b8ad79500bbfc1cc1e4a3d90d662354cfc59f87675d7a352d17f975a0"
  },
  {
    "name": "dialog",
    "tier": "free",
    "category": "component",
    "description": "A service for dynamically rendering and managing dialogs/modals.",
    "usage": "inject(DialogService).open(MyDialogComponent)",
    "keywords": [
      "dialog",
      "modal",
      "overlay",
      "popup",
      "service"
    ],
    "dependencies": [
      "@angular/cdk",
      "rxjs"
    ],
    "registryDependencies": [
      "safe-timer"
    ],
    "type": "components:ui",
    "digest": "3605e528fef1ca043f1ea52117b0798cd0e20608730e71e1501bd0c736b61f08"
  },
  {
    "name": "divider",
    "tier": "free",
    "category": "component",
    "description": "A layout component used to separate content visually.",
    "usage": "<base-divider></base-divider>",
    "keywords": [
      "divider"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "650e756b443319d96767238d45bfe0365997655c7529d2628946bd63c4962575"
  },
  {
    "name": "drawer",
    "tier": "free",
    "category": "component",
    "description": "A side-drawer/offcanvas component that slides in from the edge of the screen.",
    "usage": "<base-drawer position=\"right\" size=\"lg\" (closed)=\"onDrawerClose()\"></base-drawer>",
    "keywords": [
      "drawer",
      "sidebar",
      "sheet"
    ],
    "dependencies": [
      "@angular/cdk",
      "rxjs"
    ],
    "registryDependencies": [
      "animations",
      "button",
      "icon",
      "types"
    ],
    "type": "components:ui",
    "digest": "4e0ed3955b689a14957b8cc6c50aac3f5eb5b191c92da8a07c6c8282d9cecca0"
  },
  {
    "name": "dropdown",
    "tier": "free",
    "category": "component",
    "description": "A directive that attaches a `base-dropdown-menu` to a trigger element (like a button).",
    "usage": "<button [base-dropdown-menu-trigger]=\"myMenu\" placement=\"end\">Open</button>",
    "keywords": [
      "dropdown",
      "dropdown-menu-trigger"
    ],
    "dependencies": [
      "@angular/cdk",
      "rxjs"
    ],
    "registryDependencies": [
      "dropdown-menu",
      "dropdown-menu-stack",
      "types"
    ],
    "type": "components:ui",
    "digest": "ce28ad6d4dc0ea64ae68a132db8e392fc78896490169438177bd256b4e3f666f"
  },
  {
    "name": "dropdown-menu",
    "tier": "free",
    "category": "component",
    "description": "The container component for a dropdown menu.",
    "usage": "<base-dropdown-menu #myMenu size=\"200px\">",
    "keywords": [
      "dropdown-menu",
      "dropdown",
      "menu"
    ],
    "dependencies": [],
    "registryDependencies": [
      "a11y-keyboard",
      "dropdown-menu-stack",
      "icon",
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "36122d22cc7b12a3780bd65471988a1e3e9da95a4afa63fe91a5d7da1e6e1a15"
  },
  {
    "name": "dropdown-menu-stack",
    "tier": "free",
    "category": "component",
    "description": "Root-level stack of open `base-dropdown-menu` overlays for cascade support.",
    "usage": "inject(DropdownMenuStack).closeAll();",
    "keywords": [
      "dropdown-menu-stack",
      "dropdown",
      "menu",
      "stack",
      "service"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "37c9f0e63d1072ac374eaf75f9c7094562af033efb1bb8ff7ec2efc2041e2b2a"
  },
  {
    "name": "dual-range-slider",
    "tier": "free",
    "category": "component",
    "description": "Dual-thumb range slider for selecting a numeric span (`{ start, end }`) within `min`–`max`.",
    "usage": "<base-dual-range-slider [(ngModel)]=\"priceRange\" [min]=\"10\" [max]=\"100\"></base-dual-range-slider>",
    "keywords": [
      "dual-range-slider",
      "dual",
      "range",
      "slider",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "fde42793383c94bed502ba162652a8e676b83d5866a752c0718062ee54164982"
  },
  {
    "name": "ecommerce-block-dual-promo",
    "tier": "pro",
    "category": "block",
    "description": "Static two-column promo row (stacking to one column below `lg`): a product spotlight card with a \"Just In\" `base-badge`, product title, price, image, and a primary \"Shop Now\" button, alongside a full-bleed image sale banner with a dark overlay, headline, and a white \"Shop Sale\" b…",
    "usage": "<base-ecommerce-block-dual-promo></base-ecommerce-block-dual-promo>",
    "keywords": [
      "ecommerce-block-dual-promo",
      "block",
      "ecommerce",
      "dual",
      "promo"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button"
    ],
    "type": "components:ui",
    "digest": "17cdff89114e2f318197032d8589549c60b3dab418bea0a74b8a94dfbca7caf0"
  },
  {
    "name": "ecommerce-block-hero-banner",
    "tier": "pro",
    "category": "block",
    "description": "Full-width ecommerce hero banner block with a fixed-height (600px) rounded background image, a dark overlay, and centered content: a heading, a subtitle, and a pill-shaped \"Explore Now\" CTA rendered with `[base-button]` (`color=\"primary\"`).",
    "usage": "<base-ecommerce-block-hero-banner></base-ecommerce-block-hero-banner>",
    "keywords": [
      "ecommerce-block-hero-banner",
      "block",
      "ecommerce",
      "hero",
      "banner"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button"
    ],
    "type": "components:ui",
    "digest": "17becf57cecc510c0269bb1fe66ae52fc22fb0e28addec821b7985d14f645903"
  },
  {
    "name": "ecommerce-block-lifestyle-grid",
    "tier": "pro",
    "category": "block",
    "description": "Static, presentational ecommerce lifestyle grid block with hardcoded demo content: a large hero image tile (\"Denim Collection\") with a gradient overlay and a \"Shop Collection\" button (via `BaseButtonDirective`), a featured product card (portable speaker with name and price), and….",
    "usage": "<base-ecommerce-block-lifestyle-grid></base-ecommerce-block-lifestyle-grid>",
    "keywords": [
      "ecommerce-block-lifestyle-grid",
      "block",
      "ecommerce",
      "lifestyle",
      "grid"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button"
    ],
    "type": "components:ui",
    "digest": "9df525cdbe067137a9d825d2c1847f9b086a259550c2538df514f47802b62be9"
  },
  {
    "name": "ecommerce-block-product-card",
    "tier": "pro",
    "category": "block",
    "description": "Merchandising card for a single product — badge, wishlist, rating, swatches, and quick-view hover.",
    "usage": "<base-ecommerce-block-product-card [product]=\"product\" [wishlisted]=\"wishlist.has(product.id)\" (wishlistToggle)=\"onWishlistToggle()\" />",
    "keywords": [
      "ecommerce-block-product-card",
      "block",
      "ecommerce",
      "product",
      "card"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "icon",
      "star-rating",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "aaebbec8f9929ff7cc012288bc2b2c21b69cad25691b52f418ab8030f6389592"
  },
  {
    "name": "ecommerce-block-product-detail",
    "tier": "pro",
    "category": "block",
    "description": "Pre-built (pro tier) horizontal product detail block: a two-column card with product info on the left and a full-bleed product image on the right.",
    "usage": "<base-ecommerce-block-product-detail></base-ecommerce-block-product-detail>",
    "keywords": [
      "ecommerce-block-product-detail",
      "block",
      "ecommerce",
      "product",
      "detail"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "input-spinner",
      "radio-group",
      "star-rating"
    ],
    "type": "components:ui",
    "digest": "f7d77aea90d9fb40ca178cb2fb0166b785ac742956b53f02c9a5dcc983c7ff8e"
  },
  {
    "name": "ecommerce-block-product-tabs",
    "tier": "pro",
    "category": "block",
    "description": "Static pro-tier ecommerce block rendering a split product detail layout: a large product image panel on the left and, on the right, the product name, price with an \"In Stock\" tonal success badge, and an underline-type `base-tabs` group with three tabs — Overview (description plus…",
    "usage": "<base-ecommerce-block-product-tabs></base-ecommerce-block-product-tabs>",
    "keywords": [
      "ecommerce-block-product-tabs",
      "block",
      "ecommerce",
      "product",
      "tabs"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "icon",
      "star-rating",
      "tabs"
    ],
    "type": "components:ui",
    "digest": "af7b2d9fc38cdc4fe46d131773c77f6efa5e15a311be4c24f05162e74f11b14d"
  },
  {
    "name": "ecommerce-block-split-banner",
    "tier": "pro",
    "category": "block",
    "description": "Split ecommerce banner block with marketing copy on one side and a product image on the other, arranged in a responsive two-column grid (stacked on small screens) inside a rounded container.",
    "usage": "<base-ecommerce-block-split-banner></base-ecommerce-block-split-banner>",
    "keywords": [
      "ecommerce-block-split-banner",
      "block",
      "ecommerce",
      "split",
      "banner"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button"
    ],
    "type": "components:ui",
    "digest": "769f51c43f91f2b917028caf30aa09507b06c3783a02116c639443b03128f5ec"
  },
  {
    "name": "empty-state",
    "tier": "free",
    "category": "component",
    "description": "A standard layout component to display when a list or view has no data.",
    "usage": "<base-empty-state iconName=\"inbox\" title=\"No Messages\" description=\"You have read all your messages.\">",
    "keywords": [
      "empty-state",
      "empty",
      "state"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon"
    ],
    "type": "components:ui",
    "digest": "aa383c35b77837b579dc2590d4696c7dab4b9616e47accb94ad7599c0ee6d11a"
  },
  {
    "name": "file-upload",
    "tier": "pro",
    "category": "component",
    "description": "A highly versatile file upload component supporting buttons, standard inputs, and drag-and-drop zones.",
    "usage": "<base-file-upload variant=\"dropzone\" multiple=\"true\" [(ngModel)]=\"files\"></base-file-upload>",
    "keywords": [
      "file-upload",
      "file",
      "upload",
      "dropzone",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "popover",
      "types"
    ],
    "type": "components:ui",
    "digest": "eec66e4c2be7b26c07f8860f75df93810a90c2514d96de4bf007d9f043aaa899"
  },
  {
    "name": "filter",
    "tier": "free",
    "category": "component",
    "description": "A generic data transformation pipe that filters an array of objects or strings based on a search term.",
    "usage": "<li *ngFor=\"let user of users | filter:searchQuery:['name', 'email']\">",
    "keywords": [
      "filter"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "d32099833da1dbe84d2841bb9419255341436f13ea06c5cc04d41cadc8d72231"
  },
  {
    "name": "floating-input",
    "tier": "free",
    "category": "component",
    "description": "Text input with a material-style floating label: the label sits inside the field and shrinks/floats up (via Tailwind `peer` classes) when the input is focused or has a value.",
    "usage": "<base-floating-input label=\"Email Address\" type=\"email\" [(ngModel)]=\"email\"></base-floating-input>",
    "keywords": [
      "floating-input",
      "floating",
      "input",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "08e6d42399f2742bb8b27ce02f517ac2eda497c70c4f17a9c123fa69d8ebc25c"
  },
  {
    "name": "form-billing",
    "tier": "free",
    "category": "block",
    "description": "Pre-built billing/plan form block rendered inside a `base-card`: three selectable plan cards (Starter $9, Pro $29, Enterprise $99) with a \"Popular\" badge on Pro, a seat stepper, a promo-code input with Apply button, and a full-width \"Upgrade Plan\" button.",
    "usage": "<base-form-billing></base-form-billing>",
    "keywords": [
      "form-billing",
      "block",
      "form",
      "billing"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "1317e32aab0a63ab226080340577b1dbbea0e448bee1bfaef88a3f9bbf2f253a"
  },
  {
    "name": "form-cart",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt static shopping-cart card block composed of `base-card`/`base-card-body` with a \"Cart\" header showing two overlapping avatar images, two hardcoded product line items (thumbnail, name, quantity with +/- buttons, price), a totals breakdown (subtotal, promo code, tax, total…",
    "usage": "<base-form-cart></base-form-cart>",
    "keywords": [
      "form-cart",
      "block",
      "form",
      "cart"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card"
    ],
    "type": "components:ui",
    "digest": "7c0245bfefda4bb88ea5eb9284f8ece035e934dd0bbb507a64a01fdb1d270f0c"
  },
  {
    "name": "form-checkout-summary",
    "tier": "free",
    "category": "block",
    "description": "Pre-built checkout confirmation/order summary block composed from `base-card`, `base-card-body`, `base-icon`, `base-checkbox`, and `[base-button]`.",
    "usage": "<base-form-checkout-summary></base-form-checkout-summary>",
    "keywords": [
      "form-checkout-summary",
      "block",
      "form",
      "checkout",
      "summary"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "checkbox",
      "icon"
    ],
    "type": "components:ui",
    "digest": "d19b468d9e21d0cd102d6ccacfe543e49259c08718964059541d2a17c9039e50"
  },
  {
    "name": "form-delete-account",
    "tier": "free",
    "category": "block",
    "description": "Pre-built \"delete account\" danger-zone form rendered inside a `base-card`: a red warning banner with an alert-triangle icon, static consequence bullet points (deleted projects, lost team access, cancelled subscriptions) with links to export data or transfer ownership, a type-to-c…",
    "usage": "<base-form-delete-account></base-form-delete-account>",
    "keywords": [
      "form-delete-account",
      "block",
      "form",
      "delete",
      "account"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "975ade8abf9e527232048f5851156b5c028effbbae7bb3d52b5fa8d812ad5b56"
  },
  {
    "name": "form-feedback",
    "tier": "free",
    "category": "block",
    "description": "Pre-composed \"Feedback\" form card built from library primitives: a `base-card` containing a heading, side-by-side Name and Email inputs, a feedback-type `<select>` (single \"General\" option) with a chevron-down end-addon icon, a 5-row Message textarea, and a full-width primary \"Se…",
    "usage": "<base-form-feedback></base-form-feedback>",
    "keywords": [
      "form-feedback",
      "block",
      "form",
      "feedback"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "d1ac53be2993c0a1d09196bf1ecce1a77cc10c5a85da869740d79424c363f56e"
  },
  {
    "name": "form-filter",
    "tier": "free",
    "category": "block",
    "description": "Self-contained filter/search panel rendered inside a `base-card`: a search input with a start-addon icon, toggleable status chips, a from/to date range, a sort-by `<select>` with a chevron end-addon, toggleable tag chips, and Apply Filters / Reset actions.",
    "usage": "<base-form-filter></base-form-filter>",
    "keywords": [
      "form-filter",
      "block",
      "form",
      "filter"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "9fb22018e4a9a4bc88d4fd134042926b9ae2d1b957ba8f89c2c0f3d74e46af8e"
  },
  {
    "name": "form-login",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt login form block rendered inside a `base-card`: email and password `base-input-group` fields, a \"Keep me logged in\" `base-checkbox` with a \"Forgot password?\" link, a full-width primary \"Sign In\" `base-button`, and a \"Sign up\" footer link.",
    "usage": "<base-form-login></base-form-login>",
    "keywords": [
      "form-login",
      "block",
      "form",
      "login"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "checkbox",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "ca25383389de958cdb17fa5e32ab0a4b1a4ad9061624c9dc3e870788304432af"
  },
  {
    "name": "form-login-tabs",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt authentication block: a `base-card` containing an underline-style `base-tabs` with two tabs — \"Sign Up\" (name, lastname, phone, email, password, confirm-password inputs, a Terms and Conditions checkbox, and a primary Sign Up button) and \"Login\" (login and password inputs…",
    "usage": "<base-form-login-tabs></base-form-login-tabs>",
    "keywords": [
      "form-login-tabs",
      "block",
      "form",
      "login",
      "tabs"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "checkbox",
      "icon",
      "input-group",
      "tabs"
    ],
    "type": "components:ui",
    "digest": "0507680290a415cb180c1acd544e98e1e0ee98870b622c627356bdd67c9dce0e"
  },
  {
    "name": "form-newsletter",
    "tier": "free",
    "category": "block",
    "description": "Pre-built newsletter signup card: a `base-card` containing a centered email icon in a rounded tile, a \"Subscribe to Our Weekly Newsletter\" heading, a \"no spam\" tagline, a `base-input-group` with a center-aligned email text input, and a full-width primary Subscribe button.",
    "usage": "<base-form-newsletter></base-form-newsletter>",
    "keywords": [
      "form-newsletter",
      "block",
      "form",
      "newsletter"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "f7d799c2ae20e52a86a726682b005f2eb72bea9bc388154b26c55d9d054b61fa"
  },
  {
    "name": "form-notifications",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt notification-settings card widget.",
    "usage": "<base-form-notifications></base-form-notifications>",
    "keywords": [
      "form-notifications",
      "block",
      "form",
      "notifications"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group",
      "toggle"
    ],
    "type": "components:ui",
    "digest": "f71d0ab1c003a5642917819b168a323bf1697b477464fa5ba409c93c50ee28eb"
  },
  {
    "name": "form-payment",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt static payment form section: a `base-card` with a \"Payment Info\" header showing a 3-step progress indicator (two check-circle icons and a numbered dot), payment-method selector buttons (VISA active, PayPal dimmed), and inputs for cardholder name, card number, expiry date…",
    "usage": "<base-form-payment></base-form-payment>",
    "keywords": [
      "form-payment",
      "block",
      "form",
      "payment"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "7e059a3cd684f193d188d6f5b184ea8438f8679313c724d9d1829797ec51ffd3"
  },
  {
    "name": "form-profile-settings",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt profile-settings form block rendered inside a `base-card`: a cover-image header with an overlaid title, avatar, and round icon-button actions (edit, delete, user, more), followed by a card body with two-column text inputs (first/last name, phone, email with a green check…",
    "usage": "<base-form-profile-settings></base-form-profile-settings>",
    "keywords": [
      "form-profile-settings",
      "block",
      "form",
      "profile",
      "settings"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "17084aa01dc59445ec619937070a0472c45cd2ece185ac630caaacaf2e0ec63b"
  },
  {
    "name": "form-review",
    "tier": "free",
    "category": "block",
    "description": "Pre-composed \"Write a Review\" form card.",
    "usage": "<base-form-review></base-form-review>",
    "keywords": [
      "form-review",
      "block",
      "form",
      "review"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group",
      "star-rating"
    ],
    "type": "components:ui",
    "digest": "84023c4e2a8f8af53ba191d834daf67eac4a8759e828f218371cf6e90f01b86e"
  },
  {
    "name": "form-shipping",
    "tier": "free",
    "category": "block",
    "description": "Prebuilt shipping-information form block rendered inside a `base-card`.",
    "usage": "<base-form-shipping></base-form-shipping>",
    "keywords": [
      "form-shipping",
      "block",
      "form",
      "shipping"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "f9667874b41daff5c3a420960da9029492e2ba04fcd42c002f75c19736745f1b"
  },
  {
    "name": "form-signup",
    "tier": "free",
    "category": "block",
    "description": "Pre-built static sign-up form rendered inside a `base-card`: side-by-side First Name / Last Name inputs, Email and Password fields (each a `base-input-group` with `base-label` and `base-input`), a full-width primary `base-button` \"Sign Up\" button, and an \"Already have an account?…",
    "usage": "<base-form-signup></base-form-signup>",
    "keywords": [
      "form-signup",
      "block",
      "form",
      "signup"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "3ebbcaa2b5da6ec9588ca4725c0a3ef803bc01ce531130745426a5111608583f"
  },
  {
    "name": "form-signup-tabs",
    "tier": "free",
    "category": "block",
    "description": "Pre-built signup/login form block: a `base-card` containing underline-style `base-tabs` with two tabs — \"Sign Up\" (name, lastname, phone, email, password and confirm-password inputs with eye-icon end addons, a Terms and Conditions checkbox, a primary Sign Up button, and Facebook/…",
    "usage": "<base-form-signup-tabs></base-form-signup-tabs>",
    "keywords": [
      "form-signup-tabs",
      "block",
      "form",
      "signup",
      "tabs"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "checkbox",
      "icon",
      "input-group",
      "tabs"
    ],
    "type": "components:ui",
    "digest": "8ce0c7fdf40a358abf3bd8941ad1a5c54f43171e3e01a059bd2ea065e69d98bf"
  },
  {
    "name": "form-success-message",
    "tier": "free",
    "category": "block",
    "description": "Pre-built order-confirmation success card (OnPush).",
    "usage": "<base-form-success-message></base-form-success-message>",
    "keywords": [
      "form-success-message",
      "block",
      "form",
      "success",
      "message"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "1a2a3099a4a4c99fd77e23d9e4fd36423204c82cee32bebbc94339aa49f69e17"
  },
  {
    "name": "form-team-invite",
    "tier": "free",
    "category": "block",
    "description": "Pre-composed \"Invite Team Members\" form block rendered inside a `base-card`: an email input paired with a role `<select>` (Admin/Member/Viewer, with a chevron-down icon via `base-addon-end`), a full-width primary \"Send Invitation\" button, and a static \"Pending Invitations\" list s…",
    "usage": "<base-form-team-invite></base-form-team-invite>",
    "keywords": [
      "form-team-invite",
      "block",
      "form",
      "team",
      "invite"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "card",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "ddceb8d15500aad36b4263053f779831ac5d0d9bb6e2ee51367202821fbdc5c7"
  },
  {
    "name": "form-wizard",
    "tier": "free",
    "category": "block",
    "description": "Self-contained three-step account signup wizard rendered inside a `base-card`, with a progress stepper (completed steps show a check icon, the active step is highlighted), an account-details form step, a plan-selection step (Starter/Pro cards with a \"Popular\" badge), and a confir…",
    "usage": "<base-form-wizard></base-form-wizard>",
    "keywords": [
      "form-wizard",
      "block",
      "form",
      "wizard"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "card",
      "checkbox",
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "31302688195f3e93695083877089d03c6988fece28f6857c0bfb437c674e147e"
  },
  {
    "name": "hover-card",
    "tier": "free",
    "category": "component",
    "description": "Rich preview panel that opens when the pointer (or keyboard focus) rests on the trigger.",
    "usage": "<base-hover-card>",
    "keywords": [
      "hover-card",
      "hover",
      "card"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "overlay-position",
      "safe-timer",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "4f21f84665fb853335d914dc95aa7c98d47af1c61899586666fecfc0c776dff8"
  },
  {
    "name": "icon",
    "tier": "free",
    "category": "component",
    "description": "A highly optimized SVG icon component.",
    "usage": "<base-icon name=\"home\" size=\"32\" class=\"stroke-blue-500\"></base-icon>",
    "keywords": [
      "icon"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "e04d72038cf4530cac505c58713032f5f11f548a6a7be0c3210303e70c6f5967"
  },
  {
    "name": "input-autocomplete",
    "tier": "free",
    "category": "component",
    "description": "A wrapper component that combines an input field with a native HTML datalist for autocomplete suggestions.",
    "usage": "<base-input-autocomplete suggestions=\"country-list\">",
    "keywords": [
      "input-autocomplete",
      "input",
      "autocomplete"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "input-group"
    ],
    "type": "components:ui",
    "digest": "16c43e9f0517a330ab15cb13db118e7d1985aeaa0e47037386b43bebb905b2ec"
  },
  {
    "name": "input-group",
    "tier": "free",
    "category": "component",
    "description": "A structural container component that wraps form controls like inputs, selects, and textareas.",
    "usage": "<base-input-group>",
    "keywords": [
      "input-group",
      "input",
      "group",
      "form",
      "field"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "ea7428ddb8047236472869d90bd0e8a32877c3722445a1353581f37a56fd38a0"
  },
  {
    "name": "input-mask",
    "tier": "free",
    "category": "component",
    "description": "Dynamically masks a native `<input>` while typing.",
    "usage": "<input base-input baseMask=\"(000) 000-0000\" [(ngModel)]=\"phone\" />",
    "keywords": [
      "input-mask",
      "input",
      "mask",
      "input[baseMask"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "418a5166d36c2fbe4a7fc5bca52410d34f3322571e3c01af899a4f1754835a70"
  },
  {
    "name": "input-spinner",
    "tier": "free",
    "category": "component",
    "description": "A numeric input component with increment and decrement buttons.",
    "usage": "<base-input-spinner [(ngModel)]=\"quantity\" [min]=\"1\" [max]=\"10\"></base-input-spinner>",
    "keywords": [
      "input-spinner",
      "input",
      "spinner",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "4f0c2bc563fea34ad37b5c7294758db4c5de5e4f339cb87891503100ff8a2459"
  },
  {
    "name": "kbd",
    "tier": "free",
    "category": "component",
    "description": "Inline keyboard glyph for shortcuts in copy, menus, and docs.",
    "usage": "Press <base-kbd>⌘</base-kbd> <base-kbd>K</base-kbd> to open the command palette.",
    "keywords": [
      "kbd"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "a78942d8da5a5710d902fd0135e0d1235a06d6b8f84cf2f7dab9d82dcfd38d4e"
  },
  {
    "name": "knob",
    "tier": "pro",
    "category": "component",
    "description": "Pro rotary dial for selecting a numeric value along a 270° arc.",
    "usage": "<base-knob [(ngModel)]=\"volume\" [min]=\"0\" [max]=\"100\"></base-knob>",
    "keywords": [
      "knob",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "6d24a759a16c5ecbd2e13de73d4d32a118a2317925ce0ffb89276657f171fb92"
  },
  {
    "name": "layout-admin-data-table",
    "tier": "pro",
    "category": "application",
    "description": "Full-page admin CRUD layout (pro tier) rendering a self-contained \"Team Members\" management screen backed by 24 seeded demo `UserRecord` rows: a debounce-free search box, status/role select filters, sortable column headers (asc → desc → unsorted cycle), page-size-8 pagination, an…",
    "usage": "<base-layout-admin-data-table></base-layout-admin-data-table>",
    "keywords": [
      "layout-admin-data-table",
      "application",
      "layout",
      "admin",
      "data",
      "table"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "checkbox",
      "dialog",
      "drawer",
      "empty-state",
      "icon",
      "input-group",
      "safe-timer",
      "select",
      "skeleton",
      "toast",
      "types"
    ],
    "type": "components:ui",
    "digest": "2921b863e711fbb3a486eeab62d9e7a5aa9bbca1d7f6094edd1b3434d2c2c1e9"
  },
  {
    "name": "layout-bento-grid",
    "tier": "pro",
    "category": "page-layout",
    "description": "Self-contained full-page marketing/dashboard layout (pro tier) for a fictional \"Arc\" platform: sticky navbar, hero section, an interactive bento grid, a CTA band, and a footer.",
    "usage": "<base-layout-bento-grid></base-layout-bento-grid>",
    "keywords": [
      "layout-bento-grid",
      "page-layout",
      "layout",
      "bento",
      "grid"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "badge",
      "button",
      "icon",
      "safe-timer",
      "skeleton",
      "toast",
      "tooltip"
    ],
    "type": "components:ui",
    "digest": "1771d3cd71bc3a2b80b45190eb6d9f95bb1108057e3be65ed443fd12d789f018"
  },
  {
    "name": "layout-blog-sidebar",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page blog article layout with a sticky navbar, article body, and a sticky right sidebar (table of contents, tags, newsletter signup, related posts) — all content is hardcoded demo data.",
    "usage": "<base-layout-blog-sidebar></base-layout-blog-sidebar>",
    "keywords": [
      "layout-blog-sidebar",
      "page-layout",
      "layout",
      "blog",
      "sidebar"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "breadcrumb",
      "button",
      "card",
      "divider",
      "icon",
      "input-group",
      "toast",
      "types"
    ],
    "type": "components:ui",
    "digest": "182b7311427189f95eddd55f641e701072fd474ade3cd4c7665d62edb578e0a6"
  },
  {
    "name": "layout-dashboard",
    "tier": "pro",
    "category": "application",
    "description": "Full-page admin dashboard layout (pro tier) with a responsive dark sidebar (fixed slide-in on mobile, icon-only mini rail on lg, full labels on xl), a sticky header (breadcrumb, order search, theme toggle, notifications popover, profile dropdown menu), and six switchable views dr…",
    "usage": "<base-layout-dashboard></base-layout-dashboard>",
    "keywords": [
      "layout-dashboard",
      "application",
      "layout",
      "dashboard"
    ],
    "dependencies": [],
    "registryDependencies": [
      "animated-counter",
      "avatar",
      "badge",
      "base-dropdown-menu-item",
      "breadcrumb",
      "button",
      "card",
      "command-palette",
      "data-table",
      "drawer",
      "dropdown",
      "dropdown-menu",
      "empty-state",
      "icon",
      "input-group",
      "popover",
      "safe-timer",
      "skeleton",
      "stat-card",
      "tabs",
      "theme",
      "toast",
      "types"
    ],
    "type": "components:ui",
    "digest": "a6e8bee97c25b0d7de6d2e5457a73d92b30b6ca63b9ca6ec69c2b192d359c4e0"
  },
  {
    "name": "layout-docs-kb",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page documentation / knowledge-base layout template (pro tier) with a sticky header, a left `base-tree` navigation sidebar, a center content column of documentation sections with `base-code` snippets, and a right \"On this page\" TOC that scrollspies the reader's position via….",
    "usage": "<base-layout-docs-kb></base-layout-docs-kb>",
    "keywords": [
      "layout-docs-kb",
      "page-layout",
      "layout",
      "docs",
      "kb"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "badge",
      "breadcrumb",
      "button",
      "card",
      "code",
      "command-palette",
      "divider",
      "icon",
      "theme",
      "toast",
      "tree"
    ],
    "type": "components:ui",
    "digest": "86017ab111843e57059a26b6209e7d4f57f835caea0e3314ef819162accd9f39"
  },
  {
    "name": "layout-ecommerce-grid",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page e-commerce storefront layout (pro tier) with a sticky navbar (cart/wishlist count badges), breadcrumb + sort/view-mode toolbar, a filter sidebar (categories, price-range checkboxes, color swatches, star ratings — rendered as a desktop column and a mobile slide-in panel)…",
    "usage": "<base-layout-ecommerce-grid></base-layout-ecommerce-grid>",
    "keywords": [
      "layout-ecommerce-grid",
      "page-layout",
      "layout",
      "ecommerce",
      "grid"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "breadcrumb",
      "button",
      "checkbox",
      "dialog",
      "divider",
      "drawer",
      "icon",
      "safe-timer",
      "select",
      "toast",
      "types"
    ],
    "type": "components:ui",
    "digest": "00b9c571402f4caadc7271f51088f43fe80c9623acb09f6dbd2809dfaf2b6e9b"
  },
  {
    "name": "layout-file-manager",
    "tier": "pro",
    "category": "application",
    "description": "Full-page file manager application layout (pro tier): `base-tree` folder sidebar, path breadcrumbs, grid/list views, search + starred filter, `base-file-upload` dropzone, item actions (open/rename/star/download/delete) via dropdown menus, rename via `BaseFileManagerRenameDialogCo…",
    "usage": "<base-layout-file-manager></base-layout-file-manager>",
    "keywords": [
      "layout-file-manager",
      "application",
      "layout",
      "file",
      "manager"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "base-dropdown-menu-item",
      "button",
      "button-group",
      "dialog",
      "drawer",
      "dropdown",
      "dropdown-menu",
      "empty-state",
      "file-upload",
      "icon",
      "input-group",
      "safe-timer",
      "select",
      "skeleton",
      "toast",
      "tooltip",
      "tree"
    ],
    "type": "components:ui",
    "digest": "4499c65bfb8f5a00a157cb84013235d6b73baa1a0fdcd36d98c5cc679fef9a7b"
  },
  {
    "name": "layout-hero-features",
    "tier": "pro",
    "category": "page-layout",
    "description": "A complete marketing landing page layout: sticky header with anchor navigation and scroll shadow, hero with tilt-on-scroll product mockup, animated stats strip, logo cloud, features grid with scroll reveal, testimonials carousel, pricing with monthly/yearly toggle, install snippe…",
    "usage": "<base-layout-hero-features brandName=\"Acme\" [stats]=\"stats\" [plans]=\"plans\" (primaryCtaClick)=\"signup()\" (secondaryCtaClick)=\"openDemo()\" (newsletterSubmit)=\"subscribe($event)\">",
    "keywords": [
      "layout-hero-features",
      "page-layout",
      "layout",
      "hero",
      "features"
    ],
    "dependencies": [],
    "registryDependencies": [
      "accordion",
      "animated-counter",
      "badge",
      "button",
      "carousel",
      "code",
      "dialog",
      "drawer",
      "icon",
      "input-group",
      "quote",
      "reveal",
      "safe-timer",
      "star-rating",
      "tabs",
      "theme",
      "timeline",
      "toggle",
      "types"
    ],
    "type": "components:ui",
    "digest": "76e5c6e65851127f3cd0f4dd78a9e67cd85027a7e5bc026f73e7fba51a7245db"
  },
  {
    "name": "layout-inbox-messaging",
    "tier": "pro",
    "category": "application",
    "description": "A three-pane inbox / support-ticket messaging layout: a searchable, status-filterable conversation list (All / Unread / Open / Closed), a message thread with an @-mention reply composer (auto-growing textarea, Enter sends, Shift+Enter for a newline, Enter is ignored while the men…",
    "usage": "<base-layout-inbox-messaging></base-layout-inbox-messaging>",
    "keywords": [
      "layout-inbox-messaging",
      "application",
      "layout",
      "inbox",
      "messaging"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "avatar-group",
      "badge",
      "button",
      "chips",
      "dropdown",
      "dropdown-menu",
      "empty-state",
      "file-upload",
      "icon",
      "input-group",
      "mention-input",
      "safe-timer",
      "tooltip",
      "types"
    ],
    "type": "components:ui",
    "digest": "142b80e17cba182a27c4e00deef3550a61d6f4510e077f9d0470fbf5943cd99b"
  },
  {
    "name": "layout-kanban-board",
    "tier": "pro",
    "category": "application",
    "description": "Full-page kanban board demo layout (pro tier) with hardcoded sample data: a sticky app-shell top bar (project selector, task search, member avatar stack, notification button, New Task button), a filter toolbar, and horizontally scrollable columns of task cards.",
    "usage": "<base-layout-kanban-board></base-layout-kanban-board>",
    "keywords": [
      "layout-kanban-board",
      "application",
      "layout",
      "kanban",
      "board"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "button",
      "click-outside",
      "dialog",
      "icon",
      "input-group",
      "safe-timer",
      "select",
      "skeleton",
      "toast"
    ],
    "type": "components:ui",
    "digest": "b21b82b38fa511727f1a1c9dc7e2e6c638461625cf65188329202d084b273a51"
  },
  {
    "name": "layout-magazine-grid",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page magazine/blog landing layout (\"Meridian\") with a sticky blurred navbar, mobile slide-in category menu, featured hero article (with expandable \"reader mode\" excerpt), secondary article stack, numbered Editor's Picks strip, a Latest Stories grid with 2-column/3-column/lis…",
    "usage": "<base-layout-magazine-grid></base-layout-magazine-grid>",
    "keywords": [
      "layout-magazine-grid",
      "page-layout",
      "layout",
      "magazine",
      "grid"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "button",
      "card",
      "icon",
      "input-group",
      "safe-timer",
      "toast",
      "types"
    ],
    "type": "components:ui",
    "digest": "8b8ce40cbf937adf7a938aa9a98bf2a34dfe6434734f3e8aa8d5850902a4e9b7"
  },
  {
    "name": "layout-onboarding-flow",
    "tier": "pro",
    "category": "application",
    "description": "Full-page four-step signup/onboarding layout (Account, Verify, Workspace, Invite) built on `BaseStepper`/`BaseStep` with hidden built-in navigation and its own Back/Next/Submit controls.",
    "usage": "<base-onboarding-flow-layout></base-onboarding-flow-layout>",
    "keywords": [
      "layout-onboarding-flow",
      "application",
      "layout",
      "onboarding",
      "flow",
      "onboarding-flow-layout"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "chips",
      "icon",
      "input-group",
      "otp-input",
      "password-strength",
      "safe-timer",
      "select",
      "spinner",
      "stepper",
      "toast"
    ],
    "type": "components:ui",
    "digest": "a239e63134db7bb3b87288de81e0f9f8325865eb8f45da88844a5e1df43a3f6f"
  },
  {
    "name": "layout-portfolio-gallery",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page portfolio/agency layout (\"Aria Studio\") with sticky navbar, mobile slide-in menu, hero with featured project card, stats strip, services grid, filterable masonry project gallery, testimonials, process steps, gradient CTA, and footer.",
    "usage": "<base-layout-portfolio-gallery></base-layout-portfolio-gallery>",
    "keywords": [
      "layout-portfolio-gallery",
      "page-layout",
      "layout",
      "portfolio",
      "gallery"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "dialog",
      "icon",
      "input-group",
      "select",
      "toast"
    ],
    "type": "components:ui",
    "digest": "4559978ee59026bd9fd4b08898211bcd471f723fec82cba1f8039ef37f828a5f"
  },
  {
    "name": "layout-pricing",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page pricing layout (pro tier): sticky navbar, hero with a monthly/annual billing toggle and a team-size `base-input-spinner` (1–500 seats), three hardcoded plan cards (Starter/Professional/Enterprise), a trusted-by logo strip, a feature comparison table, an FAQ accordion, a…",
    "usage": "<base-layout-pricing-page></base-layout-pricing-page>",
    "keywords": [
      "layout-pricing",
      "page-layout",
      "layout",
      "pricing",
      "layout-pricing-page"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "dialog",
      "icon",
      "input-group",
      "input-spinner",
      "safe-timer",
      "skeleton",
      "toast"
    ],
    "type": "components:ui",
    "digest": "322cc6818be352c2a4d690e4e70b420b8f78bd10ec3d637b7aca6f61ac2d18a3"
  },
  {
    "name": "layout-scheduler",
    "tier": "pro",
    "category": "application",
    "description": "Full-page scheduler / full-calendar application layout (pro tier): month, week, and day views with seeded demo events, Work/Personal/Team calendar filters, search, a mini `base-calendar` sidebar, create/edit/delete via `BaseSchedulerEventFormDialogComponent` + `DialogService`, to…",
    "usage": "<base-layout-scheduler></base-layout-scheduler>",
    "keywords": [
      "layout-scheduler",
      "application",
      "layout",
      "scheduler"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "button",
      "calendar",
      "dialog",
      "icon",
      "input-group",
      "safe-timer",
      "select",
      "skeleton",
      "toast",
      "tooltip"
    ],
    "type": "components:ui",
    "digest": "12b6d7861272ed97936a50c5eefe2bf4b66132df09fbca0e6b2e1e24f168d218"
  },
  {
    "name": "layout-settings-account",
    "tier": "pro",
    "category": "application",
    "description": "Full-page account settings layout with a desktop sidebar (avatar/user header, \"Back to Dashboard\" routerLink to `/layouts/dashboard`) and a sticky mobile tab bar, switching between five tabs — Profile, Billing, Notifications, and Team delegate to `base-form-profile-settings`, `ba…",
    "usage": "<base-layout-settings-account></base-layout-settings-account>",
    "keywords": [
      "layout-settings-account",
      "application",
      "layout",
      "settings",
      "account"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "form-billing",
      "form-delete-account",
      "form-notifications",
      "form-profile-settings",
      "form-team-invite",
      "icon",
      "input-group",
      "password-strength",
      "safe-timer",
      "skeleton",
      "toast",
      "toggle"
    ],
    "type": "components:ui",
    "digest": "7731ae591838cf83aed16eb4940ae5f9c7b18956854f9887c71c08ab4b92631e"
  },
  {
    "name": "layout-split-screen",
    "tier": "pro",
    "category": "page-layout",
    "description": "Full-page SaaS marketing landing layout (fictional \"Pulse\" product) built from alternating 50/50 split sections: sticky navbar, hero split with a simulated dashboard card (Deployments/Analytics/Logs tabs driven by a signal), \"trusted by\" logo strip, terminal-simulation feature sp…",
    "usage": "<base-layout-split-screen></base-layout-split-screen>",
    "keywords": [
      "layout-split-screen",
      "page-layout",
      "layout",
      "split",
      "screen"
    ],
    "dependencies": [],
    "registryDependencies": [
      "badge",
      "button",
      "dialog",
      "icon",
      "input-group",
      "safe-timer",
      "skeleton",
      "toast"
    ],
    "type": "components:ui",
    "digest": "78f6528078e9e53be2e7f6b7eafcf078c22cfa62dc00b7627653ed6913f03f50"
  },
  {
    "name": "lightbox",
    "tier": "free",
    "category": "component",
    "description": "Free lightbox gallery. Project one or more `[base-lightbox-thumb]` images; thumb size and aspect ratio are controlled with Tailwind on each thumb (`class` on `base-lightbox` lays out the thumbs wrapper — host itself is `contents`).",
    "usage": "<base-lightbox class=\"grid grid-cols-3 gap-2\">",
    "keywords": [
      "lightbox"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "629013e408c61c511ca34c6d3dd650d28a26bd1dbb4fdf41e5162bfa235eba6b"
  },
  {
    "name": "loading-overlay",
    "tier": "free",
    "category": "component",
    "description": "Blocks a region (or the viewport) with `base-spinner` while work is in progress.",
    "usage": "<base-loading-overlay [visible]=\"saving()\" message=\"Saving…\">",
    "keywords": [
      "loading-overlay",
      "loading",
      "overlay"
    ],
    "dependencies": [],
    "registryDependencies": [
      "spinner",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "20a3b953db55fe1023ef7124d3b7394a9467d4461600f07bed28aa9f2444e650"
  },
  {
    "name": "media-widget-album-carousel",
    "tier": "pro",
    "category": "widget",
    "description": "Pre-built media widget (pro tier) rendering a `base-card` containing a `base-horizontal-carousel` titled \"Albums\" with eight hard-coded album items.",
    "usage": "<base-media-widget-album-carousel></base-media-widget-album-carousel>",
    "keywords": [
      "media-widget-album-carousel",
      "widget",
      "media",
      "album",
      "carousel"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "carousel",
      "icon",
      "star-rating",
      "tooltip"
    ],
    "type": "components:ui",
    "digest": "b08bbe4889b0aac8d2891354a8a6abea4908758abd195e5bdd53df9ddb0eaad6"
  },
  {
    "name": "media-widget-album-player",
    "tier": "pro",
    "category": "widget",
    "description": "Static album-player media widget rendered inside a `base-card`: a cover-image panel with share/bookmark/download icon buttons and an album info overlay (artist, title, stats), beside a scrollable track list where the active track shows animated equalizer bars, plus a footer bar w…",
    "usage": "<base-media-widget-album-player></base-media-widget-album-player>",
    "keywords": [
      "media-widget-album-player",
      "widget",
      "media",
      "album",
      "player"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "344f980111aff200ca4d41401969c2f8c536115382e7ec96642a81eb2557075b"
  },
  {
    "name": "media-widget-audio-player-compact",
    "tier": "pro",
    "category": "widget",
    "description": "Compact audio-player media widget rendered inside a `base-card`: a round stroked pause icon-button, hard-coded track title/artist (\"Hold On, We're Going Home\" / \"Drake\"), a \"more\" icon-button, a decorative static waveform made of bars, elapsed/total time labels, like and play-cou…",
    "usage": "<base-media-widget-audio-player-compact></base-media-widget-audio-player-compact>",
    "keywords": [
      "media-widget-audio-player-compact",
      "widget",
      "media",
      "audio",
      "player",
      "compact"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "dfaf131438617e53e02d0106fff77cb2726865b3098b98bfceb41943594b2d58"
  },
  {
    "name": "media-widget-audio-player-dark",
    "tier": "pro",
    "category": "widget",
    "description": "Static dark-themed audio player widget rendered inside a `base-card` with a forced `bg-slate-900!` background (always dark regardless of theme).",
    "usage": "<base-media-widget-audio-player-dark></base-media-widget-audio-player-dark>",
    "keywords": [
      "media-widget-audio-player-dark",
      "widget",
      "media",
      "audio",
      "player",
      "dark"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "47aa36454489b48aeeb1911822b4c7b1447af98c5bb62e2b6d43f3e490e99cb3"
  },
  {
    "name": "media-widget-audio-player-hero",
    "tier": "pro",
    "category": "widget",
    "description": "Full-height hero audio player card (pro tier) built on `base-card`.",
    "usage": "<base-media-widget-audio-player-hero></base-media-widget-audio-player-hero>",
    "keywords": [
      "media-widget-audio-player-hero",
      "widget",
      "media",
      "audio",
      "player",
      "hero"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "97cd7d84c8d77dfc99e805f4cc5b7319daee0cbb493b2a8bc37a2e99196d9344"
  },
  {
    "name": "media-widget-playlist",
    "tier": "pro",
    "category": "widget",
    "description": "Static (display-only) music playlist widget rendered inside a `base-card`: a \"Playlist\" header with a more-options icon button, a transport bar with backward/pause/forward icon buttons and a decorative hover-reveal volume slider (shown only at `sm`–`lg` and `xl+` breakpoints), an…",
    "usage": "<base-media-widget-playlist></base-media-widget-playlist>",
    "keywords": [
      "media-widget-playlist",
      "widget",
      "media",
      "playlist"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "065a5af72ef9132ac3581bed251a963d57a2503b2eec0fb410730683484c78fa"
  },
  {
    "name": "media-widget-related-videos",
    "tier": "pro",
    "category": "widget",
    "description": "Static \"Related Videos\" showcase widget rendered inside a `base-card`: a header row with a \"Related Videos\" title and a transparent `base-icon-button` (\"More\"), above a vertically scrollable list of seven hardcoded video entries.",
    "usage": "<base-media-widget-related-videos></base-media-widget-related-videos>",
    "keywords": [
      "media-widget-related-videos",
      "widget",
      "media",
      "related",
      "videos"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "e9bdc6f3fd9a7fe97465032648dbf0e055e2b4c99d7c7739ef63b4c22c95bbf8"
  },
  {
    "name": "media-widget-top-singles",
    "tier": "pro",
    "category": "widget",
    "description": "Music chart card (\"Top Singles\") built on `base-card`, with a header row containing a \"More\" icon button, a Week/Month/Year tab strip (static, non-interactive — \"Week\" is styled as selected), and a hardcoded ranked list of 5 tracks showing rank number, cover image, title/artist,….",
    "usage": "<base-media-widget-top-singles></base-media-widget-top-singles>",
    "keywords": [
      "media-widget-top-singles",
      "widget",
      "media",
      "top",
      "singles"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "c2c544d08ba532890448ed1989e8989c3c9dba06bcf045e3caf340bdf1ff5200"
  },
  {
    "name": "media-widget-video-hero",
    "tier": "pro",
    "category": "widget",
    "description": "Pro-tier showcase widget rendering a static video-player hero inside a `base-card` with a 16:9 (`aspect-video`) frame.",
    "usage": "<base-media-widget-video-hero></base-media-widget-video-hero>",
    "keywords": [
      "media-widget-video-hero",
      "widget",
      "media",
      "video",
      "hero"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon",
      "select"
    ],
    "type": "components:ui",
    "digest": "53f6c2f876aae8e6dd465ddf9d5631b168dadac420988e99c31f59af233a2df0"
  },
  {
    "name": "media-widget-video-post",
    "tier": "pro",
    "category": "widget",
    "description": "Pre-composed social video post card (pro tier) built on `base-card`, using `OnPush` change detection.",
    "usage": "<base-media-widget-video-post></base-media-widget-video-post>",
    "keywords": [
      "media-widget-video-post",
      "widget",
      "media",
      "video",
      "post"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "ce3e01bca160a7e701f404dc37536c62b9f08d09583861ba584ca9780f992a46"
  },
  {
    "name": "mega-menu",
    "tier": "pro",
    "category": "component",
    "description": "Full-width mega menu with a trigger slot and a dropdown panel.",
    "usage": "<base-mega-menu>",
    "keywords": [
      "mega-menu",
      "mega",
      "menu"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "z-index"
    ],
    "type": "components:ui",
    "digest": "775e5d7e4e7b7832ea12b4e353132820073287216e49cecdcfaa17dcf9ebaa79"
  },
  {
    "name": "mention-input",
    "tier": "pro",
    "category": "component",
    "description": "Pro tier. Wrapper that adds @-mention autocomplete to a projected native `<input>` or `<textarea>` (via `<ng-content>`).",
    "usage": "<base-mention-input [users]=\"users\" [(ngModel)]=\"message\">",
    "keywords": [
      "mention-input",
      "mention",
      "input",
      "autocomplete",
      "mentions",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "1d70a9cad7b61ef07895371912485473cc08cdb072df35cb9174b5101988cf00"
  },
  {
    "name": "menubar",
    "tier": "free",
    "category": "component",
    "description": "Horizontal application menubar.",
    "usage": "<base-menubar>",
    "keywords": [
      "menubar"
    ],
    "dependencies": [],
    "registryDependencies": [
      "dropdown",
      "dropdown-menu",
      "dropdown-menu-stack",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "1554b2e41b9a1b0c213d299b144fd38687583d6e79700dce50d8f858175852b0"
  },
  {
    "name": "meter-group",
    "tier": "free",
    "category": "component",
    "description": "Stacked multi-value meter with optional legend.",
    "usage": "<base-meter-group [value]=\"[ { label: 'Apps', value: 16, color: 'primary' }, { label: 'Messages', value: 8, color: 'success' }, { label: 'Media', value: 24, color: 'warning' }, ]\"…",
    "keywords": [
      "meter-group",
      "meter",
      "group"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "379c3ce7d4a9b03abca26b46f2ace6a2d135767cbc9fc7ee80f874cb2bae9494"
  },
  {
    "name": "multi-select",
    "tier": "pro",
    "category": "component",
    "description": "Searchable multi-select dropdown that renders selected values as removable chips inside a combobox trigger.",
    "usage": "<base-multi-select [options]=\"skills\" [(ngModel)]=\"selectedSkills\"></base-multi-select>",
    "keywords": [
      "multi-select",
      "multi",
      "select",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "overlay-position",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "05e8d96d273928b215afa643ebab8897ee9bf31fde5b855c56281be6fdefb614"
  },
  {
    "name": "nav-list",
    "tier": "free",
    "category": "component",
    "description": "A navigation list container.",
    "usage": "<base-nav-list>",
    "keywords": [
      "nav-list",
      "nav",
      "list"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "dc77bf045c576cb7ce80844f08ade41bb71314c3a4361632dedeb39184633659"
  },
  {
    "name": "otp-input",
    "tier": "free",
    "category": "component",
    "description": "PIN / OTP input rendering `length` individually-focusable single-character boxes.",
    "usage": "<base-otp-input [length]=\"6\" (completed)=\"onVerify($event)\"></base-otp-input>",
    "keywords": [
      "otp-input",
      "otp",
      "input",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "3740a73116b6d91473b9a529ec8cbe87acabc630554c8debeb4c44bb91aa3eef"
  },
  {
    "name": "overlay-position",
    "tier": "free",
    "category": "component",
    "description": "Placement union shared by popover/hover-card overlays.",
    "usage": "npx base-ui-cli add overlay-position",
    "keywords": [
      "overlay-position",
      "overlay",
      "position"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "9aa2416d15e1411ea80cbb5ebc79c19969bab76098720c4aa9e497e348c1a04a"
  },
  {
    "name": "page-main",
    "tier": "free",
    "category": "shell",
    "description": "The primary layout wrapper for a main page view.",
    "usage": "<base-page-main>",
    "keywords": [
      "page-main",
      "shell",
      "page",
      "main"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "a87e2f0cbc25afebc2540dd766e8d9ed8dc306fc4199a9c6f7488d0f14d98ea7"
  },
  {
    "name": "paginator",
    "tier": "free",
    "category": "component",
    "description": "A pagination control component.",
    "usage": "<base-paginator [basePaginator]=\"true\" [pageSizeOptions]=\"[10, 20, 50]\"></base-paginator>",
    "keywords": [
      "paginator"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "input-spinner",
      "select"
    ],
    "type": "components:ui",
    "digest": "23d6ae873cf088bcc18b0ed5dfca26c0c79afddc583417f66f78ff88095065a3"
  },
  {
    "name": "password-strength",
    "tier": "free",
    "category": "component",
    "description": "Four-segment password strength meter bar with a text label below it.",
    "usage": "<base-password-strength></base-password-strength>",
    "keywords": [
      "password-strength",
      "password",
      "strength"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "a11b1e71add0a6b2830a54620d5ed88094901d2754f61ee98c432f3aaf5fe1c0"
  },
  {
    "name": "phone-input",
    "tier": "free",
    "category": "component",
    "description": "Phone number field with a country dial-code selector.",
    "usage": "<base-phone-input></base-phone-input>",
    "keywords": [
      "phone-input",
      "phone",
      "input",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "3be200f08c2190e54902ae3e82d1588fba1f31c462a9a53f92e104479d772e7b"
  },
  {
    "name": "pick-list",
    "tier": "pro",
    "category": "component",
    "description": "Pro dual-listbox that moves items between available (source) and selected (target) panes.",
    "usage": "<base-pick-list [options]=\"cities\" [(ngModel)]=\"selected\"></base-pick-list>",
    "keywords": [
      "pick-list",
      "pick",
      "list",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "8b515866a7c30f8bd167560b9ff27a3fb9109336e7aa1af045d151a82ed5c491"
  },
  {
    "name": "popover",
    "tier": "free",
    "category": "component",
    "description": "Self-contained popover with a trigger slot and a panel slot: project the trigger element into `[popover-trigger]` and the panel content as default children.",
    "usage": "<base-popover placement=\"bottom-start\">",
    "keywords": [
      "popover"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "overlay-position",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "17bab5ea8c53cf13751c9e0183f4f015858f348990d87772553464bb96eb49d4"
  },
  {
    "name": "product-gallery",
    "tier": "pro",
    "category": "component",
    "description": "Pro tier. A highly interactive product gallery component supporting images, videos, thumbnails, and zooming.",
    "usage": "<base-product-gallery [items]=\"mediaItems\" thumbnailsPosition=\"left\" [zoomOnClick]=\"true\" (indexChange)=\"onSlideChanged($event)\">",
    "keywords": [
      "product-gallery",
      "product",
      "gallery"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "fdff4f2c4a27ed227eae71cae116b086b052abeaff1cd28ba71b8db4d8fa5c14"
  },
  {
    "name": "progress",
    "tier": "free",
    "category": "component",
    "description": "A linear progress bar. On hover (or keyboard focus), a tip bubble appears at the leading edge of the fill showing the current percentage.",
    "usage": "<base-progress [value]=\"75\" color=\"success\" size=\"lg\"></base-progress>",
    "keywords": [
      "progress"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "66dafa13f1dd6884f744294582eb5ff393fa09ef39bbdbaf0002a8d8e166437d"
  },
  {
    "name": "progress-button",
    "tier": "free",
    "category": "component",
    "description": "A button with built-in progress state: while `loading` is true the label fades out (keeping the button's width stable) and a centered spinner is shown instead.",
    "usage": "<base-progress-button color=\"primary\" [loading]=\"saving()\" (clicked)=\"save()\">",
    "keywords": [
      "progress-button",
      "progress",
      "button"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "4f102c41bfc426bab9273c2560b41d05545f4b1778ce8eba3dc7333911fb63cd"
  },
  {
    "name": "quote",
    "tier": "free",
    "category": "component",
    "description": "A stylized blockquote component for displaying testimonials, reviews, or pull quotes.",
    "usage": "<base-quote variant=\"avatar-left\" authorName=\"John Doe\" authorRole=\"CEO\" avatarUrl=\"user.jpg\">",
    "keywords": [
      "quote"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "685cf9869dee0373fc940a64693893add0feeba0edaab5aafd2d6e7f67ae1d9f"
  },
  {
    "name": "radio-group",
    "tier": "free",
    "category": "component",
    "description": "A container component for a group of `base-radio-button` elements.",
    "usage": "<base-radio-group groupLabel=\"Notification preference\" [(ngModel)]=\"selectedValue\">",
    "keywords": [
      "radio-group",
      "radio",
      "group",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "0bb689475c7672a7935e785952fc10e0cf3ec267c3137fe42250d2ccf32ec793"
  },
  {
    "name": "range-slider",
    "tier": "free",
    "category": "component",
    "description": "Single-value range slider built on a native `<input type=\"range\">`, styled with Tailwind accent-color classes per `color`.",
    "usage": "<base-range-slider></base-range-slider>",
    "keywords": [
      "range-slider",
      "range",
      "slider",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "types"
    ],
    "type": "components:ui",
    "digest": "a8bd6b8ae5436bbca7adaf40bc5a6c075efa18c5b0b9de082df9fb4144e6ec62"
  },
  {
    "name": "responsive-nav",
    "tier": "free",
    "category": "component",
    "description": "Progressive (priority+) horizontal navigation.",
    "usage": "<base-responsive-nav>",
    "keywords": [
      "responsive-nav",
      "responsive",
      "nav"
    ],
    "dependencies": [],
    "registryDependencies": [
      "base-dropdown-menu-item",
      "button",
      "dropdown",
      "dropdown-menu",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "2415d2b1fd63402401325e396856815c32902ec39c4212f50e093d0f55bc0240"
  },
  {
    "name": "reveal",
    "tier": "free",
    "category": "component",
    "description": "Reveals the host element with a fade + slide-up animation the first time it scrolls into the viewport (IntersectionObserver).",
    "usage": "<div baseReveal>Fades in on scroll</div>",
    "keywords": [
      "reveal",
      "baseReveal"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "877910d8acbff0955eba575305147ffd4a6f1ed40fbc38291914109c41935b8c"
  },
  {
    "name": "rich-text-editor",
    "tier": "pro",
    "category": "component",
    "description": "Lightweight WYSIWYG editor with a themed toolbar (`base-stroked-icon-button`, tooltips, dropdown, divider) and a `contenteditable` body.",
    "usage": "<base-rich-text-editor [(ngModel)]=\"bioHtml\" placeholder=\"Write something...\"></base-rich-text-editor>",
    "keywords": [
      "rich-text-editor",
      "rich",
      "text",
      "editor",
      "wysiwyg",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "base-dropdown-menu-item",
      "button",
      "divider",
      "dropdown",
      "dropdown-menu",
      "icon",
      "tooltip",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "9ca8da2b544a073b1cb0fd1c7f4f718013210401ed8abf31aa96de283fabc5da"
  },
  {
    "name": "ripple",
    "tier": "free",
    "category": "component",
    "description": "Material-style ink ripple on pointer press (primary button) or Enter/Space.",
    "usage": "<button base-button color=\"primary\" base-ripple>Click me</button>",
    "keywords": [
      "ripple"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "27c38939b2f581a4da251f89ec1e02230d0705af3ad9d39a33c1f5852d5f231f"
  },
  {
    "name": "safe-timer",
    "tier": "free",
    "category": "component",
    "description": "Timers scoped to the lifetime of the component or directive that created them.",
    "usage": "private readonly timers = injectTimers();",
    "keywords": [
      "safe-timer",
      "safe",
      "timer"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "b68e98be4c67b0321cd2f7bfd9b367b342cfe8132571a0c21a941eb28e586c83"
  },
  {
    "name": "scroll-area",
    "tier": "free",
    "category": "component",
    "description": "Overflow container with a thin, theme-aware scrollbar.",
    "usage": "<base-scroll-area class=\"h-64\">",
    "keywords": [
      "scroll-area",
      "scroll",
      "area"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "8cf969b8f3aecea7c0d59cadcca6258308fbc615190fc0fb5de950e4906f968e"
  },
  {
    "name": "scroll-buttons",
    "tier": "free",
    "category": "component",
    "description": "Floating scroll-to-bottom button.",
    "usage": "<base-scroll-bottom threshold=\"200\" color=\"primary\"></base-scroll-bottom>",
    "keywords": [
      "scroll-buttons",
      "scroll",
      "buttons",
      "scroll-bottom"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "scroll-container",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "e4f0f0bb4fb22d460b525b41460fbf72775a0b2434d74ae173cd122f252cfc1c"
  },
  {
    "name": "scroll-container",
    "tier": "free",
    "category": "component",
    "description": "Scroll container resolution for scroll-top / scroll-bottom buttons.",
    "usage": "npx base-ui-cli add scroll-container",
    "keywords": [
      "scroll-container",
      "scroll",
      "container"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "62ebcb37c4930cb4abad13055f3ccc11220d49ea3e109f89263578790628acb9"
  },
  {
    "name": "scroll-nav",
    "tier": "free",
    "category": "shell",
    "description": "A highly interactive layout component that synchronizes a sidebar navigation list with scrollable content.",
    "usage": "<base-scroll-nav>",
    "keywords": [
      "scroll-nav",
      "shell",
      "scroll",
      "nav"
    ],
    "dependencies": [
      "rxjs"
    ],
    "registryDependencies": [
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "9ee0e130e668589233aa32b7f62df2c6dfbc941f03db874a0de7c52103f4e660"
  },
  {
    "name": "scroll-to",
    "tier": "free",
    "category": "component",
    "description": "A behavior directive that smoothly scrolls the window to a target element when the host is clicked.",
    "usage": "<button [baseScrollTo]=\"'#footer'\">Scroll to Footer</button>",
    "keywords": [
      "scroll-to",
      "scroll",
      "to",
      "baseScrollTo"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "c855af2e441a776cd684b258bcdc5c43bed6471cab2d441636f572adaf422e18"
  },
  {
    "name": "select",
    "tier": "free",
    "category": "component",
    "description": "A native HTML `<select>` wrapper component.",
    "usage": "<base-select [(ngModel)]=\"selectedValue\" placeholder=\"Select an option\">",
    "keywords": [
      "select",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "894c116c19e876748c42c880cd0923df2e39361c9caa4230e6a80735858aed3b"
  },
  {
    "name": "select-tree",
    "tier": "pro",
    "category": "component",
    "description": "Pro single-select dropdown that presents options as an expandable tree (combobox trigger + fixed panel).",
    "usage": "<base-select-tree [nodes]=\"locations\" [(ngModel)]=\"selected\"></base-select-tree>",
    "keywords": [
      "select-tree",
      "select",
      "tree",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "overlay-position",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "20f53d7facc70afddd3ba9153cfa6dab74cd4b1d5275513f734ccaa97e083ae0"
  },
  {
    "name": "shell",
    "tier": "pro",
    "category": "shell",
    "description": "Unified Pro application shell.",
    "usage": "<base-shell mode=\"page\">",
    "keywords": [
      "shell"
    ],
    "dependencies": [
      "@angular/cdk",
      "rxjs"
    ],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "aba3d8b4fc62a76f3f2e48bf77c59bbae4746e575457325c26add2c7017768c2"
  },
  {
    "name": "sidebar",
    "tier": "free",
    "category": "component",
    "description": "A service to control the visibility state of the application sidebar.",
    "usage": "sidebar = inject(SidebarService);",
    "keywords": [
      "sidebar",
      "service"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "90370912568e51713b521f46aba2365423af515353301706f5f37c68d26fd318"
  },
  {
    "name": "sidenav",
    "tier": "free",
    "category": "shell",
    "description": "Responsive section shell with a left nav rail and scrollable body.",
    "usage": "<base-sidenav>",
    "keywords": [
      "sidenav",
      "shell",
      "sidebar",
      "navigation"
    ],
    "dependencies": [
      "rxjs"
    ],
    "registryDependencies": [
      "breadcrumb",
      "button",
      "icon",
      "safe-timer",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "17dafcc6494a13c5d413e10c29e122460149499b30fa7fe20e916def34b4d593"
  },
  {
    "name": "skeleton",
    "tier": "free",
    "category": "component",
    "description": "Loading-placeholder skeleton that renders `count` pulsing gray blocks (`animate-pulse`, light/dark aware) in the chosen variant.",
    "usage": "<base-skeleton></base-skeleton>",
    "keywords": [
      "skeleton"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "01896b436f1f87f649f3f636eee0ddc6140c2723c13a94fe8585110771ca10b4"
  },
  {
    "name": "slider",
    "tier": "free",
    "category": "component",
    "description": "A highly configurable image/content carousel component.",
    "usage": "<base-gallery-slider [interval]=\"3000\" transition=\"crossfade\" [wrap]=\"true\">",
    "keywords": [
      "slider",
      "gallery-slider, base-carousel"
    ],
    "dependencies": [
      "rxjs"
    ],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "dc102a039e1baa5b105e675491b51be784a93b35bdc50afb2a9d389e7bd9501a"
  },
  {
    "name": "social-widget-activity",
    "tier": "pro",
    "category": "widget",
    "description": "Static, presentational social activity feed widget built on `base-card` with `OnPush` change detection.",
    "usage": "<base-social-widget-activity></base-social-widget-activity>",
    "keywords": [
      "social-widget-activity",
      "widget",
      "social",
      "activity"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "24dfa24f6b4bb2af323c99d1ee47b114ab3947316b478fce21464c7f02c6af27"
  },
  {
    "name": "social-widget-article-comments",
    "tier": "pro",
    "category": "widget",
    "description": "Static social-feed article card with a comment thread, composed from `base-card`, `base-avatar`, `base-icon`, `base-icon-button`, and `base-button`.",
    "usage": "<base-social-widget-article-comments></base-social-widget-article-comments>",
    "keywords": [
      "social-widget-article-comments",
      "widget",
      "social",
      "article",
      "comments"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "d62b71e0bbc4fb89b0c431a61be4b15e6d0e1fba340e907f88f57bc2b16c3ead"
  },
  {
    "name": "social-widget-calendar",
    "tier": "pro",
    "category": "widget",
    "description": "Pro-tier social widget that renders the library's `CalendarComponent` (`<base-calendar>`) horizontally centered via `mx-auto`.",
    "usage": "<base-social-widget-calendar></base-social-widget-calendar>",
    "keywords": [
      "social-widget-calendar",
      "widget",
      "social",
      "calendar"
    ],
    "dependencies": [],
    "registryDependencies": [
      "calendar"
    ],
    "type": "components:ui",
    "digest": "8334a179c2c0d458944e2dc2322a4b9bcb9f6115f0fbfeada8298d5031c9e93b"
  },
  {
    "name": "social-widget-chat",
    "tier": "pro",
    "category": "widget",
    "description": "Static, fixed-height (540px) one-to-one chat conversation mockup rendered inside a `base-card`.",
    "usage": "<base-social-widget-chat></base-social-widget-chat>",
    "keywords": [
      "social-widget-chat",
      "widget",
      "social",
      "chat"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "2399371bf9a7195e1c19482dacdc4c8d2d871ce29dd466e60cf9b3ad1522742d"
  },
  {
    "name": "social-widget-feed-post",
    "tier": "pro",
    "category": "widget",
    "description": "Pre-built social feed post widget: a `base-card` with a header row (avatar, author name, timestamp, and a \"more\" icon button), a fixed-height cover image, and a footer action bar with like, comment, and share buttons showing hardcoded counts.",
    "usage": "<base-social-widget-feed-post></base-social-widget-feed-post>",
    "keywords": [
      "social-widget-feed-post",
      "widget",
      "social",
      "feed",
      "post"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "6e793fa9822a8c6831994db9dd04542bc720291be0265d6b7ab11706b34fdfee"
  },
  {
    "name": "social-widget-follow-suggestions",
    "tier": "pro",
    "category": "widget",
    "description": "Static \"Who to follow\" social suggestion card built from `base-card`, `base-card-header`, and `base-card-body`, with a \"View All\" text button in the header.",
    "usage": "<base-social-widget-follow-suggestions></base-social-widget-follow-suggestions>",
    "keywords": [
      "social-widget-follow-suggestions",
      "widget",
      "social",
      "follow",
      "suggestions"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card"
    ],
    "type": "components:ui",
    "digest": "d53069daa36005830aaf47f9cdd2f409c61272ec8dac33a41589339a356a3be0"
  },
  {
    "name": "social-widget-image-caption",
    "tier": "pro",
    "category": "widget",
    "description": "Social-media style image card (pro tier) rendering a fixed-height (`h-80`) `base-card` with a full-bleed background photo and gradient overlays.",
    "usage": "<base-social-widget-image-caption></base-social-widget-image-caption>",
    "keywords": [
      "social-widget-image-caption",
      "widget",
      "social",
      "image",
      "caption"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "9793f5c9ad48ad78ae4d200bfd5392d9c75d509e75b2ac5f8c337c9d2785397b"
  },
  {
    "name": "social-widget-image-overlay",
    "tier": "pro",
    "category": "widget",
    "description": "Social media post card with a full-bleed background image and gradient overlays (fixed height `h-80`, OnPush).",
    "usage": "<base-social-widget-image-overlay></base-social-widget-image-overlay>",
    "keywords": [
      "social-widget-image-overlay",
      "widget",
      "social",
      "image",
      "overlay"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "02887af8d0db19d23a7e8509b1fc1835cb7947e37ccc7e6810f31300d06798ab"
  },
  {
    "name": "social-widget-inbox",
    "tier": "pro",
    "category": "widget",
    "description": "Compact inbox/message-list card: a header with an \"Inbox\" title, unread-count `base-badge`, and a search icon button, above a divided list of three conversation rows (avatar with online dot, sender name, one-line message preview, timestamp).",
    "usage": "<base-social-widget-inbox></base-social-widget-inbox>",
    "keywords": [
      "social-widget-inbox",
      "widget",
      "social",
      "inbox"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "badge",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "a3735334cba59eb02c4dc9d8932397281be12e9093e3552c60ea348facd088f5"
  },
  {
    "name": "social-widget-platform-stats",
    "tier": "pro",
    "category": "widget",
    "description": "2×2 grid of social-platform stat tiles (Facebook likes, X/Twitter followers, Instagram tags, video subs), each a `base-card` with a platform `base-icon`, a large count, and an uppercase label, with hover lift/shadow effects.",
    "usage": "<base-social-widget-platform-stats></base-social-widget-platform-stats>",
    "keywords": [
      "social-widget-platform-stats",
      "widget",
      "social",
      "platform",
      "stats"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "f28b92be41371ddf06e15051d753cb25ad7f665a29b51b0b2930c0130c3798e9"
  },
  {
    "name": "social-widget-profile-centered",
    "tier": "pro",
    "category": "widget",
    "description": "Centered profile card: gradient cover strip with a settings icon button, an overlapping circular `base-avatar`, name, @handle, an italic bio quote, and a 3-column Posts/Followers/Following stats row divided by hairlines.",
    "usage": "<base-social-widget-profile-centered></base-social-widget-profile-centered>",
    "keywords": [
      "social-widget-profile-centered",
      "widget",
      "social",
      "profile",
      "centered"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "f62ee24d83e606badfffb903239635ca236ea8a4b5981c05661decbf15f58251"
  },
  {
    "name": "social-widget-profile-cover",
    "tier": "pro",
    "category": "widget",
    "description": "Profile card with a photo cover: a 160px lazy-loaded cover image (hover zoom, dark gradient overlay) with the avatar, name, and role overlaid bottom-left.",
    "usage": "<base-social-widget-profile-cover></base-social-widget-profile-cover>",
    "keywords": [
      "social-widget-profile-cover",
      "widget",
      "social",
      "profile",
      "cover"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "ad6f44a1f91616ca55797b8393559c26477ec913db4df9b76671c64149be688e"
  },
  {
    "name": "social-widget-settings-menu",
    "tier": "pro",
    "category": "widget",
    "description": "Account/settings menu card: a blue gradient header with avatar, name, plan label and an \"Upgrade to Pro\" `base-stroked-button`, followed by a divided menu of three rows (Account Settings, Notifications with an unread dot, Privacy) each with a tinted icon bubble, title, subtitle,….",
    "usage": "<base-social-widget-settings-menu></base-social-widget-settings-menu>",
    "keywords": [
      "social-widget-settings-menu",
      "widget",
      "social",
      "settings",
      "menu"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "44cde206e368421052360ae4b8ba1f3b09547db37fe4e71032c125a828fab395"
  },
  {
    "name": "social-widget-text-post",
    "tier": "pro",
    "category": "widget",
    "description": "Text-only social post card: author header (avatar, name, @handle · time, more icon button), a short text body, and a footer bar with reply/repost/like buttons and counts.",
    "usage": "<base-social-widget-text-post></base-social-widget-text-post>",
    "keywords": [
      "social-widget-text-post",
      "widget",
      "social",
      "text",
      "post"
    ],
    "dependencies": [],
    "registryDependencies": [
      "avatar",
      "button",
      "card",
      "icon"
    ],
    "type": "components:ui",
    "digest": "087b8b5e80861813ccc254853827e4cf2d6b68bdc614065ddbea823aa8b3fff8"
  },
  {
    "name": "social-widget-trending-topics",
    "tier": "pro",
    "category": "widget",
    "description": "\"Trending Topics\" card with a wrap of hashtag pill chips (#photography, #uiux, #angular highlighted in blue, #frontend, #webdesign) with hover states.",
    "usage": "<base-social-widget-trending-topics></base-social-widget-trending-topics>",
    "keywords": [
      "social-widget-trending-topics",
      "widget",
      "social",
      "trending",
      "topics"
    ],
    "dependencies": [],
    "registryDependencies": [
      "card"
    ],
    "type": "components:ui",
    "digest": "db6b945505d6f701a442ef7f71167a4dfb45d2f45d259722eda7b329412a345b"
  },
  {
    "name": "social-widget-upload-dropzone",
    "tier": "pro",
    "category": "widget",
    "description": "Thin preset wrapper around `base-file-upload` configured as a multi-file dropzone (\"Drop files here to upload\").",
    "usage": "<base-social-widget-upload-dropzone></base-social-widget-upload-dropzone>",
    "keywords": [
      "social-widget-upload-dropzone",
      "widget",
      "social",
      "upload",
      "dropzone"
    ],
    "dependencies": [],
    "registryDependencies": [
      "file-upload"
    ],
    "type": "components:ui",
    "digest": "61079956b208bef2aa166c462abca11fcc1d123db522c02f7fb07ef7f8e66e9b"
  },
  {
    "name": "speed-dial",
    "tier": "free",
    "category": "component",
    "description": "Free floating action button that expands a stack of secondary actions.",
    "usage": "<base-speed-dial [actions]=\"actions\" (actionClick)=\"onAction($event)\"></base-speed-dial>",
    "keywords": [
      "speed-dial",
      "speed",
      "dial"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "84b04443490aa9aa3f8573c274bbef7f16f47de091dc552d0ec9845b5533dfb6"
  },
  {
    "name": "spinner",
    "tier": "free",
    "category": "component",
    "description": "A standard circular loading spinner component.",
    "usage": "<base-spinner size=\"lg\" color=\"primary\"></base-spinner>",
    "keywords": [
      "spinner"
    ],
    "dependencies": [],
    "registryDependencies": [
      "types"
    ],
    "type": "components:ui",
    "digest": "0e7e86e1155df1996a38a7c5fa14bfa2d2463dd73fec4dcf0b97e765679f323e"
  },
  {
    "name": "splitter",
    "tier": "pro",
    "category": "component",
    "description": "Two-pane resizable layout.",
    "usage": "<base-splitter class=\"h-64\" [(size)]=\"leftPct\">",
    "keywords": [
      "splitter",
      "splitpane"
    ],
    "dependencies": [],
    "registryDependencies": [
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "9384e0dd4af6b7ef2be9cb114b4f8529f1781d7726fd5978fe2de7765279a1e6"
  },
  {
    "name": "star-rating",
    "tier": "free",
    "category": "component",
    "description": "A flexbox container wrapper for `base-star` components.",
    "usage": "<base-star-rating ariaLabel=\"Product rating\">",
    "keywords": [
      "star-rating",
      "star",
      "rating"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "32b91dce14d5e17e1db30fa6952587e9f409db32069947f1733029ddc9a8536d"
  },
  {
    "name": "stat-card",
    "tier": "free",
    "category": "component",
    "description": "Dashboard metric card with two layouts.",
    "usage": "<base-stat-card label=\"Revenue\" value=\"$48,295\" trend=\"+12.5%\" [trendUp]=\"true\" icon=\"dollar-sign\"></base-stat-card>",
    "keywords": [
      "stat-card",
      "stat",
      "card"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "b8f4c15374bbd0a2342b2a521abce0770aef8fddb96701de0f4de6c6d86aea35"
  },
  {
    "name": "stepper",
    "tier": "free",
    "category": "component",
    "description": "A multi-step workflow container component.",
    "usage": "<base-stepper linear hideNavigation (stepChange)=\"onStep($event)\">",
    "keywords": [
      "stepper"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "0f505feea4a3df37635adbb9b8517895b73c245da0534c4f1a60c54aec505e32"
  },
  {
    "name": "tabs",
    "tier": "free",
    "category": "component",
    "description": "A container component for rendering tabbed navigation and content.",
    "usage": "<base-tabs [defaultTab]=\"1\">",
    "keywords": [
      "tabs"
    ],
    "dependencies": [],
    "registryDependencies": [
      "button",
      "icon",
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "57a291f7caa0529a977b9056844a644fa1e9698ee3239b1b47443eab1f62139b"
  },
  {
    "name": "tags-input",
    "tier": "free",
    "category": "component",
    "description": "Tag field bound to `string[]` via Angular Forms.",
    "usage": "<base-tags-input [(ngModel)]=\"labels\" placeholder=\"Add a tag…\"></base-tags-input>",
    "keywords": [
      "tags-input",
      "tags",
      "input",
      "chips",
      "tokens",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "chips",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "d233cb086aba2a5c497ba1b64cccddc9ae50e6f0bd1edc4177d0bd0e661eccd3"
  },
  {
    "name": "theme",
    "tier": "free",
    "category": "component",
    "description": "A service that manages the application's light/dark mode state.",
    "usage": "theme = inject(ThemeService);",
    "keywords": [
      "theme",
      "service"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "0d2f1b3b17bfd4e5b020a250b1cfe47feae09416e4cb1ca5cf93f9e6f2d2e7b7"
  },
  {
    "name": "time-picker",
    "tier": "free",
    "category": "component",
    "description": "Overlay time picker bound to an `HH:mm` string via Angular Forms.",
    "usage": "<base-time-picker [(ngModel)]=\"startTime\" label=\"Start\"></base-time-picker>",
    "keywords": [
      "time-picker",
      "time",
      "picker",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "button-group",
      "icon",
      "input-group",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "82d42b9373a83c6abe3ea21c89fa3fbd3022bc135c387c0686af92b469afd985"
  },
  {
    "name": "timeline",
    "tier": "free",
    "category": "component",
    "description": "Vertical timeline container (`flex flex-col` host) that projects `base-timeline-item` children via `ng-content`.",
    "usage": "<base-timeline>",
    "keywords": [
      "timeline"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "efa1496eb1d3c0f5ae6023ac14a539e77c180a8910c8b4f87e21a6a5265dc479"
  },
  {
    "name": "toast",
    "tier": "free",
    "category": "component",
    "description": "Imperative toast API. Mounts a live region on first use — do not place `base-toast-container` in templates.",
    "usage": "inject(ToastService).success('Saved')",
    "keywords": [
      "toast",
      "snackbar",
      "notification",
      "service"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "safe-timer",
      "types"
    ],
    "type": "components:ui",
    "digest": "1f5f1a967949609bace96a1441df5b0b952dd25ef9f62c085ebf2424569d60dc"
  },
  {
    "name": "toggle",
    "tier": "free",
    "category": "component",
    "description": "A highly customizable toggle/switch component.",
    "usage": "<base-toggle [(ngModel)]=\"isActive\" color=\"success\" size=\"lg\" shape=\"rounded\"></base-toggle>",
    "keywords": [
      "toggle",
      "switch",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "types"
    ],
    "type": "components:ui",
    "digest": "a8eb6d7d331cd68a4021dc199cfc5998b650941c7d6b1941afd3f04c42d0ca77"
  },
  {
    "name": "tooltip",
    "tier": "free",
    "category": "component",
    "description": "An attribute directive that attaches a floating tooltip to any element.",
    "usage": "<button base-tooltip=\"This is a helpful tip\" tooltipPlacement=\"right\" type=\"light\">Hover Me</button>",
    "keywords": [
      "tooltip",
      "hint",
      "popover"
    ],
    "dependencies": [],
    "registryDependencies": [
      "overlay-position",
      "types"
    ],
    "type": "components:ui",
    "digest": "adb3677f95cca491510f48c3b4950fe2f8690670f61d84dc28f4754c84d99d29"
  },
  {
    "name": "tree",
    "tier": "pro",
    "category": "component",
    "description": "A hierarchical tree view component for displaying nested data structures.",
    "usage": "<base-tree [nodes]=\"myFiles\" (nodeClick)=\"onFileSelected($event)\"></base-tree>",
    "keywords": [
      "tree",
      "nested"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "safe-timer",
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "350ea487ff8ef238e6d835c24df8615983287b5f225af4a86080ade101834dfc"
  },
  {
    "name": "tri-state-checkbox",
    "tier": "free",
    "category": "component",
    "description": "Free three-state checkbox that cycles **unchecked → checked → indeterminate** on each click.",
    "usage": "<base-tri-state-checkbox [(ngModel)]=\"status\">Include archived</base-tri-state-checkbox>",
    "keywords": [
      "tri-state-checkbox",
      "tri",
      "state",
      "checkbox",
      "cva",
      "ngModel",
      "forms"
    ],
    "dependencies": [],
    "registryDependencies": [
      "icon",
      "tw-merge",
      "types"
    ],
    "type": "components:ui",
    "digest": "8ae834161f6643a7171cb7ebc2a078b40772c85333b21f6428282d133808b622"
  },
  {
    "name": "tw-merge",
    "tier": "free",
    "category": "component",
    "description": "Merges Tailwind classes safely, resolving conflicts using tailwind-merge and clsx.",
    "usage": "cn('bg-blue-500 p-1', 'bg-red-500') // => 'p-1 bg-red-500'",
    "keywords": [
      "tw-merge",
      "tw",
      "merge",
      "cn",
      "tailwind",
      "clsx"
    ],
    "dependencies": [
      "clsx",
      "tailwind-merge"
    ],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "724a8966d19ab4ff3ae0fc5de84010d721fc5b381b209b7cd2cc52e2873bb3d1"
  },
  {
    "name": "types",
    "tier": "free",
    "category": "component",
    "description": "Shared TypeScript types for Base UI (Angular) color, size, and form contracts.",
    "usage": "import type { ButtonColor } from './types'",
    "keywords": [
      "types",
      "typescript"
    ],
    "dependencies": [],
    "registryDependencies": [
      "scroll-container"
    ],
    "type": "components:ui",
    "digest": "6ab68efbb2623865ba6bea9971693823ed53177dc5c555a8219a879f6e53eb6f"
  },
  {
    "name": "typography",
    "tier": "free",
    "category": "component",
    "description": "Applies standardized heading typography styles to an element.",
    "usage": "<h1 baseHeadingText>Page Title</h1>",
    "keywords": [
      "typography",
      "baseHeadingText"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "28760db02c4844aedf5521e9fe2d5f2870c876b63253e8361ca2019455adbc32"
  },
  {
    "name": "virtual-scroll",
    "tier": "pro",
    "category": "component",
    "description": "Fixed-size virtual scroll viewport for large lists.",
    "usage": "<base-virtual-scroll class=\"block h-96\" [items]=\"users\" [itemSize]=\"56\">",
    "keywords": [
      "virtual-scroll",
      "virtual",
      "scroll",
      "infinite"
    ],
    "dependencies": [
      "@angular/cdk"
    ],
    "registryDependencies": [
      "tw-merge"
    ],
    "type": "components:ui",
    "digest": "45c9ee10a58ec1ebbdd2006fdbc5508ac570fde85ded02ff83d9eb3936aab47d"
  },
  {
    "name": "z-index",
    "tier": "free",
    "category": "component",
    "description": "Centralized z-index scale for fixed-position overlays.",
    "usage": "npx base-ui-cli add z-index",
    "keywords": [
      "z-index",
      "index"
    ],
    "dependencies": [],
    "registryDependencies": [],
    "type": "components:ui",
    "digest": "4648586fb9c8ea0d64f587c9d8c548c61dbe80a6826258a2734905fa8146e1ee"
  }
]