Skip to content

Commit

Permalink
Add Elastic logo loading component (#3017)
Browse files Browse the repository at this point in the history
* Add Elastic logo loading component

* Modify scaling

* Add larger size

* Add changelog
  • Loading branch information
mdefazio authored Mar 20, 2020
1 parent 622d994 commit 11826dc
Show file tree
Hide file tree
Showing 8 changed files with 159 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- Added i18n to `EuiTableHeaderCell` ([#3094](https://github.com/elastic/eui/pull/3094))
- Added `number` and `string` to `size` type of `EuiImage` for setting custom sizes ([#3012](https://github.com/elastic/eui/pull/3012))
- Improved `EuiButtonEmpty` focus state when the `color` type is `text` ([#3135](https://github.com/elastic/eui/pull/3135))
- Added `EuiLoadingElastic` component ([#3017](https://github.com/elastic/eui/pull/3017))

**Bug Fixes**

Expand Down
12 changes: 12 additions & 0 deletions src-docs/src/views/loading/loading_elastic.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import React from 'react';

import { EuiLoadingElastic } from '../../../../src/components/loading';

export default () => (
<div>
<EuiLoadingElastic size="m" />
<EuiLoadingElastic size="l" />
<EuiLoadingElastic size="xl" />
<EuiLoadingElastic size="xxl" />
</div>
);
27 changes: 27 additions & 0 deletions src-docs/src/views/loading/loading_example.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { GuideSectionTypes } from '../../components';
import {
EuiCode,
EuiLoadingKibana,
EuiLoadingElastic,
EuiLoadingSpinner,
EuiLoadingChart,
EuiLoadingContent,
Expand All @@ -16,6 +17,10 @@ import LoadingKibana from './loading_kibana';
const loadingKibanaSource = require('!!raw-loader!./loading_kibana');
const loadingKibanaHtml = renderToHtml(LoadingKibana);

import LoadingElastic from './loading_elastic';
const loadingElasticSource = require('!!raw-loader!./loading_elastic');
const loadingElasticHtml = renderToHtml(LoadingElastic);

import LoadingChart from './loading_chart';
const loadingChartSource = require('!!raw-loader!./loading_chart');
const loadingChartHtml = renderToHtml(LoadingChart);
Expand Down Expand Up @@ -53,6 +58,28 @@ export const LoadingExample = {
demo: <LoadingKibana />,
snippet: '<EuiLoadingKibana size="m" />',
},
{
title: 'Elastic',
source: [
{
type: GuideSectionTypes.JS,
code: loadingElasticSource,
},
{
type: GuideSectionTypes.HTML,
code: loadingElasticHtml,
},
],
text: (
<p>
Elastic logo based load. Should only be used in very large panels,
like bootup screens.
</p>
),
props: { EuiLoadingElastic },
demo: <LoadingElastic />,
snippet: '<EuiLoadingElastic size="m" />',
},
{
title: 'Chart',
source: [
Expand Down
1 change: 1 addition & 0 deletions src/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ export { EuiI18n, EuiI18nNumber } from './i18n';

export {
EuiLoadingKibana,
EuiLoadingElastic,
EuiLoadingChart,
EuiLoadingContent,
EuiLoadingSpinner,
Expand Down
1 change: 1 addition & 0 deletions src/components/loading/_index.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
@import 'variables';
@import 'loading_kibana';
@import 'loading_elastic';
@import 'loading_chart';
@import 'loading_content';
@import 'loading_spinner';
83 changes: 83 additions & 0 deletions src/components/loading/_loading_elastic.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
.euiLoadingElastic {
position: relative;
display: inline-block;
}

.euiLoadingElastic--medium {
width: $euiSize;
}

.euiLoadingElastic--large {
width: $euiSizeL;
}

.euiLoadingElastic--xLarge {
width: $euiSizeXL;
}

.euiLoadingElastic--xxLarge {
width: $euiSizeXXL;
}


.euiLoadingElastic path {
animation-name: euiLoadingElastic;
animation-fill-mode: forwards;
animation-direction: alternate;
transform-style: preserve-3d;
animation-duration: 1s;
animation-timing-function: cubic-bezier(0, .63, .49, 1);
animation-iteration-count: infinite;
transform-origin: 50% 50%;
}

.euiLoadingElastic path:nth-of-type(1) {
animation-delay: 0s;
}

.euiLoadingElastic path:nth-of-type(2) {
animation-delay: .035s;
}

.euiLoadingElastic path:nth-of-type(3) {
animation-delay: .125s;
}

.euiLoadingElastic path:nth-of-type(4) {
animation-delay: .155s;
}

.euiLoadingElastic path:nth-of-type(5) {
animation-delay: .075s;
}

.euiLoadingElastic path:nth-of-type(6) {
animation-delay: .06s;
};


@keyframes euiLoadingElastic {
0% {
transform: scale3d(0, 0, -.7);
opacity: 0;
}

40% {
transform: scale3d(1, 1, 2);
opacity: 1;
}

50% {
transform: scale3d(.99, .99, 2);
}

70% {
transform: scale3d(.96, .96, -2.5);
}

100% {
transform: scale3d(.98, .98, 2);
}

}

1 change: 1 addition & 0 deletions src/components/loading/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export { EuiLoadingKibana } from './loading_kibana';
export { EuiLoadingElastic } from './loading_elastic';
export { EuiLoadingChart } from './loading_chart';
export { EuiLoadingContent } from './loading_content';
export { EuiLoadingSpinner } from './loading_spinner';
33 changes: 33 additions & 0 deletions src/components/loading/loading_elastic.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import React, { HTMLAttributes, FunctionComponent } from 'react';
import classNames from 'classnames';
import { CommonProps, keysOf } from '../common';
import { EuiIcon } from '../icon';

const sizeToClassNameMap = {
m: 'euiLoadingElastic--medium',
l: 'euiLoadingElastic--large',
xl: 'euiLoadingElastic--xLarge',
xxl: 'euiLoadingElastic--xxLarge',
};

export const SIZES = keysOf(sizeToClassNameMap);

export interface EuiLoadingElasticProps {
size?: keyof typeof sizeToClassNameMap;
}

export const EuiLoadingElastic: FunctionComponent<
CommonProps & HTMLAttributes<HTMLDivElement> & EuiLoadingElasticProps
> = ({ size = 'm', className, ...rest }) => {
const classes = classNames(
'euiLoadingElastic',
sizeToClassNameMap[size],
className
);

return (
<span className={classes} {...rest}>
<EuiIcon type="logoElastic" size={size} />
</span>
);
};

0 comments on commit 11826dc

Please sign in to comment.