fix: demo build & upgrades (#2848)

This commit is contained in:
KinfeMichael Tariku
2025-05-31 00:22:02 -07:00
committed by GitHub
parent 77c38594bb
commit 06ca627a6a
26 changed files with 10418 additions and 16051 deletions

View File

@@ -54,7 +54,9 @@ export default function ResetPassword() {
<PasswordInput <PasswordInput
id="password" id="password"
value={password} value={password}
onChange={(e) => setPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setPassword(e.target.value)
}
autoComplete="password" autoComplete="password"
placeholder="Password" placeholder="Password"
/> />
@@ -64,7 +66,9 @@ export default function ResetPassword() {
<PasswordInput <PasswordInput
id="password" id="password"
value={confirmPassword} value={confirmPassword}
onChange={(e) => setConfirmPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setConfirmPassword(e.target.value)
}
autoComplete="password" autoComplete="password"
placeholder="Password" placeholder="Password"
/> />

View File

@@ -35,6 +35,7 @@ export default function RegisterOAuthClient() {
return; return;
} }
const res = await client.oauth2.register({ const res = await client.oauth2.register({
// @ts-ignore
name, name,
icon: await convertImageToBase64(logo), icon: await convertImageToBase64(logo),
redirectURLs: [redirectUri], redirectURLs: [redirectUri],

View File

@@ -279,7 +279,9 @@ export default function UserCard(props: {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<PasswordInput <PasswordInput
value={twoFaPassword} value={twoFaPassword}
onChange={(e) => setTwoFaPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setTwoFaPassword(e.target.value)
}
placeholder="Enter Password" placeholder="Enter Password"
/> />
<Button <Button
@@ -354,7 +356,9 @@ export default function UserCard(props: {
</Label> </Label>
<Input <Input
value={twoFaPassword} value={twoFaPassword}
onChange={(e) => setTwoFaPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setTwoFaPassword(e.target.value)
}
placeholder="Enter OTP" placeholder="Enter OTP"
/> />
</div> </div>
@@ -365,7 +369,9 @@ export default function UserCard(props: {
id="password" id="password"
placeholder="Password" placeholder="Password"
value={twoFaPassword} value={twoFaPassword}
onChange={(e) => setTwoFaPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setTwoFaPassword(e.target.value)
}
/> />
</div> </div>
)} )}
@@ -550,21 +556,27 @@ function ChangePassword() {
<PasswordInput <PasswordInput
id="current-password" id="current-password"
value={currentPassword} value={currentPassword}
onChange={(e) => setCurrentPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setCurrentPassword(e.target.value)
}
autoComplete="new-password" autoComplete="new-password"
placeholder="Password" placeholder="Password"
/> />
<Label htmlFor="new-password">New Password</Label> <Label htmlFor="new-password">New Password</Label>
<PasswordInput <PasswordInput
value={newPassword} value={newPassword}
onChange={(e) => setNewPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setNewPassword(e.target.value)
}
autoComplete="new-password" autoComplete="new-password"
placeholder="New Password" placeholder="New Password"
/> />
<Label htmlFor="password">Confirm Password</Label> <Label htmlFor="password">Confirm Password</Label>
<PasswordInput <PasswordInput
value={confirmPassword} value={confirmPassword}
onChange={(e) => setConfirmPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setConfirmPassword(e.target.value)
}
autoComplete="new-password" autoComplete="new-password"
placeholder="Confirm Password" placeholder="Confirm Password"
/> />

View File

@@ -29,6 +29,7 @@ export default async function AuthorizePage({
const session = await auth.api.getSession({ const session = await auth.api.getSession({
headers: await headers(), headers: await headers(),
}); });
// @ts-ignore
const clientDetails = await auth.api.getOAuthClient({ const clientDetails = await auth.api.getOAuthClient({
params: { params: {
id: client_id, id: client_id,

View File

@@ -16,5 +16,6 @@
"ui": "@/components/ui", "ui": "@/components/ui",
"lib": "@/lib", "lib": "@/lib",
"hooks": "@/hooks" "hooks": "@/hooks"
} },
"iconLibrary": "lucide"
} }

View File

@@ -58,7 +58,7 @@ function SignInBox() {
type="email" type="email"
placeholder="m@example.com" placeholder="m@example.com"
required required
onChange={(e) => { onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setEmail(e.target.value); setEmail(e.target.value);
}} }}
value={email} value={email}
@@ -77,7 +77,9 @@ function SignInBox() {
<PasswordInput <PasswordInput
id="password" id="password"
value={password} value={password}
onChange={(e) => setPassword(e.target.value)} onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setPassword(e.target.value)
}
autoComplete="password" autoComplete="password"
placeholder="Password" placeholder="Password"
/> />

View File

@@ -1,16 +1,16 @@
import * as React from "react"; import * as React from "react";
import { cva } from "class-variance-authority"; import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const alertVariants = cva( const alertVariants = cva(
"relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7", "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
{ {
variants: { variants: {
variant: { variant: {
default: "bg-background text-foreground", default: "bg-background text-foreground",
destructive: destructive:
"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", "text-destructive-foreground [&>svg]:text-current *:data-[slot=alert-description]:text-destructive-foreground/80",
}, },
}, },
defaultVariants: { defaultVariants: {
@@ -19,36 +19,48 @@ const alertVariants = cva(
}, },
); );
const Alert = ( function Alert({
props?: React.HTMLAttributes<HTMLDivElement> & { className,
variant: "default" | "destructive"; variant,
}, ...props
) => ( }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) {
return (
<div <div
data-slot="alert"
role="alert" role="alert"
className={cn(alertVariants({ variant: props?.variant }), props?.className)} className={cn(alertVariants({ variant }), className)}
{...props} {...props}
/> />
); );
Alert.displayName = "Alert"; }
const AlertTitle = ({ function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="alert-title"
className={cn(
"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
className, className,
...props )}
}: React.HTMLAttributes<HTMLHeadingElement>) => (
<h5
className={cn("mb-1 font-medium leading-none tracking-tight", className)}
{...props} {...props}
/> />
); );
AlertTitle.displayName = "AlertTitle"; }
const AlertDescription = ({ function AlertDescription({
className, className,
...props ...props
}: React.HTMLAttributes<HTMLParagraphElement>) => ( }: React.ComponentProps<"div">) {
<div className={cn("text-sm [&_p]:leading-relaxed", className)} {...props} /> return (
<div
data-slot="alert-description"
className={cn(
"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
className,
)}
{...props}
/>
); );
AlertDescription.displayName = "AlertDescription"; }
export { Alert, AlertTitle, AlertDescription }; export { Alert, AlertTitle, AlertDescription };

View File

@@ -5,43 +5,49 @@ import * as AvatarPrimitive from "@radix-ui/react-avatar";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const Avatar = ({ function Avatar({
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>) => ( }: React.ComponentProps<typeof AvatarPrimitive.Root>) {
return (
<AvatarPrimitive.Root <AvatarPrimitive.Root
data-slot="avatar"
className={cn( className={cn(
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", "relative flex size-8 shrink-0 overflow-hidden rounded-full",
className, className,
)} )}
{...props} {...props}
/> />
); );
Avatar.displayName = AvatarPrimitive.Root.displayName; }
const AvatarImage = ({ function AvatarImage({
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>) => ( }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
return (
<AvatarPrimitive.Image <AvatarPrimitive.Image
className={cn("aspect-square h-full w-full", className)} data-slot="avatar-image"
className={cn("aspect-square size-full", className)}
{...props} {...props}
/> />
); );
AvatarImage.displayName = AvatarPrimitive.Image.displayName; }
const AvatarFallback = ({ function AvatarFallback({
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>) => ( }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
return (
<AvatarPrimitive.Fallback <AvatarPrimitive.Fallback
data-slot="avatar-fallback"
className={cn( className={cn(
"flex h-full w-full items-center justify-center rounded-full bg-muted", "bg-muted flex size-full items-center justify-center rounded-full",
className, className,
)} )}
{...props} {...props}
/> />
); );
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; }
export { Avatar, AvatarImage, AvatarFallback }; export { Avatar, AvatarImage, AvatarFallback };

View File

@@ -2,32 +2,31 @@
import * as React from "react"; import * as React from "react";
import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
import { CheckIcon } from "@radix-ui/react-icons"; import { CheckIcon } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const Checkbox = ({ function Checkbox({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & { }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
ref: React.RefObject<React.ElementRef<typeof CheckboxPrimitive.Root>>; return (
}) => (
<CheckboxPrimitive.Root <CheckboxPrimitive.Root
ref={ref} data-slot="checkbox"
className={cn( className={cn(
"peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground", "peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
className, className,
)} )}
{...props} {...props}
> >
<CheckboxPrimitive.Indicator <CheckboxPrimitive.Indicator
className={cn("flex items-center justify-center text-current")} data-slot="checkbox-indicator"
className="flex items-center justify-center text-current transition-none"
> >
<CheckIcon className="h-4 w-4" /> <CheckIcon className="size-3.5" />
</CheckboxPrimitive.Indicator> </CheckboxPrimitive.Indicator>
</CheckboxPrimitive.Root> </CheckboxPrimitive.Root>
); );
Checkbox.displayName = CheckboxPrimitive.Root.displayName; }
export { Checkbox }; export { Checkbox };

View File

@@ -1,166 +1,168 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { type DialogProps } from "@radix-ui/react-dialog";
import { MagnifyingGlassIcon } from "@radix-ui/react-icons";
import { Command as CommandPrimitive } from "cmdk"; import { Command as CommandPrimitive } from "cmdk";
import { SearchIcon } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { Dialog, DialogContent } from "@/components/ui/dialog"; import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
const Command = ({ function Command({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive> & { }: React.ComponentProps<typeof CommandPrimitive>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive>>; return (
}) => (
<CommandPrimitive <CommandPrimitive
ref={ref} data-slot="command"
className={cn( className={cn(
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground", "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
className, className,
)} )}
{...props} {...props}
/> />
); );
Command.displayName = CommandPrimitive.displayName; }
interface CommandDialogProps extends DialogProps {} function CommandDialog({
title = "Command Palette",
const CommandDialog = ({ children, ...props }: CommandDialogProps) => { description = "Search for a command to run...",
children,
...props
}: React.ComponentProps<typeof Dialog> & {
title?: string;
description?: string;
}) {
return ( return (
<Dialog {...props}> <Dialog {...props}>
<DialogHeader className="sr-only">
<DialogTitle>{title}</DialogTitle>
<DialogDescription>{description}</DialogDescription>
</DialogHeader>
<DialogContent className="overflow-hidden p-0"> <DialogContent className="overflow-hidden p-0">
<Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"> <Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
{children} {children}
</Command> </Command>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
); );
}; }
const CommandInput = ({ function CommandInput({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input> & { }: React.ComponentProps<typeof CommandPrimitive.Input>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.Input>>; return (
}) => ( <div
<div className="flex items-center border-b px-3" cmdk-input-wrapper=""> data-slot="command-input-wrapper"
<MagnifyingGlassIcon className="mr-2 h-4 w-4 shrink-0 opacity-50" /> className="flex h-9 items-center gap-2 border-b px-3"
>
<SearchIcon className="size-4 shrink-0 opacity-50" />
<CommandPrimitive.Input <CommandPrimitive.Input
ref={ref} data-slot="command-input"
className={cn( className={cn(
"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50", "placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
className, className,
)} )}
{...props} {...props}
/> />
</div> </div>
); );
}
CommandInput.displayName = CommandPrimitive.Input.displayName; function CommandList({
const CommandList = ({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> & { }: React.ComponentProps<typeof CommandPrimitive.List>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.List>>; return (
}) => (
<CommandPrimitive.List <CommandPrimitive.List
ref={ref} data-slot="command-list"
className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)} className={cn(
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
className,
)}
{...props} {...props}
/> />
); );
}
CommandList.displayName = CommandPrimitive.List.displayName; function CommandEmpty({
const CommandEmpty = ({
ref,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty> & { }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.Empty>>; return (
}) => (
<CommandPrimitive.Empty <CommandPrimitive.Empty
ref={ref} data-slot="command-empty"
className="py-6 text-center text-sm" className="py-6 text-center text-sm"
{...props} {...props}
/> />
); );
}
CommandEmpty.displayName = CommandPrimitive.Empty.displayName; function CommandGroup({
const CommandGroup = ({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group> & { }: React.ComponentProps<typeof CommandPrimitive.Group>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.Group>>; return (
}) => (
<CommandPrimitive.Group <CommandPrimitive.Group
ref={ref} data-slot="command-group"
className={cn( className={cn(
"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground", "text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
className, className,
)} )}
{...props} {...props}
/> />
); );
}
CommandGroup.displayName = CommandPrimitive.Group.displayName; function CommandSeparator({
const CommandSeparator = ({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator> & { }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.Separator>>; return (
}) => (
<CommandPrimitive.Separator <CommandPrimitive.Separator
ref={ref} data-slot="command-separator"
className={cn("-mx-1 h-px bg-border", className)} className={cn("bg-border -mx-1 h-px", className)}
{...props} {...props}
/> />
); );
CommandSeparator.displayName = CommandPrimitive.Separator.displayName; }
const CommandItem = ({ function CommandItem({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item> & { }: React.ComponentProps<typeof CommandPrimitive.Item>) {
ref: React.RefObject<React.ElementRef<typeof CommandPrimitive.Item>>; return (
}) => (
<CommandPrimitive.Item <CommandPrimitive.Item
ref={ref} data-slot="command-item"
className={cn( className={cn(
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50", "data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className, className,
)} )}
{...props} {...props}
/> />
); );
}
CommandItem.displayName = CommandPrimitive.Item.displayName; function CommandShortcut({
const CommandShortcut = ({
className, className,
...props ...props
}: React.HTMLAttributes<HTMLSpanElement>) => { }: React.ComponentProps<"span">) {
return ( return (
<span <span
data-slot="command-shortcut"
className={cn( className={cn(
"ml-auto text-xs tracking-widest text-muted-foreground", "text-muted-foreground ml-auto text-xs tracking-widest",
className, className,
)} )}
{...props} {...props}
/> />
); );
}; }
CommandShortcut.displayName = "CommandShortcut";
export { export {
Command, Command,

View File

@@ -2,134 +2,134 @@
import * as React from "react"; import * as React from "react";
import * as DialogPrimitive from "@radix-ui/react-dialog"; import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons"; import { XIcon } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const Dialog = DialogPrimitive.Root; function Dialog({
...props
}: React.ComponentProps<typeof DialogPrimitive.Root>) {
return <DialogPrimitive.Root data-slot="dialog" {...props} />;
}
const DialogTrigger = DialogPrimitive.Trigger; function DialogTrigger({
...props
}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />;
}
const DialogPortal = DialogPrimitive.Portal; function DialogPortal({
...props
}: React.ComponentProps<typeof DialogPrimitive.Portal>) {
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />;
}
const DialogClose = DialogPrimitive.Close; function DialogClose({
...props
}: React.ComponentProps<typeof DialogPrimitive.Close>) {
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />;
}
const DialogOverlay = ({ function DialogOverlay({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & { }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
ref: React.RefObject<React.ElementRef<typeof DialogPrimitive.Overlay>>; return (
}) => (
<DialogPrimitive.Overlay <DialogPrimitive.Overlay
ref={ref} data-slot="dialog-overlay"
className={cn( className={cn(
"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",
className, className,
)} )}
{...props} {...props}
/> />
); );
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; }
const DialogContent = ({ function DialogContent({
ref,
className, className,
children, children,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { }: React.ComponentProps<typeof DialogPrimitive.Content>) {
ref: React.RefObject<React.ElementRef<typeof DialogPrimitive.Content>>; return (
}) => ( <DialogPortal data-slot="dialog-portal">
<DialogPortal>
<DialogOverlay /> <DialogOverlay />
<DialogPrimitive.Content <DialogPrimitive.Content
ref={ref} data-slot="dialog-content"
className={cn( className={cn(
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", "fixed left-[50%] top-[50%] z-50 grid max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg w-11/12",
className, className,
)} )}
{...props} {...props}
> >
{children} {children}
<DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"> <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">
<Cross2Icon className="h-4 w-4" /> <XIcon />
<span className="sr-only">Close</span> <span className="sr-only">Close</span>
</DialogPrimitive.Close> </DialogPrimitive.Close>
</DialogPrimitive.Content> </DialogPrimitive.Content>
</DialogPortal> </DialogPortal>
); );
DialogContent.displayName = DialogPrimitive.Content.displayName; }
const DialogHeader = ({ function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
className, return (
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div <div
data-slot="dialog-header"
className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
{...props}
/>
);
}
function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="dialog-footer"
className={cn( className={cn(
"flex flex-col space-y-1.5 text-center sm:text-left", "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
className, className,
)} )}
{...props} {...props}
/> />
); );
DialogHeader.displayName = "DialogHeader"; }
const DialogFooter = ({ function DialogTitle({
className, className,
...props ...props
}: React.HTMLAttributes<HTMLDivElement>) => ( }: React.ComponentProps<typeof DialogPrimitive.Title>) {
<div return (
className={cn(
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
className,
)}
{...props}
/>
);
DialogFooter.displayName = "DialogFooter";
const DialogTitle = ({
ref,
className,
...props
}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> & {
ref: React.RefObject<React.ElementRef<typeof DialogPrimitive.Title>>;
}) => (
<DialogPrimitive.Title <DialogPrimitive.Title
ref={ref} data-slot="dialog-title"
className={cn( className={cn("text-lg leading-none font-semibold", className)}
"text-lg font-semibold leading-none tracking-tight",
className,
)}
{...props} {...props}
/> />
); );
DialogTitle.displayName = DialogPrimitive.Title.displayName; }
const DialogDescription = ({ function DialogDescription({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> & { }: React.ComponentProps<typeof DialogPrimitive.Description>) {
ref: React.RefObject<React.ElementRef<typeof DialogPrimitive.Description>>; return (
}) => (
<DialogPrimitive.Description <DialogPrimitive.Description
ref={ref} data-slot="dialog-description"
className={cn("text-sm text-muted-foreground", className)} className={cn("text-muted-foreground text-sm", className)}
{...props} {...props}
/> />
); );
DialogDescription.displayName = DialogPrimitive.Description.displayName; }
export { export {
Dialog, Dialog,
DialogPortal,
DialogOverlay,
DialogTrigger,
DialogClose, DialogClose,
DialogContent, DialogContent,
DialogHeader,
DialogFooter,
DialogTitle,
DialogDescription, DialogDescription,
DialogFooter,
DialogHeader,
DialogOverlay,
DialogPortal,
DialogTitle,
DialogTrigger,
}; };

View File

@@ -2,222 +2,256 @@
import * as React from "react"; import * as React from "react";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
import { import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
CheckIcon,
ChevronRightIcon,
DotFilledIcon,
} from "@radix-ui/react-icons";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const DropdownMenu = DropdownMenuPrimitive.Root; function DropdownMenu({
const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
const DropdownMenuGroup = DropdownMenuPrimitive.Group;
const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
const DropdownMenuSub = DropdownMenuPrimitive.Sub;
const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
const DropdownMenuSubTrigger = ({
ref,
className,
inset,
children,
...props ...props
}) => ( }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
<DropdownMenuPrimitive.SubTrigger return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
ref={ref} }
className={cn(
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent", function DropdownMenuPortal({
inset && "pl-8", ...props
className, }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
)} return (
{...props} <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
>
{children}
<ChevronRightIcon className="ml-auto h-4 w-4" />
</DropdownMenuPrimitive.SubTrigger>
); );
DropdownMenuSubTrigger.displayName = }
DropdownMenuPrimitive.SubTrigger.displayName;
const DropdownMenuSubContent = ({ function DropdownMenuTrigger({
ref,
className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> & { }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
ref: React.RefObject< return (
React.ElementRef<typeof DropdownMenuPrimitive.SubContent> <DropdownMenuPrimitive.Trigger
>; data-slot="dropdown-menu-trigger"
}) => (
<DropdownMenuPrimitive.SubContent
ref={ref}
className={cn(
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
{...props} {...props}
/> />
); );
DropdownMenuSubContent.displayName = }
DropdownMenuPrimitive.SubContent.displayName;
const DropdownMenuContent = ({ function DropdownMenuContent({
ref,
className, className,
sideOffset = 4, sideOffset = 4,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & { }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
ref: React.RefObject<React.ElementRef<typeof DropdownMenuPrimitive.Content>>; return (
}) => (
<DropdownMenuPrimitive.Portal> <DropdownMenuPrimitive.Portal>
<DropdownMenuPrimitive.Content <DropdownMenuPrimitive.Content
ref={ref} data-slot="dropdown-menu-content"
sideOffset={sideOffset} sideOffset={sideOffset}
className={cn( className={cn(
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className, className,
)} )}
{...props} {...props}
/> />
</DropdownMenuPrimitive.Portal> </DropdownMenuPrimitive.Portal>
); );
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; }
const DropdownMenuItem = ({ ref, className, inset, ...props }) => ( function DropdownMenuGroup({
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
return (
<DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
);
}
function DropdownMenuItem({
className,
inset,
variant = "default",
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
inset?: boolean;
variant?: "default" | "destructive";
}) {
return (
<DropdownMenuPrimitive.Item <DropdownMenuPrimitive.Item
ref={ref} data-slot="dropdown-menu-item"
data-inset={inset}
data-variant={variant}
className={cn( className={cn(
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
inset && "pl-8",
className, className,
)} )}
{...props} {...props}
/> />
); );
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; }
const DropdownMenuCheckboxItem = ({ function DropdownMenuCheckboxItem({
ref,
className, className,
children, children,
checked, checked,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> & { }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
ref: React.RefObject< return (
React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>
>;
}) => (
<DropdownMenuPrimitive.CheckboxItem <DropdownMenuPrimitive.CheckboxItem
ref={ref} data-slot="dropdown-menu-checkbox-item"
className={cn( className={cn(
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className, className,
)} )}
checked={checked} checked={checked}
{...props} {...props}
> >
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
<DropdownMenuPrimitive.ItemIndicator> <DropdownMenuPrimitive.ItemIndicator>
<CheckIcon className="h-4 w-4" /> <CheckIcon className="size-4" />
</DropdownMenuPrimitive.ItemIndicator> </DropdownMenuPrimitive.ItemIndicator>
</span> </span>
{children} {children}
</DropdownMenuPrimitive.CheckboxItem> </DropdownMenuPrimitive.CheckboxItem>
); );
DropdownMenuCheckboxItem.displayName = }
DropdownMenuPrimitive.CheckboxItem.displayName;
const DropdownMenuRadioItem = ({ function DropdownMenuRadioGroup({
ref, ...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
return (
<DropdownMenuPrimitive.RadioGroup
data-slot="dropdown-menu-radio-group"
{...props}
/>
);
}
function DropdownMenuRadioItem({
className, className,
children, children,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> & { }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
ref: React.RefObject< return (
React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>
>;
}) => (
<DropdownMenuPrimitive.RadioItem <DropdownMenuPrimitive.RadioItem
ref={ref} data-slot="dropdown-menu-radio-item"
className={cn( className={cn(
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className, className,
)} )}
{...props} {...props}
> >
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
<DropdownMenuPrimitive.ItemIndicator> <DropdownMenuPrimitive.ItemIndicator>
<DotFilledIcon className="h-4 w-4 fill-current" /> <CircleIcon className="size-2 fill-current" />
</DropdownMenuPrimitive.ItemIndicator> </DropdownMenuPrimitive.ItemIndicator>
</span> </span>
{children} {children}
</DropdownMenuPrimitive.RadioItem> </DropdownMenuPrimitive.RadioItem>
); );
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; }
const DropdownMenuLabel = ({ ref, className, inset, ...props }) => ( function DropdownMenuLabel({
className,
inset,
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
inset?: boolean;
}) {
return (
<DropdownMenuPrimitive.Label <DropdownMenuPrimitive.Label
ref={ref} data-slot="dropdown-menu-label"
data-inset={inset}
className={cn( className={cn(
"px-2 py-1.5 text-sm font-semibold", "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
inset && "pl-8",
className, className,
)} )}
{...props} {...props}
/> />
); );
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; }
const DropdownMenuSeparator = ({ function DropdownMenuSeparator({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> & { }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
ref: React.RefObject< return (
React.ElementRef<typeof DropdownMenuPrimitive.Separator>
>;
}) => (
<DropdownMenuPrimitive.Separator <DropdownMenuPrimitive.Separator
ref={ref} data-slot="dropdown-menu-separator"
className={cn("-mx-1 my-1 h-px bg-muted", className)} className={cn("bg-border -mx-1 my-1 h-px", className)}
{...props} {...props}
/> />
); );
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; }
const DropdownMenuShortcut = ({ function DropdownMenuShortcut({
className, className,
...props ...props
}: React.HTMLAttributes<HTMLSpanElement>) => { }: React.ComponentProps<"span">) {
return ( return (
<span <span
className={cn("ml-auto text-xs tracking-widest opacity-60", className)} data-slot="dropdown-menu-shortcut"
className={cn(
"text-muted-foreground ml-auto text-xs tracking-widest",
className,
)}
{...props} {...props}
/> />
); );
}; }
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
function DropdownMenuSub({
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
}
function DropdownMenuSubTrigger({
className,
inset,
children,
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
inset?: boolean;
}) {
return (
<DropdownMenuPrimitive.SubTrigger
data-slot="dropdown-menu-sub-trigger"
data-inset={inset}
className={cn(
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8",
className,
)}
{...props}
>
{children}
<ChevronRightIcon className="ml-auto size-4" />
</DropdownMenuPrimitive.SubTrigger>
);
}
function DropdownMenuSubContent({
className,
...props
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
return (
<DropdownMenuPrimitive.SubContent
data-slot="dropdown-menu-sub-content"
className={cn(
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg",
className,
)}
{...props}
/>
);
}
export { export {
DropdownMenu, DropdownMenu,
DropdownMenuPortal,
DropdownMenuTrigger, DropdownMenuTrigger,
DropdownMenuContent, DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuItem, DropdownMenuItem,
DropdownMenuCheckboxItem, DropdownMenuCheckboxItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem, DropdownMenuRadioItem,
DropdownMenuLabel,
DropdownMenuSeparator, DropdownMenuSeparator,
DropdownMenuShortcut, DropdownMenuShortcut,
DropdownMenuGroup,
DropdownMenuPortal,
DropdownMenuSub, DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger, DropdownMenuSubTrigger,
DropdownMenuRadioGroup, DropdownMenuSubContent,
}; };

View File

@@ -2,29 +2,20 @@ import * as React from "react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
export interface InputProps function Input({ className, type, ...props }: React.ComponentProps<"input">) {
extends React.InputHTMLAttributes<HTMLInputElement> {}
const Input = ({
ref,
className,
type,
...props
}: InputProps & {
ref: React.RefObject<HTMLInputElement>;
}) => {
return ( return (
<input <input
type={type} type={type}
data-slot="input"
className={cn( className={cn(
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", "border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
className, className,
)} )}
ref={ref}
{...props} {...props}
/> />
); );
}; }
Input.displayName = "Input";
export { Input }; export { Input };

View File

@@ -1,20 +1,24 @@
"use client"; "use client";
import * as React from "react";
import * as LabelPrimitive from "@radix-ui/react-label"; import * as LabelPrimitive from "@radix-ui/react-label";
import { cva } from "class-variance-authority";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const labelVariants = cva( function Label({
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", className,
); ...props
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
const Label = ({ ref, className, ...props }) => ( return (
<LabelPrimitive.Root <LabelPrimitive.Root
ref={ref} data-slot="label"
className={cn(labelVariants(), className)} className={cn(
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
className,
)}
{...props} {...props}
/> />
); );
Label.displayName = LabelPrimitive.Root.displayName; }
export { Label }; export { Label };

View File

@@ -4,14 +4,14 @@ import { EyeIcon, EyeOffIcon } from "lucide-react";
import * as React from "react"; import * as React from "react";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Input, type InputProps } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const PasswordInput = ({ const PasswordInput = ({
ref, ref,
className, className,
...props ...props
}: InputProps & { }: any & {
ref: React.RefObject<HTMLInputElement>; ref: React.RefObject<HTMLInputElement>;
}) => { }) => {
const [showPassword, setShowPassword] = React.useState(false); const [showPassword, setShowPassword] = React.useState(false);

View File

@@ -5,34 +5,44 @@ import * as PopoverPrimitive from "@radix-ui/react-popover";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const Popover = PopoverPrimitive.Root; function Popover({
...props
}: React.ComponentProps<typeof PopoverPrimitive.Root>) {
return <PopoverPrimitive.Root data-slot="popover" {...props} />;
}
const PopoverTrigger = PopoverPrimitive.Trigger; function PopoverTrigger({
...props
}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {
return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
}
const PopoverAnchor = PopoverPrimitive.Anchor; function PopoverContent({
const PopoverContent = ({
ref,
className, className,
align = "center", align = "center",
sideOffset = 4, sideOffset = 4,
...props ...props
}: React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & { }: React.ComponentProps<typeof PopoverPrimitive.Content>) {
ref: React.RefObject<React.ElementRef<typeof PopoverPrimitive.Content>>; return (
}) => (
<PopoverPrimitive.Portal> <PopoverPrimitive.Portal>
<PopoverPrimitive.Content <PopoverPrimitive.Content
ref={ref} data-slot="popover-content"
align={align} align={align}
sideOffset={sideOffset} sideOffset={sideOffset}
className={cn( className={cn(
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden",
className, className,
)} )}
{...props} {...props}
/> />
</PopoverPrimitive.Portal> </PopoverPrimitive.Portal>
); );
PopoverContent.displayName = PopoverPrimitive.Content.displayName; }
function PopoverAnchor({
...props
}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {
return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />;
}
export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };

View File

@@ -1,50 +1,45 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { CheckIcon } from "@radix-ui/react-icons";
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"; import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
import { CircleIcon } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const RadioGroup = ({ function RadioGroup({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & { }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {
ref: React.RefObject<React.ElementRef<typeof RadioGroupPrimitive.Root>>;
}) => {
return ( return (
<RadioGroupPrimitive.Root <RadioGroupPrimitive.Root
className={cn("grid gap-2", className)} data-slot="radio-group"
className={cn("grid gap-3", className)}
{...props} {...props}
ref={ref}
/> />
); );
}; }
RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
const RadioGroupItem = ({ function RadioGroupItem({
ref,
className, className,
...props ...props
}: React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> & { }: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {
ref: React.RefObject<React.ElementRef<typeof RadioGroupPrimitive.Item>>;
}) => {
return ( return (
<RadioGroupPrimitive.Item <RadioGroupPrimitive.Item
ref={ref} data-slot="radio-group-item"
className={cn( className={cn(
"aspect-square h-4 w-4 rounded-full border border-primary text-primary shadow focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
className, className,
)} )}
{...props} {...props}
> >
<RadioGroupPrimitive.Indicator className="flex items-center justify-center"> <RadioGroupPrimitive.Indicator
<CheckIcon className="h-3.5 w-3.5 fill-primary" /> data-slot="radio-group-indicator"
className="relative flex items-center justify-center"
>
<CircleIcon className="fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" />
</RadioGroupPrimitive.Indicator> </RadioGroupPrimitive.Indicator>
</RadioGroupPrimitive.Item> </RadioGroupPrimitive.Item>
); );
}; }
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
export { RadioGroup, RadioGroupItem }; export { RadioGroup, RadioGroupItem };

View File

@@ -1,13 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import {
CaretSortIcon,
CheckIcon,
ChevronDownIcon,
ChevronUpIcon,
} from "@radix-ui/react-icons";
import * as SelectPrimitive from "@radix-ui/react-select"; import * as SelectPrimitive from "@radix-ui/react-select";
import { Check, ChevronDown, ChevronUp, ChevronsUpDown } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
@@ -17,37 +12,30 @@ const SelectGroup = SelectPrimitive.Group;
const SelectValue = SelectPrimitive.Value; const SelectValue = SelectPrimitive.Value;
const SelectTrigger = ({ const SelectTrigger = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.Trigger>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
children, >(({ className, children, ...props }, ref) => (
...props
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.Trigger>>;
}) => (
<SelectPrimitive.Trigger <SelectPrimitive.Trigger
ref={ref} ref={ref}
className={cn( className={cn(
"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
className, className,
)} )}
{...props} {...props}
> >
{children} {children}
<SelectPrimitive.Icon asChild> <SelectPrimitive.Icon asChild>
<CaretSortIcon className="h-4 w-4 opacity-50" /> <ChevronsUpDown className="size-4 opacity-50" />
</SelectPrimitive.Icon> </SelectPrimitive.Icon>
</SelectPrimitive.Trigger> </SelectPrimitive.Trigger>
); ));
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
const SelectScrollUpButton = ({ const SelectScrollUpButton = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
...props >(({ className, ...props }, ref) => (
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.ScrollUpButton>>;
}) => (
<SelectPrimitive.ScrollUpButton <SelectPrimitive.ScrollUpButton
ref={ref} ref={ref}
className={cn( className={cn(
@@ -56,20 +44,15 @@ const SelectScrollUpButton = ({
)} )}
{...props} {...props}
> >
<ChevronUpIcon /> <ChevronUp className="h-4 w-4" />
</SelectPrimitive.ScrollUpButton> </SelectPrimitive.ScrollUpButton>
); ));
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName; SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
const SelectScrollDownButton = ({ const SelectScrollDownButton = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
...props >(({ className, ...props }, ref) => (
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton> & {
ref: React.RefObject<
React.ElementRef<typeof SelectPrimitive.ScrollDownButton>
>;
}) => (
<SelectPrimitive.ScrollDownButton <SelectPrimitive.ScrollDownButton
ref={ref} ref={ref}
className={cn( className={cn(
@@ -78,21 +61,16 @@ const SelectScrollDownButton = ({
)} )}
{...props} {...props}
> >
<ChevronDownIcon /> <ChevronDown className="h-4 w-4" />
</SelectPrimitive.ScrollDownButton> </SelectPrimitive.ScrollDownButton>
); ));
SelectScrollDownButton.displayName = SelectScrollDownButton.displayName =
SelectPrimitive.ScrollDownButton.displayName; SelectPrimitive.ScrollDownButton.displayName;
const SelectContent = ({ const SelectContent = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.Content>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
children, >(({ className, children, position = "popper", ...props }, ref) => (
position = "popper",
...props
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.Content>>;
}) => (
<SelectPrimitive.Portal> <SelectPrimitive.Portal>
<SelectPrimitive.Content <SelectPrimitive.Content
ref={ref} ref={ref}
@@ -118,32 +96,25 @@ const SelectContent = ({
<SelectScrollDownButton /> <SelectScrollDownButton />
</SelectPrimitive.Content> </SelectPrimitive.Content>
</SelectPrimitive.Portal> </SelectPrimitive.Portal>
); ));
SelectContent.displayName = SelectPrimitive.Content.displayName; SelectContent.displayName = SelectPrimitive.Content.displayName;
const SelectLabel = ({ const SelectLabel = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.Label>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
...props >(({ className, ...props }, ref) => (
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.Label>>;
}) => (
<SelectPrimitive.Label <SelectPrimitive.Label
ref={ref} ref={ref}
className={cn("px-2 py-1.5 text-sm font-semibold", className)} className={cn("px-2 py-1.5 text-sm font-semibold", className)}
{...props} {...props}
/> />
); ));
SelectLabel.displayName = SelectPrimitive.Label.displayName; SelectLabel.displayName = SelectPrimitive.Label.displayName;
const SelectItem = ({ const SelectItem = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.Item>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
children, >(({ className, children, ...props }, ref) => (
...props
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.Item>>;
}) => (
<SelectPrimitive.Item <SelectPrimitive.Item
ref={ref} ref={ref}
className={cn( className={cn(
@@ -154,27 +125,24 @@ const SelectItem = ({
> >
<span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center"> <span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center">
<SelectPrimitive.ItemIndicator> <SelectPrimitive.ItemIndicator>
<CheckIcon className="h-4 w-4" /> <Check className="h-4 w-4" />
</SelectPrimitive.ItemIndicator> </SelectPrimitive.ItemIndicator>
</span> </span>
<SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText> <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
</SelectPrimitive.Item> </SelectPrimitive.Item>
); ));
SelectItem.displayName = SelectPrimitive.Item.displayName; SelectItem.displayName = SelectPrimitive.Item.displayName;
const SelectSeparator = ({ const SelectSeparator = React.forwardRef<
ref, React.ElementRef<typeof SelectPrimitive.Separator>,
className, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
...props >(({ className, ...props }, ref) => (
}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> & {
ref: React.RefObject<React.ElementRef<typeof SelectPrimitive.Separator>>;
}) => (
<SelectPrimitive.Separator <SelectPrimitive.Separator
ref={ref} ref={ref}
className={cn("-mx-1 my-1 h-px bg-muted", className)} className={cn("-mx-1 my-1 h-px bg-muted", className)}
{...props} {...props}
/> />
); ));
SelectSeparator.displayName = SelectPrimitive.Separator.displayName; SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
export { export {

View File

@@ -1,136 +1,108 @@
"use client";
import * as React from "react"; import * as React from "react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const Table = ({ function Table({ className, ...props }: React.ComponentProps<"table">) {
ref, return (
className, <div
...props data-slot="table-container"
}: React.HTMLAttributes<HTMLTableElement> & { className="relative w-full overflow-x-auto"
ref: React.RefObject<HTMLTableElement>; >
}) => (
<div className="relative w-full overflow-auto">
<table <table
ref={ref} data-slot="table"
className={cn("w-full caption-bottom text-sm", className)} className={cn("w-full caption-bottom text-sm", className)}
{...props} {...props}
/> />
</div> </div>
); );
Table.displayName = "Table"; }
const TableHeader = ({ function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
ref, return (
className, <thead
...props data-slot="table-header"
}: React.HTMLAttributes<HTMLTableSectionElement> & { className={cn("[&_tr]:border-b", className)}
ref: React.RefObject<HTMLTableSectionElement>; {...props}
}) => ( />
<thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
); );
TableHeader.displayName = "TableHeader"; }
const TableBody = ({ function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
ref, return (
className,
...props
}: React.HTMLAttributes<HTMLTableSectionElement> & {
ref: React.RefObject<HTMLTableSectionElement>;
}) => (
<tbody <tbody
ref={ref} data-slot="table-body"
className={cn("[&_tr:last-child]:border-0", className)} className={cn("[&_tr:last-child]:border-0", className)}
{...props} {...props}
/> />
); );
TableBody.displayName = "TableBody"; }
const TableFooter = ({ function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
ref, return (
className,
...props
}: React.HTMLAttributes<HTMLTableSectionElement> & {
ref: React.RefObject<HTMLTableSectionElement>;
}) => (
<tfoot <tfoot
ref={ref} data-slot="table-footer"
className={cn( className={cn(
"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
className, className,
)} )}
{...props} {...props}
/> />
); );
TableFooter.displayName = "TableFooter"; }
const TableRow = ({ function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
ref, return (
className,
...props
}: React.HTMLAttributes<HTMLTableRowElement> & {
ref: React.RefObject<HTMLTableRowElement>;
}) => (
<tr <tr
ref={ref} data-slot="table-row"
className={cn( className={cn(
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted", "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
className, className,
)} )}
{...props} {...props}
/> />
); );
TableRow.displayName = "TableRow"; }
const TableHead = ({ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
ref, return (
className,
...props
}: React.ThHTMLAttributes<HTMLTableCellElement> & {
ref: React.RefObject<HTMLTableCellElement>;
}) => (
<th <th
ref={ref} data-slot="table-head"
className={cn( className={cn(
"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", "text-muted-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
className, className,
)} )}
{...props} {...props}
/> />
); );
TableHead.displayName = "TableHead"; }
const TableCell = ({ function TableCell({ className, ...props }: React.ComponentProps<"td">) {
ref, return (
className,
...props
}: React.TdHTMLAttributes<HTMLTableCellElement> & {
ref: React.RefObject<HTMLTableCellElement>;
}) => (
<td <td
ref={ref} data-slot="table-cell"
className={cn( className={cn(
"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
className, className,
)} )}
{...props} {...props}
/> />
); );
TableCell.displayName = "TableCell"; }
const TableCaption = ({ function TableCaption({
ref,
className, className,
...props ...props
}: React.HTMLAttributes<HTMLTableCaptionElement> & { }: React.ComponentProps<"caption">) {
ref: React.RefObject<HTMLTableCaptionElement>; return (
}) => (
<caption <caption
ref={ref} data-slot="table-caption"
className={cn("mt-4 text-sm text-muted-foreground", className)} className={cn("text-muted-foreground mt-4 text-sm", className)}
{...props} {...props}
/> />
); );
TableCaption.displayName = "TableCaption"; }
export { export {
Table, Table,

View File

@@ -1,3 +1,4 @@
// @ts-nocheck
"use client"; "use client";
import * as React from "react"; import * as React from "react";

View File

@@ -5,30 +5,57 @@ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const TooltipProvider = TooltipPrimitive.Provider; function TooltipProvider({
delayDuration = 0,
const Tooltip = TooltipPrimitive.Root;
const TooltipTrigger = TooltipPrimitive.Trigger;
const TooltipContent = ({
ref,
className,
sideOffset = 4,
...props ...props
}: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & { }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
ref: React.RefObject<React.ElementRef<typeof TooltipPrimitive.Content>>; return (
}) => ( <TooltipPrimitive.Provider
<TooltipPrimitive.Content data-slot="tooltip-provider"
ref={ref} delayDuration={delayDuration}
sideOffset={sideOffset}
className={cn(
"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
{...props} {...props}
/> />
); );
TooltipContent.displayName = TooltipPrimitive.Content.displayName; }
function Tooltip({
...props
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
return (
<TooltipProvider>
<TooltipPrimitive.Root data-slot="tooltip" {...props} />
</TooltipProvider>
);
}
function TooltipTrigger({
...props
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
}
function TooltipContent({
className,
sideOffset = 0,
children,
...props
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
return (
<TooltipPrimitive.Portal>
<TooltipPrimitive.Content
data-slot="tooltip-content"
sideOffset={sideOffset}
className={cn(
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance",
className,
)}
{...props}
>
{children}
<TooltipPrimitive.Arrow className="-z-10 relative bg-primary dark:bg-stone-900 dark:fill-stone-900 fill-primary size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
</TooltipPrimitive.Content>
</TooltipPrimitive.Portal>
);
}
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }; export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };

View File

@@ -27,7 +27,7 @@ export function Wrapper(props: { children: React.ReactNode }) {
const queryClient = new QueryClient(); const queryClient = new QueryClient();
export function WrapperWithQuery(props: { children: React.ReactNode }) { export function WrapperWithQuery(props: { children: React.ReactNode | any }) {
return ( return (
<QueryClientProvider client={queryClient}> <QueryClientProvider client={queryClient}>
{props.children} {props.children}

View File

@@ -156,6 +156,7 @@ function toast({ ...props }: Toast) {
...props, ...props,
id, id,
open: true, open: true,
// @ts-ignore
onOpenChange: (open) => { onOpenChange: (open) => {
if (!open) dismiss(); if (!open) dismiss();
}, },

View File

@@ -104,6 +104,9 @@
"tailwindcss": "3.4.16", "tailwindcss": "3.4.16",
"typescript": "^5.7.2" "typescript": "^5.7.2"
}, },
"resolutions": {
"@types/react": "^19.0.0"
},
"overrides": { "overrides": {
"whatwg-url": "^14.0.0" "whatwg-url": "^14.0.0"
} }

View File

@@ -23,5 +23,5 @@
} }
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules", "components/ui/**/*.tsx"]
} }

24799
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff