# Geist + shadcn + etermax ↔ buena design system parity checklist
# Source of truth: src/lib/design/parity.ts — status derived from the page registry at build time.
# Geist: https://vercel.com/geist/<geist> · shadcn: https://ui.shadcn.com/docs/components/<shadcn>
# etermax: https://mcp.etermax.com/components#<etermax> · buena: https://buenalabs.io/design/<buena>

summary:
  geist_components_matched: 73/73
  shadcn_components_matched: 64/64
  etermax_components_matched: 60/60  # excludes 8 domain-specific (n/a)
  buena_only_components: 41
  buena_originals: 11
  element_level_audit: /design/parity-elements.yaml  # per-variant coverage inside each page

foundations:
  - { geist: introduction, buena: "introduction", status: done }
  - { geist: colors, buena: "colors", status: done }
  - { geist: typography, buena: "typography", status: done }
  - { geist: materials, buena: "materials", status: done }
  - { geist: grid, buena: "grid (documented as a component)", status: done }

foundations_buena_only:
  - sound
  - haptics

geist_components:
  - { geist: avatar, buena: avatar, status: done }
  - { geist: badge, buena: badge, status: done }
  - { geist: banner, buena: banner, status: done }
  - { geist: book, buena: book, status: done }
  - { geist: breadcrumbs, buena: breadcrumbs, status: done }
  - { geist: browser, buena: browser, status: done }
  - { geist: button, buena: button, status: done }
  - { geist: calendar, buena: calendar, status: done }
  - { geist: card, buena: card, status: done }
  - { geist: checkbox, buena: checkbox, status: done }
  - { geist: choicebox, buena: choicebox, status: done }
  - { geist: clearable-input, buena: clearable-input, status: done }
  - { geist: code, buena: code, status: done }
  - { geist: code-block, buena: code-block, status: done }
  - { geist: collapse, buena: collapse, status: done }
  - { geist: combobox, buena: combobox, status: done }
  - { geist: command-menu, buena: command-menu, status: done }
  - { geist: context-card, buena: context-card, status: done }
  - { geist: context-menu, buena: context-menu, status: done }
  - { geist: copy-button, buena: copy-button, status: done }
  - { geist: description, buena: description, status: done }
  - { geist: destructive-action-modal, buena: destructive-action-modal, status: done }
  - { geist: dots-menu, buena: dots-menu, status: done }
  - { geist: drawer, buena: drawer, status: done }
  - { geist: empty-state, buena: empty-state, status: done }
  - { geist: entity, buena: entity, status: done }
  - { geist: error, buena: error, status: done }
  - { geist: error-card, buena: error-card, status: done }
  - { geist: feedback, buena: feedback, status: done }
  - { geist: fieldset, buena: fieldset, status: done }
  - { geist: file-tree, buena: file-tree, status: done }
  - { geist: gauge, buena: gauge, status: done }
  - { geist: grid, buena: grid, status: done }
  - { geist: input, buena: input, status: done }
  - { geist: json-view, buena: json-view, status: done }
  - { geist: keyboard-input, buena: keyboard-input, status: done }
  - { geist: label, buena: label, status: done }
  - { geist: load-more-button, buena: load-more-button, status: done }
  - { geist: loading-dots, buena: loading-dots, status: done }
  - { geist: menu, buena: menu, status: done }
  - { geist: middletruncate, buena: middletruncate, status: done }
  - { geist: modal, buena: modal, status: done }
  - { geist: multi-select, buena: multi-select, status: done }
  - { geist: note, buena: note, status: done }
  - { geist: pagination, buena: pagination, status: done }
  - { geist: phone, buena: phone, status: done }
  - { geist: pill, buena: pill, status: done }
  - { geist: progress, buena: progress, status: done }
  - { geist: project-banner, buena: project-banner, status: done }
  - { geist: radio, buena: radio, status: done }
  - { geist: relative-time-card, buena: relative-time-card, status: done }
  - { geist: scroller, buena: scroller, status: done }
  - { geist: search-input, buena: search-input, status: done }
  - { geist: select, buena: select, status: done }
  - { geist: separator, buena: separator, status: done }
  - { geist: sheet, buena: sheet, status: done }
  - { geist: show-more, buena: show-more, status: done }
  - { geist: skeleton, buena: skeleton, status: done }
  - { geist: slider, buena: slider, status: done }
  - { geist: snippet, buena: snippet, status: done }
  - { geist: spinner, buena: spinner, status: done }
  - { geist: split-button, buena: split-button, status: done }
  - { geist: status-dot, buena: status-dot, status: done }
  - { geist: switch, buena: switch, status: done }
  - { geist: table, buena: table, status: done }
  - { geist: tabs, buena: tabs, status: done }
  - { geist: text-with-copy-button, buena: text-with-copy-button, status: done }
  - { geist: textarea, buena: textarea, status: done }
  - { geist: theme-switcher, buena: theme-switcher, status: done }
  - { geist: toast, buena: toast, status: done }
  - { geist: toggle, buena: toggle, status: done }
  - { geist: tooltip, buena: tooltip, status: done }
  - { geist: video, buena: video, status: done }

shadcn_components:
  - { shadcn: accordion, buena: collapse, status: done }
  - { shadcn: alert, buena: note, status: done }
  - { shadcn: alert-dialog, buena: destructive-action-modal, status: done }
  - { shadcn: aspect-ratio, buena: aspect-ratio, status: done }
  - { shadcn: attachment, buena: chat, status: done }
  - { shadcn: avatar, buena: avatar, status: done }
  - { shadcn: badge, buena: badge, status: done }
  - { shadcn: breadcrumb, buena: breadcrumbs, status: done }
  - { shadcn: bubble, buena: chat, status: done }
  - { shadcn: button, buena: button, status: done }
  - { shadcn: button-group, buena: button-group, status: done }
  - { shadcn: calendar, buena: calendar, status: done }
  - { shadcn: card, buena: card, status: done }
  - { shadcn: carousel, buena: carousel, status: done }
  - { shadcn: chart, buena: chart, status: done }
  - { shadcn: checkbox, buena: checkbox, status: done }
  - { shadcn: collapsible, buena: show-more, status: done }
  - { shadcn: combobox, buena: combobox, status: done }
  - { shadcn: command, buena: command-menu, status: done }
  - { shadcn: context-menu, buena: context-menu, status: done }
  - { shadcn: data-table, buena: data-table, status: done }
  - { shadcn: date-picker, buena: date-picker, status: done }
  - { shadcn: dialog, buena: modal, status: done }
  - { shadcn: direction, buena: direction, status: done }
  - { shadcn: drawer, buena: drawer, status: done }
  - { shadcn: dropdown-menu, buena: menu, status: done }
  - { shadcn: empty, buena: empty-state, status: done }
  - { shadcn: field, buena: field, status: done }
  - { shadcn: hover-card, buena: context-card, status: done }
  - { shadcn: input, buena: input, status: done }
  - { shadcn: input-group, buena: input-group, status: done }
  - { shadcn: input-otp, buena: input-otp, status: done }
  - { shadcn: item, buena: entity, status: done }
  - { shadcn: kbd, buena: keyboard-input, status: done }
  - { shadcn: label, buena: label, status: done }
  - { shadcn: marker, buena: chat, status: done }
  - { shadcn: menubar, buena: menubar, status: done }
  - { shadcn: message, buena: chat, status: done }
  - { shadcn: message-scroller, buena: chat, status: done }
  - { shadcn: native-select, buena: native-select, status: done }
  - { shadcn: navigation-menu, buena: navigation-menu, status: done }
  - { shadcn: pagination, buena: pagination, status: done }
  - { shadcn: popover, buena: popover, status: done }
  - { shadcn: progress, buena: progress, status: done }
  - { shadcn: radio-group, buena: radio, status: done }
  - { shadcn: resizable, buena: resizable, status: done }
  - { shadcn: scroll-area, buena: scroller, status: done }
  - { shadcn: select, buena: select, status: done }
  - { shadcn: separator, buena: separator, status: done }
  - { shadcn: sheet, buena: sheet, status: done }
  - { shadcn: sidebar, buena: sidebar, status: done }
  - { shadcn: skeleton, buena: skeleton, status: done }
  - { shadcn: slider, buena: slider, status: done }
  - { shadcn: sonner, buena: toast, status: done }
  - { shadcn: spinner, buena: spinner, status: done }
  - { shadcn: switch, buena: switch, status: done }
  - { shadcn: table, buena: table, status: done }
  - { shadcn: tabs, buena: tabs, status: done }
  - { shadcn: textarea, buena: textarea, status: done }
  - { shadcn: toast, buena: toast, status: done }
  - { shadcn: toggle, buena: toggle, status: done }
  - { shadcn: toggle-group, buena: toggle, status: done }
  - { shadcn: tooltip, buena: tooltip, status: done }
  - { shadcn: typography, buena: typography, status: done }

shadcn_gaps:  # shadcn components with no buena page yet

etermax_components:
  - { etermax: gradients, buena: text-gradient, status: "done" }
  - { etermax: color-system, buena: colors, status: "done" }
  - { etermax: cards, buena: card, status: "done" }
  - { etermax: navbar, buena: navbar, status: "done" }
  - { etermax: sidebar-comp, buena: sidebar, status: "done" }
  - { etermax: fieldset, buena: fieldset, status: "done" }
  - { etermax: separator, buena: separator, status: "done" }
  - { etermax: scroll-area, buena: scroller, status: "done" }
  - { etermax: table, buena: table, status: "done" }
  - { etermax: badge, buena: badge, status: "done" }
  - { etermax: chip, buena: chip, status: "done" }
  - { etermax: avatar, buena: avatar, status: "done" }
  - { etermax: stat-card, buena: metric-card, status: "done" }
  - { etermax: code-block, buena: code-block, status: "done" }
  - { etermax: image, buena: image, status: "done" }
  - { etermax: kbd, buena: keyboard-input, status: "done" }
  - { etermax: timeline, buena: timeline, status: "done" }
  - { etermax: tree, buena: file-tree, status: "done" }
  - { etermax: dir-tree, buena: file-tree, status: "done" }
  - { etermax: hover-card, buena: context-card, status: "done" }
  - { etermax: chart, buena: chart, status: "done" }
  - { etermax: circular-progress, buena: gauge, status: "done" }
  - { etermax: number-ticker, buena: number-ticker, status: "done" }
  - { etermax: rating, buena: rating, status: "done" }
  - { etermax: input, buena: input, status: "done" }
  - { etermax: select-controls, buena: select, status: "done" }
  - { etermax: slider, buena: slider, status: "done" }
  - { etermax: otp, buena: input-otp, status: "done" }
  - { etermax: toggle-group, buena: toggle, status: "done" }
  - { etermax: stepper, buena: stepper, status: "done" }
  - { etermax: alert, buena: note, status: "done" }
  - { etermax: toast, buena: toast, status: "done" }
  - { etermax: progress-skeleton, buena: progress, status: "done" }
  - { etermax: spinner-comp, buena: spinner, status: "done" }
  - { etermax: empty-state, buena: empty-state, status: "done" }
  - { etermax: banner, buena: banner, status: "done" }
  - { etermax: status, buena: status-dot, status: "done" }
  - { etermax: tabs, buena: tabs, status: "done" }
  - { etermax: breadcrumb, buena: breadcrumbs, status: "done" }
  - { etermax: pagination, buena: pagination, status: "done" }
  - { etermax: menubar, buena: menubar, status: "done" }
  - { etermax: link, buena: link, status: "done" }
  - { etermax: dialog, buena: modal, status: "done" }
  - { etermax: sheet, buena: sheet, status: "done" }
  - { etermax: drawer, buena: drawer, status: "done" }
  - { etermax: dropdown, buena: menu, status: "done" }
  - { etermax: popover, buena: popover, status: "done" }
  - { etermax: tooltip, buena: tooltip, status: "done" }
  - { etermax: command, buena: command-menu, status: "done" }
  - { etermax: accordion, buena: collapse, status: "done" }
  - { etermax: collapsible, buena: show-more, status: "done" }
  - { etermax: marquee, buena: marquee, status: "done" }
  - { etermax: carousel, buena: carousel, status: "done" }
  - { etermax: shd-buttons, buena: button, status: "done" }
  - { etermax: toggle, buena: toggle, status: "done" }
  - { etermax: split-button, buena: split-button, status: "done" }
  - { etermax: tool-card, buena: null, status: "n/a" }
  - { etermax: agent-card, buena: null, status: "n/a" }
  - { etermax: skill-card, buena: null, status: "n/a" }
  - { etermax: prompt-card, buena: null, status: "n/a" }
  - { etermax: adapter-card, buena: null, status: "n/a" }
  - { etermax: app-store, buena: app-download-card, status: "done" }
  - { etermax: event-cards, buena: event-card, status: "done" }
  - { etermax: monitor, buena: null, status: "n/a" }
  - { etermax: analytics-table, buena: data-table, status: "done" }
  - { etermax: privacy, buena: null, status: "n/a" }
  - { etermax: ratings-reviews, buena: null, status: "n/a" }
  - { etermax: app-info, buena: description, status: "done" }

etermax_gaps:  # etermax components with no buena page yet (excluding domain-specific)

etermax_domain_specific:  # product catalog components, not generic UI — not counted
  - tool-card
  - agent-card
  - skill-card
  - prompt-card
  - adapter-card
  - monitor
  - privacy
  - ratings-reviews

components_buena_only:  # no Geist counterpart
  - app-download-card
  - aspect-ratio
  - button-group
  - carousel
  - chart
  - chat
  - chip
  - data-table
  - direction
  - date-picker
  - editorial-card
  - event-card
  - feature-card
  - field
  - form
  - hero-card
  - image
  - input-group
  - input-otp
  - link
  - media-card
  - marquee
  - menubar
  - metric-card
  - navigation-menu
  - native-select
  - navbar
  - newsletter
  - number-ticker
  - popover
  - rating
  - resizable
  - sidebar
  - stat-card
  - stepper
  - statusline
  - tag
  - terminal
  - text-gradient
  - timeline
  - type-tester

components_buena_originals:  # in no upstream (Geist, shadcn, etermax)
  - editorial-card
  - feature-card
  - form
  - hero-card
  - media-card
  - newsletter
  - stat-card
  - statusline
  - tag
  - terminal
  - type-tester
