shadimage

Spinner

Loading spinner component for Tile UI.

packages/react/src/components/spinner/spinner.tsx

import React from 'react';
import { getSpinnerSize, spinnerStyleKeys } from '../lib/core';
import type { SpinnerBaseProps } from '../lib/core';
import styles from './spinner.module.scss';

export interface SpinnerProps extends React.SVGProps<SVGSVGElement>, SpinnerBaseProps {}

const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(({ className = '', size = 'default', ...props }, ref) => {
	const resolvedSize = getSpinnerSize(size);

	return (
		<svg
			ref={ref}
			data-slot="spinner"
			role="status"
			aria-label="Loading"
			data-size={resolvedSize}
			xmlns="http://www.w3.org/2000/svg"
			viewBox="0 0 24 24"
			fill="none"
			stroke="currentColor"
			strokeWidth={2}
			strokeLinecap="round"
			strokeLinejoin="round"
			className={`${styles[spinnerStyleKeys.root]} ${className}`}
			{...props}>
			<path d="M21 12a9 9 0 1 1-6.219-8.56" />
		</svg>
	);
});
Spinner.displayName = 'Spinner';

export { Spinner };
export default Spinner;

No selection tags yet — empty means no evidence, not lack of support.