How the Agenta mobile app (web/mobile) installs and extends shadcn/ui registry components, themes them via the palette token bridge, and builds chat UI on @agenta/chat. Use when adding UI components under web/mobile, changing theme colors, editing components.json or globals.css, or building chat UI.
web/mobile uses shadcn/ui on Tailwind v4 with CSS variables. No antd, ever.
@agenta/ui/ui already exports it
(Button, Input, Select, Dialog, Sheet, DropdownMenu, ...), import it
from there. Do not install a local copy of a component the kit already has —
button in particular lives ONLY in @agenta/ui (Nova preset on the shared
control-* scale), so there is one button.Input, SkeletonBlock and Sheet from @agenta/ui/ui. A local
src/components/ui/sheet.tsx still backs ChannelsPanelSheet only; do not import it
anywhere else, and do not add other local duplicates of kit components.web/mobile/:
pnpm dlx shadcn@latest add <component>.src/components/ui/ (aliases in components.json). They
are owned code: you may adapt them, but keep diffs minimal and expressed in
semantic tokens so upstream refreshes stay cheap.@radix-ui/react-slot) to
web/mobile/package.json — commit the manifest and web/pnpm-lock.yaml
changes together with the component.bg-sidebar,
chart-*) requires extending VARS in scripts/generate-shadcn-tokens.ts +
the @theme inline map in globals.css first — Tailwind v4 silently
generates nothing for unmapped tokens.--background, --primary, ...) are NOT hand-maintained.
They are generated into src/styles/theme.generated.css from
web/oss/src/styles/theme/palette.ts by scripts/generate-shadcn-tokens.ts.
The script also reads controlScale.ts from the same folder. That theme
folder is the one part of web/oss still in use: edit it for color changes,
but touch nothing else in web/oss.palette.ts (if the design-system value is wrong) or
the ROLE MAP in the script (if the mapping is wrong), then run
pnpm --filter @agenta/mobile generate:tokens and commit the regenerated CSS.theme.generated.css directly; never introduce raw hex values in
components — if a needed role is missing, extend the bridge..dark class on <html> (@custom-variant dark in
globals.css), set pre-paint by the _document.tsx init script from the
shared agenta-theme localStorage key. Both themes must be checked for every
new surface.src/features/* as thin
wrappers over components/ui/* primitives (cva variants where appropriate).cn util from @/lib/utils for all class merging.src/components/ai-elements/.
Chat lives in src/features/chat/ (ChatScreen, Composer,
LiveConversation, TranscriptTurns, ...), built on @agenta/chat
(state, model, hooks, components, ... subpaths) and the Lexical-based
@agenta/ui/rich-chat-input. Markdown streams through streamdown.@agenta/chat hooks — never re-implement orchestration
inside a rendered component.@phosphor-icons/react (most files) and lucide-react (older
files and shadcn registry output) are in use. Match the surrounding feature.7a975fb
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.