feat: add UI components for skeleton, slider, sonner, spinner, switch, table, tabs, textarea, toggle group, toggle, tooltip, and mobile hook

- Implemented Skeleton component for loading placeholders.
- Created Slider component with customizable properties.
- Added Sonner component for toast notifications with icons.
- Developed Spinner component for loading indicators.
- Introduced Switch component for toggle functionality.
- Built Table component with header, body, footer, and cell subcomponents.
- Added Tabs component with list, trigger, and content subcomponents.
- Created Textarea component for user input.
- Implemented ToggleGroup and Toggle components for grouped toggle functionality.
- Developed Tooltip component with provider, trigger, and content subcomponents.
- Added useIsMobile hook to detect mobile device viewport.
This commit is contained in:
asepharyana
2026-07-23 11:16:34 +07:00
parent 5acb138f96
commit 18bf58be1a
62 changed files with 7481 additions and 1 deletions
+83
View File
@@ -0,0 +1,83 @@
"use client"
import { Progress as ProgressPrimitive } from "@base-ui/react/progress"
import { cn } from "@/lib/utils"
function Progress({
className,
children,
value,
...props
}: ProgressPrimitive.Root.Props) {
return (
<ProgressPrimitive.Root
value={value}
data-slot="progress"
className={cn("flex flex-wrap gap-3", className)}
{...props}
>
{children}
<ProgressTrack>
<ProgressIndicator />
</ProgressTrack>
</ProgressPrimitive.Root>
)
}
function ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {
return (
<ProgressPrimitive.Track
className={cn(
"relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted",
className
)}
data-slot="progress-track"
{...props}
/>
)
}
function ProgressIndicator({
className,
...props
}: ProgressPrimitive.Indicator.Props) {
return (
<ProgressPrimitive.Indicator
data-slot="progress-indicator"
className={cn("h-full bg-primary transition-all", className)}
{...props}
/>
)
}
function ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {
return (
<ProgressPrimitive.Label
className={cn("text-sm font-medium", className)}
data-slot="progress-label"
{...props}
/>
)
}
function ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {
return (
<ProgressPrimitive.Value
className={cn(
"ml-auto text-sm text-muted-foreground tabular-nums",
className
)}
data-slot="progress-value"
{...props}
/>
)
}
export {
Progress,
ProgressTrack,
ProgressIndicator,
ProgressLabel,
ProgressValue,
}