Button-group

Basic

42
// Package buttongroup holds the site's example gsx components for
// ui/button-group.
package buttongroup

import (
	"github.com/gsxhq/gsxui/ui"
	"github.com/gsxhq/gsxui/ui/icon"
)

// Basic renders four realistic groups: a horizontal outline pair (NO
// separator — adjacent outline buttons already share a single hairline via
// the border-l-0 collapse; inserting a ButtonGroupSeparator there stacks
// the button's own border on top of the separator's 1px and doubles the
// divider), a secondary pair split by a ButtonGroupSeparator (shadcn's own
// button-group-separator demo shape: the separator exists for borderLESS
// variants), a quantity stepper showing ButtonGroupText between two icon
// buttons, and a vertical secondary pair split by a horizontal separator.
component Basic() {
	<div class="flex flex-wrap items-start gap-6">
		<ui.ButtonGroup>
			<ui.Button variant="outline">Archive</ui.Button>
			<ui.Button variant="outline">Report</ui.Button>
		</ui.ButtonGroup>
		<ui.ButtonGroup>
			<ui.Button variant="secondary">Copy</ui.Button>
			<ui.ButtonGroupSeparator/>
			<ui.Button variant="secondary">Paste</ui.Button>
		</ui.ButtonGroup>
		<ui.ButtonGroup aria-label="Quantity">
			<ui.Button variant="outline" size="icon" aria-label="Decrease quantity">
				<icon.Minus/>
			</ui.Button>
			<ui.ButtonGroupText>42</ui.ButtonGroupText>
			<ui.Button variant="outline" size="icon" aria-label="Increase quantity">
				<icon.Plus/>
			</ui.Button>
		</ui.ButtonGroup>
		<ui.ButtonGroup orientation="vertical" aria-label="Media controls" class="h-fit">
			<ui.Button variant="secondary" size="icon">
				<icon.Plus/>
			</ui.Button>
			<ui.ButtonGroupSeparator orientation="horizontal"/>
			<ui.Button variant="secondary" size="icon">
				<icon.Minus/>
			</ui.Button>
		</ui.ButtonGroup>
	</div>
}

RTL

42
package buttongroup

import (
	"github.com/gsxhq/gsxui/ui"
	"github.com/gsxhq/gsxui/ui/icon"
)

// Rtl mirrors Basic's outline-pair and quantity-stepper groups, translated
// to Arabic and wrapped in dir="rtl" — the back-arrow icon flips via
// rtl:rotate-180 like shadcn's own button-group-rtl demo. That upstream
// demo also nests a DropdownMenu (with a radio-group submenu) inside a
// ButtonGroup; gsxui's button-group example set doesn't compose
// dropdown-menu (see Basic), so this example keeps the two established
// group shapes instead of introducing that composition here.
component Rtl() {
	<div dir="rtl" lang="ar" class="flex flex-wrap items-start gap-6">
		<ui.ButtonGroup>
			<ui.Button variant="outline" size="icon" aria-label="Go Back">
				<icon.ArrowLeft class="rtl:rotate-180"/>
			</ui.Button>
		</ui.ButtonGroup>
		<ui.ButtonGroup>
			<ui.Button variant="outline">أرشفة</ui.Button>
			<ui.Button variant="outline">تقرير</ui.Button>
		</ui.ButtonGroup>
		<ui.ButtonGroup aria-label="Quantity">
			<ui.Button variant="outline" size="icon" aria-label="Decrease quantity">
				<icon.Minus/>
			</ui.Button>
			<ui.ButtonGroupText>42</ui.ButtonGroupText>
			<ui.Button variant="outline" size="icon" aria-label="Increase quantity">
				<icon.Plus/>
			</ui.Button>
		</ui.ButtonGroup>
	</div>
}