Menubar
Basic
// Package menubar holds the site's example gsx components for ui/menubar.
package menubar
import (
"github.com/gsxhq/gsxui/ui"
)
// Basic mirrors shadcn's own menubar-demo.tsx (registry/new-york-v4/
// examples/menubar-demo.tsx) shape, trimmed to two menus: File (plain items
// with shortcuts, a separator) and Edit (plain items). Once one of the two
// triggers is open, hovering the other switches menus with no click — the
// open-follows-hover behavior this task's own ui/menubar.js adds.
component Basic() {
<ui.Menubar>
<ui.MenubarMenu>
<ui.MenubarTrigger>File</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarItem>
New Tab
<ui.MenubarShortcut>⌘T</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
New Window
<ui.MenubarShortcut>⌘N</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem>
Print...
<ui.MenubarShortcut>⌘P</ui.MenubarShortcut>
</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>Edit</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarItem>
Undo
<ui.MenubarShortcut>⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
Redo
<ui.MenubarShortcut>⇧⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem>Cut</ui.MenubarItem>
<ui.MenubarItem>Copy</ui.MenubarItem>
<ui.MenubarItem>Paste</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
</ui.Menubar>
}
Full menu with checkboxes, radios, and a submenu
package menubar
import (
"github.com/gsxhq/gsxui/ui"
)
// Full mirrors shadcn's own menubar-demo.tsx (registry/new-york-v4/
// examples/menubar-demo.tsx) end to end: a File menu with a disabled item
// and a submenu, an Edit menu with checkbox items, a View menu with a
// radio group, and a Profiles-shaped menu — exercising every shared item
// type Task 1/2 already shipped (Item, CheckboxItem, RadioGroup/RadioItem,
// Sub/SubTrigger/SubContent) plus this task's own bar-level roving tabindex
// and open-follows-hover. Every `inset` prop shadcn's demo passes maps to
// the CSS-only data-inset attr axis (see docs/jsx-parity.md's
// ## dropdown-menu ledger).
component Full() {
<ui.Menubar>
<ui.MenubarMenu>
<ui.MenubarTrigger>File</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarGroup>
<ui.MenubarLabel>File actions</ui.MenubarLabel>
<ui.MenubarItem>
New Tab
<ui.MenubarShortcut>⌘T</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
New Window
<ui.MenubarShortcut>⌘N</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem variant="destructive" aria-disabled="true" data-disabled="true">
New Incognito Window
</ui.MenubarItem>
</ui.MenubarGroup>
<ui.MenubarSub>
<ui.MenubarSubTrigger>Share</ui.MenubarSubTrigger>
<ui.MenubarSubContent>
<ui.MenubarItem>Email Link</ui.MenubarItem>
<ui.MenubarItem>Messages</ui.MenubarItem>
<ui.MenubarItem>Notes</ui.MenubarItem>
</ui.MenubarSubContent>
</ui.MenubarSub>
<ui.MenubarSeparator/>
<ui.MenubarItem>
Print...
<ui.MenubarShortcut>⌘P</ui.MenubarShortcut>
</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>Edit</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarItem>
Undo
<ui.MenubarShortcut>⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
Redo
<ui.MenubarShortcut>⇧⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarSub>
<ui.MenubarSubTrigger>Find</ui.MenubarSubTrigger>
<ui.MenubarSubContent>
<ui.MenubarItem>Search the web</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem>Find...</ui.MenubarItem>
<ui.MenubarItem>Find Next</ui.MenubarItem>
<ui.MenubarItem>Find Previous</ui.MenubarItem>
</ui.MenubarSubContent>
</ui.MenubarSub>
<ui.MenubarSeparator/>
<ui.MenubarItem>Cut</ui.MenubarItem>
<ui.MenubarItem>Copy</ui.MenubarItem>
<ui.MenubarItem>Paste</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>View</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarCheckboxItem checked={true} value="bookmarks">Always Show Bookmarks Bar</ui.MenubarCheckboxItem>
<ui.MenubarCheckboxItem checked={false} value="full-urls">Always Show Full URLs</ui.MenubarCheckboxItem>
<ui.MenubarSeparator/>
<ui.MenubarItem aria-disabled="true" data-disabled="true" data-inset="true">
Reload
<ui.MenubarShortcut>⌘R</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem aria-disabled="true" data-disabled="true" data-inset="true">
Force Reload
<ui.MenubarShortcut>⇧⌘R</ui.MenubarShortcut>
</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>Profiles</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarRadioGroup value="benoit">
<ui.MenubarRadioItem checked={false} value="andy">Andy</ui.MenubarRadioItem>
<ui.MenubarRadioItem checked={true} value="benoit">Benoit</ui.MenubarRadioItem>
<ui.MenubarRadioItem checked={false} value="luis">Luis</ui.MenubarRadioItem>
</ui.MenubarRadioGroup>
<ui.MenubarSeparator/>
<ui.MenubarItem data-inset="true">Edit...</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem data-inset="true">Add Profile...</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
</ui.Menubar>
}
RTL
// Package menubar holds the site's example gsx components for ui/menubar.
package menubar
import (
"github.com/gsxhq/gsxui/site/uirtl"
)
// Rtl mirrors shadcn's own menubar-rtl demo (itself menubar-demo.tsx's
// shape, same as this dir's own Full): a File menu with a disabled item
// and a Share submenu, an Edit menu with a Find submenu, a View menu with
// checkbox items, and a Profiles menu with a radio group — translated to
// Arabic and wrapped in dir="rtl".
component Rtl() {
<div dir="rtl" lang="ar">
<uirtl.Menubar>
<uirtl.MenubarMenu>
<uirtl.MenubarTrigger>ملف</uirtl.MenubarTrigger>
<uirtl.MenubarContent>
<uirtl.MenubarGroup>
<uirtl.MenubarItem>
علامة تبويب جديدة
<uirtl.MenubarShortcut>⌘T</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
<uirtl.MenubarItem>
نافذة جديدة
<uirtl.MenubarShortcut>⌘N</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
<uirtl.MenubarItem aria-disabled="true" data-disabled="true">
نافذة التصفح المتخفي الجديدة
</uirtl.MenubarItem>
</uirtl.MenubarGroup>
<uirtl.MenubarSub>
<uirtl.MenubarSubTrigger>مشاركة</uirtl.MenubarSubTrigger>
<uirtl.MenubarSubContent>
<uirtl.MenubarItem>رابط البريد الإلكتروني</uirtl.MenubarItem>
<uirtl.MenubarItem>الرسائل</uirtl.MenubarItem>
<uirtl.MenubarItem>الملاحظات</uirtl.MenubarItem>
</uirtl.MenubarSubContent>
</uirtl.MenubarSub>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem>
طباعة...
<uirtl.MenubarShortcut>⌘P</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
</uirtl.MenubarContent>
</uirtl.MenubarMenu>
<uirtl.MenubarMenu>
<uirtl.MenubarTrigger>تعديل</uirtl.MenubarTrigger>
<uirtl.MenubarContent>
<uirtl.MenubarItem>
تراجع
<uirtl.MenubarShortcut>⌘Z</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
<uirtl.MenubarItem>
إعادة
<uirtl.MenubarShortcut>⇧⌘Z</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
<uirtl.MenubarSeparator/>
<uirtl.MenubarSub>
<uirtl.MenubarSubTrigger>بحث</uirtl.MenubarSubTrigger>
<uirtl.MenubarSubContent>
<uirtl.MenubarItem>البحث على الويب</uirtl.MenubarItem>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem>بحث...</uirtl.MenubarItem>
<uirtl.MenubarItem>البحث التالي</uirtl.MenubarItem>
<uirtl.MenubarItem>البحث السابق</uirtl.MenubarItem>
</uirtl.MenubarSubContent>
</uirtl.MenubarSub>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem>قص</uirtl.MenubarItem>
<uirtl.MenubarItem>نسخ</uirtl.MenubarItem>
<uirtl.MenubarItem>لصق</uirtl.MenubarItem>
</uirtl.MenubarContent>
</uirtl.MenubarMenu>
<uirtl.MenubarMenu>
<uirtl.MenubarTrigger>عرض</uirtl.MenubarTrigger>
<uirtl.MenubarContent>
<uirtl.MenubarCheckboxItem checked={true} value="bookmarks">شريط الإشارات المرجعية</uirtl.MenubarCheckboxItem>
<uirtl.MenubarCheckboxItem checked={false} value="full-urls">عناوين URL الكاملة</uirtl.MenubarCheckboxItem>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem aria-disabled="true" data-disabled="true">
إعادة تحميل
<uirtl.MenubarShortcut>⌘R</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
<uirtl.MenubarItem aria-disabled="true" data-disabled="true">
إعادة تحميل قسري
<uirtl.MenubarShortcut>⇧⌘R</uirtl.MenubarShortcut>
</uirtl.MenubarItem>
</uirtl.MenubarContent>
</uirtl.MenubarMenu>
<uirtl.MenubarMenu>
<uirtl.MenubarTrigger>الملفات الشخصية</uirtl.MenubarTrigger>
<uirtl.MenubarContent>
<uirtl.MenubarRadioGroup value="benoit">
<uirtl.MenubarRadioItem checked={false} value="andy">Andy</uirtl.MenubarRadioItem>
<uirtl.MenubarRadioItem checked={true} value="benoit">Benoit</uirtl.MenubarRadioItem>
<uirtl.MenubarRadioItem checked={false} value="luis">Luis</uirtl.MenubarRadioItem>
</uirtl.MenubarRadioGroup>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem>تعديل...</uirtl.MenubarItem>
<uirtl.MenubarSeparator/>
<uirtl.MenubarItem>إضافة ملف شخصي...</uirtl.MenubarItem>
</uirtl.MenubarContent>
</uirtl.MenubarMenu>
</uirtl.Menubar>
</div>
}