···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
3344import { fn } from 'storybook/test';
55import { Container } from '@chakra-ui/react';
66-import { ActivityTimeline } from "../client/components/ActivityTimeline";
77-import {Provider} from "../client/components/Provider";
88-import { generateJsonPlays } from "../core/PlayTestUtils.js";
99-import { generatePlayApiCommonDetailed } from "../core/tests/utils/apiFixtures.js";
1010-import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../core/tests/utils/fixtures.js";
1111-import { asJsonPlayObject } from '../core/PlayMarshalUtils.js';
66+import { ActivityTimeline } from "../../client/components/ActivityTimeline.js";
77+import {Provider} from "../../client/components/Provider.js";
88+import { generateJsonPlays } from "../../core/PlayTestUtils.js";
99+import { generatePlayApiCommonDetailed } from "../../core/tests/utils/apiFixtures.js";
1010+import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../../core/tests/utils/fixtures.js";
1111+import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js';
12121313// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1414const meta = preview.meta({
1515- title: 'Examples/ActivityTimline',
1515+ title: 'Timelines/Play',
1616 component: ActivityTimeline,
1717 parameters: {
1818 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
-58
src/stories/Button.stories.ts
···11-import preview from "../../.storybook/preview.js";
22-33-import { fn } from 'storybook/test';
44-55-import { Button } from './Button.js';
66-77-// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
88-const meta = preview.meta({
99- title: 'Example/Button',
1010- component: Button,
1111- parameters: {
1212- // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
1313- layout: 'centered',
1414- },
1515- // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
1616- tags: ['autodocs'],
1717- // More on argTypes: https://storybook.js.org/docs/api/argtypes
1818- argTypes: {
1919- backgroundColor: { control: 'color' },
2020- },
2121- // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#story-args
2222- args: { onClick: fn() },
2323-});
2424-2525-// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
2626-export const Primary = meta.story({
2727- args: {
2828- primary: true,
2929- label: 'Button',
3030- },
3131-});
3232-3333-export const Secondary = meta.story({
3434- args: {
3535- label: 'Button',
3636- },
3737-});
3838-3939-export const Large = meta.story({
4040- args: {
4141- size: 'large',
4242- label: 'Button',
4343- },
4444-});
4545-4646-export const Small = meta.story({
4747- args: {
4848- size: 'small',
4949- label: 'Button',
5050- },
5151-});
5252-5353-export const Mine = meta.story({
5454- args: {
5555- primary: false,
5656- label: "Button"
5757- }
5858-});
-37
src/stories/Button.tsx
···11-import React from 'react';
22-33-import './button.css';
44-55-export interface ButtonProps {
66- /** Is this the principal call to action on the page? */
77- primary?: boolean;
88- /** What background color to use */
99- backgroundColor?: string;
1010- /** How large should the button be? */
1111- size?: 'small' | 'medium' | 'large';
1212- /** Button contents */
1313- label: string;
1414- /** Optional click handler */
1515- onClick?: () => void;
1616-}
1717-1818-/** Primary UI component for user interaction */
1919-export const Button = ({
2020- primary = false,
2121- size = 'medium',
2222- backgroundColor,
2323- label,
2424- ...props
2525-}: ButtonProps) => {
2626- const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
2727- return (
2828- <button
2929- type="button"
3030- className={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
3131- style={{ backgroundColor }}
3232- {...props}
3333- >
3434- {label}
3535- </button>
3636- );
3737-};
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
3344import { Container } from '@chakra-ui/react';
55-import { MSComponentList } from "../client/components/msComponent/MSComponentList.js";
66-import {Provider} from "../client/components/Provider";
77-import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../core/tests/utils/apiFixtures.js";
88-import { generateArray } from "../core/DataUtils.js";
55+import { MSComponentList } from "../../client/components/msComponent/MSComponentList.js";
66+import {Provider} from "../../client/components/Provider.js";
77+import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js";
88+import { generateArray } from "../../core/DataUtils.js";
99import { faker } from "@faker-js/faker";
1010-import { MsSseEvent } from "../core/Api.js";
1010+import { MsSseEvent } from "../../core/Api.js";
1111import { SSEProvider } from "@flamefrontend/sse-runtime-react";
1212-import { sseProviderOptions } from "../client/AppNext.js";
1212+import { sseProviderOptions } from "../../client/AppNext.js";
1313import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router';
14141515// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1616const meta = preview.meta({
1717- title: 'Examples/ComponentList',
1717+ title: 'Pages/Components List',
1818 component: MSComponentList,
1919 parameters: {
2020 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
33import { http, HttpResponse, delay, sse } from 'msw';
4455import { Container, Box } from '@chakra-ui/react';
66-import { DeadLetterIndicator } from "../client/components/msComponent/Stats.js";
77-import { sseProviderOptions } from "../client/AppNext.js";
88-import {Provider} from "../client/components/Provider";
66+import { DeadLetterIndicator } from "../../client/components/msComponent/Stats.js";
77+import { sseProviderOptions } from "../../client/AppNext.js";
88+import {Provider} from "../../client/components/Provider.js";
99import { SSEProvider } from "@flamefrontend/sse-runtime-react";
1010-import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js";
1111-import { MsSseEvent } from "../core/Api.js";
1010+import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js";
1111+import { MsSseEvent } from "../../core/Api.js";
1212import { faker } from "@faker-js/faker";
13131414// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1515const meta = preview.meta({
1616- title: 'Examples/Component Details/Stat Dead',
1616+ title: 'Component/Details/Stat Dead',
1717 component: DeadLetterIndicator,
1818 parameters: {
1919 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
33import { http, HttpResponse, delay, sse } from 'msw';
4455import { Container, Box } from '@chakra-ui/react';
66-import { CountLiveIndicator } from "../client/components/msComponent/Stats.js";
77-import { sseProviderOptions } from "../client/AppNext.js";
88-import {Provider} from "../client/components/Provider";
66+import { CountLiveIndicator } from "../../client/components/msComponent/Stats.js";
77+import { sseProviderOptions } from "../../client/AppNext.js";
88+import {Provider} from "../../client/components/Provider.js";
99import { SSEProvider } from "@flamefrontend/sse-runtime-react";
1010-import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js";
1111-import { MsSseEvent } from "../core/Api.js";
1010+import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js";
1111+import { MsSseEvent } from "../../core/Api.js";
12121313// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1414const meta = preview.meta({
1515- title: 'Examples/Component Details/Stats Count',
1515+ title: 'Component/Details/Stats Count',
1616 component: CountLiveIndicator,
1717 parameters: {
1818 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
33import { http, HttpResponse, delay, sse } from 'msw';
4455import { Container, Box } from '@chakra-ui/react';
66-import { QueuedIndicator } from "../client/components/msComponent/Stats.js";
77-import { sseProviderOptions } from "../client/AppNext.js";
88-import {Provider} from "../client/components/Provider";
66+import { QueuedIndicator } from "../../client/components/msComponent/Stats.js";
77+import { sseProviderOptions } from "../../client/AppNext.js";
88+import {Provider} from "../../client/components/Provider.js";
99import { SSEProvider } from "@flamefrontend/sse-runtime-react";
1010import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js";
1111-import { MsSseEvent } from "../core/Api.js";
1111+import { MsSseEvent } from "../../core/Api.js";
1212import { faker } from "@faker-js/faker";
13131414// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1515const meta = preview.meta({
1616- title: 'Examples/Component Details/Stat Queued',
1616+ title: 'Component/Details/Stat Queued',
1717 component: QueuedIndicator,
1818 parameters: {
1919 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
33import { Container } from '@chakra-ui/react';
4455import { fn } from 'storybook/test';
66-import { ErrorAlert } from "../client/components/ErrorAlert.js";
77-import {Provider} from "../client/components/Provider";
88-import { ErrorLike } from "../core/Atomic.js";
99-import { PlayStateFilter } from "../client/components/playActivity/ListFilters.js";
66+import { ErrorAlert } from "../../client/components/ErrorAlert.js";
77+import {Provider} from "../../client/components/Provider.js";
88+import { ErrorLike } from "../../core/Atomic.js";
99+import { PlayStateFilter } from "../../client/components/playActivity/ListFilters.js";
101011111212// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1313const meta = preview.meta({
1414- title: 'Examples/List Filters/Play State',
1414+ title: 'Activities/List Filters/Play State',
1515 component: PlayStateFilter,
1616 parameters: {
1717 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../../.storybook/preview.js";
11+import preview from "../../../../.storybook/preview.js";
22import React from 'react';
33import { Container } from '@chakra-ui/react';
4455import { fn } from 'storybook/test';
66-import { PlayDateRangeFilter } from "../../client/components/playActivity/ListFilters.js";
77-import { Provider } from "../../client/components/Provider.js";
66+import { PlayDateRangeFilter } from "../../../client/components/playActivity/ListFilters.js";
77+import { Provider } from "../../../client/components/Provider.js";
88991010// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1111const meta = preview.meta({
1212- title: 'Examples/List Filters/Play Date Range',
1212+ title: 'Activities/List Filters/Play Date Range',
1313 component: PlayDateRangeFilter,
1414 parameters: {
1515 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../../.storybook/preview.js";
11+import preview from "../../../../.storybook/preview.js";
22import React from 'react';
33import { Container } from '@chakra-ui/react';
4455import { fn } from 'storybook/test';
66-import { PhraseFilter } from "../../client/components/playActivity/ListFilters.js";
77-import { Provider } from "../../client/components/Provider.js";
66+import { PhraseFilter } from "../../../client/components/playActivity/ListFilters.js";
77+import { Provider } from "../../../client/components/Provider.js";
88991010// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1111const meta = preview.meta({
1212- title: 'Examples/List Filters/Phrase',
1212+ title: 'Activities/List Filters/Phrase',
1313 component: PhraseFilter,
1414 parameters: {
1515 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
3344import { Container, Box } from '@chakra-ui/react';
55-import { MobileSidebarNav } from "../client/components/MobileMenu";
66-import {Provider} from "../client/components/Provider";
55+import { MobileSidebarNav } from "../../client/components/MobileMenu.js";
66+import {Provider} from "../../client/components/Provider.js";
77import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router';
8899// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1010const meta = preview.meta({
1111- title: 'Examples/MobileSidebar',
1111+ title: 'Static Components/Mobile Sidebar',
1212 component: MobileSidebarNav,
1313 parameters: {
1414 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
3344import { Container, Box } from '@chakra-ui/react';
55-import { SideNavItems, NAV_LINKS } from "../client/components/SideNav";
66-import {Provider} from "../client/components/Provider";
77-import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../core/tests/utils/apiFixtures.js";
55+import { SideNavItems, NAV_LINKS } from "../../client/components/SideNav.js";
66+import {Provider} from "../../client/components/Provider.js";
77+import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js";
88import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router';
991010// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1111const meta = preview.meta({
1212- title: 'Examples/NavbarItems',
1212+ title: 'Static Components/Navbar Items',
1313 component: SideNavItems,
1414 parameters: {
1515 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
-30
src/stories/Page.stories.ts
···11-import preview from "../../.storybook/preview.js";
22-33-import { expect, userEvent, within } from 'storybook/test';
44-55-import { Page } from './Page.js';
66-77-const meta = preview.meta({
88- title: 'Example/Page',
99- component: Page,
1010- parameters: {
1111- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
1212- layout: 'fullscreen',
1313- },
1414-});
1515-1616-export const LoggedOut = meta.story();
1717-1818-// More on component testing: https://storybook.js.org/docs/writing-tests/interaction-testing
1919-export const LoggedIn = meta.story({
2020- play: async ({ canvasElement }) => {
2121- const canvas = within(canvasElement);
2222- const loginButton = canvas.getByRole('button', { name: /Log in/i });
2323- await expect(loginButton).toBeInTheDocument();
2424- await userEvent.click(loginButton);
2525- await expect(loginButton).not.toBeInTheDocument();
2626-2727- const logoutButton = canvas.getByRole('button', { name: /Log out/i });
2828- await expect(logoutButton).toBeInTheDocument();
2929- },
3030-});
-73
src/stories/Page.tsx
···11-import React from 'react';
22-33-import { Header } from './Header';
44-import './page.css';
55-66-type User = {
77- name: string;
88-};
99-1010-export const Page: React.FC = () => {
1111- const [user, setUser] = React.useState<User>();
1212-1313- return (
1414- <article>
1515- <Header
1616- user={user}
1717- onLogin={() => setUser({ name: 'Jane Doe' })}
1818- onLogout={() => setUser(undefined)}
1919- onCreateAccount={() => setUser({ name: 'Jane Doe' })}
2020- />
2121-2222- <section className="storybook-page">
2323- <h2>Pages in Storybook</h2>
2424- <p>
2525- We recommend building UIs with a{' '}
2626- <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
2727- <strong>component-driven</strong>
2828- </a>{' '}
2929- process starting with atomic components and ending with pages.
3030- </p>
3131- <p>
3232- Render pages with mock data. This makes it easy to build and review page states without
3333- needing to navigate to them in your app. Here are some handy patterns for managing page
3434- data in Storybook:
3535- </p>
3636- <ul>
3737- <li>
3838- Use a higher-level connected component. Storybook helps you compose such data from the
3939- "args" of child component stories
4040- </li>
4141- <li>
4242- Assemble data in the page component from your services. You can mock these services out
4343- using Storybook.
4444- </li>
4545- </ul>
4646- <p>
4747- Get a guided tutorial on component-driven development at{' '}
4848- <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
4949- Storybook tutorials
5050- </a>
5151- . Read more in the{' '}
5252- <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
5353- docs
5454- </a>
5555- .
5656- </p>
5757- <div className="tip-wrapper">
5858- <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
5959- <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
6060- <g fill="none" fillRule="evenodd">
6161- <path
6262- d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
6363- id="a"
6464- fill="#999"
6565- />
6666- </g>
6767- </svg>
6868- Viewports addon in the toolbar
6969- </div>
7070- </section>
7171- </article>
7272- );
7373-};
···11-import preview from "../../.storybook/preview.js";
11+import preview from "../../../.storybook/preview.js";
22import React from 'react';
3344import { fn } from 'storybook/test';
55import { Container } from '@chakra-ui/react';
66-import { TransformSteps } from "../client/components/TransformSteps.js";
77-import {Provider} from "../client/components/Provider";
88-import { generateJsonPlays, generatePlay } from "../core/PlayTestUtils.js";
99-import {generatePlayWithLifecycle} from '../core/tests/utils/fixtures'
1010-import { asJsonPlayObject } from "../core/PlayMarshalUtils.js";
66+import { TransformSteps } from "../../client/components/TransformSteps.js";
77+import {Provider} from "../../client/components/Provider.js";
88+import { generateJsonPlays, generatePlay } from "../../core/PlayTestUtils.js";
99+import {generatePlayWithLifecycle} from '../../core/tests/utils/fixtures.js'
1010+import { asJsonPlayObject } from "../../core/PlayMarshalUtils.js";
11111212// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1313const meta = preview.meta({
1414- title: 'Examples/TransformSteps',
1414+ title: 'Timelines/Play Transform Steps',
1515 component: TransformSteps,
1616 parameters: {
1717 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
···10101111// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
1212const meta = preview.meta({
1313- title: 'Static Components/Activity List Skeleton',
1313+ title: 'Activities/List Skeleton',
1414 component: ActivitySummarySkeleton
1515,
1616 parameters: {