Browse Source

Organize stories and populate readme

pull/2032/head
Gabe Kangas 3 years ago
parent
commit
d427c0ad70
No known key found for this signature in database
GPG Key ID: 9A56337728BC81EA
  1. 2
      web/stories/ActionButton.stories.tsx
  2. 2
      web/stories/ActionButtonRow.stories.tsx
  3. 2
      web/stories/Follower.stories.tsx
  4. 2
      web/stories/Followercollection.stories.tsx
  5. 2
      web/stories/Footer.stories.tsx
  6. 4
      web/stories/Header.stories.tsx
  7. 148
      web/stories/Introduction.stories.mdx
  8. 2
      web/stories/Modal.stories.tsx
  9. 2
      web/stories/StatusBar.stories.tsx
  10. 2
      web/stories/Video.stories.tsx
  11. 15
      web/stories/VideoPoster.stories.tsx

2
web/stories/ActionButton.stories.tsx

@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import ActionButton from '../components/action-buttons/ActionButton'; import ActionButton from '../components/action-buttons/ActionButton';
export default { export default {
title: 'owncast/External action button', title: 'owncast/Action Buttons/Single button',
component: ActionButton, component: ActionButton,
parameters: {}, parameters: {},
} as ComponentMeta<typeof ActionButton>; } as ComponentMeta<typeof ActionButton>;

2
web/stories/ActionButtonRow.stories.tsx

@ -4,7 +4,7 @@ import ActionButtonRow from '../components/action-buttons/ActionButtonRow';
import ActionButton from '../components/action-buttons/ActionButton'; import ActionButton from '../components/action-buttons/ActionButton';
export default { export default {
title: 'owncast/External action button row', title: 'owncast/Action Buttons/Row',
component: ActionButtonRow, component: ActionButtonRow,
parameters: {}, parameters: {},
} as ComponentMeta<typeof ActionButtonRow>; } as ComponentMeta<typeof ActionButtonRow>;

2
web/stories/Follower.stories.tsx

@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import SingleFollower from '../components/Follower'; import SingleFollower from '../components/Follower';
export default { export default {
title: 'owncast/Follower', title: 'owncast/Followers/Single Follower',
component: SingleFollower, component: SingleFollower,
parameters: {}, parameters: {},
} as ComponentMeta<typeof SingleFollower>; } as ComponentMeta<typeof SingleFollower>;

2
web/stories/Followercollection.stories.tsx

@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import FollowerCollection from '../components/FollowersCollection'; import FollowerCollection from '../components/FollowersCollection';
export default { export default {
title: 'owncast/Followers collection', title: 'owncast/Followers/Followers collection',
component: FollowerCollection, component: FollowerCollection,
parameters: {}, parameters: {},
} as ComponentMeta<typeof FollowerCollection>; } as ComponentMeta<typeof FollowerCollection>;

2
web/stories/Footer.stories.tsx

@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import Footer from '../components/ui/Footer/Footer'; import Footer from '../components/ui/Footer/Footer';
export default { export default {
title: 'owncast/Footer', title: 'owncast/Layout/Footer',
component: Footer, component: Footer,
parameters: {}, parameters: {},
} as ComponentMeta<typeof Footer>; } as ComponentMeta<typeof Footer>;

4
web/stories/Header.stories.tsx

@ -1,10 +1,10 @@
import React from 'react'; import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react'; import { ComponentStory, ComponentMeta } from '@storybook/react';
import Header from '../components/ui/Header/Header';
import { RecoilRoot } from 'recoil'; import { RecoilRoot } from 'recoil';
import Header from '../components/ui/Header/Header';
export default { export default {
title: 'owncast/Header', title: 'owncast/Layout/Header',
component: Header, component: Header,
parameters: {}, parameters: {},
} as ComponentMeta<typeof Header>; } as ComponentMeta<typeof Header>;

148
web/stories/Introduction.stories.mdx

@ -1,139 +1,53 @@
import { Meta } from '@storybook/addon-docs'; import { Meta } from '@storybook/addon-docs';
import Direction from './assets/direction.svg'; import { Typography } from 'antd';
<Meta title="Owncast/Readme" /> <Meta title="Owncast/Readme" />
<style>{` <Typography.Title style={{color: 'var(--primary-color)'}}>Owncast Web UI v2</Typography.Title>
.subheading {
--mediumdark: '#999999';
font-weight: 900;
font-size: 13px;
color: #999;
letter-spacing: 6px;
line-height: 24px;
text-transform: uppercase;
margin-bottom: 12px;
margin-top: 40px;
}
.link-list {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr;
row-gap: 10px;
}
@media (min-width: 620px) {
.link-list {
row-gap: 20px;
column-gap: 20px;
grid-template-columns: 1fr 1fr;
}
}
@media all and (-ms-high-contrast:none) {
.link-list {
display: -ms-grid;
-ms-grid-columns: 1fr 1fr;
-ms-grid-rows: 1fr 1fr;
}
}
.link-item {
display: block;
padding: 20px 30px 20px 15px;
border: 1px solid #00000010;
border-radius: 5px;
transition: background 150ms ease-out, border 150ms ease-out, transform 150ms ease-out;
color: #333333;
display: flex;
align-items: flex-start;
}
.link-item:hover {
border-color: #1EA7FD50;
transform: translate3d(0, -3px, 0);
box-shadow: rgba(0, 0, 0, 0.08) 0 3px 10px 0;
}
.link-item:active {
border-color: #1EA7FD;
transform: translate3d(0, 0, 0);
}
.link-item strong {
font-weight: 700;
display: block;
margin-bottom: 2px;
}
.link-item img {
height: 40px;
width: 40px;
margin-right: 15px;
flex: none;
}
.link-item span {
font-size: 14px;
line-height: 20px;
}
.tip {
display: inline-block;
border-radius: 1em;
font-size: 11px;
line-height: 12px;
font-weight: 700;
background: #E7FDD8;
color: #66BF3C;
padding: 4px 12px;
margin-right: 10px;
vertical-align: top;
}
.tip-wrapper {
font-size: 13px;
line-height: 20px;
margin-top: 40px;
margin-bottom: 40px;
}
.tip-wrapper code {
font-size: 12px;
display: inline-block;
}
`}</style>
# Owncast web UI v2
Owncast is going through a complete rewrite of the web app frontend. Owncast is going through a complete rewrite of the web app frontend.
Visit the [uiv2 milestone](https://github.com/owncast/owncast/milestone/18) on GitHub to see the individual tasks for this project. Please take a look and see if there's anything you can help with. Even just grabbing one component is a huge help! Visit the [UIv2 milestone](https://github.com/owncast/owncast/milestone/18) on GitHub to see the individual tasks for this project.
## What
- [Next.js](https://nextjs.org/)
- [React](https://reactjs.org/)
- [Ant Design](https://ant.design/)
## Why? ## Why?
- Moving to a full React Component workflow allows the project to be more productive and build features faster. - Moving to a full React Component workflow allows the project to be more productive and build features faster.
- Share code between the web frontend UI and the existing admin.
- Address feedback from users.
- Better accessibility. - Better accessibility.
- Better mobile experience. - Better mobile experience.
- Standardize styling across the project by using a single design language and style guide.
- Allows more people to contribute to the project if we use popular frameworks.
## What
- [Next.js](https://nextjs.org/)
- [React](https://reactjs.org/)
- [Ant Design](https://ant.design/)
## How? ## How?
This is a large project, but like anything else, breaking it into pieces and working on one thing at a time will eventually get us to the finish line. This rewrite is a large project, but like anything else, breaking it into pieces and working on one thing at a time will eventually get us to the finish line.
And that's what this interface lets us do. On this page we see all the different components still needing to be worked on, and have a place to document the functionality of these pieces. And that's what this interface lets us do. On this page we see all the different components still needing to be worked on, and have a place to document the functionality of these pieces.
## What about the Admin? ## What about the Admin?
The admin has always been a Next+React+Ant project, so the goal is to touch that as little as possible. The admin has always been a Next+React+Ant project, so the goal is to touch that as little as possible except where needed to share code and styles.
## What is this page?
This is called [_Storybook_](https://storybook.js.org/docs/react/get-started/introduction).
Storybook is a tool for UI development. It makes development faster and easier by isolating components.
This allows you to work on one component at a time. You can develop entire UIs without needing to start
up a complex dev stack, force certain data into your database, or navigate around your application.
For example a button may have a disabled state that requires a specific scenario to take place in real-world use,
but here we you can just toggle the state to verify things are working as expected.
This means [new components should have a corresponding story added](https://storybook.js.org/docs/react/get-started/whats-a-story) to make it easier to maintain the project.
## Contributing
--- This is a standard React project so it makes it easy for **anybody to help!**
More documentation about things should go here.

2
web/stories/Modal.stories.tsx

@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import Modal from '../components/ui/Modal/Modal'; import Modal from '../components/ui/Modal/Modal';
export default { export default {
title: 'owncast/Modal container', title: 'owncast/Modals/Container',
component: Modal, component: Modal,
parameters: {}, parameters: {},
} as ComponentMeta<typeof Modal>; } as ComponentMeta<typeof Modal>;

2
web/stories/StatusBar.stories.tsx

@ -4,7 +4,7 @@ import { subHours } from 'date-fns';
import Statusbar from '../components/ui/Statusbar/Statusbar'; import Statusbar from '../components/ui/Statusbar/Statusbar';
export default { export default {
title: 'owncast/Status bar', title: 'owncast/Player/Status bar',
component: Statusbar, component: Statusbar,
parameters: {}, parameters: {},
} as ComponentMeta<typeof Statusbar>; } as ComponentMeta<typeof Statusbar>;

2
web/stories/Video.stories.tsx

@ -9,7 +9,7 @@ const streams = {
}; };
export default { export default {
title: 'owncast/Player', title: 'owncast/Player/Player',
component: OwncastPlayer, component: OwncastPlayer,
argTypes: { argTypes: {
source: { source: {

15
web/stories/VideoPoster.stories.tsx

@ -3,9 +3,20 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import VideoPoster from '../components/video/VideoPoster'; import VideoPoster from '../components/video/VideoPoster';
export default { export default {
title: 'owncast/Video poster', title: 'owncast/Player/Video poster',
component: VideoPoster, component: VideoPoster,
parameters: {}, parameters: {
docs: {
description: {
component: `
- Sits on top of the video player when playback is not taking place.
- Shows the instance logo when the video is offline.
- Initial image is the logo when online.
- When the stream is online, will transition, via cross-fades, through the thumbnail.
- Will be removed when playback starts.`,
},
},
},
} as ComponentMeta<typeof VideoPoster>; } as ComponentMeta<typeof VideoPoster>;
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars

Loading…
Cancel
Save