Files
outline/app/components/Spinner.tsx
Tom Moor db73879918 Assorted cleanup, minor bug fixes, styling fixes, eslint rules (#5165
* fix: Logic error in toast
fix: Remove useless component

* fix: Logout not clearing all stores

* Add icons to notification settings

* Add eslint rule to enforce spaced comment

* Add eslint rule for arrow-body-style

* Add eslint rule to enforce self-closing components

* Add menu to api key settings
Fix: Deleting webhook subscription does not remove from UI
Split webhook subscriptions into active and inactive
Styling updates
2023-04-08 05:25:20 -07:00

65 lines
1.2 KiB
TypeScript

import * as React from "react";
import styled from "styled-components";
type Props = React.HTMLAttributes<HTMLOrSVGElement> & {
color?: string;
};
export default function Spinner({ color, ...props }: Props) {
return (
<SVG
width="16px"
height="16px"
viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<Circle
$color={color}
fill="none"
strokeWidth="2"
strokeLinecap="round"
cx="8"
cy="8"
r="6"
/>
</SVG>
);
}
const SVG = styled.svg`
@keyframes rotator {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(270deg);
}
}
animation: rotator 1.4s linear infinite;
margin: 4px;
`;
const Circle = styled.circle<{ $color?: string }>`
@keyframes dash {
0% {
stroke-dashoffset: 47;
}
50% {
stroke-dashoffset: 11;
transform: rotate(135deg);
}
100% {
stroke-dashoffset: 47;
transform: rotate(450deg);
}
}
stroke: ${(props) => props.$color || props.theme.textSecondary};
stroke-dasharray: 46;
stroke-dashoffset: 0;
transform-origin: center;
animation: dash 1.4s ease-in-out infinite;
`;