diff --git a/public/index.html b/public/index.html
index 9a8ef8f..fd7dc98 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,17 +1,13 @@
-
+
+
-
+
+
+
+
+
+
+
);
}
diff --git a/src/fonts/HelveticaNeueCyr-Bold.otf b/src/fonts/HelveticaNeueCyr-Bold.otf
new file mode 100644
index 0000000..383dca6
Binary files /dev/null and b/src/fonts/HelveticaNeueCyr-Bold.otf differ
diff --git a/src/fonts/HelveticaNeueCyr-Light.otf b/src/fonts/HelveticaNeueCyr-Light.otf
new file mode 100644
index 0000000..7ced49a
Binary files /dev/null and b/src/fonts/HelveticaNeueCyr-Light.otf differ
diff --git a/src/fonts/HelveticaNeueCyr-Medium.otf b/src/fonts/HelveticaNeueCyr-Medium.otf
new file mode 100644
index 0000000..a2cde16
Binary files /dev/null and b/src/fonts/HelveticaNeueCyr-Medium.otf differ
diff --git a/src/fonts/YandexSansText-Bold.ttf b/src/fonts/YandexSansText-Bold.ttf
new file mode 100644
index 0000000..e267b3f
Binary files /dev/null and b/src/fonts/YandexSansText-Bold.ttf differ
diff --git a/src/fonts/YandexSansText-Light.ttf b/src/fonts/YandexSansText-Light.ttf
new file mode 100644
index 0000000..875cb32
Binary files /dev/null and b/src/fonts/YandexSansText-Light.ttf differ
diff --git a/src/fonts/YandexSansText-Regular.ttf b/src/fonts/YandexSansText-Regular.ttf
new file mode 100644
index 0000000..990d16b
Binary files /dev/null and b/src/fonts/YandexSansText-Regular.ttf differ
diff --git a/src/images/Fill-154.png b/src/images/Fill-154.png
new file mode 100644
index 0000000..6aae6dd
Binary files /dev/null and b/src/images/Fill-154.png differ
diff --git a/src/images/Oval-9.png b/src/images/Oval-9.png
new file mode 100644
index 0000000..93c9360
Binary files /dev/null and b/src/images/Oval-9.png differ
diff --git a/src/images/Oval.png b/src/images/Oval.png
new file mode 100644
index 0000000..c12733c
Binary files /dev/null and b/src/images/Oval.png differ
diff --git a/src/images/Shape.png b/src/images/Shape.png
new file mode 100644
index 0000000..e79b98c
Binary files /dev/null and b/src/images/Shape.png differ
diff --git a/src/images/cross.png b/src/images/cross.png
new file mode 100644
index 0000000..e20bcc9
Binary files /dev/null and b/src/images/cross.png differ
diff --git a/src/images/nut.webp b/src/images/nut.webp
new file mode 100644
index 0000000..6cdb766
Binary files /dev/null and b/src/images/nut.webp differ
diff --git a/src/index.css b/src/index.css
index 2b6e525..45b8518 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,37 @@
+@font-face {
+ font-family: 'Yandex Sans Light';
+ src: url(fonts/YandexSansText-Light.ttf);
+}
+
+@font-face {
+ font-family: 'Yandex Sans Bold';
+ src: url(fonts/YandexSansText-Bold.ttf);
+}
+
+@font-face {
+ font-family: 'Yandex Sans Regular';
+ src: url(fonts/YandexSansText-Regular.ttf);
+}
+
+@font-face {
+ font-family: 'Helvetica Neue Bold';
+ src: url(fonts/HelveticaNeueCyr-Bold.otf);
+}
+
+@font-face {
+ font-family: 'Helvetica Neue Medium';
+ src: url(fonts/HelveticaNeueCyr-Medium.otf);
+}
+
+@font-face {
+ font-family: 'Helvetica Neue Light';
+ src: url(fonts/HelveticaNeueCyr-Light.otf);
+}
+
+p {
+ overflow: hidden;
+}
+
body {
padding: 0;
margin: 0;
diff --git a/src/index.jsx b/src/index.jsx
index ffc72ee..5912260 100644
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -6,3 +6,5 @@ import { App } from './app';
import './index.css';
ReactDOM.render(
, document.getElementById('root'));
+
+// document.getElementById('root').newLetters();
diff --git a/src/letters/__article/__cross/letters__cross.css b/src/letters/__article/__cross/letters__cross.css
new file mode 100644
index 0000000..5a9ac2b
--- /dev/null
+++ b/src/letters/__article/__cross/letters__cross.css
@@ -0,0 +1,6 @@
+.letters__cross {
+ position: absolute;
+
+ margin-top: -80px;
+ margin-left: 570px;
+}
diff --git a/src/letters/__article/__cross/letters__cross.jsx b/src/letters/__article/__cross/letters__cross.jsx
new file mode 100644
index 0000000..61e6656
--- /dev/null
+++ b/src/letters/__article/__cross/letters__cross.jsx
@@ -0,0 +1,14 @@
+import React, { Component } from 'react';
+
+import './letters__cross.css';
+import cross from '../../../images/cross.png';
+
+export default class LettersCross extends Component {
+ render() {
+ return (
+
+
+
+ );
+ }
+}
diff --git a/src/letters/__article/letters__article.css b/src/letters/__article/letters__article.css
new file mode 100644
index 0000000..c7d8eb3
--- /dev/null
+++ b/src/letters/__article/letters__article.css
@@ -0,0 +1,16 @@
+.letters__article {
+ position: absolute;
+
+ overflow: hidden;
+ width: inherit;
+ max-width: 589px;
+ height: 448px;
+ max-height: 448px;
+ margin-top: 41px;
+ margin-left: 0;
+ background-color: #fff;
+}
+
+.letters__article-title {
+ margin-left: 50px;
+}
diff --git a/src/letters/__article/letters__article.jsx b/src/letters/__article/letters__article.jsx
new file mode 100644
index 0000000..0280732
--- /dev/null
+++ b/src/letters/__article/letters__article.jsx
@@ -0,0 +1,16 @@
+import React, { Component } from 'react';
+
+import './letters__article.css';
+import LettersCross from './__cross/letters__cross';
+
+export default class LettersArticle extends Component {
+ render() {
+ return (
+
+
{this.props.articleHeader}
+
{this.props.articleContent}
+
+
+ );
+ }
+}
diff --git a/src/letters/__footer/letters__footer.css b/src/letters/__footer/letters__footer.css
new file mode 100644
index 0000000..1b32523
--- /dev/null
+++ b/src/letters/__footer/letters__footer.css
@@ -0,0 +1,16 @@
+.letters__footer {
+ position: absolute;
+ right: 20px;
+ bottom: 9px;
+
+ color: #9b9b9b;
+ font-family: 'Helvetica Neue Medium', sans-serif;
+ font-size: 11px;
+}
+
+.letters__footer-text {
+ overflow: hidden;
+ max-width: 350px;
+ max-height: 11px;
+ margin-bottom: 2px;
+}
diff --git a/src/letters/__footer/letters__footer.jsx b/src/letters/__footer/letters__footer.jsx
new file mode 100644
index 0000000..5f64e5d
--- /dev/null
+++ b/src/letters/__footer/letters__footer.jsx
@@ -0,0 +1,16 @@
+import React, { Component } from 'react';
+
+import './letters__footer.css';
+
+export default class LettersFooter extends Component {
+ render() {
+ return (
+
+
+ Помощь и обратная связь Реклама
+ © 2001—2018, Яндекс
+
+
+ );
+ }
+}
diff --git a/src/letters/__letter/letters__letter.css b/src/letters/__letter/letters__letter.css
new file mode 100644
index 0000000..54fed98
--- /dev/null
+++ b/src/letters/__letter/letters__letter.css
@@ -0,0 +1,110 @@
+.letters__line {
+ position: absolute;
+
+ width: inherit;
+ height: 0;
+ margin-top: 41px;
+
+ border: 1px solid #e2e2e2;
+}
+
+.letters__marker {
+ position: absolute;
+
+ width: 16px;
+ height: 16px;
+ margin-top: 14px;
+ margin-left: 20px;
+
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ background-color: #ffffff;
+ border-radius: 3px;
+ color: #fff;
+}
+
+.label {
+ width: inherit;
+}
+
+/* Single letter */
+
+.author-image {
+ position: absolute;
+
+ width: 30px;
+ height: inherit;
+ margin-top: 6px;
+ margin-left: 46px;
+}
+
+.letters__letter {
+ width: inherit;
+ height: 43px;
+ margin-top: 0;
+ margin-left: 0;
+}
+
+.yandex-oval {
+ position: absolute;
+
+ margin-top: 0;
+ margin-left: 0;
+}
+
+.Ya {
+ position: absolute;
+
+ margin-top: 7px;
+ margin-left: 9px;
+}
+
+.letters__author {
+ position: absolute;
+
+ max-width: 160px;
+ max-height: 13px;
+ margin-top: 17px;
+ margin-left: 86px;
+ color: #000;
+ font-family: 'Helvetica Neue Light', sans-serif;
+ font-size: 13px;
+}
+
+.unread-oval {
+ position: absolute;
+
+ margin-top: 12px;
+ margin-left: 261px;
+}
+
+.letters__theme {
+ position: absolute;
+
+ max-width: 210px;
+ max-height: 13px;
+ margin-top: 17px;
+ margin-left: 281px;
+ color: #000;
+ font-family: 'Helvetica Neue Light', sans-serif;
+ font-size: 13px;
+}
+
+.letters__theme:hover {
+ background-color: grey;
+}
+
+.letters_unread {
+ font-family: 'Helvetica Neue Bold', sans-serif;
+}
+
+.letters__date {
+ position: absolute;
+ right: 20px;
+
+ max-width: 50px;
+ max-height: 13px;
+ margin-top: 17px;
+ color: #9b9b9b;
+ font-family: 'Helvetica Neue Medium', sans-serif;
+ font-size: 13px;
+}
diff --git a/src/letters/__letter/letters__letter.jsx b/src/letters/__letter/letters__letter.jsx
new file mode 100644
index 0000000..cb59424
--- /dev/null
+++ b/src/letters/__letter/letters__letter.jsx
@@ -0,0 +1,66 @@
+import React, { Component } from 'react';
+
+import './letters__letter.css';
+import unread from '../../images/Oval.png';
+
+export default class Letter extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {};
+ this.open = this.open.bind(this);
+ this.handleCheckbox = this.handleCheckbox.bind(this);
+ }
+
+ handleCheckbox(checkbox) {
+ this.props.handleCheckbox(checkbox, this.props.number);
+ }
+
+ convertReadProp() {
+ if (this.props.read) {
+ return '';
+ }
+ return ' letters_unread';
+ }
+
+ unreadMarker() {
+ if (this.props.read) {
+ return null;
+ }
+ return (
+
+
+
+ );
+ }
+
+ open() {
+ this.props.open(this.props.number);
+ }
+
+ render() {
+ return (
+
+
+
+
{this.props.author}
+
+
+ {this.props.theme}
+
+
+
{this.props.date}
+
+ {this.props.authorImage}
+
+ {this.unreadMarker()}
+
+
+
+ );
+ }
+}
diff --git a/src/letters/__list/letters__list.css b/src/letters/__list/letters__list.css
new file mode 100644
index 0000000..b96550c
--- /dev/null
+++ b/src/letters/__list/letters__list.css
@@ -0,0 +1,9 @@
+.letters__list {
+ position: absolute;
+
+ overflow: hidden;
+ width: inherit;
+ height: 430px;
+ margin-top: 41px;
+ margin-left: 0px;
+}
diff --git a/src/letters/__list/letters__list.jsx b/src/letters/__list/letters__list.jsx
new file mode 100644
index 0000000..8e4fbf5
--- /dev/null
+++ b/src/letters/__list/letters__list.jsx
@@ -0,0 +1,31 @@
+import React, { Component } from 'react';
+
+import './letters__list.css';
+import Letter from '../__letter/letters__letter';
+
+export default class LettersList extends Component {
+ makeJSXLetters() {
+ const jsxLetters = [];
+ const letters = this.props.letters;
+ for (let i = 0; i < letters.length; i++) {
+ const l = letters[i];
+ jsxLetters.push(
+
+ );
+ }
+ return jsxLetters;
+ }
+
+ render() {
+ return React.createElement('div', { className: 'letters__list' }, this.makeJSXLetters());
+ }
+}
diff --git a/src/letters/__opmenu/letters__opmenu.css b/src/letters/__opmenu/letters__opmenu.css
new file mode 100644
index 0000000..f8d4d58
--- /dev/null
+++ b/src/letters/__opmenu/letters__opmenu.css
@@ -0,0 +1,43 @@
+.letters__opmenu {
+ position: absolute;
+
+ width: 540px;
+ height: 41px;
+ margin-left: 49px;
+}
+
+.letters__opmenuItem {
+ overflow: hidden;
+ max-height: 13px;
+ margin-top: 15px;
+
+ color: #cccccc;
+ float: left;
+ font-family: 'Helvetica Neue Bold', sans-serif;
+ font-size: 13px;
+ font-weight: 500;
+}
+
+#forward {
+ max-width: 75px;
+ margin-left: 6px;
+}
+
+#delete {
+ max-width: 53px;
+ margin-left: 26px;
+}
+
+.letters__opmenuItem:hover {
+ background-color: grey;
+}
+
+#letters__spam {
+ max-width: 64px;
+ margin-left: 24px;
+}
+
+#read {
+ max-width: 71px;
+ margin-left: 25px;
+}
diff --git a/src/letters/__opmenu/letters__opmenu.jsx b/src/letters/__opmenu/letters__opmenu.jsx
new file mode 100644
index 0000000..c4d8e13
--- /dev/null
+++ b/src/letters/__opmenu/letters__opmenu.jsx
@@ -0,0 +1,32 @@
+import React, { Component } from 'react';
+
+import './letters__opmenu.css';
+
+export default class LettersOpmenu extends Component {
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/src/letters/content.js b/src/letters/content.js
new file mode 100644
index 0000000..b5cd68c
--- /dev/null
+++ b/src/letters/content.js
@@ -0,0 +1,31 @@
+export function getRandomInt(min, max) {
+ return Math.floor(Math.random() * (max - min)) + min;
+}
+
+const authors = ['Яндекс', 'Google'];
+
+export function rndAuthor() {
+ return authors[getRandomInt(0, authors.length)];
+}
+
+const themes = {
+ Яндекс: ['Яндекс.Технологии', 'Яндекс.Музыка', 'Яндекс.Дзен'],
+ Google: ['Google Play', 'GDrive']
+};
+
+export const contents = {
+ 'Яндекс.Технологии': 'Мы расскажем вам про Яндекс.Технологии',
+ 'Яндекс.Музыка': 'Подписывайтесь на Яндекс.Музыку',
+ 'Яндекс.Дзен': 'Умная лента от Яндекс позволит Вам оставаться в курсе новостей',
+ 'Google Play': 'Would you like to know more about Google Play?',
+ GDrive: 'Here is a simple tutorial to get started with GDrive',
+ 'Доступ к аккаунту восстановлен': 'Поздравляем! Доступ к аккаунту наконец-то восстановлен',
+ 'Как читать почту с мобильного':
+ 'Для начала нужно установить мобильное приложение Яндекс.Почты, затем...',
+ 'Соберите всю почту в этот ящик': 'Чем больше человечество использует интернет'
+};
+
+export function rndTheme(author) {
+ const concreteThemes = themes[author];
+ return concreteThemes[getRandomInt(0, concreteThemes.length)];
+}
diff --git a/src/letters/letters.css b/src/letters/letters.css
new file mode 100644
index 0000000..4c311f4
--- /dev/null
+++ b/src/letters/letters.css
@@ -0,0 +1,16 @@
+.letters {
+ position: absolute;
+
+ width: 589px;
+ height: 530px;
+ margin-top: 56px;
+
+ margin-left: 191px;
+ background-color: #fff;
+
+ box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.34);
+}
+
+#letters__footer-line {
+ margin-top: 499px;
+}
diff --git a/src/letters/letters.jsx b/src/letters/letters.jsx
new file mode 100644
index 0000000..af9c134
--- /dev/null
+++ b/src/letters/letters.jsx
@@ -0,0 +1,177 @@
+import React, { Component } from 'react';
+
+import './letters.css';
+import LettersOpmenu from './__opmenu/letters__opmenu';
+import LettersList from './__list/letters__list';
+import LettersArticle from './__article/letters__article';
+import LettersFooter from './__footer/letters__footer';
+import { getRandomInt, rndAuthor, rndTheme, contents } from './content';
+import yandexOval from '../images/Oval-9.png';
+import ya from '../images/Fill-154.png';
+
+export default class Letters extends Component {
+ static createYandexAuthorImage() {
+ return (
+
+
+
+
+
+
+
+
+ );
+ }
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ letters: [
+ {
+ author: 'Яндекс.Паспорт',
+ theme: 'Доступ к аккаунту восстановлен',
+ date: '6 авг',
+ authorImage: Letters.createYandexAuthorImage(),
+ read: false,
+ checked: false
+ },
+ {
+ author: 'Команда Яндекс.Почты',
+ theme: 'Как читать почту с мобильного',
+ date: '6 июл',
+ authorImage: Letters.createYandexAuthorImage(),
+ read: false,
+ checked: false
+ },
+ {
+ author: 'Команда Яндекс.Почты',
+ theme: 'Как читать почту с мобильного',
+ date: '6 июл',
+ authorImage: Letters.createYandexAuthorImage(),
+ read: true,
+ checked: false
+ },
+ {
+ author: 'Яндекс',
+ theme: 'Соберите всю почту в этот ящик',
+ date: '6 июл',
+ authorImage: Letters.createYandexAuthorImage(),
+ read: true,
+ checked: false
+ }
+ ],
+ articleHeader: 'Header',
+ articleContent: 'Content',
+ mode: 'letters'
+ };
+ this.newLetter = this.newLetter.bind(this);
+ this.deleteOnclick = this.deleteOnclick.bind(this);
+ this.handleCheckbox = this.handleCheckbox.bind(this);
+ this.open = this.open.bind(this);
+ this.close = this.close.bind(this);
+ }
+
+ componentDidMount() {
+ let sum = 0;
+
+ for (let i = 1; i < 10; i++) {
+ sum += 10 * getRandomInt(1, 600);
+ setTimeout(this.newLetter, sum);
+ }
+ }
+
+ newLetter() {
+ const author = rndAuthor();
+ this.setState(state => {
+ state.letters.unshift({
+ author,
+ theme: rndTheme(author),
+ date: '6 июл',
+ read: false,
+ checked: false
+ });
+ return state;
+ });
+ }
+
+ handleCheckbox(checkbox, number) {
+ this.state.letters[number].checked = checkbox.target.checked;
+ this.setState(state => {
+ return state;
+ });
+ }
+
+ open(number) {
+ this.setState(state => {
+ const articleHeader = state.letters[number].theme;
+ const articleContent = contents[articleHeader];
+ state.letters[number].read = true;
+ return {
+ letters: state.letters,
+ articleHeader,
+ articleContent,
+ mode: 'article'
+ };
+ });
+ }
+
+ createView() {
+ if (this.state.mode === 'article') {
+ return (
+
+ );
+ }
+ return (
+
+ );
+ }
+
+ close() {
+ this.setState(state => {
+ state.mode = 'letters';
+ return state;
+ });
+ }
+
+ deleteOnclick() {
+ let kek = 0;
+ while (kek++ < 4) {
+ let hasAny = false;
+ for (let i = 0; i < this.state.letters.length; i++) {
+ if (this.state.letters[i].checked) {
+ this.state.letters.splice(i, 1);
+ hasAny = true;
+ break;
+ }
+ }
+ if (hasAny) {
+ continue;
+ }
+ break;
+ }
+ this.setState(state => {
+ return state;
+ });
+ }
+
+ render() {
+ return (
+
+
+
+
+ {this.createView()}
+
+
+
+ );
+ }
+}
diff --git a/src/menu/menu.css b/src/menu/menu.css
new file mode 100644
index 0000000..a663bc5
--- /dev/null
+++ b/src/menu/menu.css
@@ -0,0 +1,46 @@
+#menu {
+ position: absolute;
+
+ width: 147px;
+ height: 126px;
+ margin-top: 96px;
+ margin-left: 22px;
+}
+
+#highlighted {
+ position: absolute;
+ z-index: 1;
+
+ width: 147px;
+ height: 22px;
+ margin-top: 5px;
+ margin-left: 0;
+ background-color: #cdd6e4;
+ border-radius: 3px;
+}
+
+#menu-items {
+ position: absolute;
+ z-index: 2;
+
+ width: inherit;
+ height: inherit;
+}
+
+.menu {
+ z-index: 2;
+
+ max-width: 147px;
+ max-height: 14px;
+ margin-left: 10px;
+ color: #707070;
+ font-family: 'Helvetica Neue', sans-serif;
+ font-size: 11px;
+ font-weight: 500;
+}
+
+.highlighted {
+ z-index: 2;
+ color: #555;
+ font-weight: 700;
+}
diff --git a/src/menu/menu.jsx b/src/menu/menu.jsx
new file mode 100644
index 0000000..3a0e6c6
--- /dev/null
+++ b/src/menu/menu.jsx
@@ -0,0 +1,34 @@
+import React, { Component } from 'react';
+
+import './menu.css';
+
+export default class Menu extends Component {
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/src/name/name.css b/src/name/name.css
new file mode 100644
index 0000000..c572d9d
--- /dev/null
+++ b/src/name/name.css
@@ -0,0 +1,12 @@
+.name {
+ position: absolute;
+
+ width: 153px;
+ height: 31px;
+ margin-top: 12px;
+ margin-left: 53px;
+
+ color: #010101;
+
+ font-size: 26px;
+}
diff --git a/src/name/name.jsx b/src/name/name.jsx
new file mode 100644
index 0000000..b27e4ed
--- /dev/null
+++ b/src/name/name.jsx
@@ -0,0 +1,14 @@
+import React, { Component } from 'react';
+
+import './name.css';
+import shape from '../images/Shape.png';
+
+export default class Name extends Component {
+ render() {
+ return (
+
+

+
+ );
+ }
+}
diff --git a/src/search/__cross/search__cross.css b/src/search/__cross/search__cross.css
new file mode 100644
index 0000000..c83b612
--- /dev/null
+++ b/src/search/__cross/search__cross.css
@@ -0,0 +1,6 @@
+.search__cross {
+ position: absolute;
+
+ margin-top: 5px;
+ margin-left: 280px;
+}
diff --git a/src/search/__cross/search__cross.jsx b/src/search/__cross/search__cross.jsx
new file mode 100644
index 0000000..0d39609
--- /dev/null
+++ b/src/search/__cross/search__cross.jsx
@@ -0,0 +1,14 @@
+import React, { Component } from 'react';
+
+import './search__cross.css';
+import cross from '../../images/cross.png';
+
+export default class SearchCross extends Component {
+ render() {
+ return (
+
+
+
+ );
+ }
+}
diff --git a/src/search/__suggestion/search__suggestion.css b/src/search/__suggestion/search__suggestion.css
new file mode 100644
index 0000000..3db9096
--- /dev/null
+++ b/src/search/__suggestion/search__suggestion.css
@@ -0,0 +1,15 @@
+#search__suggestion {
+ position: absolute;
+
+ width: 44px;
+ max-width: 44px;
+ height: 39px;
+ max-height: 19px;
+ margin-top: 7px;
+ margin-left: 16px;
+
+ color: #707070;
+ font-family: 'Yandex Sans Regular', sans-serif;
+ font-size: 15px;
+ font-weight: 400;
+}
diff --git a/src/search/__suggestion/search__suggestion.jsx b/src/search/__suggestion/search__suggestion.jsx
new file mode 100644
index 0000000..da54954
--- /dev/null
+++ b/src/search/__suggestion/search__suggestion.jsx
@@ -0,0 +1,9 @@
+import React, { Component } from 'react';
+
+import './search__suggestion.css';
+
+export default class SearchSuggestion extends Component {
+ render() {
+ return
Поиск
;
+ }
+}
diff --git a/src/search/search.css b/src/search/search.css
new file mode 100644
index 0000000..1b605c1
--- /dev/null
+++ b/src/search/search.css
@@ -0,0 +1,11 @@
+#search {
+ position: absolute;
+
+ width: 301px;
+ height: 32px;
+ margin-top: 11px;
+
+ margin-left: 320px;
+ background-color: #fff;
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
+}
diff --git a/src/search/search.jsx b/src/search/search.jsx
new file mode 100644
index 0000000..dc5ff89
--- /dev/null
+++ b/src/search/search.jsx
@@ -0,0 +1,16 @@
+import React, { Component } from 'react';
+
+import './search.css';
+import SearchSuggestion from './__suggestion/search__suggestion';
+import SearchCross from './__cross/search__cross';
+
+export default class Search extends Component {
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/src/three-lines/three-lines.css b/src/three-lines/three-lines.css
new file mode 100644
index 0000000..cbc29a1
--- /dev/null
+++ b/src/three-lines/three-lines.css
@@ -0,0 +1,20 @@
+.hline {
+ position: absolute;
+
+ width: 20px;
+ height: 3px;
+ margin-left: 22px;
+ background-color: #000;
+}
+
+#hline-1 {
+ margin-top: 19px;
+}
+
+#hline-2 {
+ margin-top: 26px;
+}
+
+#hline-3 {
+ margin-top: 33px;
+}
diff --git a/src/three-lines/three-lines.jsx b/src/three-lines/three-lines.jsx
new file mode 100644
index 0000000..e215082
--- /dev/null
+++ b/src/three-lines/three-lines.jsx
@@ -0,0 +1,17 @@
+import React, { Component } from 'react';
+
+import './three-lines.css';
+
+export default class ThreeLines extends Component {
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/src/writebox/writebox.css b/src/writebox/writebox.css
new file mode 100644
index 0000000..6e19a42
--- /dev/null
+++ b/src/writebox/writebox.css
@@ -0,0 +1,27 @@
+#writebox {
+ position: absolute;
+
+ width: 147px;
+ height: 32px;
+ margin-top: 56px;
+ margin-left: 22px;
+ background-color: #6287bd;
+
+ border-radius: 3px;
+}
+
+#write {
+ position: absolute;
+
+ overflow: hidden;
+
+ max-width: 60px;
+ max-height: 11px;
+ margin-top: 7px;
+ margin-left: 46px;
+
+ color: #fff;
+ font-family: 'Helvetica Neue Medium', sans-serif;
+ font-size: 12px;
+ font-weight: 500;
+}
diff --git a/src/writebox/writebox.jsx b/src/writebox/writebox.jsx
new file mode 100644
index 0000000..1898f43
--- /dev/null
+++ b/src/writebox/writebox.jsx
@@ -0,0 +1,13 @@
+import React, { Component } from 'react';
+
+import './writebox.css';
+
+export default class ThreeLines extends Component {
+ render() {
+ return (
+
+ );
+ }
+}