diff --git a/.nx/version-plans/version-plan-1790861635940.md b/.nx/version-plans/version-plan-1790861635940.md new file mode 100644 index 00000000000..19b5aabec92 --- /dev/null +++ b/.nx/version-plans/version-plan-1790861635940.md @@ -0,0 +1,5 @@ +--- +gamut: patch +--- + +Update Spinner component for Safari browser support diff --git a/packages/gamut/src/Loading/Spinner.tsx b/packages/gamut/src/Loading/Spinner.tsx index 1f6f1924acf..c3675439454 100644 --- a/packages/gamut/src/Loading/Spinner.tsx +++ b/packages/gamut/src/Loading/Spinner.tsx @@ -1,9 +1,29 @@ +import { css } from '@codecademy/gamut-styles'; +import { keyframes } from '@emotion/react'; +import styled from '@emotion/styled'; import { FunctionComponent, SVGProps } from 'react'; export type SpinnerProps = SVGProps & { size?: number | string; }; +// Using keyframes since the element doesn't animate in Safari +const rotate = keyframes({ + from: { transform: 'rotate(0deg)' }, + to: { transform: 'rotate(360deg)' }, +}); + +const SpinnerRing = styled.g( + css({ + animation: `${rotate} 1s linear infinite`, + transformBox: 'view-box', + transformOrigin: 'center', + '@media (prefers-reduced-motion: reduce)': { + animationDuration: '3s', + }, + }) +); + export const Spinner: FunctionComponent = ({ size = 24, ...props @@ -11,140 +31,133 @@ export const Spinner: FunctionComponent = ({ return ( Spinner - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); };