Toggle-group

Basic

// Package togglegroup holds the site's example gsx components for
// ui/toggle-group. "toggle-group" can't be a Go package name (hyphen), so
// the directory drops it — same selectbox/switchctl-style workaround as
// select/switch, not a Go-keyword issue this time. The registered example
// key stays the hyphenated "toggle-group" (see togglegroup.go).
package togglegroup

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

// Basic mirrors shadcn's own toggle-group-demo.tsx: type="multiple",
// variant="outline", 3 icon-only items, none pressed at first paint —
// every ToggleGroupItem repeats the group's groupType/variant/size/spacing
// explicitly (see ui/toggle-group.gsx's own GAP doc comment on why: no
// context, the caller resolves and passes down). groupType, not type — see
// ToggleGroup's own doc comment on the Go-keyword param rename.
component Basic() {
	<ui.ToggleGroup groupType="multiple" variant="outline" size="lg" aria-label="Text formatting">
		<ui.ToggleGroupItem groupType="multiple" variant="outline" size="lg" value="bold" aria-label="Toggle bold">
			<icon.Bold/>
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem groupType="multiple" variant="outline" size="lg" value="italic" aria-label="Toggle italic">
			<icon.Italic/>
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem
			groupType="multiple"
			variant="outline"
			size="lg"
			value="underline"
			aria-label="Toggle underline"
			aria-invalid="true"
		>
			<icon.Underline/>
		</ui.ToggleGroupItem>
	</ui.ToggleGroup>
}

Single

// Package togglegroup — see basic.gsx's own package doc comment.
package togglegroup

import "github.com/gsxhq/gsxui/ui"

// Single mirrors shadcn's toggle-group-single.tsx: groupType="single",
// default variant — the role="radio"/aria-checked branch (see
// ui/toggle-group.gsx's own doc comment) left untested by Basic's
// type="multiple" demo. "left" is server-rendered already pressed
// (pressed, aria-checked="true", data-state="on"); clicking "center" or
// "right" replaces it via toggle-group.js's single-type
// replace-on-activate mechanic.
component Single() {
	<ui.ToggleGroup groupType="single" aria-label="Text alignment">
		<ui.ToggleGroupItem groupType="single" value="left" pressed aria-label="Align left">
			Left
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem groupType="single" value="center" aria-label="Align center">
			Center
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem groupType="single" value="right" aria-label="Align right">
			Right
		</ui.ToggleGroupItem>
	</ui.ToggleGroup>
}

Spacing

// Package togglegroup — see basic.gsx's own package doc comment.
package togglegroup

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

// Spacing mirrors shadcn's toggle-group-spacing.tsx: type="multiple",
// variant="outline", spacing="2", size="sm" — the spacing/rounding/size
// stress case (spacing != "0" means the data-[spacing=0]: squared-off/
// joined-pill selectors on ToggleGroupItem never fire, so items render as
// separate rounded buttons with a real gap between them, sized by the
// root's style="--gap: 2").
component Spacing() {
	<ui.ToggleGroup groupType="multiple" variant="outline" spacing="2" size="sm" aria-label="Text formatting">
		<ui.ToggleGroupItem
			groupType="multiple"
			variant="outline"
			spacing="2"
			size="sm"
			value="bold"
			aria-label="Toggle bold"
		>
			<icon.Bold/>
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem
			groupType="multiple"
			variant="outline"
			spacing="2"
			size="sm"
			value="italic"
			aria-label="Toggle italic"
		>
			<icon.Italic/>
		</ui.ToggleGroupItem>
		<ui.ToggleGroupItem
			groupType="multiple"
			variant="outline"
			spacing="2"
			size="sm"
			value="underline"
			aria-label="Toggle underline"
		>
			<icon.Underline/>
		</ui.ToggleGroupItem>
	</ui.ToggleGroup>
}

RTL

package togglegroup

import "github.com/gsxhq/gsxui/ui"

// Rtl mirrors shadcn's own toggle-group-rtl demo: an outline single-select
// group of three text items ("list" selected), translated to Arabic and
// wrapped in dir="rtl".
component Rtl() {
	<div dir="rtl" lang="ar">
		<ui.ToggleGroup groupType="single" variant="outline" aria-label="View mode">
			<ui.ToggleGroupItem groupType="single" variant="outline" value="list" pressed aria-label="قائمة">
				قائمة
			</ui.ToggleGroupItem>
			<ui.ToggleGroupItem groupType="single" variant="outline" value="grid" aria-label="شبكة">شبكة</ui.ToggleGroupItem>
			<ui.ToggleGroupItem groupType="single" variant="outline" value="cards" aria-label="بطاقات">
				بطاقات
			</ui.ToggleGroupItem>
		</ui.ToggleGroup>
	</div>
}