33 lines
821 B
TypeScript
33 lines
821 B
TypeScript
import type { HTMLAttributes } from "react";
|
|
import { cn } from "./cn.js";
|
|
|
|
export type ActivityIndicatorSize = "default" | "compact";
|
|
|
|
export interface ActivityIndicatorProps extends Omit<
|
|
HTMLAttributes<HTMLSpanElement>,
|
|
"aria-hidden" | "aria-label" | "children" | "role"
|
|
> {
|
|
size?: ActivityIndicatorSize;
|
|
label?: string;
|
|
}
|
|
|
|
export function ActivityIndicator({
|
|
size = "default",
|
|
label,
|
|
className,
|
|
...props
|
|
}: ActivityIndicatorProps) {
|
|
const accessibleLabel = label?.trim() || undefined;
|
|
|
|
return (
|
|
<span
|
|
{...props}
|
|
className={cn("nodedc-activity-indicator", className)}
|
|
data-size={size === "default" ? undefined : size}
|
|
role={accessibleLabel ? "status" : undefined}
|
|
aria-label={accessibleLabel}
|
|
aria-hidden={accessibleLabel ? undefined : "true"}
|
|
/>
|
|
);
|
|
}
|