53 changed files with 565 additions and 54 deletions
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
interface Props { |
||||
content: string; |
||||
} |
||||
|
||||
export default function CustomPageContent(props: Props) { |
||||
const { content } = props; |
||||
return <div>{content}</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ExternalAction } from '../interfaces/external-action.interface'; |
||||
|
||||
interface Props { |
||||
action: ExternalAction; |
||||
} |
||||
|
||||
export default function ExternalActionButton(props: Props) { |
||||
return <div>External action button component goes here</div>; |
||||
} |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
interface Props { |
||||
url: string; |
||||
} |
||||
|
||||
export default function PageLogo(props: Props) { |
||||
return <div>Pimary logo component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { SocialLink } from '../interfaces/social-link.model'; |
||||
|
||||
interface Props { |
||||
links: SocialLink[]; |
||||
} |
||||
|
||||
export default function SocialLinks(props: Props) { |
||||
return <div>Social links component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function UserDropdown(props: Props) { |
||||
return <div>User settings dropdown component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ChatMessage } from '../../interfaces/chat-message.model'; |
||||
|
||||
interface Props { |
||||
message: ChatMessage; |
||||
} |
||||
|
||||
export default function ChatSystemMessage(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ChatMessage } from '../../interfaces/chat-message.model'; |
||||
|
||||
interface Props { |
||||
messages: ChatMessage[]; |
||||
} |
||||
|
||||
export default function ChatContainer(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function ChatModerationNotification(props: Props) { |
||||
return <div>You are now a moderator notification component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ChatMessage } from '../../interfaces/chat-message.model'; |
||||
|
||||
interface Props { |
||||
message: ChatMessage; |
||||
} |
||||
|
||||
export default function ChatSocialMessage(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ChatMessage } from '../../interfaces/chat-message.model'; |
||||
|
||||
interface Props { |
||||
message: ChatMessage; |
||||
} |
||||
|
||||
export default function ChatSystemMessage(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function ChatTextField(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import { ChatMessage } from '../../interfaces/chat-message.model'; |
||||
|
||||
interface Props { |
||||
message: ChatMessage; |
||||
} |
||||
|
||||
export default function ChatUserMessage(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function AuthModal(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function BrowserNotifyModal(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function FediAuthModal(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function FollowModal(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
interface Props {} |
||||
|
||||
export default function IndieAuthModal(props: Props) { |
||||
return <div>Component goes here</div>; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
interface Props { |
||||
online: boolean; |
||||
viewers: number; |
||||
timer: string; |
||||
} |
||||
|
||||
export default function StatusBar(props: Props) { |
||||
return <div>Stream status bar goes here</div>; |
||||
} |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
export interface ChatMessage {} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
export interface ExternalAction { |
||||
title: string; |
||||
description?: string; |
||||
color?: string; |
||||
url: string; |
||||
} |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
export interface SocialLink { |
||||
platform: string; |
||||
icon: string; |
||||
url: string; |
||||
} |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
import { ClientConfig } from '../models/ClientConfig'; |
||||
import { ClientConfig } from '../interfaces/client-config.model'; |
||||
const ENDPOINT = `http://localhost:8080/api/config`; |
||||
|
||||
class ClientConfigService { |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
import ServerStatus from '../models/ServerStatus'; |
||||
import ServerStatus from '../interfaces/server-status.model'; |
||||
|
||||
const ENDPOINT = `http://localhost:8080/api/status`; |
||||
|
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import AuthModal from '../components/modals/AuthModal'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<AuthModal /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Modals/Auth', |
||||
component: AuthModal, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof AuthModal>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof AuthModal> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import BrowserNotifyModal from '../components/modals/BrowserNotifyModal'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<AuthModal /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Modals/Browser Push Notifications', |
||||
component: BrowserNotifyModal, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof BrowserNotifyModal>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof BrowserNotifyModal> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatActionMessage from '../components/chat/ChatActionMessage'; |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Messages/Chat action', |
||||
component: ChatActionMessage, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatActionMessage>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatActionMessage> = args => <ChatActionMessage />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatContainer from '../components/chat/ChatContainer'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<ChatContainer /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Chat messages container', |
||||
component: ChatContainer, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatContainer>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatContainer> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatModeratorNotification from '../components/chat/ChatModeratorNotification'; |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Messages/Moderator notification', |
||||
component: ChatModeratorNotification, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatModeratorNotification>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatModeratorNotification> = args => ( |
||||
<ChatModeratorNotification /> |
||||
); |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatSocialMessage from '../components/chat/ChatSocialMessage'; |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Messages/Social-fediverse event', |
||||
component: ChatSocialMessage, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatSocialMessage>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatSocialMessage> = args => <ExamChatSocialMessageple />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatSystemMessage from '../components/chat/ChatSystemMessage'; |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Messages/System', |
||||
component: ChatSystemMessage, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatSystemMessage>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatSystemMessage> = args => <ChatSystemMessage />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ChatTextField from '../components/chat/ChatTextField'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<ChatTextField /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Input text field', |
||||
component: ChatTextField, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ChatTextField>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ChatTextField> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import UserChatMessage from '../components/chat/ChatUserMessage'; |
||||
|
||||
export default { |
||||
title: 'owncast/Chat/Messages/Standard user', |
||||
component: UserChatMessage, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof UserChatMessage>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof UserChatMessage> = args => <UserChatMessage />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
File diff suppressed because one or more lines are too long
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import ExternalActionButton from '../components/ExternalActionButton'; |
||||
|
||||
export default { |
||||
title: 'owncast/External action button', |
||||
component: ExternalActionButton, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof ExternalActionButton>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof ExternalActionButton> = args => ( |
||||
<ExternalActionButton {...args} /> |
||||
); |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Example1 = Template.bind({}); |
||||
Example1.args = { |
||||
action: { |
||||
url: 'https://owncast.online/docs', |
||||
title: 'Documentation', |
||||
description: 'Owncast Documentation', |
||||
icon: 'https://owncast.online/images/logo.svg', |
||||
color: '#5232c8', |
||||
openExternally: false, |
||||
}, |
||||
}; |
||||
|
||||
export const Example2 = Template.bind({}); |
||||
Example2.args = { |
||||
action: { |
||||
url: 'https://opencollective.com/embed/owncast/donate', |
||||
title: 'Support Owncast', |
||||
description: 'Contribute to Owncast', |
||||
icon: 'https://opencollective.com/static/images/opencollective-icon.svg', |
||||
color: '#2b4863', |
||||
openExternally: false, |
||||
}, |
||||
}; |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import FediAuthModal from '../components/modals/FediAuthModal'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<FediAuthModal /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Modals/FediAuth', |
||||
component: FediAuthModal, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof FediAuthModal>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof FediAuthModal> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import FollowModal from '../components/modals/FollowModal'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<FollowModal /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Modals/Follow', |
||||
component: FollowModal, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof FollowModal>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof FollowModal> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import IndieAuthModal from '../components/modals/IndieAuthModal'; |
||||
|
||||
const Example = () => ( |
||||
<div> |
||||
<IndieAuthModal /> |
||||
</div> |
||||
); |
||||
|
||||
export default { |
||||
title: 'owncast/Modals/IndieAuth', |
||||
component: IndieAuthModal, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof IndieAuthModal>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof IndieAuthModal> = args => <Example />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Basic = Template.bind({}); |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import PageLogo from '../components/PageLogo'; |
||||
|
||||
export default { |
||||
title: 'owncast/Page Logo', |
||||
component: PageLogo, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof PageLogo>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof PageLogo> = args => <PageLogo {...args} />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Logo = Template.bind({}); |
||||
Logo.args = { |
||||
url: '/logo', |
||||
}; |
||||
|
||||
export const DemoServer = Template.bind({}); |
||||
DemoServer.args = { |
||||
url: 'https://watch.owncast.online/logo', |
||||
}; |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import SocialLinks from '../components/SocialLinks'; |
||||
|
||||
export default { |
||||
title: 'owncast/Social links', |
||||
component: SocialLinks, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof SocialLinks>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof SocialLinks> = args => <SocialLinks {...args} />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Populated = Template.bind({}); |
||||
Populated.args = { |
||||
links: [ |
||||
{ |
||||
platform: 'github', |
||||
url: 'https://github.com/owncast/owncast', |
||||
icon: '/img/platformlogos/github.svg', |
||||
}, |
||||
{ platform: 'Documentation', url: 'https://owncast.online' }, |
||||
{ |
||||
platform: 'mastodon', |
||||
url: 'https://fosstodon.org/users/owncast', |
||||
icon: '/img/platformlogos/mastodon.svg', |
||||
}, |
||||
], |
||||
}; |
||||
|
||||
export const Empty = Template.bind({}); |
||||
Empty.args = { |
||||
links: [], |
||||
}; |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import StatusBar from '../components/video/StatusBar'; |
||||
|
||||
export default { |
||||
title: 'owncast/Status bar', |
||||
component: StatusBar, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof StatusBar>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof StatusBar> = args => <StatusBar {...args} />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Online = Template.bind({}); |
||||
Online.args = { |
||||
online: true, |
||||
viewers: 42, |
||||
timer: '10:42', |
||||
}; |
||||
|
||||
export const Offline = Template.bind({}); |
||||
Offline.args = { |
||||
online: false, |
||||
}; |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import React from 'react'; |
||||
import { ComponentStory, ComponentMeta } from '@storybook/react'; |
||||
import UserDropdownMenu from '../components/UserDropdownMenu'; |
||||
|
||||
export default { |
||||
title: 'owncast/User settings dropdown menu', |
||||
component: UserDropdownMenu, |
||||
parameters: {}, |
||||
} as ComponentMeta<typeof UserDropdownMenu>; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const Template: ComponentStory<typeof UserDropdownMenu> = args => <UserDropdownMenu />; |
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export const Example = Template.bind({}); |
Loading…
Reference in new issue