@3w-witim/ui 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +23 -1
- package/dist/index.d.ts +23 -1
- package/dist/index.js +177 -131
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +175 -131
- package/dist/index.mjs.map +1 -1
- package/dist/tailwind-preset.cjs +0 -0
- package/dist/tokens.css +0 -0
- package/package.json +44 -36
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/button.tsx","../src/input.tsx","../src/textarea.tsx","../src/card.tsx","../src/scroll-area.tsx","../src/label.tsx","../src/skeleton.tsx","../src/progress.tsx","../src/checkbox.tsx","../src/radio.tsx","../src/toggle.tsx","../src/chip.tsx","../src/alert.tsx","../src/presence.tsx","../src/avatar.tsx","../src/tooltip.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/dialog.tsx","../src/sheet.tsx","../src/tabs.tsx","../src/table.tsx","../src/pagination.tsx","../src/segment.tsx","../src/toast.tsx","../src/empty-state.tsx","../src/icons/_base.tsx","../src/icons/check.tsx","../src/icons/chevron-down.tsx","../src/icons/chevron-left.tsx","../src/icons/chevron-right.tsx","../src/icons/hash.tsx","../src/icons/lock.tsx","../src/icons/pin.tsx","../src/icons/plus.tsx","../src/icons/search.tsx","../src/icons/x.tsx","../src/accordion.tsx","../src/charts.tsx","../src/command-palette.tsx","../src/avatar-presence.tsx","../src/navigation.tsx","../src/list.tsx","../src/success.tsx","../src/separator.tsx","../src/popover.tsx","../src/field.tsx","../src/search-field.tsx","../src/banner.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","jsxs","React3","React4","React5","ScrollAreaPrimitive","React6","React7","React8","React9","React10","React11","CheckIcon","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","React23","CloseIcon","React24","ChevronLeftIcon","ChevronRightIcon","React25","React26","React27","React28","React29","kind","id","rest","React30","React31","React32","React33","React34","React35","React36"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Class name utility (clsx + tailwind-merge)\n */\n\nimport { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n// 정본(comp-button): radius 4(xs) · gap 8 · font 16(button2) · icon 20 · border 1px.\n// 사이즈는 height·padding-x만 차등(font/icon/radius 전 사이즈 공통). focus 링=border-focus.\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-base font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-5 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n primary:\n \"bg-brand-solid text-text-on-brand hover:bg-brand-solid-hover active:bg-brand-solid-pressed\",\n neutral:\n \"border border-border-default bg-surface-default text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n ghost:\n \"text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n danger:\n \"bg-danger-solid text-text-on-brand hover:bg-danger-solid-hover\",\n \"danger-outline\":\n \"border border-danger-border bg-transparent text-danger-text hover:bg-danger-subtle active:bg-danger-subtle\",\n },\n size: {\n sm: \"h-9 px-3\", // 36px · px 12\n md: \"h-10 px-4\", // 40px · px 16 (기본)\n lg: \"h-12 px-5\", // 48px · px 20\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst inputVariants = cva(\n \"flex w-full items-center rounded border bg-surface-default text-text-default transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-text-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:placeholder:text-text-disabled\",\n {\n variants: {\n state: {\n default:\n \"border-border-default hover:border-border-strong focus-visible:border-border-focus focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:border-danger-border focus-visible:ring-danger-border\",\n },\n inputSize: {\n sm: \"h-9 gap-1.5 px-2.5 text-sm\",\n md: \"h-10 gap-2 px-3 text-base\",\n lg: \"h-12 gap-2.5 px-3.5 text-base\",\n },\n },\n defaultVariants: {\n state: \"default\",\n inputSize: \"md\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof inputVariants> {\n /** Presentational leading icon (e.g. search). Rendered inside the field. */\n startIcon?: React.ReactNode\n /** Presentational trailing icon or affix. */\n endIcon?: React.ReactNode\n /** Helper / error text rendered below the field. */\n helperText?: React.ReactNode\n}\n\n/**\n * Presentation-only input. Wraps the native <input> so leading/trailing icons\n * and helper text render with the field. Error state pairs colour with a\n * status icon + helper text for non-colour accessibility.\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type = \"text\",\n state,\n inputSize,\n startIcon,\n endIcon,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedby,\n ...props\n },\n ref\n ) => {\n const isError = state === \"error\"\n const reactId = React.useId()\n const helperId = helperText ? `${id ?? reactId}-helper` : undefined\n const describedBy =\n [ariaDescribedby, helperId].filter(Boolean).join(\" \") || undefined\n\n return (\n <div className=\"flex w-full flex-col gap-1.5\">\n <div\n className={cn(\n inputVariants({ state, inputSize }),\n (startIcon || endIcon) && \"cursor-text\",\n className\n )}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {startIcon}\n </span>\n ) : null}\n <input\n id={id ?? reactId}\n type={type}\n ref={ref}\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n className=\"h-full w-full min-w-0 bg-transparent outline-none placeholder:text-text-subtle disabled:cursor-not-allowed disabled:text-text-disabled\"\n {...props}\n />\n {endIcon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {endIcon}\n </span>\n ) : null}\n </div>\n {helperText ? (\n <p\n id={helperId}\n className={cn(\n \"flex items-center gap-1 text-sm [&_svg]:size-4\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {isError ? (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"shrink-0\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm-.75-11.5a.75.75 0 0 1 1.5 0v4a.75.75 0 0 1-1.5 0v-4ZM10 14.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : null}\n {helperText}\n </p>\n ) : null}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst textareaVariants = cva(\n \"flex w-full resize-none rounded border bg-surface-default text-base text-text-default transition-colors placeholder:text-text-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n state: {\n default:\n \"border-border-default focus-visible:border-border-focus focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:border-danger-border focus-visible:ring-danger-border\",\n },\n size: {\n sm: \"min-h-[64px] p-2 text-sm\",\n md: \"min-h-[80px] p-3 text-base\",\n lg: \"min-h-[120px] p-4 text-base\",\n },\n },\n defaultVariants: {\n state: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface TextareaProps\n extends Omit<React.ComponentProps<\"textarea\">, \"size\">,\n VariantProps<typeof textareaVariants> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, state, size, \"aria-invalid\": ariaInvalid, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n aria-invalid={ariaInvalid ?? (state === \"error\" ? true : undefined)}\n className={cn(textareaVariants({ state, size, className }))}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea, textareaVariants }\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst cardVariants = cva(\"rounded-lg text-text-default transition-colors\", {\n variants: {\n variant: {\n default: \"border border-border-subtle bg-surface-default shadow-card\",\n raised: \"border border-border-subtle bg-surface-raised shadow-md\",\n outline: \"border border-border-default bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, className }))}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-3 p-5\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"font-semibold leading-none tracking-tight text-text-strong\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-text-subtle\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-5 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-3 p-5 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n cardVariants,\n};\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"./utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-slate-300 hover:bg-slate-400\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst labelVariants = cva(\n \"inline-flex items-center justify-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap [&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n brand: \"bg-brand-subtle text-brand-text\",\n danger: \"bg-danger-subtle text-danger-text\",\n neutral:\n \"bg-[var(--comp-label-neutral-bg)] text-[var(--comp-label-neutral-text)]\",\n },\n },\n defaultVariants: {\n variant: \"neutral\",\n },\n },\n);\n\nexport interface LabelProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof labelVariants> {}\n\nconst Label = React.forwardRef<HTMLSpanElement, LabelProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(labelVariants({ variant, className }))}\n {...props}\n />\n );\n },\n);\nLabel.displayName = \"Label\";\n\nexport { Label, labelVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst skeletonVariants = cva(\"animate-pulse bg-border-subtle\", {\n variants: {\n variant: {\n text: \"rounded-lg h-4 w-full\",\n circle: \"rounded-full\",\n rect: \"rounded-lg\",\n },\n },\n defaultVariants: {\n variant: \"rect\",\n },\n});\n\nexport interface SkeletonProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonVariants> {}\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n aria-label=\"로딩 중\"\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n >\n <span className=\"sr-only\">로딩 중</span>\n </div>\n );\n },\n);\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton, skeletonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst progressTrackVariants = cva(\n \"relative w-full overflow-hidden rounded-full bg-border-subtle\",\n {\n variants: {\n size: {\n md: \"h-1.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst progressFillVariants = cva(\n \"h-full rounded-full bg-brand-solid transition-[width] duration-300 ease-out\",\n {\n variants: {\n indeterminate: {\n true: \"w-full animate-pulse rounded-full\",\n false: \"\",\n },\n },\n defaultVariants: {\n indeterminate: false,\n },\n },\n);\n\nexport interface ProgressProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof progressTrackVariants> {\n /** Progress value between 0 and 100. Ignored when `indeterminate` is true. */\n value?: number;\n /** Shows an ongoing, unquantified progress animation. */\n indeterminate?: boolean;\n /** Accessible label describing what is loading. */\n label?: string;\n}\n\nfunction clamp(value: number) {\n if (Number.isNaN(value)) return 0;\n return Math.min(100, Math.max(0, value));\n}\n\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n size,\n value = 0,\n indeterminate = false,\n label = \"Loading\",\n ...props\n },\n ref,\n ) => {\n const pct = clamp(value);\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : 100}\n aria-valuenow={indeterminate ? undefined : pct}\n aria-valuetext={indeterminate ? \"Loading\" : `${pct}%`}\n className={cn(progressTrackVariants({ size, className }))}\n {...props}\n >\n <div\n className={cn(progressFillVariants({ indeterminate }))}\n style={indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\nexport { Progress, progressTrackVariants, progressFillVariants };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Checkbox — 20px box, radius xs(4px), 2px border, 12px check icon.\n * off = border-border-strong / bg-surface-default\n * on = bg-brand-solid + text-text-on-brand check\n * error= border-danger-border\n *\n * Native input[type=checkbox]를 sr-only로 두고 span 박스를 시각 스타일링한다.\n * 제어(checked) / 비제어(defaultChecked) 모두 지원하는 프리젠테이션 구현.\n */\nconst checkboxVariants = cva(\n \"relative flex size-5 shrink-0 items-center justify-center rounded border-2 transition-colors peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-base peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n {\n variants: {\n state: {\n default:\n \"border-border-strong bg-surface-default peer-focus-visible:ring-border-focus peer-checked:border-brand-solid peer-checked:bg-brand-solid\",\n error:\n \"border-danger-border bg-surface-default peer-focus-visible:ring-danger-solid peer-checked:border-danger-border peer-checked:bg-danger-solid\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\ntype CheckboxVariantProps = VariantProps<typeof checkboxVariants>\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n CheckboxVariantProps {\n /** 우측에 표시할 라벨 (문자열/노드 모두 허용) */\n label?: React.ReactNode\n /** 에러 상태 (state=\"error\"와 동일, 편의용) */\n error?: boolean\n}\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-3\", className)}\n >\n <path\n d=\"M2.5 6.2 5 8.7l4.5-5\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { className, state, error, label, id, disabled, \"aria-invalid\": ariaInvalid, ...props },\n ref\n ) => {\n const reactId = React.useId()\n const inputId = id ?? reactId\n const resolvedState = error ? \"error\" : state ?? \"default\"\n const isInvalid = resolvedState === \"error\"\n\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"group inline-flex items-start gap-2 text-sm text-text-default\",\n disabled\n ? \"cursor-not-allowed text-text-disabled\"\n : \"cursor-pointer\"\n )}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n disabled={disabled}\n aria-invalid={ariaInvalid ?? (isInvalid || undefined)}\n className=\"peer sr-only\"\n {...props}\n />\n <span\n className={cn(\n checkboxVariants({ state: resolvedState }),\n // 여러 줄 라벨에서 첫 줄 글자와 광학적으로 맞추기 위한 미세 보정(2px)\n \"mt-0.5 peer-checked:[&>svg]:opacity-100\",\n className\n )}\n >\n <CheckIcon className=\"text-text-on-brand opacity-0 transition-opacity\" />\n </span>\n {label != null && <span className=\"select-none\">{label}</span>}\n </label>\n )\n }\n)\nCheckbox.displayName = \"Checkbox\"\n\nexport { Checkbox, checkboxVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* RadioGroup */\n/* -------------------------------------------------------------------------- */\n\ninterface RadioGroupContextValue {\n name?: string\n value?: string\n onValueChange?: (value: string) => void\n disabled?: boolean\n error?: boolean\n}\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n null\n)\n\nexport interface RadioGroupProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** name shared by all radios in the group */\n name?: string\n /** controlled selected value */\n value?: string\n /** uncontrolled default selected value */\n defaultValue?: string\n onValueChange?: (value: string) => void\n /** disables every radio in the group */\n disabled?: boolean\n /** renders every radio in the error state */\n error?: boolean\n}\n\nconst RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n name,\n value,\n defaultValue,\n onValueChange,\n disabled,\n error,\n children,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : internalValue\n\n const handleValueChange = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange]\n )\n\n const ctx = React.useMemo<RadioGroupContextValue>(\n () => ({\n name,\n value: currentValue,\n onValueChange: handleValueChange,\n disabled,\n error,\n }),\n [name, currentValue, handleValueChange, disabled, error]\n )\n\n return (\n <RadioGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-invalid={error || undefined}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n )\n }\n)\nRadioGroup.displayName = \"RadioGroup\"\n\n/* -------------------------------------------------------------------------- */\n/* Radio */\n/* -------------------------------------------------------------------------- */\n\nconst radioVariants = cva(\n \"relative grid h-5 w-5 shrink-0 place-items-center rounded-full border-2 bg-surface-default transition-colors peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-base disabled:cursor-not-allowed\",\n {\n variants: {\n state: {\n default:\n \"border-border-strong peer-focus-visible:ring-border-focus peer-checked:border-brand-border\",\n error:\n \"border-danger-border peer-focus-visible:ring-danger-solid peer-checked:border-danger-border\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\nconst radioDotVariants = cva(\n \"h-2 w-2 rounded-full scale-0 transition-transform peer-checked:scale-100\",\n {\n variants: {\n state: {\n default: \"bg-brand-solid\",\n error: \"bg-danger-solid\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\nexport interface RadioProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\"\n >,\n VariantProps<typeof radioVariants> {\n /** required option value */\n value: string\n /** visible label rendered next to the control */\n label?: React.ReactNode\n /** optional helper/description text under the label */\n description?: React.ReactNode\n /** force error styling on this single radio */\n error?: boolean\n onValueChange?: (value: string) => void\n}\n\nconst Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n id,\n value,\n label,\n description,\n name: nameProp,\n checked: checkedProp,\n disabled: disabledProp,\n error: errorProp,\n onValueChange,\n onChange,\n onClick,\n ...props\n },\n ref\n ) => {\n const group = React.useContext(RadioGroupContext)\n const reactId = React.useId()\n const inputId = id ?? reactId\n\n const isGroup = group != null\n const isControlled = checkedProp !== undefined\n\n // 단독(그룹 아님·checked 미지정) 라디오의 uncontrolled 상태\n const [internalChecked, setInternalChecked] = React.useState(false)\n\n const name = nameProp ?? group?.name\n const disabled = disabledProp ?? group?.disabled ?? false\n const error = errorProp ?? group?.error ?? false\n const checked = isControlled\n ? checkedProp\n : isGroup\n ? group.value === value\n : internalChecked\n\n const state = error ? \"error\" : \"default\"\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (event.target.checked) {\n onValueChange?.(value)\n group?.onValueChange?.(value)\n }\n }\n\n // 단독 라디오는 이미 선택된 상태에서 다시 클릭하면 해제(토글)한다.\n // 네이티브 라디오는 재클릭 시 change 이벤트가 없으므로 click 에서 처리.\n const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event)\n if (!isControlled && !isGroup) {\n setInternalChecked((prev) => !prev)\n }\n }\n\n const control = (\n <span className=\"relative inline-flex\">\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n aria-invalid={error || undefined}\n onChange={handleChange}\n onClick={handleClick}\n className=\"peer sr-only\"\n {...props}\n />\n {/* 테두리 링 — input의 형제라 peer-checked 로 색이 바뀐다 */}\n <span\n aria-hidden=\"true\"\n className={cn(\n radioVariants({ state }),\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"\n )}\n />\n {/* 가운데 점 — input의 형제여야 peer-checked:scale-100 이 닿는다.\n 링 위에 절대 위치로 중앙 정렬 */}\n <span\n aria-hidden=\"true\"\n className={cn(\n radioDotVariants({ state }),\n \"pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\",\n disabled && \"opacity-50\"\n )}\n />\n </span>\n )\n\n if (!label && !description) {\n return control\n }\n\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"flex items-start gap-2\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n className\n )}\n >\n {control}\n <span className=\"flex flex-col gap-0.5\">\n {label ? (\n <span\n className={cn(\n \"text-sm leading-5\",\n disabled ? \"text-text-disabled\" : \"text-text-default\"\n )}\n >\n {label}\n </span>\n ) : null}\n {description ? (\n <span\n className={cn(\n \"text-xs leading-4\",\n error ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {description}\n </span>\n ) : null}\n </span>\n </label>\n )\n }\n)\nRadio.displayName = \"Radio\"\n\nexport { Radio, RadioGroup, radioVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst toggleTrackVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer items-center rounded-full p-0.5 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:opacity-50 data-[state=off]:bg-surface-sunken data-[state=on]:bg-brand-solid\",\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nconst toggleThumbVariants = cva(\n \"pointer-events-none block rounded-full bg-surface-default shadow-sm transition-transform data-[state=off]:translate-x-0\",\n {\n variants: {\n size: {\n sm: \"h-4 w-4 data-[state=on]:translate-x-4\",\n md: \"h-5 w-5 data-[state=on]:translate-x-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport interface ToggleProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\" | \"type\"\n >,\n VariantProps<typeof toggleTrackVariants> {\n /** Controlled on/off state. */\n checked?: boolean\n /** Uncontrolled initial state. */\n defaultChecked?: boolean\n /** Fired with the next boolean state when toggled. */\n onCheckedChange?: (checked: boolean) => void\n}\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n size,\n checked,\n defaultChecked = false,\n onCheckedChange,\n disabled,\n onClick,\n ...props\n },\n ref\n ) => {\n const isControlled = checked !== undefined\n const [internalChecked, setInternalChecked] =\n React.useState(defaultChecked)\n const isOn = isControlled ? checked : internalChecked\n const state = isOn ? \"on\" : \"off\"\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (event.defaultPrevented || disabled) return\n const next = !isOn\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n data-state={state}\n disabled={disabled}\n onClick={handleClick}\n className={cn(toggleTrackVariants({ size, className }))}\n {...props}\n >\n <span data-state={state} className={cn(toggleThumbVariants({ size }))} />\n </button>\n )\n }\n)\nToggle.displayName = \"Toggle\"\n\nexport { Toggle, toggleTrackVariants, toggleThumbVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst chipVariants = cva(\n \"inline-flex h-8 items-center gap-1 rounded border px-3 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"border-border-default bg-surface-default text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n selected:\n \"border-brand-border bg-brand-subtle text-brand-text font-bold hover:bg-brand-subtle active:bg-brand-subtle\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst CheckIcon = () => (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M13 4.5 6.5 11.5 3 8\" />\n </svg>\n)\n\nconst CloseIcon = () => (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 4l8 8M12 4l-8 8\" />\n </svg>\n)\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof chipVariants> {\n /** Show a leading check icon when the chip is selected. */\n showSelectedIcon?: boolean\n /** Render a trailing remove (x) affordance. */\n removable?: boolean\n /** Called when the remove affordance is activated. */\n onRemove?: () => void\n /** Accessible label for the remove control. */\n removeLabel?: string\n}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(\n (\n {\n className,\n variant,\n showSelectedIcon = false,\n removable = false,\n onRemove,\n removeLabel = \"Remove\",\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n return (\n <button\n type=\"button\"\n ref={ref}\n disabled={disabled}\n aria-pressed={variant === \"selected\"}\n className={cn(chipVariants({ variant }), removable && \"pr-2\", className)}\n {...props}\n >\n {showSelectedIcon && variant === \"selected\" ? <CheckIcon /> : null}\n <span className=\"truncate\">{children}</span>\n {removable ? (\n <span\n role=\"button\"\n aria-label={removeLabel}\n tabIndex={disabled ? -1 : 0}\n onClick={(e) => {\n e.stopPropagation()\n if (!disabled) onRemove?.()\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) onRemove?.()\n }\n }}\n className=\"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-full text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\"\n >\n <CloseIcon />\n </span>\n ) : null}\n </button>\n )\n }\n)\nChip.displayName = \"Chip\"\n\nexport { Chip, chipVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst alertVariants = cva(\n \"relative flex gap-3 rounded-lg border p-3 [&>svg]:size-5 [&>svg]:shrink-0 [&>svg]:mt-0.5\",\n {\n variants: {\n variant: {\n info: \"bg-surface-sunken border-border-default text-text-default [&>svg]:text-text-subtle\",\n danger:\n \"bg-danger-subtle border-danger-border text-danger-text [&>svg]:text-danger-text\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n)\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, role = \"alert\", ...props }, ref) => (\n <div\n ref={ref}\n role={role}\n className={cn(alertVariants({ variant, className }))}\n {...props}\n />\n )\n)\nAlert.displayName = \"Alert\"\n\nexport type AlertTitleProps = React.HTMLAttributes<HTMLParagraphElement>\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, AlertTitleProps>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-sm font-semibold leading-5 text-text-strong\",\n className\n )}\n {...props}\n />\n )\n)\nAlertTitle.displayName = \"AlertTitle\"\n\nexport type AlertDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n AlertDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"mt-1 text-sm leading-5 [&_p]:leading-5\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants }\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport type PresenceStatus = \"online\" | \"away\" | \"offline\" | \"remote\";\nexport type PresenceSize = \"sm\" | \"md\" | \"lg\";\n\nconst SIZE_PX: Record<PresenceSize, number> = { sm: 12, md: 16, lg: 20 };\n\nexport const PRESENCE_LABEL: Record<PresenceStatus, string> = {\n online: \"온라인\",\n away: \"자리비움\",\n offline: \"오프라인\",\n remote: \"재택\",\n};\n\n// 재택(remote) 마크 — 집. fill(채움) 아이콘. currentColor 상속.\nfunction HouseMark({ px }: { px: number }) {\n const s = Math.round(px * 0.64);\n return (\n <svg\n width={s}\n height={s}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden\n >\n <path d=\"M12 3 4 9v12h5v-7h6v7h5V9z\" />\n </svg>\n );\n}\n\nexport interface PresenceProps extends React.HTMLAttributes<HTMLSpanElement> {\n status?: PresenceStatus;\n size?: PresenceSize;\n}\n\n// 상태를 색이 아니라 \"형태/마크\"로도 구분(색 의존 최소). 색은 인디고·모노톤만.\nexport function Presence({\n status = \"online\",\n size = \"md\",\n className,\n ...props\n}: PresenceProps) {\n const px = SIZE_PX[size];\n const label = PRESENCE_LABEL[status];\n\n const base =\n \"inline-flex shrink-0 items-center justify-center rounded-full font-extrabold leading-none\";\n\n // 가이드 매핑: online/remote=인디고 · away=연회색 dot+어두운 Z · offline=회색 채움(hollow 아님).\n // 오프라인 \"흐림\"은 dot이 아니라 아바타에 적용(OnAvatar 참고).\n // presence-* 전용 토큰(tokens.css): away bg 라이트=gray-50·다크=gray-30, away fg 라이트=white·다크=gray-90,\n // offline=gray-40 양 테마 동일 — 상태 표시 색은 시맨틱 수렴 없이 원 값 보존.\n const STATUS_STYLE: Record<PresenceStatus, string> = {\n online: \"bg-brand-solid text-text-on-brand\",\n away: \"bg-presence-away-bg text-presence-away-fg\",\n offline: \"bg-presence-offline\",\n remote: \"bg-brand-solid text-text-on-brand\",\n };\n\n return (\n <span\n role=\"img\"\n aria-label={label}\n title={label}\n className={cn(base, STATUS_STYLE[status], className)}\n style={{ width: px, height: px, fontSize: Math.round(px * 0.58) }}\n {...props}\n >\n {status === \"away\" && \"Z\"}\n {status === \"remote\" && <HouseMark px={px} />}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Presence, type PresenceStatus } from \"./presence\";\n\n/**\n * Avatar — 프로필 미설정 시 WITIM 마스코트 기본 이미지(이니셜 미사용).\n * presence 표시는 공용 Presence 컴포넌트를 그대로 사용(온라인/자리비움 Z/재택 집/오프라인).\n */\n\n/* -------------------------------------------------------------------------- */\n/* Avatar root */\n/* -------------------------------------------------------------------------- */\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-surface-sunken align-middle ring-2 ring-border-subtle select-none\",\n {\n variants: {\n size: {\n xs: \"h-6 w-6 text-[10px]\", // 24px\n sm: \"h-8 w-8 text-sm\", // 32px · font14 기본\n md: \"h-10 w-10 text-base\", // 40px\n lg: \"h-12 w-12 text-lg\", // 48px\n xl: \"h-16 w-16 text-2xl\", // 64px\n },\n },\n defaultVariants: {\n size: \"sm\",\n },\n },\n);\n\ntype AvatarSize = NonNullable<VariantProps<typeof avatarVariants>[\"size\"]>;\n\n// presence는 공용 Presence 컴포넌트 스펙을 그대로 따름(online/away/offline/remote).\ntype AvatarPresence = PresenceStatus;\n\nexport interface AvatarProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n /** 이미지 소스. 없거나 로드 실패 시 마스코트 기본 이미지 렌더(이니셜 미사용) */\n src?: string;\n /** 대체 텍스트 및 마스코트 색 배정 시드가 되는 이름 */\n alt?: string;\n /** 마스코트 색 — 사용자가 직접 선택(6색 동등). 미지정 시 이름 기반 기본값. */\n color?: AvatarColor;\n /** presence 상태 badge — 공용 Presence 컴포넌트로 렌더(자리비움 Z · 재택 집 · 오프라인 흐림) */\n presence?: AvatarPresence;\n}\n\n/** 아바타 사이즈 → Presence badge 사이즈(sm 12 / md 16 / lg 20px) 대응 */\nconst presenceSizeForAvatar: Record<AvatarSize, \"sm\" | \"md\" | \"lg\"> = {\n xs: \"sm\",\n sm: \"sm\",\n md: \"md\",\n lg: \"md\",\n xl: \"lg\",\n};\n\n/* -------------------------------------------------------------------------- */\n/* Mascot — 프로필 미설정 시 기본 이미지 (WITIM Design Guide) */\n/* 이름/ID 해시로 마스코트 색을 배정 → 같은 사람 = 항상 같은 색, 사진 없어도 구분. */\n/* 색은 avatar 전용 장식(semantic 토큰 아님) — 마스코트 SVG 자산에 내장돼 자연 격리됨. */\n/* -------------------------------------------------------------------------- */\n\n/** 마스코트 색 — 6색 모두 동등한 위계. 사용자가 직접 선택하고 이후 변경 가능. */\nexport type AvatarColor =\n | \"gray\"\n | \"lavender\"\n | \"mint\"\n | \"peach\"\n | \"pink\"\n | \"sky\";\n\n// Vite 전용 import.meta.glob — 직접 호출 형태를 유지해야 Vite가 빌드타임에 변환함\n// (WITIM 앱=Vite는 마스코트 로드). tsup/비-Vite 빌드에선 undefined() 호출로 바뀌어\n// throw → catch로 빈 객체 폴백 → 공개 패키지 소비자는 색/이니셜 아바타로 동작.\nlet MASCOTS: Record<string, string> = {};\ntry {\n MASCOTS = import.meta.glob(\n \"../../design-system/avatars/avatar-mascot-*.svg\",\n { query: \"?url\", import: \"default\", eager: true },\n ) as Record<string, string>;\n} catch {\n MASCOTS = {};\n}\n\n// 파일명 → 색 키 매핑 (avatar-mascot-lavender.svg → \"lavender\")\nconst MASCOT_BY_COLOR: Partial<Record<AvatarColor, string>> = {};\nfor (const [path, url] of Object.entries(MASCOTS)) {\n const m = path.match(/avatar-mascot-([a-z]+)\\.svg$/);\n if (m) MASCOT_BY_COLOR[m[1] as AvatarColor] = url;\n}\n\n/** 선택 가능한 마스코트 색 목록 (동등 — 색상 선택 UI 구성용). */\nexport const AVATAR_COLORS = Object.keys(\n MASCOT_BY_COLOR,\n).sort() as AvatarColor[];\n\n/** 색 미선택 시 시드(이름/ID) 기반 기본 배정 (초기 제안값 — 사용자가 바꿀 수 있음). */\nfunction defaultColor(seed?: string): AvatarColor {\n if (AVATAR_COLORS.length === 0) return \"gray\";\n const s = seed ?? \"\";\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0;\n return AVATAR_COLORS[h % AVATAR_COLORS.length]!;\n}\n\nfunction mascotUrl(color?: AvatarColor, seed?: string): string {\n const c = color ?? defaultColor(seed);\n return MASCOT_BY_COLOR[c] ?? MASCOT_BY_COLOR[AVATAR_COLORS[0]!] ?? \"\";\n}\n\n/** 기본 마스코트 이미지. color 선택 시 그 색, 없으면 seed 기반 기본값. */\nfunction MascotImage({\n color,\n seed,\n alt,\n}: {\n color?: AvatarColor;\n seed?: string;\n alt?: string;\n}) {\n return (\n <img\n src={mascotUrl(color, seed)}\n alt={alt ?? \"\"}\n aria-hidden={alt ? undefined : true}\n className=\"h-full w-full object-cover\"\n />\n );\n}\n\nconst Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n (\n { className, size = \"sm\", src, alt, color, presence, children, ...props },\n ref,\n ) => {\n const resolvedSize = (size ?? \"sm\") as AvatarSize;\n return (\n // presence badge가 원 밖으로 걸치도록 wrapper(relative)에 이미지 원 + badge를 형제로 배치.\n <span\n ref={ref}\n className={cn(\"relative inline-flex shrink-0 align-middle\", className)}\n {...props}\n >\n <span\n className={cn(\n avatarVariants({ size }),\n // 가이드: 오프라인이면 아바타를 흐리게(opacity .55)\n presence === \"offline\" && \"opacity-[.55]\",\n )}\n >\n {children ??\n (src ? (\n <AvatarImage src={src} alt={alt} color={color} seed={alt} />\n ) : (\n // 기본: 무조건 마스코트 이미지. color 선택 시 그 색, 없으면 이름 기반 기본값.\n <MascotImage color={color} seed={alt} alt={alt} />\n ))}\n </span>\n {presence ? (\n <Presence\n status={presence}\n size={presenceSizeForAvatar[resolvedSize]}\n className=\"absolute -bottom-0.5 -right-0.5 ring-2 ring-bg-base\"\n />\n ) : null}\n </span>\n );\n },\n);\nAvatar.displayName = \"Avatar\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarImage */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** 로드 실패 시 사용할 마스코트 색(사용자 선택) */\n color?: AvatarColor;\n /** 로드 실패 시 색 미선택이면 색 배정에 쓸 시드(이름/ID) */\n seed?: string;\n}\n\nconst AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n ({ className, alt = \"\", color, seed, ...props }, ref) => {\n const [errored, setErrored] = React.useState(false);\n if (errored) {\n // 로드 실패 시 마스코트 기본 이미지로 대체 (이니셜 미사용)\n return <MascotImage color={color} seed={seed ?? alt} alt={alt} />;\n }\n return (\n <img\n ref={ref}\n alt={alt}\n className={cn(\"h-full w-full object-cover\", className)}\n onError={() => setErrored(true)}\n {...props}\n />\n );\n },\n);\nAvatarImage.displayName = \"AvatarImage\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarFallback */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center bg-surface-sunken font-medium text-text-subtle\",\n className,\n )}\n {...props}\n />\n ),\n);\nAvatarFallback.displayName = \"AvatarFallback\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarGroup */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 최대 표시 개수. 초과분은 '+N' 카운터로 요약 */\n max?: number;\n /** 카운터/겹침 사이즈(자식 Avatar와 맞춤) */\n size?: AvatarSize;\n}\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, children, max, size = \"sm\", ...props }, ref) => {\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const visible = typeof max === \"number\" ? items.slice(0, max) : items;\n const overflow = items.length - visible.length;\n\n return (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props}>\n {visible.map((child, i) => (\n <span key={i} className={i === 0 ? \"\" : \"-ml-2\"}>\n {child}\n </span>\n ))}\n {overflow > 0 ? (\n <span\n className={cn(\n avatarVariants({ size }),\n \"-ml-2 font-medium text-text-subtle\",\n )}\n aria-label={`외 ${overflow}명`}\n title={`외 ${overflow}명`}\n >\n +{overflow}\n </span>\n ) : null}\n </div>\n );\n },\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarGroup, avatarVariants };\nexport type { AvatarSize, AvatarPresence };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Tooltip — presentation-only catalog component.\n *\n * Overlay/positioning here is a visual approximation for the design catalog\n * (no @radix-ui). Real positioning/portal behavior is wired by the app dev.\n * Placement is controlled via the `placement` prop; visibility via `open`\n * (controlled) or hover (uncontrolled, using React.useState).\n */\n\nexport type TooltipPlacement =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\";\n\nconst tooltipContentVariants = cva(\n \"pointer-events-none absolute z-50 w-max max-w-xs whitespace-normal rounded bg-[var(--comp-tooltip-bg)] px-2 py-1 text-xs font-medium text-[var(--comp-tooltip-text)] shadow-popover\",\n {\n variants: {\n placement: {\n top: \"bottom-full left-1/2 mb-2 -translate-x-1/2\",\n \"top-left\": \"bottom-full left-0 mb-2\",\n \"top-right\": \"bottom-full right-0 mb-2\",\n right: \"left-full top-1/2 ml-2 -translate-y-1/2\",\n bottom: \"top-full left-1/2 mt-2 -translate-x-1/2\",\n \"bottom-left\": \"top-full left-0 mt-2\",\n \"bottom-right\": \"top-full right-0 mt-2\",\n left: \"right-full top-1/2 mr-2 -translate-y-1/2\",\n },\n },\n defaultVariants: {\n placement: \"top\",\n },\n },\n);\n\n// arrow: 8px 회전 사각형(버블과 같은 배경색). wrapper(=앵커) 기준으로 배치해\n// 모든 placement에서 꼬리가 대상(앵커)의 정중앙을 가리킨다 — 코너 placement는\n// 버블만 좌우/상하로 밀리고 꼬리 위치는 앵커 중앙에 고정된다.\nconst tooltipArrowVariants = cva(\n \"pointer-events-none absolute z-50 h-2 w-2 rotate-45 bg-[var(--comp-tooltip-bg)]\",\n {\n variants: {\n placement: {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n \"top-left\": \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n \"top-right\": \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-[5px]\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n \"bottom-left\": \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n \"bottom-right\": \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-[5px]\",\n },\n },\n defaultVariants: {\n placement: \"top\",\n },\n },\n);\n\nexport interface TooltipProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"content\">,\n VariantProps<typeof tooltipContentVariants> {\n /** The tooltip bubble content. */\n content: React.ReactNode;\n /** The trigger element the tooltip is anchored to. */\n children: React.ReactNode;\n /** Controlled visibility. When set, hover state is ignored. */\n open?: boolean;\n /** Show the arrow pointing at the trigger. */\n arrow?: boolean;\n /** Disable the tooltip entirely (never shows). */\n disabled?: boolean;\n}\n\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n className,\n content,\n children,\n placement = \"top\",\n open,\n arrow = true,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [hovered, setHovered] = React.useState(false);\n const isControlled = open !== undefined;\n const visible = !disabled && (isControlled ? open : hovered);\n\n const tooltipId = React.useId();\n\n return (\n <div\n ref={ref}\n className={cn(\"relative inline-flex\", className)}\n onMouseEnter={isControlled ? undefined : () => setHovered(true)}\n onMouseLeave={isControlled ? undefined : () => setHovered(false)}\n onFocus={isControlled ? undefined : () => setHovered(true)}\n onBlur={isControlled ? undefined : () => setHovered(false)}\n {...props}\n >\n <span aria-describedby={visible ? tooltipId : undefined}>\n {children}\n </span>\n <div\n id={tooltipId}\n role=\"tooltip\"\n aria-hidden={!visible}\n className={cn(\n tooltipContentVariants({ placement }),\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n {content}\n </div>\n {arrow ? (\n <span\n aria-hidden\n className={cn(\n tooltipArrowVariants({ placement }),\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0\",\n )}\n />\n ) : null}\n </div>\n );\n },\n);\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip, tooltipContentVariants, tooltipArrowVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/* -------------------------------------------------------------------------- */\n/* Context (presentational open-state control — no Radix) */\n/* -------------------------------------------------------------------------- */\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst DropdownMenuContext =\n React.createContext<DropdownMenuContextValue | null>(null);\n\nfunction useDropdownMenuContext(component: string) {\n const ctx = React.useContext(DropdownMenuContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <DropdownMenu>`);\n }\n return ctx;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Root */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Fired whenever the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (\n { className, open: openProp, defaultOpen = false, onOpenChange, ...props },\n ref,\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n\n const setOpen = React.useCallback<\n React.Dispatch<React.SetStateAction<boolean>>\n >(\n (value) => {\n const next =\n typeof value === \"function\"\n ? (value as (prev: boolean) => boolean)(open)\n : value;\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange, open],\n );\n\n const ctx = React.useMemo(() => ({ open, setOpen }), [open, setOpen]);\n\n return (\n <DropdownMenuContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn(\"relative inline-block text-left\", className)}\n {...props}\n />\n </DropdownMenuContext.Provider>\n );\n },\n);\nDropdownMenu.displayName = \"DropdownMenu\";\n\n/* -------------------------------------------------------------------------- */\n/* Trigger */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuTriggerProps\n>(({ className, onClick, disabled, ...props }, ref) => {\n const { open, setOpen } = useDropdownMenuContext(\"DropdownMenuTrigger\");\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen((prev) => !prev);\n }}\n className={cn(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded border border-border-default bg-surface-default px-4 py-2 text-sm font-medium text-text-default transition-colors hover:bg-surface-hover active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\n/* -------------------------------------------------------------------------- */\n/* Content (panel) */\n/* -------------------------------------------------------------------------- */\n\nconst dropdownMenuContentVariants = cva(\n // panel padding 4 · radius sm(8) · min-w 180 · shadow-dropdown\n \"z-50 min-w-[180px] rounded-lg border border-border-subtle bg-surface-raised p-1 shadow-dropdown outline-none\",\n {\n variants: {\n align: {\n start: \"left-0\",\n end: \"right-0\",\n },\n },\n defaultVariants: {\n align: \"start\",\n },\n },\n);\n\nexport interface DropdownMenuContentProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dropdownMenuContentVariants> {\n /** Force render even when closed (useful for catalog/visual specs). */\n forceMount?: boolean;\n}\n\nconst DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuContentProps\n>(({ className, align, forceMount = false, ...props }, ref) => {\n const { open } = useDropdownMenuContext(\"DropdownMenuContent\");\n if (!open && !forceMount) return null;\n return (\n <div\n ref={ref}\n role=\"menu\"\n aria-orientation=\"vertical\"\n className={cn(\n \"absolute top-[calc(100%+4px)]\",\n dropdownMenuContentVariants({ align, className }),\n )}\n {...props}\n />\n );\n});\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\n/* -------------------------------------------------------------------------- */\n/* Item */\n/* -------------------------------------------------------------------------- */\n\nconst dropdownMenuItemVariants = cva(\n // item px12 py8 · item radius xs(4) · hover bg-surface-hover\n \"relative flex w-full cursor-pointer select-none items-center gap-2 rounded px-3 py-2 text-sm text-text-default outline-none transition-colors hover:bg-surface-hover focus-visible:bg-surface-hover focus-visible:outline-none data-[disabled=true]:pointer-events-none data-[disabled=true]:text-text-disabled data-[disabled=true]:opacity-60 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"\",\n danger:\n \"text-danger-text hover:bg-danger-subtle focus-visible:bg-danger-subtle\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface DropdownMenuItemProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"disabled\">,\n VariantProps<typeof dropdownMenuItemVariants> {\n disabled?: boolean;\n /** Optional leading icon element. */\n icon?: React.ReactNode;\n /** Optional trailing content (shortcut hint, chevron, etc.). */\n trailing?: React.ReactNode;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n variant,\n disabled = false,\n icon,\n trailing,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n aria-disabled={disabled || undefined}\n data-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cn(dropdownMenuItemVariants({ variant, className }))}\n {...props}\n >\n {icon ? <span className=\"shrink-0\">{icon}</span> : null}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {trailing ? (\n <span className=\"ml-auto shrink-0 text-xs text-text-subtle\">\n {trailing}\n </span>\n ) : null}\n </button>\n );\n },\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\n/* -------------------------------------------------------------------------- */\n/* Label */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"px-3 py-2 text-xs font-semibold uppercase tracking-wide text-text-subtle\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\n/* -------------------------------------------------------------------------- */\n/* Separator */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\"my-1 h-px bg-border-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\n/* -------------------------------------------------------------------------- */\n/* Empty state */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuEmpty = React.forwardRef<\n HTMLDivElement,\n DropdownMenuEmptyProps\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-3 py-6 text-center text-sm text-text-subtle\", className)}\n {...props}\n >\n {children ?? \"No items\"}\n </div>\n));\nDropdownMenuEmpty.displayName = \"DropdownMenuEmpty\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuEmpty,\n dropdownMenuContentVariants,\n dropdownMenuItemVariants,\n};\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Variants */\n/* -------------------------------------------------------------------------- */\n\nconst selectTriggerVariants = cva(\n \"flex h-10 w-full items-center justify-between gap-2 rounded border bg-surface-default px-3 text-sm text-text-default transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled\",\n {\n variants: {\n state: {\n default:\n \"border-border-default hover:border-border-strong focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:ring-danger-border\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\n/* -------------------------------------------------------------------------- */\n/* Icons (inline, no external deps) */\n/* -------------------------------------------------------------------------- */\n\nconst ChevronIcon = ({ className }: { className?: string }) => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M5 7.5 10 12.5 15 7.5\" />\n </svg>\n)\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"m4.5 10.5 3.5 3.5 7.5-8\" />\n </svg>\n)\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\nexport interface SelectOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface SelectProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n VariantProps<typeof selectTriggerVariants> {\n /** Available options rendered in the dropdown panel. */\n options: SelectOption[]\n /** Currently selected value (controlled). */\n value?: string\n /** Placeholder shown when no value is selected. */\n placeholder?: string\n /** Fired when an option is chosen. */\n onValueChange?: (value: string) => void\n /** Disable the whole control. */\n disabled?: boolean\n /** Force the panel open (presentational / catalog use). */\n defaultOpen?: boolean\n /** Accessible label for the trigger button. */\n \"aria-label\"?: string\n /** Optional id linking to an external error message element. */\n errorMessageId?: string\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Select — presentational dropdown for the design catalog.\n *\n * Open/close is managed with `React.useState`; wiring to a real\n * accessibility-complete listbox library is left to the developer.\n */\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n className,\n state,\n options,\n value,\n placeholder = \"선택하세요\",\n onValueChange,\n disabled = false,\n defaultOpen = false,\n errorMessageId,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(defaultOpen)\n\n const selected = React.useMemo(\n () => options.find((o) => o.value === value),\n [options, value]\n )\n\n const isError = state === \"error\"\n\n const handleSelect = (option: SelectOption) => {\n if (option.disabled) return\n onValueChange?.(option.value)\n setOpen(false)\n }\n\n return (\n <div ref={ref} className={cn(\"relative w-full\", className)} {...props}>\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorMessageId : undefined}\n aria-label={ariaLabel}\n onClick={() => setOpen((o) => !o)}\n className={cn(selectTriggerVariants({ state }))}\n >\n <span\n className={cn(\n \"truncate\",\n !selected && \"text-text-subtle\"\n )}\n >\n {selected ? selected.label : placeholder}\n </span>\n <ChevronIcon\n className={cn(\n \"shrink-0 text-text-subtle transition-transform\",\n open && \"rotate-180\"\n )}\n />\n </button>\n\n {open && !disabled && (\n <ul\n role=\"listbox\"\n aria-label={ariaLabel}\n className=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded border border-border-subtle bg-surface-raised p-1 shadow-dropdown\"\n >\n {options.length === 0 && (\n <li className=\"px-3 py-2 text-sm text-text-subtle\">\n 항목이 없습니다\n </li>\n )}\n {options.map((option) => {\n const isSelected = option.value === value\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || undefined}\n onClick={() => handleSelect(option)}\n className={cn(\n \"flex items-center justify-between gap-2 rounded px-3 py-2 text-sm text-text-default\",\n option.disabled\n ? \"cursor-not-allowed text-text-disabled\"\n : \"cursor-pointer hover:bg-surface-hover active:bg-surface-pressed\",\n isSelected && \"bg-brand-subtle text-brand-text\"\n )}\n >\n <span className=\"truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"shrink-0 text-brand-text\" />\n )}\n </li>\n )\n })}\n </ul>\n )}\n </div>\n )\n }\n)\nSelect.displayName = \"Select\"\n\nexport { Select, selectTriggerVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\nimport { Button } from \"./button\"\n\n/* -------------------------------------------------------------------------- */\n/* Overlay */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogOverlayProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"absolute inset-0 bg-bg-emphasis/60 backdrop-blur-sm\",\n className\n )}\n {...props}\n />\n )\n)\nDialogOverlay.displayName = \"DialogOverlay\"\n\n/* -------------------------------------------------------------------------- */\n/* Panel */\n/* -------------------------------------------------------------------------- */\n\nconst dialogPanelVariants = cva(\n \"relative flex w-full flex-col gap-4 border border-border-subtle bg-surface-raised p-6 pb-4 text-text-default shadow-modal rounded-lg focus-visible:outline-none\",\n {\n variants: {\n size: {\n sm: \"min-w-[280px] max-w-[360px]\",\n md: \"min-w-[280px] max-w-[480px]\",\n lg: \"min-w-[280px] max-w-[640px]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\n/* -------------------------------------------------------------------------- */\n/* Dialog */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dialogPanelVariants> {\n /** Presentation-only open control. When false nothing renders. */\n open?: boolean\n /** Fired when the overlay (or Escape) requests a close. */\n onOpenChange?: (open: boolean) => void\n /** Accessible label id wired to aria-labelledby. */\n \"aria-labelledby\"?: string\n /** Accessible description id wired to aria-describedby. */\n \"aria-describedby\"?: string\n /** Class applied to the panel element. */\n className?: string\n /** Class applied to the overlay element. */\n overlayClassName?: string\n}\n\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n open = true,\n onOpenChange,\n size,\n className,\n overlayClassName,\n children,\n ...props\n },\n ref\n ) => {\n if (!open) return null\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\") onOpenChange?.(false)\n }\n\n return (\n <div\n className=\"absolute inset-0 z-50 flex items-center justify-center p-4\"\n onKeyDown={handleKeyDown}\n >\n <DialogOverlay\n className={overlayClassName}\n onClick={() => onOpenChange?.(false)}\n />\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(dialogPanelVariants({ size }), className)}\n {...props}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nDialog.displayName = \"Dialog\"\n\n/* -------------------------------------------------------------------------- */\n/* Header */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1.5 text-left\", className)}\n {...props}\n />\n )\n)\nDialogHeader.displayName = \"DialogHeader\"\n\n/* -------------------------------------------------------------------------- */\n/* Title */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-base font-semibold leading-tight text-text-strong\",\n className\n )}\n {...props}\n />\n )\n)\nDialogTitle.displayName = \"DialogTitle\"\n\n/* -------------------------------------------------------------------------- */\n/* Description */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm leading-relaxed text-text-subtle\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\n/* -------------------------------------------------------------------------- */\n/* Body */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogBodyProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogBody = React.forwardRef<HTMLDivElement, DialogBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-text-default\", className)}\n {...props}\n />\n )\n)\nDialogBody.displayName = \"DialogBody\"\n\n/* -------------------------------------------------------------------------- */\n/* Footer */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nexport {\n Dialog,\n DialogOverlay,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogBody,\n DialogFooter,\n dialogPanelVariants,\n Button as DialogAction,\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Sheet — presentational bottom sheet (design catalog).\n *\n * Overlay + edge-anchored panel with an optional drag handle.\n * Visibility is controlled via the `open` prop; `onOpenChange` is invoked\n * when the overlay or close affordance is activated. Actual gesture /\n * focus-trap behaviour is left to the app integration.\n */\n\nconst sheetOverlayVariants = cva(\n \"absolute inset-0 bg-[var(--color-overlay-scrim)] transition-opacity duration-200\",\n {\n variants: {\n open: {\n true: \"opacity-100\",\n false: \"pointer-events-none opacity-0\",\n },\n },\n defaultVariants: { open: false },\n },\n);\n\nconst sheetPanelVariants = cva(\n \"absolute flex flex-col gap-4 bg-surface-raised px-5 pb-6 pt-4 text-text-default shadow-modal transition-transform duration-300 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n {\n variants: {\n side: {\n bottom:\n \"inset-x-0 bottom-0 rounded-b-none rounded-t-[var(--radius-lg)] data-[state=closed]:translate-y-full\",\n top: \"inset-x-0 top-0 rounded-b-[var(--radius-lg)] data-[state=closed]:-translate-y-full\",\n left: \"inset-y-0 left-0 h-full w-80 max-w-[85%] rounded-r-[var(--radius-lg)] data-[state=closed]:-translate-x-full\",\n right:\n \"inset-y-0 right-0 h-full w-80 max-w-[85%] rounded-l-[var(--radius-lg)] data-[state=closed]:translate-x-full\",\n },\n },\n defaultVariants: { side: \"bottom\" },\n },\n);\n\nexport interface SheetProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof sheetPanelVariants> {\n /** Whether the sheet is visible. */\n open?: boolean;\n /** Called when a dismiss affordance (overlay) is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Show the drag handle (only meaningful for the bottom/top sides). */\n showHandle?: boolean;\n /** Accessible label for the dialog surface. */\n \"aria-label\"?: string;\n}\n\nconst Sheet = React.forwardRef<HTMLDivElement, SheetProps>(\n (\n {\n className,\n side = \"bottom\",\n open = false,\n onOpenChange,\n showHandle = true,\n children,\n ...props\n },\n ref,\n ) => {\n const state = open ? \"open\" : \"closed\";\n const handleVisible = showHandle && (side === \"bottom\" || side === \"top\");\n return (\n <div\n className={cn(\n \"pointer-events-none absolute inset-0 overflow-hidden\",\n open && \"pointer-events-auto\",\n )}\n data-state={state}\n >\n <div\n aria-hidden=\"true\"\n className={sheetOverlayVariants({ open })}\n onClick={() => onOpenChange?.(false)}\n />\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!open}\n data-state={state}\n tabIndex={-1}\n className={cn(sheetPanelVariants({ side }), className)}\n {...props}\n >\n {handleVisible ? <SheetHandle /> : null}\n {children}\n </div>\n </div>\n );\n },\n);\nSheet.displayName = \"Sheet\";\n\nconst SheetHandle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"mx-auto mb-1 h-1 w-10 shrink-0 rounded-full bg-bg-emphasis\",\n className,\n )}\n {...props}\n />\n));\nSheetHandle.displayName = \"SheetHandle\";\n\nconst SheetHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-0.5\", className)}\n {...props}\n />\n));\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-lg font-semibold text-text-strong\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = \"SheetTitle\";\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-text-subtle\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = \"SheetDescription\";\n\nconst SheetBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-1 flex-col gap-4 overflow-y-auto\", className)}\n {...props}\n />\n));\nSheetBody.displayName = \"SheetBody\";\n\nconst SheetFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n));\nSheetFooter.displayName = \"SheetFooter\";\n\nexport {\n Sheet,\n SheetHandle,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n SheetBody,\n SheetFooter,\n sheetPanelVariants,\n sheetOverlayVariants,\n};\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Context */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsContextValue {\n value: string\n setValue: (value: string) => void\n baseId: string\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext(component: string): TabsContextValue {\n const ctx = React.useContext(TabsContext)\n if (!ctx) {\n throw new Error(`<${component}> must be used within <Tabs>`)\n }\n return ctx\n}\n\n/* -------------------------------------------------------------------------- */\n/* Tabs */\n/* -------------------------------------------------------------------------- */\n\nexport interface TabsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Controlled active tab value. */\n value?: string\n /** Initial active tab value (uncontrolled). */\n defaultValue?: string\n /** Fires when the active tab changes. */\n onValueChange?: (value: string) => void\n}\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n { className, value, defaultValue, onValueChange, children, ...props },\n ref\n ) => {\n const baseId = React.useId()\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? \"\"\n )\n const isControlled = value !== undefined\n const activeValue = isControlled ? value : internalValue\n\n const setValue = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange]\n )\n\n const ctx = React.useMemo<TabsContextValue>(\n () => ({ value: activeValue, setValue, baseId }),\n [activeValue, setValue, baseId]\n )\n\n return (\n <TabsContext.Provider value={ctx}>\n <div ref={ref} className={cn(\"flex flex-col gap-4\", className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\nTabs.displayName = \"Tabs\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* -------------------------------------------------------------------------- */\n\nexport const tabsListVariants = cva(\n \"relative flex items-center border-b border-border-subtle\",\n {\n variants: {\n fullWidth: {\n true: \"w-full\",\n false: \"w-fit\",\n },\n },\n defaultVariants: {\n fullWidth: false,\n },\n }\n)\n\nexport interface TabsListProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof tabsListVariants> {}\n\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, fullWidth, ...props }, ref) => (\n <div\n ref={ref}\n role=\"tablist\"\n className={cn(tabsListVariants({ fullWidth }), \"gap-1\", className)}\n {...props}\n />\n )\n)\nTabsList.displayName = \"TabsList\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger */\n/* -------------------------------------------------------------------------- */\n\nexport const tabsTriggerVariants = cva(\n [\n \"relative inline-flex items-center justify-center gap-2 whitespace-nowrap px-3 py-2 text-sm font-medium\",\n \"transition-colors focus-visible:outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n \"disabled:pointer-events-none disabled:text-text-disabled\",\n \"[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n // bottom indicator element (2px)\n \"after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:rounded-full after:transition-colors\",\n ],\n {\n variants: {\n active: {\n true: \"text-text-strong after:bg-brand-solid\",\n false: \"text-text-subtle hover:text-text-default after:bg-transparent\",\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n)\n\nexport interface TabsTriggerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> {\n /** Unique value identifying this tab. */\n value: string\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, disabled, ...props }, ref) => {\n const { value: activeValue, setValue, baseId } = useTabsContext(\"TabsTrigger\")\n const isActive = activeValue === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-trigger-${value}`}\n aria-selected={isActive}\n aria-controls={`${baseId}-content-${value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n data-state={isActive ? \"active\" : \"inactive\"}\n onClick={() => setValue(value)}\n className={cn(tabsTriggerVariants({ active: isActive }), className)}\n {...props}\n />\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsContent */\n/* -------------------------------------------------------------------------- */\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Value of the tab this panel belongs to. */\n value: string\n /** Keep the panel mounted even when inactive (hidden via CSS). */\n forceMount?: boolean\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount, children, ...props }, ref) => {\n const { value: activeValue, baseId } = useTabsContext(\"TabsContent\")\n const isActive = activeValue === value\n\n if (!isActive && !forceMount) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`${baseId}-content-${value}`}\n aria-labelledby={`${baseId}-trigger-${value}`}\n hidden={!isActive}\n tabIndex={0}\n data-state={isActive ? \"active\" : \"inactive\"}\n className={cn(\n \"text-sm text-text-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Table (root) */\n/* -------------------------------------------------------------------------- */\n\nconst tableVariants = cva(\n \"w-full caption-bottom border-separate border-spacing-0 overflow-hidden rounded-lg border border-border-default text-sm text-text-default\",\n {\n variants: {\n density: {\n comfortable: \"[&_td]:py-2 [&_th]:py-2\",\n compact: \"[&_td]:py-1 [&_th]:py-1\",\n },\n },\n defaultVariants: {\n density: \"comfortable\",\n },\n }\n)\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement>,\n VariantProps<typeof tableVariants> {\n /** Wrapper element props (the scroll container). */\n containerProps?: React.HTMLAttributes<HTMLDivElement>\n}\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, density, containerProps, ...props }, ref) => (\n <div\n {...containerProps}\n className={cn(\"relative w-full overflow-x-auto\", containerProps?.className)}\n >\n <table\n ref={ref}\n className={cn(tableVariants({ density, className }))}\n {...props}\n />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\n/* -------------------------------------------------------------------------- */\n/* TableHeader */\n/* -------------------------------------------------------------------------- */\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n TableHeaderProps\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"bg-surface-sunken text-text-subtle\", className)}\n {...props}\n />\n))\nTableHeader.displayName = \"TableHeader\"\n\n/* -------------------------------------------------------------------------- */\n/* TableBody */\n/* -------------------------------------------------------------------------- */\n\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\n/* -------------------------------------------------------------------------- */\n/* TableRow */\n/* -------------------------------------------------------------------------- */\n\nconst tableRowVariants = cva(\n \"border-b border-border-default transition-colors [&>*]:border-b [&>*]:border-border-default last:[&>*]:border-b-0\",\n {\n variants: {\n interactive: {\n true: \"cursor-pointer hover:bg-surface-hover data-[selected=true]:bg-brand-subtle\",\n false: \"hover:bg-surface-hover\",\n },\n },\n defaultVariants: {\n interactive: false,\n },\n }\n)\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement>,\n VariantProps<typeof tableRowVariants> {\n /** Visual selected state (also drives aria-selected). */\n selected?: boolean\n}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, interactive, selected, ...props }, ref) => (\n <tr\n ref={ref}\n data-selected={selected ? \"true\" : undefined}\n aria-selected={selected}\n className={cn(tableRowVariants({ interactive, className }))}\n {...props}\n />\n )\n)\nTableRow.displayName = \"TableRow\"\n\n/* -------------------------------------------------------------------------- */\n/* TableHead (header cell) */\n/* -------------------------------------------------------------------------- */\n\nexport interface TableHeadProps\n extends React.ThHTMLAttributes<HTMLTableCellElement> {\n /** Sort indicator for accessible sortable columns. */\n sort?: \"asc\" | \"desc\" | \"none\"\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, sort, children, ...props }, ref) => (\n <th\n ref={ref}\n scope=\"col\"\n aria-sort={\n sort === \"asc\"\n ? \"ascending\"\n : sort === \"desc\"\n ? \"descending\"\n : sort === \"none\"\n ? \"none\"\n : undefined\n }\n className={cn(\n \"h-9 px-3 py-2 text-left align-middle text-xs font-medium text-text-subtle\",\n \"[&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n >\n {sort && sort !== \"none\" ? (\n <span className=\"inline-flex items-center gap-1\">\n {children}\n <span aria-hidden=\"true\" className=\"text-text-subtle\">\n {sort === \"asc\" ? \"↑\" : \"↓\"}\n </span>\n </span>\n ) : (\n children\n )}\n </th>\n )\n)\nTableHead.displayName = \"TableHead\"\n\n/* -------------------------------------------------------------------------- */\n/* TableCell (body cell) */\n/* -------------------------------------------------------------------------- */\n\nexport type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-3 py-2 align-middle text-sm text-text-default [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n)\nTableCell.displayName = \"TableCell\"\n\n/* -------------------------------------------------------------------------- */\n/* TableCaption */\n/* -------------------------------------------------------------------------- */\n\nexport type TableCaptionProps =\n React.HTMLAttributes<HTMLTableCaptionElement>\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n TableCaptionProps\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-3 text-xs text-text-subtle\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\n/* -------------------------------------------------------------------------- */\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableRow,\n TableHead,\n TableCell,\n TableCaption,\n tableVariants,\n tableRowVariants,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------------------------------\n * paginationItemVariants\n * item 32sq · gap4 · radius sm(8) · font14\n * ----------------------------------------------------------------------------------------------- */\n\nconst paginationItemVariants = cva(\n \"inline-flex h-8 min-w-8 items-center justify-center rounded-lg px-2 text-sm font-medium transition-colors select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n active: {\n true: \"bg-brand-solid text-text-on-brand hover:bg-brand-solid-hover\",\n false: \"text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Icons (inline, no extra deps)\n * ----------------------------------------------------------------------------------------------- */\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n)\n\nconst EllipsisIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n stroke=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"5\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.5\" />\n </svg>\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationItem — single page button\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\">,\n VariantProps<typeof paginationItemVariants> {\n /** Page number this item represents. */\n page: number\n}\n\nconst PaginationItem = React.forwardRef<HTMLButtonElement, PaginationItemProps>(\n ({ className, active, page, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n aria-label={`Go to page ${page}`}\n className={cn(paginationItemVariants({ active, className }))}\n {...props}\n >\n {page}\n </button>\n )\n }\n)\nPaginationItem.displayName = \"PaginationItem\"\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationEllipsis\n * ----------------------------------------------------------------------------------------------- */\n\nconst PaginationEllipsis = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"inline-flex h-8 min-w-8 items-center justify-center px-1 text-sm text-text-subtle\",\n className\n )}\n {...props}\n >\n <EllipsisIcon />\n <span className=\"sr-only\">More pages</span>\n </span>\n))\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationPrevious / PaginationNext\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationNavProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst PaginationPrevious = React.forwardRef<\n HTMLButtonElement,\n PaginationNavProps\n>(({ className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-label=\"Go to previous page\"\n className={cn(paginationItemVariants({ active: false, className }))}\n {...props}\n >\n <ChevronLeftIcon />\n </button>\n))\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = React.forwardRef<HTMLButtonElement, PaginationNavProps>(\n ({ className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-label=\"Go to next page\"\n className={cn(paginationItemVariants({ active: false, className }))}\n {...props}\n >\n <ChevronRightIcon />\n </button>\n )\n)\nPaginationNext.displayName = \"PaginationNext\"\n\n/* -------------------------------------------------------------------------------------------------\n * buildPageRange — compute page items with ellipsis\n * ----------------------------------------------------------------------------------------------- */\n\ntype PageRangeItem = number | \"ellipsis\"\n\nfunction buildPageRange(\n current: number,\n total: number,\n siblingCount = 1\n): PageRangeItem[] {\n // total slots: first + last + current + 2*siblings + 2 ellipsis\n const totalSlots = siblingCount * 2 + 5\n if (total <= totalSlots) {\n return Array.from({ length: total }, (_, i) => i + 1)\n }\n\n const leftSibling = Math.max(current - siblingCount, 1)\n const rightSibling = Math.min(current + siblingCount, total)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < total - 1\n\n const range: PageRangeItem[] = []\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftItemCount = siblingCount * 2 + 3\n for (let i = 1; i <= leftItemCount; i++) range.push(i)\n range.push(\"ellipsis\", total)\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightItemCount = siblingCount * 2 + 3\n range.push(1, \"ellipsis\")\n for (let i = total - rightItemCount + 1; i <= total; i++) range.push(i)\n } else {\n range.push(1, \"ellipsis\")\n for (let i = leftSibling; i <= rightSibling; i++) range.push(i)\n range.push(\"ellipsis\", total)\n }\n\n return range\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Pagination — presentation component (state controlled via props)\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"onChange\"> {\n /** Total number of pages. */\n totalPages: number\n /** Currently active page (1-based). */\n page: number\n /** Called when a page control is activated. */\n onPageChange?: (page: number) => void\n /** How many page items to show on each side of the current page. */\n siblingCount?: number\n /** Accessible label for the navigation landmark. */\n label?: string\n}\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n className,\n totalPages,\n page,\n onPageChange,\n siblingCount = 1,\n label = \"Pagination\",\n ...props\n },\n ref\n ) => {\n const safeTotal = Math.max(totalPages, 1)\n const current = Math.min(Math.max(page, 1), safeTotal)\n const items = buildPageRange(current, safeTotal, siblingCount)\n\n const goTo = (target: number) => {\n if (target < 1 || target > safeTotal || target === current) return\n onPageChange?.(target)\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label={label}\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n <PaginationPrevious\n disabled={current <= 1}\n onClick={() => goTo(current - 1)}\n />\n\n {items.map((item, index) =>\n item === \"ellipsis\" ? (\n <PaginationEllipsis key={`ellipsis-${index}`} />\n ) : (\n <PaginationItem\n key={item}\n page={item}\n active={item === current}\n onClick={() => goTo(item)}\n />\n )\n )}\n\n <PaginationNext\n disabled={current >= safeTotal}\n onClick={() => goTo(current + 1)}\n />\n </nav>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\nexport {\n Pagination,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n paginationItemVariants,\n buildPageRange,\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * SegmentedControl — 값 기반 세그먼트 컨트롤.\n * height 32 · padding 2 · radius sm(8) · thumb radius 8 · font 14.\n * 컨테이너 bg-surface-sunken, active thumb=bg-surface-default shadow-sm 슬라이드.\n * value/onValueChange 로 제어(controlled) 하거나 defaultValue 로 비제어(uncontrolled).\n */\n\nconst segmentContainerVariants = cva(\n \"relative inline-grid h-8 auto-cols-fr grid-flow-col items-center rounded-lg bg-surface-sunken p-0.5 text-sm\",\n {\n variants: {\n fullWidth: {\n true: \"flex w-full\",\n false: \"inline-grid w-auto\",\n },\n },\n defaultVariants: {\n fullWidth: false,\n },\n },\n);\n\nconst segmentItemVariants = cva(\n \"relative z-10 inline-flex h-full w-full items-center justify-center gap-1.5 whitespace-nowrap rounded-lg px-3 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n // 활성=label1 굵기(semibold/600) · 비활성=body-sm 굵기(regular/400), 둘 다 14px.\n // NOTE: text-label1/body-sm 클래스는 twMerge가 text-* 색상과 같은 충돌군으로\n // 보고 제거하므로, 색상과 충돌 안 하는 font-weight 유틸로 굵기를 지정한다.\n active: {\n true: \"font-semibold text-text-strong\",\n false: \"font-normal text-text-subtle hover:text-text-default\",\n },\n },\n defaultVariants: {\n active: false,\n },\n },\n);\n\nexport interface SegmentedControlItem {\n /** 세그먼트 값 (고유) */\n value: string;\n /** 표시 라벨 */\n label: React.ReactNode;\n /** 선택적 아이콘 (색만으로 정보전달 금지 — 아이콘/텍스트 병행 용도) */\n icon?: React.ReactNode;\n /** 개별 비활성화 */\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof segmentContainerVariants> {\n /** 세그먼트 항목 목록 */\n items: SegmentedControlItem[];\n /** 제어 값 */\n value?: string;\n /** 비제어 초기 값 */\n defaultValue?: string;\n /** 값 변경 콜백 */\n onValueChange?: (value: string) => void;\n /** 전체 비활성화 */\n disabled?: boolean;\n /** 접근성 라벨 */\n \"aria-label\"?: string;\n}\n\nconst SegmentedControl = React.forwardRef<\n HTMLDivElement,\n SegmentedControlProps\n>(\n (\n {\n className,\n items,\n value,\n defaultValue,\n onValueChange,\n disabled = false,\n fullWidth,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? items[0]?.value ?? \"\",\n );\n const currentValue = isControlled ? value : internalValue;\n\n const activeIndex = Math.max(\n 0,\n items.findIndex((item) => item.value === currentValue),\n );\n const count = items.length || 1;\n\n const handleSelect = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n className={cn(segmentContainerVariants({ fullWidth }), className)}\n {...props}\n >\n {/* 슬라이딩 thumb — active 세그먼트 위치로 이동 */}\n {items.length > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute bottom-0.5 left-0.5 top-0.5 z-0 rounded-lg bg-surface-default shadow-sm transition-transform duration-200 ease-out\"\n style={{\n width: `calc((100% - 0.25rem) / ${count})`,\n transform: `translateX(calc(${activeIndex} * 100%))`,\n }}\n />\n )}\n {items.map((item) => {\n const isActive = item.value === currentValue;\n const isDisabled = disabled || item.disabled;\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n disabled={isDisabled}\n tabIndex={isActive ? 0 : -1}\n onClick={() => handleSelect(item.value)}\n className={cn(segmentItemVariants({ active: isActive }))}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n },\n);\nSegmentedControl.displayName = \"SegmentedControl\";\n\nexport { SegmentedControl, segmentContainerVariants, segmentItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Toast — presentation-only visual component (design catalog).\n * TODO: A real ToastProvider / useToast hook (queueing, auto-dismiss,\n * portal, aria-live region) must be wired by the app developer.\n * This component renders a single toast surface for visual spec review.\n */\n\nconst toastVariants = cva(\n \"pointer-events-auto flex w-full max-w-sm gap-3 rounded-lg border px-4 py-4 shadow-toast focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n {\n variants: {\n variant: {\n default:\n \"border-border-default bg-surface-raised text-text-default focus-visible:ring-border-focus\",\n danger:\n \"border-danger-border bg-danger-subtle text-danger-text focus-visible:ring-danger-border\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n// Inline icons (no icon dependency). Paired with text so info is never color-only.\nfunction InfoIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" />\n <path d=\"M10 9v4.5\" />\n <path d=\"M10 6.5h.01\" />\n </svg>\n );\n}\n\nfunction AlertIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10 2.5 18 16.5H2z\" />\n <path d=\"M10 8v3.5\" />\n <path d=\"M10 14h.01\" />\n </svg>\n );\n}\n\nfunction CloseIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M5 5l10 10M15 5L5 15\" />\n </svg>\n );\n}\n\nexport interface ToastProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof toastVariants> {\n /** Main message content of the toast. */\n message: React.ReactNode;\n /** Optional emphasized title rendered above the message. */\n title?: React.ReactNode;\n /** Render the leading status icon (default true). */\n icon?: boolean;\n /** Show the trailing close button (default true). */\n dismissible?: boolean;\n /** Fired when the close button is pressed. */\n onClose?: () => void;\n /** Accessible label for the close button. */\n closeLabel?: string;\n}\n\nconst Toast = React.forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n className,\n variant,\n message,\n title,\n icon = true,\n dismissible = true,\n onClose,\n closeLabel = \"Close\",\n ...props\n },\n ref,\n ) => {\n const StatusIcon = variant === \"danger\" ? AlertIcon : InfoIcon;\n return (\n <div\n ref={ref}\n role={variant === \"danger\" ? \"alert\" : \"status\"}\n aria-live={variant === \"danger\" ? \"assertive\" : \"polite\"}\n className={cn(\n toastVariants({ variant, className }),\n title ? \"items-start\" : \"items-center\",\n )}\n {...props}\n >\n {/* [아이콘 + 제목·메시지 컬럼] 그룹 ↔ [닫기]. 컬럼이 flex-1이라 텍스트가\n X 열 아래로 넘어가지 않음(포개짐 방지). 제목 유무로 세로정렬 전환. */}\n <div\n className={cn(\n \"flex min-w-0 flex-1 gap-2\",\n title ? \"items-start\" : \"items-center\",\n )}\n >\n {icon ? (\n <StatusIcon\n className={cn(\n \"size-5 shrink-0\",\n variant === \"danger\" ? \"text-danger-text\" : \"text-text-subtle\",\n )}\n />\n ) : null}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p\n className={cn(\n \"text-label1\",\n variant === \"danger\"\n ? \"text-danger-text\"\n : \"text-text-strong\",\n )}\n >\n {title}\n </p>\n ) : null}\n <p className={cn(\"text-body-sm break-words\", title && \"mt-0.5\")}>\n {message}\n </p>\n </div>\n </div>\n {dismissible ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n className={cn(\n \"-mr-1 inline-flex size-6 shrink-0 items-center justify-center rounded text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n title && \"-mt-0.5\",\n )}\n >\n <CloseIcon className=\"size-4\" />\n </button>\n ) : null}\n </div>\n );\n },\n);\nToast.displayName = \"Toast\";\n\nexport { Toast, toastVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport type EmptyStateSize = \"lg\" | \"md\" | \"sm\";\n\n// 사이즈별 스펙 (가이드 anatomy). plate/art는 px, 나머지는 spacing/typo 토큰 유틸.\nconst SIZES: Record<\n EmptyStateSize,\n {\n plate: number;\n art: number;\n pad: string;\n plateMb: string;\n title: string;\n desc: string;\n gap: string;\n act: string;\n }\n> = {\n lg: {\n plate: 180,\n art: 120,\n pad: \"px-6 py-12\",\n plateMb: \"mb-4\",\n title: \"text-xl\",\n desc: \"text-base max-w-[360px]\",\n gap: \"mt-1\",\n act: \"mt-5\",\n },\n md: {\n plate: 144,\n art: 96,\n pad: \"px-5 py-10\",\n plateMb: \"mb-3\",\n title: \"text-lg\",\n desc: \"text-base max-w-[300px]\",\n gap: \"mt-0.5\",\n act: \"mt-4\",\n },\n sm: {\n plate: 108,\n art: 72,\n pad: \"px-4 py-8\",\n plateMb: \"mb-3\",\n title: \"text-lg\",\n desc: \"text-sm max-w-[240px]\",\n gap: \"mt-0.5\",\n act: \"mt-4\",\n },\n};\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: EmptyStateSize;\n /** 라운드 플레이트 안에 들어갈 일러스트(TIMI 캐릭터). <img>/<svg> */\n illustration?: React.ReactNode;\n title: string;\n description?: string;\n /** 하단 CTA (예: <Button>) — 없으면 생략 */\n action?: React.ReactNode;\n}\n\n// 빈 화면 안내 — 라운드 플레이트(테마별 밝기) + 컬러 일러스트 + 문구 + CTA.\nexport function EmptyState({\n size = \"lg\",\n illustration,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n const s = SIZES[size];\n return (\n <div\n className={cn(\"flex flex-col items-center text-center\", s.pad, className)}\n {...props}\n >\n {illustration && (\n // 플레이트: border-subtle = 라이트 gray-20(sunken) · 다크 gray-60(카드 gray-80보다 밝아 떠 보임)\n <div\n className={cn(\n \"flex items-center justify-center rounded-full bg-border-subtle\",\n s.plateMb,\n )}\n style={{ width: s.plate, height: s.plate }}\n >\n <span\n className=\"inline-flex [&>img]:h-full [&>img]:w-full [&>img]:object-contain [&>svg]:h-full [&>svg]:w-full\"\n style={{ width: s.art, height: s.art }}\n >\n {illustration}\n </span>\n </div>\n )}\n <h3 className={cn(\"font-bold leading-snug text-text-strong\", s.title)}>\n {title}\n </h3>\n {description && (\n <p className={cn(\"leading-relaxed text-text-subtle\", s.desc, s.gap)}>\n {description}\n </p>\n )}\n {action && <div className={cn(\"flex gap-2\", s.act)}>{action}</div>}\n </div>\n );\n}\n","// 아이콘 공통 프레임. gen-icons.cjs가 생성/유지.\nimport * as React from \"react\";\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n /** width/height(px). 기본 20(icon-md). 색은 currentColor 상속(테마 자동). */\n size?: number | string;\n}\n\n/** viewBox 24 · 1.5 stroke · round cap/join · currentColor. */\nexport function IconBase({\n size = 20,\n children,\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n {children}\n </svg>\n );\n}\n","// AUTO-GENERATED from design-system/icons/check.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const CheckIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M20 6 9 17l-5-5\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-down.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronDownIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m6 9 6 6 6-6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-left.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronLeftIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m15 6-6 6 6 6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-right.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronRightIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m9 6 6 6-6 6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/hash.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const HashIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M4 9h16M4 15h16M10 3 8 21M16 3 14 21\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/lock.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const LockIcon = (props: IconProps) => (\n <IconBase {...props}><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"3\" ry=\"3\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/pin.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const PinIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M12 17v5\"/><path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/plus.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const PlusIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M12 5v14M5 12h14\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/search.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const SearchIcon = (props: IconProps) => (\n <IconBase {...props}><circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.4-3.4\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/x.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const XIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M18 6 6 18M6 6l12 12\"/></IconBase>\n);\n","import * as React from \"react\";\n\nimport { ChevronDownIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\nexport interface AccordionItemData {\n /** 고유 키(미지정 시 title 사용) */\n id?: string;\n /** 제목(요약 행) */\n title: React.ReactNode;\n /** 펼쳤을 때 본문 */\n content: React.ReactNode;\n /** 기본 펼침 여부 */\n defaultOpen?: boolean;\n}\n\nexport interface AccordionItemProps extends Omit<\n React.ComponentPropsWithoutRef<\"details\">,\n \"title\"\n> {\n /** 제목(요약 행) */\n title: React.ReactNode;\n}\n\n/**\n * 단일 아코디언 행. `<details>/<summary>` 기반 — JS 없이 펼침/접힘.\n * 셰브론은 열림 시 180° 회전(group-open).\n */\nconst AccordionItem = React.forwardRef<HTMLDetailsElement, AccordionItemProps>(\n ({ className, title, children, ...props }, ref) => (\n <details\n ref={ref}\n className={cn(\n \"group border-t border-border-subtle first:border-t-0\",\n className,\n )}\n {...props}\n >\n <summary className=\"flex cursor-pointer select-none list-none items-center justify-between gap-2.5 px-4 py-3.5 text-sm font-semibold text-text-default group-open:text-brand-text [&::-webkit-details-marker]:hidden\">\n {title}\n <ChevronDownIcon\n size={18}\n className=\"shrink-0 text-text-subtle transition-transform duration-200 group-open:rotate-180\"\n />\n </summary>\n <div className=\"px-4 pb-3.5 text-sm leading-relaxed text-text-subtle\">\n {children}\n </div>\n </details>\n ),\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 데이터 기반 렌더. 미지정 시 children 사용. */\n items?: AccordionItemData[];\n}\n\n/**\n * 아코디언 컨테이너(surface 카드). 행 사이 구분선, 첫 행은 상단선 없음.\n * `items` prop으로 데이터 기반 렌더하거나 `children`으로 직접 조립.\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, items, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden rounded-lg border border-border-subtle bg-surface-default\",\n className,\n )}\n {...props}\n >\n {items\n ? items.map((it) => (\n <AccordionItem\n key={it.id ?? String(it.title)}\n title={it.title}\n open={it.defaultOpen}\n >\n {it.content}\n </AccordionItem>\n ))\n : children}\n </div>\n ),\n);\nAccordion.displayName = \"Accordion\";\n\nexport { Accordion, AccordionItem };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\n// 데이터 시각화 프리미티브. comp-chart-* 토큰 미발행 →\n// 구조/텍스트은 시맨틱 토큰으로, 분포 세그먼트 색만 소비처에서 className으로 주입.\n\n// ── Stat (상태·지표 건수 카드) ─────────────────────\n// 상태/카테고리별 건수 요약. 라벨 앞 상태 점(dot) + 큰 값.\n// (예: 대기·진행중·리뷰·완료 건수) 점 색은 comp-chart-* 미발행 →\n// 소비처가 className(bg-*)으로 주입 — StackBar 세그먼트와 동일 규칙.\nexport interface KpiItem {\n /** 지표/상태 라벨 */\n label: string;\n /** 값(문자열: 건수 \"0\", \"21\" 또는 \"92%\") */\n value: string;\n /** 상태 점 색 클래스(bg-*). 지정 시 라벨 앞에 상태 점 표시 — 색은 소비처 주입 */\n dot?: string;\n}\n\nexport interface KpiRowProps extends React.HTMLAttributes<HTMLDivElement> {\n items: KpiItem[];\n}\n\nexport const KpiRow = React.forwardRef<HTMLDivElement, KpiRowProps>(\n ({ items, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex w-[360px] gap-2\", className)} {...props}>\n {items.map((k) => (\n <div\n key={k.label}\n className=\"flex-1 rounded-lg border border-border-subtle bg-surface-default p-3\"\n >\n <div className=\"flex items-center gap-1.5\">\n {k.dot != null && (\n <span\n className={cn(\"h-2 w-2 shrink-0 rounded-full\", k.dot)}\n aria-hidden\n />\n )}\n <span className=\"text-xs text-text-subtle\">{k.label}</span>\n </div>\n <div className=\"mt-1 text-2xl font-bold text-text-strong\">\n {k.value}\n </div>\n </div>\n ))}\n </div>\n ),\n);\nKpiRow.displayName = \"KpiRow\";\n\n// ── Progress ──────────────────────────────────────\nexport interface ProgressItem {\n label: string;\n /** 0–100 */\n pct: number;\n /** 위험(초과 등) 강조 */\n danger?: boolean;\n}\n\nexport interface ProgressListProps extends React.HTMLAttributes<HTMLDivElement> {\n items: ProgressItem[];\n}\n\nexport const ProgressList = React.forwardRef<HTMLDivElement, ProgressListProps>(\n ({ items, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex w-[320px] flex-col gap-3\", className)}\n {...props}\n >\n {items.map((r) => (\n <div key={r.label}>\n <div className=\"mb-1 flex justify-between text-sm\">\n <span className=\"text-text-default\">{r.label}</span>\n <span className={r.danger ? \"text-danger-text\" : \"text-brand-text\"}>\n {r.pct}%\n </span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-surface-sunken\">\n <div\n className={cn(\n \"h-full rounded-full\",\n r.danger ? \"bg-danger-solid\" : \"bg-brand-solid\",\n )}\n style={{ width: `${r.pct}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n ),\n);\nProgressList.displayName = \"ProgressList\";\n\n// ── Ring (도넛 게이지) ─────────────────────────────\nexport interface RingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0–100 */\n pct: number;\n /** 지름(px) */\n size?: number;\n /** 가운데 라벨(기본: `${pct}%`) */\n label?: React.ReactNode;\n}\n\nexport const Ring = React.forwardRef<HTMLDivElement, RingProps>(\n ({ pct, size = 84, label, className, style, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"relative grid place-items-center\", className)}\n style={{ height: size, width: size, ...style }}\n {...props}\n >\n <svg viewBox=\"0 0 36 36\" className=\"h-full w-full -rotate-90\">\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.5\"\n fill=\"none\"\n strokeWidth=\"3\"\n className=\"stroke-surface-sunken\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.5\"\n fill=\"none\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n pathLength={100}\n strokeDasharray={`${pct} 100`}\n className=\"stroke-brand-solid\"\n />\n </svg>\n <b className=\"absolute text-sm font-bold text-text-strong\">\n {label ?? `${pct}%`}\n </b>\n </div>\n ),\n);\nRing.displayName = \"Ring\";\n\n// ── StackBar (누적 분포) ───────────────────────────\nexport interface StackSegment {\n label: string;\n /** 비율(%) */\n pct: number;\n /** 세그먼트 색 클래스(bg-*). 미지정 시 bg-brand-solid */\n className?: string;\n}\n\nexport interface StackBarProps extends React.HTMLAttributes<HTMLDivElement> {\n segments: StackSegment[];\n /** 범례 표시 여부 */\n showLegend?: boolean;\n}\n\nexport const StackBar = React.forwardRef<HTMLDivElement, StackBarProps>(\n ({ segments, showLegend = true, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-[360px]\", className)} {...props}>\n <div className=\"flex h-6 gap-0.5\">\n {segments.map((s, i) => (\n <div\n key={s.label}\n className={cn(\n s.className ?? \"bg-brand-solid\",\n i === 0 && \"rounded-l-full\",\n i === segments.length - 1 && \"rounded-r-full\",\n )}\n style={{ width: `${s.pct}%` }}\n />\n ))}\n </div>\n {showLegend && (\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-1\">\n {segments.map((s) => (\n <div\n key={s.label}\n className=\"flex items-center gap-1.5 text-xs text-text-subtle\"\n >\n <span\n className={cn(\n \"h-2.5 w-2.5 rounded-full\",\n s.className ?? \"bg-brand-solid\",\n )}\n />\n {s.label} <span className=\"text-text-default\">{s.pct}%</span>\n </div>\n ))}\n </div>\n )}\n </div>\n ),\n);\nStackBar.displayName = \"StackBar\";\n\n// ── WorkHoursBar (근무시간) ────────────────────────\nexport type WorkHoursState = \"reached\" | \"unreached\" | \"pending\";\n\nexport interface WorkHoursItem {\n /** 요일 라벨 */\n day: string;\n /** 근무 시간 */\n hours: number;\n /** reached=목표도달 · unreached=미달 · pending=출근전 */\n state: WorkHoursState;\n /** 오늘 강조 */\n today?: boolean;\n /** 미래(예정) */\n future?: boolean;\n}\n\nexport interface WorkHoursBarProps extends React.HTMLAttributes<HTMLDivElement> {\n data: WorkHoursItem[];\n /** y축 최대치(시간). 기본 12 */\n max?: number;\n /** 차트 높이(px). 기본 120 */\n height?: number;\n /** 하단 캡션 */\n caption?: React.ReactNode;\n}\n\nconst BAR_BY_STATE: Record<WorkHoursState, string> = {\n reached: \"bg-brand-solid\",\n unreached: \"bg-brand-subtle\",\n pending: \"bg-surface-sunken\",\n};\n\nexport const WorkHoursBar = React.forwardRef<HTMLDivElement, WorkHoursBarProps>(\n ({ data, max = 12, height = 120, caption, className, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <div className=\"flex items-end gap-3\">\n {data.map((d) => {\n const barH =\n d.state === \"pending\" ? 4 : (d.hours / max) * height;\n const labelCls = d.today\n ? \"text-brand-text font-semibold\"\n : d.future\n ? \"text-text-disabled\"\n : \"text-text-subtle\";\n return (\n <div key={d.day} className=\"flex flex-col items-center gap-2\">\n <div className=\"flex w-8 items-end\" style={{ height }}>\n <div\n className={cn(\"w-full rounded-t\", BAR_BY_STATE[d.state])}\n style={{ height: barH }}\n />\n </div>\n <div className={cn(\"text-xs\", labelCls)}>{d.day}</div>\n </div>\n );\n })}\n </div>\n {caption != null && (\n <div className=\"mt-2 text-xs text-text-subtle\">{caption}</div>\n )}\n </div>\n ),\n);\nWorkHoursBar.displayName = \"WorkHoursBar\";\n","import * as React from \"react\";\n\nimport { SearchIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\n/** 키보드 단축키 배지. 활성 행에선 현재 색(brand)을 따라간다. */\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** 활성(하이라이트) 컨텍스트에 놓였는지 여부. */\n active?: boolean;\n}\n\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\n ({ active, className, children, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n \"rounded border px-1.5 py-px font-mono text-xs\",\n active\n ? \"border-current bg-transparent text-brand-text\"\n : \"border-border-subtle bg-bg-base text-text-subtle\",\n className,\n )}\n {...props}\n >\n {children}\n </kbd>\n ),\n);\nKbd.displayName = \"Kbd\";\n\n/** 커맨드 팔레트의 개별 명령. */\nexport interface CommandItem {\n /** 선택 콜백 식별용 고유 값. */\n id: string;\n /** 선행 아이콘(예: ./icons 의 PlusIcon). */\n icon?: React.ReactNode;\n /** 표시 라벨. */\n label: string;\n /** 단축키 표기(예: \"⌘N\"). */\n kbd?: string;\n}\n\n/** 헤딩으로 묶인 명령 그룹. */\nexport interface CommandGroup {\n /** 그룹 헤딩(생략 시 헤딩 없이 렌더). */\n heading?: string;\n items: CommandItem[];\n}\n\nexport interface CommandPaletteProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** 그룹으로 묶인 명령 목록. */\n groups: CommandGroup[];\n /** 명령 선택 시 호출. */\n onSelect?: (item: CommandItem) => void;\n /** 현재 하이라이트(활성)된 명령의 id. */\n activeId?: string;\n /** 검색 입력의 표시 문구. */\n placeholder?: string;\n /** 검색 입력 우측에 표시할 단축키. */\n searchKbd?: string;\n /** 열림 여부. false면 렌더하지 않는다. */\n open?: boolean;\n}\n\n/**\n * 검색 입력 + 그룹 헤딩 + 결과 행(아이콘·라벨·단축키)으로 구성된 커맨드 팔레트.\n * 활성 행은 brand-subtle 배경 + brand-text 로 하이라이트된다.\n */\nexport const CommandPalette = React.forwardRef<\n HTMLDivElement,\n CommandPaletteProps\n>(\n (\n {\n groups,\n onSelect,\n activeId,\n placeholder = \"명령 또는 검색…\",\n searchKbd = \"⌘K\",\n open = true,\n className,\n ...props\n },\n ref,\n ) => {\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n role=\"dialog\"\n aria-label=\"커맨드 팔레트\"\n className={cn(\n \"w-[420px] max-w-full overflow-hidden rounded-lg border border-border-subtle bg-surface-default shadow-lg\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2.5 border-b border-border-subtle px-4 py-3.5\">\n <SearchIcon size={18} className=\"text-text-subtle\" />\n <span className=\"flex-1 text-sm text-text-subtle\">{placeholder}</span>\n {searchKbd ? <Kbd>{searchKbd}</Kbd> : null}\n </div>\n <div className=\"p-1.5\">\n {groups.map((group, gi) => (\n <div key={group.heading ?? gi}>\n {group.heading ? (\n <div className=\"px-2.5 pb-1 pt-2 text-xs font-bold uppercase tracking-wide text-text-subtle\">\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const active = item.id === activeId;\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onSelect?.(item)}\n className={cn(\n \"flex w-full items-center gap-2.5 rounded px-2.5 py-2 text-left text-sm [&>svg]:h-[17px] [&>svg]:w-[17px]\",\n active\n ? \"bg-brand-subtle text-brand-text\"\n : \"text-text-default hover:bg-surface-hover\",\n )}\n >\n {item.icon}\n <span className=\"flex-1\">{item.label}</span>\n {item.kbd ? <Kbd active={active}>{item.kbd}</Kbd> : null}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\nCommandPalette.displayName = \"CommandPalette\";\n","import * as React from \"react\";\n\nimport { Avatar, type AvatarColor, type AvatarSize } from \"./avatar\";\nimport { Presence, type PresenceStatus } from \"./presence\";\nimport { cn } from \"./utils\";\n\nexport interface AvatarWithPresenceProps {\n /** 이름 (Avatar alt) */\n name: string;\n /** presence 상태 — offline 이면 아바타 흐림(opacity .55) */\n status?: PresenceStatus;\n /** 마스코트 색 */\n color?: AvatarColor;\n /** 프로필 이미지 URL */\n src?: string;\n /** 아바타 크기 — 미지정 시 Avatar 자체 기본값 사용 */\n size?: AvatarSize;\n /** presence dot 링 색 — 얹히는 표면과 맞춘다(기본 surface-default) */\n ringClassName?: string;\n className?: string;\n}\n\n/** Avatar + Presence 코너 dot 조합(오프라인 흐림 포함) — 사이드바 DM·멤버 리스트 공용 SSOT. */\nexport const AvatarWithPresence = React.forwardRef<\n HTMLSpanElement,\n AvatarWithPresenceProps\n>(\n (\n {\n name,\n status = \"online\",\n color,\n src,\n size,\n ringClassName = \"ring-surface-default\",\n className,\n },\n ref,\n ) => (\n <span ref={ref} className={cn(\"relative inline-flex shrink-0\", className)}>\n <Avatar\n size={size}\n color={color}\n src={src}\n alt={name}\n className={cn(\"ring-0\", status === \"offline\" && \"opacity-[.55]\")}\n />\n <Presence\n status={status}\n size=\"sm\"\n className={cn(\"absolute -bottom-0.5 -right-0.5 ring-2\", ringClassName)}\n />\n </span>\n ),\n);\nAvatarWithPresence.displayName = \"AvatarWithPresence\";\n","import * as React from \"react\";\n\nimport { cva } from \"class-variance-authority\";\n\nimport type { AvatarColor } from \"./avatar\";\nimport { AvatarWithPresence } from \"./avatar-presence\";\nimport { Button } from \"./button\";\nimport { HashIcon, LockIcon, PinIcon, PlusIcon } from \"./icons\";\nimport type { PresenceStatus } from \"./presence\";\nimport { cn } from \"./utils\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarSection — 섹션 헤더(+옵션 추가 버튼) + 아이템 컨테이너 */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 섹션 제목 (예: \"채널\", \"다이렉트 메시지\") */\n title: string;\n /** 헤더 우측 추가(+) 버튼 노출 */\n addable?: boolean;\n /** 추가 버튼 클릭 핸들러 */\n onAdd?: () => void;\n /** 추가 버튼 접근성 레이블 */\n addLabel?: string;\n}\n\nexport const SidebarSection = React.forwardRef<\n HTMLDivElement,\n SidebarSectionProps\n>(({ title, addable, onAdd, addLabel, className, children, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <div className=\"flex items-center gap-1.5 px-2 pb-1.5 pt-2.5 text-xs font-semibold text-text-subtle\">\n {title}\n {addable && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAdd}\n aria-label={addLabel ?? `${title} 추가`}\n className=\"ml-auto h-6 w-6 rounded p-0 text-brand-solid\"\n >\n <PlusIcon size={16} />\n </Button>\n )}\n </div>\n {children}\n </div>\n));\nSidebarSection.displayName = \"SidebarSection\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarChannel — 채널 행 (#/자물쇠 아이콘 + 미읽음 배지) */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarChannelProps extends React.HTMLAttributes<HTMLButtonElement> {\n /** 채널 이름 */\n name: string;\n /** 커스텀 아이콘. 미지정 시 locked에 따라 Lock/Hash */\n icon?: React.ReactNode;\n /** 비공개 채널 — 기본 아이콘을 자물쇠로 */\n locked?: boolean;\n /** 현재 선택된 채널 */\n active?: boolean;\n /** 미읽음 카운트 배지 */\n badge?: string | number;\n}\n\nexport const SidebarChannel = React.forwardRef<\n HTMLButtonElement,\n SidebarChannelProps\n>(({ name, icon, locked, active, badge, className, ...props }, ref) => {\n const resolvedIcon =\n icon ?? (locked ? <LockIcon size={17} /> : <HashIcon size={17} />);\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"flex h-9 w-full cursor-pointer items-center gap-2.5 rounded-lg px-2.5 text-left text-sm hover:bg-sidebar-accent\",\n active\n ? \"bg-sidebar-accent font-semibold text-sidebar-accent-fg\"\n : \"text-sidebar-fg\",\n className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"inline-flex shrink-0\",\n active ? \"text-sidebar-accent-fg\" : \"text-sidebar-fg\",\n )}\n >\n {resolvedIcon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{name}</span>\n {badge != null && badge !== \"\" && (\n <span className=\"ml-auto inline-flex h-[18px] min-w-[18px] shrink-0 items-center justify-center rounded-full bg-brand-solid px-1.5 text-[11px] font-semibold leading-none text-text-on-brand\">\n {badge}\n </span>\n )}\n </button>\n );\n});\nSidebarChannel.displayName = \"SidebarChannel\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarDm — DM 행 (Avatar + Presence 재사용 + 고정 핀) */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarDmProps extends React.HTMLAttributes<HTMLButtonElement> {\n /** 상대 이름 */\n name: string;\n /** presence 상태 */\n status?: PresenceStatus;\n /** 마스코트 색 (Avatar 재사용). 미지정 시 이름 기반 기본값 */\n color?: AvatarColor;\n /** 프로필 이미지 URL (있으면 Avatar가 우선 사용) */\n avatarSrc?: string;\n /** 고정 표시 */\n pinned?: boolean;\n}\n\nexport const SidebarDm = React.forwardRef<HTMLButtonElement, SidebarDmProps>(\n (\n { name, status = \"online\", color, avatarSrc, pinned, className, ...props },\n ref,\n ) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex h-9 w-full cursor-pointer items-center gap-2.5 rounded-lg px-2.5 text-left text-sm text-sidebar-fg hover:bg-sidebar-accent\",\n className,\n )}\n {...props}\n >\n <AvatarWithPresence\n name={name}\n status={status}\n color={color}\n src={avatarSrc}\n size=\"xs\"\n ringClassName=\"ring-sidebar-bg\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{name}</span>\n {pinned && (\n <PinIcon\n size={14}\n className=\"ml-auto shrink-0 text-text-subtle\"\n aria-label=\"고정됨\"\n />\n )}\n </button>\n ),\n);\nSidebarDm.displayName = \"SidebarDm\";\n\n/* -------------------------------------------------------------------------- */\n/* Sidebar — 데이터(props) 기반 사이드바 패널 */\n/* -------------------------------------------------------------------------- */\n\n/** 채널 아이템 데이터 (kind 생략 시 채널로 간주) */\nexport interface SidebarChannelData extends Omit<\n SidebarChannelProps,\n \"className\"\n> {\n kind?: \"channel\";\n /** 고유 키 */\n id?: string;\n}\n\n/** DM 아이템 데이터 */\nexport interface SidebarDmData extends Omit<SidebarDmProps, \"className\"> {\n kind: \"dm\";\n /** 고유 키 */\n id?: string;\n}\n\nexport type SidebarItem = SidebarChannelData | SidebarDmData;\n\nexport interface SidebarSectionData {\n /** 섹션 제목 */\n title: string;\n /** 헤더 추가(+) 버튼 노출 */\n addable?: boolean;\n /** 추가 버튼 핸들러 */\n onAdd?: () => void;\n /** 섹션 아이템 목록 */\n items: SidebarItem[];\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /** 섹션 목록 (헤더 + 채널/DM 아이템) */\n sections: SidebarSectionData[];\n /** panel(기본: 라운드 카드) | shell(앱 셸 임베드: 라운드 없음·우측 보더·풀 높이 — 폭은 소비자가 className으로 지정) */\n variant?: \"panel\" | \"shell\";\n}\n\n/** 사이드바 컨테이너 변형 (스토리 프리뷰·Sidebar 공용 SSOT) */\nexport const sidebarContainerVariants = cva(\n \"border-border-subtle bg-sidebar-bg p-2\",\n {\n variants: {\n variant: {\n panel: \"w-[260px] max-w-full rounded-lg border\",\n shell: \"h-full border-r\",\n },\n },\n defaultVariants: { variant: \"panel\" },\n },\n);\n\n/** 스토리/문서용 사이드바 패널 컨테이너 — Sidebar 컨테이너와 동일 크롬. 앱에서는 Sidebar(nav landmark)를 사용할 것. */\nexport const SidebarPanel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(sidebarContainerVariants({ variant: \"panel\" }), className)}\n {...props}\n />\n));\nSidebarPanel.displayName = \"SidebarPanel\";\n\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ sections, variant = \"panel\", className, ...props }, ref) => (\n <nav\n ref={ref}\n className={cn(sidebarContainerVariants({ variant }), className)}\n {...props}\n >\n {sections.map((section, si) => (\n <SidebarSection\n key={section.title + si}\n title={section.title}\n addable={section.addable}\n onAdd={section.onAdd}\n >\n {section.items.map((item, ii) => {\n const key = item.id ?? item.name + ii;\n if (item.kind === \"dm\") {\n const { kind, id, ...rest } = item;\n void kind;\n void id;\n return <SidebarDm key={key} {...rest} />;\n }\n const { kind, id, ...rest } = item;\n void kind;\n void id;\n return <SidebarChannel key={key} {...rest} />;\n })}\n </SidebarSection>\n ))}\n </nav>\n ),\n);\nSidebar.displayName = \"Sidebar\";\n","import * as React from \"react\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* List — 범용 리스트 컨테이너 */\n/* -------------------------------------------------------------------------- */\n\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n /** 컨테이너 테두리 + 라운드 표시 (기본 true) */\n bordered?: boolean\n /** 행 사이 구분선 표시 (기본 true) */\n divided?: boolean\n}\n\nconst List = React.forwardRef<HTMLUListElement, ListProps>(\n ({ className, bordered = true, divided = true, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn(\n \"bg-surface-default px-4\",\n bordered && \"rounded-lg border border-border-subtle\",\n divided && \"[&>li+li]:border-t [&>li+li]:border-border-subtle\",\n className,\n )}\n {...props}\n />\n )\n },\n)\nList.displayName = \"List\"\n\n/* -------------------------------------------------------------------------- */\n/* ListItem — 범용 행: leading / title / description / trailing */\n/* -------------------------------------------------------------------------- */\n\nexport interface ListItemProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"title\"> {\n /** 좌측 요소(아바타/아이콘 등) */\n leading?: React.ReactNode\n /** 제목(필수) */\n title: React.ReactNode\n /** 보조 설명 */\n description?: React.ReactNode\n /** 우측 요소(배지/버튼/아이콘 등) */\n trailing?: React.ReactNode\n}\n\nconst ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n ({ className, leading, title, description, trailing, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn(\"flex items-center gap-3 py-2.5\", className)}\n {...props}\n >\n {leading != null ? (\n <div className=\"relative shrink-0\">{leading}</div>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-semibold text-text-default\">\n {title}\n </div>\n {description != null ? (\n <div className=\"truncate text-xs text-text-subtle\">\n {description}\n </div>\n ) : null}\n </div>\n {trailing != null ? (\n <div className=\"flex shrink-0 items-center gap-2\">{trailing}</div>\n ) : null}\n </li>\n )\n },\n)\nListItem.displayName = \"ListItem\"\n\nexport { List, ListItem }\n","import * as React from \"react\";\n\nimport { CheckIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\nexport interface SuccessCheckProps\n extends React.HTMLAttributes<HTMLSpanElement> {\n /** 뱃지 지름(px). 기본 22. 체크 아이콘은 이 값의 약 60%로 렌더된다. */\n size?: number;\n}\n\n/**\n * SuccessCheck — brand 솔리드 원형 배지 + 흰 체크.\n * success/green 토큰 없이 완료 상태를 시맨틱 brand 토큰만으로 표현하는 프리미티브.\n */\nexport const SuccessCheck = React.forwardRef<HTMLSpanElement, SuccessCheckProps>(\n ({ size = 22, className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full bg-brand-solid text-text-on-brand\",\n className\n )}\n style={{ width: size, height: size }}\n {...props}\n >\n <CheckIcon size={Math.round(size * 0.6)} strokeWidth={3} />\n </span>\n )\n);\nSuccessCheck.displayName = \"SuccessCheck\";\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Separator — presentation primitive (shadcn/Radix Separator 대응).\n *\n * 선 색은 시맨틱 토큰 `border-border-default`, 두께는 Foundation border-width(1px).\n * - horizontal: 1px 풀폭 라인 (border-t)\n * - vertical: 1px 세로 라인, 부모 높이 채움 (border-l + self-stretch)\n * - label: 가운데 텍스트 + 양옆 flex-1 라인 (항상 horizontal)\n *\n * 접근성: 기본은 role=\"separator\" + aria-orientation. `decorative`면 순수 장식으로\n * 취급해 role=\"none\" 으로 a11y 트리에서 제거한다.\n */\nconst separatorVariants = cva(\"shrink-0 border-border-default\", {\n variants: {\n orientation: {\n horizontal: \"w-full border-t\",\n vertical: \"h-full self-stretch border-l\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n})\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n /** 가운데 라벨. 있으면 텍스트 양옆에 라인을 그린다(라벨형은 항상 수평). */\n label?: React.ReactNode\n /** 순수 장식이면 true — a11y 트리에서 제거(role=\"none\"). 기본 false = 시맨틱 구분선. */\n decorative?: boolean\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = \"horizontal\", label, decorative = false, ...props },\n ref\n ) => {\n const resolvedOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\"\n // 라벨형은 항상 수평.\n const ariaOrientation = label != null ? \"horizontal\" : resolvedOrientation\n\n const a11yProps = decorative\n ? ({ role: \"none\" } as const)\n : ({ role: \"separator\", \"aria-orientation\": ariaOrientation } as const)\n\n // 라벨형 — 라인 + 가운데 텍스트 + 라인.\n if (label != null) {\n return (\n <div\n ref={ref}\n {...a11yProps}\n className={cn(\n \"flex w-full items-center gap-3 text-sm text-text-subtle\",\n className\n )}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex-1 border-t border-border-default\"\n />\n <span className=\"shrink-0\">{label}</span>\n <span\n aria-hidden=\"true\"\n className=\"flex-1 border-t border-border-default\"\n />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n {...a11yProps}\n className={cn(\n separatorVariants({ orientation: resolvedOrientation }),\n className\n )}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = \"Separator\"\n\nexport { Separator, separatorVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Popover — presentation-only floating container for arbitrary content.\n *\n * Click the trigger to toggle; outside-click and ESC close it. Positioning here\n * is a lightweight Tailwind approximation for the design catalog (no @radix-ui /\n * floating-ui) — real portal/collision behavior is wired by the app dev.\n * Visibility is `open` (controlled) or internal state (uncontrolled via\n * `defaultOpen`). `placement` picks the side, `align` slides along that side.\n */\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\"\nexport type PopoverAlign = \"start\" | \"center\" | \"end\"\n\nconst popoverContentVariants = cva(\n // content shell: raised surface · border · radius lg(8) · shadow-popover · padding\n \"absolute z-50 w-max min-w-[220px] max-w-xs rounded-lg border border-border-default bg-surface-default p-4 text-sm text-text-default shadow-popover outline-none\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n align: {\n start: \"\",\n center: \"\",\n end: \"\",\n },\n },\n compoundVariants: [\n // vertical placements (top/bottom) → align along the X axis\n { placement: [\"top\", \"bottom\"], align: \"start\", class: \"left-0\" },\n {\n placement: [\"top\", \"bottom\"],\n align: \"center\",\n class: \"left-1/2 -translate-x-1/2\",\n },\n { placement: [\"top\", \"bottom\"], align: \"end\", class: \"right-0\" },\n // horizontal placements (left/right) → align along the Y axis\n { placement: [\"left\", \"right\"], align: \"start\", class: \"top-0\" },\n {\n placement: [\"left\", \"right\"],\n align: \"center\",\n class: \"top-1/2 -translate-y-1/2\",\n },\n { placement: [\"left\", \"right\"], align: \"end\", class: \"bottom-0\" },\n ],\n defaultVariants: {\n placement: \"bottom\",\n align: \"center\",\n },\n }\n)\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"content\">,\n VariantProps<typeof popoverContentVariants> {\n /** The floating panel content (any node). */\n content: React.ReactNode\n /** The trigger element the popover is anchored to. */\n children: React.ReactNode\n /** Controlled open state. When set, internal state is ignored. */\n open?: boolean\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean\n /** Fired whenever the open state changes. */\n onOpenChange?: (open: boolean) => void\n}\n\nconst Popover = React.forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n className,\n content,\n children,\n placement = \"bottom\",\n align = \"center\",\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...props\n },\n ref\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = openProp !== undefined\n const open = isControlled ? openProp : uncontrolledOpen\n\n const innerRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLDivElement, [])\n\n const contentId = React.useId()\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange]\n )\n\n // Outside-click + ESC close (simple, non-portal). Only active while open.\n React.useEffect(() => {\n if (!open) return\n const onPointerDown = (event: PointerEvent) => {\n const node = innerRef.current\n if (node && !node.contains(event.target as Node)) setOpen(false)\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false)\n }\n document.addEventListener(\"pointerdown\", onPointerDown)\n document.addEventListener(\"keydown\", onKeyDown)\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown)\n document.removeEventListener(\"keydown\", onKeyDown)\n }\n }, [open, setOpen])\n\n return (\n <div\n ref={innerRef}\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n <span\n className=\"inline-flex\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? contentId : undefined}\n onClick={(event) => {\n if (!event.defaultPrevented) setOpen(!open)\n }}\n >\n {children}\n </span>\n {open ? (\n <div\n id={contentId}\n role=\"dialog\"\n aria-modal=\"false\"\n className={cn(popoverContentVariants({ placement, align }))}\n >\n {content}\n </div>\n ) : null}\n </div>\n )\n }\n)\nPopover.displayName = \"Popover\"\n\nexport { Popover, popoverContentVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { Label } from \"./label\"\nimport { cn } from \"./utils\"\n\n/**\n * Field — form-field wrapper (FormField).\n *\n * Lays out a label (+ required mark / optional badge), a control\n * (`children`: input / textarea / select) and a helper or error message\n * in a consistent vertical stack. When `error` is set it takes priority\n * over `hint`, and the control is wired with `aria-invalid` /\n * `aria-describedby` for non-colour accessibility.\n */\n\nconst fieldVariants = cva(\"flex gap-1.5\", {\n variants: {\n orientation: {\n vertical: \"flex-col\",\n horizontal: \"flex-row items-start gap-4\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nexport interface FieldProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof fieldVariants> {\n /** Field label text. Rendered inside a native `<label htmlFor>`. */\n label?: React.ReactNode\n /** id of the control this field labels (also applied to the child). */\n htmlFor?: string\n /** Show a red required marker (`*`, text-danger-text). */\n required?: boolean\n /** Show a subtle \"선택\" badge (reuses the DS Label). Ignored when required. */\n optional?: boolean\n /** Helper text below the control (text-text-subtle). */\n hint?: React.ReactNode\n /** Error text below the control. Takes priority over `hint` (text-danger-text). */\n error?: React.ReactNode\n /** The control: input / textarea / select. */\n children?: React.ReactNode\n}\n\nconst Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n className,\n orientation = \"vertical\",\n label,\n htmlFor,\n required = false,\n optional = false,\n hint,\n error,\n children,\n ...props\n },\n ref\n ) => {\n const reactId = React.useId()\n const controlId = htmlFor ?? reactId\n const isHorizontal = orientation === \"horizontal\"\n\n const messageId = error\n ? `${controlId}-error`\n : hint\n ? `${controlId}-hint`\n : undefined\n\n // Wire the control (single element child) with id + aria attributes.\n const control = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<any>, {\n id: (children.props as any).id ?? controlId,\n \"aria-invalid\": error ? true : (children.props as any)[\"aria-invalid\"],\n \"aria-describedby\":\n [(children.props as any)[\"aria-describedby\"], messageId]\n .filter(Boolean)\n .join(\" \") || undefined,\n })\n : children\n\n return (\n <div\n ref={ref}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n >\n {label ? (\n <div className={cn(isHorizontal && \"w-40 shrink-0 pt-2\")}>\n <label\n htmlFor={controlId}\n className=\"inline-flex items-center gap-1.5 text-sm font-medium text-text-default\"\n >\n <span className=\"inline-flex items-center gap-1\">\n {label}\n {required ? (\n <span aria-hidden=\"true\" className=\"text-danger-text\">\n *\n </span>\n ) : null}\n </span>\n {optional && !required ? (\n <Label variant=\"neutral\">선택</Label>\n ) : null}\n </label>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex min-w-0 flex-col gap-1.5\",\n isHorizontal && \"flex-1\"\n )}\n >\n {control}\n {error ? (\n <p\n id={`${controlId}-error`}\n className=\"flex items-center gap-1 text-sm text-danger-text\"\n >\n {error}\n </p>\n ) : hint ? (\n <p\n id={`${controlId}-hint`}\n className=\"flex items-center gap-1 text-sm text-text-subtle\"\n >\n {hint}\n </p>\n ) : null}\n </div>\n </div>\n )\n }\n)\nField.displayName = \"Field\"\n\nexport { Field, fieldVariants }\n","import * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { ChevronLeftIcon, ChevronRightIcon, SearchIcon, XIcon } from \"./icons\"\nimport { inputVariants } from \"./input\"\nimport { cn } from \"./utils\"\n\nexport interface SearchFieldProps\n extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n > {\n /** Controlled query value. */\n value?: string\n /** Uncontrolled initial value. */\n defaultValue?: string\n /** Fires with the next query string on typing or clear. */\n onValueChange?: (value: string) => void\n /** Placeholder copy. Defaults to \"검색\". */\n placeholder?: string\n /** When a number, renders a \"{n}건\" result count on the trailing side. */\n resultCount?: number\n /** Shows a previous-result nav button when provided. */\n onPrev?: () => void\n /** Shows a next-result nav button when provided. */\n onNext?: () => void\n /** Shows a clear (x) button when provided and the field has a value. */\n onClear?: () => void\n /** Field height/padding scale. Mirrors Input's inputSize. */\n size?: VariantProps<typeof inputVariants>[\"inputSize\"]\n}\n\n/** Small icon button used for trailing nav / clear accessories. */\nconst accessoryButtonClass =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border disabled:pointer-events-none disabled:text-text-disabled\"\n\n/**\n * SearchField — a search input built on Input's visual tokens (inputVariants).\n * Adds a leading search icon plus optional trailing accessories: a result\n * count, previous/next navigation, and a clear (x) button. Query state is\n * controlled via `value`/`onValueChange` or uncontrolled via `defaultValue`.\n */\nconst SearchField = React.forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n className,\n value,\n defaultValue,\n onValueChange,\n placeholder = \"검색\",\n resultCount,\n onPrev,\n onNext,\n onClear,\n size,\n disabled,\n ...props\n },\n ref\n ) => {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? \"\"\n )\n const currentValue = isControlled ? value : internalValue\n\n const innerRef = React.useRef<HTMLInputElement>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement)\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n }\n\n const handleClear = () => {\n commit(\"\")\n onClear?.()\n innerRef.current?.focus()\n }\n\n const hasCount = typeof resultCount === \"number\"\n const hasNav = Boolean(onPrev || onNext)\n const showClear = Boolean(onClear) && currentValue.length > 0\n const showAccessories = hasCount || hasNav || showClear\n const showDivider = hasCount && (hasNav || showClear)\n\n return (\n <div\n className={cn(\n inputVariants({ inputSize: size }),\n \"cursor-text focus-within:border-border-focus focus-within:ring-2 focus-within:ring-brand-border focus-within:ring-offset-2 focus-within:ring-offset-bg-base\",\n disabled &&\n \"cursor-not-allowed bg-surface-sunken text-text-disabled\",\n className\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex size-5 shrink-0 items-center justify-center text-text-subtle [&_svg]:size-5\"\n >\n <SearchIcon />\n </span>\n\n <input\n ref={innerRef}\n type=\"search\"\n role=\"searchbox\"\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(event) => commit(event.target.value)}\n className=\"h-full w-full min-w-0 bg-transparent text-text-default outline-none placeholder:text-text-subtle disabled:cursor-not-allowed disabled:text-text-disabled [&::-webkit-search-cancel-button]:hidden\"\n {...props}\n />\n\n {showAccessories ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {hasCount ? (\n <span className=\"shrink-0 whitespace-nowrap text-sm tabular-nums text-text-subtle\">\n {resultCount}건\n </span>\n ) : null}\n\n {showDivider ? (\n <span aria-hidden=\"true\" className=\"h-4 w-px bg-border-subtle\" />\n ) : null}\n\n {onPrev ? (\n <button\n type=\"button\"\n aria-label=\"이전 결과\"\n disabled={disabled}\n onClick={onPrev}\n className={accessoryButtonClass}\n >\n <ChevronLeftIcon size={16} />\n </button>\n ) : null}\n\n {onNext ? (\n <button\n type=\"button\"\n aria-label=\"다음 결과\"\n disabled={disabled}\n onClick={onNext}\n className={accessoryButtonClass}\n >\n <ChevronRightIcon size={16} />\n </button>\n ) : null}\n\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"검색어 지우기\"\n disabled={disabled}\n onClick={handleClear}\n className={accessoryButtonClass}\n >\n <XIcon size={16} />\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n }\n)\nSearchField.displayName = \"SearchField\"\n\nexport { SearchField }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\nimport { XIcon } from \"./icons\"\n\n/**\n * Banner — dismissible, full-width inline notification.\n *\n * Distinct from Alert: a Banner spans the full width of its container and is\n * meant for persistent, dismissible announcements (release notes, billing\n * notices, maintenance windows). Colour comes only from semantic variant\n * tokens; the icon + close button inherit the variant text colour.\n */\nconst bannerVariants = cva(\n \"flex w-full items-start gap-3 rounded-lg border p-4 text-sm\",\n {\n variants: {\n variant: {\n neutral: \"border-border-default bg-surface-sunken text-text-default\",\n brand: \"border-brand-border bg-brand-subtle text-brand-text\",\n danger: \"border-danger-border bg-danger-subtle text-danger-text\",\n },\n },\n defaultVariants: {\n variant: \"neutral\",\n },\n }\n)\n\nexport interface BannerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof bannerVariants> {\n /** Leading status icon. Inherits the variant text colour. */\n icon?: React.ReactNode\n /** Emphasised heading rendered above the body (children). */\n title?: React.ReactNode\n /** When true, renders a trailing close button that calls `onDismiss`. */\n dismissible?: boolean\n /** Fired when the close button is pressed. */\n onDismiss?: () => void\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n {\n className,\n variant,\n icon,\n title,\n dismissible = false,\n onDismiss,\n children,\n role = \"status\",\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={role}\n className={cn(bannerVariants({ variant }), className)}\n {...props}\n >\n {icon ? (\n <span\n aria-hidden=\"true\"\n className=\"mt-0.5 flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\"\n >\n {icon}\n </span>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p className=\"font-semibold leading-5\">{title}</p>\n ) : null}\n {children ? (\n <div className={cn(\"leading-5\", title && \"mt-1\")}>{children}</div>\n ) : null}\n </div>\n {dismissible ? (\n <button\n type=\"button\"\n aria-label=\"닫기\"\n onClick={onDismiss}\n className=\"-m-1 inline-flex size-6 shrink-0 items-center justify-center rounded text-current opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\"\n >\n <XIcon className=\"size-4\" />\n </button>\n ) : null}\n </div>\n )\n }\n)\nBanner.displayName = \"Banner\"\n\nexport { Banner, bannerVariants }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/button.tsx","../src/input.tsx","../src/textarea.tsx","../src/card.tsx","../src/scroll-area.tsx","../src/label.tsx","../src/skeleton.tsx","../src/progress.tsx","../src/checkbox.tsx","../src/radio.tsx","../src/toggle.tsx","../src/chip.tsx","../src/reaction-pill.tsx","../src/alert.tsx","../src/presence.tsx","../src/avatar.tsx","../src/tooltip.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/dialog.tsx","../src/sheet.tsx","../src/tabs.tsx","../src/table.tsx","../src/pagination.tsx","../src/segment.tsx","../src/toast.tsx","../src/empty-state.tsx","../src/icons/_base.tsx","../src/icons/check.tsx","../src/icons/chevron-down.tsx","../src/icons/chevron-left.tsx","../src/icons/chevron-right.tsx","../src/icons/hash.tsx","../src/icons/lock.tsx","../src/icons/pin.tsx","../src/icons/plus.tsx","../src/icons/search.tsx","../src/icons/x.tsx","../src/accordion.tsx","../src/charts.tsx","../src/command-palette.tsx","../src/avatar-presence.tsx","../src/navigation.tsx","../src/list.tsx","../src/success.tsx","../src/separator.tsx","../src/popover.tsx","../src/field.tsx","../src/search-field.tsx","../src/banner.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","jsxs","React3","React4","React5","ScrollAreaPrimitive","React6","React7","React8","React9","React10","React11","CheckIcon","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","React23","React24","CloseIcon","React25","ChevronLeftIcon","ChevronRightIcon","React26","React27","React28","React29","React30","kind","id","rest","React31","React32","React33","React34","React35","React36","React37"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Class name utility (clsx + tailwind-merge)\n */\n\nimport { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n// 정본(comp-button): radius 4(xs) · gap 8 · font 16(button2) · icon 20 · border 1px.\n// 사이즈는 height·padding-x만 차등(font/icon/radius 전 사이즈 공통). focus 링=border-focus.\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-base font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-5 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n primary:\n \"bg-brand-solid text-text-on-brand hover:bg-brand-solid-hover active:bg-brand-solid-pressed\",\n neutral:\n \"border border-border-default bg-surface-default text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n ghost:\n \"text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n danger:\n \"bg-danger-solid text-text-on-brand hover:bg-danger-solid-hover\",\n \"danger-outline\":\n \"border border-danger-border bg-transparent text-danger-text hover:bg-danger-subtle active:bg-danger-subtle\",\n },\n size: {\n sm: \"h-9 px-3\", // 36px · px 12\n md: \"h-10 px-4\", // 40px · px 16 (기본)\n lg: \"h-12 px-5\", // 48px · px 20\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst inputVariants = cva(\n \"flex w-full items-center rounded border bg-surface-default text-text-default transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-text-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:placeholder:text-text-disabled\",\n {\n variants: {\n state: {\n default:\n \"border-border-default hover:border-border-strong focus-visible:border-border-focus focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:border-danger-border focus-visible:ring-danger-border\",\n },\n inputSize: {\n sm: \"h-9 gap-1.5 px-2.5 text-sm\",\n md: \"h-10 gap-2 px-3 text-base\",\n lg: \"h-12 gap-2.5 px-3.5 text-base\",\n },\n },\n defaultVariants: {\n state: \"default\",\n inputSize: \"md\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof inputVariants> {\n /** Presentational leading icon (e.g. search). Rendered inside the field. */\n startIcon?: React.ReactNode\n /** Presentational trailing icon or affix. */\n endIcon?: React.ReactNode\n /** Helper / error text rendered below the field. */\n helperText?: React.ReactNode\n}\n\n/**\n * Presentation-only input. Wraps the native <input> so leading/trailing icons\n * and helper text render with the field. Error state pairs colour with a\n * status icon + helper text for non-colour accessibility.\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type = \"text\",\n state,\n inputSize,\n startIcon,\n endIcon,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedby,\n ...props\n },\n ref\n ) => {\n const isError = state === \"error\"\n const reactId = React.useId()\n const helperId = helperText ? `${id ?? reactId}-helper` : undefined\n const describedBy =\n [ariaDescribedby, helperId].filter(Boolean).join(\" \") || undefined\n\n return (\n <div className=\"flex w-full flex-col gap-1.5\">\n <div\n className={cn(\n inputVariants({ state, inputSize }),\n (startIcon || endIcon) && \"cursor-text\",\n className\n )}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {startIcon}\n </span>\n ) : null}\n <input\n id={id ?? reactId}\n type={type}\n ref={ref}\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n className=\"h-full w-full min-w-0 bg-transparent outline-none placeholder:text-text-subtle disabled:cursor-not-allowed disabled:text-text-disabled\"\n {...props}\n />\n {endIcon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {endIcon}\n </span>\n ) : null}\n </div>\n {helperText ? (\n <p\n id={helperId}\n className={cn(\n \"flex items-center gap-1 text-sm [&_svg]:size-4\",\n isError ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {isError ? (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"shrink-0\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm-.75-11.5a.75.75 0 0 1 1.5 0v4a.75.75 0 0 1-1.5 0v-4ZM10 14.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : null}\n {helperText}\n </p>\n ) : null}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst textareaVariants = cva(\n \"flex w-full resize-none rounded border bg-surface-default text-base text-text-default transition-colors placeholder:text-text-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n state: {\n default:\n \"border-border-default focus-visible:border-border-focus focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:border-danger-border focus-visible:ring-danger-border\",\n },\n size: {\n sm: \"min-h-[64px] p-2 text-sm\",\n md: \"min-h-[80px] p-3 text-base\",\n lg: \"min-h-[120px] p-4 text-base\",\n },\n },\n defaultVariants: {\n state: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface TextareaProps\n extends Omit<React.ComponentProps<\"textarea\">, \"size\">,\n VariantProps<typeof textareaVariants> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, state, size, \"aria-invalid\": ariaInvalid, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n aria-invalid={ariaInvalid ?? (state === \"error\" ? true : undefined)}\n className={cn(textareaVariants({ state, size, className }))}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea, textareaVariants }\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst cardVariants = cva(\"rounded-lg text-text-default transition-colors\", {\n variants: {\n variant: {\n default: \"border border-border-subtle bg-surface-default shadow-card\",\n raised: \"border border-border-subtle bg-surface-raised shadow-md\",\n outline: \"border border-border-default bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, className }))}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-3 p-5\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"font-semibold leading-none tracking-tight text-text-strong\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-text-subtle\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-5 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-3 p-5 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n cardVariants,\n};\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"./utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-slate-300 hover:bg-slate-400\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst labelVariants = cva(\n \"inline-flex items-center justify-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap [&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n brand: \"bg-brand-subtle text-brand-text\",\n danger: \"bg-danger-subtle text-danger-text\",\n neutral:\n \"bg-[var(--comp-label-neutral-bg)] text-[var(--comp-label-neutral-text)]\",\n },\n },\n defaultVariants: {\n variant: \"neutral\",\n },\n },\n);\n\nexport interface LabelProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof labelVariants> {}\n\nconst Label = React.forwardRef<HTMLSpanElement, LabelProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(labelVariants({ variant, className }))}\n {...props}\n />\n );\n },\n);\nLabel.displayName = \"Label\";\n\nexport { Label, labelVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst skeletonVariants = cva(\"animate-pulse bg-border-subtle\", {\n variants: {\n variant: {\n text: \"rounded-lg h-4 w-full\",\n circle: \"rounded-full\",\n rect: \"rounded-lg\",\n },\n },\n defaultVariants: {\n variant: \"rect\",\n },\n});\n\nexport interface SkeletonProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonVariants> {}\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n aria-label=\"로딩 중\"\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n >\n <span className=\"sr-only\">로딩 중</span>\n </div>\n );\n },\n);\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton, skeletonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst progressTrackVariants = cva(\n \"relative w-full overflow-hidden rounded-full bg-border-subtle\",\n {\n variants: {\n size: {\n md: \"h-1.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst progressFillVariants = cva(\n \"h-full rounded-full bg-brand-solid transition-[width] duration-300 ease-out\",\n {\n variants: {\n indeterminate: {\n true: \"w-full animate-pulse rounded-full\",\n false: \"\",\n },\n },\n defaultVariants: {\n indeterminate: false,\n },\n },\n);\n\nexport interface ProgressProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof progressTrackVariants> {\n /** Progress value between 0 and 100. Ignored when `indeterminate` is true. */\n value?: number;\n /** Shows an ongoing, unquantified progress animation. */\n indeterminate?: boolean;\n /** Accessible label describing what is loading. */\n label?: string;\n}\n\nfunction clamp(value: number) {\n if (Number.isNaN(value)) return 0;\n return Math.min(100, Math.max(0, value));\n}\n\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n size,\n value = 0,\n indeterminate = false,\n label = \"Loading\",\n ...props\n },\n ref,\n ) => {\n const pct = clamp(value);\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : 100}\n aria-valuenow={indeterminate ? undefined : pct}\n aria-valuetext={indeterminate ? \"Loading\" : `${pct}%`}\n className={cn(progressTrackVariants({ size, className }))}\n {...props}\n >\n <div\n className={cn(progressFillVariants({ indeterminate }))}\n style={indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\nexport { Progress, progressTrackVariants, progressFillVariants };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Checkbox — 20px box, radius xs(4px), 2px border, 12px check icon.\n * off = border-border-strong / bg-surface-default\n * on = bg-brand-solid + text-text-on-brand check\n * error= border-danger-border\n *\n * Native input[type=checkbox]를 sr-only로 두고 span 박스를 시각 스타일링한다.\n * 제어(checked) / 비제어(defaultChecked) 모두 지원하는 프리젠테이션 구현.\n */\nconst checkboxVariants = cva(\n \"relative flex size-5 shrink-0 items-center justify-center rounded border-2 transition-colors peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-base peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n {\n variants: {\n state: {\n default:\n \"border-border-strong bg-surface-default peer-focus-visible:ring-border-focus peer-checked:border-brand-solid peer-checked:bg-brand-solid\",\n error:\n \"border-danger-border bg-surface-default peer-focus-visible:ring-danger-solid peer-checked:border-danger-border peer-checked:bg-danger-solid\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\ntype CheckboxVariantProps = VariantProps<typeof checkboxVariants>\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n CheckboxVariantProps {\n /** 우측에 표시할 라벨 (문자열/노드 모두 허용) */\n label?: React.ReactNode\n /** 에러 상태 (state=\"error\"와 동일, 편의용) */\n error?: boolean\n}\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-3\", className)}\n >\n <path\n d=\"M2.5 6.2 5 8.7l4.5-5\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { className, state, error, label, id, disabled, \"aria-invalid\": ariaInvalid, ...props },\n ref\n ) => {\n const reactId = React.useId()\n const inputId = id ?? reactId\n const resolvedState = error ? \"error\" : state ?? \"default\"\n const isInvalid = resolvedState === \"error\"\n\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"group inline-flex items-start gap-2 text-sm text-text-default\",\n disabled\n ? \"cursor-not-allowed text-text-disabled\"\n : \"cursor-pointer\"\n )}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n disabled={disabled}\n aria-invalid={ariaInvalid ?? (isInvalid || undefined)}\n className=\"peer sr-only\"\n {...props}\n />\n <span\n className={cn(\n checkboxVariants({ state: resolvedState }),\n // 여러 줄 라벨에서 첫 줄 글자와 광학적으로 맞추기 위한 미세 보정(2px)\n \"mt-0.5 peer-checked:[&>svg]:opacity-100\",\n className\n )}\n >\n <CheckIcon className=\"text-text-on-brand opacity-0 transition-opacity\" />\n </span>\n {label != null && <span className=\"select-none\">{label}</span>}\n </label>\n )\n }\n)\nCheckbox.displayName = \"Checkbox\"\n\nexport { Checkbox, checkboxVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* RadioGroup */\n/* -------------------------------------------------------------------------- */\n\ninterface RadioGroupContextValue {\n name?: string\n value?: string\n onValueChange?: (value: string) => void\n disabled?: boolean\n error?: boolean\n}\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n null\n)\n\nexport interface RadioGroupProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** name shared by all radios in the group */\n name?: string\n /** controlled selected value */\n value?: string\n /** uncontrolled default selected value */\n defaultValue?: string\n onValueChange?: (value: string) => void\n /** disables every radio in the group */\n disabled?: boolean\n /** renders every radio in the error state */\n error?: boolean\n}\n\nconst RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n name,\n value,\n defaultValue,\n onValueChange,\n disabled,\n error,\n children,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : internalValue\n\n const handleValueChange = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange]\n )\n\n const ctx = React.useMemo<RadioGroupContextValue>(\n () => ({\n name,\n value: currentValue,\n onValueChange: handleValueChange,\n disabled,\n error,\n }),\n [name, currentValue, handleValueChange, disabled, error]\n )\n\n return (\n <RadioGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-invalid={error || undefined}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n )\n }\n)\nRadioGroup.displayName = \"RadioGroup\"\n\n/* -------------------------------------------------------------------------- */\n/* Radio */\n/* -------------------------------------------------------------------------- */\n\nconst radioVariants = cva(\n \"relative grid h-5 w-5 shrink-0 place-items-center rounded-full border-2 bg-surface-default transition-colors peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-base disabled:cursor-not-allowed\",\n {\n variants: {\n state: {\n default:\n \"border-border-strong peer-focus-visible:ring-border-focus peer-checked:border-brand-border\",\n error:\n \"border-danger-border peer-focus-visible:ring-danger-solid peer-checked:border-danger-border\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\nconst radioDotVariants = cva(\n \"h-2 w-2 rounded-full scale-0 transition-transform peer-checked:scale-100\",\n {\n variants: {\n state: {\n default: \"bg-brand-solid\",\n error: \"bg-danger-solid\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\nexport interface RadioProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\"\n >,\n VariantProps<typeof radioVariants> {\n /** required option value */\n value: string\n /** visible label rendered next to the control */\n label?: React.ReactNode\n /** optional helper/description text under the label */\n description?: React.ReactNode\n /** force error styling on this single radio */\n error?: boolean\n onValueChange?: (value: string) => void\n}\n\nconst Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n id,\n value,\n label,\n description,\n name: nameProp,\n checked: checkedProp,\n disabled: disabledProp,\n error: errorProp,\n onValueChange,\n onChange,\n onClick,\n ...props\n },\n ref\n ) => {\n const group = React.useContext(RadioGroupContext)\n const reactId = React.useId()\n const inputId = id ?? reactId\n\n const isGroup = group != null\n const isControlled = checkedProp !== undefined\n\n // 단독(그룹 아님·checked 미지정) 라디오의 uncontrolled 상태\n const [internalChecked, setInternalChecked] = React.useState(false)\n\n const name = nameProp ?? group?.name\n const disabled = disabledProp ?? group?.disabled ?? false\n const error = errorProp ?? group?.error ?? false\n const checked = isControlled\n ? checkedProp\n : isGroup\n ? group.value === value\n : internalChecked\n\n const state = error ? \"error\" : \"default\"\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (event.target.checked) {\n onValueChange?.(value)\n group?.onValueChange?.(value)\n }\n }\n\n // 단독 라디오는 이미 선택된 상태에서 다시 클릭하면 해제(토글)한다.\n // 네이티브 라디오는 재클릭 시 change 이벤트가 없으므로 click 에서 처리.\n const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event)\n if (!isControlled && !isGroup) {\n setInternalChecked((prev) => !prev)\n }\n }\n\n const control = (\n <span className=\"relative inline-flex\">\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n aria-invalid={error || undefined}\n onChange={handleChange}\n onClick={handleClick}\n className=\"peer sr-only\"\n {...props}\n />\n {/* 테두리 링 — input의 형제라 peer-checked 로 색이 바뀐다 */}\n <span\n aria-hidden=\"true\"\n className={cn(\n radioVariants({ state }),\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"\n )}\n />\n {/* 가운데 점 — input의 형제여야 peer-checked:scale-100 이 닿는다.\n 링 위에 절대 위치로 중앙 정렬 */}\n <span\n aria-hidden=\"true\"\n className={cn(\n radioDotVariants({ state }),\n \"pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\",\n disabled && \"opacity-50\"\n )}\n />\n </span>\n )\n\n if (!label && !description) {\n return control\n }\n\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"flex items-start gap-2\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n className\n )}\n >\n {control}\n <span className=\"flex flex-col gap-0.5\">\n {label ? (\n <span\n className={cn(\n \"text-sm leading-5\",\n disabled ? \"text-text-disabled\" : \"text-text-default\"\n )}\n >\n {label}\n </span>\n ) : null}\n {description ? (\n <span\n className={cn(\n \"text-xs leading-4\",\n error ? \"text-danger-text\" : \"text-text-subtle\"\n )}\n >\n {description}\n </span>\n ) : null}\n </span>\n </label>\n )\n }\n)\nRadio.displayName = \"Radio\"\n\nexport { Radio, RadioGroup, radioVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst toggleTrackVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer items-center rounded-full p-0.5 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:opacity-50 data-[state=off]:bg-surface-sunken data-[state=on]:bg-brand-solid\",\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nconst toggleThumbVariants = cva(\n \"pointer-events-none block rounded-full bg-surface-default shadow-sm transition-transform data-[state=off]:translate-x-0\",\n {\n variants: {\n size: {\n sm: \"h-4 w-4 data-[state=on]:translate-x-4\",\n md: \"h-5 w-5 data-[state=on]:translate-x-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport interface ToggleProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\" | \"type\"\n >,\n VariantProps<typeof toggleTrackVariants> {\n /** Controlled on/off state. */\n checked?: boolean\n /** Uncontrolled initial state. */\n defaultChecked?: boolean\n /** Fired with the next boolean state when toggled. */\n onCheckedChange?: (checked: boolean) => void\n}\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n size,\n checked,\n defaultChecked = false,\n onCheckedChange,\n disabled,\n onClick,\n ...props\n },\n ref\n ) => {\n const isControlled = checked !== undefined\n const [internalChecked, setInternalChecked] =\n React.useState(defaultChecked)\n const isOn = isControlled ? checked : internalChecked\n const state = isOn ? \"on\" : \"off\"\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (event.defaultPrevented || disabled) return\n const next = !isOn\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n data-state={state}\n disabled={disabled}\n onClick={handleClick}\n className={cn(toggleTrackVariants({ size, className }))}\n {...props}\n >\n <span data-state={state} className={cn(toggleThumbVariants({ size }))} />\n </button>\n )\n }\n)\nToggle.displayName = \"Toggle\"\n\nexport { Toggle, toggleTrackVariants, toggleThumbVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst chipVariants = cva(\n \"inline-flex h-8 items-center gap-1 rounded border px-3 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"border-border-default bg-surface-default text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n selected:\n \"border-brand-border bg-brand-subtle text-brand-text font-bold hover:bg-brand-subtle active:bg-brand-subtle\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst CheckIcon = () => (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M13 4.5 6.5 11.5 3 8\" />\n </svg>\n)\n\nconst CloseIcon = () => (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 4l8 8M12 4l-8 8\" />\n </svg>\n)\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof chipVariants> {\n /** Show a leading check icon when the chip is selected. */\n showSelectedIcon?: boolean\n /** Render a trailing remove (x) affordance. */\n removable?: boolean\n /** Called when the remove affordance is activated. */\n onRemove?: () => void\n /** Accessible label for the remove control. */\n removeLabel?: string\n}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(\n (\n {\n className,\n variant,\n showSelectedIcon = false,\n removable = false,\n onRemove,\n removeLabel = \"Remove\",\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n return (\n <button\n type=\"button\"\n ref={ref}\n disabled={disabled}\n aria-pressed={variant === \"selected\"}\n className={cn(chipVariants({ variant }), removable && \"pr-2\", className)}\n {...props}\n >\n {showSelectedIcon && variant === \"selected\" ? <CheckIcon /> : null}\n <span className=\"truncate\">{children}</span>\n {removable ? (\n <span\n role=\"button\"\n aria-label={removeLabel}\n tabIndex={disabled ? -1 : 0}\n onClick={(e) => {\n e.stopPropagation()\n if (!disabled) onRemove?.()\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) onRemove?.()\n }\n }}\n className=\"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-full text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\"\n >\n <CloseIcon />\n </span>\n ) : null}\n </button>\n )\n }\n)\nChip.displayName = \"Chip\"\n\nexport { Chip, chipVariants }\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst reactionPillVariants = cva(\n \"inline-flex items-center rounded-lg border font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n state: {\n default:\n \"border-border-subtle bg-surface-default text-text-default hover:border-border-default active:bg-surface-pressed\",\n selected:\n \"border-brand-border bg-brand-subtle text-brand-text hover:bg-brand-subtle active:bg-brand-subtle\",\n },\n size: {\n sm: \"h-[22px] gap-[3px] px-[7px] text-[11px]\",\n md: \"h-[26px] gap-[5px] px-[9px] text-xs\",\n },\n },\n defaultVariants: {\n state: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport interface ReactionPillProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n Omit<VariantProps<typeof reactionPillVariants>, \"state\"> {\n /** The reaction emoji. */\n emoji: string;\n /** Number of reactors shown next to the emoji. */\n count: number;\n /** True when the current user has reacted — brand-tinted, sets aria-pressed. */\n active?: boolean;\n}\n\n/**\n * ReactionPill — an emoji reaction chip (emoji + count).\n *\n * Presentation-only: it renders one reaction and toggles it via `onClick`,\n * with `active` reflecting whether the current user reacted (brand tint +\n * `aria-pressed`). The reaction list, the \"add reaction\" affordance and all\n * mutation / tooltip logic stay in the consumer. Rendered as a `<button>`.\n */\nconst ReactionPill = React.forwardRef<HTMLButtonElement, ReactionPillProps>(\n ({ className, emoji, count, active = false, size, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n ref={ref}\n aria-pressed={active}\n className={cn(\n reactionPillVariants({\n state: active ? \"selected\" : \"default\",\n size,\n }),\n className,\n )}\n {...props}\n >\n <span className=\"leading-none\">{emoji}</span>\n <span className=\"tabular-nums\">{count}</span>\n </button>\n );\n },\n);\nReactionPill.displayName = \"ReactionPill\";\n\nexport { ReactionPill, reactionPillVariants };\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\nconst alertVariants = cva(\n \"relative flex gap-3 rounded-lg border p-3 [&>svg]:size-5 [&>svg]:shrink-0 [&>svg]:mt-0.5\",\n {\n variants: {\n variant: {\n info: \"bg-surface-sunken border-border-default text-text-default [&>svg]:text-text-subtle\",\n danger:\n \"bg-danger-subtle border-danger-border text-danger-text [&>svg]:text-danger-text\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n)\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, role = \"alert\", ...props }, ref) => (\n <div\n ref={ref}\n role={role}\n className={cn(alertVariants({ variant, className }))}\n {...props}\n />\n )\n)\nAlert.displayName = \"Alert\"\n\nexport type AlertTitleProps = React.HTMLAttributes<HTMLParagraphElement>\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, AlertTitleProps>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-sm font-semibold leading-5 text-text-strong\",\n className\n )}\n {...props}\n />\n )\n)\nAlertTitle.displayName = \"AlertTitle\"\n\nexport type AlertDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n AlertDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"mt-1 text-sm leading-5 [&_p]:leading-5\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants }\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport type PresenceStatus = \"online\" | \"away\" | \"offline\" | \"remote\";\nexport type PresenceSize = \"sm\" | \"md\" | \"lg\";\n\nconst SIZE_PX: Record<PresenceSize, number> = { sm: 12, md: 16, lg: 20 };\n\nexport const PRESENCE_LABEL: Record<PresenceStatus, string> = {\n online: \"온라인\",\n away: \"자리비움\",\n offline: \"오프라인\",\n remote: \"재택\",\n};\n\n// 재택(remote) 마크 — 집. fill(채움) 아이콘. currentColor 상속.\nfunction HouseMark({ px }: { px: number }) {\n const s = Math.round(px * 0.64);\n return (\n <svg\n width={s}\n height={s}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden\n >\n <path d=\"M12 3 4 9v12h5v-7h6v7h5V9z\" />\n </svg>\n );\n}\n\nexport interface PresenceProps extends React.HTMLAttributes<HTMLSpanElement> {\n status?: PresenceStatus;\n size?: PresenceSize;\n}\n\n// 상태를 색이 아니라 \"형태/마크\"로도 구분(색 의존 최소). 색은 인디고·모노톤만.\nexport function Presence({\n status = \"online\",\n size = \"md\",\n className,\n ...props\n}: PresenceProps) {\n const px = SIZE_PX[size];\n const label = PRESENCE_LABEL[status];\n\n const base =\n \"inline-flex shrink-0 items-center justify-center rounded-full font-extrabold leading-none\";\n\n // 가이드 매핑: online/remote=인디고 · away=연회색 dot+어두운 Z · offline=회색 채움(hollow 아님).\n // 오프라인 \"흐림\"은 dot이 아니라 아바타에 적용(OnAvatar 참고).\n // presence-* 전용 토큰(tokens.css): away bg 라이트=gray-50·다크=gray-30, away fg 라이트=white·다크=gray-90,\n // offline=gray-40 양 테마 동일 — 상태 표시 색은 시맨틱 수렴 없이 원 값 보존.\n const STATUS_STYLE: Record<PresenceStatus, string> = {\n online: \"bg-brand-solid text-text-on-brand\",\n away: \"bg-presence-away-bg text-presence-away-fg\",\n offline: \"bg-presence-offline\",\n remote: \"bg-brand-solid text-text-on-brand\",\n };\n\n return (\n <span\n role=\"img\"\n aria-label={label}\n title={label}\n className={cn(base, STATUS_STYLE[status], className)}\n style={{ width: px, height: px, fontSize: Math.round(px * 0.58) }}\n {...props}\n >\n {status === \"away\" && \"Z\"}\n {status === \"remote\" && <HouseMark px={px} />}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Presence, type PresenceStatus } from \"./presence\";\n\n/**\n * Avatar — 프로필 미설정 시 WITIM 마스코트 기본 이미지(이니셜 미사용).\n * presence 표시는 공용 Presence 컴포넌트를 그대로 사용(온라인/자리비움 Z/재택 집/오프라인).\n */\n\n/* -------------------------------------------------------------------------- */\n/* Avatar root */\n/* -------------------------------------------------------------------------- */\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-surface-sunken align-middle ring-2 ring-border-subtle select-none\",\n {\n variants: {\n size: {\n xs: \"h-6 w-6 text-[10px]\", // 24px\n sm: \"h-8 w-8 text-sm\", // 32px · font14 기본\n md: \"h-10 w-10 text-base\", // 40px\n lg: \"h-12 w-12 text-lg\", // 48px\n xl: \"h-16 w-16 text-2xl\", // 64px\n },\n },\n defaultVariants: {\n size: \"sm\",\n },\n },\n);\n\ntype AvatarSize = NonNullable<VariantProps<typeof avatarVariants>[\"size\"]>;\n\n// presence는 공용 Presence 컴포넌트 스펙을 그대로 따름(online/away/offline/remote).\ntype AvatarPresence = PresenceStatus;\n\nexport interface AvatarProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n /** 이미지 소스. 없거나 로드 실패 시 마스코트 기본 이미지 렌더(이니셜 미사용) */\n src?: string;\n /** 대체 텍스트 및 마스코트 색 배정 시드가 되는 이름 */\n alt?: string;\n /** 마스코트 색 — 사용자가 직접 선택(6색 동등). 미지정 시 이름 기반 기본값. */\n color?: AvatarColor;\n /** presence 상태 badge — 공용 Presence 컴포넌트로 렌더(자리비움 Z · 재택 집 · 오프라인 흐림) */\n presence?: AvatarPresence;\n}\n\n/** 아바타 사이즈 → Presence badge 사이즈(sm 12 / md 16 / lg 20px) 대응 */\nconst presenceSizeForAvatar: Record<AvatarSize, \"sm\" | \"md\" | \"lg\"> = {\n xs: \"sm\",\n sm: \"sm\",\n md: \"md\",\n lg: \"md\",\n xl: \"lg\",\n};\n\n/* -------------------------------------------------------------------------- */\n/* Mascot — 프로필 미설정 시 기본 이미지 (WITIM Design Guide) */\n/* 이름/ID 해시로 마스코트 색을 배정 → 같은 사람 = 항상 같은 색, 사진 없어도 구분. */\n/* 색은 avatar 전용 장식(semantic 토큰 아님) — 마스코트 SVG 자산에 내장돼 자연 격리됨. */\n/* -------------------------------------------------------------------------- */\n\n/** 마스코트 색 — 6색 모두 동등한 위계. 사용자가 직접 선택하고 이후 변경 가능. */\nexport type AvatarColor =\n | \"gray\"\n | \"lavender\"\n | \"mint\"\n | \"peach\"\n | \"pink\"\n | \"sky\";\n\n// Vite 전용 import.meta.glob — 직접 호출 형태를 유지해야 Vite가 빌드타임에 변환함\n// (WITIM 앱=Vite는 마스코트 로드). tsup/비-Vite 빌드에선 undefined() 호출로 바뀌어\n// throw → catch로 빈 객체 폴백 → 공개 패키지 소비자는 색/이니셜 아바타로 동작.\nlet MASCOTS: Record<string, string> = {};\ntry {\n MASCOTS = import.meta.glob(\n \"../../design-system/avatars/avatar-mascot-*.svg\",\n { query: \"?url\", import: \"default\", eager: true },\n ) as Record<string, string>;\n} catch {\n MASCOTS = {};\n}\n\n// 파일명 → 색 키 매핑 (avatar-mascot-lavender.svg → \"lavender\")\nconst MASCOT_BY_COLOR: Partial<Record<AvatarColor, string>> = {};\nfor (const [path, url] of Object.entries(MASCOTS)) {\n const m = path.match(/avatar-mascot-([a-z]+)\\.svg$/);\n if (m) MASCOT_BY_COLOR[m[1] as AvatarColor] = url;\n}\n\n/** 선택 가능한 마스코트 색 목록 (동등 — 색상 선택 UI 구성용). */\nexport const AVATAR_COLORS = Object.keys(\n MASCOT_BY_COLOR,\n).sort() as AvatarColor[];\n\n/** 색 미선택 시 시드(이름/ID) 기반 기본 배정 (초기 제안값 — 사용자가 바꿀 수 있음). */\nfunction defaultColor(seed?: string): AvatarColor {\n if (AVATAR_COLORS.length === 0) return \"gray\";\n const s = seed ?? \"\";\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0;\n return AVATAR_COLORS[h % AVATAR_COLORS.length]!;\n}\n\nfunction mascotUrl(color?: AvatarColor, seed?: string): string {\n const c = color ?? defaultColor(seed);\n return MASCOT_BY_COLOR[c] ?? MASCOT_BY_COLOR[AVATAR_COLORS[0]!] ?? \"\";\n}\n\n/** 기본 마스코트 이미지. color 선택 시 그 색, 없으면 seed 기반 기본값. */\nfunction MascotImage({\n color,\n seed,\n alt,\n}: {\n color?: AvatarColor;\n seed?: string;\n alt?: string;\n}) {\n return (\n <img\n src={mascotUrl(color, seed)}\n alt={alt ?? \"\"}\n aria-hidden={alt ? undefined : true}\n className=\"h-full w-full object-cover\"\n />\n );\n}\n\nconst Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n (\n { className, size = \"sm\", src, alt, color, presence, children, ...props },\n ref,\n ) => {\n const resolvedSize = (size ?? \"sm\") as AvatarSize;\n return (\n // presence badge가 원 밖으로 걸치도록 wrapper(relative)에 이미지 원 + badge를 형제로 배치.\n <span\n ref={ref}\n className={cn(\"relative inline-flex shrink-0 align-middle\", className)}\n {...props}\n >\n <span\n className={cn(\n avatarVariants({ size }),\n // 가이드: 오프라인이면 아바타를 흐리게(opacity .55)\n presence === \"offline\" && \"opacity-[.55]\",\n )}\n >\n {children ??\n (src ? (\n <AvatarImage src={src} alt={alt} color={color} seed={alt} />\n ) : (\n // 기본: 무조건 마스코트 이미지. color 선택 시 그 색, 없으면 이름 기반 기본값.\n <MascotImage color={color} seed={alt} alt={alt} />\n ))}\n </span>\n {presence ? (\n <Presence\n status={presence}\n size={presenceSizeForAvatar[resolvedSize]}\n className=\"absolute -bottom-0.5 -right-0.5 ring-2 ring-bg-base\"\n />\n ) : null}\n </span>\n );\n },\n);\nAvatar.displayName = \"Avatar\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarImage */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** 로드 실패 시 사용할 마스코트 색(사용자 선택) */\n color?: AvatarColor;\n /** 로드 실패 시 색 미선택이면 색 배정에 쓸 시드(이름/ID) */\n seed?: string;\n}\n\nconst AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n ({ className, alt = \"\", color, seed, ...props }, ref) => {\n const [errored, setErrored] = React.useState(false);\n if (errored) {\n // 로드 실패 시 마스코트 기본 이미지로 대체 (이니셜 미사용)\n return <MascotImage color={color} seed={seed ?? alt} alt={alt} />;\n }\n return (\n <img\n ref={ref}\n alt={alt}\n className={cn(\"h-full w-full object-cover\", className)}\n onError={() => setErrored(true)}\n {...props}\n />\n );\n },\n);\nAvatarImage.displayName = \"AvatarImage\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarFallback */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center bg-surface-sunken font-medium text-text-subtle\",\n className,\n )}\n {...props}\n />\n ),\n);\nAvatarFallback.displayName = \"AvatarFallback\";\n\n/* -------------------------------------------------------------------------- */\n/* AvatarGroup */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 최대 표시 개수. 초과분은 '+N' 카운터로 요약 */\n max?: number;\n /** 카운터/겹침 사이즈(자식 Avatar와 맞춤) */\n size?: AvatarSize;\n}\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, children, max, size = \"sm\", ...props }, ref) => {\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const visible = typeof max === \"number\" ? items.slice(0, max) : items;\n const overflow = items.length - visible.length;\n\n return (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props}>\n {visible.map((child, i) => (\n <span key={i} className={i === 0 ? \"\" : \"-ml-2\"}>\n {child}\n </span>\n ))}\n {overflow > 0 ? (\n <span\n className={cn(\n avatarVariants({ size }),\n \"-ml-2 font-medium text-text-subtle\",\n )}\n aria-label={`외 ${overflow}명`}\n title={`외 ${overflow}명`}\n >\n +{overflow}\n </span>\n ) : null}\n </div>\n );\n },\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarGroup, avatarVariants };\nexport type { AvatarSize, AvatarPresence };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Tooltip — presentation-only catalog component.\n *\n * Overlay/positioning here is a visual approximation for the design catalog\n * (no @radix-ui). Real positioning/portal behavior is wired by the app dev.\n * Placement is controlled via the `placement` prop; visibility via `open`\n * (controlled) or hover (uncontrolled, using React.useState).\n */\n\nexport type TooltipPlacement =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\";\n\nconst tooltipContentVariants = cva(\n \"pointer-events-none absolute z-50 w-max max-w-xs whitespace-normal rounded bg-[var(--comp-tooltip-bg)] px-2 py-1 text-xs font-medium text-[var(--comp-tooltip-text)] shadow-popover\",\n {\n variants: {\n placement: {\n top: \"bottom-full left-1/2 mb-2 -translate-x-1/2\",\n \"top-left\": \"bottom-full left-0 mb-2\",\n \"top-right\": \"bottom-full right-0 mb-2\",\n right: \"left-full top-1/2 ml-2 -translate-y-1/2\",\n bottom: \"top-full left-1/2 mt-2 -translate-x-1/2\",\n \"bottom-left\": \"top-full left-0 mt-2\",\n \"bottom-right\": \"top-full right-0 mt-2\",\n left: \"right-full top-1/2 mr-2 -translate-y-1/2\",\n },\n },\n defaultVariants: {\n placement: \"top\",\n },\n },\n);\n\n// arrow: 8px 회전 사각형(버블과 같은 배경색). wrapper(=앵커) 기준으로 배치해\n// 모든 placement에서 꼬리가 대상(앵커)의 정중앙을 가리킨다 — 코너 placement는\n// 버블만 좌우/상하로 밀리고 꼬리 위치는 앵커 중앙에 고정된다.\nconst tooltipArrowVariants = cva(\n \"pointer-events-none absolute z-50 h-2 w-2 rotate-45 bg-[var(--comp-tooltip-bg)]\",\n {\n variants: {\n placement: {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n \"top-left\": \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n \"top-right\": \"bottom-full left-1/2 -translate-x-1/2 mb-[5px]\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-[5px]\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n \"bottom-left\": \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n \"bottom-right\": \"top-full left-1/2 -translate-x-1/2 mt-[5px]\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-[5px]\",\n },\n },\n defaultVariants: {\n placement: \"top\",\n },\n },\n);\n\nexport interface TooltipProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"content\">,\n VariantProps<typeof tooltipContentVariants> {\n /** The tooltip bubble content. */\n content: React.ReactNode;\n /** The trigger element the tooltip is anchored to. */\n children: React.ReactNode;\n /** Controlled visibility. When set, hover state is ignored. */\n open?: boolean;\n /** Show the arrow pointing at the trigger. */\n arrow?: boolean;\n /** Disable the tooltip entirely (never shows). */\n disabled?: boolean;\n}\n\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n className,\n content,\n children,\n placement = \"top\",\n open,\n arrow = true,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [hovered, setHovered] = React.useState(false);\n const isControlled = open !== undefined;\n const visible = !disabled && (isControlled ? open : hovered);\n\n const tooltipId = React.useId();\n\n return (\n <div\n ref={ref}\n className={cn(\"relative inline-flex\", className)}\n onMouseEnter={isControlled ? undefined : () => setHovered(true)}\n onMouseLeave={isControlled ? undefined : () => setHovered(false)}\n onFocus={isControlled ? undefined : () => setHovered(true)}\n onBlur={isControlled ? undefined : () => setHovered(false)}\n {...props}\n >\n <span aria-describedby={visible ? tooltipId : undefined}>\n {children}\n </span>\n <div\n id={tooltipId}\n role=\"tooltip\"\n aria-hidden={!visible}\n className={cn(\n tooltipContentVariants({ placement }),\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n {content}\n </div>\n {arrow ? (\n <span\n aria-hidden\n className={cn(\n tooltipArrowVariants({ placement }),\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0\",\n )}\n />\n ) : null}\n </div>\n );\n },\n);\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip, tooltipContentVariants, tooltipArrowVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/* -------------------------------------------------------------------------- */\n/* Context (presentational open-state control — no Radix) */\n/* -------------------------------------------------------------------------- */\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst DropdownMenuContext =\n React.createContext<DropdownMenuContextValue | null>(null);\n\nfunction useDropdownMenuContext(component: string) {\n const ctx = React.useContext(DropdownMenuContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <DropdownMenu>`);\n }\n return ctx;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Root */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Fired whenever the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (\n { className, open: openProp, defaultOpen = false, onOpenChange, ...props },\n ref,\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n\n const setOpen = React.useCallback<\n React.Dispatch<React.SetStateAction<boolean>>\n >(\n (value) => {\n const next =\n typeof value === \"function\"\n ? (value as (prev: boolean) => boolean)(open)\n : value;\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange, open],\n );\n\n const ctx = React.useMemo(() => ({ open, setOpen }), [open, setOpen]);\n\n return (\n <DropdownMenuContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn(\"relative inline-block text-left\", className)}\n {...props}\n />\n </DropdownMenuContext.Provider>\n );\n },\n);\nDropdownMenu.displayName = \"DropdownMenu\";\n\n/* -------------------------------------------------------------------------- */\n/* Trigger */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuTriggerProps\n>(({ className, onClick, disabled, ...props }, ref) => {\n const { open, setOpen } = useDropdownMenuContext(\"DropdownMenuTrigger\");\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen((prev) => !prev);\n }}\n className={cn(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded border border-border-default bg-surface-default px-4 py-2 text-sm font-medium text-text-default transition-colors hover:bg-surface-hover active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\n/* -------------------------------------------------------------------------- */\n/* Content (panel) */\n/* -------------------------------------------------------------------------- */\n\nconst dropdownMenuContentVariants = cva(\n // panel padding 4 · radius sm(8) · min-w 180 · shadow-dropdown\n \"z-50 min-w-[180px] rounded-lg border border-border-subtle bg-surface-raised p-1 shadow-dropdown outline-none\",\n {\n variants: {\n align: {\n start: \"left-0\",\n end: \"right-0\",\n },\n },\n defaultVariants: {\n align: \"start\",\n },\n },\n);\n\nexport interface DropdownMenuContentProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dropdownMenuContentVariants> {\n /** Force render even when closed (useful for catalog/visual specs). */\n forceMount?: boolean;\n}\n\nconst DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuContentProps\n>(({ className, align, forceMount = false, ...props }, ref) => {\n const { open } = useDropdownMenuContext(\"DropdownMenuContent\");\n if (!open && !forceMount) return null;\n return (\n <div\n ref={ref}\n role=\"menu\"\n aria-orientation=\"vertical\"\n className={cn(\n \"absolute top-[calc(100%+4px)]\",\n dropdownMenuContentVariants({ align, className }),\n )}\n {...props}\n />\n );\n});\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\n/* -------------------------------------------------------------------------- */\n/* Item */\n/* -------------------------------------------------------------------------- */\n\nconst dropdownMenuItemVariants = cva(\n // item px12 py8 · item radius xs(4) · hover bg-surface-hover\n \"relative flex w-full cursor-pointer select-none items-center gap-2 rounded px-3 py-2 text-sm text-text-default outline-none transition-colors hover:bg-surface-hover focus-visible:bg-surface-hover focus-visible:outline-none data-[disabled=true]:pointer-events-none data-[disabled=true]:text-text-disabled data-[disabled=true]:opacity-60 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"\",\n danger:\n \"text-danger-text hover:bg-danger-subtle focus-visible:bg-danger-subtle\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface DropdownMenuItemProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"disabled\">,\n VariantProps<typeof dropdownMenuItemVariants> {\n disabled?: boolean;\n /** Optional leading icon element. */\n icon?: React.ReactNode;\n /** Optional trailing content (shortcut hint, chevron, etc.). */\n trailing?: React.ReactNode;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n variant,\n disabled = false,\n icon,\n trailing,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n aria-disabled={disabled || undefined}\n data-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cn(dropdownMenuItemVariants({ variant, className }))}\n {...props}\n >\n {icon ? <span className=\"shrink-0\">{icon}</span> : null}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {trailing ? (\n <span className=\"ml-auto shrink-0 text-xs text-text-subtle\">\n {trailing}\n </span>\n ) : null}\n </button>\n );\n },\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\n/* -------------------------------------------------------------------------- */\n/* Label */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"px-3 py-2 text-xs font-semibold uppercase tracking-wide text-text-subtle\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\n/* -------------------------------------------------------------------------- */\n/* Separator */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\"my-1 h-px bg-border-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\n/* -------------------------------------------------------------------------- */\n/* Empty state */\n/* -------------------------------------------------------------------------- */\n\nexport interface DropdownMenuEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownMenuEmpty = React.forwardRef<\n HTMLDivElement,\n DropdownMenuEmptyProps\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-3 py-6 text-center text-sm text-text-subtle\", className)}\n {...props}\n >\n {children ?? \"No items\"}\n </div>\n));\nDropdownMenuEmpty.displayName = \"DropdownMenuEmpty\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuEmpty,\n dropdownMenuContentVariants,\n dropdownMenuItemVariants,\n};\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Variants */\n/* -------------------------------------------------------------------------- */\n\nconst selectTriggerVariants = cva(\n \"flex h-10 w-full items-center justify-between gap-2 rounded border bg-surface-default px-3 text-sm text-text-default transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled\",\n {\n variants: {\n state: {\n default:\n \"border-border-default hover:border-border-strong focus-visible:ring-brand-border\",\n error:\n \"border-danger-border focus-visible:ring-danger-border\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n)\n\n/* -------------------------------------------------------------------------- */\n/* Icons (inline, no external deps) */\n/* -------------------------------------------------------------------------- */\n\nconst ChevronIcon = ({ className }: { className?: string }) => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M5 7.5 10 12.5 15 7.5\" />\n </svg>\n)\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"m4.5 10.5 3.5 3.5 7.5-8\" />\n </svg>\n)\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\nexport interface SelectOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface SelectProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n VariantProps<typeof selectTriggerVariants> {\n /** Available options rendered in the dropdown panel. */\n options: SelectOption[]\n /** Currently selected value (controlled). */\n value?: string\n /** Placeholder shown when no value is selected. */\n placeholder?: string\n /** Fired when an option is chosen. */\n onValueChange?: (value: string) => void\n /** Disable the whole control. */\n disabled?: boolean\n /** Force the panel open (presentational / catalog use). */\n defaultOpen?: boolean\n /** Accessible label for the trigger button. */\n \"aria-label\"?: string\n /** Optional id linking to an external error message element. */\n errorMessageId?: string\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Select — presentational dropdown for the design catalog.\n *\n * Open/close is managed with `React.useState`; wiring to a real\n * accessibility-complete listbox library is left to the developer.\n */\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n className,\n state,\n options,\n value,\n placeholder = \"선택하세요\",\n onValueChange,\n disabled = false,\n defaultOpen = false,\n errorMessageId,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(defaultOpen)\n\n const selected = React.useMemo(\n () => options.find((o) => o.value === value),\n [options, value]\n )\n\n const isError = state === \"error\"\n\n const handleSelect = (option: SelectOption) => {\n if (option.disabled) return\n onValueChange?.(option.value)\n setOpen(false)\n }\n\n return (\n <div ref={ref} className={cn(\"relative w-full\", className)} {...props}>\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorMessageId : undefined}\n aria-label={ariaLabel}\n onClick={() => setOpen((o) => !o)}\n className={cn(selectTriggerVariants({ state }))}\n >\n <span\n className={cn(\n \"truncate\",\n !selected && \"text-text-subtle\"\n )}\n >\n {selected ? selected.label : placeholder}\n </span>\n <ChevronIcon\n className={cn(\n \"shrink-0 text-text-subtle transition-transform\",\n open && \"rotate-180\"\n )}\n />\n </button>\n\n {open && !disabled && (\n <ul\n role=\"listbox\"\n aria-label={ariaLabel}\n className=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded border border-border-subtle bg-surface-raised p-1 shadow-dropdown\"\n >\n {options.length === 0 && (\n <li className=\"px-3 py-2 text-sm text-text-subtle\">\n 항목이 없습니다\n </li>\n )}\n {options.map((option) => {\n const isSelected = option.value === value\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || undefined}\n onClick={() => handleSelect(option)}\n className={cn(\n \"flex items-center justify-between gap-2 rounded px-3 py-2 text-sm text-text-default\",\n option.disabled\n ? \"cursor-not-allowed text-text-disabled\"\n : \"cursor-pointer hover:bg-surface-hover active:bg-surface-pressed\",\n isSelected && \"bg-brand-subtle text-brand-text\"\n )}\n >\n <span className=\"truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"shrink-0 text-brand-text\" />\n )}\n </li>\n )\n })}\n </ul>\n )}\n </div>\n )\n }\n)\nSelect.displayName = \"Select\"\n\nexport { Select, selectTriggerVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\nimport { Button } from \"./button\"\n\n/* -------------------------------------------------------------------------- */\n/* Overlay */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogOverlayProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"absolute inset-0 bg-bg-emphasis/60 backdrop-blur-sm\",\n className\n )}\n {...props}\n />\n )\n)\nDialogOverlay.displayName = \"DialogOverlay\"\n\n/* -------------------------------------------------------------------------- */\n/* Panel */\n/* -------------------------------------------------------------------------- */\n\nconst dialogPanelVariants = cva(\n \"relative flex w-full flex-col gap-4 border border-border-subtle bg-surface-raised p-6 pb-4 text-text-default shadow-modal rounded-lg focus-visible:outline-none\",\n {\n variants: {\n size: {\n sm: \"min-w-[280px] max-w-[360px]\",\n md: \"min-w-[280px] max-w-[480px]\",\n lg: \"min-w-[280px] max-w-[640px]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\n/* -------------------------------------------------------------------------- */\n/* Dialog */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dialogPanelVariants> {\n /** Presentation-only open control. When false nothing renders. */\n open?: boolean\n /** Fired when the overlay (or Escape) requests a close. */\n onOpenChange?: (open: boolean) => void\n /** Accessible label id wired to aria-labelledby. */\n \"aria-labelledby\"?: string\n /** Accessible description id wired to aria-describedby. */\n \"aria-describedby\"?: string\n /** Class applied to the panel element. */\n className?: string\n /** Class applied to the overlay element. */\n overlayClassName?: string\n}\n\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n open = true,\n onOpenChange,\n size,\n className,\n overlayClassName,\n children,\n ...props\n },\n ref\n ) => {\n if (!open) return null\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\") onOpenChange?.(false)\n }\n\n return (\n <div\n className=\"absolute inset-0 z-50 flex items-center justify-center p-4\"\n onKeyDown={handleKeyDown}\n >\n <DialogOverlay\n className={overlayClassName}\n onClick={() => onOpenChange?.(false)}\n />\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(dialogPanelVariants({ size }), className)}\n {...props}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nDialog.displayName = \"Dialog\"\n\n/* -------------------------------------------------------------------------- */\n/* Header */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1.5 text-left\", className)}\n {...props}\n />\n )\n)\nDialogHeader.displayName = \"DialogHeader\"\n\n/* -------------------------------------------------------------------------- */\n/* Title */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-base font-semibold leading-tight text-text-strong\",\n className\n )}\n {...props}\n />\n )\n)\nDialogTitle.displayName = \"DialogTitle\"\n\n/* -------------------------------------------------------------------------- */\n/* Description */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm leading-relaxed text-text-subtle\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\n/* -------------------------------------------------------------------------- */\n/* Body */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogBodyProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogBody = React.forwardRef<HTMLDivElement, DialogBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-text-default\", className)}\n {...props}\n />\n )\n)\nDialogBody.displayName = \"DialogBody\"\n\n/* -------------------------------------------------------------------------- */\n/* Footer */\n/* -------------------------------------------------------------------------- */\n\nexport interface DialogFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nexport {\n Dialog,\n DialogOverlay,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogBody,\n DialogFooter,\n dialogPanelVariants,\n Button as DialogAction,\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Sheet — presentational bottom sheet (design catalog).\n *\n * Overlay + edge-anchored panel with an optional drag handle.\n * Visibility is controlled via the `open` prop; `onOpenChange` is invoked\n * when the overlay or close affordance is activated. Actual gesture /\n * focus-trap behaviour is left to the app integration.\n */\n\nconst sheetOverlayVariants = cva(\n \"absolute inset-0 bg-[var(--color-overlay-scrim)] transition-opacity duration-200\",\n {\n variants: {\n open: {\n true: \"opacity-100\",\n false: \"pointer-events-none opacity-0\",\n },\n },\n defaultVariants: { open: false },\n },\n);\n\nconst sheetPanelVariants = cva(\n \"absolute flex flex-col gap-4 bg-surface-raised px-5 pb-6 pt-4 text-text-default shadow-modal transition-transform duration-300 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n {\n variants: {\n side: {\n bottom:\n \"inset-x-0 bottom-0 rounded-b-none rounded-t-[var(--radius-lg)] data-[state=closed]:translate-y-full\",\n top: \"inset-x-0 top-0 rounded-b-[var(--radius-lg)] data-[state=closed]:-translate-y-full\",\n left: \"inset-y-0 left-0 h-full w-80 max-w-[85%] rounded-r-[var(--radius-lg)] data-[state=closed]:-translate-x-full\",\n right:\n \"inset-y-0 right-0 h-full w-80 max-w-[85%] rounded-l-[var(--radius-lg)] data-[state=closed]:translate-x-full\",\n },\n },\n defaultVariants: { side: \"bottom\" },\n },\n);\n\nexport interface SheetProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof sheetPanelVariants> {\n /** Whether the sheet is visible. */\n open?: boolean;\n /** Called when a dismiss affordance (overlay) is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Show the drag handle (only meaningful for the bottom/top sides). */\n showHandle?: boolean;\n /** Accessible label for the dialog surface. */\n \"aria-label\"?: string;\n}\n\nconst Sheet = React.forwardRef<HTMLDivElement, SheetProps>(\n (\n {\n className,\n side = \"bottom\",\n open = false,\n onOpenChange,\n showHandle = true,\n children,\n ...props\n },\n ref,\n ) => {\n const state = open ? \"open\" : \"closed\";\n const handleVisible = showHandle && (side === \"bottom\" || side === \"top\");\n return (\n <div\n className={cn(\n \"pointer-events-none absolute inset-0 overflow-hidden\",\n open && \"pointer-events-auto\",\n )}\n data-state={state}\n >\n <div\n aria-hidden=\"true\"\n className={sheetOverlayVariants({ open })}\n onClick={() => onOpenChange?.(false)}\n />\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!open}\n data-state={state}\n tabIndex={-1}\n className={cn(sheetPanelVariants({ side }), className)}\n {...props}\n >\n {handleVisible ? <SheetHandle /> : null}\n {children}\n </div>\n </div>\n );\n },\n);\nSheet.displayName = \"Sheet\";\n\nconst SheetHandle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"mx-auto mb-1 h-1 w-10 shrink-0 rounded-full bg-bg-emphasis\",\n className,\n )}\n {...props}\n />\n));\nSheetHandle.displayName = \"SheetHandle\";\n\nconst SheetHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-0.5\", className)}\n {...props}\n />\n));\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-lg font-semibold text-text-strong\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = \"SheetTitle\";\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-text-subtle\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = \"SheetDescription\";\n\nconst SheetBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-1 flex-col gap-4 overflow-y-auto\", className)}\n {...props}\n />\n));\nSheetBody.displayName = \"SheetBody\";\n\nconst SheetFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n));\nSheetFooter.displayName = \"SheetFooter\";\n\nexport {\n Sheet,\n SheetHandle,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n SheetBody,\n SheetFooter,\n sheetPanelVariants,\n sheetOverlayVariants,\n};\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Context */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsContextValue {\n value: string\n setValue: (value: string) => void\n baseId: string\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext(component: string): TabsContextValue {\n const ctx = React.useContext(TabsContext)\n if (!ctx) {\n throw new Error(`<${component}> must be used within <Tabs>`)\n }\n return ctx\n}\n\n/* -------------------------------------------------------------------------- */\n/* Tabs */\n/* -------------------------------------------------------------------------- */\n\nexport interface TabsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Controlled active tab value. */\n value?: string\n /** Initial active tab value (uncontrolled). */\n defaultValue?: string\n /** Fires when the active tab changes. */\n onValueChange?: (value: string) => void\n}\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n { className, value, defaultValue, onValueChange, children, ...props },\n ref\n ) => {\n const baseId = React.useId()\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? \"\"\n )\n const isControlled = value !== undefined\n const activeValue = isControlled ? value : internalValue\n\n const setValue = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange]\n )\n\n const ctx = React.useMemo<TabsContextValue>(\n () => ({ value: activeValue, setValue, baseId }),\n [activeValue, setValue, baseId]\n )\n\n return (\n <TabsContext.Provider value={ctx}>\n <div ref={ref} className={cn(\"flex flex-col gap-4\", className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\nTabs.displayName = \"Tabs\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* -------------------------------------------------------------------------- */\n\nexport const tabsListVariants = cva(\n \"relative flex items-center border-b border-border-subtle\",\n {\n variants: {\n fullWidth: {\n true: \"w-full\",\n false: \"w-fit\",\n },\n },\n defaultVariants: {\n fullWidth: false,\n },\n }\n)\n\nexport interface TabsListProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof tabsListVariants> {}\n\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, fullWidth, ...props }, ref) => (\n <div\n ref={ref}\n role=\"tablist\"\n className={cn(tabsListVariants({ fullWidth }), \"gap-1\", className)}\n {...props}\n />\n )\n)\nTabsList.displayName = \"TabsList\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger */\n/* -------------------------------------------------------------------------- */\n\nexport const tabsTriggerVariants = cva(\n [\n \"relative inline-flex items-center justify-center gap-2 whitespace-nowrap px-3 py-2 text-sm font-medium\",\n \"transition-colors focus-visible:outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n \"disabled:pointer-events-none disabled:text-text-disabled\",\n \"[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n // bottom indicator element (2px)\n \"after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:rounded-full after:transition-colors\",\n ],\n {\n variants: {\n active: {\n true: \"text-text-strong after:bg-brand-solid\",\n false: \"text-text-subtle hover:text-text-default after:bg-transparent\",\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n)\n\nexport interface TabsTriggerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> {\n /** Unique value identifying this tab. */\n value: string\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, disabled, ...props }, ref) => {\n const { value: activeValue, setValue, baseId } = useTabsContext(\"TabsTrigger\")\n const isActive = activeValue === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-trigger-${value}`}\n aria-selected={isActive}\n aria-controls={`${baseId}-content-${value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n data-state={isActive ? \"active\" : \"inactive\"}\n onClick={() => setValue(value)}\n className={cn(tabsTriggerVariants({ active: isActive }), className)}\n {...props}\n />\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\n/* -------------------------------------------------------------------------- */\n/* TabsContent */\n/* -------------------------------------------------------------------------- */\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Value of the tab this panel belongs to. */\n value: string\n /** Keep the panel mounted even when inactive (hidden via CSS). */\n forceMount?: boolean\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount, children, ...props }, ref) => {\n const { value: activeValue, baseId } = useTabsContext(\"TabsContent\")\n const isActive = activeValue === value\n\n if (!isActive && !forceMount) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`${baseId}-content-${value}`}\n aria-labelledby={`${baseId}-trigger-${value}`}\n hidden={!isActive}\n tabIndex={0}\n data-state={isActive ? \"active\" : \"inactive\"}\n className={cn(\n \"text-sm text-text-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Table (root) */\n/* -------------------------------------------------------------------------- */\n\nconst tableVariants = cva(\n \"w-full caption-bottom border-separate border-spacing-0 overflow-hidden rounded-lg border border-border-default text-sm text-text-default\",\n {\n variants: {\n density: {\n comfortable: \"[&_td]:py-2 [&_th]:py-2\",\n compact: \"[&_td]:py-1 [&_th]:py-1\",\n },\n },\n defaultVariants: {\n density: \"comfortable\",\n },\n }\n)\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement>,\n VariantProps<typeof tableVariants> {\n /** Wrapper element props (the scroll container). */\n containerProps?: React.HTMLAttributes<HTMLDivElement>\n}\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, density, containerProps, ...props }, ref) => (\n <div\n {...containerProps}\n className={cn(\"relative w-full overflow-x-auto\", containerProps?.className)}\n >\n <table\n ref={ref}\n className={cn(tableVariants({ density, className }))}\n {...props}\n />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\n/* -------------------------------------------------------------------------- */\n/* TableHeader */\n/* -------------------------------------------------------------------------- */\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n TableHeaderProps\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"bg-surface-sunken text-text-subtle\", className)}\n {...props}\n />\n))\nTableHeader.displayName = \"TableHeader\"\n\n/* -------------------------------------------------------------------------- */\n/* TableBody */\n/* -------------------------------------------------------------------------- */\n\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\n/* -------------------------------------------------------------------------- */\n/* TableRow */\n/* -------------------------------------------------------------------------- */\n\nconst tableRowVariants = cva(\n \"border-b border-border-default transition-colors [&>*]:border-b [&>*]:border-border-default last:[&>*]:border-b-0\",\n {\n variants: {\n interactive: {\n true: \"cursor-pointer hover:bg-surface-hover data-[selected=true]:bg-brand-subtle\",\n false: \"hover:bg-surface-hover\",\n },\n },\n defaultVariants: {\n interactive: false,\n },\n }\n)\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement>,\n VariantProps<typeof tableRowVariants> {\n /** Visual selected state (also drives aria-selected). */\n selected?: boolean\n}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, interactive, selected, ...props }, ref) => (\n <tr\n ref={ref}\n data-selected={selected ? \"true\" : undefined}\n aria-selected={selected}\n className={cn(tableRowVariants({ interactive, className }))}\n {...props}\n />\n )\n)\nTableRow.displayName = \"TableRow\"\n\n/* -------------------------------------------------------------------------- */\n/* TableHead (header cell) */\n/* -------------------------------------------------------------------------- */\n\nexport interface TableHeadProps\n extends React.ThHTMLAttributes<HTMLTableCellElement> {\n /** Sort indicator for accessible sortable columns. */\n sort?: \"asc\" | \"desc\" | \"none\"\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, sort, children, ...props }, ref) => (\n <th\n ref={ref}\n scope=\"col\"\n aria-sort={\n sort === \"asc\"\n ? \"ascending\"\n : sort === \"desc\"\n ? \"descending\"\n : sort === \"none\"\n ? \"none\"\n : undefined\n }\n className={cn(\n \"h-9 px-3 py-2 text-left align-middle text-xs font-medium text-text-subtle\",\n \"[&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n >\n {sort && sort !== \"none\" ? (\n <span className=\"inline-flex items-center gap-1\">\n {children}\n <span aria-hidden=\"true\" className=\"text-text-subtle\">\n {sort === \"asc\" ? \"↑\" : \"↓\"}\n </span>\n </span>\n ) : (\n children\n )}\n </th>\n )\n)\nTableHead.displayName = \"TableHead\"\n\n/* -------------------------------------------------------------------------- */\n/* TableCell (body cell) */\n/* -------------------------------------------------------------------------- */\n\nexport type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-3 py-2 align-middle text-sm text-text-default [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n)\nTableCell.displayName = \"TableCell\"\n\n/* -------------------------------------------------------------------------- */\n/* TableCaption */\n/* -------------------------------------------------------------------------- */\n\nexport type TableCaptionProps =\n React.HTMLAttributes<HTMLTableCaptionElement>\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n TableCaptionProps\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-3 text-xs text-text-subtle\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\n/* -------------------------------------------------------------------------- */\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableRow,\n TableHead,\n TableCell,\n TableCaption,\n tableVariants,\n tableRowVariants,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------------------------------\n * paginationItemVariants\n * item 32sq · gap4 · radius sm(8) · font14\n * ----------------------------------------------------------------------------------------------- */\n\nconst paginationItemVariants = cva(\n \"inline-flex h-8 min-w-8 items-center justify-center rounded-lg px-2 text-sm font-medium transition-colors select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n active: {\n true: \"bg-brand-solid text-text-on-brand hover:bg-brand-solid-hover\",\n false: \"text-text-default hover:bg-surface-hover active:bg-surface-pressed\",\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Icons (inline, no extra deps)\n * ----------------------------------------------------------------------------------------------- */\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n)\n\nconst EllipsisIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n stroke=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"5\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.5\" />\n </svg>\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationItem — single page button\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\">,\n VariantProps<typeof paginationItemVariants> {\n /** Page number this item represents. */\n page: number\n}\n\nconst PaginationItem = React.forwardRef<HTMLButtonElement, PaginationItemProps>(\n ({ className, active, page, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n aria-label={`Go to page ${page}`}\n className={cn(paginationItemVariants({ active, className }))}\n {...props}\n >\n {page}\n </button>\n )\n }\n)\nPaginationItem.displayName = \"PaginationItem\"\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationEllipsis\n * ----------------------------------------------------------------------------------------------- */\n\nconst PaginationEllipsis = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"inline-flex h-8 min-w-8 items-center justify-center px-1 text-sm text-text-subtle\",\n className\n )}\n {...props}\n >\n <EllipsisIcon />\n <span className=\"sr-only\">More pages</span>\n </span>\n))\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationPrevious / PaginationNext\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationNavProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nconst PaginationPrevious = React.forwardRef<\n HTMLButtonElement,\n PaginationNavProps\n>(({ className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-label=\"Go to previous page\"\n className={cn(paginationItemVariants({ active: false, className }))}\n {...props}\n >\n <ChevronLeftIcon />\n </button>\n))\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = React.forwardRef<HTMLButtonElement, PaginationNavProps>(\n ({ className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-label=\"Go to next page\"\n className={cn(paginationItemVariants({ active: false, className }))}\n {...props}\n >\n <ChevronRightIcon />\n </button>\n )\n)\nPaginationNext.displayName = \"PaginationNext\"\n\n/* -------------------------------------------------------------------------------------------------\n * buildPageRange — compute page items with ellipsis\n * ----------------------------------------------------------------------------------------------- */\n\ntype PageRangeItem = number | \"ellipsis\"\n\nfunction buildPageRange(\n current: number,\n total: number,\n siblingCount = 1\n): PageRangeItem[] {\n // total slots: first + last + current + 2*siblings + 2 ellipsis\n const totalSlots = siblingCount * 2 + 5\n if (total <= totalSlots) {\n return Array.from({ length: total }, (_, i) => i + 1)\n }\n\n const leftSibling = Math.max(current - siblingCount, 1)\n const rightSibling = Math.min(current + siblingCount, total)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < total - 1\n\n const range: PageRangeItem[] = []\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftItemCount = siblingCount * 2 + 3\n for (let i = 1; i <= leftItemCount; i++) range.push(i)\n range.push(\"ellipsis\", total)\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightItemCount = siblingCount * 2 + 3\n range.push(1, \"ellipsis\")\n for (let i = total - rightItemCount + 1; i <= total; i++) range.push(i)\n } else {\n range.push(1, \"ellipsis\")\n for (let i = leftSibling; i <= rightSibling; i++) range.push(i)\n range.push(\"ellipsis\", total)\n }\n\n return range\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Pagination — presentation component (state controlled via props)\n * ----------------------------------------------------------------------------------------------- */\n\nexport interface PaginationProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"onChange\"> {\n /** Total number of pages. */\n totalPages: number\n /** Currently active page (1-based). */\n page: number\n /** Called when a page control is activated. */\n onPageChange?: (page: number) => void\n /** How many page items to show on each side of the current page. */\n siblingCount?: number\n /** Accessible label for the navigation landmark. */\n label?: string\n}\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n className,\n totalPages,\n page,\n onPageChange,\n siblingCount = 1,\n label = \"Pagination\",\n ...props\n },\n ref\n ) => {\n const safeTotal = Math.max(totalPages, 1)\n const current = Math.min(Math.max(page, 1), safeTotal)\n const items = buildPageRange(current, safeTotal, siblingCount)\n\n const goTo = (target: number) => {\n if (target < 1 || target > safeTotal || target === current) return\n onPageChange?.(target)\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label={label}\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n <PaginationPrevious\n disabled={current <= 1}\n onClick={() => goTo(current - 1)}\n />\n\n {items.map((item, index) =>\n item === \"ellipsis\" ? (\n <PaginationEllipsis key={`ellipsis-${index}`} />\n ) : (\n <PaginationItem\n key={item}\n page={item}\n active={item === current}\n onClick={() => goTo(item)}\n />\n )\n )}\n\n <PaginationNext\n disabled={current >= safeTotal}\n onClick={() => goTo(current + 1)}\n />\n </nav>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\nexport {\n Pagination,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n paginationItemVariants,\n buildPageRange,\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * SegmentedControl — 값 기반 세그먼트 컨트롤.\n * height 32 · padding 2 · radius sm(8) · thumb radius 8 · font 14.\n * 컨테이너 bg-surface-sunken, active thumb=bg-surface-default shadow-sm 슬라이드.\n * value/onValueChange 로 제어(controlled) 하거나 defaultValue 로 비제어(uncontrolled).\n */\n\nconst segmentContainerVariants = cva(\n \"relative inline-grid h-8 auto-cols-fr grid-flow-col items-center rounded-lg bg-surface-sunken p-0.5 text-sm\",\n {\n variants: {\n fullWidth: {\n true: \"flex w-full\",\n false: \"inline-grid w-auto\",\n },\n },\n defaultVariants: {\n fullWidth: false,\n },\n },\n);\n\nconst segmentItemVariants = cva(\n \"relative z-10 inline-flex h-full w-full items-center justify-center gap-1.5 whitespace-nowrap rounded-lg px-3 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n // 활성=label1 굵기(semibold/600) · 비활성=body-sm 굵기(regular/400), 둘 다 14px.\n // NOTE: text-label1/body-sm 클래스는 twMerge가 text-* 색상과 같은 충돌군으로\n // 보고 제거하므로, 색상과 충돌 안 하는 font-weight 유틸로 굵기를 지정한다.\n active: {\n true: \"font-semibold text-text-strong\",\n false: \"font-normal text-text-subtle hover:text-text-default\",\n },\n },\n defaultVariants: {\n active: false,\n },\n },\n);\n\nexport interface SegmentedControlItem {\n /** 세그먼트 값 (고유) */\n value: string;\n /** 표시 라벨 */\n label: React.ReactNode;\n /** 선택적 아이콘 (색만으로 정보전달 금지 — 아이콘/텍스트 병행 용도) */\n icon?: React.ReactNode;\n /** 개별 비활성화 */\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof segmentContainerVariants> {\n /** 세그먼트 항목 목록 */\n items: SegmentedControlItem[];\n /** 제어 값 */\n value?: string;\n /** 비제어 초기 값 */\n defaultValue?: string;\n /** 값 변경 콜백 */\n onValueChange?: (value: string) => void;\n /** 전체 비활성화 */\n disabled?: boolean;\n /** 접근성 라벨 */\n \"aria-label\"?: string;\n}\n\nconst SegmentedControl = React.forwardRef<\n HTMLDivElement,\n SegmentedControlProps\n>(\n (\n {\n className,\n items,\n value,\n defaultValue,\n onValueChange,\n disabled = false,\n fullWidth,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? items[0]?.value ?? \"\",\n );\n const currentValue = isControlled ? value : internalValue;\n\n const activeIndex = Math.max(\n 0,\n items.findIndex((item) => item.value === currentValue),\n );\n const count = items.length || 1;\n\n const handleSelect = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n className={cn(segmentContainerVariants({ fullWidth }), className)}\n {...props}\n >\n {/* 슬라이딩 thumb — active 세그먼트 위치로 이동 */}\n {items.length > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute bottom-0.5 left-0.5 top-0.5 z-0 rounded-lg bg-surface-default shadow-sm transition-transform duration-200 ease-out\"\n style={{\n width: `calc((100% - 0.25rem) / ${count})`,\n transform: `translateX(calc(${activeIndex} * 100%))`,\n }}\n />\n )}\n {items.map((item) => {\n const isActive = item.value === currentValue;\n const isDisabled = disabled || item.disabled;\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n disabled={isDisabled}\n tabIndex={isActive ? 0 : -1}\n onClick={() => handleSelect(item.value)}\n className={cn(segmentItemVariants({ active: isActive }))}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n },\n);\nSegmentedControl.displayName = \"SegmentedControl\";\n\nexport { SegmentedControl, segmentContainerVariants, segmentItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Toast — presentation-only visual component (design catalog).\n * TODO: A real ToastProvider / useToast hook (queueing, auto-dismiss,\n * portal, aria-live region) must be wired by the app developer.\n * This component renders a single toast surface for visual spec review.\n */\n\nconst toastVariants = cva(\n \"pointer-events-auto flex w-full max-w-sm gap-3 rounded-lg border px-4 py-4 shadow-toast focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n {\n variants: {\n variant: {\n default:\n \"border-border-default bg-surface-raised text-text-default focus-visible:ring-border-focus\",\n danger:\n \"border-danger-border bg-danger-subtle text-danger-text focus-visible:ring-danger-border\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n// Inline icons (no icon dependency). Paired with text so info is never color-only.\nfunction InfoIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"10\" cy=\"10\" r=\"7.5\" />\n <path d=\"M10 9v4.5\" />\n <path d=\"M10 6.5h.01\" />\n </svg>\n );\n}\n\nfunction AlertIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10 2.5 18 16.5H2z\" />\n <path d=\"M10 8v3.5\" />\n <path d=\"M10 14h.01\" />\n </svg>\n );\n}\n\nfunction CloseIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M5 5l10 10M15 5L5 15\" />\n </svg>\n );\n}\n\nexport interface ToastProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof toastVariants> {\n /** Main message content of the toast. */\n message: React.ReactNode;\n /** Optional emphasized title rendered above the message. */\n title?: React.ReactNode;\n /** Render the leading status icon (default true). */\n icon?: boolean;\n /** Show the trailing close button (default true). */\n dismissible?: boolean;\n /** Fired when the close button is pressed. */\n onClose?: () => void;\n /** Accessible label for the close button. */\n closeLabel?: string;\n}\n\nconst Toast = React.forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n className,\n variant,\n message,\n title,\n icon = true,\n dismissible = true,\n onClose,\n closeLabel = \"Close\",\n ...props\n },\n ref,\n ) => {\n const StatusIcon = variant === \"danger\" ? AlertIcon : InfoIcon;\n return (\n <div\n ref={ref}\n role={variant === \"danger\" ? \"alert\" : \"status\"}\n aria-live={variant === \"danger\" ? \"assertive\" : \"polite\"}\n className={cn(\n toastVariants({ variant, className }),\n title ? \"items-start\" : \"items-center\",\n )}\n {...props}\n >\n {/* [아이콘 + 제목·메시지 컬럼] 그룹 ↔ [닫기]. 컬럼이 flex-1이라 텍스트가\n X 열 아래로 넘어가지 않음(포개짐 방지). 제목 유무로 세로정렬 전환. */}\n <div\n className={cn(\n \"flex min-w-0 flex-1 gap-2\",\n title ? \"items-start\" : \"items-center\",\n )}\n >\n {icon ? (\n <StatusIcon\n className={cn(\n \"size-5 shrink-0\",\n variant === \"danger\" ? \"text-danger-text\" : \"text-text-subtle\",\n )}\n />\n ) : null}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p\n className={cn(\n \"text-label1\",\n variant === \"danger\"\n ? \"text-danger-text\"\n : \"text-text-strong\",\n )}\n >\n {title}\n </p>\n ) : null}\n <p className={cn(\"text-body-sm break-words\", title && \"mt-0.5\")}>\n {message}\n </p>\n </div>\n </div>\n {dismissible ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n className={cn(\n \"-mr-1 inline-flex size-6 shrink-0 items-center justify-center rounded text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\",\n title && \"-mt-0.5\",\n )}\n >\n <CloseIcon className=\"size-4\" />\n </button>\n ) : null}\n </div>\n );\n },\n);\nToast.displayName = \"Toast\";\n\nexport { Toast, toastVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport type EmptyStateSize = \"lg\" | \"md\" | \"sm\";\n\n// 사이즈별 스펙 (가이드 anatomy). plate/art는 px, 나머지는 spacing/typo 토큰 유틸.\nconst SIZES: Record<\n EmptyStateSize,\n {\n plate: number;\n art: number;\n pad: string;\n plateMb: string;\n title: string;\n desc: string;\n gap: string;\n act: string;\n }\n> = {\n lg: {\n plate: 180,\n art: 120,\n pad: \"px-6 py-12\",\n plateMb: \"mb-4\",\n title: \"text-xl\",\n desc: \"text-base max-w-[360px]\",\n gap: \"mt-1\",\n act: \"mt-5\",\n },\n md: {\n plate: 144,\n art: 96,\n pad: \"px-5 py-10\",\n plateMb: \"mb-3\",\n title: \"text-lg\",\n desc: \"text-base max-w-[300px]\",\n gap: \"mt-0.5\",\n act: \"mt-4\",\n },\n sm: {\n plate: 108,\n art: 72,\n pad: \"px-4 py-8\",\n plateMb: \"mb-3\",\n title: \"text-lg\",\n desc: \"text-sm max-w-[240px]\",\n gap: \"mt-0.5\",\n act: \"mt-4\",\n },\n};\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: EmptyStateSize;\n /** 라운드 플레이트 안에 들어갈 일러스트(TIMI 캐릭터). <img>/<svg> */\n illustration?: React.ReactNode;\n title: string;\n description?: string;\n /** 하단 CTA (예: <Button>) — 없으면 생략 */\n action?: React.ReactNode;\n}\n\n// 빈 화면 안내 — 라운드 플레이트(테마별 밝기) + 컬러 일러스트 + 문구 + CTA.\nexport function EmptyState({\n size = \"lg\",\n illustration,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n const s = SIZES[size];\n return (\n <div\n className={cn(\"flex flex-col items-center text-center\", s.pad, className)}\n {...props}\n >\n {illustration && (\n // 플레이트: border-subtle = 라이트 gray-20(sunken) · 다크 gray-60(카드 gray-80보다 밝아 떠 보임)\n <div\n className={cn(\n \"flex items-center justify-center rounded-full bg-border-subtle\",\n s.plateMb,\n )}\n style={{ width: s.plate, height: s.plate }}\n >\n <span\n className=\"inline-flex [&>img]:h-full [&>img]:w-full [&>img]:object-contain [&>svg]:h-full [&>svg]:w-full\"\n style={{ width: s.art, height: s.art }}\n >\n {illustration}\n </span>\n </div>\n )}\n <h3 className={cn(\"font-bold leading-snug text-text-strong\", s.title)}>\n {title}\n </h3>\n {description && (\n <p className={cn(\"leading-relaxed text-text-subtle\", s.desc, s.gap)}>\n {description}\n </p>\n )}\n {action && <div className={cn(\"flex gap-2\", s.act)}>{action}</div>}\n </div>\n );\n}\n","// 아이콘 공통 프레임. gen-icons.cjs가 생성/유지.\nimport * as React from \"react\";\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n /** width/height(px). 기본 20(icon-md). 색은 currentColor 상속(테마 자동). */\n size?: number | string;\n}\n\n/** viewBox 24 · 1.5 stroke · round cap/join · currentColor. */\nexport function IconBase({\n size = 20,\n children,\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n {children}\n </svg>\n );\n}\n","// AUTO-GENERATED from design-system/icons/check.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const CheckIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M20 6 9 17l-5-5\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-down.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronDownIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m6 9 6 6 6-6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-left.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronLeftIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m15 6-6 6 6 6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/chevron-right.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const ChevronRightIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"m9 6 6 6-6 6\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/hash.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const HashIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M4 9h16M4 15h16M10 3 8 21M16 3 14 21\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/lock.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const LockIcon = (props: IconProps) => (\n <IconBase {...props}><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"3\" ry=\"3\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/pin.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const PinIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M12 17v5\"/><path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/plus.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const PlusIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M12 5v14M5 12h14\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/search.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const SearchIcon = (props: IconProps) => (\n <IconBase {...props}><circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.4-3.4\"/></IconBase>\n);\n","// AUTO-GENERATED from design-system/icons/x.svg (SSOT). 직접 편집 금지.\nimport { IconBase, type IconProps } from \"./_base\";\n\nexport const XIcon = (props: IconProps) => (\n <IconBase {...props}><path d=\"M18 6 6 18M6 6l12 12\"/></IconBase>\n);\n","import * as React from \"react\";\n\nimport { ChevronDownIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\nexport interface AccordionItemData {\n /** 고유 키(미지정 시 title 사용) */\n id?: string;\n /** 제목(요약 행) */\n title: React.ReactNode;\n /** 펼쳤을 때 본문 */\n content: React.ReactNode;\n /** 기본 펼침 여부 */\n defaultOpen?: boolean;\n}\n\nexport interface AccordionItemProps extends Omit<\n React.ComponentPropsWithoutRef<\"details\">,\n \"title\"\n> {\n /** 제목(요약 행) */\n title: React.ReactNode;\n}\n\n/**\n * 단일 아코디언 행. `<details>/<summary>` 기반 — JS 없이 펼침/접힘.\n * 셰브론은 열림 시 180° 회전(group-open).\n */\nconst AccordionItem = React.forwardRef<HTMLDetailsElement, AccordionItemProps>(\n ({ className, title, children, ...props }, ref) => (\n <details\n ref={ref}\n className={cn(\n \"group border-t border-border-subtle first:border-t-0\",\n className,\n )}\n {...props}\n >\n <summary className=\"flex cursor-pointer select-none list-none items-center justify-between gap-2.5 px-4 py-3.5 text-sm font-semibold text-text-default group-open:text-brand-text [&::-webkit-details-marker]:hidden\">\n {title}\n <ChevronDownIcon\n size={18}\n className=\"shrink-0 text-text-subtle transition-transform duration-200 group-open:rotate-180\"\n />\n </summary>\n <div className=\"px-4 pb-3.5 text-sm leading-relaxed text-text-subtle\">\n {children}\n </div>\n </details>\n ),\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 데이터 기반 렌더. 미지정 시 children 사용. */\n items?: AccordionItemData[];\n}\n\n/**\n * 아코디언 컨테이너(surface 카드). 행 사이 구분선, 첫 행은 상단선 없음.\n * `items` prop으로 데이터 기반 렌더하거나 `children`으로 직접 조립.\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, items, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden rounded-lg border border-border-subtle bg-surface-default\",\n className,\n )}\n {...props}\n >\n {items\n ? items.map((it) => (\n <AccordionItem\n key={it.id ?? String(it.title)}\n title={it.title}\n open={it.defaultOpen}\n >\n {it.content}\n </AccordionItem>\n ))\n : children}\n </div>\n ),\n);\nAccordion.displayName = \"Accordion\";\n\nexport { Accordion, AccordionItem };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\n// 데이터 시각화 프리미티브. comp-chart-* 토큰 미발행 →\n// 구조/텍스트은 시맨틱 토큰으로, 분포 세그먼트 색만 소비처에서 className으로 주입.\n\n// ── Stat (상태·지표 건수 카드) ─────────────────────\n// 상태/카테고리별 건수 요약. 라벨 앞 상태 점(dot) + 큰 값.\n// (예: 대기·진행중·리뷰·완료 건수) 점 색은 comp-chart-* 미발행 →\n// 소비처가 className(bg-*)으로 주입 — StackBar 세그먼트와 동일 규칙.\nexport interface KpiItem {\n /** 지표/상태 라벨 */\n label: string;\n /** 값(문자열: 건수 \"0\", \"21\" 또는 \"92%\") */\n value: string;\n /** 상태 점 색 클래스(bg-*). 지정 시 라벨 앞에 상태 점 표시 — 색은 소비처 주입 */\n dot?: string;\n}\n\nexport interface KpiRowProps extends React.HTMLAttributes<HTMLDivElement> {\n items: KpiItem[];\n}\n\nexport const KpiRow = React.forwardRef<HTMLDivElement, KpiRowProps>(\n ({ items, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex w-[360px] gap-2\", className)} {...props}>\n {items.map((k) => (\n <div\n key={k.label}\n className=\"flex-1 rounded-lg border border-border-subtle bg-surface-default p-3\"\n >\n <div className=\"flex items-center gap-1.5\">\n {k.dot != null && (\n <span\n className={cn(\"h-2 w-2 shrink-0 rounded-full\", k.dot)}\n aria-hidden\n />\n )}\n <span className=\"text-xs text-text-subtle\">{k.label}</span>\n </div>\n <div className=\"mt-1 text-2xl font-bold text-text-strong\">\n {k.value}\n </div>\n </div>\n ))}\n </div>\n ),\n);\nKpiRow.displayName = \"KpiRow\";\n\n// ── Progress ──────────────────────────────────────\nexport interface ProgressItem {\n label: string;\n /** 0–100 */\n pct: number;\n /** 위험(초과 등) 강조 */\n danger?: boolean;\n}\n\nexport interface ProgressListProps extends React.HTMLAttributes<HTMLDivElement> {\n items: ProgressItem[];\n}\n\nexport const ProgressList = React.forwardRef<HTMLDivElement, ProgressListProps>(\n ({ items, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex w-[320px] flex-col gap-3\", className)}\n {...props}\n >\n {items.map((r) => (\n <div key={r.label}>\n <div className=\"mb-1 flex justify-between text-sm\">\n <span className=\"text-text-default\">{r.label}</span>\n <span className={r.danger ? \"text-danger-text\" : \"text-brand-text\"}>\n {r.pct}%\n </span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-surface-sunken\">\n <div\n className={cn(\n \"h-full rounded-full\",\n r.danger ? \"bg-danger-solid\" : \"bg-brand-solid\",\n )}\n style={{ width: `${r.pct}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n ),\n);\nProgressList.displayName = \"ProgressList\";\n\n// ── Ring (도넛 게이지) ─────────────────────────────\nexport interface RingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0–100 */\n pct: number;\n /** 지름(px) */\n size?: number;\n /** 가운데 라벨(기본: `${pct}%`) */\n label?: React.ReactNode;\n}\n\nexport const Ring = React.forwardRef<HTMLDivElement, RingProps>(\n ({ pct, size = 84, label, className, style, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"relative grid place-items-center\", className)}\n style={{ height: size, width: size, ...style }}\n {...props}\n >\n <svg viewBox=\"0 0 36 36\" className=\"h-full w-full -rotate-90\">\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.5\"\n fill=\"none\"\n strokeWidth=\"3\"\n className=\"stroke-surface-sunken\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.5\"\n fill=\"none\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n pathLength={100}\n strokeDasharray={`${pct} 100`}\n className=\"stroke-brand-solid\"\n />\n </svg>\n <b className=\"absolute text-sm font-bold text-text-strong\">\n {label ?? `${pct}%`}\n </b>\n </div>\n ),\n);\nRing.displayName = \"Ring\";\n\n// ── StackBar (누적 분포) ───────────────────────────\nexport interface StackSegment {\n label: string;\n /** 비율(%) */\n pct: number;\n /** 세그먼트 색 클래스(bg-*). 미지정 시 bg-brand-solid */\n className?: string;\n}\n\nexport interface StackBarProps extends React.HTMLAttributes<HTMLDivElement> {\n segments: StackSegment[];\n /** 범례 표시 여부 */\n showLegend?: boolean;\n}\n\nexport const StackBar = React.forwardRef<HTMLDivElement, StackBarProps>(\n ({ segments, showLegend = true, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-[360px]\", className)} {...props}>\n <div className=\"flex h-6 gap-0.5\">\n {segments.map((s, i) => (\n <div\n key={s.label}\n className={cn(\n s.className ?? \"bg-brand-solid\",\n i === 0 && \"rounded-l-full\",\n i === segments.length - 1 && \"rounded-r-full\",\n )}\n style={{ width: `${s.pct}%` }}\n />\n ))}\n </div>\n {showLegend && (\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-1\">\n {segments.map((s) => (\n <div\n key={s.label}\n className=\"flex items-center gap-1.5 text-xs text-text-subtle\"\n >\n <span\n className={cn(\n \"h-2.5 w-2.5 rounded-full\",\n s.className ?? \"bg-brand-solid\",\n )}\n />\n {s.label} <span className=\"text-text-default\">{s.pct}%</span>\n </div>\n ))}\n </div>\n )}\n </div>\n ),\n);\nStackBar.displayName = \"StackBar\";\n\n// ── WorkHoursBar (근무시간) ────────────────────────\nexport type WorkHoursState = \"reached\" | \"unreached\" | \"pending\";\n\nexport interface WorkHoursItem {\n /** 요일 라벨 */\n day: string;\n /** 근무 시간 */\n hours: number;\n /** reached=목표도달 · unreached=미달 · pending=출근전 */\n state: WorkHoursState;\n /** 오늘 강조 */\n today?: boolean;\n /** 미래(예정) */\n future?: boolean;\n}\n\nexport interface WorkHoursBarProps extends React.HTMLAttributes<HTMLDivElement> {\n data: WorkHoursItem[];\n /** y축 최대치(시간). 기본 12 */\n max?: number;\n /** 차트 높이(px). 기본 120 */\n height?: number;\n /** 하단 캡션 */\n caption?: React.ReactNode;\n}\n\nconst BAR_BY_STATE: Record<WorkHoursState, string> = {\n reached: \"bg-brand-solid\",\n unreached: \"bg-brand-subtle\",\n pending: \"bg-surface-sunken\",\n};\n\nexport const WorkHoursBar = React.forwardRef<HTMLDivElement, WorkHoursBarProps>(\n ({ data, max = 12, height = 120, caption, className, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <div className=\"flex items-end gap-3\">\n {data.map((d) => {\n const barH =\n d.state === \"pending\" ? 4 : (d.hours / max) * height;\n const labelCls = d.today\n ? \"text-brand-text font-semibold\"\n : d.future\n ? \"text-text-disabled\"\n : \"text-text-subtle\";\n return (\n <div key={d.day} className=\"flex flex-col items-center gap-2\">\n <div className=\"flex w-8 items-end\" style={{ height }}>\n <div\n className={cn(\"w-full rounded-t\", BAR_BY_STATE[d.state])}\n style={{ height: barH }}\n />\n </div>\n <div className={cn(\"text-xs\", labelCls)}>{d.day}</div>\n </div>\n );\n })}\n </div>\n {caption != null && (\n <div className=\"mt-2 text-xs text-text-subtle\">{caption}</div>\n )}\n </div>\n ),\n);\nWorkHoursBar.displayName = \"WorkHoursBar\";\n","import * as React from \"react\";\n\nimport { SearchIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\n/** 키보드 단축키 배지. 활성 행에선 현재 색(brand)을 따라간다. */\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** 활성(하이라이트) 컨텍스트에 놓였는지 여부. */\n active?: boolean;\n}\n\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\n ({ active, className, children, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n \"rounded border px-1.5 py-px font-mono text-xs\",\n active\n ? \"border-current bg-transparent text-brand-text\"\n : \"border-border-subtle bg-bg-base text-text-subtle\",\n className,\n )}\n {...props}\n >\n {children}\n </kbd>\n ),\n);\nKbd.displayName = \"Kbd\";\n\n/** 커맨드 팔레트의 개별 명령. */\nexport interface CommandItem {\n /** 선택 콜백 식별용 고유 값. */\n id: string;\n /** 선행 아이콘(예: ./icons 의 PlusIcon). */\n icon?: React.ReactNode;\n /** 표시 라벨. */\n label: string;\n /** 단축키 표기(예: \"⌘N\"). */\n kbd?: string;\n}\n\n/** 헤딩으로 묶인 명령 그룹. */\nexport interface CommandGroup {\n /** 그룹 헤딩(생략 시 헤딩 없이 렌더). */\n heading?: string;\n items: CommandItem[];\n}\n\nexport interface CommandPaletteProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** 그룹으로 묶인 명령 목록. */\n groups: CommandGroup[];\n /** 명령 선택 시 호출. */\n onSelect?: (item: CommandItem) => void;\n /** 현재 하이라이트(활성)된 명령의 id. */\n activeId?: string;\n /** 검색 입력의 표시 문구. */\n placeholder?: string;\n /** 검색 입력 우측에 표시할 단축키. */\n searchKbd?: string;\n /** 열림 여부. false면 렌더하지 않는다. */\n open?: boolean;\n}\n\n/**\n * 검색 입력 + 그룹 헤딩 + 결과 행(아이콘·라벨·단축키)으로 구성된 커맨드 팔레트.\n * 활성 행은 brand-subtle 배경 + brand-text 로 하이라이트된다.\n */\nexport const CommandPalette = React.forwardRef<\n HTMLDivElement,\n CommandPaletteProps\n>(\n (\n {\n groups,\n onSelect,\n activeId,\n placeholder = \"명령 또는 검색…\",\n searchKbd = \"⌘K\",\n open = true,\n className,\n ...props\n },\n ref,\n ) => {\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n role=\"dialog\"\n aria-label=\"커맨드 팔레트\"\n className={cn(\n \"w-[420px] max-w-full overflow-hidden rounded-lg border border-border-subtle bg-surface-default shadow-lg\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2.5 border-b border-border-subtle px-4 py-3.5\">\n <SearchIcon size={18} className=\"text-text-subtle\" />\n <span className=\"flex-1 text-sm text-text-subtle\">{placeholder}</span>\n {searchKbd ? <Kbd>{searchKbd}</Kbd> : null}\n </div>\n <div className=\"p-1.5\">\n {groups.map((group, gi) => (\n <div key={group.heading ?? gi}>\n {group.heading ? (\n <div className=\"px-2.5 pb-1 pt-2 text-xs font-bold uppercase tracking-wide text-text-subtle\">\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const active = item.id === activeId;\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onSelect?.(item)}\n className={cn(\n \"flex w-full items-center gap-2.5 rounded px-2.5 py-2 text-left text-sm [&>svg]:h-[17px] [&>svg]:w-[17px]\",\n active\n ? \"bg-brand-subtle text-brand-text\"\n : \"text-text-default hover:bg-surface-hover\",\n )}\n >\n {item.icon}\n <span className=\"flex-1\">{item.label}</span>\n {item.kbd ? <Kbd active={active}>{item.kbd}</Kbd> : null}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\nCommandPalette.displayName = \"CommandPalette\";\n","import * as React from \"react\";\n\nimport { Avatar, type AvatarColor, type AvatarSize } from \"./avatar\";\nimport { Presence, type PresenceStatus } from \"./presence\";\nimport { cn } from \"./utils\";\n\nexport interface AvatarWithPresenceProps {\n /** 이름 (Avatar alt) */\n name: string;\n /** presence 상태 — offline 이면 아바타 흐림(opacity .55) */\n status?: PresenceStatus;\n /** 마스코트 색 */\n color?: AvatarColor;\n /** 프로필 이미지 URL */\n src?: string;\n /** 아바타 크기 — 미지정 시 Avatar 자체 기본값 사용 */\n size?: AvatarSize;\n /** presence dot 링 색 — 얹히는 표면과 맞춘다(기본 surface-default) */\n ringClassName?: string;\n className?: string;\n}\n\n/** Avatar + Presence 코너 dot 조합(오프라인 흐림 포함) — 사이드바 DM·멤버 리스트 공용 SSOT. */\nexport const AvatarWithPresence = React.forwardRef<\n HTMLSpanElement,\n AvatarWithPresenceProps\n>(\n (\n {\n name,\n status = \"online\",\n color,\n src,\n size,\n ringClassName = \"ring-surface-default\",\n className,\n },\n ref,\n ) => (\n <span ref={ref} className={cn(\"relative inline-flex shrink-0\", className)}>\n <Avatar\n size={size}\n color={color}\n src={src}\n alt={name}\n className={cn(\"ring-0\", status === \"offline\" && \"opacity-[.55]\")}\n />\n <Presence\n status={status}\n size=\"sm\"\n className={cn(\"absolute -bottom-0.5 -right-0.5 ring-2\", ringClassName)}\n />\n </span>\n ),\n);\nAvatarWithPresence.displayName = \"AvatarWithPresence\";\n","import * as React from \"react\";\n\nimport { cva } from \"class-variance-authority\";\n\nimport type { AvatarColor } from \"./avatar\";\nimport { AvatarWithPresence } from \"./avatar-presence\";\nimport { Button } from \"./button\";\nimport { HashIcon, LockIcon, PinIcon, PlusIcon } from \"./icons\";\nimport type { PresenceStatus } from \"./presence\";\nimport { cn } from \"./utils\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarSection — 섹션 헤더(+옵션 추가 버튼) + 아이템 컨테이너 */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 섹션 제목 (예: \"채널\", \"다이렉트 메시지\") */\n title: string;\n /** 헤더 우측 추가(+) 버튼 노출 */\n addable?: boolean;\n /** 추가 버튼 클릭 핸들러 */\n onAdd?: () => void;\n /** 추가 버튼 접근성 레이블 */\n addLabel?: string;\n}\n\nexport const SidebarSection = React.forwardRef<\n HTMLDivElement,\n SidebarSectionProps\n>(({ title, addable, onAdd, addLabel, className, children, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <div className=\"flex items-center gap-1.5 px-2 pb-1.5 pt-2.5 text-xs font-semibold text-text-subtle\">\n {title}\n {addable && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAdd}\n aria-label={addLabel ?? `${title} 추가`}\n className=\"ml-auto h-6 w-6 rounded p-0 text-brand-solid\"\n >\n <PlusIcon size={16} />\n </Button>\n )}\n </div>\n {children}\n </div>\n));\nSidebarSection.displayName = \"SidebarSection\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarChannel — 채널 행 (#/자물쇠 아이콘 + 미읽음 배지) */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarChannelProps extends React.HTMLAttributes<HTMLButtonElement> {\n /** 채널 이름 */\n name: string;\n /** 커스텀 아이콘. 미지정 시 locked에 따라 Lock/Hash */\n icon?: React.ReactNode;\n /** 비공개 채널 — 기본 아이콘을 자물쇠로 */\n locked?: boolean;\n /** 현재 선택된 채널 */\n active?: boolean;\n /** 미읽음 카운트 배지 */\n badge?: string | number;\n}\n\nexport const SidebarChannel = React.forwardRef<\n HTMLButtonElement,\n SidebarChannelProps\n>(({ name, icon, locked, active, badge, className, ...props }, ref) => {\n const resolvedIcon =\n icon ?? (locked ? <LockIcon size={17} /> : <HashIcon size={17} />);\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"flex h-9 w-full cursor-pointer items-center gap-2.5 rounded-lg px-2.5 text-left text-sm hover:bg-sidebar-accent\",\n active\n ? \"bg-sidebar-accent font-semibold text-sidebar-accent-fg\"\n : \"text-sidebar-fg\",\n className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"inline-flex shrink-0\",\n active ? \"text-sidebar-accent-fg\" : \"text-sidebar-fg\",\n )}\n >\n {resolvedIcon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{name}</span>\n {badge != null && badge !== \"\" && (\n <span className=\"ml-auto inline-flex h-[18px] min-w-[18px] shrink-0 items-center justify-center rounded-full bg-brand-solid px-1.5 text-[11px] font-semibold leading-none text-text-on-brand\">\n {badge}\n </span>\n )}\n </button>\n );\n});\nSidebarChannel.displayName = \"SidebarChannel\";\n\n/* -------------------------------------------------------------------------- */\n/* SidebarDm — DM 행 (Avatar + Presence 재사용 + 고정 핀) */\n/* -------------------------------------------------------------------------- */\n\nexport interface SidebarDmProps extends React.HTMLAttributes<HTMLButtonElement> {\n /** 상대 이름 */\n name: string;\n /** presence 상태 */\n status?: PresenceStatus;\n /** 마스코트 색 (Avatar 재사용). 미지정 시 이름 기반 기본값 */\n color?: AvatarColor;\n /** 프로필 이미지 URL (있으면 Avatar가 우선 사용) */\n avatarSrc?: string;\n /** 고정 표시 */\n pinned?: boolean;\n}\n\nexport const SidebarDm = React.forwardRef<HTMLButtonElement, SidebarDmProps>(\n (\n { name, status = \"online\", color, avatarSrc, pinned, className, ...props },\n ref,\n ) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex h-9 w-full cursor-pointer items-center gap-2.5 rounded-lg px-2.5 text-left text-sm text-sidebar-fg hover:bg-sidebar-accent\",\n className,\n )}\n {...props}\n >\n <AvatarWithPresence\n name={name}\n status={status}\n color={color}\n src={avatarSrc}\n size=\"xs\"\n ringClassName=\"ring-sidebar-bg\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{name}</span>\n {pinned && (\n <PinIcon\n size={14}\n className=\"ml-auto shrink-0 text-text-subtle\"\n aria-label=\"고정됨\"\n />\n )}\n </button>\n ),\n);\nSidebarDm.displayName = \"SidebarDm\";\n\n/* -------------------------------------------------------------------------- */\n/* Sidebar — 데이터(props) 기반 사이드바 패널 */\n/* -------------------------------------------------------------------------- */\n\n/** 채널 아이템 데이터 (kind 생략 시 채널로 간주) */\nexport interface SidebarChannelData extends Omit<\n SidebarChannelProps,\n \"className\"\n> {\n kind?: \"channel\";\n /** 고유 키 */\n id?: string;\n}\n\n/** DM 아이템 데이터 */\nexport interface SidebarDmData extends Omit<SidebarDmProps, \"className\"> {\n kind: \"dm\";\n /** 고유 키 */\n id?: string;\n}\n\nexport type SidebarItem = SidebarChannelData | SidebarDmData;\n\nexport interface SidebarSectionData {\n /** 섹션 제목 */\n title: string;\n /** 헤더 추가(+) 버튼 노출 */\n addable?: boolean;\n /** 추가 버튼 핸들러 */\n onAdd?: () => void;\n /** 섹션 아이템 목록 */\n items: SidebarItem[];\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /** 섹션 목록 (헤더 + 채널/DM 아이템) */\n sections: SidebarSectionData[];\n /** panel(기본: 라운드 카드) | shell(앱 셸 임베드: 라운드 없음·우측 보더·풀 높이 — 폭은 소비자가 className으로 지정) */\n variant?: \"panel\" | \"shell\";\n}\n\n/** 사이드바 컨테이너 변형 (스토리 프리뷰·Sidebar 공용 SSOT) */\nexport const sidebarContainerVariants = cva(\n \"border-border-subtle bg-sidebar-bg p-2\",\n {\n variants: {\n variant: {\n panel: \"w-[260px] max-w-full rounded-lg border\",\n shell: \"h-full border-r\",\n },\n },\n defaultVariants: { variant: \"panel\" },\n },\n);\n\n/** 스토리/문서용 사이드바 패널 컨테이너 — Sidebar 컨테이너와 동일 크롬. 앱에서는 Sidebar(nav landmark)를 사용할 것. */\nexport const SidebarPanel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(sidebarContainerVariants({ variant: \"panel\" }), className)}\n {...props}\n />\n));\nSidebarPanel.displayName = \"SidebarPanel\";\n\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ sections, variant = \"panel\", className, ...props }, ref) => (\n <nav\n ref={ref}\n className={cn(sidebarContainerVariants({ variant }), className)}\n {...props}\n >\n {sections.map((section, si) => (\n <SidebarSection\n key={section.title + si}\n title={section.title}\n addable={section.addable}\n onAdd={section.onAdd}\n >\n {section.items.map((item, ii) => {\n const key = item.id ?? item.name + ii;\n if (item.kind === \"dm\") {\n const { kind, id, ...rest } = item;\n void kind;\n void id;\n return <SidebarDm key={key} {...rest} />;\n }\n const { kind, id, ...rest } = item;\n void kind;\n void id;\n return <SidebarChannel key={key} {...rest} />;\n })}\n </SidebarSection>\n ))}\n </nav>\n ),\n);\nSidebar.displayName = \"Sidebar\";\n","import * as React from \"react\"\n\nimport { cn } from \"./utils\"\n\n/* -------------------------------------------------------------------------- */\n/* List — 범용 리스트 컨테이너 */\n/* -------------------------------------------------------------------------- */\n\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n /** 컨테이너 테두리 + 라운드 표시 (기본 true) */\n bordered?: boolean\n /** 행 사이 구분선 표시 (기본 true) */\n divided?: boolean\n}\n\nconst List = React.forwardRef<HTMLUListElement, ListProps>(\n ({ className, bordered = true, divided = true, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn(\n \"bg-surface-default px-4\",\n bordered && \"rounded-lg border border-border-subtle\",\n divided && \"[&>li+li]:border-t [&>li+li]:border-border-subtle\",\n className,\n )}\n {...props}\n />\n )\n },\n)\nList.displayName = \"List\"\n\n/* -------------------------------------------------------------------------- */\n/* ListItem — 범용 행: leading / title / description / trailing */\n/* -------------------------------------------------------------------------- */\n\nexport interface ListItemProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"title\"> {\n /** 좌측 요소(아바타/아이콘 등) */\n leading?: React.ReactNode\n /** 제목(필수) */\n title: React.ReactNode\n /** 보조 설명 */\n description?: React.ReactNode\n /** 우측 요소(배지/버튼/아이콘 등) */\n trailing?: React.ReactNode\n}\n\nconst ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n ({ className, leading, title, description, trailing, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn(\"flex items-center gap-3 py-2.5\", className)}\n {...props}\n >\n {leading != null ? (\n <div className=\"relative shrink-0\">{leading}</div>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-semibold text-text-default\">\n {title}\n </div>\n {description != null ? (\n <div className=\"truncate text-xs text-text-subtle\">\n {description}\n </div>\n ) : null}\n </div>\n {trailing != null ? (\n <div className=\"flex shrink-0 items-center gap-2\">{trailing}</div>\n ) : null}\n </li>\n )\n },\n)\nListItem.displayName = \"ListItem\"\n\nexport { List, ListItem }\n","import * as React from \"react\";\n\nimport { CheckIcon } from \"./icons\";\nimport { cn } from \"./utils\";\n\nexport interface SuccessCheckProps\n extends React.HTMLAttributes<HTMLSpanElement> {\n /** 뱃지 지름(px). 기본 22. 체크 아이콘은 이 값의 약 60%로 렌더된다. */\n size?: number;\n}\n\n/**\n * SuccessCheck — brand 솔리드 원형 배지 + 흰 체크.\n * success/green 토큰 없이 완료 상태를 시맨틱 brand 토큰만으로 표현하는 프리미티브.\n */\nexport const SuccessCheck = React.forwardRef<HTMLSpanElement, SuccessCheckProps>(\n ({ size = 22, className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full bg-brand-solid text-text-on-brand\",\n className\n )}\n style={{ width: size, height: size }}\n {...props}\n >\n <CheckIcon size={Math.round(size * 0.6)} strokeWidth={3} />\n </span>\n )\n);\nSuccessCheck.displayName = \"SuccessCheck\";\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Separator — presentation primitive (shadcn/Radix Separator 대응).\n *\n * 선 색은 시맨틱 토큰 `border-border-default`, 두께는 Foundation border-width(1px).\n * - horizontal: 1px 풀폭 라인 (border-t)\n * - vertical: 1px 세로 라인, 부모 높이 채움 (border-l + self-stretch)\n * - label: 가운데 텍스트 + 양옆 flex-1 라인 (항상 horizontal)\n *\n * 접근성: 기본은 role=\"separator\" + aria-orientation. `decorative`면 순수 장식으로\n * 취급해 role=\"none\" 으로 a11y 트리에서 제거한다.\n */\nconst separatorVariants = cva(\"shrink-0 border-border-default\", {\n variants: {\n orientation: {\n horizontal: \"w-full border-t\",\n vertical: \"h-full self-stretch border-l\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n})\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n /** 가운데 라벨. 있으면 텍스트 양옆에 라인을 그린다(라벨형은 항상 수평). */\n label?: React.ReactNode\n /** 순수 장식이면 true — a11y 트리에서 제거(role=\"none\"). 기본 false = 시맨틱 구분선. */\n decorative?: boolean\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = \"horizontal\", label, decorative = false, ...props },\n ref\n ) => {\n const resolvedOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\"\n // 라벨형은 항상 수평.\n const ariaOrientation = label != null ? \"horizontal\" : resolvedOrientation\n\n const a11yProps = decorative\n ? ({ role: \"none\" } as const)\n : ({ role: \"separator\", \"aria-orientation\": ariaOrientation } as const)\n\n // 라벨형 — 라인 + 가운데 텍스트 + 라인.\n if (label != null) {\n return (\n <div\n ref={ref}\n {...a11yProps}\n className={cn(\n \"flex w-full items-center gap-3 text-sm text-text-subtle\",\n className\n )}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex-1 border-t border-border-default\"\n />\n <span className=\"shrink-0\">{label}</span>\n <span\n aria-hidden=\"true\"\n className=\"flex-1 border-t border-border-default\"\n />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n {...a11yProps}\n className={cn(\n separatorVariants({ orientation: resolvedOrientation }),\n className\n )}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = \"Separator\"\n\nexport { Separator, separatorVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\n\n/**\n * Popover — presentation-only floating container for arbitrary content.\n *\n * Click the trigger to toggle; outside-click and ESC close it. Positioning here\n * is a lightweight Tailwind approximation for the design catalog (no @radix-ui /\n * floating-ui) — real portal/collision behavior is wired by the app dev.\n * Visibility is `open` (controlled) or internal state (uncontrolled via\n * `defaultOpen`). `placement` picks the side, `align` slides along that side.\n */\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\"\nexport type PopoverAlign = \"start\" | \"center\" | \"end\"\n\nconst popoverContentVariants = cva(\n // content shell: raised surface · border · radius lg(8) · shadow-popover · padding\n \"absolute z-50 w-max min-w-[220px] max-w-xs rounded-lg border border-border-default bg-surface-default p-4 text-sm text-text-default shadow-popover outline-none\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n align: {\n start: \"\",\n center: \"\",\n end: \"\",\n },\n },\n compoundVariants: [\n // vertical placements (top/bottom) → align along the X axis\n { placement: [\"top\", \"bottom\"], align: \"start\", class: \"left-0\" },\n {\n placement: [\"top\", \"bottom\"],\n align: \"center\",\n class: \"left-1/2 -translate-x-1/2\",\n },\n { placement: [\"top\", \"bottom\"], align: \"end\", class: \"right-0\" },\n // horizontal placements (left/right) → align along the Y axis\n { placement: [\"left\", \"right\"], align: \"start\", class: \"top-0\" },\n {\n placement: [\"left\", \"right\"],\n align: \"center\",\n class: \"top-1/2 -translate-y-1/2\",\n },\n { placement: [\"left\", \"right\"], align: \"end\", class: \"bottom-0\" },\n ],\n defaultVariants: {\n placement: \"bottom\",\n align: \"center\",\n },\n }\n)\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"content\">,\n VariantProps<typeof popoverContentVariants> {\n /** The floating panel content (any node). */\n content: React.ReactNode\n /** The trigger element the popover is anchored to. */\n children: React.ReactNode\n /** Controlled open state. When set, internal state is ignored. */\n open?: boolean\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean\n /** Fired whenever the open state changes. */\n onOpenChange?: (open: boolean) => void\n}\n\nconst Popover = React.forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n className,\n content,\n children,\n placement = \"bottom\",\n align = \"center\",\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...props\n },\n ref\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = openProp !== undefined\n const open = isControlled ? openProp : uncontrolledOpen\n\n const innerRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLDivElement, [])\n\n const contentId = React.useId()\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange]\n )\n\n // Outside-click + ESC close (simple, non-portal). Only active while open.\n React.useEffect(() => {\n if (!open) return\n const onPointerDown = (event: PointerEvent) => {\n const node = innerRef.current\n if (node && !node.contains(event.target as Node)) setOpen(false)\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false)\n }\n document.addEventListener(\"pointerdown\", onPointerDown)\n document.addEventListener(\"keydown\", onKeyDown)\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown)\n document.removeEventListener(\"keydown\", onKeyDown)\n }\n }, [open, setOpen])\n\n return (\n <div\n ref={innerRef}\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n <span\n className=\"inline-flex\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? contentId : undefined}\n onClick={(event) => {\n if (!event.defaultPrevented) setOpen(!open)\n }}\n >\n {children}\n </span>\n {open ? (\n <div\n id={contentId}\n role=\"dialog\"\n aria-modal=\"false\"\n className={cn(popoverContentVariants({ placement, align }))}\n >\n {content}\n </div>\n ) : null}\n </div>\n )\n }\n)\nPopover.displayName = \"Popover\"\n\nexport { Popover, popoverContentVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { Label } from \"./label\"\nimport { cn } from \"./utils\"\n\n/**\n * Field — form-field wrapper (FormField).\n *\n * Lays out a label (+ required mark / optional badge), a control\n * (`children`: input / textarea / select) and a helper or error message\n * in a consistent vertical stack. When `error` is set it takes priority\n * over `hint`, and the control is wired with `aria-invalid` /\n * `aria-describedby` for non-colour accessibility.\n */\n\nconst fieldVariants = cva(\"flex gap-1.5\", {\n variants: {\n orientation: {\n vertical: \"flex-col\",\n horizontal: \"flex-row items-start gap-4\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nexport interface FieldProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n VariantProps<typeof fieldVariants> {\n /** Field label text. Rendered inside a native `<label htmlFor>`. */\n label?: React.ReactNode\n /** id of the control this field labels (also applied to the child). */\n htmlFor?: string\n /** Show a red required marker (`*`, text-danger-text). */\n required?: boolean\n /** Show a subtle \"선택\" badge (reuses the DS Label). Ignored when required. */\n optional?: boolean\n /** Helper text below the control (text-text-subtle). */\n hint?: React.ReactNode\n /** Error text below the control. Takes priority over `hint` (text-danger-text). */\n error?: React.ReactNode\n /** The control: input / textarea / select. */\n children?: React.ReactNode\n}\n\nconst Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n className,\n orientation = \"vertical\",\n label,\n htmlFor,\n required = false,\n optional = false,\n hint,\n error,\n children,\n ...props\n },\n ref\n ) => {\n const reactId = React.useId()\n const controlId = htmlFor ?? reactId\n const isHorizontal = orientation === \"horizontal\"\n\n const messageId = error\n ? `${controlId}-error`\n : hint\n ? `${controlId}-hint`\n : undefined\n\n // Wire the control (single element child) with id + aria attributes.\n const control = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<any>, {\n id: (children.props as any).id ?? controlId,\n \"aria-invalid\": error ? true : (children.props as any)[\"aria-invalid\"],\n \"aria-describedby\":\n [(children.props as any)[\"aria-describedby\"], messageId]\n .filter(Boolean)\n .join(\" \") || undefined,\n })\n : children\n\n return (\n <div\n ref={ref}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n >\n {label ? (\n <div className={cn(isHorizontal && \"w-40 shrink-0 pt-2\")}>\n <label\n htmlFor={controlId}\n className=\"inline-flex items-center gap-1.5 text-sm font-medium text-text-default\"\n >\n <span className=\"inline-flex items-center gap-1\">\n {label}\n {required ? (\n <span aria-hidden=\"true\" className=\"text-danger-text\">\n *\n </span>\n ) : null}\n </span>\n {optional && !required ? (\n <Label variant=\"neutral\">선택</Label>\n ) : null}\n </label>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex min-w-0 flex-col gap-1.5\",\n isHorizontal && \"flex-1\"\n )}\n >\n {control}\n {error ? (\n <p\n id={`${controlId}-error`}\n className=\"flex items-center gap-1 text-sm text-danger-text\"\n >\n {error}\n </p>\n ) : hint ? (\n <p\n id={`${controlId}-hint`}\n className=\"flex items-center gap-1 text-sm text-text-subtle\"\n >\n {hint}\n </p>\n ) : null}\n </div>\n </div>\n )\n }\n)\nField.displayName = \"Field\"\n\nexport { Field, fieldVariants }\n","import * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { ChevronLeftIcon, ChevronRightIcon, SearchIcon, XIcon } from \"./icons\"\nimport { inputVariants } from \"./input\"\nimport { cn } from \"./utils\"\n\nexport interface SearchFieldProps\n extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n > {\n /** Controlled query value. */\n value?: string\n /** Uncontrolled initial value. */\n defaultValue?: string\n /** Fires with the next query string on typing or clear. */\n onValueChange?: (value: string) => void\n /** Placeholder copy. Defaults to \"검색\". */\n placeholder?: string\n /** When a number, renders a \"{n}건\" result count on the trailing side. */\n resultCount?: number\n /** Shows a previous-result nav button when provided. */\n onPrev?: () => void\n /** Shows a next-result nav button when provided. */\n onNext?: () => void\n /** Shows a clear (x) button when provided and the field has a value. */\n onClear?: () => void\n /** Field height/padding scale. Mirrors Input's inputSize. */\n size?: VariantProps<typeof inputVariants>[\"inputSize\"]\n}\n\n/** Small icon button used for trailing nav / clear accessories. */\nconst accessoryButtonClass =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded text-text-subtle transition-colors hover:bg-surface-hover hover:text-text-default active:bg-surface-pressed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border disabled:pointer-events-none disabled:text-text-disabled\"\n\n/**\n * SearchField — a search input built on Input's visual tokens (inputVariants).\n * Adds a leading search icon plus optional trailing accessories: a result\n * count, previous/next navigation, and a clear (x) button. Query state is\n * controlled via `value`/`onValueChange` or uncontrolled via `defaultValue`.\n */\nconst SearchField = React.forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n className,\n value,\n defaultValue,\n onValueChange,\n placeholder = \"검색\",\n resultCount,\n onPrev,\n onNext,\n onClear,\n size,\n disabled,\n ...props\n },\n ref\n ) => {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? \"\"\n )\n const currentValue = isControlled ? value : internalValue\n\n const innerRef = React.useRef<HTMLInputElement>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement)\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n }\n\n const handleClear = () => {\n commit(\"\")\n onClear?.()\n innerRef.current?.focus()\n }\n\n const hasCount = typeof resultCount === \"number\"\n const hasNav = Boolean(onPrev || onNext)\n const showClear = Boolean(onClear) && currentValue.length > 0\n const showAccessories = hasCount || hasNav || showClear\n const showDivider = hasCount && (hasNav || showClear)\n\n return (\n <div\n className={cn(\n inputVariants({ inputSize: size }),\n \"cursor-text focus-within:border-border-focus focus-within:ring-2 focus-within:ring-brand-border focus-within:ring-offset-2 focus-within:ring-offset-bg-base\",\n disabled &&\n \"cursor-not-allowed bg-surface-sunken text-text-disabled\",\n className\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex size-5 shrink-0 items-center justify-center text-text-subtle [&_svg]:size-5\"\n >\n <SearchIcon />\n </span>\n\n <input\n ref={innerRef}\n type=\"search\"\n role=\"searchbox\"\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(event) => commit(event.target.value)}\n className=\"h-full w-full min-w-0 bg-transparent text-text-default outline-none placeholder:text-text-subtle disabled:cursor-not-allowed disabled:text-text-disabled [&::-webkit-search-cancel-button]:hidden\"\n {...props}\n />\n\n {showAccessories ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {hasCount ? (\n <span className=\"shrink-0 whitespace-nowrap text-sm tabular-nums text-text-subtle\">\n {resultCount}건\n </span>\n ) : null}\n\n {showDivider ? (\n <span aria-hidden=\"true\" className=\"h-4 w-px bg-border-subtle\" />\n ) : null}\n\n {onPrev ? (\n <button\n type=\"button\"\n aria-label=\"이전 결과\"\n disabled={disabled}\n onClick={onPrev}\n className={accessoryButtonClass}\n >\n <ChevronLeftIcon size={16} />\n </button>\n ) : null}\n\n {onNext ? (\n <button\n type=\"button\"\n aria-label=\"다음 결과\"\n disabled={disabled}\n onClick={onNext}\n className={accessoryButtonClass}\n >\n <ChevronRightIcon size={16} />\n </button>\n ) : null}\n\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"검색어 지우기\"\n disabled={disabled}\n onClick={handleClear}\n className={accessoryButtonClass}\n >\n <XIcon size={16} />\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n }\n)\nSearchField.displayName = \"SearchField\"\n\nexport { SearchField }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./utils\"\nimport { XIcon } from \"./icons\"\n\n/**\n * Banner — dismissible, full-width inline notification.\n *\n * Distinct from Alert: a Banner spans the full width of its container and is\n * meant for persistent, dismissible announcements (release notes, billing\n * notices, maintenance windows). Colour comes only from semantic variant\n * tokens; the icon + close button inherit the variant text colour.\n */\nconst bannerVariants = cva(\n \"flex w-full items-start gap-3 rounded-lg border p-4 text-sm\",\n {\n variants: {\n variant: {\n neutral: \"border-border-default bg-surface-sunken text-text-default\",\n brand: \"border-brand-border bg-brand-subtle text-brand-text\",\n danger: \"border-danger-border bg-danger-subtle text-danger-text\",\n },\n },\n defaultVariants: {\n variant: \"neutral\",\n },\n }\n)\n\nexport interface BannerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof bannerVariants> {\n /** Leading status icon. Inherits the variant text colour. */\n icon?: React.ReactNode\n /** Emphasised heading rendered above the body (children). */\n title?: React.ReactNode\n /** When true, renders a trailing close button that calls `onDismiss`. */\n dismissible?: boolean\n /** Fired when the close button is pressed. */\n onDismiss?: () => void\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n {\n className,\n variant,\n icon,\n title,\n dismissible = false,\n onDismiss,\n children,\n role = \"status\",\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={role}\n className={cn(bannerVariants({ variant }), className)}\n {...props}\n >\n {icon ? (\n <span\n aria-hidden=\"true\"\n className=\"mt-0.5 flex size-5 shrink-0 items-center justify-center [&_svg]:size-5\"\n >\n {icon}\n </span>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p className=\"font-semibold leading-5\">{title}</p>\n ) : null}\n {children ? (\n <div className={cn(\"leading-5\", title && \"mt-1\")}>{children}</div>\n ) : null}\n </div>\n {dismissible ? (\n <button\n type=\"button\"\n aria-label=\"닫기\"\n onClick={onDismiss}\n className=\"-m-1 inline-flex size-6 shrink-0 items-center justify-center rounded text-current opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-border focus-visible:ring-offset-2 focus-visible:ring-offset-bg-base\"\n >\n <XIcon className=\"size-4\" />\n </button>\n ) : null}\n </div>\n )\n }\n)\nBanner.displayName = \"Banner\"\n\nexport { Banner, bannerVariants }\n"]}
|