@wener/ui
Version:
160 lines (151 loc) • 3.68 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GooeyLoader = void 0;
const styled_components_1 = __importDefault(require("styled-components"));
const react_1 = __importDefault(require("react"));
const GooeyLoaderContainer = styled_components_1.default.div `
width: 200px;
height: 200px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: auto;
filter: url('#gooey-loader-filter');
animation: rotate-move 2s ease-in-out infinite;
.dot {
width: 70px;
height: 70px;
border-radius: 50%;
background-color: #000;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
.dot-3 {
background-color: #f74d75;
animation: dot-3-move 2s ease infinite, index 6s ease infinite;
}
.dot-2 {
background-color: #10beae;
animation: dot-2-move 2s ease infinite, index 6s -4s ease infinite;
}
.dot-1 {
background-color: #ffe386;
animation: dot-1-move 2s ease infinite, index 6s -2s ease infinite;
}
@keyframes dot-3-move {
20% {
transform: scale(1);
}
45% {
transform: translateY(-18px) scale(0.45);
}
60% {
transform: translateY(-90px) scale(0.45);
}
80% {
transform: translateY(-90px) scale(0.45);
}
100% {
transform: translateY(0px) scale(1);
}
}
@keyframes dot-2-move {
20% {
transform: scale(1);
}
45% {
transform: translate(-16px, 12px) scale(0.45);
}
60% {
transform: translate(-80px, 60px) scale(0.45);
}
80% {
transform: translate(-80px, 60px) scale(0.45);
}
100% {
transform: translateY(0px) scale(1);
}
}
@keyframes dot-1-move {
20% {
transform: scale(1);
}
45% {
transform: translate(16px, 12px) scale(0.45);
}
60% {
transform: translate(80px, 60px) scale(0.45);
}
80% {
transform: translate(80px, 60px) scale(0.45);
}
100% {
transform: translateY(0px) scale(1);
}
}
@keyframes rotate-move {
55% {
transform: translate(-50%, -50%) rotate(0deg);
}
80% {
transform: translate(-50%, -50%) rotate(360deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@keyframes index {
0%,
100% {
z-index: 3;
}
33.3% {
z-index: 2;
}
66.6% {
z-index: 1;
}
}
`;
function loadSvgFilter() {
if (typeof window === 'undefined') {
return;
}
if (document.querySelector('#GooeyLoaderSvgFilter')) {
return;
}
const el = document.createElement('div');
el.id = 'GooeyLoaderSvgFilter';
el.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="gooey-loader-filter">
<feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur" />
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -7"/>
</filter>
</defs>
</svg>
`;
document.body.appendChild(el);
}
/**
* GooeyLoader
*
* @see https://codepen.io/Izumenko/pen/MpWyXK
*/
exports.GooeyLoader = () => {
loadSvgFilter();
return (react_1.default.createElement(GooeyLoaderContainer, null,
react_1.default.createElement("div", { className: "dot dot-1" }),
react_1.default.createElement("div", { className: "dot dot-2" }),
react_1.default.createElement("div", { className: "dot dot-3" })));
};
//# sourceMappingURL=GooeyLoader.js.map