diff --git a/web/ASC.Web.Components/example/package.json b/web/ASC.Web.Components/example/package.json
index 2a71ce8ff1..b8414c3d69 100644
--- a/web/ASC.Web.Components/example/package.json
+++ b/web/ASC.Web.Components/example/package.json
@@ -46,7 +46,7 @@
"@storybook/addon-storysource": "^5.0.11",
"@storybook/addon-viewport": "^5.0.11",
"@storybook/addons": "^5.0.11",
- "@storybook/cli": "^5.0.11",
+ "@storybook/cli": "^5.1.8",
"@storybook/react": "^5.0.11",
"babel-loader": "^8.0.6",
"install-peers": "^1.0.3",
diff --git a/web/ASC.Web.Components/example/stories/avatar/base/README.md b/web/ASC.Web.Components/example/stories/avatar/base/README.md
new file mode 100644
index 0000000000..9fdb71ee54
--- /dev/null
+++ b/web/ASC.Web.Components/example/stories/avatar/base/README.md
@@ -0,0 +1,27 @@
+# Avatar
+
+## Usage
+
+```js
+import { Avatar } from 'asc-web-components';
+```
+
+#### Description
+
+Required to display user avatar on page.
+
+#### Usage
+
+```js
+
+```
+
+#### Properties
+
+| Props | Type | Required | Values | Default | Description |
+| ------------------ | -------- | :------: | ----------------------------------------- | --------- | ----------------------------------------------------- |
+| `size` | `oneOf` | - | `retina`, `max`, `big`, `medium`, `small` | `medium` | Tells what size avatar should be displayed |
+| `role` | `oneOf` | - | `owner`, `admin`, `guest`, `user` | ` ` | Adds a user role table |
+| `source` | `string` | - | - | ` ` | Avatar image source |
+| `pending` | `bool` | - | - | `false` | Reports account pending |
+| `disabled` | `bool` | - | - | `false` | Reports that account is disabled |
\ No newline at end of file
diff --git a/web/ASC.Web.Components/example/stories/avatar/base/avatar.stories.js b/web/ASC.Web.Components/example/stories/avatar/base/avatar.stories.js
new file mode 100644
index 0000000000..623566afb4
--- /dev/null
+++ b/web/ASC.Web.Components/example/stories/avatar/base/avatar.stories.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { storiesOf } from '@storybook/react';
+import { withKnobs, boolean, text, select } from '@storybook/addon-knobs/react';
+import withReadme from 'storybook-readme/with-readme';
+import Readme from './README.md';
+import { Avatar } from 'asc-web-components';
+import Section from '../../../.storybook/decorators/section';
+
+const roleOptions = ['owner', 'admin','guest','user'];
+const sizeOptions = ['retina', 'max', 'big', 'medium', 'small'];
+
+storiesOf('Components|Avatar', module)
+ .addDecorator(withKnobs)
+ .addDecorator(withReadme(Readme))
+ .add('base', () => (
+
+ ));
\ No newline at end of file
diff --git a/web/ASC.Web.Components/src/components/avatar/index.js b/web/ASC.Web.Components/src/components/avatar/index.js
new file mode 100644
index 0000000000..47186207a2
--- /dev/null
+++ b/web/ASC.Web.Components/src/components/avatar/index.js
@@ -0,0 +1,140 @@
+import React from 'react'
+import styled, { css } from 'styled-components'
+import PropTypes from 'prop-types'
+import { Icons } from '../icons'
+
+const StyledAvatar = styled.div`
+ position: relative;
+ width: ${props =>
+ (props.size === 'retina' && '360px') ||
+ (props.size === 'max' && '200px') ||
+ (props.size === 'big' && '82px') ||
+ (props.size === 'medium' && '48px') ||
+ (props.size === 'small' && '32px')
+ };
+ height: ${props =>
+ (props.size === 'retina' && '360px') ||
+ (props.size === 'max' && '200px') ||
+ (props.size === 'big' && '82px') ||
+ (props.size === 'medium' && '48px') ||
+ (props.size === 'small' && '32px')
+ };
+ border: 1px solid ${props => (props.size === 'max') ? '#bfbfbf' : '#c7c7c7'};
+ border-radius: ${props => (props.size === 'max') ? '3px' : '0px'};
+ -moz-border-radius: ${props => (props.size === 'max') ? '3px' : '0px'};
+ -webkit-border-radius: ${props => (props.size === 'max') ? '3px' : '0px'};
+`;
+
+const Role = styled.div`
+ position: absolute;
+ left: ${props =>
+ (props.size === 'retina' && '8px') ||
+ (props.size === 'max' && '6px') ||
+ (props.size === 'big' && '-2px') ||
+ (props.size === 'medium' && '-2px') ||
+ (props.size === 'small' && '-2px')
+ };
+ bottom: ${props =>
+ (props.size === 'retina' && '8px') ||
+ (props.size === 'max' && '6px') ||
+ (props.size === 'big' && '4px') ||
+ (props.size === 'medium' && '4px') ||
+ (props.size === 'small' && '4px')
+ };
+ width: ${props =>
+ (props.size === 'retina' && '40px') ||
+ (props.size === 'max' && '22px') ||
+ (props.size === 'big' && '12px') ||
+ (props.size === 'medium' && '12px') ||
+ (props.size === 'small' && '12px')
+ };
+ height: ${props =>
+ (props.size === 'retina' && '40px') ||
+ (props.size === 'max' && '22px') ||
+ (props.size === 'big' && '12px') ||
+ (props.size === 'medium' && '12px') ||
+ (props.size === 'small' && '12px')
+ };
+`;
+
+const Pending = styled.div`
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ background: ${props => (props.size === 'retina' || props.size === 'max') ? 'none repeat scroll 0 0 white' : 'transparent'};
+ border: ${props => (props.size === 'retina' || props.size === 'max') ? '1px solid #919191' : 'none'};
+ color: #7D7D7D;
+ opacity: ${props => (props.size === 'retina' || props.size === 'max') ? '0.9' : '1'};
+ text-align: center;
+ width: auto;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ transform: translate(-50%, -50%);
+ font-weight: bold;
+ padding: 42px 16px 5px;
+
+ & > svg {
+ position: absolute;
+ top: ${props => (props.size === 'retina' || props.size === 'max') ? '40%' : '50%'};
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+`;
+
+const Disabled = styled(Pending)`
+ color: #a83200;
+`;
+
+const ImageStyled = styled.img`
+ max-width: 100%;
+ height: auto;
+`;
+
+const Avatar = props => {
+ const {size, source, role, pending, disabled, pendingLabel, disabledLabel} = props;
+
+ return (
+
+ {source === '' && }
+ {source !== '' && }
+
+ {role === 'guest' && }
+ {role === 'admin' && }
+ {role === 'owner' && }
+
+ {pending &&
+
+ {(size !== 'max' || size !== 'retina') && }
+ {(size === 'max' || size === 'retina') && pendingLabel}
+ }
+ {disabled &&
+
+ {(size !== 'max' || size !== 'retina') && }
+ {(size === 'max' || size === 'retina') && disabledLabel}
+ }
+
+ );
+};
+
+Avatar.propTypes = {
+ size: PropTypes.oneOf(['retina', 'max', 'big', 'medium', 'small']),
+ role: PropTypes.oneOf(['owner', 'admin','guest', 'user']),
+ pending: PropTypes.bool,
+ disabled: PropTypes.bool,
+ source: PropTypes.string,
+ pendingLabel: PropTypes.string,
+ disabledLabel: PropTypes.string
+};
+
+Avatar.defaultProps = {
+ size: 'medium',
+ role: '',
+ pending: false,
+ disabled: false,
+ source: '',
+ pendingLabel: 'Pending',
+ disabledLabel: 'Disabled'
+};
+
+export default Avatar;
\ No newline at end of file
diff --git a/web/ASC.Web.Components/src/index.js b/web/ASC.Web.Components/src/index.js
index 15b846d12f..796db39af2 100644
--- a/web/ASC.Web.Components/src/index.js
+++ b/web/ASC.Web.Components/src/index.js
@@ -11,3 +11,4 @@ export { default as DropDown } from './components/drop-down'
export { default as GroupButtonsMenu } from './components/group-buttons-menu'
export { default as TreeMenu } from './components/tree-menu'
export { default as TreeNode } from './components/tree-menu-node'
+export { default as Avatar } from './components/avatar'
\ No newline at end of file