/* Copyright 2026 Marimo. All rights reserved. */ import { CaretDownIcon } from "@radix-ui/react-icons"; import { ActivityIcon, BarChart2Icon, BookMarkedIcon, BookOpenIcon, DatabaseIcon, FileIcon, FileTextIcon, GithubIcon, GraduationCapIcon, GridIcon, LayoutIcon, LinkIcon, MessagesSquareIcon, OrbitIcon, YoutubeIcon, } from "lucide-react"; import type React from "react"; import { MarkdownIcon } from "@/components/editor/cell/code/icons"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Constants } from "@/core/constants"; import { useRequestClient } from "@/core/network/requests"; import type { TutorialId } from "@/core/network/types"; import { openNotebook } from "@/utils/links"; import { Objects } from "@/utils/objects"; import { MarimoPlusIcon } from "../icons/marimo-icons"; const TUTORIALS: Record< TutorialId, [string, React.FC>, string] > = { intro: ["Introduction", BookOpenIcon, "Get started with marimo basics"], dataflow: [ "Dataflow", ActivityIcon, "Learn how cells interact with each other", ], ui: ["UI Elements", LayoutIcon, "Create interactive UI components"], markdown: [ "Markdown", FileTextIcon, "Format text with parameterized markdown", ], plots: ["Plots", BarChart2Icon, "Create interactive visualizations"], sql: ["SQL", DatabaseIcon, "Query databases directly in marimo"], layout: ["Layout", GridIcon, "Customize the layout of your cells' output"], fileformat: [ "File format", FileIcon, "Understand marimo's pure-Python file format", ], "for-jupyter-users": [ "For Jupyter users", OrbitIcon, "Transiting from Jupyter to marimo", ], "markdown-format": [ "Markdown format", MarkdownIcon, "Using marimo to edit markdown files", ], }; export const OpenTutorialDropDown: React.FC = () => { const { openTutorial } = useRequestClient(); return ( {Objects.entries(TUTORIALS).map( ([tutorialId, [label, Icon, description]]) => ( { const file = await openTutorial({ tutorialId }); if (!file) { return; } openNotebook(file.path); }} >
{label} {description}
), )}
); }; const RESOURCES = [ { title: "Documentation", description: "Official marimo documentation and API reference", icon: BookMarkedIcon, url: Constants.docsPage, }, { title: "GitHub", description: "View source code, report issues, or contribute", icon: GithubIcon, url: Constants.githubPage, }, { title: "Community", description: "Join the marimo Discord community", icon: MessagesSquareIcon, url: Constants.discordLink, }, { title: "molab", description: "Run marimo notebooks in the cloud", icon: MarimoPlusIcon, url: Constants.molab, }, { title: "YouTube", description: "Watch tutorials and demos", icon: YoutubeIcon, url: Constants.youtube, }, { title: "Changelog", description: "See what's new in marimo", icon: FileTextIcon, url: Constants.releasesPage, }, ]; export const ResourceLinks: React.FC = () => { return (
Resources
{RESOURCES.map((resource) => (

{resource.title}

{resource.description}

))}
); }; export const Header: React.FC<{ Icon: React.FC>; control?: React.ReactNode; children: React.ReactNode; }> = ({ Icon, control, children }) => { return (

{children}

{control}
); };