LumenClip Docs
LumenClip Docs
LumenClip engineering documentation
UI field guideBrowser routes
Application shellNavigationUI primitivesMedia viewers
UIWorkspace shell

UI primitives

Shared domain-neutral controls, feedback, data, loading, upload, and media building blocks.

Route: Shared across application routes.

Layout

Owner: components/ui/.

The shared primitives provide presentation and generic interaction state while feature components supply product language and business rules. Button defines the standard, outline, secondary, ghost, destructive, link, app action, soft-control, and icon-control treatments, plus sizes for compact actions, dialogs, settings rows, and icon-only controls. Its asChild option applies the same styling to a composed link or trigger through Radix Slot.

Form controls include Radix switches and selects, native selects, search fields, labeled selectors, and the grid/table ViewModeToggle. The toggle is a named control group whose two buttons expose their selected state through aria-pressed.

AppModal, AppModalPanel, and AppModalHeader provide the shared Radix dialog overlay, surface, title, actions, and labeled close action. Fixed modals use a portal, while the absolute layer stays inside an existing positioned surface. ConfirmDialog provides the shared destructive confirmation surface, and useDirtyGuard can insert that confirmation before an in-app action leaves unsaved local edits.

AgDataTable wraps AG Grid with sortable, filterable, resizable columns, pagination, a 620px viewport, a shared empty state, and page-size choices of 10, 20, 50, or 100 rows. The loading skeletons and Spinner expose busy semantics. UploadDropzone combines drag and drop with a file picker and reports rejected files through the global toaster. MediaCard composes image or video previews, fallback states, status, actions, metadata, and captions without embedding collection or automation behavior.

Interactions

Button and control variants retain their disabled, focus-visible, invalid, and pressed states when composed by product surfaces. A row action supplied to AgDataTable runs from either a pointer click or Enter on a focused cell. UploadDropzone accepts the caller's MIME and extension filters, single or multiple selection, and disabled state.

ConfirmDialog cannot be dismissed while confirmation is pending. A failed confirmation remains open and displays the error. useDirtyGuard protects in-app actions only and does not install a browser unload handler. The root layout mounts AppToaster once; Sonner messages appear at the top right, include a close button, use rich status colors, and default to six seconds.

MCP coverage

No. These modules are presentation and client-interaction primitives, and lib/mcp/tool-registry.ts registers no primitive-level operations. A feature that composes them may have MCP coverage for its own underlying data.

Navigation

Desktop and mobile access to the six CFarm workspace destinations.

Media viewers

Modal review and editing surfaces for collection images, generated slideshows, and generated videos.

On this page

LayoutInteractionsMCP coverage