"use client" import * as React from "react" import { cn } from "cn" import { Label as LabelPrimitive, ProgressBar as ProgressPrimitive, type LabelProps, type ProgressBarProps as ProgressPrimitiveProps, } from "react-aria-components" type ProgressContextValue = { percentage?: number isIndeterminate: boolean valueText?: string } const ProgressContext = React.createContext(null) function useProgress() { const context = React.useContext(ProgressContext) if (!context) { throw new Error("useProgress must be used within a Progress.") } return context } function ProgressContent({ children, percentage, isIndeterminate, valueText, }: ProgressContextValue & { children?: React.ReactNode }) { const context = React.useMemo( () => ({ percentage, isIndeterminate, valueText }), [percentage, isIndeterminate, valueText] ) return ( {children} ) } function Progress({ className, children, ...props }: Omit & { children?: React.ReactNode className?: string }) { return ( {({ percentage, valueText, isIndeterminate }) => ( {children} )} ) } function ProgressTrack({ className, ...props }: React.ComponentProps<"span">) { return ( ) } function ProgressIndicator({ className, style, ...props }: React.ComponentProps<"span">) { const { percentage, isIndeterminate } = useProgress() return ( ) } function ProgressLabel({ className, ...props }: LabelProps) { return ( ) } function ProgressValue({ className, children, ...props }: Omit, "children"> & { children?: (value: string) => React.ReactNode }) { const { valueText } = useProgress() return ( {children && valueText != null ? children(valueText) : valueText} ) } export { Progress, ProgressTrack, ProgressIndicator, ProgressLabel, ProgressValue, }