import { faker } from "@faker-js/faker" import { Meta, StoryObj } from "@storybook/react" import React, { useMemo, useState } from "react" import { CalendarToday, OpenSeaBrandLogo, StylusNote, Wallet, } from "../../icons" import { CalendarTodayFilled } from "../../icons/material-symbols/outlined/CalendarTodayFilled" import { Explore } from "../../icons/material-symbols/outlined/Explore" import { ExploreFilled } from "../../icons/material-symbols/outlined/ExploreFilled" import { MenuFilled } from "../../icons/material-symbols/outlined/MenuFilled" import { SignalCellularAltFont300 } from "../../icons/material-symbols/outlined/SignalCellularAltFont300" import { SignalCellularAltFont600 } from "../../icons/material-symbols/outlined/SignalCellularAltFont600" import { StylusNoteFilled } from "../../icons/material-symbols/outlined/StylusNoteFilled" import { CenterAligned } from "../CenterAligned" import { Dropdown } from "../Dropdown" import { Flex } from "../Flex" import { FlexColumn } from "../FlexColumn" import { Switch } from "../Switch" import { Text } from "../Text" import { Sidebar, SidebarProps } from "./Sidebar" type Story = StoryObj const meta: Meta = { title: "Design System/Sidebar", component: Sidebar, args: { side: "left", }, parameters: { layout: "fullscreen", }, } export default meta const Template = (args: SidebarProps) => { const profileImage = useMemo(() => faker.image.dataUri(), []) const menuItems = [ { icon: Explore, title: "Discover", activeIcon: ExploreFilled }, { icon: SignalCellularAltFont300, title: "Stats", activeIcon: SignalCellularAltFont600, }, { icon: Wallet, title: "My Items", activeIcon: Wallet }, { icon: CalendarToday, title: "Drops", activeIcon: CalendarTodayFilled }, { icon: StylusNote, title: "Create", activeIcon: StylusNoteFilled }, ] as const const profileItems = [ { title: "My Profile" }, { title: "Offers" }, { title: "Portfolio" }, { title: "Watchlist" }, { title: "Activity" }, ] as const const [activeItem, setActiveItem] = useState("") const sidebar = ( setActiveItem("Discover")} > {menuItems.map(({ icon: Icon, title, activeIcon: ActiveIcon }) => ( setActiveItem(title)} > {title} ))} item.title === activeItem)} content={profileItems.map(({ title }) => ( setActiveItem(title)} > {title} ))} > zmoney.eth
Pro Mode Advanced tool & analytics
alert("Hello!")}> Hello OpenSea } overrides={{ Content: { className: "w-[300px] max-h-fit mb-2 bg-bg-additional-1 backdrop-blur-[60px]", }, }} side="right" sideOffset={24} onOpenChange={isOpen => { setActiveItem(isOpen ? "More" : "") }} > More
) const main = ( OpenSea Homepage OpenSea Homepage content ) return (
{args.side === "left" ? ( <> {sidebar} {main} ) : ( <> {main} {sidebar} )}
) } export const Default: Story = { render: Template, } export const Right: Story = { render: Template, args: { side: "right", }, } export const FillExpandedSpace: Story = { render: Template, args: { fillExpandedSpace: true, }, } export const FillExpandedSpaceRight: Story = { render: Template, args: { side: "right", fillExpandedSpace: true, }, }