import React from "react"; import { userEvent, screen } from "@storybook/testing-library"; import { expect } from "@storybook/jest"; import { NavigationMenu } from "."; import { Button } from "../button"; import { Icon } from "../icon"; import { theme } from "../theme"; import { ChevronRight, ChevronDown, Menu } from "@washingtonpost/wpds-assets"; import NextLink from "next/link"; import type { Meta, StoryFn } from "@storybook/react"; import states from "./states.json"; export default { title: "NavigationMenu", component: NavigationMenu.Root, subcomponents: { List: NavigationMenu.List, Item: NavigationMenu.Item, Link: NavigationMenu.Link, Trigger: NavigationMenu.Trigger, Content: NavigationMenu.Content, Sub: NavigationMenu.Sub, }, } as Meta; const Template: StoryFn = (args) => { console.log(args); return ( Apples Bananas Oranges Pears ); }; export const Default = { render: Template, }; const UseNextLinkTemplate: StoryFn = (args) => { console.log(args); return ( Next Link ); }; export const UseNextLink = { render: UseNextLinkTemplate, }; // eslint-disable-next-line @typescript-eslint/no-explicit-any const SideAlignTemplate: StoryFn = (args) => { console.log("args", args); return ( Apples Bananas Oranges Pears ); }; export const SideAlign = { render: SideAlignTemplate, argTypes: { side: { options: ["top", "bottom", "left", "right"], control: { type: "select" }, }, align: { options: ["start", "center", "end"], control: { type: "select" }, }, }, args: { side: "bottom", align: "start", }, }; const HorizontalTemplate: StoryFn = (args) => { return ( House Governors Results By State &": { transform: "rotate(-180deg)", }, }} > {states.map((state, i) => ( {state} ))} ); }; export const Horizontal = { render: HorizontalTemplate, }; const VerticalTemplate: StoryFn = (args) => { const subsections = [ { text: "The Post's View", link: "https://www.washingtonpost.com/opinions/the-posts-view/?itid=nb_opinions_the-post%27s-view", }, { text: "Columns", link: "https://www.washingtonpost.com/opinions/columns/", }, { text: "Editorial Cartoons", link: "https://www.washingtonpost.com/opinions/cartoons/", }, ]; return ( Home Page Politics Opinions {subsections.map((sub) => ( {sub.text} ))} ); }; export const Vertical = { render: VerticalTemplate, }; const DisabledTemplate: StoryFn = (args) => { return ( House Governors Results By State &": { transform: "rotate(-180deg)", }, }} > Alabama Alaska Arizona ); }; export const Disabled = { render: DisabledTemplate, }; // eslint-disable-next-line @typescript-eslint/no-explicit-any const InteractionsTemplate: StoryFn = () => ( Apples Bananas Oranges Pears ); export const Interactions = { render: InteractionsTemplate, parameters: { chromatic: { disableSnapshot: true }, }, play: async () => { userEvent.tab(); userEvent.keyboard("{Enter}"); await sleep(350); const content = screen.getByText("Apples"); await expect(content).toBeVisible(); userEvent.keyboard("{Escape}"); await sleep(350); await expect(content).not.toBeVisible(); }, }; // Function to emulate pausing between interactions function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); }