{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "meeting-agenda-notes",
  "title": "Meeting Agenda Notes",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/meeting-agenda-notes/meeting-agenda-notes.component.ts",
      "content": "// Linear and Notion style structured meeting document with attendee avatars, timeboxed\n// agenda topics, rich discussion notes, interactive action items checklist, and key\n// decisions log. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport {\n  Calendar,\n  Check,\n  CheckCircle2,\n  Clock,\n  Copy,\n  ExternalLink,\n  FileDown,\n  FileSpreadsheet,\n  FileText,\n  GitPullRequest,\n  ListOrdered,\n  Lock,\n  LucideAngularModule,\n  Plus,\n  Radio,\n  UserCheck,\n  Video,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiAvatarComponent, UiAvatarFallbackComponent } from '@/ui/avatar/avatar.component'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardDescriptionComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiCheckboxComponent } from '@/ui/checkbox/checkbox.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\n\nexport interface Attendee {\n  id: string\n  name: string\n  role: string\n  initials: string\n  isHost?: boolean\n  status: 'online' | 'busy' | 'away'\n  colorClass: string\n}\n\nexport interface AgendaTopic {\n  id: string\n  number: number\n  title: string\n  duration: string\n  timeRange: string\n  lead: string\n  leadInitials: string\n  status: 'completed' | 'active' | 'upcoming'\n  summary: string\n  tags: string[]\n}\n\nexport interface NoteEntry {\n  id: string\n  author: string\n  authorInitials: string\n  authorColor: string\n  timestamp: string\n  content: string\n  tag: string\n}\n\nexport interface ActionItem {\n  id: string\n  title: string\n  assignee: string\n  assigneeInitials: string\n  assigneeColor: string\n  dueDate: string\n  priority: 'Urgent' | 'High' | 'Medium' | 'Low'\n  completed: boolean\n}\n\nexport interface KeyDecision {\n  id: string\n  number: number\n  title: string\n  context: string\n  status: 'Adopted' | 'Under Review'\n  decidedBy: string\n  time: string\n}\n\nconst noteTagOptions = ['#architecture', '#pipeline', '#decision', '#action']\nconst priorityOptions: ActionItem['priority'][] = ['Urgent', 'High', 'Medium', 'Low']\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-meeting-agenda-notes, [ui-meeting-agenda-notes]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardDescriptionComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiCheckboxComponent,\n    UiSeparatorComponent,\n  ],\n  template: `\n    <div data-slot=\"meeting-agenda-notes\" [class]=\"rootClass\">\n      <!-- Meeting Header Card -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-content class=\"space-y-5 p-4 sm:p-6\">\n          <div class=\"flex flex-wrap items-center justify-between gap-3\">\n            <div class=\"flex flex-wrap items-center gap-2\">\n              <span ui-badge variant=\"secondary\" class=\"gap-1.5 px-2.5 py-1 text-xs font-medium\">\n                <span class=\"bg-destructive size-2 animate-pulse rounded-full\"></span>\n                <span class=\"font-mono tracking-tight tabular-nums\">REC · 45:12</span>\n              </span>\n              <span ui-badge variant=\"outline\" class=\"text-muted-foreground text-xs\"> Architecture Sync </span>\n              <span ui-badge variant=\"outline\" class=\"text-muted-foreground text-xs\"> Bi-Weekly Cadence </span>\n            </div>\n\n            <div class=\"flex flex-wrap items-center gap-2\">\n              <button\n                ui-button\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"h-8 gap-1.5 text-xs shadow-xs\"\n                (click)=\"exportNotesMarkdown()\"\n              >\n                @if (copiedNotes()) {\n                  <lucide-icon [img]=\"Check\" class=\"text-success size-3.5\" />\n                } @else {\n                  <lucide-icon [img]=\"FileDown\" class=\"text-muted-foreground size-3.5\" />\n                }\n                {{ copiedNotes() ? 'Notes Copied!' : 'Export Notes Markdown' }}\n              </button>\n              <button ui-button size=\"sm\" class=\"h-8 gap-1.5 text-xs shadow-xs\">\n                <lucide-icon [img]=\"Video\" class=\"size-3.5\" />\n                Join Call\n              </button>\n            </div>\n          </div>\n\n          <div class=\"space-y-2\">\n            <h1 class=\"text-foreground text-xl font-bold tracking-tight sm:text-2xl\">\n              Q3 Product Architecture & Monorepo Scaling Sync\n            </h1>\n\n            <div class=\"text-muted-foreground flex flex-wrap items-center gap-x-5 gap-y-2 text-xs\">\n              <div class=\"flex items-center gap-1.5\">\n                <lucide-icon [img]=\"Calendar\" class=\"text-foreground/70 size-3.5\" />\n                <span class=\"text-foreground/90 font-medium\">Friday, Aug 21, 2026</span>\n                <span>·</span>\n                <span class=\"font-mono tabular-nums\">14:00 - 15:00 PST</span>\n              </div>\n              <div class=\"flex items-center gap-1.5\">\n                <lucide-icon [img]=\"Clock\" class=\"text-foreground/70 size-3.5\" />\n                <span ui-badge variant=\"secondary\" class=\"px-2 py-0.5 font-mono text-xs tabular-nums\">\n                  60 mins · 45 mins elapsed\n                </span>\n              </div>\n              <div class=\"flex items-center gap-1.5\">\n                <lucide-icon [img]=\"Video\" class=\"text-foreground/70 size-3.5\" />\n                <button\n                  type=\"button\"\n                  class=\"text-foreground hover:text-primary inline-flex min-h-6 cursor-pointer items-center gap-1 font-medium transition-colors\"\n                  (click)=\"copyRoomLink()\"\n                >\n                  <span>Zoom Room #482-901</span>\n                  @if (copiedRoomLink()) {\n                    <lucide-icon [img]=\"Check\" class=\"text-success size-3\" />\n                  } @else {\n                    <lucide-icon [img]=\"Copy\" class=\"text-muted-foreground size-3\" />\n                  }\n                </button>\n              </div>\n            </div>\n          </div>\n\n          <div ui-separator class=\"bg-border/60\"></div>\n\n          <div class=\"flex flex-col justify-between gap-4 sm:flex-row sm:items-center\">\n            <div class=\"space-y-2\">\n              <div class=\"flex items-center gap-2\">\n                <span class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\"> Attendees </span>\n                <span ui-badge variant=\"secondary\" class=\"h-4.5 px-1.5 py-0 font-mono text-xs tabular-nums\">\n                  6 Present\n                </span>\n              </div>\n\n              <div class=\"flex flex-wrap items-center gap-2.5\">\n                @for (attendee of attendees(); track attendee.id) {\n                  <div\n                    class=\"group border-border/80 bg-background/80 hover:border-border hover:bg-muted/40 relative flex items-center gap-2 rounded-full border py-1 pr-2.5 pl-1 shadow-xs transition-colors\"\n                  >\n                    <div class=\"relative flex items-center justify-center\">\n                      <ui-avatar size=\"sm\" class=\"size-6 text-xs\">\n                        <ui-avatar-fallback [class]=\"attendee.colorClass\">{{ attendee.initials }}</ui-avatar-fallback>\n                      </ui-avatar>\n                      <span\n                        class=\"border-background bg-success absolute -right-0.5 -bottom-0.5 size-2 rounded-full border-2\"\n                        title=\"Present in meeting\"\n                      ></span>\n                    </div>\n                    <span class=\"text-foreground text-xs font-medium\">{{ attendee.name }}</span>\n                    @if (attendee.isHost) {\n                      <span ui-badge variant=\"default\" class=\"h-4 px-1 text-xs leading-none font-semibold uppercase\">\n                        Host\n                      </span>\n                    }\n                  </div>\n                }\n              </div>\n            </div>\n\n            <div\n              class=\"border-border/60 bg-muted/30 text-muted-foreground hidden items-center gap-3 rounded-lg border p-2.5 text-xs xl:flex\"\n            >\n              <lucide-icon [img]=\"Radio\" class=\"text-success size-4 animate-pulse\" />\n              <div>\n                <div class=\"text-foreground font-medium\">Live Transcription</div>\n                <div class=\"text-muted-foreground font-mono\">Whisper-v3 Active</div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- 2-Column Meeting Workspace -->\n      <div class=\"grid grid-cols-1 gap-6 lg:grid-cols-12\">\n        <!-- Left Panel: Timeboxed Agenda & Rich Notes (8 cols) -->\n        <div class=\"space-y-6 lg:col-span-7 xl:col-span-8\">\n          <div ui-card class=\"border-border bg-card shadow-xs\">\n            <div ui-card-header class=\"px-5 pt-5 pb-3 sm:px-6\">\n              <div class=\"flex flex-wrap items-center justify-between gap-2\">\n                <div class=\"flex items-center gap-2\">\n                  <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n                    <lucide-icon [img]=\"ListOrdered\" class=\"size-4\" />\n                  </div>\n                  <div>\n                    <h3 ui-card-title class=\"text-base font-semibold\">Timeboxed Agenda</h3>\n                    <p ui-card-description class=\"text-xs\">4 topics structured with real-time progress indicators</p>\n                  </div>\n                </div>\n                <span ui-badge variant=\"outline\" class=\"text-muted-foreground font-mono text-xs tabular-nums\">\n                  60m Total · 45m Elapsed (75%)\n                </span>\n              </div>\n              <div class=\"bg-muted mt-3 h-1.5 w-full overflow-hidden rounded-full\">\n                <div class=\"bg-primary h-full w-3/4 rounded-full\"></div>\n              </div>\n            </div>\n\n            <div ui-card-content class=\"space-y-3 p-5 pt-2 sm:p-6\">\n              @for (topic of agendaTopics(); track topic.id) {\n                <div [class]=\"topicCardClass(topic.status)\">\n                  <div class=\"flex flex-col justify-between gap-3 sm:flex-row sm:items-start\">\n                    <div class=\"flex-1 space-y-1.5\">\n                      <div class=\"flex flex-wrap items-center gap-2\">\n                        <span\n                          class=\"bg-muted text-muted-foreground flex size-5 items-center justify-center rounded-full font-mono text-xs font-semibold\"\n                        >\n                          {{ topic.number }}\n                        </span>\n                        <h3 class=\"text-foreground text-sm font-semibold\">{{ topic.title }}</h3>\n                        @if (topic.status === 'completed') {\n                          <span ui-badge variant=\"success\" class=\"gap-1 text-xs\">\n                            <lucide-icon [img]=\"CheckCircle2\" class=\"text-success size-3\" />\n                            Completed\n                          </span>\n                        } @else if (topic.status === 'active') {\n                          <span ui-badge variant=\"default\" class=\"gap-1.5 text-xs font-medium\">\n                            <span class=\"bg-primary-foreground size-1.5 rounded-full\"></span>\n                            Current Topic\n                          </span>\n                        } @else {\n                          <span ui-badge variant=\"outline\" class=\"text-muted-foreground gap-1 text-xs\">\n                            <lucide-icon [img]=\"Clock\" class=\"size-3\" />\n                            Upcoming\n                          </span>\n                        }\n                      </div>\n                      <p class=\"text-muted-foreground text-xs leading-relaxed\">{{ topic.summary }}</p>\n                      <div class=\"flex flex-wrap items-center gap-1.5 pt-1\">\n                        @for (tag of topic.tags; track tag) {\n                          <span\n                            ui-badge\n                            variant=\"secondary\"\n                            class=\"text-muted-foreground px-1.5 py-0 text-xs font-normal\"\n                          >\n                            {{ tag }}\n                          </span>\n                        }\n                      </div>\n                    </div>\n                    <div\n                      class=\"border-border/50 flex shrink-0 items-center justify-between gap-1.5 border-t pt-2 sm:flex-col sm:items-end sm:border-t-0 sm:pt-0\"\n                    >\n                      <div class=\"flex items-center gap-1.5\">\n                        <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">{{ topic.duration }}</span>\n                        <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">{{ topic.timeRange }}</span>\n                      </div>\n                      <div class=\"flex items-center gap-1.5\">\n                        <ui-avatar size=\"xs\" class=\"size-4.5 text-xs\">\n                          <ui-avatar-fallback class=\"bg-muted text-muted-foreground text-xs font-semibold\">\n                            {{ topic.leadInitials }}\n                          </ui-avatar-fallback>\n                        </ui-avatar>\n                        <span class=\"text-foreground/80 text-xs font-medium\">{{ topic.lead }}</span>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              }\n            </div>\n          </div>\n\n          <!-- Discussion Notes & Technical Blueprint -->\n          <div ui-card class=\"border-border bg-card shadow-xs\">\n            <div ui-card-header class=\"px-5 pt-5 pb-3 sm:px-6\">\n              <div class=\"flex flex-wrap items-center justify-between gap-2\">\n                <div class=\"flex items-center gap-2\">\n                  <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n                    <lucide-icon [img]=\"FileText\" class=\"size-4\" />\n                  </div>\n                  <div>\n                    <h3 ui-card-title class=\"text-base font-semibold\">Discussion Notes & Technical Blueprint</h3>\n                    <p ui-card-description class=\"text-xs\">Structured architectural takeaways and runtime benchmarks</p>\n                  </div>\n                </div>\n                <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">\n                  Last edited 2m ago by Elena Rostova\n                </span>\n              </div>\n            </div>\n\n            <div ui-card-content class=\"space-y-5 p-5 pt-2 sm:p-6\">\n              <div class=\"border-border bg-muted/40 space-y-1 rounded-lg border p-3.5\">\n                <div class=\"text-foreground flex items-center gap-1.5 text-xs font-semibold\">\n                  <lucide-icon [img]=\"FileText\" class=\"text-primary size-3.5\" />\n                  Core Monorepo Mandate\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Components are the product, not an npm library. Consumers run\n                  <code class=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono font-medium\"\n                    >npx shadcn-vue add &lt;url&gt;</code\n                  >\n                  and own the code directly. All block primitives must compose raw layouts without baking rigid data\n                  arrays into primitives.\n                </p>\n              </div>\n\n              <div class=\"space-y-2.5\">\n                <h4 class=\"text-muted-foreground text-xs font-bold tracking-wider uppercase\">\n                  Architectural Takeaways\n                </h4>\n                <div class=\"space-y-2\">\n                  <div class=\"border-border/60 bg-card flex items-start gap-2.5 rounded-md border p-3 shadow-xs\">\n                    <div\n                      class=\"bg-success/10 text-success mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full\"\n                    >\n                      <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                    </div>\n                    <div class=\"space-y-0.5 text-xs\">\n                      <span class=\"text-foreground font-semibold\">Zero Runtime Overhead Delivery Model</span>\n                      <p class=\"text-muted-foreground leading-relaxed\">\n                        Zero build-time vendor lock-in. Primitives handle focus rings, keyboard navigation, and\n                        accessibility semantics while leaving styling tokens fully customizable by end consumers.\n                      </p>\n                    </div>\n                  </div>\n                  <div class=\"border-border/60 bg-card flex items-start gap-2.5 rounded-md border p-3 shadow-xs\">\n                    <div\n                      class=\"bg-info/10 text-info mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full\"\n                    >\n                      <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                    </div>\n                    <div class=\"space-y-0.5 text-xs\">\n                      <span class=\"text-foreground font-semibold\">Perceptually Uniform OKLCH Palette</span>\n                      <p class=\"text-muted-foreground leading-relaxed\">\n                        Color spaces mapped directly to standard OKLCH coordinates via Tailwind CSS v4\n                        <code class=\"bg-muted text-foreground rounded px-1 py-0.5 font-mono\">&#64;theme inline</code>\n                        tokens, ensuring high-fidelity rendering across Apple P3 displays.\n                      </p>\n                    </div>\n                  </div>\n                  <div class=\"border-border/60 bg-card flex items-start gap-2.5 rounded-md border p-3 shadow-xs\">\n                    <div\n                      class=\"bg-primary/10 text-primary mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full\"\n                    >\n                      <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                    </div>\n                    <div class=\"space-y-0.5 text-xs\">\n                      <span class=\"text-foreground font-semibold\">Flat Registry Dependencies Graph</span>\n                      <p class=\"text-muted-foreground leading-relaxed\">\n                        All\n                        <code class=\"bg-muted text-foreground rounded px-1 py-0.5 font-mono\">registryDependencies</code>\n                        declare flat URLs (<code class=\"bg-muted text-foreground rounded px-1 py-0.5 font-mono\"\n                          >https://uipkge.dev/r/button.json</code\n                        >), eliminating nested resolver locks in downstream CLIs.\n                      </p>\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <div class=\"space-y-2\">\n                <div class=\"flex items-center justify-between\">\n                  <h4 class=\"text-muted-foreground text-xs font-bold tracking-wider uppercase\">Manifest Blueprint</h4>\n                  <button\n                    type=\"button\"\n                    class=\"text-muted-foreground hover:text-foreground flex min-h-6 cursor-pointer items-center gap-1 text-xs transition-colors\"\n                    (click)=\"copyCodeSnippet()\"\n                  >\n                    @if (copiedSnippet()) {\n                      <lucide-icon [img]=\"Check\" class=\"text-success size-3\" />\n                    } @else {\n                      <lucide-icon [img]=\"Copy\" class=\"size-3\" />\n                    }\n                    <span class=\"font-mono text-xs\">{{ copiedSnippet() ? 'Copied' : 'Copy Manifest' }}</span>\n                  </button>\n                </div>\n                <div\n                  class=\"border-border/80 bg-muted/60 relative overflow-hidden rounded-lg border p-3 font-mono text-xs\"\n                >\n                  <pre\n                    class=\"text-foreground/90 overflow-x-auto leading-relaxed\"\n                  ><code><span class=\"text-primary font-semibold\">export default</span> <span class=\"text-info\">defineRegistryItem</span>({{'{'}}\n  name: <span class=\"text-success\">'meeting-agenda-notes'</span>,\n  type: <span class=\"text-success\">'registry:block'</span>,\n  categories: [<span class=\"text-success\">'productivity'</span>, <span class=\"text-success\">'collaboration'</span>],\n  dependencies: [<span class=\"text-success\">'lucide-vue-next'</span>],\n  registryDependencies: [\n    <span class=\"text-warning\">'https://uipkge.dev/r/avatar.json'</span>,\n    <span class=\"text-warning\">'https://uipkge.dev/r/badge.json'</span>,\n    <span class=\"text-warning\">'https://uipkge.dev/r/button.json'</span>,\n    <span class=\"text-warning\">'https://uipkge.dev/r/card.json'</span>,\n    <span class=\"text-warning\">'https://uipkge.dev/r/checkbox.json'</span>,\n    <span class=\"text-warning\">'https://uipkge.dev/r/separator.json'</span>,\n  ],\n  {{'}'}})</code></pre>\n                </div>\n              </div>\n\n              <div class=\"space-y-3 pt-2\">\n                <h4 class=\"text-muted-foreground text-xs font-bold tracking-wider uppercase\">Live Annotations</h4>\n                <div class=\"space-y-2.5\">\n                  @for (note of liveNotes(); track note.id) {\n                    <div class=\"border-border/60 bg-muted/20 flex items-start gap-2.5 rounded-lg border p-3\">\n                      <ui-avatar size=\"sm\" class=\"size-6 shrink-0 text-xs\">\n                        <ui-avatar-fallback [class]=\"note.authorColor\">{{ note.authorInitials }}</ui-avatar-fallback>\n                      </ui-avatar>\n                      <div class=\"flex-1 space-y-1\">\n                        <div class=\"flex items-center justify-between gap-2\">\n                          <div class=\"flex items-center gap-1.5\">\n                            <span class=\"text-foreground text-xs font-semibold\">{{ note.author }}</span>\n                            <span ui-badge variant=\"outline\" class=\"text-muted-foreground px-1 py-0 font-mono text-xs\">\n                              {{ note.tag }}\n                            </span>\n                          </div>\n                          <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">{{ note.timestamp }}</span>\n                        </div>\n                        <p class=\"text-foreground/90 text-xs leading-relaxed\">{{ note.content }}</p>\n                      </div>\n                    </div>\n                  }\n                </div>\n\n                <div class=\"flex flex-col items-stretch gap-2 pt-2 sm:flex-row sm:items-center\">\n                  <div class=\"relative flex-1\">\n                    <input\n                      [value]=\"newNoteDraft()\"\n                      (input)=\"newNoteDraft.set($any($event.target).value)\"\n                      type=\"text\"\n                      placeholder=\"Append architecture note or observation...\"\n                      class=\"border-input bg-background text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/40 h-8 w-full rounded-md border px-3 py-1 text-xs shadow-xs outline-none focus-visible:ring-2\"\n                      (keydown.enter)=\"addNote()\"\n                    />\n                  </div>\n                  <div class=\"flex items-center gap-1.5\">\n                    <select\n                      [value]=\"newNoteTag()\"\n                      (change)=\"newNoteTag.set($any($event.target).value)\"\n                      class=\"border-input bg-background text-foreground focus-visible:border-ring focus-visible:ring-ring/40 h-8 rounded-md border px-2 text-xs shadow-xs outline-none focus-visible:ring-2\"\n                    >\n                      @for (opt of noteTags; track opt) {\n                        <option [value]=\"opt\">{{ opt }}</option>\n                      }\n                    </select>\n                    <button\n                      ui-button\n                      size=\"sm\"\n                      variant=\"secondary\"\n                      class=\"h-8 gap-1 text-xs shadow-xs\"\n                      [disabled]=\"!newNoteDraft().trim()\"\n                      (click)=\"addNote()\"\n                    >\n                      <lucide-icon [img]=\"Plus\" class=\"size-3.5\" />\n                      Post\n                    </button>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- Right Sidebar: Action Items, Decisions, & Meta -->\n        <div class=\"space-y-6 lg:col-span-5 xl:col-span-4\">\n          <div ui-card class=\"border-border bg-card shadow-xs\">\n            <div ui-card-header class=\"px-5 pt-5 pb-3\">\n              <div class=\"flex items-center justify-between gap-2\">\n                <div class=\"flex items-center gap-2\">\n                  <div class=\"bg-success/10 text-success flex size-7 items-center justify-center rounded-md\">\n                    <lucide-icon [img]=\"UserCheck\" class=\"size-4\" />\n                  </div>\n                  <div>\n                    <h3 ui-card-title class=\"text-base font-semibold\">Action Items</h3>\n                    <p ui-card-description class=\"text-xs\">Assigned deliverables & deadlines</p>\n                  </div>\n                </div>\n                <span ui-badge variant=\"secondary\" class=\"font-mono text-xs tabular-nums\">\n                  {{ completedTasksCount() }}/{{ totalTasksCount() }} Done ({{ completionPercentage() }}%)\n                </span>\n              </div>\n              <div class=\"bg-muted mt-3 h-1.5 w-full overflow-hidden rounded-full\">\n                <div\n                  class=\"bg-success h-full rounded-full transition-[width] duration-300\"\n                  [style.width]=\"completionPercentage() + '%'\"\n                ></div>\n              </div>\n            </div>\n\n            <div ui-card-content class=\"space-y-4 p-5 pt-2\">\n              <div class=\"space-y-2.5\">\n                @for (task of actionItems(); track task.id) {\n                  <div [class]=\"taskCardClass(task.completed)\">\n                    <div class=\"pt-0.5\">\n                      <ui-checkbox\n                        [id]=\"task.id\"\n                        [checked]=\"task.completed\"\n                        (checkedChange)=\"toggleTask(task.id, !!$event)\"\n                      />\n                    </div>\n                    <div class=\"flex-1 space-y-1.5\">\n                      <label [for]=\"task.id\" [class]=\"taskLabelClass(task.completed)\">\n                        {{ task.title }}\n                      </label>\n                      <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-1.5 text-xs\">\n                        <div class=\"flex items-center gap-1.5\">\n                          <ui-avatar size=\"xs\" class=\"size-4 text-xs\">\n                            <ui-avatar-fallback [class]=\"task.assigneeColor + ' text-xs'\">\n                              {{ task.assigneeInitials }}\n                            </ui-avatar-fallback>\n                          </ui-avatar>\n                          <span class=\"text-foreground/80 text-xs font-medium\">{{ task.assignee }}</span>\n                        </div>\n                        <div class=\"flex items-center gap-1.5\">\n                          <span\n                            ui-badge\n                            [variant]=\"taskPriorityVariant(task.priority)\"\n                            class=\"h-4.5 px-1.5 text-xs font-semibold uppercase\"\n                          >\n                            {{ task.priority }}\n                          </span>\n                          <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">{{ task.dueDate }}</span>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                }\n              </div>\n\n              <div class=\"border-border/80 bg-muted/20 space-y-2 rounded-lg border border-dashed p-3\">\n                <input\n                  [value]=\"newTaskTitle()\"\n                  (input)=\"newTaskTitle.set($any($event.target).value)\"\n                  type=\"text\"\n                  placeholder=\"New action item description...\"\n                  class=\"border-input bg-background text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring h-7 w-full rounded border px-2.5 text-xs shadow-xs outline-none focus-visible:ring-1\"\n                  (keydown.enter)=\"addTask()\"\n                />\n                <div class=\"flex items-center justify-between gap-2\">\n                  <select\n                    [value]=\"newTaskAssignee()\"\n                    (change)=\"newTaskAssignee.set($any($event.target).value)\"\n                    class=\"border-input bg-background text-foreground h-7 rounded border px-2 text-xs shadow-xs outline-none\"\n                  >\n                    @for (att of attendees(); track att.id) {\n                      <option [value]=\"att.name\">{{ att.name }}</option>\n                    }\n                  </select>\n                  <select\n                    [value]=\"newTaskPriority()\"\n                    (change)=\"newTaskPriority.set(priorityFromString($any($event.target).value))\"\n                    class=\"border-input bg-background text-foreground h-7 rounded border px-2 text-xs shadow-xs outline-none\"\n                  >\n                    @for (p of priorities; track p) {\n                      <option [value]=\"p\">{{ p }}</option>\n                    }\n                  </select>\n                  <button\n                    ui-button\n                    size=\"xs\"\n                    variant=\"default\"\n                    class=\"h-7 gap-1 text-xs\"\n                    [disabled]=\"!newTaskTitle().trim()\"\n                    (click)=\"addTask()\"\n                  >\n                    <lucide-icon [img]=\"Plus\" class=\"size-3\" />\n                    Add\n                  </button>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Key Decisions Log Card -->\n          <div ui-card class=\"border-border bg-card shadow-xs\">\n            <div ui-card-header class=\"px-5 pt-5 pb-3\">\n              <div class=\"flex items-center justify-between gap-2\">\n                <div class=\"flex items-center gap-2\">\n                  <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n                    <lucide-icon [img]=\"CheckCircle2\" class=\"size-4\" />\n                  </div>\n                  <div>\n                    <h3 ui-card-title class=\"text-base font-semibold\">Key Decisions Log</h3>\n                    <p ui-card-description class=\"text-xs\">Recorded architectural consensus</p>\n                  </div>\n                </div>\n                <span ui-badge variant=\"outline\" class=\"text-muted-foreground font-mono text-xs tabular-nums\">\n                  {{ keyDecisions().length }} Recorded\n                </span>\n              </div>\n            </div>\n\n            <div ui-card-content class=\"space-y-3 p-5 pt-2\">\n              @for (decision of keyDecisions(); track decision.id) {\n                <div class=\"border-border/80 bg-card space-y-2 rounded-lg border p-3.5 shadow-xs\">\n                  <div class=\"flex items-start justify-between gap-2\">\n                    <div class=\"flex items-center gap-1.5\">\n                      <span class=\"text-muted-foreground font-mono text-xs font-bold\"> D-0{{ decision.number }} </span>\n                      <span\n                        ui-badge\n                        [variant]=\"decision.status === 'Adopted' ? 'success' : 'warning'\"\n                        class=\"h-4.5 px-1.5 text-xs font-semibold uppercase\"\n                      >\n                        {{ decision.status }}\n                      </span>\n                    </div>\n                    <span class=\"text-muted-foreground font-mono text-xs tabular-nums\">{{ decision.time }}</span>\n                  </div>\n                  <h4 class=\"text-foreground text-xs leading-snug font-semibold\">{{ decision.title }}</h4>\n                  <p class=\"text-muted-foreground text-xs leading-relaxed\">{{ decision.context }}</p>\n                  <div class=\"text-muted-foreground border-border/40 flex items-center gap-1 border-t pt-1 text-xs\">\n                    <span>Decided by:</span>\n                    <span class=\"text-foreground font-medium\">{{ decision.decidedBy }}</span>\n                  </div>\n                </div>\n              }\n            </div>\n          </div>\n\n          <!-- Meeting Metadata & Shared Resources Card -->\n          <div ui-card class=\"border-border bg-card shadow-xs\">\n            <div ui-card-header class=\"px-5 pt-4 pb-2\">\n              <h3 ui-card-title class=\"text-muted-foreground text-xs font-bold tracking-wider uppercase\">\n                Session Resources & Security\n              </h3>\n            </div>\n            <div ui-card-content class=\"space-y-3 p-5 pt-1\">\n              <div class=\"space-y-2 text-xs\">\n                <div class=\"text-muted-foreground flex items-center justify-between\">\n                  <span class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Lock\" class=\"text-foreground/70 size-3.5\" />\n                    Access Level\n                  </span>\n                  <span class=\"text-foreground font-medium\">Internal (SSO Auth)</span>\n                </div>\n                <div class=\"text-muted-foreground flex items-center justify-between\">\n                  <span class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Calendar\" class=\"text-foreground/70 size-3.5\" />\n                    Next Sync\n                  </span>\n                  <span class=\"text-foreground font-mono font-medium tabular-nums\">Aug 28 · 14:00 PST</span>\n                </div>\n              </div>\n              <div ui-separator class=\"bg-border/60\"></div>\n              <div class=\"space-y-1.5\">\n                <span class=\"text-muted-foreground text-xs font-semibold\">Attached Artifacts</span>\n                <div class=\"space-y-1\">\n                  <a\n                    href=\"#artifacts\"\n                    class=\"text-foreground hover:bg-muted group flex items-center justify-between rounded-md p-1.5 text-xs transition-colors\"\n                  >\n                    <span class=\"flex items-center gap-2\">\n                      <lucide-icon [img]=\"FileSpreadsheet\" class=\"text-success size-3.5\" />\n                      <span>OKLCH Token Audit Matrix.xlsx</span>\n                    </span>\n                    <lucide-icon\n                      [img]=\"ExternalLink\"\n                      class=\"text-muted-foreground group-hover:text-foreground size-3 transition-colors\"\n                    />\n                  </a>\n                  <a\n                    href=\"#artifacts\"\n                    class=\"text-foreground hover:bg-muted group flex items-center justify-between rounded-md p-1.5 text-xs transition-colors\"\n                  >\n                    <span class=\"flex items-center gap-2\">\n                      <lucide-icon [img]=\"GitPullRequest\" class=\"text-chart-2 size-3.5\" />\n                      <span>PR #412: Flat Dependency Resolution</span>\n                    </span>\n                    <lucide-icon\n                      [img]=\"ExternalLink\"\n                      class=\"text-muted-foreground group-hover:text-foreground size-3 transition-colors\"\n                    />\n                  </a>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiMeetingAgendaNotesComponent {\n  protected readonly Calendar = Calendar\n  protected readonly Check = Check\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Clock = Clock\n  protected readonly Copy = Copy\n  protected readonly ExternalLink = ExternalLink\n  protected readonly FileDown = FileDown\n  protected readonly FileSpreadsheet = FileSpreadsheet\n  protected readonly FileText = FileText\n  protected readonly GitPullRequest = GitPullRequest\n  protected readonly ListOrdered = ListOrdered\n  protected readonly Lock = Lock\n  protected readonly Plus = Plus\n  protected readonly Radio = Radio\n  protected readonly UserCheck = UserCheck\n  protected readonly Video = Video\n\n  protected readonly noteTags = noteTagOptions\n  protected readonly priorities = priorityOptions\n\n  @Input('class') className?: string\n\n  readonly copiedRoomLink = signal(false)\n  readonly copiedNotes = signal(false)\n  readonly copiedSnippet = signal(false)\n\n  readonly attendees = signal<Attendee[]>([\n    {\n      id: 'att-1',\n      name: 'Elena Rostova',\n      role: 'Lead Architect',\n      initials: 'ER',\n      isHost: true,\n      status: 'online',\n      colorClass: 'bg-primary/15 text-primary font-semibold',\n    },\n    {\n      id: 'att-2',\n      name: 'Marcus Vance',\n      role: 'Staff Engineer',\n      initials: 'MV',\n      status: 'online',\n      colorClass: 'bg-info/15 text-info font-semibold',\n    },\n    {\n      id: 'att-3',\n      name: 'Sarah Jenkins',\n      role: 'Product Lead',\n      initials: 'SJ',\n      status: 'online',\n      colorClass: 'bg-chart-1/15 text-chart-1 font-semibold',\n    },\n    {\n      id: 'att-4',\n      name: 'David Chen',\n      role: 'Core Infra',\n      initials: 'DC',\n      status: 'online',\n      colorClass: 'bg-warning/15 text-warning font-semibold',\n    },\n    {\n      id: 'att-5',\n      name: 'Sofia Rossi',\n      role: 'Design Systems',\n      initials: 'SR',\n      status: 'online',\n      colorClass: 'bg-destructive/15 text-destructive font-semibold',\n    },\n    {\n      id: 'att-6',\n      name: 'Alex Rivera',\n      role: 'DevRel',\n      initials: 'AR',\n      status: 'online',\n      colorClass: 'bg-chart-2/15 text-chart-2 font-semibold',\n    },\n  ])\n\n  readonly agendaTopics = signal<AgendaTopic[]>([\n    {\n      id: 'topic-1',\n      number: 1,\n      title: 'OKLCH Token Migration Status',\n      duration: '15m',\n      timeRange: '14:00 - 14:15',\n      lead: 'Elena Rostova',\n      leadInitials: 'ER',\n      status: 'completed',\n      summary:\n        'Audit of 140+ CSS custom properties completed. Confirmed wide-gamut Display P3 color spaces with zero degradation in legacy sRGB browsers.',\n      tags: ['Design System', 'Tailwind v4'],\n    },\n    {\n      id: 'topic-2',\n      number: 2,\n      title: 'Dual-Framework AST Verification Pipeline',\n      duration: '20m',\n      timeRange: '14:15 - 14:35',\n      lead: 'Marcus Vance',\n      leadInitials: 'MV',\n      status: 'active',\n      summary:\n        'Live AST comparisons between Vue SFC templates and React TSX JSX trees. Validating component prop parity, variant definitions, and event handlers automatically in CI.',\n      tags: ['Compiler', 'CI/CD', 'Parity'],\n    },\n    {\n      id: 'topic-3',\n      number: 3,\n      title: '100-Block Registry Expansion Strategy',\n      duration: '15m',\n      timeRange: '14:35 - 14:50',\n      lead: 'Sarah Jenkins',\n      leadInitials: 'SJ',\n      status: 'upcoming',\n      summary:\n        'Prioritization matrix for upcoming vertical blocks: Healthcare appointment management, HRMS payroll ledger, and DevTools query workbench.',\n      tags: ['Roadmap', 'Blocks'],\n    },\n    {\n      id: 'topic-4',\n      number: 4,\n      title: 'Q&A & Retrospective',\n      duration: '10m',\n      timeRange: '14:50 - 15:00',\n      lead: 'Open Floor',\n      leadInitials: 'OF',\n      status: 'upcoming',\n      summary:\n        'Consensus check on flat URL dependency format, open architectural blockers, and sprint task assignment review.',\n      tags: ['Open Floor', 'Review'],\n    },\n  ])\n\n  readonly liveNotes = signal<NoteEntry[]>([\n    {\n      id: 'note-1',\n      author: 'Marcus Vance',\n      authorInitials: 'MV',\n      authorColor: 'bg-info/15 text-info',\n      timestamp: '14:22 PST',\n      content:\n        'The AST parity checker runs under 340ms locally with caching. We will add a strict blocking threshold in GitHub Actions.',\n      tag: '#pipeline',\n    },\n    {\n      id: 'note-2',\n      author: 'Sofia Rossi',\n      authorInitials: 'SR',\n      authorColor: 'bg-destructive/15 text-destructive',\n      timestamp: '14:31 PST',\n      content:\n        'All color tokens now satisfy WCAG AAA for text-foreground and AA for muted-foreground across dark surfaces.',\n      tag: '#design-tokens',\n    },\n  ])\n\n  readonly newNoteDraft = signal('')\n  readonly newNoteTag = signal('#architecture')\n\n  readonly actionItems = signal<ActionItem[]>([\n    {\n      id: 'task-1',\n      title: 'Publish OKLCH color token specification to documentation',\n      assignee: 'Elena Rostova',\n      assigneeInitials: 'ER',\n      assigneeColor: 'bg-success/15 text-success',\n      dueDate: 'Aug 24, 2026',\n      priority: 'High',\n      completed: true,\n    },\n    {\n      id: 'task-2',\n      title: 'Configure AST parity tests in GitHub Actions CI workflow',\n      assignee: 'Marcus Vance',\n      assigneeInitials: 'MV',\n      assigneeColor: 'bg-info/15 text-info',\n      dueDate: 'Aug 26, 2026',\n      priority: 'Urgent',\n      completed: false,\n    },\n    {\n      id: 'task-3',\n      title: 'Draft block wireframes for Healthcare & HRMS verticals',\n      assignee: 'Sarah Jenkins',\n      assigneeInitials: 'SJ',\n      assigneeColor: 'bg-chart-1/15 text-chart-1',\n      dueDate: 'Aug 28, 2026',\n      priority: 'Medium',\n      completed: false,\n    },\n    {\n      id: 'task-4',\n      title: 'Benchmark bundle size delta across 50+ imported primitives',\n      assignee: 'David Chen',\n      assigneeInitials: 'DC',\n      assigneeColor: 'bg-warning/15 text-warning',\n      dueDate: 'Sep 02, 2026',\n      priority: 'Low',\n      completed: false,\n    },\n  ])\n\n  readonly newTaskTitle = signal('')\n  readonly newTaskAssignee = signal('Alex Rivera')\n  readonly newTaskPriority = signal<ActionItem['priority']>('Medium')\n\n  readonly keyDecisions = signal<KeyDecision[]>([\n    {\n      id: 'dec-1',\n      number: 1,\n      title: 'Adopt flat registryDependencies URLs across all 300+ items',\n      context:\n        'Declaring flat JSON URLs eliminates circular dependency warnings and simplifies downstream registry resolver graphs.',\n      status: 'Adopted',\n      decidedBy: 'Elena Rostova',\n      time: '14:18 PST',\n    },\n    {\n      id: 'dec-2',\n      number: 2,\n      title: 'Enforce strict 120-char line width & no-semicolons styleguide',\n      context:\n        'Standardizes AST transpilation outputs so generated Vue SFC and React TSX items maintain identical formatting invariants.',\n      status: 'Adopted',\n      decidedBy: 'Squad Consensus',\n      time: '14:32 PST',\n    },\n    {\n      id: 'dec-3',\n      number: 3,\n      title: 'Deprecate legacy /r/nuxt/ aliases by end of Q3',\n      context:\n        'Consumers will be directed to unified /r/vue/ endpoints while maintaining backwards-compatible 301 redirects.',\n      status: 'Under Review',\n      decidedBy: 'Sarah Jenkins',\n      time: '14:45 PST',\n    },\n  ])\n\n  readonly completedTasksCount = computed(() => this.actionItems().filter((t) => t.completed).length)\n  readonly totalTasksCount = computed(() => this.actionItems().length)\n  readonly completionPercentage = computed(() =>\n    this.totalTasksCount() === 0 ? 0 : Math.round((this.completedTasksCount() / this.totalTasksCount()) * 100),\n  )\n\n  get rootClass(): string {\n    return cn('text-foreground w-full space-y-6', this.className)\n  }\n\n  topicCardClass(status: AgendaTopic['status']): string {\n    return cn(\n      'group relative rounded-lg border p-4 transition-colors duration-150',\n      status === 'active' && 'border-primary/50 bg-primary/[0.03] shadow-xs',\n      status === 'completed' && 'border-border/80 bg-muted/20',\n      status === 'upcoming' && 'border-border/60 bg-card hover:border-border',\n    )\n  }\n\n  taskCardClass(completed: boolean): string {\n    return cn(\n      'group flex items-start gap-3 rounded-lg border p-3 transition-colors',\n      completed\n        ? 'border-border/40 bg-muted/20 opacity-75'\n        : 'border-border/80 bg-card hover:border-border hover:bg-muted/10',\n    )\n  }\n\n  taskLabelClass(completed: boolean): string {\n    return cn(\n      'block cursor-pointer text-xs leading-relaxed font-medium transition-colors select-none',\n      completed ? 'text-muted-foreground line-through' : 'text-foreground',\n    )\n  }\n\n  taskPriorityVariant(p: ActionItem['priority']): 'destructive' | 'warning' | 'secondary' {\n    if (p === 'Urgent' || p === 'High') return 'destructive'\n    if (p === 'Medium') return 'warning'\n    return 'secondary'\n  }\n\n  priorityFromString(v: string): ActionItem['priority'] {\n    return (priorityOptions as string[]).includes(v) ? (v as ActionItem['priority']) : 'Medium'\n  }\n\n  flash(signalRef: { set: (v: boolean) => void }): void {\n    signalRef.set(true)\n    setTimeout(() => signalRef.set(false), 2000)\n  }\n\n  copyRoomLink(): void {\n    try {\n      navigator.clipboard?.writeText('https://zoom.us/j/4829017734')\n    } catch {\n      // Clipboard fallback\n    }\n    this.flash(this.copiedRoomLink)\n  }\n\n  copyNotesMarkdown(): void {\n    try {\n      navigator.clipboard?.writeText(this.notesMarkdown())\n    } catch {\n      // Clipboard fallback\n    }\n    this.flash(this.copiedNotes)\n  }\n\n  exportNotesMarkdown(): void {\n    this.copyNotesMarkdown()\n  }\n\n  copyCodeSnippet(): void {\n    try {\n      navigator.clipboard?.writeText(\n        `export default defineRegistryItem({\\n  name: 'meeting-agenda-notes',\\n  type: 'registry:block',\\n  categories: ['productivity', 'collaboration'],\\n  dependencies: ['lucide-vue-next'],\\n  registryDependencies: [\\n    'https://uipkge.dev/r/avatar.json',\\n    'https://uipkge.dev/r/badge.json',\\n    'https://uipkge.dev/r/button.json',\\n    'https://uipkge.dev/r/card.json',\\n    'https://uipkge.dev/r/checkbox.json',\\n    'https://uipkge.dev/r/separator.json',\\n  ],\\n})`,\n      )\n    } catch {\n      // Clipboard fallback\n    }\n    this.flash(this.copiedSnippet)\n  }\n\n  addNote(): void {\n    if (!this.newNoteDraft().trim()) return\n    this.liveNotes.update((prev) => [\n      ...prev,\n      {\n        id: `note-${Date.now()}`,\n        author: 'Elena Rostova',\n        authorInitials: 'ER',\n        authorColor: 'bg-success/15 text-success',\n        timestamp: 'Just now',\n        content: this.newNoteDraft().trim(),\n        tag: this.newNoteTag(),\n      },\n    ])\n    this.newNoteDraft.set('')\n  }\n\n  toggleTask(id: string, checked: boolean): void {\n    this.actionItems.update((prev) => prev.map((t) => (t.id === id ? { ...t, completed: checked } : t)))\n  }\n\n  addTask(): void {\n    if (!this.newTaskTitle().trim()) return\n    const attendee = this.attendees().find((a) => a.name === this.newTaskAssignee()) ?? this.attendees()[0]!\n    this.actionItems.update((prev) => [\n      ...prev,\n      {\n        id: `task-${Date.now()}`,\n        title: this.newTaskTitle().trim(),\n        assignee: attendee.name,\n        assigneeInitials: attendee.initials,\n        assigneeColor: attendee.colorClass,\n        dueDate: 'Aug 30, 2026',\n        priority: this.newTaskPriority(),\n        completed: false,\n      },\n    ])\n    this.newTaskTitle.set('')\n  }\n\n  notesMarkdown(): string {\n    return `# Q3 Product Architecture & Monorepo Scaling Sync\n**Date:** Friday, Aug 21, 2026 · 14:00 - 15:00 PST\n**Attendees:** Elena Rostova (Host), Marcus Vance, Sarah Jenkins, David Chen, Sofia Rossi, Alex Rivera\n\n## Timeboxed Agenda\n${this.agendaTopics()\n  .map((t) => `- [${t.status === 'completed' ? 'x' : ' '}] **${t.title}** (${t.duration} · ${t.timeRange}) - ${t.lead}`)\n  .join('\\n')}\n\n## Key Architectural Decisions\n${this.keyDecisions()\n  .map((d) => `${d.number}. **${d.title}** [${d.status}]`)\n  .join('\\n')}\n\n## Action Items\n${this.actionItems()\n  .map(\n    (task) =>\n      `- [${task.completed ? 'x' : ' '}] **${task.title}** (Assignee: @${task.assignee}, Due: ${task.dueDate}, Priority: ${task.priority})`,\n  )\n  .join('\\n')}\n`\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/meeting-agenda-notes/meeting-agenda-notes.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/meeting-agenda-notes/index.ts",
      "content": "export {\n  UiMeetingAgendaNotesComponent,\n  type Attendee,\n  type AgendaTopic,\n  type NoteEntry,\n  type ActionItem,\n  type KeyDecision,\n} from './meeting-agenda-notes.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/meeting-agenda-notes/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/avatar.json",
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json",
    "https://uipkge.dev/r/angular/checkbox.json",
    "https://uipkge.dev/r/angular/separator.json"
  ],
  "description": "Linear and Notion style structured meeting document with attendee avatars, timeboxed agenda topics, rich discussion notes, interactive action items checklist, and key decisions log.",
  "categories": [
    "productivity",
    "app",
    "collaboration"
  ]
}