import React, { ElementType, forwardRef, HTMLAttributes } from 'react' import PropTypes from 'prop-types' import classNames from 'classnames' import { PolymorphicRefForwardingComponent } from '../../helpers' import { colorPropType } from '../../props' import type { Colors } from '../../types' export interface CSpinnerProps extends HTMLAttributes { /** * Component used for the root node. Either a string to use a HTML element or a component. */ as?: ElementType /** * A string of all className you want applied to the component. */ className?: string /** * Sets the color context of the component to one of CoreUI’s themed colors. * * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string */ color?: Colors /** * Size the component small. */ size?: 'sm' /** * Set the button variant to an outlined button or a ghost button. */ variant?: 'border' | 'grow' /** * Set visually hidden label for accessibility purposes. */ visuallyHiddenLabel?: string } export const CSpinner: PolymorphicRefForwardingComponent<'div', CSpinnerProps> = forwardRef< HTMLDivElement | HTMLSpanElement, CSpinnerProps >( ( { as: Component = 'div', className, color, size, variant = 'border', visuallyHiddenLabel = 'Loading...', ...rest }, ref ) => { return ( {visuallyHiddenLabel} ) } ) CSpinner.propTypes = { as: PropTypes.string, className: PropTypes.string, color: colorPropType, size: PropTypes.oneOf(['sm']), variant: PropTypes.oneOf(['border', 'grow']), visuallyHiddenLabel: PropTypes.string, } CSpinner.displayName = 'CSpinner'