Skip to content

Mods

Add your own pages to Lucra. In beta: needs approval.

Drag a sticker to move it. With the keyboard, the arrow keys move it and Enter picks the next one.

Components & slots

Every component a mod can draw, and where.

Beta: needs approval. Mods are in beta: ask Lucra for access to install one. The tables below are generated from Lucra's ui.json, so they always match what Lucra accepts.

A mod's tree may only use these components and props. Inputs keep their value in Lucra and send it, by the field's name, with every action. An action ID is any string your mod handles. A sticker name is one of Lucra's stickers.

Slots

SlotWhereRoot
creator.panelA panel on a creator's sheet.Section
nav.pageA page of its own, with a tab in the brand workspace sidebar.Section
program.panelA panel on a program's detail.Section
submission.panelA panel on a submission's detail.Section

Components

ComponentPropsChildren
Avatartext?: string, onClick?: action ID, ring?: "page" | "surface", shape?: "circle" | "rounded-square", size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl"any
AvatarFallbacktext?: string, onClick?: action IDany
AvatarGrouptext?: string, onClick?: action ID, max?: number, ring?: "page" | "surface", size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl", total?: numberany
AvatarImagetext?: string, onClick?: action ID, fallbackSeed?: stringany
Badgelabel: string, variant?: "default" | "secondary" | "outline" | "muted" | "success" | "warning" | "attention" | "destructive"none
Buttonlabel: string, variant?: "default" | "secondary" | "outline" | "ghost", size?: "default" | "sm" | "lg", disabled?: boolean, action: action IDnone
Calendarnonenone
Cardtext?: string, onClick?: action ID, size?: "default" | "media" | "sticker", radius?: "surface" | "card" | "sticker", tone?: "default" | "flat" | "sticker" | "outlined"any
CardButtondisabled?: boolean, text?: string, onClick?: action ID, radius?: "none" | "inherit" | "card" | "control", tone?: "surface" | "plain"any
CardContenttext?: string, onClick?: action IDany
CardMediatext?: string, onClick?: action ID, radius?: "default" | "none" | "surface", tone?: "default" | "muted"any
Checkbox (input)label: string, name: field name, value?: booleannone
Choice (input)label: string, name: field name, value?: string, options: object[]none
DatePicker (input)name: field name, autoComplete?: string, captionLayout?: "label" | "dropdown", defaultValue?: string, id: string, max?: string, min?: string, placeholder?: string, value?: stringnone
Emptytitle: string, description?: string, sticker?: sticker name, size?: "page" | "compact"none
Footnotetext: stringnone
InfoTiptext?: string, label?: stringany
InputGrouptext?: string, onClick?: action IDany
InputGroupAddontext?: string, onClick?: action ID, align?: "inline-start" | "inline-end" | "block-start" | "block-end"any
InputGroupInput (input)name: field name, disabled?: boolean, placeholder?: string, value?: value, text?: string, onClick?: action IDany
Kbdtext?: string, onClick?: action IDany
Labeltext?: string, onClick?: action ID, variant?: "default" | "compact"any
LabelHinttext?: stringany
LandingPicturenonenone
ListnoneRow
LoadingBlocklabel: stringnone
LogoTiletext?: string, decorative?: boolean, fallback?: string, fit?: "cover" | "contain", name: string, size?: "xs" | "sm" | "md" | "lg"any
LucraErrorStatedescription?: string, size?: "page" | "compact", title?: stringnone
LucraSheetActionsprimary: objectnone
LucraSheetBodytext?: string, onClick?: action IDany
LucraSheetChoicechecked: booleannone
LucraSheetEmptydescription?: string, title: stringnone
LucraSheetIconButtondisabled?: boolean, text?: string, onClick?: action IDany
LucraSheetLoadingRowlabel: stringnone
LucraSheetPendingdescription?: string, error?: value, label: string, title?: stringnone
LucraSheetPositionLinescurrentIndex: number, label: string, onSelect?: action ID, pages: string[]none
LucraSheetRowAmountvalue: string, state?: string, positive?: booleannone
LucraSheetTitleactions?: string, backLabel?: string, backMode?: "step" | "leave", text?: string, closeLabel?: string, leading?: string, subtitle?: string, title: stringany
LucraSheetToolbarbackLabel?: string, closeLabel?: string, leading?: string, title?: stringnone
Metriclabel: string, value: stringnone
MetricsnoneMetric
PageTransitiontext?: string, routeKey: stringany
Rowtitle: string, description?: string, trailing?: string, sticker?: sticker name, tone?: "default" | "destructive", action?: action IDnone
ScrollMoreFrametext?: string, onClick?: action IDany
Sectiontitle?: string, count?: integerany
SectionHeaderas?: "h2" | "h3", description?: string, id?: string, title: string, truncate?: booleannone
SidebarNavCountcount: value, label: stringnone
Spinnertext?: string, onClick?: action ID, size?: value, strokeWidth?: valueany
StickerHeroactions?: string, description?: string, size?: "status" | "page" | "sheet" | "compact" | "celebrate", sticker?: string, title: string, titleAs?: "h2" | "p" | "h1"none
SwapTexttext: stringnone
Tabletext?: string, onClick?: action ID, pagination?: value, pageSize?: number, sizing?: "fill" | "content"any
TableBodytext?: string, onClick?: action IDany
TableCelltext?: string, onClick?: action ID, tone?: "default" | "muted" | "emphasis", column?: "number" | "default" | "action" | "selection"any
TableContainertext?: string, onClick?: action IDany
TableHeadtext?: string, onClick?: action ID, align?: "center" | "end" | "start", column?: "number" | "default" | "action" | "selection"any
TableHeadertext?: string, onClick?: action IDany
TableRowtext?: string, onClick?: action ID, variant?: "default" | "subtle" | "interactive", leaving?: booleanany
TableRowActionItemtext?: string, onClick?: action ID, disabled?: boolean, variant?: "default" | "destructive"any
TableRowActionLabeltext?: stringany
TableRowActionstext?: string, disabled?: boolean, enableContextMenu?: boolean, isolateRowEvents?: boolean, label: string, modal?: boolean, width?: "sm" | "md" | "lg" | "trigger"any
TableRowActionSeparatortext?: string, onClick?: action IDany
TableTabs (input)name: field name, ariaControlsPrefix: string, ariaLabel: string, disabled?: boolean, items: object[], value: stringnone
TextArea (input)label: string, name: field name, value?: string, placeholder?: stringnone
TextField (input)label: string, name: field name, value?: string, placeholder?: string, type?: "text" | "email" | "url" | "number" | "tel"none
TruncateTexttext?: string, lines?: 2 | 3any
UrlInput (input)name: field name, disabled?: boolean, placeholder?: string, value?: value, text?: string, onClick?: action ID, variant?: "default" | "auth"any
UrlLines (input)name: field name, text?: string, onClick?: action ID, value: string, placeholder?: string, rows?: number, required?: booleanany
WorkspaceDataSurfacetext?: string, toolbar?: stringany
WorkspaceToolbartext?: stringany