button/00-button-group
An editor mode switcher — labeled Group buttons with active state for moving between write, split, and preview.
Loading interactive preview
"use client";
import { useState } from 'react'
import { Button } from 'ui-lab-components/button'
import { Divider } from 'ui-lab-components/divider'
import { Group } from 'ui-lab-components/group'
import { Switch } from 'ui-lab-components/switch'
import { FaCode, FaAt, FaEye, FaImage, FaLink, FaLocationDot, FaPlus, FaPen } from 'react-icons/fa6'
export default function Example() {
const [mode, setMode] = useState("write");
const [enabled, setEnabled] = useState(false);
return (
<div className="flex w-130 flex-col gap-4">
<div className="flex items-center space-x-12 justify-between">
<div className="h-4 w-32 rounded bg-background-700/50" aria-hidden="true" />
<div className="space-x-2.5">
<Group variant="secondary" orientation="horizontal" spacing="none">
<Group.Button active={mode === "write"} onPress={() => setMode("write")} >
Write
</Group.Button>
<Divider orientation="vertical" />
<Group.Button active={mode === "preview"} onPress={() => setMode("preview")}>
Markup
</Group.Button>
</Group>
</div>
</div>
<div className="flex flex-col gap-2.5 rounded-sm p-3">
<div className='grid grid-cols-[auto_1fr] gap-2.5'>
<div className="h-10 w-10 rounded-full border-3 border-background-950 bg-background-800" />
<div className='space-y-2'>
<div className="h-3 w-full rounded bg-background-700/40" aria-hidden="true" />
<div className="h-3 w-5/6 rounded bg-background-700/40" aria-hidden="true" />
<div className="h-3 w-4/6 rounded bg-background-700/40" aria-hidden="true" />
</div>
</div>
<div className="mt-8 flex items-center justify-between">
<div className="flex items-center gap-2">
<Switch aria-label='Draft' size="sm" state={{ checked: enabled }} onChange={setEnabled} />
<div className={`h-3 w-20 rounded bg-background-700 transition-opacity ${!enabled ? 'opacity-60' : 'opacity-100'}`} aria-hidden="true" />
</div>
<div className="flex items-center gap-1">
<Button aria-label="Mention someone" size="sm" variant="ghost" icon={{ left: <FaAt /> }} />
<Button aria-label="Add image" size="sm" variant="ghost" icon={{ left: <FaImage /> }} />
<Button aria-label="Add link" size="sm" variant="ghost" icon={{ left: <FaLink /> }} />
<Button aria-label="Add location" size="sm" variant="ghost" icon={{ left: <FaLocationDot /> }} />
<Divider orientation="vertical" className="mx-1" />
<Button size="sm" variant="secondary">Save draft</Button>
<Button aria-label="Create draft" variant="secondary" icon={{ left: <FaPlus /> }} />
</div>
</div>
</div>
</div>
)
}