Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import _ from 'lodash'; import React from 'react'; import PropTypes from 'react-peek/prop-types'; import Icon, { IIconProps, propTypes as iconPropTypes } from '../Icon'; import { lucidClassNames } from '../../../util/style-helpers'; import { omitProps } from '../../../util/component-types'; const cx = lucidClassNames.bind('&-LoadingIcon'); const { oneOf } = PropTypes; export enum durations { fast = '0.75s', normal = '1.25s', slow = '4s', } interface ILoadingIconProps extends IIconProps { /** The speed of rotation of the spinner. */ speed?: keyof typeof durations; } export const LoadingIcon = ({ className, speed = 'normal', style, isDisabled, ...passThroughs }: ILoadingIconProps) => { const animationDuration = `${durations[speed] || durations.normal}`; return ( <Icon {...omitProps( passThroughs, undefined, _.keys(LoadingIcon.propTypes), false )} {..._.pick(passThroughs, _.keys(iconPropTypes))} viewBox='0 0 100 100' className={cx('&', className)} style={{ animationDuration, ...style }} isDisabled={isDisabled} > <rect x='0' y='0' width='100' height='100' fill='none' /> <circle className={cx('&-circle')} cx='50' cy='50' r='40' /> <circle style={{ animationDuration }} className={cx('&-spinner', { '&-spinner-is-disabled': isDisabled })} cx='50' cy='50' r='40' /> </Icon> ); }; LoadingIcon.displayName = 'LoadingIcon'; LoadingIcon.peek = { description: ` A loading icon. `, categories: ['visual design', 'icons'], extend: 'Icon', madeFrom: ['Icon'], }; LoadingIcon.propTypes = { ...iconPropTypes, speed: oneOf(_.keys(durations))` The speed of rotation of the spinner. `, }; LoadingIcon.defaultProps = Icon.defaultProps; export default LoadingIcon; |