Skip to content

Commit

A phone's g1t is flat, as a computer's is. The page fills the screen above the bottom bar with no inset, no rounded corners and no frame around it, and the bar runs flat along the bottom edge under a rule, on the rail's colour, instead of floating as a rounded card. Each tab's name is centred under its icon (they sat to the left of their cells, so Home and Chat drifted off their icons), and a long one gives way rather than crowding its neighbours; the tab you are in is marked as the rail marks the app you are in, its icon on the sidebar's accent, instead of a line on the bar's top edge. More stands flat on the bar, and the account sheet and More's tiles and rows take the sidebar's corners.

The sidebar a phone opens is most of the screen wide, up to 22rem, instead of the computer's 15rem, so project names read whole and the pins sit at the row's end. A group's button, such as Projects' new project, shares its label's row, so it stays level with the words at any text size instead of slipping under them; and the sidebar's rules stay inside its edges (their width lost to the separator's own full width, so they ran past it). The phone app's bar follows the site's: flat on the rail's colour, the tab you are in on the rail's accent. The workspaces guide says how the phone's bar and sidebar look.

Claude-Session:
https://claude.ai/code/session_01MQE64a4WNN14F8GELCiuc9
Claude and Claude Opus 5.5committed Parent0127d22Browse files
7 files+97−670/7 viewed
+2−2
753753
754754 | | What it does |
755755 | --- | --- |
756−| **The bar along the bottom** | **Home**, **Chat**, **Notifications**, **Agents** and **Code** (for members with Code access), each with what is unread, and **More**. It steps aside while the keyboard is up and inside a conversation. |
756+| **The bar along the bottom** | **Home**, **Chat**, **Notifications**, **Agents** and **Code** (for members with Code access), each with what is unread, and **More**. It runs flat along the bottom edge, as the rail stands beside the page on a computer, and the page fills the screen above it. The app you are in is marked as on the rail. It steps aside while the keyboard is up and inside a conversation. |
757757 | **More** | A panel above the bar with **All apps**, the [Marketplace](/guides/marketplace/), your pinned apps, **Artifacts**, **People**, **Workspace**, and **You and help**: your status, profile and settings, [appearance](#appearance), the documentation, support, status, the keyboard's shortcuts and signing out. |
758−| **The sidebar button**, at the left of the page's header | Opens the sidebar of the app you are in from the left: the same lists and links as on a computer. Tap outside it, or open a page, and it closes. |
758+| **The sidebar button**, at the left of the page's header | Opens the sidebar of the app you are in from the left, most of the screen wide: the same lists and links as on a computer. Tap outside it, or open a page, and it closes. |
759759 | **The tab you are already on** | Tap it again to open that app's sidebar too. |
760760 | **The workspace's name** in the page's header | Switches workspace, or opens your profile or settings. |
761761
+26−11
11 import * as Notifications from "expo-notifications";
22 import { Tabs, router, useGlobalSearchParams } from "expo-router";
33 import { Bell, Bot, Code2, House, Menu, MessagesSquare } from "lucide-react-native";
4−import { useEffect, useRef } from "react";
4+import type { LucideIcon } from "lucide-react-native";
5+import { type ComponentType, useEffect, useRef } from "react";
6+import { StyleSheet, View } from "react-native";
57
68 import { Banner } from "@/components/chat/banner";
79 import { FeedProvider, useFeed } from "@/lib/feed";
4446 initialRouteName="chat"
4547 screenOptions={{
4648 headerShown: false,
47− tabBarActiveTintColor: colors.accent,
48− tabBarInactiveTintColor: colors.muted,
49− tabBarStyle: { backgroundColor: colors.surface, borderTopColor: colors.line },
50− tabBarLabelStyle: { fontSize: 11, fontWeight: "600" },
49+ // The site's phone bar: flat along the bottom on the rail's colour, the
50+ // app you are in marked as the rail marks it (apps/web components/mobile.tsx).
51+ tabBarActiveTintColor: colors.fg,
52+ tabBarInactiveTintColor: colors.faint,
53+ tabBarStyle: { backgroundColor: colors.rail, borderTopColor: colors.line, borderTopWidth: StyleSheet.hairlineWidth, elevation: 0 },
54+ tabBarLabelStyle: { fontSize: 11, fontWeight: "500" },
55+ tabBarIconStyle: { width: 44, height: 28 },
5156 }}
5257 >
5358 <Tabs.Screen name="index" options={{ href: null }} />
54− <Tabs.Screen name="home" options={{ title: "Home", tabBarIcon: ({ color, size }) => <House color={color} size={size} /> }} />
59+ <Tabs.Screen name="home" options={{ title: "Home", tabBarIcon: (props) => <BarIcon icon={House} {...props} /> }} />
5560 <Tabs.Screen
5661 name="chat"
5762 options={{
5863 title: "Chat",
59− tabBarIcon: ({ color, size }) => <MessagesSquare color={color} size={size} />,
64+ tabBarIcon: (props) => <BarIcon icon={MessagesSquare} {...props} />,
6065 tabBarBadge: badge,
6166 tabBarBadgeStyle: { backgroundColor: mentions > 0 ? colors.accent : colors.lineStrong, color: mentions > 0 ? colors.onAccent : colors.fg, fontSize: 11 },
6267 }}
6368 />
64− <Tabs.Screen name="notifications" options={{ title: "Notifications", tabBarIcon: ({ color, size }) => <Bell color={color} size={size} /> }} />
65− <Tabs.Screen name="agents" options={{ title: "Agents", tabBarIcon: ({ color, size }) => <Bot color={color} size={size} /> }} />
66− <Tabs.Screen name="code" options={{ title: "Code", href: code ? undefined : null, tabBarIcon: ({ color, size }) => <Code2 color={color} size={size} /> }} />
69+ <Tabs.Screen name="notifications" options={{ title: "Notifications", tabBarIcon: (props) => <BarIcon icon={Bell} {...props} /> }} />
70+ <Tabs.Screen name="agents" options={{ title: "Agents", tabBarIcon: (props) => <BarIcon icon={Bot} {...props} /> }} />
71+ <Tabs.Screen name="code" options={{ title: "Code", href: code ? undefined : null, tabBarIcon: (props) => <BarIcon icon={Code2} {...props} /> }} />
6772 <Tabs.Screen name="customize" options={{ href: null }} />
68− <Tabs.Screen name="more" options={{ title: "More", tabBarIcon: ({ color, size }) => <Menu color={color} size={size} /> }} />
73+ <Tabs.Screen name="more" options={{ title: "More", tabBarIcon: (props) => <BarIcon icon={Menu} {...props} /> }} />
6974 </Tabs>
7075 );
7176 }
7277
78+/** A tab's icon: on the rail's accent in a 10px-rounded square when it is the tab you are in. */
79+function BarIcon({ icon: Icon, focused }: { icon: LucideIcon | ComponentType<{ color: string; size: number }>; focused: boolean }) {
80+ const colors = useColors();
81+ return (
82+ <View style={{ width: 44, height: 28, borderRadius: 10, alignItems: "center", justifyContent: "center", backgroundColor: focused ? colors.railAccent : "transparent" }}>
83+ <Icon color={focused ? colors.fg : colors.muted} size={20} />
84+ </View>
85+ );
86+}
87+
7388 /**
7489 * Registers the phone for notifications once signed in (asking the first
7590 * time), and opens what a tapped notification is about: the thread or
+8−0
2121 accentLow: string;
2222 /** Text on an accent-filled button. */
2323 onAccent: string;
24+ /** The rail and the bottom bar (apps/web app.css `--color-rail`). */
25+ rail: string;
26+ /** What marks the app you are in on the rail (`--color-sidebar-accent`). */
27+ railAccent: string;
2428 success: string;
2529 successLow: string;
2630 info: string;
4347 accentDim: "#8577e0",
4448 accentLow: "#221e38",
4549 onAccent: "#0f0f11",
50+ rail: "#050507",
51+ railAccent: "#1c1c20",
4652 success: "#86efc4",
4753 successLow: "#10302a",
4854 info: "#8ab4ff",
6571 accentDim: "#9584dc",
6672 accentLow: "#ece8fb",
6773 onAccent: "#ffffff",
74+ rail: "#ffffff",
75+ railAccent: "#e1e1de",
6876 success: "#0d7a52",
6977 successLow: "#e2f4ec",
7078 info: "#2160cc",
+8−8
353353
354354 /*
355355 * The app's frame (components/shell.tsx), set on <body data-frame="app">:
356− * the page fills the window beside the rail and the sidebar; on a phone
357− * it is a rounded panel inset above the bottom bar. What sticks to the top
358− * or the bottom of a page reads these:
359− * --frame-top the gap above the page (none on a computer)
356+ * the page fills the window beside the rail and the sidebar, and on a
357+ * phone it fills the window above the bottom bar, flat, as on a computer.
358+ * What sticks to the top or the bottom of a page reads these:
359+ * --frame-top what is above the page: a phone's status bar, where it overlaps
360360 * --topbar-h that gap plus the top bar: where sticky things sit
361− * --tabbar-h what the bottom takes: on a phone, the gap under the panel and the bar
361+ * --tabbar-h what the bottom takes: on a phone, the bar and the home indicator under it
362362 * --page-h the height left for a page that fills the window (Chat)
363363 * The public frame keeps a plain header 3.5rem tall and nothing at the bottom.
364364 */
374374 }
375375 @media (max-width: 767px) {
376376 body[data-frame="app"] {
377− --frame-top: max(0.375rem, env(safe-area-inset-top));
378− /* The bottom bar: 64px tall, 8px off the edge, 6px under the panel. */
379− --tabbar-h: calc(4.875rem + env(safe-area-inset-bottom));
377+ --frame-top: env(safe-area-inset-top);
378+ /* The bottom bar: 56px tall along the bottom edge, and the home indicator's room under it. */
379+ --tabbar-h: calc(3.5rem + env(safe-area-inset-bottom));
380380 }
381381 }
382382
+26−19
120120 type Tab = { key: ModeKey; label: string; badge?: { count: number; loud: boolean } };
121121
122122 /**
123− * The bottom bar of a phone, floating 8px from the edges: Home, Chat,
123+ * The bottom bar of a phone, flat along the bottom edge under a rule, as
124+ * the rail stands flat beside the page on a computer: Home, Chat,
124125 * Notifications, Agents and Code (for a member with Code access), each
125− * with what is unread, and More. It steps aside while the keyboard is up
126+ * with what is unread, and More. The tab you are in has the rail's own
127+ * mark: its icon on the sidebar's accent. It steps aside while the keyboard is up
126128 * and inside a conversation. The tab you are in, tapped again, opens its
127129 * mode's menu (its sidebar).
128130 */
160162 <>
161163 <nav
162164 aria-label="Apps"
163− className="fixed right-2 bottom-[calc(0.5rem+env(safe-area-inset-bottom))] left-2 z-40 h-16 rounded-2xl border border-line bg-rail px-1 shadow-[0_1px_0_rgba(255,255,255,0.03)_inset,0_8px_24px_rgba(0,0,0,0.35)] md:hidden in-data-[keyboard=open]:hidden"
165+ className="fixed inset-x-0 bottom-0 z-40 h-(--tabbar-h) border-t border-line bg-rail pb-[env(safe-area-inset-bottom)] md:hidden in-data-[keyboard=open]:hidden"
164166 >
165167 <ul className="grid h-full" style={{ gridTemplateColumns: `repeat(${tabs.length + 1}, minmax(0, 1fr))` }}>
166168 {tabs.map((tab) => {
183185 }}
184186 className={BAR_ITEM}
185187 >
186− {current && <TopBar />}
187188 <BarIcon current={current}>
188189 {appIcon(tab.key as BuiltinApp, 20)}
189190 {tab.badge && <CountBadge count={count} loud={tab.badge.loud} />}
190191 </BarIcon>
191− <span className={`w-full truncate text-[0.625rem] leading-tight font-medium max-[380px]:text-[0.5625rem] max-[380px]:tracking-[-0.02em] ${current ? "text-fg" : "text-faint"}`}>{tab.label}</span>
192+ <BarLabel current={current}>{tab.label}</BarLabel>
192193 </Link>
193194 </li>
194195 );
195196 })}
196197 <li className="min-w-0">
197198 <button type="button" aria-expanded={more} aria-haspopup="dialog" onClick={() => setMore(true)} className={BAR_ITEM}>
198− {(more || !inTabs) && <TopBar />}
199199 <BarIcon current={more || !inTabs}>
200200 <Ellipsis size={20} />
201201 </BarIcon>
202− <span className={`w-full truncate text-[0.625rem] leading-tight font-medium ${more || !inTabs ? "text-fg" : "text-faint"}`}>More</span>
202+ <BarLabel current={more || !inTabs}>More</BarLabel>
203203 </button>
204204 </li>
205205 </ul>
209209 );
210210 }
211211
212−const BAR_ITEM = "relative flex h-full w-full flex-col items-center justify-center gap-0.5 rounded-xl outline-none transition-colors focus-visible:ring-2 focus-visible:ring-accent active:bg-raised/60";
212+const BAR_ITEM = "group relative flex h-full w-full flex-col items-center justify-center gap-1 outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-inset";
213213
214−/** The bar on the bottom bar's top edge, over the current tab. */
215−function TopBar() {
216− return <span aria-hidden="true" className="absolute -top-px left-1/2 h-[3px] w-[22px] -translate-x-1/2 rounded-b-[3px] bg-fg" />;
214+/** A tab's icon, marked as the rail marks the app you are in (ui/sidebar.tsx, `size: icon`). */
215+function BarIcon({ current, children }: { current: boolean; children: ReactNode }) {
216+ return (
217+ <span
218+ className={`relative flex h-7 w-11 items-center justify-center rounded-[10px] transition-colors group-active:bg-sidebar-accent/60 ${current ? "bg-sidebar-accent text-fg" : "text-muted"}`}
219+ >
220+ {children}
221+ </span>
222+ );
217223 }
218224
219−function BarIcon({ current, children }: { current: boolean; children: ReactNode }) {
225+/** A tab's name, centred under its icon; a long one gives way rather than crowding its neighbours. */
226+function BarLabel({ current, children }: { current: boolean; children: ReactNode }) {
220227 return (
221− <span className={`relative flex size-8 items-center justify-center rounded-[10px] transition-colors ${current ? "bg-raised text-fg shadow-[inset_0_0_0_1px_var(--color-line-strong)]" : "text-muted"}`}>
228+ <span className={`block w-full truncate px-0.5 text-center text-[0.6875rem] leading-none font-medium max-[380px]:text-[0.625rem] ${current ? "text-fg" : "text-faint"}`}>
222229 {children}
223230 </span>
224231 );
228235 function MoreTile({ to, icon, label, onClick, disabled, note }: { to?: string; icon: ReactNode; label: string; onClick?: () => void; disabled?: boolean; note?: string }) {
229236 const inner = (
230237 <>
231− <span className={`flex size-11 items-center justify-center rounded-xl ${disabled ? "bg-raised/60 text-faint" : "bg-raised text-fg"}`}>{icon}</span>
238+ <span className={`flex size-11 items-center justify-center rounded-[10px] ${disabled ? "bg-raised/60 text-faint" : "bg-raised text-fg"}`}>{icon}</span>
232239 <span className={`line-clamp-2 w-full text-xs leading-tight max-[380px]:text-[0.6875rem] ${disabled ? "text-faint" : "text-fg-soft"}`}>{label}</span>
233240 {note && <span className="-mt-0.5 rounded-full bg-line px-1.5 text-[0.625rem] font-medium text-muted">{note}</span>}
234241 </>
235242 );
236− const className = "flex min-w-0 flex-col items-center gap-1.5 rounded-xl px-1 py-2.5 text-center outline-none focus-visible:ring-2 focus-visible:ring-accent active:bg-raised/60";
243+ const className = "flex min-w-0 flex-col items-center gap-1.5 rounded-md px-1 py-2.5 text-center outline-none focus-visible:ring-2 focus-visible:ring-accent active:bg-raised/60";
237244 if (to) {
238245 return (
239246 <Link to={to} className={className}>
249256 }
250257
251258 /**
252− * More, from the bottom bar: a rounded panel just above it, with g1t's
259+ * More, from the bottom bar: a flat panel standing on it, with g1t's
253260 * mark at its top and a grid of big tiles: all apps, the Marketplace,
254261 * your pinned apps, Artifacts, People, Workspace, and "You and
255262 * help", which opens your account's sheet.
266273 <Primitive.Content
267274 aria-describedby={undefined}
268275 onOpenAutoFocus={(event) => event.preventDefault()}
269− className="fixed right-2 bottom-[calc(4.875rem+env(safe-area-inset-bottom))] left-2 z-50 max-h-[calc(100dvh-7rem)] overflow-y-auto rounded-[18px] border border-line-strong bg-rail px-3 pt-2 pb-3.5 text-fg shadow-2xl shadow-black/60 outline-none data-[state=open]:animate-pop-in data-[state=closed]:animate-pop-out md:hidden"
276+ className="fixed inset-x-0 bottom-(--tabbar-h) z-50 max-h-[calc(100dvh-var(--tabbar-h)-3.5rem)] overflow-y-auto border-t border-line bg-rail px-3 pt-2 pb-3.5 text-fg shadow-2xl shadow-black/60 outline-none data-[state=open]:animate-pop-in data-[state=closed]:animate-pop-out md:hidden"
270277 >
271278 <div aria-hidden="true" className="mx-auto mt-0.5 mb-2 h-1 w-9 rounded-full bg-line-strong" />
272279 <div className="mb-2 flex items-center gap-2 px-1">
342349 aria-describedby={undefined}
343350 onOpenAutoFocus={(event) => event.preventDefault()}
344351 style={{ transform: drag ? `translateY(${drag}px)` : undefined, transition: from.current == null ? "transform 0.2s ease-out" : "none" }}
345− className="fixed inset-x-0 bottom-0 z-50 flex max-h-[88dvh] flex-col rounded-t-2xl border-t border-line-strong bg-surface pb-[env(safe-area-inset-bottom)] text-fg shadow-2xl shadow-black/60 outline-none data-[state=open]:animate-[sheet-in-bottom_0.24s_cubic-bezier(0.16,1,0.3,1)]"
352+ className="fixed inset-x-0 bottom-0 z-50 flex max-h-[88dvh] flex-col border-t border-line bg-surface pb-[env(safe-area-inset-bottom)] text-fg shadow-2xl shadow-black/60 outline-none data-[state=open]:animate-[sheet-in-bottom_0.24s_cubic-bezier(0.16,1,0.3,1)]"
346353 >
347354 <div {...handlers} className="flex shrink-0 cursor-grab touch-none justify-center pt-2.5 pb-2" aria-hidden="true">
348355 <span className="h-1.5 w-10 rounded-full bg-line-strong" />
357364
358365 /** A row in a bottom sheet: 48px tall, an icon, words, and what sits at its end. */
359366 export function SheetRow({ to, href, icon, children, end, onClick }: { to?: string; href?: string; icon: ReactNode; children: ReactNode; end?: ReactNode; onClick?: () => void }) {
360− const className = "flex h-12 w-full items-center gap-3 rounded-xl px-3 text-left text-[0.9375rem] text-fg-soft transition-colors active:bg-raised";
367+ const className = "flex h-12 w-full items-center gap-3 rounded-md px-3 text-left text-[0.9375rem] text-fg-soft transition-colors active:bg-raised";
361368 const inner = (
362369 <>
363370 <span className="flex w-6 shrink-0 justify-center text-muted [&_svg]:size-5">{icon}</span>
+24−25
288288 children,
289289 }: {
290290 title: string;
291− /** A small button at the label's end: what the group makes (a `SidebarGroupAction`). */
291+ /** A small button at the label's end, in its row: what the group makes (a `SidebarGroupAction` with `relative top-auto right-auto`). */
292292 action?: ReactNode;
293293 className?: string;
294294 children: ReactNode;
295295 }) {
296296 return (
297297 <SidebarGroup className={className}>
298− <SidebarGroupLabel asChild>
299− <h2>{title}</h2>
300− </SidebarGroupLabel>
301− {action}
298+ <div className="flex items-center justify-between gap-2 pr-1">
299+ <SidebarGroupLabel asChild>
300+ <h2>{title}</h2>
301+ </SidebarGroupLabel>
302+ {action}
303+ </div>
302304 <SidebarGroupContent>
303305 <SidebarMenu>{children}</SidebarMenu>
304306 </SidebarGroupContent>
688690 );
689691 return (
690692 <SidebarGroup>
691− <SidebarGroupLabel asChild>
692− <h2>Projects</h2>
693− </SidebarGroupLabel>
694− <Hint label="New project">
695− <SidebarGroupAction asChild>
696− <Link to="/new" aria-label="New project">
697− <Plus />
698− </Link>
699− </SidebarGroupAction>
700− </Hint>
693+ {/* The label and its button share a row, so the button stays level with the words at any text size. */}
694+ <div className="flex items-center justify-between gap-2 pr-1">
695+ <SidebarGroupLabel asChild>
696+ <h2>Projects</h2>
697+ </SidebarGroupLabel>
698+ <Hint label="New project">
699+ <SidebarGroupAction asChild className="relative top-auto right-auto">
700+ <Link to="/new" aria-label="New project">
701+ <Plus />
702+ </Link>
703+ </SidebarGroupAction>
704+ </Hint>
705+ </div>
701706 <SidebarGroupContent>
702707 {/* Only there once something is pinned: each row below has its own pin. */}
703708 {pinned.length > 0 && (
19411946 * filling the rest of the window, with its top bar across the top and a
19421947 * line under it: the sidebar's toggle, where you are, search, Ask g1t and
19431948 * Create new. On a phone the rail is a bar along the bottom and the page
1944− * a rounded panel above it. Only for someone signed in; without a workspace yet, there
1949+ * fills the window above it, flat as well. Only for someone signed in; without a workspace yet, there
19451950 * is no rail. The rail and the sidebar are drawn from the sidebar kit
19461951 * (components/ui/sidebar.tsx): one provider holds whether the sidebar is
19471952 * open on a computer and whether the drawer is.
20892094 </SidebarMobile>
20902095 )}
20912096
2092− <div className={`min-h-dvh pt-(--frame-top) pb-(--tabbar-h) max-md:px-1.5 ${pad}`}>
2097+ <div className={`min-h-dvh pt-(--frame-top) pb-(--tabbar-h) ${pad}`}>
20932098 {/* The top bar always has its line, so a page's own header (data-page-head: a conversation's, a project's,
20942099 a sticky one under an open artifact) sits under it as its own band. */}
2095− <div className="flex min-h-[calc(100dvh-var(--frame-top)-var(--tabbar-h))] min-w-0 flex-col bg-bg max-md:rounded-[14px]">
2100+ <div className="flex min-h-[calc(100dvh-var(--frame-top)-var(--tabbar-h))] min-w-0 flex-col bg-bg">
20962101 <header
2097− className={`sticky top-(--frame-top) z-30 flex h-14 items-center gap-1 border-b border-line bg-bg pr-2 pl-2 max-md:rounded-t-[14px] sm:pr-3 ${inline ? "lg:pl-3.5" : ""} ${conversation ? "max-md:hidden" : ""}`}
2102+ className={`sticky top-(--frame-top) z-30 flex h-14 items-center gap-1 border-b border-line bg-bg pr-2 pl-2 sm:pr-3 ${inline ? "lg:pl-3.5" : ""} ${conversation ? "max-md:hidden" : ""}`}
20982103 >
20992104 {panel && (
21002105 <SidebarTrigger
21422147 </main>
21432148 </div>
21442149 </div>
2145− {/* On a phone the page is a rounded panel above the bottom bar: a frame over it, with the background beyond,
2146− so what scrolls stays inside. A phone's conversation, full screen over everything, goes without. */}
2147− <div
2148− aria-hidden="true"
2149− className={`pointer-events-none fixed top-(--frame-top) right-1.5 bottom-(--tabbar-h) left-1.5 z-[35] rounded-[14px] shadow-[0_0_0_1px_var(--color-line),0_0_0_100vmax_var(--color-shell)] md:hidden ${conversation ? "max-md:hidden" : ""}`}
2150− />
21512150 {ws && <BottomBar user={user} workspace={ws} pins={shell.pins ?? []} unread={unread} onReselect={panel ? () => setDrawer(true) : undefined} />}
21522151 <CommandPalette open={palette} onOpenChange={setPalette} commands={commands} repo={shell.repo ? `${shell.repo.namespace}/${shell.repo.name}` : null} />
21532152 </SidebarProvider>
+3−2
160160 event.preventDefault();
161161 (event.currentTarget as HTMLElement | null)?.focus();
162162 }}
163− className={cn("group/sidebar w-[min(var(--sidebar-width),86vw)] border-sidebar-border bg-sidebar px-0 text-fg", className)}
163+ // A phone's drawer takes most of the screen: names read whole and rows reach a thumb, with the page still showing beside it.
164+ className={cn("group/sidebar w-[min(22rem,86vw)] border-sidebar-border bg-sidebar px-0 text-fg", className)}
164165 {...props}
165166 >
166167 <SheetTitle className="sr-only">{title}</SheetTitle>
235236 }
236237
237238 export function SidebarSeparator({ className, ...props }: ComponentProps<typeof Separator>) {
238− return <Separator data-slot="sidebar-separator" className={cn("mx-2 my-2 w-auto bg-sidebar-border", className)} {...props} />;
239+ return <Separator data-slot="sidebar-separator" className={cn("mx-2 my-2 bg-sidebar-border data-[orientation=horizontal]:w-auto", className)} {...props} />;
239240 }
240241
241242 /** What scrolls: the groups, between the header and the footer. */