Spaces:
Sleeping
Sleeping
File size: 1,350 Bytes
8a737a9 45e7f4a 8a737a9 | 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 | import type { ComponentProps } from 'react';
import { Spinner } from '@/components/ui/spinner';
import { cn } from '@/lib/utils';
type LoadingIndicatorProps = ComponentProps<'span'> & {
label?: string;
showSpinner?: boolean;
spinnerClassName?: string;
};
function LoadingDots({ className }: { className?: string }) {
return (
<span aria-hidden="true" className={cn('app-loading-dots', className)}>
<span className="app-loading-dot">.</span>
<span className="app-loading-dot">.</span>
<span className="app-loading-dot">.</span>
</span>
);
}
function LoadingIndicator({
className,
label = 'Memuat',
showSpinner = true,
spinnerClassName,
...props
}: LoadingIndicatorProps) {
return (
<span
aria-live="polite"
className={cn('app-loading-indicator', className)}
role="status"
{...props}
>
{showSpinner && (
<Spinner
aria-hidden="true"
className={cn('app-loading-spinner', spinnerClassName)}
role="presentation"
/>
)}
{label && <span>{label}</span>}
{!showSpinner && <LoadingDots />}
</span>
);
}
export { LoadingDots, LoadingIndicator };
|