From ea0f65a02b67174df1cc07e1f9769e8154bec0be Mon Sep 17 00:00:00 2001 From: Shinwoo PARK Date: Sun, 10 May 2026 10:25:34 +0900 Subject: [PATCH] fix: include tracked ui components for CI --- .gitignore | 1 - apps/web/src/App.tsx | 2 +- apps/web/src/components/ui/badge.tsx | 14 +++++ apps/web/src/components/ui/button.tsx | 45 ++++++++++++++++ apps/web/src/components/ui/card.tsx | 30 +++++++++++ apps/web/src/components/ui/dialog.tsx | 66 ++++++++++++++++++++++++ apps/web/src/components/ui/input.tsx | 19 +++++++ apps/web/src/components/ui/label.tsx | 10 ++++ apps/web/src/components/ui/progress.tsx | 28 ++++++++++ apps/web/src/components/ui/separator.tsx | 24 +++++++++ apps/web/src/components/ui/tabs.tsx | 43 +++++++++++++++ 11 files changed, 280 insertions(+), 2 deletions(-) create mode 100644 apps/web/src/components/ui/badge.tsx create mode 100644 apps/web/src/components/ui/button.tsx create mode 100644 apps/web/src/components/ui/card.tsx create mode 100644 apps/web/src/components/ui/dialog.tsx create mode 100644 apps/web/src/components/ui/input.tsx create mode 100644 apps/web/src/components/ui/label.tsx create mode 100644 apps/web/src/components/ui/progress.tsx create mode 100644 apps/web/src/components/ui/separator.tsx create mode 100644 apps/web/src/components/ui/tabs.tsx diff --git a/.gitignore b/.gitignore index ccb709f..0f3dbb0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,3 @@ apps/api/prisma/dev.db-journal apps/api/prisma/dev.db-shm apps/api/prisma/dev.db-wal apps/web/components.json -apps/web/src/components/ui diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index 6b9708d..273dfe0 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -384,7 +384,7 @@ function ConnectAccountDialog() { return ( { + onOpenChange={(next: boolean) => { setOpen(next); if (!next && isPendingAttempt && attemptId) { cancelMutation.mutate(attemptId); diff --git a/apps/web/src/components/ui/badge.tsx b/apps/web/src/components/ui/badge.tsx new file mode 100644 index 0000000..4e68665 --- /dev/null +++ b/apps/web/src/components/ui/badge.tsx @@ -0,0 +1,14 @@ +import type { HTMLAttributes } from 'react'; +import { cn } from '@/lib/utils'; + +export function Badge({ className, ...props }: HTMLAttributes) { + return ( +
+ ); +} diff --git a/apps/web/src/components/ui/button.tsx b/apps/web/src/components/ui/button.tsx new file mode 100644 index 0000000..c71ccb4 --- /dev/null +++ b/apps/web/src/components/ui/button.tsx @@ -0,0 +1,45 @@ +/* eslint-disable react-refresh/only-export-components */ +import * as React from 'react'; +import { cva, type VariantProps } from 'class-variance-authority'; +import { Slot } from '@radix-ui/react-slot'; +import { cn } from '@/lib/utils'; + +const buttonVariants = cva( + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 outline-none focus-visible:ring-2 focus-visible:ring-sky-400/70 h-10 px-4 py-2', + { + variants: { + variant: { + default: 'bg-sky-500 text-white shadow-lg shadow-sky-500/20 hover:bg-sky-400', + secondary: 'bg-white/10 text-slate-100 hover:bg-white/15', + ghost: 'text-slate-300 hover:bg-white/8 hover:text-white', + destructive: 'bg-rose-500 text-white hover:bg-rose-400', + outline: 'border border-white/10 bg-white/5 text-slate-100 hover:bg-white/10', + }, + size: { + default: 'h-10 px-4 py-2', + sm: 'h-9 rounded-lg px-3', + lg: 'h-11 rounded-xl px-5', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : 'button'; + return ; + }, +); +Button.displayName = 'Button'; + +export { Button, buttonVariants }; diff --git a/apps/web/src/components/ui/card.tsx b/apps/web/src/components/ui/card.tsx new file mode 100644 index 0000000..da50224 --- /dev/null +++ b/apps/web/src/components/ui/card.tsx @@ -0,0 +1,30 @@ +import type { HTMLAttributes } from 'react'; +import { cn } from '@/lib/utils'; + +export function Card({ className, ...props }: HTMLAttributes) { + return ( +
+ ); +} + +export function CardHeader({ className, ...props }: HTMLAttributes) { + return
; +} + +export function CardTitle({ className, ...props }: HTMLAttributes) { + return

; +} + +export function CardDescription({ className, ...props }: HTMLAttributes) { + return

; +} + +export function CardContent({ className, ...props }: HTMLAttributes) { + return

; +} diff --git a/apps/web/src/components/ui/dialog.tsx b/apps/web/src/components/ui/dialog.tsx new file mode 100644 index 0000000..30dc3d0 --- /dev/null +++ b/apps/web/src/components/ui/dialog.tsx @@ -0,0 +1,66 @@ +import * as React from 'react'; +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { X } from 'lucide-react'; +import { cn } from '@/lib/utils'; + +const Dialog = DialogPrimitive.Root; +const DialogTrigger = DialogPrimitive.Trigger; +const DialogPortal = DialogPrimitive.Portal; +const DialogClose = DialogPrimitive.Close; + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + + + +)); + +function DialogHeader({ className, ...props }: React.HTMLAttributes) { + return
; +} + +function DialogTitle({ className, ...props }: React.HTMLAttributes) { + return

; +} + +function DialogDescription({ className, ...props }: React.HTMLAttributes) { + return

; +} + +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; +DialogContent.displayName = DialogPrimitive.Content.displayName; + +export { + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogTitle, + DialogDescription, +}; diff --git a/apps/web/src/components/ui/input.tsx b/apps/web/src/components/ui/input.tsx new file mode 100644 index 0000000..7398995 --- /dev/null +++ b/apps/web/src/components/ui/input.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; +import { cn } from '@/lib/utils'; + +const Input = React.forwardRef>(({ className, ...props }, ref) => { + return ( + + ); +}); + +Input.displayName = 'Input'; + +export { Input }; diff --git a/apps/web/src/components/ui/label.tsx b/apps/web/src/components/ui/label.tsx new file mode 100644 index 0000000..ecb95c2 --- /dev/null +++ b/apps/web/src/components/ui/label.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { cn } from '@/lib/utils'; + +const Label = React.forwardRef>(({ className, ...props }, ref) => { + return