diff --git a/src/Spoiler/Spoiler.jsx b/src/Spoiler/Spoiler.jsx new file mode 100644 index 0000000..b1cc652 --- /dev/null +++ b/src/Spoiler/Spoiler.jsx @@ -0,0 +1,109 @@ +'use strict'; + +import React, { PropTypes } from 'react'; + +import View from '../View'; +import Text from '../Text'; +import FontIcon from '../FontIcon'; + +import { FONT, COLOR } from '../const/theme'; + +import { StyleSheet, css } from '../helpers/styles'; + +export default class Spoiler extends React.Component { + static propTypes = { + /** + * Spoiler title + */ + title: PropTypes.string, + /** + * Spoiler text + */ + text: PropTypes.string + }; + + static defaultProps = { + title: 'Спойлер' + }; + + constructor(props) { + super(props); + + this.state = { + isOpen: false + }; + } + + render() { + const props = this.props; + const state = this.state; + + return ( + + this.setState({ isOpen: !state.isOpen })} + > + + + + + {props.title} + + + { + state.isOpen && + + + {props.text} + + + } + + ) + } +} + +const STYLE = StyleSheet.create({ + root: { + flexDirection: 'column', + alignItems: 'stretch' + }, + titleContainer: { + alignItems: 'center', + cursor: 'pointer' + }, + iconContainer: { + width: '.75rem', + height: '1.25rem', + alignItems: 'center' + }, + iconDown: { + width: '10px', + height: '10px', + border: '5px solid transparent', + borderTop: `5px solid ${COLOR.PRIMARY_MEDIUM}`, + marginTop: 5 + }, + iconRight: { + width: '10px', + height: '10px', + border: '5px solid transparent', + borderLeft: `5px solid ${COLOR.PRIMARY_MEDIUM}`, + marginLeft: 5 + }, + title: { + flex: 1, + fontSize: FONT.SIZE_TEXT, + lineHeight: '1.25rem', + color: COLOR.PRIMARY_MEDIUM + }, + textContainer: { + paddingLeft: '.75rem', + marginBottom: '.5rem' + }, + text: { + fontSize: FONT.SIZE_TEXT, + lineHeight: FONT.LINE_HEIGHT_TEXT + } +}); diff --git a/src/Spoiler/Spoiler.md b/src/Spoiler/Spoiler.md new file mode 100644 index 0000000..264e01b --- /dev/null +++ b/src/Spoiler/Spoiler.md @@ -0,0 +1,26 @@ +### Usage + +```js +import Spoiler from '@roistat/ui/lib/Spoiler'; +``` +const View = require('../View').default; + +Spoiler example + + + Я сразу смазал карту будня,
+ плеснувши краску из стакана;
+ я показал на блюде студня
+ косые скулы океана.
+ На чешуе жестяной рыбы
+ прочел я зовы новых губ.
+ А вы
+ ноктюрн сыграть
+ могли бы
+ на флейте водосточных труб? +
+ } + /> diff --git a/src/Spoiler/index.js b/src/Spoiler/index.js new file mode 100644 index 0000000..5baae90 --- /dev/null +++ b/src/Spoiler/index.js @@ -0,0 +1 @@ +export { default } from './Spoiler'; diff --git a/src/Spoiler/story.jsx b/src/Spoiler/story.jsx new file mode 100644 index 0000000..580c76d --- /dev/null +++ b/src/Spoiler/story.jsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { storiesOf, action } from '@kadira/storybook'; +import Spoiler from './Spoiler'; +import View from '../View'; + +storiesOf('Spoiler', module) + .addWithInfo('Spoiler', 'Spoiler example', () => ( + + Я сразу смазал карту будня,
+ плеснувши краску из стакана;
+ я показал на блюде студня
+ косые скулы океана.
+ На чешуе жестяной рыбы
+ прочел я зовы новых губ.
+ А вы
+ ноктюрн сыграть
+ могли бы
+ на флейте водосточных труб? + + } + /> + ));