@appearhere/bloom
Version:
Appear Here's pattern library and styleguide
45 lines (37 loc) • 973 B
JavaScript
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import uniqueId from 'lodash/fp/uniqueId';
import css from './Typewriter.css';
export default class Typewriter extends Component {
static propTypes = {
children: PropTypes.string.isRequired,
duration: PropTypes.number,
};
static defaultProps = {
duration: 25,
};
constructor(props) {
super(props);
this.id = uniqueId('Typewriter');
}
render() {
const { children, duration, ...rest } = this.props;
const letters = [...children];
return (
<span {...rest}>
{ letters.map((letter, i) => (
<span
key={uniqueId(`${this.id}-${letter}`)}
className={css.animation}
style={{
animationDuration: `${duration}ms`,
animationDelay: `${duration * (i * 1.8)}ms`,
}}
>
{ letter }
</span>
)) }
</span>
);
}
}