diff --git a/frontend/app/components/preloader/index.ts b/frontend/app/components/preloader/index.ts
index 76c20d37..26c3fbff 100644
--- a/frontend/app/components/preloader/index.ts
+++ b/frontend/app/components/preloader/index.ts
@@ -1,3 +1,3 @@
-export { default } from './preloader';
+export { Preloader } from './preloader';
// all styles were moved to iframe.html
diff --git a/frontend/app/components/preloader/preloader.test.tsx b/frontend/app/components/preloader/preloader.test.tsx
deleted file mode 100644
index 7ea1fb4c..00000000
--- a/frontend/app/components/preloader/preloader.test.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-/** @jsx createElement */
-import { createElement } from 'preact';
-import { mount } from 'enzyme';
-import Preloader from './preloader';
-
-describe(``, () => {
- it('should render Preloader', () => {
- const element = mount();
-
- expect(element.childAt(0).hasClass('preloader root__preloader')).toEqual(true);
- });
-});
diff --git a/frontend/app/components/preloader/preloader.tsx b/frontend/app/components/preloader/preloader.tsx
index 66b4e65b..9b814c63 100644
--- a/frontend/app/components/preloader/preloader.tsx
+++ b/frontend/app/components/preloader/preloader.tsx
@@ -1,17 +1,9 @@
/** @jsx createElement */
-import { createElement, JSX } from 'preact';
+import { createElement, FunctionComponent } from 'preact';
import b, { Mix } from 'bem-react-helper';
-type Props = JSX.HTMLAttributes & {
+interface Props {
mix?: Mix;
-};
+}
-const Preloader = (props: Props) => (
-
-);
-
-export default Preloader;
+export const Preloader: FunctionComponent = ({ mix }) => ;
diff --git a/frontend/app/components/root/root.tsx b/frontend/app/components/root/root.tsx
index 783ef6e2..42da7705 100644
--- a/frontend/app/components/root/root.tsx
+++ b/frontend/app/components/root/root.tsx
@@ -36,7 +36,7 @@ import { AuthPanel } from '@app/components/auth-panel';
import Settings from '@app/components/settings';
import { ConnectedComment as Comment } from '@app/components/comment/connected-comment';
import { CommentForm } from '@app/components/comment-form';
-import Preloader from '@app/components/preloader';
+import { Preloader } from '@app/components/preloader';
import { Thread } from '@app/components/thread';
import { Button } from '@app/components/button';
import { uploadImage, getPreview } from '@app/common/api';
diff --git a/frontend/app/components/user-info/__preloader/user-info__preloader.scss b/frontend/app/components/user-info/__preloader/user-info__preloader.scss
index e9547920..3dae5aed 100644
--- a/frontend/app/components/user-info/__preloader/user-info__preloader.scss
+++ b/frontend/app/components/user-info/__preloader/user-info__preloader.scss
@@ -1,3 +1,4 @@
.user-info__preloader {
margin: 0 auto 18px;
+ color: #888;
}
diff --git a/frontend/app/components/user-info/last-comments-list.tsx b/frontend/app/components/user-info/last-comments-list.tsx
index 34f3295a..2dc58767 100644
--- a/frontend/app/components/user-info/last-comments-list.tsx
+++ b/frontend/app/components/user-info/last-comments-list.tsx
@@ -3,8 +3,8 @@ import { createElement } from 'preact';
import { Comment as CommentType } from '@app/common/types';
-import { Comment } from '../comment';
-import Preloader from '../preloader';
+import { Comment } from '@app/components/comment';
+import { Preloader } from '@app/components/preloader';
const LastCommentsList = ({ comments, isLoading }: { comments: CommentType[]; isLoading: boolean }) => {
if (isLoading) {
diff --git a/frontend/deleteme.html b/frontend/deleteme.html
index ff424dad..e2b8acc8 100644
--- a/frontend/deleteme.html
+++ b/frontend/deleteme.html
@@ -12,60 +12,57 @@
-moz-osx-font-smoothing: grayscale;
}
- .preloader {
- width: 60px;
- text-align: center;
- font-size: 0;
+ @keyframes bouncing {
+ 0%,
+ 80%,
+ 100% {
+ box-shadow: 0 10px 0 -8px;
}
-
- .preloader_view_iframe {
- margin: 0 auto;
+ 40% {
+ box-shadow: 0 10px 0 0;
}
+ }
- .preloader__bounce {
- display: inline-block;
+ .preloader,
+ .preloader:before,
+ .preloader:after {
+ border-radius: 50%;
width: 10px;
height: 10px;
- margin-right: 3px;
- background-color: #333;
- border-radius: 100%;
- animation: iframePreloaderBounce 1.4s infinite ease-in-out both;
+ animation-fill-mode: both;
+ animation: bouncing 1.8s infinite ease-in-out;
}
- .preloader__bounce:first-child {
- animation-delay: -.32s;
- }
-
- .preloader__bounce:nth-child(2) {
- animation-delay: -.16s;
+ .preloader {
+ color: #fff;
+ position: relative;
+ transform: translateZ(0);
+ animation-delay: -0.16s;
}
- .preloader__bounce:last-child {
- margin-right: 0;
+ .preloader:before,
+ .preloader:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ }
+ .preloader:before {
+ transform: translateX(-15px) translateZ(0);
+ animation-delay: -0.32s;
+ }
+ .preloader:after {
+ transform: translateX(15px) translateZ(0);
}
- @keyframes iframePreloaderBounce {
- 0% {
- transform: scale(0);
- }
-
- 40% {
- transform: scale(1);
- }
-
- 80%, 100% {
- transform: scale(0);
- }
+ .preloader_view_iframe {
+ margin: 0 auto;
+ color: #888;
}