Input-group
Basic
URL
Required
// Package inputgroup holds the site's example gsx components for
// ui/input-group.
package inputgroup
import (
"github.com/gsxhq/gsxui/ui"
"github.com/gsxhq/gsxui/ui/icon"
)
// Basic renders a search-style InputGroup (leading icon addon +
// InputGroupInput) and a second InputGroup pairing InputGroupInput with a
// trailing InputGroupButton addon.
component Basic() {
<div class="flex w-full max-w-sm flex-col gap-4">
<ui.InputGroup>
<ui.InputGroupAddon>
<icon.Search class="size-4"/>
</ui.InputGroupAddon>
<ui.InputGroupInput placeholder="Search..."/>
</ui.InputGroup>
<ui.InputGroup>
<ui.InputGroupInput placeholder="Email address" type="email"/>
<ui.InputGroupAddon align="inline-end">
<ui.InputGroupButton aria-label="Send">
<icon.Send/>
</ui.InputGroupButton>
</ui.InputGroupAddon>
</ui.InputGroup>
<ui.InputGroup data-disabled="true">
<ui.InputGroupAddon align="block-start">
<ui.InputGroupText>URL</ui.InputGroupText>
</ui.InputGroupAddon>
<ui.InputGroupInput disabled placeholder="Disabled"/>
<ui.InputGroupAddon align="block-end">
<ui.InputGroupText>Required</ui.InputGroupText>
</ui.InputGroupAddon>
</ui.InputGroup>
<div class="flex flex-wrap gap-2">
<ui.InputGroupButton variant="default">Default</ui.InputGroupButton>
<ui.InputGroupButton variant="destructive">Destructive</ui.InputGroupButton>
<ui.InputGroupButton variant="outline">Outline</ui.InputGroupButton>
<ui.InputGroupButton variant="secondary">Secondary</ui.InputGroupButton>
<ui.InputGroupButton variant="link">Link</ui.InputGroupButton>
<ui.InputGroupButton size="sm">Small</ui.InputGroupButton>
<ui.InputGroupButton size="icon-sm" aria-label="Icon">
<icon.Send/>
</ui.InputGroupButton>
</div>
<ui.InputGroup>
<ui.InputGroupInput aria-invalid="true" value="Invalid value"/>
</ui.InputGroup>
</div>
}
RTL
الرابط
مطلوب
package inputgroup
import (
"github.com/gsxhq/gsxui/ui"
"github.com/gsxhq/gsxui/ui/icon"
)
// Rtl keeps Basic's own shape (search InputGroup, email + trailing-button
// InputGroup, block-start/block-end addon group, variant-button row,
// invalid group), translated to Arabic and wrapped in dir="rtl".
component Rtl() {
<div dir="rtl" lang="ar">
<div class="flex w-full max-w-sm flex-col gap-4">
<ui.InputGroup>
<ui.InputGroupAddon>
<icon.Search class="size-4"/>
</ui.InputGroupAddon>
<ui.InputGroupInput placeholder="بحث..."/>
</ui.InputGroup>
<ui.InputGroup>
<ui.InputGroupInput placeholder="البريد الإلكتروني" type="email"/>
<ui.InputGroupAddon align="inline-end">
<ui.InputGroupButton aria-label="إرسال">
<icon.Send/>
</ui.InputGroupButton>
</ui.InputGroupAddon>
</ui.InputGroup>
<ui.InputGroup data-disabled="true">
<ui.InputGroupAddon align="block-start">
<ui.InputGroupText>الرابط</ui.InputGroupText>
</ui.InputGroupAddon>
<ui.InputGroupInput disabled placeholder="معطل"/>
<ui.InputGroupAddon align="block-end">
<ui.InputGroupText>مطلوب</ui.InputGroupText>
</ui.InputGroupAddon>
</ui.InputGroup>
<div class="flex flex-wrap gap-2">
<ui.InputGroupButton variant="default">افتراضي</ui.InputGroupButton>
<ui.InputGroupButton variant="destructive">مدمر</ui.InputGroupButton>
<ui.InputGroupButton variant="outline">مخطط</ui.InputGroupButton>
<ui.InputGroupButton variant="secondary">ثانوي</ui.InputGroupButton>
<ui.InputGroupButton variant="link">رابط</ui.InputGroupButton>
<ui.InputGroupButton size="sm">صغير</ui.InputGroupButton>
<ui.InputGroupButton size="icon-sm" aria-label="أيقونة">
<icon.Send/>
</ui.InputGroupButton>
</div>
<ui.InputGroup>
<ui.InputGroupInput aria-invalid="true" value="قيمة غير صالحة"/>
</ui.InputGroup>
</div>
</div>
}