Files
supabase/apps/learn/components/sidebar.tsx
Terry Sutton dda0b526ac Feat/learn (#41566)
wip

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

# Release Notes

* **New Features**
* Added a new Learn application offering foundational Supabase courses
with interactive documentation
* Courses include Architecture, Authentication, Data Fundamentals,
Security, Storage, Realtime, and Edge Functions
  * Chapter tracking and progress indicators for course completions
  * Responsive sidebar navigation with search/command menu
  * Theme switching support (light, dark, classic dark modes)
  * Mobile-friendly course interface

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alan Daniel <stylesshjs@gmail.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 21:36:24 -03:30

37 lines
1.3 KiB
TypeScript

import { Menu } from 'lucide-react'
import SideNavigation from '@/components/side-navigation'
import { getInternalContentPaths } from '@/lib/get-internal-content'
import { Button, ScrollArea, SheetContent, SheetTrigger } from 'ui'
import { MobileMenuSheet } from './mobile-menu-sheet'
import { ThemeSwitcherDropdown } from './theme-switcher-dropdown'
export function Sidebar() {
// Get internal content paths on server side
const internalPaths = Array.from(getInternalContentPaths())
return (
<>
<div className="md:hidden fixed top-0 left-0 right-0 z-50 bg-background justify-between flex items-center px-8 py-3 border-b">
<MobileMenuSheet>
<SheetTrigger asChild>
<Button type="outline" icon={<Menu />} />
</SheetTrigger>
<SheetContent side="left" className="p-0 w-80" showClose={false}>
<ScrollArea className="h-full">
<SideNavigation internalPaths={internalPaths} />
</ScrollArea>
</SheetContent>
</MobileMenuSheet>
<ThemeSwitcherDropdown />
</div>
<aside className="fixed z-30 top-0 hidden h-screen w-full shrink-0 md:sticky md:block bg-200 border-r border-muted/50">
<ScrollArea className="h-full">
<SideNavigation internalPaths={internalPaths} />
</ScrollArea>
</aside>
</>
)
}