import { Badge, Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@godxjp/ui/data-display"; import { Button } from "@godxjp/ui/general"; import { Flex, PageContainer } from "@godxjp/ui/layout"; import { Bell, Pencil, Plus, Trash2 } from "lucide-react"; /** * Button — the core action primitive. Composed only from real @godxjp/ui * components. The reference design: exactly one primary (default) action per view; height * comes from the size preset (--control-height); never raw Variants One default (primary) per view. outline / secondary / ghost for supporting actions; link for inline navigation; destructive for irreversible actions. Shape `shape` sets corner radius from the tokens: default (control radius) / pill (fully rounded) / sharp (square). Works with any variant or size. Sizes Height comes from the preset: xs 24 / sm 28 / default 32 / lg 36. Icon-only buttons use the square icon-* sizes. icon-xs owns a 12px glyph: an explicit size-4 class on its SVG is normalized so compact-density padding cannot collapse. Fine pointers use the active --control-height-xs visual square; coarse pointers expand the actual hit target to the framework's 44px --control-height-default floor.
Icon + label, states, and links Leading icons auto-size to 1rem. disabled blocks pointer events (prevents double-submit). Use asChild to render a real link with button styling. Full width `fullWidth` spans the container (`width:100%`) — the prop form of `className="w-full"` for stacked auth / dialog-footer actions. Use the prop, not a raw utility (rule #42). Loading `loading` shows a leading spinner, sets `aria-busy`, and blocks activation while keeping the label in place (no width jump). `loadingText` swaps the label for an i18n-friendly in-flight message. ); }