Vendored base components — do not modify

Vendored base components — do not modify

The web app installs third-party primitives via CLI registries and must
treat them as read-only. They are the only files in this tree that can be
reinstalled to “factory reset” without a code review:

  • components/ai-elements/prompt-input.tsx — installed via the
    @ai-elements registry (shadcn npx shadcn add flow). Reinstall to
    reset.
  • components/player.tsx — FORKED: adapted from audio-ui
    base-nova to Radix primitives — NOT pristine-reinstallable; reinstalling
    @audio/player would re-introduce the Base UI idioms. See fork notes
    below.
  • components/audio/fader.tsx, components/audio/transport.tsx —
    installed via the @audio registry. Reinstall to reset.
  • components/audio/sortable-list.tsx — FORKED: adapted from
    audio-ui base-nova to Radix primitives — NOT pristine-reinstallable;
    reinstalling would re-introduce the Base UI idioms. See fork notes
    below.
  • components/ui/* — installed via the shadcn ui registry
    (components.json ↔ https://ui.shadcn.com/r/styles/new-york/{name}.json).
    Reinstall to reset. After touching anything under components/ui/*, run
    mise run check:shadcn-drift (manual, on-demand, read-only — not part of
    validate/CI) to see which vendored files have diverged from upstream.
  • lib/{playback-engine,audio-store,html-audio}.ts — runtime companions
    to the audio-ui primitives; reinstalling the player pulls in updated
    copies.
  • hooks/use-audio-provider.ts — same.

The rule: compose these inside NEW wrapper components
(components/studio/*.tsx, etc.) — never hand-edit the vendored files.
Types, theme reconciliation, and visual adjustments belong in the wrapper
layer or in apps/web/src/styles/global.css (shadcn semantic vars and
the --radius-* tiers mapping to the Brioso palette). Editing the
vendored files creates drift that the next reinstall will silently
overwrite.

Forked files (the exception): components/player.tsx and
components/audio/sortable-list.tsx were vendored from the @audio
registry and then ported from Base UI idioms (render={<X/>},
BaseUIEvent, icon-sm) to the Radix primitives already wired by
components/ui/* (Tooltip / DropdownMenu / Dialog use asChild + child;
Button uses our local buttonVariants with default | sm | lg | icon).
The fork is a pure API-adaptation, no visual or behavioral changes beyond
three documented deltas: showCloseButton={false} was dropped (Radix
DialogContent always renders the close button), closeOnClick={false}
was dropped (Radix DropdownMenuItem always closes on click), and
size="icon-sm" mapped to size="icon". If you reinstall the
@audio/{player,sortable-list} packages, the Base UI idioms will
return and the player chrome will be runtime-broken (Radix ignores
the render prop and treats the children as plain elements). Pin
these two files or fork them in place — do not reinstall them.