(react) add Loader component

The first use of this loader will be inside the DataGrid for its
loading state. Its colors are based on the existing primary
colors tokens.
This commit is contained in:
Nathan Vasse
2023-03-06 15:56:01 +01:00
committed by NathanVss
parent b84af99c36
commit 8e078c87c2
5 changed files with 58 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
.c__loader {
width: 48px;
height: 48px;
border-radius: 50%;
position: relative;
animation: rotate 1s linear infinite
}
.c__loader::before , .c__loader::after {
content: "";
box-sizing: border-box;
position: absolute;
inset: 0;
border-radius: 50%;
border: 5px solid var(--c--theme--colors--primary-700);
animation: prixClipFix 2s linear infinite ;
}
.c__loader::after{
border-color: var(--c--theme--colors--primary-400);
animation: prixClipFix 2s linear infinite , rotate 0.5s linear infinite reverse;
inset: 6px;
}
@keyframes rotate {
0% {transform: rotate(0deg)}
100% {transform: rotate(360deg)}
}
@keyframes prixClipFix {
0% {clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}
25% {clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}
50% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}
75% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}
100% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}
}

View File

@@ -0,0 +1,13 @@
import { ComponentMeta, ComponentStory } from "@storybook/react";
import React from "react";
import { Loader } from "components/Loader/index";
export default {
title: "Components/Loader (WIP)",
component: Loader,
} as ComponentMeta<typeof Loader>;
const Template: ComponentStory<typeof Loader> = () => <Loader />;
export const Default = Template.bind({});
Default.args = {};

View File

@@ -0,0 +1,9 @@
import React from "react";
interface Props {
"aria-label"?: string;
}
export const Loader = (props: Props) => {
return <div className="c__loader" role="status" {...props} />;
};

View File

@@ -2,6 +2,7 @@
@import '@openfun/cunningham-tokens/default-tokens';
@import './components/Button';
@import './components/Forms/Input';
@import './components/Loader';
@import './components/Pagination';
* {

View File

@@ -1,5 +1,6 @@
import "./index.scss";
export * from "./components/Button";
export * from "./components/Loader";
export * from "./components/Pagination";
export * from "./components/Provider";