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/ui"
)
// 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">
<ui.Menubar>
<ui.MenubarMenu>
<ui.MenubarTrigger>ملف</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarGroup>
<ui.MenubarItem>
علامة تبويب جديدة
<ui.MenubarShortcut>⌘T</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
نافذة جديدة
<ui.MenubarShortcut>⌘N</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem aria-disabled="true" data-disabled="true">نافذة التصفح المتخفي الجديدة</ui.MenubarItem>
</ui.MenubarGroup>
<ui.MenubarSub>
<ui.MenubarSubTrigger>مشاركة</ui.MenubarSubTrigger>
<ui.MenubarSubContent>
<ui.MenubarItem>رابط البريد الإلكتروني</ui.MenubarItem>
<ui.MenubarItem>الرسائل</ui.MenubarItem>
<ui.MenubarItem>الملاحظات</ui.MenubarItem>
</ui.MenubarSubContent>
</ui.MenubarSub>
<ui.MenubarSeparator/>
<ui.MenubarItem>
طباعة...
<ui.MenubarShortcut>⌘P</ui.MenubarShortcut>
</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>تعديل</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarItem>
تراجع
<ui.MenubarShortcut>⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem>
إعادة
<ui.MenubarShortcut>⇧⌘Z</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarSub>
<ui.MenubarSubTrigger>بحث</ui.MenubarSubTrigger>
<ui.MenubarSubContent>
<ui.MenubarItem>البحث على الويب</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem>بحث...</ui.MenubarItem>
<ui.MenubarItem>البحث التالي</ui.MenubarItem>
<ui.MenubarItem>البحث السابق</ui.MenubarItem>
</ui.MenubarSubContent>
</ui.MenubarSub>
<ui.MenubarSeparator/>
<ui.MenubarItem>قص</ui.MenubarItem>
<ui.MenubarItem>نسخ</ui.MenubarItem>
<ui.MenubarItem>لصق</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>عرض</ui.MenubarTrigger>
<ui.MenubarContent>
<ui.MenubarCheckboxItem checked={true} value="bookmarks">شريط الإشارات المرجعية</ui.MenubarCheckboxItem>
<ui.MenubarCheckboxItem checked={false} value="full-urls">عناوين URL الكاملة</ui.MenubarCheckboxItem>
<ui.MenubarSeparator/>
<ui.MenubarItem aria-disabled="true" data-disabled="true">
إعادة تحميل
<ui.MenubarShortcut>⌘R</ui.MenubarShortcut>
</ui.MenubarItem>
<ui.MenubarItem aria-disabled="true" data-disabled="true">
إعادة تحميل قسري
<ui.MenubarShortcut>⇧⌘R</ui.MenubarShortcut>
</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
<ui.MenubarMenu>
<ui.MenubarTrigger>الملفات الشخصية</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>تعديل...</ui.MenubarItem>
<ui.MenubarSeparator/>
<ui.MenubarItem>إضافة ملف شخصي...</ui.MenubarItem>
</ui.MenubarContent>
</ui.MenubarMenu>
</ui.Menubar>
</div>
}