LightBoard Demo
Controlled LightBoard with draw support
Try drawing on this board by clicking and dragging.
Drawing disabled
sketchpad
Try drawing on this board by clicking and dragging.
"use client"
import { useState } from "react"
import { LightBoard, PatternCell } from "../ui/lightboard"
export function LightBoardDemo() {
const [controlledDrawState, setControlledDrawState] =
useState<PatternCell>("2")
const [controlledHoverState, setControlledHoverState] = useState(false)
const cycleDrawState = () => {
setControlledDrawState((prev) => {
switch (prev) {
case "0":
return "1"
case "1":
return "2"
case "2":
return "3"
case "3":
return "0"
default:
return "0"
}
})
}
return (
<div className="space-y-2 lg:space-y-4 p-2 lg:p-8">
<h1 className="text-3xl font-bold text-white">LightBoard Demo</h1>
{/* Controlled Interactive Board */}
<div className="max-w-2xl w-full">
<h2 className="text-xl font-semibold mb-3">
Controlled LightBoard with draw support
</h2>
<p className=" mb-3">
Try drawing on this board by clicking and dragging.
</p>
<div className="flex space-x-4 mb-3">
<button
className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded text-sm"
onClick={cycleDrawState}
>
Draw Color: {controlledDrawState}
</button>
<button
className="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded text-sm"
onClick={() => setControlledHoverState((prev) => !prev)}
>
Toggle Scroll: {controlledHoverState ? "On" : "Off"}
</button>
</div>
<div className="bg-neutral-900 dark:bg-background">
<LightBoard
rows={12}
lightSize={6}
gap={2}
text="CONTROLLED BOARD"
font="default"
disableDrawing={false}
updateInterval={150}
colors={{
background: "#0a0a0a",
textDim: "#555555",
drawLine: "#E78AEA",
textBright: "#FFFFFF",
}}
controlledDrawState={controlledDrawState}
onDrawStateChange={setControlledDrawState}
controlledHoverState={controlledHoverState}
onHoverStateChange={setControlledHoverState}
/>
</div>
</div>
<h2 className="text-xl font-semibold mb-3">Drawing disabled</h2>
{/* Basic example */}
<div className="max-w-md w-full bg-black">
<LightBoard
text="Hello World"
rows={7}
gap={1}
lightSize={4}
font="default"
updateInterval={150}
colors={{
background: "#1a1a1a",
textDim: "#3a3a3a",
drawLine: "#7a7a7a",
textBright: "#ffffff",
}}
/>
</div>
{/* Red Alert */}
<div className="max-w-lg w-full bg-black">
<LightBoard
text="DANGER ZONE"
rows={10}
gap={1}
lightSize={5}
font="default"
updateInterval={100}
colors={{
background: "#1a0000",
textDim: "#4a0000",
drawLine: "#8a0000",
textBright: "#ff0000",
}}
/>
</div>
{/* Rainbow Scroll */}
<div className="max-w-xl w-full bg-black">
<LightBoard
rows={15}
lightSize={2}
gap={1}
text="Colors of the Rainbow"
font="default"
updateInterval={200}
colors={{
background: "#1a1a1a",
textDim: "#ff9999",
drawLine: "#ffff99",
textBright: "#99ffff",
}}
/>
</div>
{/* Matrix Style */}
<div className="w-full bg-black">
<LightBoard
rows={20}
lightSize={3}
gap={1}
text="THE MATRIX HAS YOU"
font="default"
updateInterval={50}
colors={{
background: "#001a00",
textDim: "#006600",
drawLine: "#00b300",
textBright: "#00ff00",
}}
/>
</div>
{/* Interactive Neon Board */}
<div className="max-w-2xl w-full bg-black">
<LightBoard
rows={12}
lightSize={4}
gap={2}
text="NEON DREAMS"
font="default"
updateInterval={150}
colors={{
background: "#0a0a0a",
textDim: "#ff00ff33",
drawLine: "#ff00ff66",
textBright: "#ff00ffff",
}}
/>
</div>
<h2 className="text-xl font-semibold mb-3">sketchpad</h2>
<p className=" mb-3">
Try drawing on this board by clicking and dragging.
</p>
<div className="bg-neutral-900 dark:bg-background mb-2">
<LightBoard
rows={22}
lightSize={6}
gap={2}
text=""
font="default"
disableDrawing={false}
updateInterval={150}
colors={{
drawLine: "#6CF2E8",
}}
controlledDrawState={controlledDrawState}
onDrawStateChange={setControlledDrawState}
controlledHoverState={true}
onHoverStateChange={setControlledHoverState}
/>
</div>
</div>
)
}
References
Inspiration
Installation
pnpm dlx shadcn@latest add https://cult-ui.com/r/lightboard.json
Usage
// Example usage of the Dock component with animated cards and dividers
const LightBoardDemo = () => {
return (
<LightBoard
size={LightBoardSize.Large}
lightSize={4}
gap={1}
text="Hello World"
font="default"
updateInterval={100}
/>
)
}
export default LightBoardDemoOn this page
AI SDK Agents
Real world vercel AI SDK v.6 Patterns you can copy and paste.
Complex AI Agents
AI Workflow Patterns
80+ Tools, Artifacts, Chat Patterns and much more