storybook dropped

This commit is contained in:
svetlagasheva 2021-04-13 17:04:09 +03:00
parent 88a9e835fa
commit 0fe3024664
86 changed files with 29 additions and 7408 deletions

6257
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,6 @@
"scripts": {
"start": "webpack serve --mode development",
"build": "webpack --mode production",
"storybook": "start-storybook --ci --config-dir ./storybook --static-dir ./ --port 6060",
"test": "jest",
"lint": "eslint src"
},
@ -38,10 +37,6 @@
"@babel/plugin-proposal-object-rest-spread": "7.12.1",
"@babel/preset-env": "7.12.10",
"@babel/preset-react": "7.12.10",
"@storybook/addon-actions": "5.2.8",
"@storybook/addon-console": "1.2.1",
"@storybook/addons": "5.2.8",
"@storybook/react": "5.2.8",
"@testing-library/react": "9.4.0",
"@testing-library/react-hooks": "3.2.1",
"babel-loader": "8.2.2",
@ -60,7 +55,6 @@
"mini-css-extract-plugin": "1.3.3",
"postcss-loader": "4.1.0",
"react-test-renderer": "16.13.0",
"storybook-addon-jsx": "7.1.15",
"terser-webpack-plugin": "5.0.3",
"webpack": "5.31.2",
"webpack-cli": "4.6.0",

View file

@ -1,27 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const classnames = require('classnames');
const Route = require('stremio-router/Route');
const { RouteFocusedProvider } = require('stremio-router/RouteFocusedContext');
const { ToastsContainerProvider } = require('stremio/common/Toasts/ToastsContainerContext');
const appStyles = require('stremio/App/styles');
const styles = require('./styles');
const RouterDecorator = ({ children }) => (
<div id={'app'}>
<ToastsContainerProvider>
<div className={classnames('routes-container', appStyles['router'])}>
<RouteFocusedProvider value={true}>
<Route>
<div className={styles['route-content-container']}>
{children}
</div>
</Route>
</RouteFocusedProvider>
</div>
</ToastsContainerProvider>
</div>
);
module.exports = RouterDecorator;

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const RouterDecorator = require('./RouterDecorator');
module.exports = RouterDecorator;

View file

@ -1,9 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.route-content-container {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
background-color: var(--color-background);
}

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('@storybook/addon-actions/register');
require('storybook-addon-jsx/register');

View file

@ -1,30 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { withConsole } = require('@storybook/addon-console');
const { addDecorator, addParameters, configure } = require('@storybook/react');
const { jsxDecorator } = require('storybook-addon-jsx');
const RouterDecorator = require('./RouterDecorator');
require('spatial-navigation-polyfill');
require('./styles');
window.top.__spatialNavigation__ = {
keyMode: 'ARROW'
};
addParameters({
jsx: {
indent_size: 4,
showFunctions: false
}
});
addDecorator((renderStory, context) => jsxDecorator(renderStory, context));
addDecorator((renderStory, context) => withConsole()(renderStory)(context));
addDecorator((renderStory) => (
<RouterDecorator>
{renderStory()}
</RouterDecorator>
));
configure(() => {
require('./stories');
}, module);

View file

@ -1,23 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const Addon = require('stremio/routes/Addons/Addon');
const styles = require('./styles');
storiesOf('Addon', module).add('Installed', () => (
<Addon
className={styles['installed-addon-container']}
id={'addon.id'}
name={'Addon name'}
version={'1.0.0'}
logo={'/images/intro_background.jpg'}
description={'Addon description ...'}
types={['movie', 'series']}
installed={true}
onToggle={action('Toggle')}
onShare={action('Share')}
dataset={{ transportUrl: 'http://www.com' }}
/>
));

View file

@ -1,23 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const Addon = require('stremio/routes/Addons/Addon');
const styles = require('./styles');
storiesOf('Addon', module).add('NotInstalled', () => (
<Addon
className={styles['installed-addon-container']}
id={'addon.id'}
name={'Addon name'}
version={'1.0.0'}
logo={'/images/intro_background.jpg'}
description={'Addon description ...'}
types={['movie', 'series']}
installed={false}
onToggle={action('Toggle')}
onShare={action('Share')}
dataset={{ transportUrl: 'http://www.com' }}
/>
));

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./InstalledAddon');
require('./NotInstalledAddon');

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.installed-addon-container, .not-installed-addon-container {
margin: 1rem;
}

View file

@ -1,28 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const ColorInput = require('stremio/common/ColorInput');
const styles = require('./styles');
storiesOf('ColorInput', module).add('ColorInput', () => {
const [value, setValue] = React.useState('red');
const onChange = React.useCallback((event) => {
setValue(event.value);
action('onChange')(event);
}, []);
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<ColorInput
className={styles['color-input']}
value={value}
dataset={{ 'dataset-prop': 'dataset-value' }}
data-prop={'data-value'}
onClick={domEventHandler}
onChange={onChange}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./ColorInput');

View file

@ -1,8 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.color-input {
flex: none;
width: 4rem;
height: 4rem;
margin: 1rem;
}

View file

@ -1,19 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const ColorPicker = require('stremio/common/ColorInput/ColorPicker');
const styles = require('./styles');
storiesOf('ColorPicker', module).add('ColorPicker', () => {
const [color, setColor] = React.useState('#f00000ff');
const colorPickerOnInput = React.useCallback((event) => {
setColor(event.value);
}, []);
return (
<div className={styles['color-picker-container']}>
<ColorPicker value={color} onInput={colorPickerOnInput} />
<div className={styles['color-output-label']}>Current color is {color}</div>
</div>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./ColorPicker');

View file

@ -1,10 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.color-picker-container {
padding: 1rem;
.color-output-label {
margin-top: 1rem;
color: var(--color-surfacelighter);
}
}

View file

@ -1,22 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const Icon = require('@stremio/stremio-icons/dom');
const { Image } = require('stremio/common');
const styles = require('./styles');
storiesOf('Image', module).add('ImageWithFallback', () => {
const renderFallback = React.useMemo(() => () => (
<Icon className={styles['icon']} icon={'ic_broken_link'} />
));
return (
<Image
className={styles['image']}
src={'/images/non_existing.png'}
onError={action('onError')}
renderFallback={renderFallback}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./ImageWithFallback');

View file

@ -1,16 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.image {
flex: none;
width: 10rem;
height: 10rem;
margin: 1rem;
}
.icon {
flex: none;
width: 10rem;
height: 10rem;
margin: 1rem;
fill: white;
}

View file

@ -1,21 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { Image } = require('stremio/common');
const styles = require('./styles');
storiesOf('Image', module).add('SampleImage', () => {
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<Image
className={styles['image']}
src={'/images/default_avatar.png'}
data-prop={'data-value'}
onClick={domEventHandler}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleImage');

View file

@ -1,8 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.image {
flex: none;
width: 10rem;
height: 10rem;
margin: 1rem;
}

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleImage');
require('./ImageWithFallback');

View file

@ -1,40 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { MetaItem } = require('stremio/common');
const styles = require('./styles');
const CONTINUE_WATCHING_MENU = [
{
label: 'Play',
value: 'play'
},
{
label: 'Dismiss',
value: 'dismiss'
}
];
storiesOf('MetaItem', module).add('SаmpleMetaItem', () => {
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<MetaItem
className={styles['meta-item']}
type={'movie'}
name={'Sample meta item'}
poster={'/images/intro_background.jpg'}
posterShape={'poster'}
playIcon={true}
progress={0.4}
options={CONTINUE_WATCHING_MENU}
dataset={{ id: 'pt1' }}
optionOnSelect={action('optionOnSelect')}
data-id={'meta-item-id'}
onClick={domEventHandler}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SаmpleMetaItem');

View file

@ -1,7 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.meta-item {
flex: none;
width: 12rem;
margin: 1rem;
}

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SаmpleMetaItem');

View file

@ -1,20 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { ModalDialog } = require('stremio/common');
const styles = require('./styles');
storiesOf('ModalDialog', module).add('ModalDialogWithActionButtons', () => (
<ModalDialog title={'ModalDialogWithActionButtons'}
onCloseRequest={action('onCloseRequest')}
buttons={[
{ label: 'Accept', props: { onClick: action('Accept') } },
{ label: 'Addons', icon: 'ic_addons', className: styles['addons-button-container'], props: { onClick: action('Addons') } },
]}>
<div style={{ height: 1000, background: 'red', color: 'white' }}>
1000px height content
</div>
</ModalDialog>
));

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./ModalDialogWithActionButtons');

View file

@ -1,33 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
:import('~stremio/common/ModalDialog/styles.less') {
modal-dialog-icon: icon;
modal-dialog-label: label;
}
.addons-button-container {
background-color: transparent;
border: 2px solid gray;
.modal-dialog-icon {
fill: gray;
}
.modal-dialog-label {
color: gray;
}
&:hover, &:focus {
filter: none;
outline: none;
border-color: black;
.modal-dialog-icon {
fill: black;
}
.modal-dialog-label {
color: black;
}
}
}

View file

@ -1,14 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { ModalDialog } = require('stremio/common');
storiesOf('ModalDialog', module).add('ModalDialogWithLongContent', () => (
<ModalDialog title={'ModalDialogWithLongContent'} onCloseRequest={action('onCloseRequest')}>
<div style={{ height: 1000, background: 'red', color: 'white' }}>
1000px height content
</div>
</ModalDialog>
));

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./ModalDialogWithLongContent');

View file

@ -1,23 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { ModalDialog } = require('stremio/common');
storiesOf('ModalDialog', module).add('SampleModalDialog', () => {
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<ModalDialog title={'SampleModalDialog'}
data-prop={'data-value'}
dataset={{ 'dataset-prop': 'dataset-value' }}
onCloseRequest={action('onCloseRequest')}
onClick={domEventHandler}>
<div style={{ height: 100, background: 'red', color: 'white' }}>
100px height content
</div>
</ModalDialog>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleModalDialog');

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleModalDialog');
require('./ModalDialogWithActionButtons');
require('./ModalDialogWithLongContent');

View file

@ -1,51 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.modal-dialog {
width: 45rem;
.custom-button {
background-color: var(--color-signal3);
&:hover {
background-color: var(--color-signal380);
color: var(--color-backgrounddarker);
.icon {
fill: var(--color-backgrounddarker);
}
}
.icon {
fill: var(--color-surfacelighter);
width: 1rem;
height: 1rem;
margin-right: 0.5rem;
}
}
// This is only for the content. Not relevant for the demo
.content-container {
display: flex;
flex-direction: row;
margin: 0 -0.5rem;
.content-column {
flex: 1 0 0;
padding: 0 0.5rem;
p {
text-align: justify;
}
}
}
}
// This is only for the buttons that show the modals. Not relevant for the demo
.show-modal-button {
display: inline-block;
background-color: var(--color-signal4);
width: 15rem;
text-align: center;
padding: 1rem;
margin: .5rem;
}

View file

@ -1,39 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { Multiselect } = require('stremio/common');
const styles = require('./styles');
storiesOf('Multiselect', module).add('MultiselectMultipleValues', () => {
const [selected, setSelected] = React.useState(['a']);
const onSelect = React.useCallback((event) => {
action('onSelect')(event);
if (selected.includes(event.value)) {
setSelected(selected.filter((value) => value !== event.value));
} else {
setSelected([...selected, event.value]);
}
}, [selected]);
return (
<Multiselect
className={styles['label-container']}
direction={'bottom-right'}
title={'MultiselectMultipleValues'}
options={[
{ value: 'a', label: 'A' },
{ value: 'b' },
{ value: 'c', label: 'C' },
]}
selected={selected}
disabled={false}
dataset={{ prop: 'value' }}
renderLabelContent={null}
renderLabelText={null}
onOpen={action('onOpen')}
onClose={action('onClose')}
onSelect={onSelect}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./MultiselectMultipleValues');

View file

@ -1,8 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.label-container {
flex: none;
width: 17rem;
height: 3.6rem;
margin: 2rem;
}

View file

@ -1,41 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { Multiselect } = require('stremio/common');
const styles = require('./styles');
storiesOf('Multiselect', module).add('MultiselectNotAutoClosing', () => {
const [selected, setSelected] = React.useState(['a']);
const onSelect = React.useCallback((event) => {
action('onSelect')(event);
if (selected.includes(event.value)) {
setSelected(selected.filter((value) => value !== event.value));
} else {
setSelected([...selected, event.value]);
}
event.nativeEvent.closeMenuPrevented = true;
}, [selected]);
return (
<Multiselect
className={styles['label-container']}
direction={'bottom-right'}
title={'MultiselectNotAutoClosing'}
options={[
{ value: 'a', label: 'A' },
{ value: 'b' },
{ value: 'c', label: 'C' },
]}
selected={selected}
disabled={false}
dataset={{ prop: 'value' }}
renderLabelContent={null}
renderLabelText={null}
onOpen={action('onOpen')}
onClose={action('onClose')}
onSelect={onSelect}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./MultiselectNotAutoClosing');

View file

@ -1,8 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.label-container {
flex: none;
width: 17rem;
height: 3.6rem;
margin: 2rem;
}

View file

@ -1,40 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { Multiselect } = require('stremio/common');
const styles = require('./styles');
storiesOf('Multiselect', module).add('MultiselectSingleValue', () => {
const [selected, setSelected] = React.useState(['a']);
const onSelect = React.useCallback((event) => {
action('onSelect')(event);
setSelected([event.value]);
}, []);
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<Multiselect
className={styles['label-container']}
direction={'bottom-right'}
title={'MultiselectSingleValue'}
options={[
{ value: 'a', label: 'A' },
{ value: 'b' },
{ value: 'c', label: 'C' },
]}
selected={selected}
disabled={false}
dataset={{ prop: 'value' }}
renderLabelContent={null}
renderLabelText={null}
onOpen={action('onOpen')}
onClose={action('onClose')}
onSelect={onSelect}
data-prop={'data-value'}
onClick={domEventHandler}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./MultiselectSingleValue');

View file

@ -1,8 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.label-container {
flex: none;
width: 17rem;
height: 3.6rem;
margin: 2rem;
}

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./MultiselectMultipleValues');
require('./MultiselectNotAutoClosing');
require('./MultiselectSingleValue');

View file

@ -1,16 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const HorizontalNavBar = require('stremio/common/HorizontalNavBar');
storiesOf('NavBar', module).add('HorizontalNavBar', () => (
<HorizontalNavBar
backButton={false}
searchBar={true}
addonsButton={true}
fullscreenButton={true}
notificationsMenu={true}
navMenu={false}
/>
));

View file

@ -1,16 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const HorizontalNavBar = require('stremio/common/HorizontalNavBar');
storiesOf('NavBar', module).add('HorizontalNavBarWithBackButton', () => (
<HorizontalNavBar
backButton={true}
searchBar={true}
addonsButton={true}
fullscreenButton={true}
notificationsMenu={true}
navMenu={false}
/>
));

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./HorizontalNavBar');
require('./HorizontalNavBarWithBackButton');

View file

@ -1,26 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const VerticalNavBar = require('stremio/common/VerticalNavBar');
const TABS = [
{ route: 'board', label: 'Board', icon: 'ic_board' },
{ route: 'discover', label: 'Discover', icon: 'ic_discover' },
{ route: 'library', label: 'Library', icon: 'ic_library' },
{ route: 'calendar', label: 'Calendar', icon: 'ic_calendar' },
{ route: 'addons', label: 'Addons', icon: 'ic_addons' },
{ route: 'settings', label: 'Settings', icon: 'ic_settings' },
{ route: 'board', label: 'Board', icon: 'ic_board' },
{ route: 'discover', label: 'Discover', icon: 'ic_discover' },
{ route: 'library', label: 'Library', icon: 'ic_library' },
{ route: 'calendar', label: 'Calendar', icon: 'ic_calendar' },
{ route: 'addons', label: 'Addons', icon: 'ic_addons' },
{ route: 'settings', label: 'Settings', icon: 'ic_settings' }
];
storiesOf('NavBar', module).add('LongVerticalNavBar', () => (
<VerticalNavBar
tabs={TABS}
/>
));

View file

@ -1,20 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const VerticalNavBar = require('stremio/common/VerticalNavBar');
const TABS = [
{ route: 'board', label: 'Board', icon: 'ic_board' },
{ route: 'discover', label: 'Discover', icon: 'ic_discover' },
{ route: 'library', label: 'Library', icon: 'ic_library' },
{ route: 'calendar', label: 'Calendar', icon: 'ic_calendar' },
{ route: 'addons', label: 'Addons', icon: 'ic_addons' },
{ route: 'settings', label: 'Settings', icon: 'ic_settings' }
];
storiesOf('NavBar', module).add('VerticalNavBar', () => (
<VerticalNavBar
tabs={TABS}
/>
));

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./VerticalNavBar');
require('./LongVerticalNavBar');

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./HorizontalNavBar');
require('./VerticalNavBar');

View file

@ -1,20 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const Notification = require('stremio/common/NavBar/NotificationsMenu/NotificationsList/Notification');
const styles = require('./styles');
storiesOf('Notification', module).add('MultipleVideos', () => (
<Notification
className={styles['multiple-videos-notification-container']}
id={'notification-id'}
type={'series'}
name={'Demo name'}
poster={'/images/intro_background.jpg'}
thumbnail={null}
released={new Date()}
onClick={action('Demo item clicked')}
/>
));

View file

@ -1,22 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const Notification = require('stremio/common/NavBar/NotificationsMenu/NotificationsList/Notification');
const styles = require('./styles');
storiesOf('Notification', module).add('SingleVideo', () => (
<Notification
className={styles['single-video-notification-container']}
id={'notification-id'}
type={'series'}
name={'Demo name'}
poster={'/images/intro_background.jpg'}
thumbnail={'/images/intro_background.jpg'}
season={1}
episode={1}
released={new Date()}
onClick={action('Demo item clicked')}
/>
));

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SingleVideoNotification');
require('./MultipleVideosNotification');

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.single-video-notification-container, .multiple-videos-notification-container {
width: 28rem;
}

View file

@ -1,23 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { PaginationInput } = require('stremio/common');
const styles = require('./styles');
storiesOf('PaginationInput', module).add('SimplePaginationInput', () => {
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<PaginationInput
className={styles['pagination-input']}
label={'5'}
dataset={{ 'dataset-prop': 'dataset-value' }}
data-prop={'data-value'}
onSelect={action('onSelect')}
onClick={domEventHandler}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SimplePaginationInput');

View file

@ -1,27 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
:import('~stremio/common/PaginationInput/styles.less') {
pagination-prev-button-container: prev-button-container;
pagination-next-button-container: next-button-container;
pagination-button-icon: icon;
}
.pagination-input {
flex: none;
align-self: flex-start;
display: flex;
min-width: 8rem;
max-width: 10rem;
margin: 1rem;
background-color: var(--color-backgroundlighter);
.pagination-prev-button-container, .pagination-next-button-container {
width: 3rem;
height: 3rem;
.pagination-button-icon {
width: 1rem;
height: 1rem;
}
}
}

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SimplePaginationInput');

View file

@ -1,53 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const classnames = require('classnames');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const { Button, Popup, useBinaryState } = require('stremio/common');
const styles = require('./styles');
storiesOf('Popup', module).add('Popup', () => {
const [menuOpen, openMenu, closeMenu, toggleMenu] = useBinaryState(false);
const popupLabelOnClick = React.useCallback((event) => {
if (!event.nativeEvent.togglePopupPrevented) {
toggleMenu();
}
}, [toggleMenu]);
const popupMenuOnClick = React.useCallback((event) => {
event.nativeEvent.togglePopupPrevented = true;
}, []);
const popupMenuOnKeyDown = React.useCallback((event) => {
event.nativeEvent.buttonClickPrevented = true;
}, []);
const onCloseRequest = React.useCallback((event) => {
action('onCloseRequest')(event);
closeMenu();
}, []);
const domEventHandler = React.useCallback((event) => {
action('domEventHandler')(event.currentTarget.dataset);
}, []);
return (
<Popup
open={menuOpen}
direction={'bottom-right'}
renderLabel={({ className, children, ...props }) => (
<Button {...props} className={classnames(className, styles['popup-label-container'])} onClick={popupLabelOnClick}>
POPUP LABEL
{children}
</Button>
)}
renderMenu={() => (
<div className={styles['menu-container']} onKeyDown={popupMenuOnKeyDown} onClick={popupMenuOnClick}>
{Array(10).fill(null).map((_, index) => (
<Button key={index} className={styles['random-button']} onClick={action('Click Me')}>Click Me</Button>
))}
</div>
)}
dataset={{ prop: 'value' }}
onCloseRequest={onCloseRequest}
data-prop={'data-value'}
onMouseEnter={domEventHandler}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./Popup');

View file

@ -1,42 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
:import('~stremio/common/Popup/styles.less') {
popup-menu-container: menu-container;
}
.popup-label-container {
flex: none;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 10rem;
height: 3rem;
margin: 2rem;
padding: 0 1.2rem;
color: var(--color-surfacelighter);
background: var(--color-secondarylight);
.popup-menu-container {
right: initial;
left: 0;
.menu-container {
width: 20rem;
height: 20rem;
background: var(--color-surface);
overflow-y: auto;
.random-button {
margin: 2rem;
padding: 0.8rem;
background: var(--color-primary);
text-align: center;
&:hover, &:focus {
background: var(--color-primarylight);
}
}
}
}
}

View file

@ -1,26 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { action } = require('@storybook/addon-actions');
const SeasonsBar = require('stremio/routes/MetaDetails/VideosList/SeasonsBar');
const styles = require('./styles');
storiesOf('SeasonsBar', module).add('SampleSeasonsBar', () => {
const [season, setSeason] = React.useState(1);
const seasons = React.useMemo(() => {
return [1, 2, 3, 4, 5, /*6,*/ 7];
}, []);
const onSelect = React.useCallback((event) => {
action('onSelect')(event);
setSeason(event.value);
}, []);
return (
<SeasonsBar
className={styles['seasons-bar']}
seasons={seasons}
season={season}
onSelect={onSelect}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleSeasonsBar');

View file

@ -1,7 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.seasons-bar {
flex: none;
width: 28rem;
margin: 2rem;
}

View file

@ -1,14 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const SeasonsBar = require('stremio/routes/MetaDetails/VideosList/SeasonsBar');
const styles = require('./styles');
storiesOf('SeasonsBar', module).add('SeasonsBarPlaceholder', () => {
return (
<SeasonsBar.Placeholder
className={styles['seasons-bar']}
/>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SeasonsBarPlaceholder');

View file

@ -1,7 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.seasons-bar {
flex: none;
width: 28rem;
margin: 2rem;
}

View file

@ -1,4 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SampleSeasonsBar');
require('./SeasonsBarPlaceholder');

View file

@ -1,15 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { SharePrompt, ModalDialog } = require('stremio/common');
const styles = require('./styles');
storiesOf('SharePrompt', module).add('SharePrompt', () => (
<ModalDialog title={'Share Stremio'}>
<SharePrompt
className={styles['share-prompt-container']}
url={'https://stremio.com'}
/>
</ModalDialog>
));

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SharePrompt');

View file

@ -1,5 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.share-prompt-container {
width: 24rem;
}

View file

@ -1,16 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const Stream = require('stremio/routes/MetaDetails/StreamsList/Stream');
const styles = require('./styles');
storiesOf('Stream', module).add('StreamWithThumbnail', () => (
<Stream
className={styles['stream-container']}
addonName={'Sample addon name'}
title={'1080p'}
thumbnail={'images/anonymous.png'}
progress={0.6}
/>
));

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./StreamWithThumbnail');

View file

@ -1,7 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.stream-container {
flex: none;
width: 28rem;
margin: 2rem;
}

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./StreamWithThumbnail');

View file

@ -1,44 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const React = require('react');
const { storiesOf } = require('@storybook/react');
const { Toasts } = require('stremio/common');
const styles = require('./styles');
storiesOf('Toast', module).add('SimpleToast', () => {
const toastRef = React.useRef(null);
const showToast = React.useCallback((message) => {
toastRef.current.show({
title: 'Something to take your attention',
timeout: 0,
type: 'info',
icon: 'ic_sub',
closeButton: true,
...message
});
}, [toastRef.current]);
const clickSuccess = () => showToast({
title: 'You clicked it',
text: 'Congratulations! Click event handled successfully.',
type: 'success',
icon: 'ic_check',
timeout: 2e3
});
return (
<div className={styles['root-container']}>
<button onClick={() => showToast({ text: 'Longer message that contains a lot of words but it does not state anything. The idea is to test the handling of long messages.' })}>Long message</button>
<button onClick={() => showToast({ text: 'This will close after 3 seconds', timeout: 3e3 })}>Timeout 3s</button>
<button onClick={() => showToast({ text: 'Click me and see what happens later', title: 'Click here!', onClick: clickSuccess })}>Clickable</button>
<button onClick={() => showToast({ text: 'Type success', type: 'success', icon: 'ic_check' })}>Success</button>
<button onClick={() => showToast({ text: 'Type alert', type: 'alert', icon: 'ic_warning' })}>Alert</button>
<button onClick={() => showToast({ text: 'Type error', type: 'error', icon: 'ic_x' })}>Error</button>
<button onClick={() => showToast({ text: 'No title', type: 'info', title: null, icon: null })}>No title</button>
<button onClick={() => toastRef.current.show({})}>Empty</button>
<button onClick={() => toastRef.current.hideAll()}>Close all</button>
<Toasts ref={toastRef} className={styles['toasts-container']} />
</div>
);
});

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SimpleToast');

View file

@ -1,18 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
.root-container {
width: 100%;
height: 100%;
color: var(--color-surfacelighter);
button {
color: var(--color-surfacelighter);
background-color: var(--color-primarydark);
padding: .5rem;
margin: .5rem;
}
}
.toasts-container {
width: 30rem;
}

View file

@ -1,3 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./SimpleToast');

View file

@ -1,17 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
require('./Addon');
require('./ColorInput');
require('./ColorPicker');
require('./Image');
require('./MetaItem');
require('./ModalDialog');
require('./Multiselect');
require('./NavBar');
require('./Notification');
require('./PaginationInput');
require('./Popup');
require('./SeasonsBar');
require('./SharePrompt');
require('./Stream');
require('./Toast');

View file

@ -1,6 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
:global(#root) {
width: 100%;
height: 100%;
}

View file

@ -1,28 +0,0 @@
// Copyright (C) 2017-2020 Smart code 203358507
const appConfig = require('../webpack.config.js');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = ({ config: storybookConfig }) => {
storybookConfig.module = {
...storybookConfig.module,
rules: appConfig.module.rules
};
storybookConfig.resolve = {
...storybookConfig.resolve,
extensions: [
...storybookConfig.resolve.extensions,
...appConfig.resolve.extensions
],
alias: {
...storybookConfig.resolve.alias,
...appConfig.resolve.alias
}
};
storybookConfig.plugins = [
...storybookConfig.plugins,
new MiniCssExtractPlugin()
];
return storybookConfig;
};