import { computed, PropType } from 'vue'; import { createNamespace, addUnit, getSizeStyle } from '../utils'; const [createComponent, bem] = createNamespace('loading'); const SpinIcon: JSX.Element[] = []; for (let i = 0; i < 12; i++) { SpinIcon.push(); } const CircularIcon = ( ); export type LoadingType = 'circular' | 'spinner'; export default createComponent({ props: { size: [Number, String], color: String, vertical: Boolean, textSize: [Number, String], type: { type: String as PropType, default: 'circular', }, }, setup(props, { slots }) { const spinnerStyle = computed(() => ({ color: props.color, ...getSizeStyle(props.size), })); const renderText = () => { if (slots.default) { return ( {slots.default()} ); } }; return () => { const { type, vertical } = props; return (
{type === 'spinner' ? SpinIcon : CircularIcon} {renderText()}
); }; }, });