shadimage
starseam
uibutton-groupsource: ok · hit

Button group

Buttons riveted into one strip: one hairline frame, seams between the members.

npx shadcn add "https://starseam.astroicers.link/r/button-group.json"
free

No selection tags yet — empty means no evidence, not lack of support.

Dependencies

Bundle weight · light

Registry dependencies

https://starseam.astroicers.link/r/theme.json

Files1 · source cached 10/8/2026, 10:25:31 PM

registry/starseam/ui/button-group.tsx
import * as React from "react";
import { cn } from "@/lib/utils";

/**
 * Buttons riveted into one strip: a single hairline frame, hairline seams
 * between the members — several actions presented as one instrument, the
 * general-purpose cousin of mode-switch. Children keep their own semantics;
 * the group only takes their individual frames away, because the boundary
 * between members is the group's seam, not each button's edge (DECISIONS 03).
 */
function ButtonGroup({
  className,
  ...props
}: React.ComponentProps<"div"> & { "aria-label"?: string }) {
  return (
    <div
      role="group"
      data-slot="button-group"
      className={cn(
        "inline-flex items-stretch rounded-[var(--ss-radius)]",
        "border border-[var(--ss-seam-strong)] divide-x divide-[var(--ss-seam)]",
        "[&>[data-slot=plate-button]]:rounded-none [&>[data-slot=plate-button]]:border-0",
        "[&>[data-slot=plate-button]]:focus-visible:outline-offset-[-1px]",
        className
      )}
      {...props}
    />
  );
}

export { ButtonGroup };

More from starseam

Browse all components in this library →