SectionPage
Search for something...

Components Cheatsheet

Click props to toggle them on/off, cycle through variants, or edit string values. Use the component names and prop values exactly as shown when prompting.

AppLayout

import AppLayout from "@/components/layout/AppLayout"

Root shell for every page. Pass leftSidebar / rightSidebar content to show those panels — omit to hide them.

PropValues / TypeDefault
childrenReactNode — main page contentrequired
leftSidebarReactNode — omit or null to hide
rightSidebarReactNode — omit or null to hide
topBarLeftReactNode — replaces breadcrumb area
topBarRightReactNode — replaces search/user area

SidebarSection

import SidebarSection from "@/components/layout/SidebarSection"

Groups SidebarItems under a category title. Optionally shows a right-aligned link next to the title.

Category
title
showLink
children
SidebarItem elements

SidebarItem

import SidebarItem from "@/components/layout/SidebarItem"

Renders as a Next.js Link when href is provided, otherwise as a <button>.

label
active
disabled
notification
icon
ReactNode (13×13 px)
href
string
onClick
() => void

Button

import Button from "@/components/ui/Button"

Renders as a <button> by default, or a Next.js <Link> when href is provided.

variant
size
disabled
leftIcon
rightIcon
children
href
string — renders as Link
onClick
() => void
type
"button" | "submit" | "reset"

IconButton

import IconButton from "@/components/ui/IconButton"

Square icon-only button. label is required for screen reader accessibility.

variant
size
disabled
icon
ReactNode (default: fa-ellipsis)
label
string — required for aria-label
href
string — renders as Link
onClick
() => void

Kbd

import Kbd from "@/components/ui/Kbd"

Keyboard key cap. Compose multiple Kbd side-by-side to show a shortcut combo.

text
size
icon
ReactNode (8 px) — use for arrow keys

ButtonGroup

import ButtonGroup from "@/components/ui/ButtonGroup"

Stacks ButtonGroupItem children with automatic inset dividers. Control width via className.

PropValues / TypeDefault
childrenButtonGroupItem elementsrequired
classNamestring — use to set width e.g. w-[200px]

ButtonGroupItem

import ButtonGroupItem from "@/components/ui/ButtonGroupItem"

Use variant="danger" for destructive actions. Renders as a Link when href is provided.

label
variant
disabled
icon
ReactNode (13×13 px)
href
string — renders as Link
onClick
() => void

TextField

import TextField from "@/components/ui/TextField"

Controlled input. Extends all native <input> props (value, onChange, type, name, autoComplete…). States are CSS-driven — no state prop needed.

label
description
placeholder
error
optional
onClear
() => void — shows × button when provided
ai
solidBg
disabled

Select

import Select from "@/components/ui/Select"

Styled wrapper around a native <select> — hover/focus states are CSS-driven. Pass options as { value, label }[] and control value + onChange yourself. Use multiple for multi-select pill mode.

Placeholder text
label
description
placeholder
error
optional
multiple
solidBg
disabled
options
SelectOption[] — { value: string; label: string }[]
value
string (or string[] when multiple)
onChange
(value: string | string[]) => void

SelectUnderline

import SelectUnderline from "@/components/ui/SelectUnderline"

Compact inline select — no border box, just text + chevron + dotted underline. Placeholder state is italic/muted; a selected value renders as regular white text. Designed for embedding inside sentences or compact UI.

Text goes here
placeholder
disabled
options
SelectOption[] — { value: string; label: string }[]
value
string
onChange
(value: string) => void

Switch

import Switch from "@/components/ui/Switch"

Toggle switch built on a hidden native checkbox. Uncontrolled by default — pass checked + onChange for controlled usage. Providing description switches to the card (Switch box) layout.

label
labelPosition
description
boxStyle
disabled
checked
boolean — controlled
onChange
React.ChangeEventHandler<HTMLInputElement>

Checkbox

import Checkbox from "@/components/ui/Checkbox"

Wraps a native <input type="checkbox"> with a custom 16×16 px box. Fully controlled via checked + onChange, or uncontrolled via defaultChecked. All native input props (name, value, form…) are forwarded.

label
disabled
checked
boolean — controlled
defaultChecked
boolean — uncontrolled
onChange
React.ChangeEventHandler<HTMLInputElement>
name / value
string — forwarded to native input

Radio

import Radio from "@/components/ui/Radio"

Wraps a native <input type="radio"> with a custom 16×16 px circle. Group radio buttons by sharing the same name prop. All native input props are forwarded.

disabled
label
string — rendered beside the circle
name
string — groups radios together
value
string
checked
boolean — controlled
onChange
React.ChangeEventHandler<HTMLInputElement>

Textarea

import Textarea from "@/components/ui/Textarea"

Controlled multi-line input. Extends all native <textarea> props (value, onChange, name…). States are CSS-driven — no state prop needed.

label
description
placeholder
error
optional
ai
solidBg
richTextEditor
disabled

EditorInputs

import EditorInputs from "@/components/ui/EditorInputs"

Compact label + input row for use in properties panels and editor sidebars. Horizontal layout puts the label on the left (max 120 px) and the input on the right (130 px fixed). Vertical stacks them full-width.

Label
type
layout
label
tooltip
placeholder
extraText
disabled
value
string — controlled value
onChange
(value: string) => void
options
[string, string] — "switch" labels, default ["H1","H2"]
selectOptions
{ value: string; label: string }[] — for select type
color
string — CSS color for swatch (color type)
fileName
string — displayed file name (file type)
thumbnail
boolean — show thumbnail preview (file type, default true)

Alert

import Alert from "@/components/ui/Alert"

Inline contextual alert. Not a toast — renders in the document flow.

severity
variant
title
description
icon
dismissable
buttonLabel
customIcon
ReactNode — replaces default icon
onDismiss
() => void
onButtonClick
() => void

Persona

import Persona from "@/components/ui/Persona"

Avatar + name row. 7 standard sizes; falls back to initials when no src is provided.

RR
Ronald Richards
size
name
username
secondaryInfo
tertiaryInfo
status
src
string — avatar image URL
alt
string — image alt text

TabBar

import TabBar from "@/components/ui/TabBar"import TabBarItem from "@/components/ui/TabBarItem"

Compose TabBarItem children inside TabBar. TabBar owns no selection state — manage active index externally.

variant
icon
count
notification
label
TabBarItem — string (required)
active
TabBarItem — boolean
disabled
TabBarItem — boolean

Divider

import Divider from "@/components/ui/Divider"

1 px horizontal rule. Add a label to split it into a line / text / line layout.

strength
label

Tooltip

import Tooltip from "@/components/ui/Tooltip"

Wraps any trigger element. The tooltip appears on hover — no JS, CSS-only.

content
placement
children
ReactNode — the hover trigger

Chip

import Chip from "@/components/ui/Chip"

Pill-shaped label with optional left/right icons and a remove button.

Chip text
label
color
size
leftIcon
rightIcon
onRemove

FlashMessage

import FlashMessageProvider, { useFlashMessage } from "@/components/ui/FlashMessageProvider"// FlashMessageProvider is already mounted in app/layout.tsx

Toasts stack bottom-right, animate in from below, and auto-dismiss after 5 s. Add FlashMessageProvider once at the root; call useFlashMessage().show() anywhere.

severity
title
description
buttonLabel
onButtonClick
() => void