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-elementsregistry (shadcnnpx shadcn addflow). Reinstall to
reset.components/player.tsx— FORKED: adapted from audio-ui
base-novato Radix primitives — NOT pristine-reinstallable; reinstalling
@audio/playerwould re-introduce the Base UI idioms. See fork notes
below.components/audio/fader.tsx,components/audio/transport.tsx—
installed via the@audioregistry. Reinstall to reset.components/audio/sortable-list.tsx— FORKED: adapted from
audio-uibase-novato Radix primitives — NOT pristine-reinstallable;
reinstalling would re-introduce the Base UI idioms. See fork notes
below.components/ui/*— installed via the shadcnuiregistry
(components.json↔https://ui.shadcn.com/r/styles/new-york/{name}.json).
Reinstall to reset. After touching anything undercomponents/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.