import { useState } from "react"; import { ArrowUpRight, Bell, Box, CheckCircle2, ChevronDown, Inbox, } from "lucide-react"; import Border from "@moduletrace/twui/elements/Border"; import Breadcrumbs from "@moduletrace/twui/elements/Breadcrumbs"; import Card from "@moduletrace/twui/elements/Card"; import CheckBulletPoints from "@moduletrace/twui/elements/CheckBulletPoints"; import CodeBlock from "@moduletrace/twui/elements/CodeBlock"; import Dropdown from "@moduletrace/twui/elements/Dropdown"; import EmptyContent from "@moduletrace/twui/elements/EmptyContent"; import Loading from "@moduletrace/twui/elements/Loading"; import Modal from "@moduletrace/twui/elements/Modal"; import Pagination from "@moduletrace/twui/elements/Pagination"; import Paper from "@moduletrace/twui/elements/Paper"; import Popover from "@moduletrace/twui/elements/Popover"; import StarRating from "@moduletrace/twui/elements/StarRating"; import Table from "@moduletrace/twui/elements/Table"; import Tabs from "@moduletrace/twui/elements/Tabs"; import Tag from "@moduletrace/twui/elements/Tag"; import Toast from "@moduletrace/twui/elements/Toast"; import Button from "@moduletrace/twui/layout/Button"; import Divider from "@moduletrace/twui/layout/Divider"; import H1 from "@moduletrace/twui/layout/H1"; import P from "@moduletrace/twui/layout/P"; import Row from "@moduletrace/twui/layout/Row"; import Span from "@moduletrace/twui/layout/Span"; import Stack from "@moduletrace/twui/layout/Stack"; import { TWUIButtonColors } from "@moduletrace/twui/layout/Button"; import DemoSection from "../(components)/DemoSection"; const TABLE_DATA = [ { component: "Button", folder: "layout", status: "stable" }, { component: "Input", folder: "form", status: "stable" }, { component: "Tabs", folder: "elements", status: "stable" }, { component: "AceEditor", folder: "editors", status: "optional peer" }, ]; const TAG_COLORS = TWUIButtonColors.filter((color) => ["primary", "secondary", "success", "error", "warning", "gray"].includes( color, ), ); export default function ElementsPage() { const [page, setPage] = useState(1); const [toastOpen, setToastOpen] = useState(false); const [rating, setRating] = useState(3); return (

Elements

Composite components. Overlays render into portals appended to document.body, so they escape any stacking context in the page.

Plain card A bordered surface with no link behaviour. Linked card The whole card is clickable. Paper Used for grouped content and forms. {TAG_COLORS.map((color) => ( {color} ))} {TAG_COLORS.map((color) => ( {color} ))} Border with default spacing variant matrix The first tab is active by default. Tab values are slugified from the title unless you provide one.

), }, { title: "Details", content: ( ), }, { title: "Disabled-looking", content: (

This is just a third tab; there is no disabled state in the current API.

), }, ]} />
Page {page} of {Math.ceil(42 / 5)} } > Actions } contentWrapperProps={{ className: "min-w-48" }} > Edit item Duplicate item Delete item Hovering the toast pauses the timer. Build finished successfully.
Loading Star rating Current rating: {rating} } url="#" />
Code block {`bun add @moduletrace/twui`}
The divider and back button are configurable. ); } function OverlayDemo() { const [modalOpen, setModalOpen] = useState(false); return ( <> Modal content

The modal is controlled by the open and{" "} setOpen props. Without a target it renders nothing until you set it.

Hover for a popover } > Popover Same props as Modal, plus hover trigger support. ); }