@exem-ui/react 0.3.4-next.20260702065311 → 0.3.4-next.20260713005253

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/avatar/Avatar.tsx","../src/badge/Badge.tsx","../src/star/Star.tsx","../src/tag/Tag.tsx","../src/breadcrumb/Breadcrumb.tsx","../src/button/Button.tsx","../src/button/IconButton.tsx","../src/button/ButtonGroup.tsx","../src/checkbox/Checkbox.tsx","../src/radio/Radio.tsx","../src/switch/Switch.tsx","../src/picker/DatePicker.tsx","../src/dropdown/dropdownVariants.ts","../src/dropdown/Dropdown.tsx","../src/input/TextArea.tsx","../src/input/TextField.tsx","../src/scrollArea/ScrollArea.tsx","../src/modal/Modal.tsx","../src/sheet/sheetResize.ts","../src/sheet/SheetResizable.tsx","../src/sheet/Sheet.tsx","../src/messageBox/MessageBox.tsx","../src/loading/Loading.tsx","../src/progress/Progress.tsx","../src/toast/Toaster.tsx","../src/toast/ToastProvider.tsx","../src/toast/toast.tsx","../src/toast/useToast.tsx","../src/utils.ts"],"names":["cva","jsx","Person","cn","forwardRef","jsxs","X","Fragment","Slot","MoreHorizontal","iconSizes","cloneElement","ConditionalTooltip","useId","CheckboxPrimitive","Minus","Check","containerVariants","stateClasses","labelVariants","RadioGroupPrimitive","SwitchPrimitives","ChevronLeft","ChevronRight","getDefaultClassNames","useState","DayPicker","month","overlayListVariants","createContext","useContext","DropdownMenuPrimitive","commonInputVariants","React","ScrollAreaPrimitive","DialogPrimitive","Resizable","DialogPrimitive2","DialogPrimitive3","Sonner","React2","sonnerToast","Error","Info","Warning"],"mappings":"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","file":"index.js","sourcesContent":["import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { PersonIcon } from '../icon';\n\ninterface AvatarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof avatarVariants> {\n /** 사용자 이름. 이미지가 없을 때 이니셜 폴백에 사용됩니다. */\n name?: string;\n /** 아바타 이미지 URL */\n src?: string;\n /** 이미지 대체 텍스트 */\n alt?: string;\n}\n\ntype AvatarComponent = React.ForwardRefExoticComponent<\n AvatarProps & React.RefAttributes<HTMLDivElement>\n>;\n\n// 크기별 설정 상수\nconst SIZE_CONFIG = {\n xsmall: {\n container: 'size-[16px] text-body-3',\n initialPadding: 'px-[2.5px] leading-none tracking-tight',\n imagePadding: 'p-[2px]',\n iconSize: 'size-[12px]',\n },\n small: {\n container: 'size-[20px] text-body-2',\n initialPadding: 'px-[3.5px]',\n imagePadding: 'p-[3px]',\n iconSize: 'size-[14px]',\n },\n medium: {\n container: 'size-[24px] text-body-2',\n initialPadding: 'px-[5.5px] py-[2px]',\n imagePadding: 'p-[4px]',\n iconSize: 'size-[16px]',\n },\n large: {\n container: 'size-[32px] text-title-2',\n initialPadding: 'px-[8px] py-[3.5px]',\n imagePadding: 'p-[6px]',\n iconSize: 'size-[20px]',\n },\n} as const;\n\nconst avatarVariants = cva(\n 'flex items-center justify-center rounded-[28px] text-center font-semibold',\n {\n variants: {\n size: {\n xsmall: SIZE_CONFIG.xsmall.container,\n small: SIZE_CONFIG.small.container,\n medium: SIZE_CONFIG.medium.container,\n large: SIZE_CONFIG.large.container,\n },\n type: {\n initial: 'bg-elevation-elevation-5 text-elevation-elevation-0',\n image: 'bg-elevation-elevation-4 text-elevation-elevation-0',\n },\n },\n compoundVariants: [\n // Initial type variants\n { type: 'initial', size: 'xsmall', class: SIZE_CONFIG.xsmall.initialPadding },\n { type: 'initial', size: 'small', class: SIZE_CONFIG.small.initialPadding },\n { type: 'initial', size: 'medium', class: SIZE_CONFIG.medium.initialPadding },\n { type: 'initial', size: 'large', class: SIZE_CONFIG.large.initialPadding },\n ],\n defaultVariants: {\n size: 'medium',\n type: 'initial',\n },\n },\n);\n\nconst getInitial = (name?: string): string => {\n return name ? name.charAt(0).toUpperCase() : '';\n};\n\nconst renderInitialContent = (name?: string) => {\n return <span>{getInitial(name)}</span>;\n};\n\nconst renderImageContent = (src: string, alt?: string, name?: string) => {\n return (\n <img src={src} alt={alt || name || 'Avatar'} className=\"size-full rounded-full object-cover\" />\n );\n};\n\nconst renderIconContent = (size: keyof typeof SIZE_CONFIG = 'medium') => {\n const iconSize = SIZE_CONFIG[size].iconSize;\n return <PersonIcon className={cn('shrink-0', iconSize)} />;\n};\n\n/**\n * 사용자 아바타를 표시하는 컴포넌트입니다. 이니셜, 이미지, 아이콘 폴백을 지원합니다.\n *\n * @example\n * ```tsx\n * // 이니셜 표시\n * <Avatar name=\"홍길동\" size=\"large\" />\n *\n * // 이미지 표시\n * <Avatar type=\"image\" src=\"/avatar.png\" name=\"홍길동\" />\n *\n * // 이미지 없을 때 아이콘 폴백\n * <Avatar type=\"image\" name=\"홍길동\" />\n * ```\n *\n * @see {@link AvatarProps} props 상세\n */\nconst Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, size = 'medium', type = 'initial', name, src, alt, ...props }, ref) => {\n const resolvedSize = size || 'medium';\n const isFallback = type === 'image' && !src;\n const fallbackPadding = isFallback ? SIZE_CONFIG[resolvedSize].imagePadding : undefined;\n\n const renderContent = () => {\n if (type === 'initial') {\n return renderInitialContent(name);\n }\n\n if (type === 'image') {\n return src ? renderImageContent(src, alt, name) : renderIconContent(resolvedSize);\n }\n\n return null;\n };\n\n return (\n <div\n ref={ref}\n className={cn(avatarVariants({ size, type }), fallbackPadding, className)}\n {...props}\n >\n {renderContent()}\n </div>\n );\n },\n) as AvatarComponent;\n\nAvatar.displayName = 'Avatar';\n\nexport { Avatar };\nexport type { AvatarComponent, AvatarProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * 배지 스타일 변형\n * @default 'default'\n */\n variant?: 'default' | 'accent';\n /**\n * 비활성화 상태\n * @default false\n */\n disabled?: boolean;\n}\n\ntype BadgeComponent = React.ForwardRefExoticComponent<\n BadgeProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-strong border px-[4px] text-body-3 font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n accent: 'border-transparent bg-solid-accent-default text-text-static-light',\n 'accent-disabled': 'border-transparent bg-solid-accent-disabled text-text-inverse-disabled',\n default: 'border-transparent bg-elevation-elevation-3 text-text-secondary',\n 'default-disabled': 'border-transparent bg-elevation-elevation-2 text-text-disabled',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\n/**\n * 상태나 카운트를 표시하는 배지 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Badge variant=\"accent\">3</Badge>\n * <Badge variant=\"default\" disabled>0</Badge>\n * ```\n *\n * @see {@link BadgeProps} props 상세\n */\nconst Badge = forwardRef<HTMLDivElement, BadgeProps>(\n ({ className, variant = 'default', disabled = false, ...props }, ref) => {\n const finalVariant = disabled ? (`${variant}-disabled` as const) : variant;\n\n return (\n <div\n ref={ref}\n className={cn(badgeVariants({ variant: finalVariant }), className)}\n {...props}\n />\n );\n },\n) as BadgeComponent;\n\nBadge.displayName = 'Badge';\n\nexport { Badge };\nexport type { BadgeComponent, BadgeProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef, type SVGProps } from 'react';\n\ninterface StarProps extends React.SVGProps<SVGSVGElement> {\n /**\n * 별 아이콘 크기\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * 선택(채워짐) 상태 여부\n * @default false\n */\n selected?: boolean;\n /** 클릭 이벤트 핸들러 */\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n}\n\ntype StarComponent = React.ForwardRefExoticComponent<\n Omit<StarProps, 'ref'> & React.RefAttributes<SVGSVGElement>\n>;\n\nconst StarRoundedEmpty = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"1em\"\n height=\"1em\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n stroke=\"#cfcfcf\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m10 14.773 4.275 2.628a.656.656 0 0 0 .978-.716l-1.162-4.905 3.804-3.282a.66.66 0 0 0-.374-1.154l-4.993-.407-1.923-4.656a.653.653 0 0 0-1.21 0L7.473 6.937l-4.993.407a.661.661 0 0 0-.374 1.158l3.805 3.281-1.163 4.902a.656.656 0 0 0 .978.716z\"\n />\n </svg>\n);\n\nconst StarRoundedFilled = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"1em\"\n height=\"1em\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fill=\"#FE9A00\"\n d=\"m18.304 8.973-3.516 3.033 1.071 4.537a1.281 1.281 0 0 1-1.914 1.392L10 15.507l-3.948 2.428a1.28 1.28 0 0 1-1.911-1.392l1.075-4.537L1.7 8.973a1.286 1.286 0 0 1 .728-2.254l4.61-.372 1.778-4.303a1.278 1.278 0 0 1 2.364 0l1.778 4.303 4.61.372a1.286 1.286 0 0 1 .731 2.255z\"\n />\n </svg>\n);\n\n/**\n * 별점 평가에 사용되는 Star 아이콘 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Star selected size=\"medium\" onClick={() => console.log('clicked')} />\n * ```\n *\n * @see {@link StarProps} props 상세\n */\nconst Star = forwardRef<SVGSVGElement, StarProps>(\n ({ size = 'medium', selected = false, className, onClick, ...props }, ref) => {\n const sizeConfig = {\n small: { width: 16, height: 16 },\n medium: { width: 20, height: 20 },\n large: { width: 24, height: 24 },\n };\n const config = sizeConfig[size];\n\n return selected ? (\n <StarRoundedFilled\n ref={ref}\n width={config.width}\n height={config.height}\n className={cn('cursor-pointer transition-colors', className)}\n onClick={onClick}\n {...props}\n />\n ) : (\n <StarRoundedEmpty\n ref={ref}\n width={config.width}\n height={config.height}\n className={cn('cursor-pointer transition-colors', className)}\n onClick={onClick}\n {...props}\n />\n );\n },\n) as StarComponent;\n\nStar.displayName = 'Star';\n\nexport { Star };\nexport type { StarComponent, StarProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { Fragment, forwardRef } from 'react';\nimport { XIcon } from '../icon';\n\ntype TagColor = VariantProps<typeof tagVariants>['color'];\n\ninterface TagProps\n extends Pick<React.HTMLAttributes<HTMLDivElement>, 'className' | 'children' | 'style'>,\n VariantProps<typeof tagVariants> {\n /** 텍스트 왼쪽에 표시할 아이콘 */\n leftIcon?: React.ReactElement<{ className?: string }>;\n /**\n * 삭제 아이콘 표시 여부\n * @default false\n */\n canDelete?: boolean;\n /** 삭제 버튼 클릭 핸들러 */\n onDelete?: () => void;\n /** 텍스트 오른쪽에 표시할 슬롯 요소 */\n rightSlot?: React.ReactNode;\n}\n\ntype TagComponent = React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLDivElement>>;\n\ninterface DoubleTagProps {\n /** 표시할 태그 항목 배열 (각 항목은 color와 content를 가짐) */\n items: {\n color: TagColor;\n content: React.ReactNode;\n }[];\n className?: string;\n}\n\nconst tagVariants = cva(\n 'inline-flex h-5 items-center gap-0.5 rounded-medium px-1 text-body-3 font-medium',\n {\n variants: {\n color: {\n mono: 'text-tint-foreground-mono',\n sky: 'text-tint-foreground-sky',\n red: 'text-tint-foreground-red',\n amber: 'text-tint-foreground-amber',\n green: 'text-tint-foreground-green',\n orange: 'text-tint-foreground-orange',\n cyan: 'text-tint-foreground-cyan',\n violet: 'text-tint-foreground-violet',\n pink: 'text-tint-foreground-pink',\n yellow: 'text-tint-foreground-yellow',\n lime: 'text-tint-foreground-lime',\n emerald: 'text-tint-foreground-emerald',\n teal: 'text-tint-foreground-teal',\n blue: 'text-tint-foreground-blue',\n indigo: 'text-tint-foreground-indigo',\n purple: 'text-tint-foreground-purple',\n fuchsia: 'text-tint-foreground-fuchsia',\n rose: 'text-tint-foreground-rose',\n },\n type: {\n fill: '',\n line: 'bg-component-tag border border-border-secondary',\n },\n },\n compoundVariants: [\n { color: 'mono', type: 'fill', className: 'bg-tint-background-mono' },\n { color: 'sky', type: 'fill', className: 'bg-tint-background-sky' },\n { color: 'red', type: 'fill', className: 'bg-tint-background-red' },\n { color: 'amber', type: 'fill', className: 'bg-tint-background-amber' },\n { color: 'green', type: 'fill', className: 'bg-tint-background-green' },\n { color: 'orange', type: 'fill', className: 'bg-tint-background-orange' },\n { color: 'cyan', type: 'fill', className: 'bg-tint-background-cyan' },\n { color: 'violet', type: 'fill', className: 'bg-tint-background-violet' },\n { color: 'pink', type: 'fill', className: 'bg-tint-background-pink' },\n { color: 'yellow', type: 'fill', className: 'bg-tint-background-yellow' },\n { color: 'lime', type: 'fill', className: 'bg-tint-background-lime' },\n { color: 'emerald', type: 'fill', className: 'bg-tint-background-emerald' },\n { color: 'teal', type: 'fill', className: 'bg-tint-background-teal' },\n { color: 'blue', type: 'fill', className: 'bg-tint-background-blue' },\n { color: 'indigo', type: 'fill', className: 'bg-tint-background-indigo' },\n { color: 'purple', type: 'fill', className: 'bg-tint-background-purple' },\n { color: 'fuchsia', type: 'fill', className: 'bg-tint-background-fuchsia' },\n { color: 'rose', type: 'fill', className: 'bg-tint-background-rose' },\n ],\n defaultVariants: {\n color: 'mono',\n type: 'fill',\n },\n },\n);\n\n/**\n * 카테고리나 상태를 나타내는 라벨 컴포넌트입니다.\n * 18가지 색상과 `fill`/`line` 타입을 지원합니다.\n *\n * @example\n * ```tsx\n * <Tag color=\"sky\">라벨</Tag>\n * <Tag color=\"red\" type=\"line\">경고</Tag>\n * <Tag color=\"green\" canDelete onDelete={handleDelete}>삭제 가능</Tag>\n * <Tag color=\"blue\" leftIcon={<StarIcon type=\"regular\" />}>아이콘 태그</Tag>\n * <Tag color=\"blue\" rightSlot={<Icon />}>커스텀 슬롯</Tag>\n * ```\n *\n * @see {@link TagProps} props 상세\n */\nconst Tag = forwardRef<HTMLDivElement, TagProps>(\n (\n {\n className,\n color,\n type = 'fill',\n leftIcon,\n canDelete,\n onDelete,\n rightSlot,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n data-slot=\"tag\"\n className={cn(tagVariants({ color, type, className }))}\n ref={ref}\n {...props}\n >\n {leftIcon && (\n <span className=\"flex shrink-0 size-3 items-center justify-center [&>svg]:size-3\">\n {leftIcon}\n </span>\n )}\n <span className=\"px-0.5 text-body-3 font-medium\">{children}</span>\n {canDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete?.();\n }}\n >\n <XIcon type=\"regular\" className=\"size-3 [&>*]:stroke-current [&>path]:fill-current\" />\n </button>\n )}\n {rightSlot && <div className=\"ml-auto\">{rightSlot}</div>}\n </div>\n );\n },\n);\n\nTag.displayName = 'Tag';\n\n/**\n * 두 개의 태그를 나란히 연결하여 키-값 쌍을 표시하는 컴포넌트입니다.\n * 각 태그는 `line` 타입으로 렌더링되며, 사이에 구분선이 표시됩니다.\n *\n * @example\n * ```tsx\n * <DoubleTag\n * items={[\n * { color: 'blue', content: '카테고리' },\n * { color: 'red', content: '긴급' },\n * ]}\n * />\n * ```\n *\n * @see {@link DoubleTagProps} props 상세\n */\nconst DoubleTag = forwardRef<HTMLDivElement, DoubleTagProps>(\n ({ className, items, ...props }, ref) => {\n return (\n <div\n className={cn(\n 'flex w-fit overflow-hidden rounded-medium border border-border-secondary',\n className,\n )}\n ref={ref}\n {...props}\n >\n {items.map((item, index) => (\n <Fragment key={index}>\n <Tag color={item.color} type=\"line\" className=\"rounded-none border-none\">\n {item.content}\n </Tag>\n {index < items.length - 1 && (\n <div className=\"min-h-[20px] w-px border-none bg-border-secondary\" />\n )}\n </Fragment>\n ))}\n </div>\n );\n },\n);\n\nDoubleTag.displayName = 'DoubleTag';\n\nexport { Tag, DoubleTag };\nexport type { TagComponent, TagProps, TagColor, DoubleTagProps };\n","import { cn } from '@exem-ui/core/utils';\nimport { Slot } from '@radix-ui/react-slot';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { MoreHorizontalIcon } from '../icon';\n\ntype BreadcrumbRootProps = React.ComponentPropsWithoutRef<'nav'>;\n\ntype BreadcrumbListProps = React.ComponentPropsWithoutRef<'ol'>;\n\ntype BreadcrumbItemProps = React.ComponentPropsWithoutRef<'li'>;\n\ntype BreadcrumbLinkProps = React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean;\n};\n\ntype BreadcrumbPageProps = React.ComponentPropsWithoutRef<'span'>;\n\ntype BreadcrumbPathProps = React.ComponentPropsWithoutRef<'span'>;\n\ntype BreadcrumbSeparatorProps = React.ComponentProps<'li'>;\n\ntype BreadcrumbEllipsisProps = React.ComponentProps<'span'>;\n\ntype BreadcrumbComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbRootProps> & React.RefAttributes<HTMLElement>\n> & {\n List: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbListProps> & React.RefAttributes<HTMLOListElement>\n >;\n Item: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbItemProps> & React.RefAttributes<HTMLLIElement>\n >;\n Link: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbLinkProps> & React.RefAttributes<HTMLAnchorElement>\n >;\n Page: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbPageProps> & React.RefAttributes<HTMLSpanElement>\n >;\n Path: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbPathProps> & React.RefAttributes<HTMLSpanElement>\n >;\n Separator: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbSeparatorProps> & React.RefAttributes<HTMLLIElement>\n >;\n Ellipsis: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbEllipsisProps> & React.RefAttributes<HTMLSpanElement>\n >;\n};\n\n/**\n * 현재 페이지의 계층 위치를 표시하는 탐색 경로 컴포넌트입니다.\n * Compound Component 패턴으로 하위 컴포넌트와 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Breadcrumb>\n * <Breadcrumb.List>\n * <Breadcrumb.Item>\n * <Breadcrumb.Link href=\"/\">홈</Breadcrumb.Link>\n * </Breadcrumb.Item>\n * <Breadcrumb.Separator />\n * <Breadcrumb.Item>\n * <Breadcrumb.Path>상위 경로</Breadcrumb.Path>\n * </Breadcrumb.Item>\n * <Breadcrumb.Separator />\n * <Breadcrumb.Item>\n * <Breadcrumb.Page>현재 페이지</Breadcrumb.Page>\n * </Breadcrumb.Item>\n * </Breadcrumb.List>\n * </Breadcrumb>\n * ```\n *\n * @see {@link BreadcrumbRootProps} props 상세\n */\nconst Breadcrumb = forwardRef<HTMLElement, BreadcrumbRootProps>(({ ...props }, ref) => (\n <nav ref={ref} aria-label=\"breadcrumb\" {...props} />\n)) as BreadcrumbComponent;\n\nBreadcrumb.List = forwardRef<HTMLOListElement, BreadcrumbListProps>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-[4px] break-words text-body-2 text-text-tertiary',\n className,\n )}\n {...props}\n />\n ),\n) as BreadcrumbComponent['List'];\n\nBreadcrumb.Item = forwardRef<HTMLLIElement, BreadcrumbItemProps>(({ className, ...props }, ref) => (\n <li ref={ref} className={cn('inline-flex items-center', className)} {...props} />\n)) as BreadcrumbComponent['Item'];\n\nBreadcrumb.Link = forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return <Comp ref={ref} className={cn('text-text-link', className)} {...props} />;\n },\n) as BreadcrumbComponent['Link'];\n\nBreadcrumb.Page = forwardRef<HTMLSpanElement, BreadcrumbPageProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-text-primary', className)}\n {...props}\n />\n ),\n) as BreadcrumbComponent['Page'];\n\nBreadcrumb.Path = forwardRef<HTMLSpanElement, BreadcrumbPathProps>(\n ({ className, ...props }, ref) => (\n <span ref={ref} className={cn('text-text-tertiary', className)} {...props} />\n ),\n) as BreadcrumbComponent['Path'];\n\nBreadcrumb.Separator = forwardRef<HTMLLIElement, BreadcrumbSeparatorProps>(\n ({ children, className, ...props }, ref) => (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? '/'}\n </li>\n ),\n) as BreadcrumbComponent['Separator'];\n\nBreadcrumb.Ellipsis = forwardRef<HTMLSpanElement, BreadcrumbEllipsisProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontalIcon type=\"regular\" className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n ),\n) as BreadcrumbComponent['Ellipsis'];\n\nBreadcrumb.displayName = 'Breadcrumb';\nBreadcrumb.List.displayName = 'Breadcrumb.List';\nBreadcrumb.Item.displayName = 'Breadcrumb.Item';\nBreadcrumb.Link.displayName = 'Breadcrumb.Link';\nBreadcrumb.Page.displayName = 'Breadcrumb.Page';\nBreadcrumb.Path.displayName = 'Breadcrumb.Path';\nBreadcrumb.Separator.displayName = 'Breadcrumb.Separator';\nBreadcrumb.Ellipsis.displayName = 'Breadcrumb.Ellipsis';\n\nexport { Breadcrumb };\nexport type {\n BreadcrumbComponent,\n BreadcrumbRootProps,\n BreadcrumbListProps,\n BreadcrumbItemProps,\n BreadcrumbLinkProps,\n BreadcrumbPageProps,\n BreadcrumbPathProps,\n BreadcrumbSeparatorProps,\n BreadcrumbEllipsisProps,\n};\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { cloneElement, forwardRef } from 'react';\nimport { type IconBaseProps, iconSizes } from '../icon';\n\ntype ButtonColor = 'primary' | 'accent' | 'critical';\ntype ButtonSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\ntype ButtonBackground = 'none' | 'fill';\ntype ButtonVariant = 'solid' | 'assistive' | 'outlined' | 'invisible';\n\ntype ButtonVariantProps =\n | { variant?: 'solid' | 'assistive'; color?: ButtonColor; background?: never }\n | { variant: 'outlined' | 'invisible'; color?: ButtonColor; background?: ButtonBackground };\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color' | 'background'> &\n ButtonVariantProps & {\n size?: ButtonSize;\n icon?: React.ReactElement<IconBaseProps>;\n };\n\ntype ButtonComponent = React.ForwardRefExoticComponent<\n ButtonProps & React.RefAttributes<HTMLButtonElement>\n>;\n\ntype StylePart = { button: string; icon: string; text: string };\n\nconst colorStyles: Record<ButtonColor, Record<ButtonVariant, StylePart>> = {\n primary: {\n solid: {\n button:\n 'bg-solid-primary-default hover:bg-solid-primary-hovered disabled:bg-solid-primary-disabled',\n icon: 'text-icon-inverse group-disabled/button:text-icon-inverse',\n text: 'text-text-inverse group-disabled/button:text-text-inverse',\n },\n assistive: {\n button:\n 'bg-elevation-elevation-2 hover:bg-elevation-elevation-3 disabled:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n },\n accent: {\n solid: {\n button:\n 'bg-solid-accent-default hover:bg-solid-accent-hovered disabled:bg-solid-accent-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n assistive: {\n button: 'bg-elevation-accent-0 hover:bg-elevation-accent-1 disabled:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n },\n critical: {\n solid: {\n button:\n 'bg-solid-critical-default hover:bg-solid-critical-hovered disabled:bg-solid-critical-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n assistive: {\n button:\n 'bg-elevation-critical-0 hover:bg-elevation-critical-1 disabled:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n },\n};\n\nconst buttonVariants = cva(\n 'inline-flex w-fit shrink-0 cursor-pointer flex-row items-center justify-center rounded-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed',\n {\n compoundVariants: [\n // Primary 색상 조합\n { className: colorStyles.primary.solid.button, color: 'primary', variant: 'solid' },\n { className: colorStyles.primary.assistive.button, color: 'primary', variant: 'assistive' },\n { className: colorStyles.primary.outlined.button, color: 'primary', variant: 'outlined' },\n { className: colorStyles.primary.invisible.button, color: 'primary', variant: 'invisible' },\n // Accent 색상 조합\n { className: colorStyles.accent.solid.button, color: 'accent', variant: 'solid' },\n { className: colorStyles.accent.assistive.button, color: 'accent', variant: 'assistive' },\n { className: colorStyles.accent.outlined.button, color: 'accent', variant: 'outlined' },\n { className: colorStyles.accent.invisible.button, color: 'accent', variant: 'invisible' },\n // Critical 색상 조합\n { className: colorStyles.critical.solid.button, color: 'critical', variant: 'solid' },\n { className: colorStyles.critical.assistive.button, color: 'critical', variant: 'assistive' },\n { className: colorStyles.critical.outlined.button, color: 'critical', variant: 'outlined' },\n { className: colorStyles.critical.invisible.button, color: 'critical', variant: 'invisible' },\n // background 표면은 outlined/invisible 에서만 추가\n {\n className: 'bg-elevation-elevation-0',\n background: 'fill',\n variant: ['outlined', 'invisible'],\n },\n ],\n defaultVariants: {\n background: 'none',\n color: 'primary',\n size: 'medium',\n variant: 'solid',\n },\n variants: {\n background: {\n none: '',\n fill: '',\n },\n color: {\n accent: '',\n critical: '',\n primary: '',\n },\n size: {\n xsmall: 'h-6 gap-0 px-1 text-body-3 font-medium',\n small: 'h-7 gap-0.5 px-1.5 text-body-2 font-medium',\n medium: 'h-8 gap-0.5 px-2 text-body-2 font-medium',\n large: 'h-10 gap-1 px-2.5 text-body-1 font-medium',\n xlarge: 'h-12 gap-1 px-3 text-title-2 font-medium',\n },\n variant: {\n solid: '',\n assistive: '',\n outlined: '',\n invisible: '',\n },\n },\n },\n);\n\nconst IconSizeMap = {\n xsmall: iconSizes.sm,\n small: iconSizes.sm,\n medium: iconSizes.sm,\n large: iconSizes.md,\n xlarge: iconSizes.lg,\n} as const;\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'solid',\n color = 'primary',\n background,\n size = 'medium',\n icon,\n children,\n ...props\n },\n ref,\n ) => {\n const content = (\n <>\n {icon &&\n cloneElement(icon, {\n className: cn(\n 'shrink-0 [&>path]:fill-current',\n colorStyles[color][variant].icon,\n icon.props.className,\n ),\n size: icon.props.size ?? IconSizeMap[size],\n })}\n {typeof children === 'string' ? (\n <span\n className={cn(\n 'truncate',\n size === 'xlarge' ? 'px-1' : 'px-0.5',\n colorStyles[color][variant].text,\n )}\n >\n {children}\n </span>\n ) : (\n children\n )}\n </>\n );\n\n return (\n <button\n className={cn(\n buttonVariants({\n background,\n className,\n color,\n size,\n variant,\n }),\n 'group/button',\n )}\n ref={ref}\n {...props}\n >\n {content}\n </button>\n );\n },\n) as ButtonComponent;\n\nButton.displayName = 'Button';\n\nexport { Button };\nexport type { ButtonComponent, ButtonProps, ButtonVariantProps, ButtonSize };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport type { ComponentProps } from 'react';\nimport { forwardRef } from 'react';\nimport { ConditionalTooltip } from '../flat';\nimport type { IconBaseProps } from '../icon';\nimport type { ButtonSize, ButtonVariantProps } from './Button';\nimport { Button } from './Button';\n\ntype IconButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> &\n ButtonVariantProps & {\n icon: React.ReactElement<IconBaseProps>;\n size?: ButtonSize;\n /** 툴팁 설정 (문자열 또는 FlatTooltip 설정 객체) */\n tooltip?: ComponentProps<typeof ConditionalTooltip>['tooltip'];\n };\n\ntype IconButtonComponent = React.ForwardRefExoticComponent<\n IconButtonProps & React.RefAttributes<HTMLButtonElement>\n>;\n\nconst iconButtonSizeClasses = {\n xsmall: 'size-6',\n small: 'size-7',\n medium: 'size-8',\n large: 'size-10',\n xlarge: 'size-12',\n};\n\nconst IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ className, tooltip, icon, size = 'medium', ...props }, ref) => {\n const buttonProps = {\n className: cn(iconButtonSizeClasses[size], 'px-0', className),\n icon,\n size,\n ...props,\n };\n\n return (\n <ConditionalTooltip tooltip={tooltip}>\n <Button ref={ref} {...(buttonProps as React.ComponentProps<typeof Button>)} />\n </ConditionalTooltip>\n );\n },\n) as IconButtonComponent;\n\nIconButton.displayName = 'IconButton';\n\nexport { IconButton };\nexport type { IconButtonComponent, IconButtonProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport type { ComponentProps } from 'react';\nimport { forwardRef } from 'react';\nimport { ConditionalTooltip } from '../flat';\nimport type { IconBaseProps } from '../icon';\nimport { Button } from './Button';\nimport { IconButton } from './IconButton';\n\ntype ButtonGroupSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\ninterface ButtonGroupItem {\n id: string;\n label?: string;\n icon?: React.ReactElement<IconBaseProps>;\n /** 툴팁 설정 (문자열 또는 FlatTooltip 설정 객체) */\n tooltip?: ComponentProps<typeof ConditionalTooltip>['tooltip'];\n onClick?: () => void;\n}\n\ninterface ButtonGroupProps {\n /** 버튼 그룹 스타일 변형 */\n variant?: 'contained' | 'outlined';\n /** 아이콘만 표시 */\n iconOnly?: boolean;\n /** 배경색 표시 여부 (뒷 레이어가 보이지 않아야 할 때) */\n hasBackground?: boolean;\n /** 버튼 크기 */\n size?: ButtonGroupSize;\n /** 버튼 항목 목록 */\n items: ButtonGroupItem[];\n /** 커스텀 className */\n className?: string;\n}\n\ntype ButtonGroupComponent = React.ForwardRefExoticComponent<\n ButtonGroupProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n variant = 'contained',\n iconOnly = false,\n hasBackground = false,\n size = 'medium',\n items,\n className,\n },\n ref,\n ) => {\n if (items.length === 0) {\n return null;\n }\n\n const isOutlined = variant === 'outlined';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'inline-flex items-center overflow-hidden rounded-medium',\n hasBackground && 'bg-elevation-elevation-0',\n className,\n )}\n role=\"group\"\n >\n {items.map((item, index) => {\n const isFirst = index === 0;\n const isLast = index === items.length - 1;\n\n const roundedClasses = cn('rounded-none', {\n 'rounded-l-medium': isFirst,\n 'rounded-r-medium': isLast,\n });\n\n // contained: 버튼 사이 divider, outlined: -ml-px로 border 병합\n const dividerClasses = !isOutlined && !isLast ? 'border-r border-border-primary' : '';\n const mergeClasses = isOutlined && !isFirst ? '-ml-px' : '';\n const hoverClasses = isOutlined ? 'relative hover:z-10' : '';\n\n if (iconOnly) {\n const iconBaseProps = {\n className: cn(roundedClasses, dividerClasses, mergeClasses, hoverClasses),\n icon: item.icon!,\n onClick: item.onClick,\n size,\n };\n\n return (\n <ConditionalTooltip key={item.id} tooltip={item.tooltip}>\n {variant === 'contained' ? (\n <IconButton {...iconBaseProps} variant=\"assistive\" />\n ) : (\n <IconButton {...iconBaseProps} color=\"primary\" variant=\"outlined\" />\n )}\n </ConditionalTooltip>\n );\n }\n\n const buttonBaseProps = {\n className: cn(roundedClasses, dividerClasses, mergeClasses, hoverClasses),\n icon: item.icon,\n onClick: item.onClick,\n size,\n };\n\n return (\n <ConditionalTooltip key={item.id} tooltip={item.tooltip}>\n {variant === 'contained' ? (\n <Button {...buttonBaseProps} variant=\"assistive\">\n {item.label}\n </Button>\n ) : (\n <Button {...buttonBaseProps} color=\"primary\" variant=\"outlined\">\n {item.label}\n </Button>\n )}\n </ConditionalTooltip>\n );\n })}\n </div>\n );\n },\n) as ButtonGroupComponent;\n\nButtonGroup.displayName = 'ButtonGroup';\n\nexport { ButtonGroup };\nexport type { ButtonGroupComponent, ButtonGroupItem, ButtonGroupProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { CheckIcon, MinusIcon } from '../icon';\n\ntype CheckboxSize = 'small' | 'medium' | 'large';\n\ntype LabelPosition = 'left' | 'right';\n\ninterface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /** 체크 상태. `'indeterminate'`는 부분 선택을 나타냅니다. */\n checked?: boolean | 'indeterminate';\n /** 체크박스 옆에 표시할 레이블 */\n label?: React.ReactNode;\n /** 추가 클래스명 */\n className?: string;\n /**\n * 체크박스 크기\n * @default 'medium'\n */\n size?: CheckboxSize;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: LabelPosition;\n /** 체크 상태 변경 핸들러 */\n onCheckedChange?: (checked: boolean) => void;\n /** 초기 체크 상태 (비제어) */\n defaultChecked?: boolean;\n /**\n * 비활성화 상태\n * @default false\n */\n disabled?: boolean;\n}\n\ntype CheckboxComponent = React.ForwardRefExoticComponent<\n CheckboxProps & React.RefAttributes<HTMLButtonElement>\n>;\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: {\n small: 'gap-1',\n medium: 'gap-1.5',\n large: 'gap-2',\n },\n labelPosition: {\n right: 'flex-row',\n left: 'flex-row-reverse',\n },\n },\n defaultVariants: {\n size: 'medium',\n labelPosition: 'right',\n },\n});\n\nconst boxVariants = cva(\n 'peer shrink-0 cursor-pointer rounded-weak border border-border-secondary ring-offset-background transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed enabled:data-[state=unchecked]:hover:bg-elevation-elevation-2 disabled:data-[state=unchecked]:bg-elevation-elevation-3 bg-background-primary',\n {\n variants: {\n size: {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-6',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst labelVariants = cva(\n 'cursor-pointer select-none text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: {\n size: {\n small: 'text-body-3',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst iconVariants = cva('text-icon-static-light', {\n variants: {\n size: {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-6',\n },\n disabled: {\n true: 'text-icon-inverse-disabled',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\nconst stateClasses = [\n 'data-[state=checked]:bg-solid-accent-default data-[state=checked]:border-transparent',\n 'data-[state=indeterminate]:bg-solid-accent-default data-[state=indeterminate]:border-transparent',\n 'enabled:data-[state=checked]:hover:bg-solid-accent-hovered enabled:data-[state=indeterminate]:hover:bg-solid-accent-hovered',\n 'enabled:data-[state=checked]:hover:border-transparent enabled:data-[state=indeterminate]:hover:border-transparent',\n 'disabled:data-[state=checked]:bg-solid-accent-disabled disabled:data-[state=indeterminate]:bg-solid-accent-disabled',\n 'disabled:data-[state=checked]:border-transparent disabled:data-[state=indeterminate]:border-transparent',\n];\n\n/**\n * 하나 이상의 항목을 선택하는 체크박스 컴포넌트입니다.\n * 체크, 미체크, indeterminate(부분 선택) 상태를 지원합니다.\n *\n * @example\n * ```tsx\n * // 기본 사용\n * <Checkbox label=\"이용 약관에 동의합니다\" />\n *\n * // 제어 컴포넌트\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} label=\"선택\" />\n *\n * // 부분 선택 상태\n * <Checkbox checked=\"indeterminate\" label=\"전체 선택\" />\n * ```\n *\n * @see {@link CheckboxProps} props 상세\n */\nconst Checkbox = forwardRef<React.ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n (\n {\n className,\n label,\n id,\n size = 'medium',\n labelPosition = 'right',\n checked,\n onCheckedChange,\n disabled = false,\n defaultChecked,\n ...props\n },\n ref,\n ) => {\n const uniqueId = useId();\n const checkboxId = id || uniqueId;\n\n const checkboxState =\n checked === 'indeterminate' ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n\n const checkboxProps: Record<string, unknown> = {\n ...props,\n ref,\n id: checkboxId,\n className: cn(boxVariants({ size }), stateClasses, className),\n onCheckedChange: (state: boolean | 'indeterminate') => {\n onCheckedChange?.(state === 'indeterminate' ? true : !!state);\n },\n 'data-state': checkboxState,\n disabled,\n };\n\n if (checked !== undefined) {\n checkboxProps.checked = checked;\n }\n\n if (defaultChecked !== undefined) {\n checkboxProps.defaultChecked = defaultChecked;\n }\n\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n <CheckboxPrimitive.Root\n {...(checkboxProps as React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>)}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n {checkboxState === 'indeterminate' ? (\n <MinusIcon type=\"regular\" className={cn(iconVariants({ size, disabled }))} />\n ) : checkboxState === 'checked' ? (\n <CheckIcon type=\"regular\" className={cn(iconVariants({ size, disabled }))} />\n ) : null}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label htmlFor={checkboxId} className={cn(labelVariants({ size }))}>\n {label}\n </label>\n )}\n </div>\n );\n },\n) as CheckboxComponent;\n\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\nexport type { CheckboxComponent, CheckboxProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\n\ntype RadioRootProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;\n\ntype RadioItemProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> & {\n /**\n * 라디오 버튼 크기\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /** 라디오 버튼 옆에 표시할 레이블 */\n label?: React.ReactNode;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: 'left' | 'right';\n};\n\ntype RadioComponent = React.ForwardRefExoticComponent<\n RadioRootProps & React.RefAttributes<React.ElementRef<typeof RadioGroupPrimitive.Root>>\n> & {\n Item: React.ForwardRefExoticComponent<\n RadioItemProps & React.RefAttributes<React.ElementRef<typeof RadioGroupPrimitive.Item>>\n >;\n};\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: { small: 'gap-1', medium: 'gap-1.5', large: 'gap-2' },\n labelPosition: { right: 'flex-row', left: 'flex-row-reverse' },\n },\n defaultVariants: { size: 'medium', labelPosition: 'right' },\n});\n\nconst radioVariants = cva(\n 'peer relative shrink-0 rounded-full border border-border-secondary ring-offset-background transition-colors hover:bg-elevation-elevation-2 bg-background-primary',\n {\n variants: { size: { small: 'size-4', medium: 'size-5', large: 'size-6' } },\n defaultVariants: { size: 'medium' },\n },\n);\n\nconst stateClasses = [\n 'disabled:cursor-not-allowed',\n 'disabled:data-[state=unchecked]:bg-elevation-elevation-3',\n];\n\nconst checkedStateClasses = [\n 'data-[state=checked]:border-border-accent',\n 'disabled:data-[state=checked]:border-border-accent-disabled',\n];\n\nconst indicatorVariants = cva(\n 'pointer-events-none block rounded-full bg-icon-accent data-[disabled]:bg-icon-accent-disabled',\n {\n variants: {\n size: { small: 'size-2.5', medium: 'size-3', large: 'size-3.5' },\n },\n defaultVariants: { size: 'medium' },\n },\n);\n\nconst labelVariants = cva(\n 'cursor-pointer select-none text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: { size: { small: 'text-body-3', medium: 'text-body-2', large: 'text-body-1' } },\n defaultVariants: { size: 'medium' },\n },\n);\n\n/**\n * 여러 옵션 중 하나를 선택하는 라디오 그룹 컴포넌트입니다.\n * Compound Component 패턴으로 `Radio.Item`과 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Radio defaultValue=\"a\">\n * <Radio.Item value=\"a\" label=\"옵션 A\" />\n * <Radio.Item value=\"b\" label=\"옵션 B\" />\n * </Radio>\n * ```\n *\n * @see {@link RadioRootProps} 루트 props 상세\n * @see {@link RadioItemProps} 아이템 props 상세\n */\nconst Radio = forwardRef<React.ElementRef<typeof RadioGroupPrimitive.Root>, RadioRootProps>(\n ({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-2', className)} {...props} />\n ),\n) as RadioComponent;\n\nRadio.Item = forwardRef<React.ElementRef<typeof RadioGroupPrimitive.Item>, RadioItemProps>(\n ({ className, size = 'medium', label, labelPosition = 'right', id, disabled, ...props }, ref) => {\n const uniqueId = useId();\n const radioId = id || uniqueId;\n const control = (\n <RadioGroupPrimitive.Item\n ref={ref}\n id={radioId}\n disabled={disabled}\n className={cn(radioVariants({ size }), stateClasses, checkedStateClasses, className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span\n className={cn('block', indicatorVariants({ size }))}\n data-disabled={disabled ? '' : undefined}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n if (!label) {\n return control;\n }\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n {control}\n <label htmlFor={radioId} className={cn(labelVariants({ size }))}>\n {label}\n </label>\n </div>\n );\n },\n) as RadioComponent['Item'];\n\nRadio.displayName = 'Radio';\nRadio.Item.displayName = 'Radio.Item';\n\nexport { Radio };\nexport type { RadioComponent, RadioRootProps, RadioItemProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\n\nconst switchVariants = cva(\n 'peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full disabled:cursor-not-allowed data-[state=checked]:bg-solid-accent-default data-[state=unchecked]:bg-elevation-elevation-4 hover:data-[state=checked]:bg-solid-accent-hovered hover:data-[state=unchecked]:bg-elevation-elevation-5 disabled:data-[state=checked]:bg-solid-accent-disabled disabled:data-[state=unchecked]:bg-elevation-elevation-3 disabled:hover:data-[state=checked]:bg-solid-accent-disabled disabled:hover:data-[state=unchecked]:bg-elevation-elevation-3',\n {\n variants: {\n size: {\n small: 'h-[16px] w-[28px]',\n medium: 'h-[20px] w-[36px]',\n large: 'h-[24px] w-[44px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst switchThumbVariants = cva(\n 'pointer-events-none absolute bg-icon-static-light left-[2px] top-[2px] rounded-full ring-0 data-[state=unchecked]:translate-x-0 data-[disabled]:bg-icon-inverse-disabled',\n {\n variants: {\n size: {\n small: 'size-[12px] data-[state=checked]:translate-x-[12px]',\n medium: 'size-[16px] data-[state=checked]:translate-x-[16px]',\n large: 'size-[20px] data-[state=checked]:translate-x-[20px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: {\n small: 'gap-1',\n medium: 'gap-1.5',\n large: 'gap-2',\n },\n labelPosition: {\n right: 'flex-row',\n left: 'flex-row-reverse',\n },\n },\n defaultVariants: {\n size: 'medium',\n labelPosition: 'right',\n },\n});\n\nconst switchLabelVariants = cva(\n 'cursor-pointer select-none font-regular text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: {\n size: {\n small: 'text-body-3',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\ninterface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>,\n VariantProps<typeof switchVariants> {\n /** 스위치 옆에 표시할 레이블 텍스트 */\n label?: string;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: 'left' | 'right';\n}\n\ntype SwitchComponent = React.ForwardRefExoticComponent<\n SwitchProps & React.RefAttributes<HTMLButtonElement>\n>;\n\n/**\n * 켜기/끄기 상태를 전환하는 스위치 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Switch label=\"알림 받기\" size=\"medium\" />\n * <Switch label=\"다크 모드\" labelPosition=\"left\" defaultChecked />\n * ```\n *\n * @see {@link SwitchProps} props 상세\n */\nconst Switch = forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\n ({ className, size = 'medium', label, labelPosition = 'right', id, ...props }, ref) => {\n // 고유한 ID 생성 (접근성을 위해)\n const switchId = useId();\n const finalId = id || switchId;\n\n const switchElement = (\n <SwitchPrimitives.Root\n id={finalId}\n className={cn(switchVariants({ size }), className)}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitives.Root>\n );\n\n if (!label) {\n return switchElement;\n }\n\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n {switchElement}\n <label htmlFor={finalId} className={cn(switchLabelVariants({ size }))}>\n {label}\n </label>\n </div>\n );\n },\n) as SwitchComponent;\n\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\nexport type { SwitchComponent, SwitchProps };\n","import { cn } from '@exem-ui/core/utils';\nimport { type ComponentProps, useState } from 'react';\nimport { type DayButtonProps, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { ChevronLeft, ChevronRight } from '../icon';\n\ntype DistributiveOmit<T, K extends string> = T extends unknown ? Omit<T, K> : never;\n\ntype DatePickerProps = DistributiveOmit<ComponentProps<typeof DayPicker>, 'mode'> & {\n /** 날짜 선택 유형 */\n type?: 'single' | 'range';\n};\n\nfunction DatePickerChevron({ orientation }: { orientation?: string }) {\n if (orientation === 'left') {\n return <ChevronLeft type=\"regular\" className=\"size-5\" />;\n }\n return <ChevronRight type=\"regular\" className=\"size-5\" />;\n}\n\nfunction DatePickerDayButton({\n day,\n modifiers,\n children,\n className,\n ...buttonProps\n}: DayButtonProps) {\n return (\n <button className={cn(className, 'relative')} {...buttonProps}>\n {children}\n {modifiers.today && (\n <span\n className={cn(\n 'absolute bottom-[3px] left-1/2 size-1 -translate-x-1/2 rounded-full',\n modifiers.selected ? 'bg-text-inverse' : 'bg-icon-critical',\n )}\n />\n )}\n </button>\n );\n}\n\nfunction DatePicker({ type = 'single', showOutsideDays = true, ...rest }: DatePickerProps) {\n const dayPickerProps = { ...rest, mode: type } as ComponentProps<typeof DayPicker>;\n const defaultClassNames = getDefaultClassNames();\n const [month, setMonth] = useState(\n dayPickerProps.month ?? dayPickerProps.defaultMonth ?? new Date(),\n );\n\n const rangeSelected =\n type === 'range' ? (rest as { selected?: { from?: Date; to?: Date } }).selected : undefined;\n const isRangeComplete = rangeSelected?.from != null && rangeSelected?.to != null;\n\n const handleMonthChange = (newMonth: Date) => {\n setMonth(newMonth);\n dayPickerProps.onMonthChange?.(newMonth);\n };\n\n const handleDayClick: ComponentProps<typeof DayPicker>['onDayClick'] = (day, modifiers, e) => {\n if (modifiers.outside) {\n setMonth(new Date(day.getFullYear(), day.getMonth()));\n }\n dayPickerProps.onDayClick?.(day, modifiers, e);\n };\n\n return (\n <DayPicker\n {...dayPickerProps}\n month={month}\n onMonthChange={handleMonthChange}\n onDayClick={handleDayClick}\n showOutsideDays={showOutsideDays}\n formatters={{\n formatCaption: (date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n return `${year}년 ${month}월`;\n },\n formatWeekdayName: (date) => date.toLocaleDateString('en-US', { weekday: 'short' }),\n ...dayPickerProps.formatters,\n }}\n components={{\n Chevron: DatePickerChevron,\n DayButton: DatePickerDayButton,\n ...dayPickerProps.components,\n }}\n classNames={{\n root: cn(\n defaultClassNames.root,\n 'rounded-medium border border-border-primary bg-background-overlay p-4 shadow-medium',\n ),\n months: cn(defaultClassNames.months, 'relative'),\n month: cn(defaultClassNames.month, 'flex flex-col gap-2'),\n month_caption: cn(defaultClassNames.month_caption, 'flex h-7 items-center px-0.5'),\n caption_label: 'text-body-2 font-semibold text-text-primary',\n nav: cn(defaultClassNames.nav, 'absolute right-0 top-0 flex h-7 items-center gap-2'),\n button_previous: cn(\n defaultClassNames.button_previous,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n button_next: cn(\n defaultClassNames.button_next,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n weekday: cn(\n defaultClassNames.weekday,\n 'size-8 text-body-3 font-regular text-text-tertiary',\n ),\n month_grid: cn(\n defaultClassNames.month_grid,\n 'border-separate border-spacing-x-0 border-spacing-y-1',\n ),\n week: cn(defaultClassNames.week, 'overflow-hidden rounded-medium'),\n day: cn(defaultClassNames.day, 'size-8 text-body-2 font-medium text-text-secondary'),\n day_button: cn(\n defaultClassNames.day_button,\n 'size-8 cursor-pointer rounded-full hover:border hover:border-border-focused',\n ),\n outside: '!text-text-disabled',\n selected: cn(\n '[&>button]:bg-solid-primary-default',\n '[&>button]:text-text-inverse',\n '[&>button]:border-0',\n '[&>button]:hover:border-0',\n ),\n range_start: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_right,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_end: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_left,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_middle: cn(\n 'bg-elevation-elevation-2 rounded-none',\n '[&>button]:!bg-transparent',\n '[&>button]:!text-text-secondary',\n ),\n ...dayPickerProps.classNames,\n }}\n modifiersClassNames={{\n today: 'rdp-calendar-today',\n ...dayPickerProps.modifiersClassNames,\n }}\n />\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport { overlayListVariants } from '../overlayList/overlayListVariants';\n\nexport const dropdownVariants = {\n content: cn(\n overlayListVariants.content,\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n ),\n\n viewport: overlayListVariants.viewport,\n\n item: (props?: Parameters<typeof overlayListVariants.item>[0]) =>\n cn(overlayListVariants.item(props), 'focus:bg-elevation-elevation-2'),\n\n slotSize: overlayListVariants.slotSize,\n\n separator: cn('my-0.5 h-px bg-border-primary'),\n\n label: cva('px-2 font-medium text-text-secondary', {\n defaultVariants: { size: 'medium' },\n variants: {\n size: {\n xsmall: 'h-6 text-caption leading-6',\n small: 'h-7 text-body-3 leading-7',\n medium: 'h-8 text-body-2 leading-8',\n large: 'h-10 text-body-1 leading-10',\n },\n },\n }),\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport type * as React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport { overlayListVariants } from '../overlayList/overlayListVariants';\nimport { dropdownVariants } from './dropdownVariants';\n\ntype Size = 'xsmall' | 'small' | 'medium' | 'large';\n\ntype DropdownContextValue = {\n size: Size;\n};\n\nconst DropdownContext = createContext<DropdownContextValue>({ size: 'medium' });\n\nconst useDropdownContext = () => useContext(DropdownContext);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\n/** Dropdown 루트 Props */\ntype DropdownRootProps = {\n children?: React.ReactNode;\n /** 드롭다운 아이템 크기 */\n size?: Size;\n} & React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>;\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\n/** Dropdown 트리거 Props */\ntype DropdownTriggerProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>;\n\n// ─── Content ─────────────────────────────────────────────────────────────────\n\n/** Dropdown 콘텐츠 Props */\ntype DropdownContentProps = {\n className?: string;\n children?: React.ReactNode;\n} & Omit<\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>,\n 'className' | 'children'\n>;\n\n// ─── Item ────────────────────────────────────────────────────────────────────\n\n/** Dropdown 아이템 Props */\ntype DropdownItemProps = {\n children?: React.ReactNode;\n /** 아이템 왼쪽에 표시할 슬롯 (아이콘, 이모지, 이미지 등) */\n leftSlot?: React.ReactNode;\n /** 아이템 오른쪽에 표시할 슬롯 (아이콘, 이모지, 이미지 등) */\n rightSlot?: React.ReactNode;\n /** 아이템 크기 (Context 크기 오버라이드) */\n size?: Size;\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>, 'children'>;\n\n// ─── Separator ───────────────────────────────────────────────────────────────\n\n/** Dropdown 구분선 Props */\ntype DropdownSeparatorProps = {\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>, 'className'>;\n\n// ─── Label ───────────────────────────────────────────────────────────────────\n\n/** Dropdown 라벨 Props */\ntype DropdownLabelProps = {\n children?: React.ReactNode;\n size?: Size;\n className?: string;\n} & Omit<\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>,\n 'children' | 'className'\n>;\n\n// ─── Group ───────────────────────────────────────────────────────────────────\n\n/** Dropdown 그룹 Props */\ntype DropdownGroupProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Group>;\n\n// ─── Component Type ──────────────────────────────────────────────────────────\n\ntype DropdownComponent = React.FC<DropdownRootProps> & {\n Trigger: React.ForwardRefExoticComponent<\n DropdownTriggerProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>>\n >;\n Content: React.ForwardRefExoticComponent<\n DropdownContentProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Content>>\n >;\n Item: React.ForwardRefExoticComponent<\n DropdownItemProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Item>>\n >;\n Separator: React.ForwardRefExoticComponent<\n DropdownSeparatorProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Separator>>\n >;\n Label: React.ForwardRefExoticComponent<\n DropdownLabelProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Label>>\n >;\n Group: React.ForwardRefExoticComponent<\n DropdownGroupProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Group>>\n >;\n};\n\n// ─── Implementation ──────────────────────────────────────────────────────────\n\nconst Dropdown: DropdownComponent = ({ children, size = 'medium', ...props }) => {\n return (\n <DropdownContext.Provider value={{ size }}>\n <DropdownMenuPrimitive.Root {...props}>{children}</DropdownMenuPrimitive.Root>\n </DropdownContext.Provider>\n );\n};\n\nDropdown.Trigger = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>,\n DropdownTriggerProps\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n data-slot=\"dropdown-trigger\"\n className={cn('outline-none', className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Trigger>\n)) as DropdownComponent['Trigger'];\n\nDropdown.Content = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n DropdownContentProps\n>(({ className, children, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-content\"\n sideOffset={sideOffset}\n className={cn(dropdownVariants.content, 'max-h-60', className)}\n {...props}\n >\n <div data-slot=\"dropdown-viewport\" className={dropdownVariants.viewport}>\n {children}\n </div>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n)) as DropdownComponent['Content'];\n\nDropdown.Item = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n DropdownItemProps\n>(({ className, children, leftSlot, rightSlot, size: sizeProp, ...props }, ref) => {\n const { size: contextSize } = useDropdownContext();\n const size = sizeProp ?? contextSize;\n\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-item\"\n className={cn(dropdownVariants.item({ size }), className)}\n {...props}\n >\n {leftSlot && <div className={overlayListVariants.slotSize({ size })}>{leftSlot}</div>}\n <div className={cn(overlayListVariants.itemText({ size }), 'min-w-0 flex-1 truncate')}>\n {children}\n </div>\n {rightSlot && <div className={overlayListVariants.slotSize({ size })}>{rightSlot}</div>}\n </DropdownMenuPrimitive.Item>\n );\n}) as DropdownComponent['Item'];\n\nDropdown.Separator = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n DropdownSeparatorProps\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-separator\"\n className={cn(dropdownVariants.separator, className)}\n {...props}\n />\n)) as DropdownComponent['Separator'];\n\nDropdown.Label = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n DropdownLabelProps\n>(({ className, children, size: sizeProp, ...props }, ref) => {\n const { size: contextSize } = useDropdownContext();\n const size = sizeProp ?? contextSize;\n\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-label\"\n className={cn(dropdownVariants.label({ size }), className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Label>\n );\n}) as DropdownComponent['Label'];\n\nDropdown.Group = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Group>,\n DropdownGroupProps\n>(({ ...props }, ref) => (\n <DropdownMenuPrimitive.Group ref={ref} data-slot=\"dropdown-group\" {...props} />\n)) as DropdownComponent['Group'];\n\nDropdown.displayName = 'Dropdown';\nDropdown.Trigger.displayName = 'Dropdown.Trigger';\nDropdown.Content.displayName = 'Dropdown.Content';\nDropdown.Item.displayName = 'Dropdown.Item';\nDropdown.Separator.displayName = 'Dropdown.Separator';\nDropdown.Label.displayName = 'Dropdown.Label';\nDropdown.Group.displayName = 'Dropdown.Group';\n\nexport { Dropdown };\nexport type {\n DropdownComponent,\n DropdownContentProps,\n DropdownGroupProps,\n DropdownItemProps,\n DropdownLabelProps,\n DropdownRootProps,\n DropdownSeparatorProps,\n DropdownTriggerProps,\n};\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as React from 'react';\nimport { createContext, useContext, useId } from 'react';\n\nimport { commonInputVariants, type Size, type Variant } from './inputVariants';\n\ntype TextAreaLabelProps = {\n children: React.ReactNode;\n required?: boolean;\n className?: string;\n};\n\ntype TextAreaBottomRightSlot = React.ReactNode;\n\ntype TextAreaFieldProps = Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size' | 'disabled' | 'id' | 'value' | 'onChange' | 'maxLength'\n> & {\n /**\n * Field 우측 하단에 표시할 슬롯입니다.\n * disabled 상태와 별개로 렌더되므로 필요 시 slot 요소에 직접 disabled를 전달하세요.\n * 입력 텍스트와 겹치지 않도록 Field에 우측/하단 padding을 함께 지정하는 것을 권장합니다.\n */\n bottomRightSlot?: TextAreaBottomRightSlot;\n};\n\ntype TextAreaDescriptionProps = {\n children?: React.ReactNode;\n showCounter?: boolean;\n className?: string;\n};\n\ntype TextAreaRootProps = {\n children?: React.ReactNode;\n /**\n * 입력 필드 스타일 유형\n * @default 'fill'\n */\n variant?: Variant;\n size?: Size;\n error?: boolean;\n disabled?: boolean;\n /**\n * TextArea의 기본값. Context를 통해 하위 컴포넌트로 전달됩니다.\n * TextArea.Field에서 value prop이 전달되면 Field의 value가 우선 적용됩니다.\n *\n * 사용 패턴:\n * - 통합 관리: <TextArea value={state}> - Context로 모든 Field에 적용\n * - 개별 제어: <TextArea.Field value={localState}> - 특정 Field만 개별 제어\n */\n value?: string;\n maxLength?: number;\n className?: string;\n} & Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size' | 'disabled' | 'id' | 'className'\n>;\n\ntype TextAreaComponent = React.ForwardRefExoticComponent<\n TextAreaRootProps & React.RefAttributes<HTMLDivElement>\n> & {\n Label: React.ForwardRefExoticComponent<\n TextAreaLabelProps & React.RefAttributes<HTMLLabelElement>\n >;\n Field: React.ForwardRefExoticComponent<\n TextAreaFieldProps & React.RefAttributes<HTMLTextAreaElement>\n >;\n Description: React.ForwardRefExoticComponent<\n TextAreaDescriptionProps & React.RefAttributes<HTMLDivElement>\n >;\n};\n\ntype TextAreaContextType = {\n variant: Variant;\n size: Size;\n error: boolean;\n disabled: boolean;\n id: string;\n value?: string;\n maxLength?: number;\n onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;\n};\n\nconst TextAreaContext = createContext<TextAreaContextType | null>(null);\n\nconst useTextAreaContext = () => {\n const context = useContext(TextAreaContext);\n if (!context) {\n throw new Error('TextArea components must be used within a TextArea');\n }\n return context;\n};\n\nconst textAreaVariants = {\n container: commonInputVariants.container,\n label: commonInputVariants.label,\n\n field: cva(\n 'scrollbar-overlay block w-full resize-none rounded-medium border transition-colors focus:outline-none',\n {\n variants: {\n variant: {\n fill: 'border-transparent bg-elevation-elevation-2',\n line: 'border-border-primary',\n },\n size: {\n xsmall: 'min-h-[60px] px-1.5 py-[3.5px] text-body-3',\n small: 'min-h-[80px] px-2 py-1 text-body-2',\n medium: 'min-h-[100px] px-2.5 py-1.5 text-body-2',\n large: 'min-h-[120px] px-3 py-[9px] text-body-1',\n },\n state: {\n default: 'text-text-primary placeholder:text-text-tertiary',\n focused: 'text-text-primary placeholder:text-text-tertiary',\n error: 'text-text-primary placeholder:text-text-tertiary',\n disabled: 'cursor-not-allowed text-text-disabled placeholder:text-text-disabled',\n },\n },\n compoundVariants: [\n { variant: 'fill', state: 'focused', class: 'border-border-focused' },\n { variant: 'fill', state: 'error', class: 'border-border-critical' },\n {\n variant: 'fill',\n state: 'disabled',\n class: 'bg-elevation-elevation-2 border-transparent',\n },\n { variant: 'line', state: 'focused', class: 'border-border-focused' },\n { variant: 'line', state: 'error', class: 'border-border-critical' },\n { variant: 'line', state: 'disabled', class: 'border-border-primary' },\n ],\n defaultVariants: { variant: 'fill', size: 'medium', state: 'default' },\n },\n ),\n\n fieldWrapper: 'relative w-full',\n\n bottomRightSlot: 'absolute right-0 bottom-0 flex items-center justify-center',\n\n descriptionContainer: cva('flex flex-row items-center justify-between', {\n variants: {\n size: {\n xsmall: 'gap-0.5 text-caption',\n small: 'gap-1 text-body-3',\n medium: 'gap-1 text-body-3',\n large: 'gap-1 text-body-2',\n },\n },\n defaultVariants: { size: 'medium' },\n }),\n\n description: commonInputVariants.description,\n\n counter: cva('text-nowrap font-regular', {\n variants: {\n disabled: {\n true: 'text-gray-04',\n false: 'text-text-tertiary',\n },\n },\n defaultVariants: { disabled: false },\n }),\n};\n\nconst TextArea = React.forwardRef<HTMLDivElement, TextAreaRootProps>(\n (\n {\n children,\n variant = 'fill',\n size = 'medium',\n error = false,\n disabled = false,\n value = '',\n maxLength,\n className,\n ...textAreaProps\n },\n ref,\n ) => {\n const uniqueId = useId();\n const id = `text-area-${uniqueId}`;\n const { onChange, ...restTextAreaProps } = textAreaProps;\n\n return (\n <TextAreaContext.Provider\n value={{ variant, size, error, disabled, id, value, maxLength, onChange }}\n >\n <div ref={ref} className={cn(textAreaVariants.container, className)}>\n {children || <TextArea.Field {...restTextAreaProps} />}\n </div>\n </TextAreaContext.Provider>\n );\n },\n) as TextAreaComponent;\n\nTextArea.Label = React.forwardRef<HTMLLabelElement, TextAreaLabelProps>(\n ({ children, required = false, className }, ref) => {\n const { size, disabled, id } = useTextAreaContext();\n\n return (\n <label\n ref={ref}\n htmlFor={id}\n className={cn(textAreaVariants.label({ size, disabled, required }), className)}\n >\n {children}\n </label>\n );\n },\n) as TextAreaComponent['Label'];\n\nTextArea.Field = React.forwardRef<HTMLTextAreaElement, TextAreaFieldProps>(\n ({ className, onFocus, onBlur, bottomRightSlot, ...props }, ref) => {\n const {\n variant,\n size,\n error,\n disabled,\n id,\n maxLength,\n value: contextValue,\n onChange: contextOnChange,\n } = useTextAreaContext();\n const [focused, setFocused] = React.useState(false);\n\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const state = disabled ? 'disabled' : error ? 'error' : focused ? 'focused' : 'default';\n\n const isControlled = contextValue !== undefined;\n\n const field = (\n <textarea\n ref={ref}\n id={id}\n disabled={disabled}\n maxLength={maxLength}\n className={cn(textAreaVariants.field({ variant, size, state }), className)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={(e) => {\n contextOnChange?.(e);\n }}\n {...(isControlled ? { value: contextValue } : {})}\n {...props}\n />\n );\n\n if (!bottomRightSlot) {\n return field;\n }\n\n return (\n <div className={textAreaVariants.fieldWrapper}>\n {field}\n <div className={textAreaVariants.bottomRightSlot}>{bottomRightSlot}</div>\n </div>\n );\n },\n) as TextAreaComponent['Field'];\n\nTextArea.Description = React.forwardRef<HTMLDivElement, TextAreaDescriptionProps>(\n ({ children, showCounter = true, className }, ref) => {\n const { size, error, disabled, value = '', maxLength } = useTextAreaContext();\n\n if (!children && (!showCounter || !maxLength)) {\n return null;\n }\n\n return (\n <div ref={ref} className={cn(textAreaVariants.descriptionContainer({ size }), className)}>\n {children && (\n <p className={cn(textAreaVariants.description({ size, error, disabled }), 'flex-1')}>\n {children}\n </p>\n )}\n {showCounter && maxLength && (\n <span className={cn(textAreaVariants.counter({ disabled }))}>\n {value.length}/{maxLength}\n </span>\n )}\n </div>\n );\n },\n) as TextAreaComponent['Description'];\n\nTextArea.displayName = 'TextArea';\nTextArea.Label.displayName = 'TextArea.Label';\nTextArea.Field.displayName = 'TextArea.Field';\nTextArea.Description.displayName = 'TextArea.Description';\n\nexport { TextArea };\nexport type {\n TextAreaComponent,\n TextAreaBottomRightSlot,\n TextAreaRootProps,\n TextAreaLabelProps,\n TextAreaFieldProps,\n TextAreaDescriptionProps,\n};\n","import { cn, cva } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext, useId } from 'react';\nimport { commonInputVariants, type Icon, type Size, type Variant } from './inputVariants';\n\ntype TextFieldContextType = {\n variant: Variant;\n size: Size;\n error: boolean;\n disabled: boolean;\n id: string;\n value?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n};\n\ntype TextFieldRootProps = {\n children?: React.ReactNode;\n /**\n * 입력 필드 스타일 유형\n * @default 'fill'\n */\n variant?: Variant;\n size?: Size;\n error?: boolean;\n disabled?: boolean;\n className?: string;\n value?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n} & Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'disabled' | 'className' | 'value' | 'onChange'\n>;\n\ntype TextFieldLabelProps = {\n children: React.ReactNode;\n required?: boolean;\n className?: string;\n};\n\ntype TextFieldInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'disabled' | 'id' | 'value' | 'onChange'\n> & {\n leftIcon?: Icon;\n rightIcon?: Icon;\n subText?: string;\n};\n\ntype TextFieldDescriptionProps = {\n children: React.ReactNode;\n className?: string;\n};\n\ntype TextFieldComponent = React.ForwardRefExoticComponent<\n TextFieldRootProps & React.RefAttributes<HTMLDivElement>\n> & {\n Label: React.ForwardRefExoticComponent<\n TextFieldLabelProps & React.RefAttributes<HTMLLabelElement>\n >;\n Input: React.ForwardRefExoticComponent<\n TextFieldInputProps & React.RefAttributes<HTMLInputElement>\n >;\n Description: React.ForwardRefExoticComponent<\n TextFieldDescriptionProps & React.RefAttributes<HTMLParagraphElement>\n >;\n};\n\nconst TextFieldContext = createContext<TextFieldContextType | null>(null);\n\nconst useTextFieldContext = () => {\n const context = useContext(TextFieldContext);\n if (!context) {\n throw new Error('TextField components must be used within a TextField');\n }\n return context;\n};\n\nconst textFieldVariants = {\n container: commonInputVariants.container,\n label: commonInputVariants.label,\n\n wrapper: cva(\n 'flex w-full flex-row items-center rounded-medium border transition-colors focus-within:border-border-focused focus-within:outline-none',\n {\n variants: {\n variant: {\n fill: 'border-transparent bg-elevation-elevation-2',\n line: 'border-border-primary',\n },\n size: {\n xsmall: 'h-6 gap-0 px-1',\n small: 'h-7 gap-0.5 px-1.5',\n medium: 'h-8 gap-0.5 px-2',\n large: 'h-10 gap-1 px-2.5',\n },\n state: {\n default: 'text-text-primary',\n error: 'text-text-primary',\n disabled: 'cursor-not-allowed text-text-disabled',\n },\n },\n compoundVariants: [\n { variant: 'fill', state: 'error', class: 'border-border-critical' },\n {\n variant: 'fill',\n state: 'disabled',\n class: 'bg-elevation-elevation-2 border-transparent',\n },\n { variant: 'line', state: 'error', class: 'border-border-critical' },\n { variant: 'line', state: 'disabled', class: 'border-border-primary' },\n ],\n defaultVariants: { variant: 'fill', size: 'medium', state: 'default' },\n },\n ),\n\n input: cva(\n 'w-full border-none bg-transparent p-0 focus:outline-none focus:ring-0 disabled:cursor-not-allowed',\n {\n variants: {\n size: {\n xsmall: 'text-body-3 placeholder:text-body-3',\n small: 'text-body-2 placeholder:text-body-2',\n medium: 'text-body-2 placeholder:text-body-2',\n large: 'text-body-1 placeholder:text-body-1',\n },\n state: {\n default: 'text-text-primary placeholder:text-text-tertiary',\n error: 'text-text-primary placeholder:text-text-tertiary',\n disabled: 'text-text-disabled placeholder:text-text-disabled',\n },\n },\n defaultVariants: { size: 'medium', state: 'default' },\n },\n ),\n\n description: cva('mt-0.5 font-regular text-text-tertiary', {\n variants: {\n size: {\n xsmall: 'text-caption',\n small: 'text-body-3',\n medium: 'text-body-3',\n large: 'text-body-2',\n },\n error: {\n true: 'text-text-critical',\n false: '',\n },\n disabled: {\n true: 'text-text-disabled',\n false: '',\n },\n },\n compoundVariants: [\n {\n disabled: true,\n error: true,\n class: 'text-text-disabled', // disabled가 error보다 우선\n },\n ],\n defaultVariants: { size: 'medium', error: false, disabled: false },\n }),\n\n subText: cva('ml-1 shrink-0 font-regular', {\n variants: {\n size: {\n xsmall: 'text-body-3',\n small: 'text-body-2',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n disabled: {\n true: 'text-text-disabled',\n false: 'text-text-tertiary',\n },\n },\n defaultVariants: { size: 'medium', disabled: false },\n }),\n\n icon: cva('shrink-0 text-icon-tertiary', {\n variants: {\n size: {\n xsmall: 'size-4',\n small: 'size-4',\n medium: 'size-4',\n large: 'size-5',\n },\n },\n defaultVariants: { size: 'medium' },\n }),\n};\n\nconst TextField = forwardRef<HTMLDivElement, TextFieldRootProps>(\n (\n {\n children,\n variant = 'fill',\n size = 'medium',\n error = false,\n disabled = false,\n className,\n id: providedId,\n value,\n onChange,\n ...inputProps\n },\n ref,\n ) => {\n const uniqueId = useId();\n const id = providedId || `text-field-${uniqueId}`;\n\n return (\n <TextFieldContext.Provider value={{ variant, size, error, disabled, id, value, onChange }}>\n <div ref={ref} className={cn(textFieldVariants.container, className)}>\n {children || <TextField.Input {...inputProps} />}\n </div>\n </TextFieldContext.Provider>\n );\n },\n) as TextFieldComponent;\n\nTextField.Label = forwardRef<HTMLLabelElement, TextFieldLabelProps>(\n ({ children, required = false, className }, ref) => {\n const { size, disabled, id } = useTextFieldContext();\n\n return (\n <label\n ref={ref}\n htmlFor={id}\n className={cn(textFieldVariants.label({ size, disabled, required }), className)}\n >\n {children}\n </label>\n );\n },\n) as TextFieldComponent['Label'];\n\nTextField.Input = forwardRef<HTMLInputElement, TextFieldInputProps>(\n ({ className, leftIcon, rightIcon, subText, ...props }, ref) => {\n const {\n variant,\n size,\n error,\n disabled,\n id,\n value: contextValue,\n onChange: contextOnChange,\n } = useTextFieldContext();\n const state = disabled ? 'disabled' : error ? 'error' : 'default';\n const isControlled = contextValue !== undefined;\n\n return (\n <div className={cn(textFieldVariants.wrapper({ variant, size, state }), className)}>\n {leftIcon && (\n <span\n className={cn('flex items-center justify-center', textFieldVariants.icon({ size }))}\n >\n {leftIcon}\n </span>\n )}\n\n <div className=\"flex flex-1 flex-row items-center justify-center\">\n <input\n ref={ref}\n id={id}\n disabled={disabled}\n className={cn(textFieldVariants.input({ size, state }))}\n onChange={(e) => {\n contextOnChange?.(e);\n }}\n {...props}\n {...(isControlled ? { value: contextValue } : {})}\n />\n {subText && (\n <span className={cn(textFieldVariants.subText({ size, disabled }))}>{subText}</span>\n )}\n </div>\n\n {rightIcon && (\n <span\n className={cn('flex items-center justify-center', textFieldVariants.icon({ size }))}\n >\n {rightIcon}\n </span>\n )}\n </div>\n );\n },\n) as TextFieldComponent['Input'];\n\nTextField.Description = forwardRef<HTMLParagraphElement, TextFieldDescriptionProps>(\n ({ children, className }, ref) => {\n const { size, error, disabled } = useTextFieldContext();\n\n return (\n <p\n ref={ref}\n className={cn(textFieldVariants.description({ size, error, disabled }), className)}\n >\n {children}\n </p>\n );\n },\n) as TextFieldComponent['Description'];\n\nTextField.displayName = 'TextField';\nTextField.Label.displayName = 'TextField.Label';\nTextField.Input.displayName = 'TextField.Input';\nTextField.Description.displayName = 'TextField.Description';\n\nexport { TextField };\nexport type {\n TextFieldComponent,\n TextFieldRootProps,\n TextFieldLabelProps,\n TextFieldInputProps,\n TextFieldDescriptionProps,\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport type React from 'react';\n\ninterface ScrollAreaProps extends React.ComponentProps<typeof ScrollAreaPrimitive.Root> {\n /** 스크롤 뷰포트의 ref. 스크롤 위치 제어 시 사용합니다. */\n scrollRef?: React.ComponentProps<typeof ScrollAreaPrimitive.Viewport>['ref'];\n /** 세로 스크롤바 숨김 여부 */\n hideVerticalScrollbar?: boolean;\n /** 가로 스크롤바 숨김 여부 */\n hideHorizontalScrollbar?: boolean;\n /** 가로 스크롤 비활성화 (overflow-x: hidden) */\n disableHorizontalScroll?: boolean;\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-opacity',\n orientation === 'vertical' &&\n 'w-[10px] p-[2px] opacity-0 duration-300 ease-out group-hover:opacity-100',\n orientation === 'horizontal' && 'h-[10px] flex-col px-[3px] py-[2px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-component-scroll\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\n/**\n * 커스텀 스크롤바를 제공하는 스크롤 영역 컴포넌트입니다.\n * 마우스 호버 시 스크롤바가 나타나는 UX를 제공합니다.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-[300px]\">\n * <div>스크롤 가능한 콘텐츠</div>\n * </ScrollArea>\n * ```\n *\n * @see {@link ScrollAreaProps} props 상세\n */\nfunction ScrollArea({\n className,\n children,\n onScroll,\n scrollRef,\n hideVerticalScrollbar = false,\n hideHorizontalScrollbar = false,\n disableHorizontalScroll = false,\n ...props\n}: ScrollAreaProps) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn('group relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n ref={scrollRef}\n onScroll={onScroll}\n className={cn(\n 'size-full rounded-[inherit]',\n disableHorizontalScroll && '!overflow-x-hidden',\n )}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {!hideVerticalScrollbar && <ScrollBar orientation=\"vertical\" forceMount />}\n {!(hideHorizontalScrollbar || disableHorizontalScroll) && (\n <ScrollBar orientation=\"horizontal\" forceMount />\n )}\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nexport { ScrollArea, ScrollBar };\nexport type { ScrollAreaProps };\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport type { ButtonProps } from '../button/Button';\nimport { Button } from '../button/Button';\nimport { XIcon } from '../icon';\nimport { ScrollArea } from '../scrollArea/ScrollArea';\n\ntype ModalSize = 'default' | 'fullsize';\n\ntype ModalRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype ModalTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype ModalPortalProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>;\n\ntype ModalOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\ntype ModalContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * 모달 크기\n * @default 'default'\n */\n size?: ModalSize;\n};\n\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>;\ntype InteractOutsideEvent = Parameters<NonNullable<DialogContentProps['onInteractOutside']>>[0];\n\ntype ModalCloseProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype ModalHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 하단 구분선 표시 여부\n * @default false\n */\n line?: boolean;\n /**\n * 헤더 오른쪽 끝 영역에 렌더링할 콘텐츠\n * - `undefined` (미전달): 기본 닫기(X) 아이콘 렌더링\n * - `null`: 닫기 버튼 없이 빈 영역 (기존 `showCloseIcon={false}` 대응)\n * - `ReactNode`: 전달된 콘텐츠로 대체 (닫기 동작이 필요하면 `Modal.Close`를 직접 포함)\n */\n rightSlot?: React.ReactNode;\n};\n\ntype ModalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype ModalFooterProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 상단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n};\n\ntype ModalFooterDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n /** 에러 상태 표시 여부 */\n error?: boolean;\n /** 설명 앞에 표시할 아이콘 요소 */\n icon?: React.ReactNode;\n};\n\ntype ModalActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype ModalActionProps = Omit<ButtonProps, 'color' | 'variant' | 'background'> & {\n /**\n * 버튼 색상\n * @default 'primary'\n */\n color?: 'primary' | 'critical';\n};\n\ntype ModalTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype ModalDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\ntype ModalComponent = typeof DialogPrimitive.Root & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalTriggerProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Trigger>>\n >;\n Portal: React.FC<ModalPortalProps>;\n Close: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalCloseProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Overlay: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalOverlayProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Overlay>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalContentProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Content>>\n >;\n Header: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalHeaderProps> & React.RefAttributes<HTMLDivElement>\n >;\n Body: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalBodyProps> & React.RefAttributes<HTMLDivElement>\n >;\n Footer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalFooterProps> & React.RefAttributes<HTMLDivElement>\n >;\n FooterDescription: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalFooterDescriptionProps> & React.RefAttributes<HTMLDivElement>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Action: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalActionProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalTitleProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalDescriptionProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Description>>\n >;\n};\n\nconst MODAL_PADDING = {\n body: 'px-4 pb-4',\n footer: 'px-4 py-3',\n};\n\nconst ModalContext = createContext<{ size: ModalSize }>({ size: 'default' });\n\n/**\n * 사용자 인터랙션이 필요한 오버레이 다이얼로그 컴포넌트입니다.\n * Compound Component 패턴으로 하위 컴포넌트와 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Modal>\n * <Modal.Trigger>열기</Modal.Trigger>\n * <Modal.Content>\n * <Modal.Header>\n * <Modal.Title>제목</Modal.Title>\n * </Modal.Header>\n * <Modal.Body>내용</Modal.Body>\n * <Modal.Footer>\n * <Modal.Actions>\n * <Modal.Close>닫기</Modal.Close>\n * </Modal.Actions>\n * </Modal.Footer>\n * </Modal.Content>\n * </Modal>\n * ```\n *\n * @see {@link ModalContentProps} Content props 상세\n */\nconst ModalRoot: React.FC<ModalRootProps> = (props) => <DialogPrimitive.Root {...props} />;\n\nconst Modal = ModalRoot as ModalComponent;\n\nModal.Trigger = forwardRef<React.ElementRef<typeof DialogPrimitive.Trigger>, ModalTriggerProps>(\n (props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />,\n);\n\nModal.Portal = (props: ModalPortalProps) => <DialogPrimitive.Portal {...props} />;\n\nModal.Close = forwardRef<HTMLButtonElement, ModalCloseProps>(({ size, ...props }, ref) => {\n const { size: modalSize } = useContext(ModalContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n {...props}\n ref={ref}\n variant=\"assistive\"\n size={size ?? (modalSize === 'fullsize' ? 'large' : 'medium')}\n />\n </DialogPrimitive.Close>\n );\n}) as ModalComponent['Close'];\n\nModal.Overlay = forwardRef<React.ComponentRef<typeof DialogPrimitive.Overlay>, ModalOverlayProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Overlay'];\n\nModal.Content = forwardRef<React.ComponentRef<typeof DialogPrimitive.Content>, ModalContentProps>(\n ({ className, children, size = 'default', onInteractOutside, onFocusOutside, ...props }, ref) => {\n const isFullSize = size === 'fullsize';\n\n const shouldPreventDismissForSelect = (target: EventTarget | null) => {\n const isSelectOpen = Boolean(\n document.querySelector('[data-radix-select-content][data-state=\"open\"]'),\n );\n if (isSelectOpen) {\n return true;\n }\n\n if (!(target instanceof Element)) {\n return false;\n }\n\n return Boolean(\n target.closest('[data-radix-select-content]') ||\n target.closest('[data-radix-select-viewport]'),\n );\n };\n\n const handleInteractOutside = (event: InteractOutsideEvent) => {\n // Select가 열려있는 경우: Modal 닫힘 방지\n if (shouldPreventDismissForSelect(event.target)) {\n event.preventDefault();\n }\n\n onInteractOutside?.(event);\n };\n\n return (\n <ModalContext.Provider value={{ size }}>\n <Modal.Portal>\n <Modal.Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n // 공통 스타일\n 'fixed z-50 flex flex-col rounded-strong border border-border-primary bg-elevation-elevation-0 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n // fullsize일 때\n isFullSize\n ? 'inset-0 m-10'\n : // 일반 모달일 때\n 'left-[50%] top-[50%] max-w-[calc(100vw-32px)] max-h-[calc(100vh-80px)] w-[800px] h-[560px] translate-x-[-50%] translate-y-[-50%] shadow-strong data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n onInteractOutside={handleInteractOutside}\n >\n {children}\n </DialogPrimitive.Content>\n </Modal.Portal>\n </ModalContext.Provider>\n );\n },\n) as ModalComponent['Content'];\n\nModal.Header = forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, line = false, rightSlot, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex shrink-0 flex-row items-center gap-2 pl-4 pr-2 min-h-12',\n line && 'border-b border-border-primary',\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-row items-center gap-1\">{children}</div>\n {rightSlot === undefined ? (\n <DialogPrimitive.Close\n className={cn(\n 'flex shrink-0 items-center justify-center size-8 rounded-medium text-icon-secondary transition-colors hover:bg-elevation-elevation-2 focus:outline-none disabled:pointer-events-none',\n )}\n >\n <XIcon type=\"regular\" size={20} />\n </DialogPrimitive.Close>\n ) : (\n rightSlot\n )}\n </div>\n ),\n) as ModalComponent['Header'];\n\nModal.Body = forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex-1 flex flex-col min-h-0 h-full',\n '[&_[data-slot=scroll-area-viewport]>div]:h-full',\n )}\n {...props}\n >\n <ScrollArea className=\"h-full flex flex-col\">\n <div className={cn(MODAL_PADDING.body, className)}>{children}</div>\n </ScrollArea>\n </div>\n ),\n) as ModalComponent['Body'];\n\nModal.Footer = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, line = true, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center justify-between min-h-14 gap-3',\n line && 'border-t border-border-primary',\n MODAL_PADDING.footer,\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Footer'];\n\nModal.FooterDescription = forwardRef<HTMLDivElement, ModalFooterDescriptionProps>(\n ({ className, error = false, icon, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center gap-1 text-body-3',\n error ? 'text-text-critical' : 'text-text-tertiary',\n className,\n )}\n {...props}\n >\n {icon && (\n <span className=\"flex shrink-0 size-4 items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n {children}\n </div>\n ),\n) as ModalComponent['FooterDescription'];\n\nModal.Actions = forwardRef<HTMLDivElement, ModalActionsProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('ml-auto flex flex-row items-center gap-2', className)} {...props} />\n)) as ModalComponent['Actions'];\n\nModal.Action = forwardRef<HTMLButtonElement, ModalActionProps>(\n ({ color = 'primary', size, ...props }, ref) => {\n const { size: modalSize } = useContext(ModalContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n {...props}\n ref={ref}\n color={color}\n variant=\"solid\"\n size={size ?? (modalSize === 'fullsize' ? 'large' : 'medium')}\n />\n </DialogPrimitive.Close>\n );\n },\n) as ModalComponent['Action'];\n\nModal.Title = forwardRef<React.ComponentRef<typeof DialogPrimitive.Title>, ModalTitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-body-1 font-semibold leading-none tracking-tight text-text-primary',\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Title'];\n\nModal.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n ModalDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-body-2 text-text-tertiary', className)}\n {...props}\n />\n)) as ModalComponent['Description'];\n\nModal.displayName = 'Modal';\nModal.Trigger.displayName = 'Modal.Trigger';\nModal.Portal.displayName = 'Modal.Portal';\nModal.Close.displayName = 'Modal.Close';\nModal.Overlay.displayName = 'Modal.Overlay';\nModal.Content.displayName = 'Modal.Content';\nModal.Header.displayName = 'Modal.Header';\nModal.Body.displayName = 'Modal.Body';\nModal.Footer.displayName = 'Modal.Footer';\nModal.FooterDescription.displayName = 'Modal.FooterDescription';\nModal.Actions.displayName = 'Modal.Actions';\nModal.Action.displayName = 'Modal.Action';\nModal.Title.displayName = 'Modal.Title';\nModal.Description.displayName = 'Modal.Description';\n\nexport { Modal };\nexport type {\n ModalComponent,\n ModalRootProps,\n ModalTriggerProps,\n ModalPortalProps,\n ModalOverlayProps,\n ModalContentProps,\n ModalCloseProps,\n ModalHeaderProps,\n ModalBodyProps,\n ModalFooterProps,\n ModalFooterDescriptionProps,\n ModalActionsProps,\n ModalActionProps,\n ModalTitleProps,\n ModalDescriptionProps,\n};\n","import type { SheetSide } from './Sheet';\n\nexport type SheetAxis = 'horizontal' | 'vertical';\n\nexport const SHEET_EDGE_GAP = '[--sheet-edge-gap:40px]';\n\nexport const getAxis = (side: SheetSide): SheetAxis =>\n side === 'left' || side === 'right' ? 'horizontal' : 'vertical';\n\nexport const getDefaults = (\n axis: SheetAxis,\n): { minSize: number; maxSize: number | string; defaultSize: number } =>\n axis === 'horizontal'\n ? { minSize: 400, maxSize: '80%', defaultSize: 800 }\n : { minSize: 300, maxSize: '80%', defaultSize: 600 };\n\n// re-resizable의 maxWidth/maxHeight prop 값.\n// '%'는 vw/vh로 매핑 → inline max-width가 뷰포트에 반응(창 축소 시 박스도 축소,\n// stale px·!important·resize 리스너 불필요). 그 외(px number/string)는 그대로 전달.\nexport const resolveMaxSize = (maxSize: number | string, axis: SheetAxis): number | string => {\n if (typeof maxSize === 'number') {\n return maxSize;\n }\n const value = Number.parseFloat(maxSize);\n if (maxSize.trim().endsWith('%') && Number.isFinite(value)) {\n return `${value}${axis === 'horizontal' ? 'vw' : 'vh'}`;\n }\n return maxSize;\n};\n\nconst STORAGE_PREFIX = 'exem-ui:sheet-size:';\n\nexport const readStoredSize = (key: string): number | null => {\n if (typeof window === 'undefined') {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(STORAGE_PREFIX + key);\n if (raw == null) {\n return null;\n }\n const value = Number.parseFloat(raw);\n return Number.isFinite(value) ? value : null;\n } catch {\n return null;\n }\n};\n\nexport const writeStoredSize = (key: string, size: number): void => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(STORAGE_PREFIX + key, String(size));\n } catch {\n // best-effort\n }\n};\n","import { cn } from '@exem-ui/core/utils';\nimport { type Enable, type HandleComponent, Resizable } from 're-resizable';\nimport type React from 'react';\nimport { useState } from 'react';\nimport type { SheetSide } from './Sheet';\nimport {\n getAxis,\n getDefaults,\n readStoredSize,\n resolveMaxSize,\n type SheetAxis,\n writeStoredSize,\n} from './sheetResize';\n\nexport type SheetResizeOptions = {\n /** @default true (객체를 전달한 경우) */\n use?: boolean;\n /** 최소 크기(px). 기본: left/right 400, top/bottom 300 */\n minSize?: number;\n /** 최대 크기(px 또는 '80%'). 퍼센트는 뷰포트 기준. @default '80%' */\n maxSize?: number | string;\n /** 기본 크기(px). 기본: left/right 800, top/bottom 600 */\n defaultSize?: number;\n /** 지정 시 localStorage에 크기를 저장/복원 */\n storageKey?: string;\n /** 드래그 종료 시 최종 크기(px) 콜백 */\n onResize?: (size: number) => void;\n};\n\nconst ENABLE_BY_SIDE: Record<SheetSide, Enable> = {\n right: { left: true },\n left: { right: true },\n top: { bottom: true },\n bottom: { top: true },\n};\n\nconst HANDLE_EDGE_BY_SIDE: Record<SheetSide, 'left' | 'right' | 'top' | 'bottom'> = {\n right: 'left',\n left: 'right',\n top: 'bottom',\n bottom: 'top',\n};\n\nconst SheetResizeHandle: React.FC<{ axis: SheetAxis; active: boolean }> = ({ axis, active }) => (\n <div\n className={cn(\n 'group/sheet-handle flex h-full w-full items-center justify-center',\n axis === 'horizontal' ? 'cursor-col-resize' : 'cursor-row-resize',\n )}\n >\n <span\n className={cn(\n 'transition-colors group-hover/sheet-handle:bg-border-accent',\n active ? 'bg-border-accent' : 'bg-border-primary',\n axis === 'horizontal' ? 'h-full w-px' : 'h-px w-full',\n )}\n />\n </div>\n);\n\ntype SheetResizableBoxProps = {\n side: SheetSide;\n options: SheetResizeOptions;\n children: React.ReactNode;\n};\n\n// Sheet.Content(Radix) 내부에서 실제 크기를 갖는 박스. fixed인 부모 Content가 이 크기에 shrink-wrap된다.\nconst SheetResizableBox: React.FC<SheetResizableBoxProps> = ({ side, options, children }) => {\n const { minSize, maxSize, defaultSize, storageKey, onResize } = options;\n const axis = getAxis(side);\n const isHorizontal = axis === 'horizontal';\n const defaults = getDefaults(axis);\n const resolvedMin = minSize ?? defaults.minSize;\n const resolvedMax = resolveMaxSize(maxSize ?? defaults.maxSize, axis); // re-resizable prop(vw/vh|px)\n\n const [initialSize] = useState(() => {\n const stored = storageKey ? readStoredSize(storageKey) : null;\n // max는 re-resizable의 inline max-width(CSS)가 렌더에서 캡하므로 여기선 min만 보장.\n return Math.max(stored ?? defaultSize ?? defaults.defaultSize, resolvedMin);\n });\n const [resizing, setResizing] = useState(false);\n\n const handleResizeStop: NonNullable<React.ComponentProps<typeof Resizable>['onResizeStop']> = (\n _event,\n _direction,\n refElement,\n ) => {\n setResizing(false);\n const next = isHorizontal ? refElement.offsetWidth : refElement.offsetHeight;\n if (storageKey) {\n writeStoredSize(storageKey, next);\n }\n onResize?.(next);\n };\n\n const handleComponent: HandleComponent = {\n [HANDLE_EDGE_BY_SIDE[side]]: <SheetResizeHandle axis={axis} active={resizing} />,\n };\n\n return (\n <Resizable\n enable={ENABLE_BY_SIDE[side]}\n defaultSize={\n isHorizontal\n ? { width: initialSize, height: '100%' }\n : { width: '100%', height: initialSize }\n }\n minWidth={isHorizontal ? resolvedMin : undefined}\n maxWidth={isHorizontal ? resolvedMax : undefined}\n minHeight={isHorizontal ? undefined : resolvedMin}\n maxHeight={isHorizontal ? undefined : resolvedMax}\n onResizeStart={() => setResizing(true)}\n onResizeStop={handleResizeStop}\n handleComponent={handleComponent}\n className=\"flex min-h-0 flex-col bg-elevation-elevation-0 shadow-strong\"\n >\n {children}\n </Resizable>\n );\n};\n\nexport { SheetResizableBox };\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport { XIcon } from '../icon';\nimport { ScrollArea } from '../scrollArea/ScrollArea';\nimport { SheetResizableBox, type SheetResizeOptions } from './SheetResizable';\nimport { SHEET_EDGE_GAP } from './sheetResize';\n\ntype SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\ntype SheetRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype SheetTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype SheetPortalProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>;\n\ntype SheetOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\ntype SheetContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * Sheet가 열리는 방향\n * @default 'right'\n */\n side?: SheetSide;\n /**\n * 드래그 리사이징. `true` 또는 옵션 객체로 활성화.\n * @default false\n */\n resizable?: boolean | SheetResizeOptions;\n};\n\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>;\ntype InteractOutsideEvent = Parameters<NonNullable<DialogContentProps['onInteractOutside']>>[0];\n\ntype SheetCloseProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>;\n\ntype SheetHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 하단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n /**\n * 헤더 우측 영역(rightSlot).\n * - 미지정(`undefined`): 기본 닫기(X) 버튼을 렌더링하며 클릭 시 Sheet를 닫는다.\n * - `null` / `false`: 우측 영역을 숨긴다.\n * - ReactNode: 전달한 노드를 그대로 렌더링한다. 닫기 동작이 필요하면 `Sheet.Close`로 감싼다.\n */\n rightSlot?: React.ReactNode;\n};\n\ntype SheetBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype SheetFooterProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 상단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n};\n\ntype SheetFooterDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n /** 에러 상태 표시 여부 */\n error?: boolean;\n /** 설명 앞에 표시할 아이콘 요소 */\n icon?: React.ReactNode;\n};\n\ntype SheetActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype SheetTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype SheetDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\ntype SheetComponent = typeof DialogPrimitive.Root & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetTriggerProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Trigger>>\n >;\n Portal: React.FC<SheetPortalProps>;\n Close: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetCloseProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Close>>\n >;\n Overlay: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetOverlayProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Overlay>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetContentProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Content>>\n >;\n Header: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetHeaderProps> & React.RefAttributes<HTMLDivElement>\n >;\n Body: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetBodyProps> & React.RefAttributes<HTMLDivElement>\n >;\n Footer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetFooterProps> & React.RefAttributes<HTMLDivElement>\n >;\n FooterDescription: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetFooterDescriptionProps> & React.RefAttributes<HTMLDivElement>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetTitleProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetDescriptionProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Description>>\n >;\n};\n\nconst SHEET_CONTENT_BASE =\n 'fixed z-50 data-[state=open]:duration-300 data-[state=closed]:duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0';\n\nconst SHEET_CONTENT_BOX =\n 'flex flex-col border-border-primary bg-elevation-elevation-0 shadow-strong';\n\nconst SHEET_SIDE_CLASSES: Record<SheetSide, string> = {\n right:\n 'inset-y-0 right-0 h-full w-[800px] max-w-[calc(100vw-var(--sheet-edge-gap))] border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n left: 'inset-y-0 left-0 h-full w-[800px] max-w-[calc(100vw-var(--sheet-edge-gap))] border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n top: 'inset-x-0 top-0 w-full h-auto max-h-[calc(100vh-var(--sheet-edge-gap))] border-b data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 w-full h-auto max-h-[calc(100vh-var(--sheet-edge-gap))] border-t data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n};\n\n// 리사이즈 시: Content는 크기·box 없이 위치/슬라이드/max(안전망)만 (자식 박스에 shrink-wrap).\nconst SHEET_RESIZE_SIDE_CLASSES: Record<SheetSide, string> = {\n right:\n 'inset-y-0 right-0 max-w-[calc(100vw-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n left: 'inset-y-0 left-0 max-w-[calc(100vw-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n top: 'inset-x-0 top-0 max-h-[calc(100vh-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 max-h-[calc(100vh-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n};\n\nconst SheetContext = createContext<{ side: SheetSide }>({ side: 'right' });\n\n/**\n * 화면 가장자리에서 슬라이드되어 열리는 패널 컴포넌트입니다.\n * Radix UI Dialog 기반이며 Compound Component 패턴으로 사용합니다.\n *\n * @example\n * ```tsx\n * <Sheet>\n * <Sheet.Trigger>열기</Sheet.Trigger>\n * <Sheet.Content side=\"right\">\n * <Sheet.Header>\n * <Sheet.Title>제목</Sheet.Title>\n * </Sheet.Header>\n * <Sheet.Body>내용</Sheet.Body>\n * <Sheet.Footer>\n * <Sheet.Actions>\n * <Sheet.Close>닫기</Sheet.Close>\n * <Button>확인</Button>\n * </Sheet.Actions>\n * </Sheet.Footer>\n * </Sheet.Content>\n * </Sheet>\n * ```\n *\n * @see {@link SheetContentProps} Content props 상세\n */\nconst SheetRoot: React.FC<SheetRootProps> = (props) => <DialogPrimitive.Root {...props} />;\n\nconst Sheet = SheetRoot as SheetComponent;\n\nSheet.Trigger = forwardRef<React.ComponentRef<typeof DialogPrimitive.Trigger>, SheetTriggerProps>(\n (props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />,\n);\n\nSheet.Portal = (props: SheetPortalProps) => <DialogPrimitive.Portal {...props} />;\n\nSheet.Close = forwardRef<React.ComponentRef<typeof DialogPrimitive.Close>, SheetCloseProps>(\n (props, ref) => <DialogPrimitive.Close ref={ref} {...props} />,\n);\n\nSheet.Overlay = forwardRef<React.ComponentRef<typeof DialogPrimitive.Overlay>, SheetOverlayProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.Content = forwardRef<React.ComponentRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n (\n { className, children, side = 'right', resizable = false, onInteractOutside, ...props },\n ref,\n ) => {\n const resizeOptions: SheetResizeOptions =\n typeof resizable === 'object' ? resizable : { use: resizable };\n const isResizable = resizeOptions.use ?? true;\n\n const shouldPreventDismissForSelect = (target: EventTarget | null) => {\n const isSelectOpen = Boolean(\n document.querySelector('[data-radix-select-content][data-state=\"open\"]'),\n );\n if (isSelectOpen) {\n return true;\n }\n\n if (!(target instanceof Element)) {\n return false;\n }\n\n return Boolean(\n target.closest('[data-radix-select-content]') ||\n target.closest('[data-radix-select-viewport]'),\n );\n };\n\n const handleInteractOutside = (event: InteractOutsideEvent) => {\n // Select가 열려있는 경우: Sheet 닫힘 방지\n if (shouldPreventDismissForSelect(event.target)) {\n event.preventDefault();\n }\n\n onInteractOutside?.(event);\n };\n\n return (\n <SheetContext.Provider value={{ side }}>\n <Sheet.Portal>\n <Sheet.Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n SHEET_CONTENT_BASE,\n SHEET_EDGE_GAP,\n isResizable\n ? SHEET_RESIZE_SIDE_CLASSES[side]\n : cn(SHEET_CONTENT_BOX, SHEET_SIDE_CLASSES[side]),\n className,\n )}\n {...props}\n onInteractOutside={handleInteractOutside}\n >\n {isResizable ? (\n <SheetResizableBox side={side} options={resizeOptions}>\n {children}\n </SheetResizableBox>\n ) : (\n children\n )}\n </DialogPrimitive.Content>\n </Sheet.Portal>\n </SheetContext.Provider>\n );\n },\n);\n\nSheet.Header = forwardRef<HTMLDivElement, SheetHeaderProps>(\n ({ className, line = true, rightSlot, children, ...props }, ref) => {\n // 미지정 시 기본 닫기(X) 버튼. null/false면 우측 영역을 숨기고, 노드가 오면 그대로 렌더링한다.\n const rightElement =\n rightSlot === undefined ? (\n <DialogPrimitive.Close\n className={cn(\n 'flex shrink-0 items-center justify-center size-8 rounded-medium text-icon-secondary transition-colors hover:bg-elevation-elevation-2 focus:outline-none disabled:pointer-events-none',\n )}\n >\n <XIcon type=\"regular\" size={20} />\n </DialogPrimitive.Close>\n ) : (\n rightSlot\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex shrink-0 flex-row items-center gap-2 h-12 pl-4 pr-2',\n line && 'border-b border-border-primary',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 flex-row items-center gap-1\">{children}</div>\n {rightElement ? (\n <div className=\"flex shrink-0 flex-row items-center\">{rightElement}</div>\n ) : null}\n </div>\n );\n },\n);\n\nSheet.Body = forwardRef<HTMLDivElement, SheetBodyProps>(\n ({ className, children, ...props }, ref) => {\n const { side } = useContext(SheetContext);\n // 좌/우 Sheet는 폭이 고정이므로, 콘텐츠가 넘쳐도 가로 스크롤을 만들지 않고 영역 안에 가둔다.\n const disableHorizontalScroll = side === 'left' || side === 'right';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex-1 flex flex-col min-h-0 h-full',\n '[&_[data-slot=scroll-area-viewport]>div]:h-full',\n )}\n {...props}\n >\n <ScrollArea\n className=\"h-full flex flex-col\"\n disableHorizontalScroll={disableHorizontalScroll}\n >\n <div className={cn('p-4', className)}>{children}</div>\n </ScrollArea>\n </div>\n );\n },\n);\n\nSheet.Footer = forwardRef<HTMLDivElement, SheetFooterProps>(\n ({ className, line = true, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center justify-between h-14 gap-3 px-4 py-3',\n line && 'border-t border-border-primary',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.FooterDescription = forwardRef<HTMLDivElement, SheetFooterDescriptionProps>(\n ({ className, error = false, icon, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center gap-1 text-body-3',\n error ? 'text-text-critical' : 'text-text-tertiary',\n className,\n )}\n {...props}\n >\n {icon && (\n <span className=\"flex shrink-0 size-4 items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n {children}\n </div>\n ),\n);\n\nSheet.Actions = forwardRef<HTMLDivElement, SheetActionsProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('ml-auto flex flex-row items-center gap-2', className)} {...props} />\n));\n\nSheet.Title = forwardRef<React.ComponentRef<typeof DialogPrimitive.Title>, SheetTitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-body-1 font-semibold leading-none tracking-tight text-text-primary',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n SheetDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-body-2 text-text-tertiary', className)}\n {...props}\n />\n));\n\nSheet.displayName = 'Sheet';\nSheet.Trigger.displayName = 'Sheet.Trigger';\nSheet.Portal.displayName = 'Sheet.Portal';\nSheet.Close.displayName = 'Sheet.Close';\nSheet.Overlay.displayName = 'Sheet.Overlay';\nSheet.Content.displayName = 'Sheet.Content';\nSheet.Header.displayName = 'Sheet.Header';\nSheet.Body.displayName = 'Sheet.Body';\nSheet.Footer.displayName = 'Sheet.Footer';\nSheet.FooterDescription.displayName = 'Sheet.FooterDescription';\nSheet.Actions.displayName = 'Sheet.Actions';\nSheet.Title.displayName = 'Sheet.Title';\nSheet.Description.displayName = 'Sheet.Description';\n\nexport { Sheet };\nexport type {\n SheetComponent,\n SheetRootProps,\n SheetTriggerProps,\n SheetPortalProps,\n SheetOverlayProps,\n SheetContentProps,\n SheetResizeOptions,\n SheetSide,\n SheetCloseProps,\n SheetHeaderProps,\n SheetBodyProps,\n SheetFooterProps,\n SheetFooterDescriptionProps,\n SheetActionsProps,\n SheetTitleProps,\n SheetDescriptionProps,\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport type { ButtonProps } from '../button/Button';\nimport { Button } from '../button/Button';\n\ntype MessageBoxVariant = 'default' | 'critical';\n\ntype MessageBoxRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype MessageBoxTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype MessageBoxContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * 메시지 박스 variant\n * @default 'default'\n */\n variant?: MessageBoxVariant;\n};\n\ntype MessageBoxTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype MessageBoxDescriptionProps = React.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Description\n>;\n\ntype MessageBoxActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype MessageBoxCancelProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype MessageBoxActionProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype MessageBoxComponent = React.FC<MessageBoxRootProps> & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxTriggerProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Trigger>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxContentProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Content>>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxTitleProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxDescriptionProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Description>>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Cancel: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxCancelProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Action: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxActionProps> & React.RefAttributes<HTMLButtonElement>\n >;\n};\n\nconst MessageBoxContext = createContext<{ variant: MessageBoxVariant }>({ variant: 'default' });\n\n/**\n * 확인/경고 다이얼로그 컴포넌트입니다.\n * Modal보다 단순한 구조로, title + description + 버튼(취소/확인)으로 구성됩니다.\n *\n * @example\n * ```tsx\n * <MessageBox>\n * <MessageBox.Trigger>열기</MessageBox.Trigger>\n * <MessageBox.Content variant=\"default\">\n * <MessageBox.Title>상태를 확인하시겠습니까?</MessageBox.Title>\n * <MessageBox.Description>현재 상태에 대한 추가 확인이 필요합니다.</MessageBox.Description>\n * <MessageBox.Actions>\n * <MessageBox.Cancel>취소</MessageBox.Cancel>\n * <MessageBox.Action>확인</MessageBox.Action>\n * </MessageBox.Actions>\n * </MessageBox.Content>\n * </MessageBox>\n * ```\n */\nconst MessageBoxRoot: React.FC<MessageBoxRootProps> = (props) => (\n <DialogPrimitive.Root {...props} />\n);\n\nconst MessageBox = MessageBoxRoot as MessageBoxComponent;\n\nMessageBox.Trigger = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Trigger>,\n MessageBoxTriggerProps\n>((props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />);\n\nMessageBox.Content = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n MessageBoxContentProps\n>(({ className, children, variant = 'default', ...props }, ref) => (\n <MessageBoxContext.Provider value={{ variant }}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n )}\n />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 flex w-[400px] translate-x-[-50%] translate-y-[-50%] flex-col items-end gap-4 rounded-medium border border-border-primary bg-elevation-elevation-0 p-4 shadow-strong duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </MessageBoxContext.Provider>\n)) as MessageBoxComponent['Content'];\n\nMessageBox.Title = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n MessageBoxTitleProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('w-full text-body-1 font-semibold text-text-primary', className)}\n {...props}\n />\n)) as MessageBoxComponent['Title'];\n\nMessageBox.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n MessageBoxDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('w-full text-body-2 text-text-secondary', className)}\n {...props}\n />\n)) as MessageBoxComponent['Description'];\n\nMessageBox.Actions = forwardRef<HTMLDivElement, MessageBoxActionsProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-row gap-2', className)} {...props} />\n ),\n) as MessageBoxComponent['Actions'];\n\nMessageBox.Cancel = forwardRef<HTMLButtonElement, MessageBoxCancelProps>(\n ({ size = 'medium', ...props }, ref) => (\n <DialogPrimitive.Close asChild>\n <Button ref={ref} variant=\"assistive\" size={size} {...props} />\n </DialogPrimitive.Close>\n ),\n) as MessageBoxComponent['Cancel'];\n\nMessageBox.Action = forwardRef<HTMLButtonElement, MessageBoxActionProps>(\n ({ size = 'medium', ...props }, ref) => {\n const { variant } = useContext(MessageBoxContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n ref={ref}\n color={variant === 'critical' ? 'critical' : 'primary'}\n variant=\"solid\"\n size={size}\n {...props}\n />\n </DialogPrimitive.Close>\n );\n },\n) as MessageBoxComponent['Action'];\n\nMessageBox.displayName = 'MessageBox';\nMessageBox.Trigger.displayName = 'MessageBox.Trigger';\nMessageBox.Content.displayName = 'MessageBox.Content';\nMessageBox.Title.displayName = 'MessageBox.Title';\nMessageBox.Description.displayName = 'MessageBox.Description';\nMessageBox.Actions.displayName = 'MessageBox.Actions';\nMessageBox.Cancel.displayName = 'MessageBox.Cancel';\nMessageBox.Action.displayName = 'MessageBox.Action';\n\nexport { MessageBox };\nexport type {\n MessageBoxActionProps,\n MessageBoxActionsProps,\n MessageBoxCancelProps,\n MessageBoxComponent,\n MessageBoxContentProps,\n MessageBoxDescriptionProps,\n MessageBoxRootProps,\n MessageBoxTitleProps,\n MessageBoxTriggerProps,\n MessageBoxVariant,\n};\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\ninterface LoadingProps\n extends VariantProps<typeof containerVariants>,\n VariantProps<typeof spinnerVariants>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /**\n * 로딩 표시 여부\n * @default true\n */\n isLoading?: boolean;\n /**\n * 배경 딤 처리 여부\n * @default true\n */\n dim?: boolean;\n /**\n * 로딩 중 하위 요소 인터랙션 차단 여부\n * @default false\n */\n blockInteraction?: boolean;\n /** 컨테이너 추가 클래스 */\n containerClassName?: string;\n /** 오버레이 추가 클래스 */\n overlayClassName?: string;\n /** 스피너 추가 클래스 */\n spinnerClassName?: string;\n}\n\ntype LoadingComponent = React.ForwardRefExoticComponent<\n LoadingProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst containerVariants = cva('inset-0 z-[49] flex items-center justify-center', {\n variants: {\n position: {\n fixed: 'fixed',\n absolute: 'absolute',\n },\n blockInteraction: {\n true: 'pointer-events-auto',\n false: 'pointer-events-none',\n },\n },\n defaultVariants: {\n position: 'fixed',\n blockInteraction: false,\n },\n});\n\nconst overlayVariants = cva('absolute inset-0 transition-opacity duration-150', {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n tone: {\n // 대비감 높은 톤 설정 추후 디자인 시스템에서 추가 되어야함\n auto: 'bg-black/30 dark:bg-white/10',\n dark: 'bg-black/50',\n light: 'bg-white/70',\n brand: 'bg-primary/20',\n },\n },\n defaultVariants: {\n visible: true,\n tone: 'auto',\n },\n});\n\nconst spinnerVariants = cva(\n 'z-50 shrink-0 animate-spin rounded-full border-elevation-elevation-4 border-t-transparent',\n {\n variants: {\n size: {\n small: 'size-6 border-2',\n medium: 'size-9 border-[3px]',\n large: 'size-12 border-4',\n },\n },\n defaultVariants: {\n size: 'large',\n },\n },\n);\n\n/**\n * 비동기 작업 중 로딩 상태를 표시하는 오버레이 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * // 기본 사용 (전체 화면 고정)\n * <Loading isLoading />\n *\n * // 특정 영역 내 로딩 (absolute 위치)\n * <div style={{ position: 'relative' }}>\n * <Loading isLoading position=\"absolute\" size=\"small\" />\n * </div>\n * ```\n *\n * @see {@link LoadingProps} props 상세\n */\nconst Loading = forwardRef<HTMLDivElement, LoadingProps>(\n (\n {\n isLoading = true,\n dim = true,\n blockInteraction = false,\n position = 'fixed',\n size = 'medium',\n containerClassName,\n overlayClassName,\n spinnerClassName,\n className,\n ...props\n },\n ref,\n ) => {\n if (!isLoading) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n className={cn(\n containerVariants({ position, blockInteraction }),\n containerClassName,\n className,\n )}\n {...props}\n >\n {/* overlay 항상 존재 (dim 여부로만 표시) */}\n <div\n aria-hidden=\"true\"\n className={cn(overlayVariants({ visible: dim }), overlayClassName)}\n />\n {/* 스피너 레이어 */}\n <div className=\"relative z-50 flex size-full items-center justify-center\">\n <div className={cn(spinnerVariants({ size }), spinnerClassName)} />\n </div>\n </div>\n );\n },\n) as LoadingComponent;\n\nLoading.displayName = 'Loading';\n\nexport { Loading };\nexport type { LoadingComponent, LoadingProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\nconst trackVariants = cva('w-full overflow-hidden rounded-full bg-elevation-elevation-3', {\n variants: {\n size: {\n small: 'h-1',\n medium: 'h-1.5',\n large: 'h-2',\n },\n },\n defaultVariants: {\n size: 'large',\n },\n});\n\nconst gaugeVariants = cva('h-full rounded-full bg-icon-accent transition-[width] duration-300', {\n variants: {\n size: {\n small: '',\n medium: '',\n large: '',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\ninterface ProgressProps\n extends VariantProps<typeof trackVariants>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /**\n * 현재 진행 값\n * @default 0\n */\n value?: number;\n /**\n * 최대 값\n * @default 100\n */\n max?: number;\n /** 트랙(배경) 추가 클래스 */\n trackClassName?: string;\n /** 게이지(채움) 추가 클래스 */\n gaugeClassName?: string;\n}\n\ntype ProgressComponent = React.ForwardRefExoticComponent<\n ProgressProps & React.RefAttributes<HTMLDivElement>\n>;\n\n/**\n * 작업 진행률을 시각적으로 표시하는 바 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={30} max={100} size=\"large\" />\n * ```\n */\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n { value = 0, max = 100, size = 'medium', trackClassName, gaugeClassName, className, ...props },\n ref,\n ) => {\n const clampedValue = Math.min(Math.max(value, 0), max);\n const percent = max > 0 ? (clampedValue / max) * 100 : 0;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn(trackVariants({ size }), trackClassName, className)}\n {...props}\n >\n <div\n className={cn(gaugeVariants({ size }), gaugeClassName)}\n style={{ width: `${percent}%` }}\n />\n </div>\n );\n },\n) as ProgressComponent;\n\nProgress.displayName = 'Progress';\n\nexport { Progress };\nexport type { ProgressComponent, ProgressProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type * as ReactTypes from 'react';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\nimport { XIcon } from '../icon';\n\n// Props 타입 정의\ntype ToasterRootProps = ReactTypes.ComponentProps<typeof Sonner>;\n\ntype ToasterContainerProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterIconProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterTitleProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterDescriptionProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterActionProps = {\n children?: ReactTypes.ReactNode;\n altText?: string;\n} & ReactTypes.ButtonHTMLAttributes<HTMLButtonElement>;\n\n// Namespace 타입 정의\ntype ToasterComponent = React.FC<ToasterRootProps> & {\n Container: React.ForwardRefExoticComponent<\n ToasterContainerProps & React.RefAttributes<HTMLDivElement>\n >;\n Icon: React.ForwardRefExoticComponent<ToasterIconProps & React.RefAttributes<HTMLDivElement>>;\n Title: React.ForwardRefExoticComponent<ToasterTitleProps & React.RefAttributes<HTMLDivElement>>;\n Description: React.ForwardRefExoticComponent<\n ToasterDescriptionProps & React.RefAttributes<HTMLDivElement>\n >;\n Action: React.ForwardRefExoticComponent<\n ToasterActionProps & React.RefAttributes<HTMLButtonElement>\n >;\n};\n\n/**\n * Sonner center 포지셔닝 보정\n *\n * Sonner는 toaster(`<ol>`)를 left:50% + translateX(-50%)로 중앙 정렬하지만,\n * 개별 toast는 toaster 내에서 left:0으로 왼쪽 정렬됩니다.\n * auto-width toast는 toaster(356px)보다 좁아 왼쪽으로 치우칩니다.\n *\n * 해결: 개별 toast에 left:calc(--width/2) + translateX(-50%) 적용\n * (참고: https://github.com/emilkowalski/sonner/issues/678)\n */\nconst positionFix = `\n[data-sonner-toaster][data-x-position='center'] [data-sonner-toast] {\n left: calc(var(--width) / 2) !important;\n transform: translateX(-50%) var(--y) !important;\n width: fit-content !important;\n max-width: calc(100% - var(--mobile-offset-left) * 2) !important;\n}\n@media (max-width: 600px) {\n [data-sonner-toaster] {\n left: 0 !important;\n right: 0 !important;\n }\n [data-sonner-toaster] [data-sonner-toast] {\n width: fit-content !important;\n max-width: calc(100% - var(--mobile-offset-left) - var(--mobile-offset-right)) !important;\n }\n [data-sonner-toaster][data-x-position='center'] [data-sonner-toast] {\n left: 50% !important;\n }\n [data-sonner-toaster][data-x-position='right'] [data-sonner-toast] {\n left: auto !important;\n right: var(--mobile-offset-right) !important;\n }\n [data-sonner-toaster][data-x-position='left'] [data-sonner-toast] {\n left: var(--mobile-offset-left) !important;\n right: auto !important;\n }\n}\n`;\n\n// Root 컴포넌트 (Provider)\nconst Toaster: ToasterComponent = ({ ...props }: ToasterRootProps) => {\n return (\n <>\n <style>{positionFix}</style>\n <Sonner\n // eslint-disable-next-line tailwindcss/no-custom-classname -- toaster는 shadcn의 클래스 구성임\n className=\"toaster group [--toast-width:auto] [&_li]:!flex [&_li]:!items-center [&_li]:!justify-between [&_li]:!gap-2\"\n closeButton={false}\n toastOptions={{\n closeButton: false,\n }}\n {...props}\n />\n </>\n );\n};\n\n// Toast Container (커스텀 토스트용)\nToaster.Container = React.forwardRef<HTMLDivElement, ToasterContainerProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-3 rounded-medium border border-border-primary bg-component-toast py-[10px] pl-3 pr-4 text-mono-light shadow-strong',\n 'h-10 w-auto min-w-0 max-w-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Container'];\n\n// Icon 컴포넌트\nToaster.Icon = React.forwardRef<HTMLDivElement, ToasterIconProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex shrink-0 items-center justify-center', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Icon'];\n\n// Title 컴포넌트\nToaster.Title = React.forwardRef<HTMLDivElement, ToasterTitleProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-body-2 font-medium',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Title'];\n\n// Description 컴포넌트\nToaster.Description = React.forwardRef<HTMLDivElement, ToasterDescriptionProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full text-body-3 font-regular text-text-static-light/80',\n 'overflow-hidden text-ellipsis',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Description'];\n\n// Action 컴포넌트 (닫기 버튼 등)\nToaster.Action = React.forwardRef<HTMLButtonElement, ToasterActionProps>(\n ({ className, children, altText, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n 'flex h-7 min-h-[28px] w-auto min-w-[28px] shrink-0 items-center justify-center',\n 'rounded-small bg-transparent px-0 py-0',\n 'border-0 transition-colors',\n 'hover:bg-solid-primary-hovered',\n 'whitespace-nowrap',\n 'cursor-pointer',\n 'text-body-2',\n className,\n )}\n aria-label={altText}\n {...props}\n >\n {children || <XIcon type=\"regular\" className=\"size-4\" />}\n </button>\n );\n },\n) as ToasterComponent['Action'];\n\n// displayName 설정\nToaster.displayName = 'Toaster';\nToaster.Container.displayName = 'Toaster.Container';\nToaster.Icon.displayName = 'Toaster.Icon';\nToaster.Title.displayName = 'Toaster.Title';\nToaster.Description.displayName = 'Toaster.Description';\nToaster.Action.displayName = 'Toaster.Action';\n\nexport { Toaster };\nexport type {\n ToasterActionProps,\n ToasterComponent,\n ToasterContainerProps,\n ToasterDescriptionProps,\n ToasterIconProps,\n ToasterRootProps,\n ToasterTitleProps,\n};\n","import type React from 'react';\n\nimport type { ToasterRootProps } from './Toaster';\nimport { Toaster } from './Toaster';\n\nexport interface ToastProviderProps {\n children?: React.ReactNode;\n /**\n * 호버 시 토스트 확장\n * @default true\n */\n expand?: boolean;\n /**\n * Rich colors 스타일 적용\n * @default false\n */\n richColors?: boolean;\n /**\n * Provider 레벨 닫기 버튼\n * @default false\n */\n closeButton?: boolean;\n /**\n * 토스트가 표시될 위치\n * @default 'top-center'\n */\n position?:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n /**\n * 토스트 표시 시간 (ms)\n * @default 4000\n */\n duration?: number;\n /**\n * 토스트 최대 개수\n * @default 10\n */\n visibleToasts?: number;\n /**\n * 추가 Toaster props\n */\n toasterProps?: Omit<ToasterRootProps, 'children' | 'expand' | 'richColors' | 'closeButton'>;\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n expand = true,\n richColors = false,\n closeButton = false,\n position = 'top-center',\n duration = 4000,\n visibleToasts = 10,\n toasterProps,\n}) => {\n return (\n <>\n {children}\n <Toaster\n position={position}\n closeButton={closeButton}\n richColors={richColors}\n expand={expand}\n duration={duration}\n visibleToasts={visibleToasts}\n {...toasterProps}\n />\n </>\n );\n};\n","import type { ExternalToast } from 'sonner';\nimport { toast as sonnerToast } from 'sonner';\n\nimport { CheckIcon, ErrorIcon, InfoIcon, WarningIcon } from '../icon';\nimport { Toaster } from './Toaster';\n\n// ── Types ──\n\ninterface ToastAction {\n label: string;\n onClick: () => void;\n}\n\ninterface ToastOptions {\n title: string;\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}\n\ninterface ExtendedExternalToast extends ExternalToast {\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}\n\ntype ToastInput = string | ToastOptions;\n\n// ── Helpers ──\n\nfunction isToastOptions(input: ToastInput): input is ToastOptions {\n return typeof input === 'object' && input !== null && 'title' in input;\n}\n\nfunction extractToastParams(\n input: ToastInput,\n options?: ExtendedExternalToast,\n): { title: string; description?: string; action?: ToastAction; close?: boolean } {\n if (isToastOptions(input)) {\n return {\n title: input.title,\n description: input.description,\n action: input.action,\n close: input.close,\n };\n }\n return {\n title: input,\n description: options?.description,\n action: options?.action,\n close: options?.close,\n };\n}\n\nfunction getSonnerOptions(options?: ExtendedExternalToast): ExternalToast | undefined {\n if (!options) {\n return undefined;\n }\n const { description: _description, action: _action, close: _close, ...sonnerOptions } = options;\n return sonnerOptions;\n}\n\n// ── Toast Content ──\n\nfunction ToastContent({\n id,\n icon,\n title,\n description,\n action,\n close,\n}: {\n id: string | number;\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}) {\n const hasExtra = description || action;\n\n if (hasExtra) {\n return (\n <Toaster.Container className=\"h-auto min-h-12 flex-col items-start gap-1 py-3\">\n <div className=\"flex w-full items-center gap-2\">\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n {close && (\n <Toaster.Action className=\"rounded-medium\" onClick={() => sonnerToast.dismiss(id)} />\n )}\n </div>\n {description && <Toaster.Description>{description}</Toaster.Description>}\n {action && (\n <Toaster.Action\n className=\"mt-1 text-text-info hover:text-text-info-hovered\"\n onClick={() => {\n action.onClick();\n sonnerToast.dismiss(id);\n }}\n >\n {action.label}\n </Toaster.Action>\n )}\n </Toaster.Container>\n );\n }\n\n // Figma: close=true → pl-12 pr-6 py-6 gap-12, Content(icon+text) gap-8\n // Figma: close=false → pl-12 pr-16 py-10, Content(icon+text) gap-8\n if (close) {\n return (\n <Toaster.Container className=\"py-1.5 pr-1.5\">\n <div className=\"flex flex-1 items-center gap-2 overflow-hidden\">\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n </div>\n <Toaster.Action className=\"rounded-medium\" onClick={() => sonnerToast.dismiss(id)} />\n </Toaster.Container>\n );\n }\n\n return (\n <Toaster.Container>\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n </Toaster.Container>\n );\n}\n\n// ── Internal creator ──\n\nfunction createToast(\n input: ToastInput,\n options: ExtendedExternalToast | undefined,\n icon?: React.ReactNode,\n) {\n const { title, description, action, close } = extractToastParams(input, options);\n\n return sonnerToast.custom(\n (id) => (\n <ToastContent\n id={id}\n icon={icon}\n title={title}\n description={description}\n action={action}\n close={close}\n />\n ),\n { unstyled: true, ...getSonnerOptions(options) },\n );\n}\n\n// ── Public API ──\n\n/**\n * toast() — 커스텀 디자인이 적용된 toast 함수\n *\n * sonner의 toast를 래핑하여 프로젝트의 디자인 시스템을 자동으로 적용합니다.\n *\n * @example\n * ```tsx\n * import { toast } from '@exem-ui/react';\n *\n * // 간단한 메시지\n * toast('기본 메시지');\n * toast.success('성공');\n * toast.error('오류');\n * toast.info('정보');\n * toast.warning('경고');\n *\n * // title + description + action\n * toast.success({\n * title: '저장 완료',\n * description: '변경사항이 저장되었습니다.',\n * action: { label: '되돌리기', onClick: () => handleUndo() },\n * });\n *\n * // 닫기 버튼\n * toast.success({ title: '저장 완료', close: true });\n *\n * // 문자열 + 옵션 (sonner 스타일)\n * toast.success('생성 완료', {\n * description: '일요일, 12월 3일',\n * action: { label: 'Undo', onClick: () => console.log('Undo') },\n * });\n * ```\n */\nexport const toast = Object.assign(\n (input: ToastInput, options?: ExtendedExternalToast) => createToast(input, options),\n {\n success: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <CheckIcon type=\"regular\" className=\"size-5 text-icon-success\" />,\n ),\n\n error: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <ErrorIcon type=\"regular\" className=\"size-5 text-icon-critical\" />,\n ),\n\n info: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <InfoIcon type=\"regular\" className=\"size-5 text-icon-static-light\" />,\n ),\n\n warning: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <WarningIcon type=\"regular\" className=\"size-5 text-icon-warning\" />,\n ),\n\n loading: (input: ToastInput, options?: ExtendedExternalToast) => createToast(input, options),\n\n dismiss: sonnerToast.dismiss,\n promise: sonnerToast.promise as typeof sonnerToast.promise,\n custom: sonnerToast.custom,\n },\n);\n\nexport type { ExtendedExternalToast, ToastAction, ToastInput, ToastOptions };\n","import type React from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport type { ExtendedExternalToast } from './toast';\nimport { toast } from './toast';\nimport type * as Toast from './types';\n\nfunction toExtended(options?: Toast.Options): ExtendedExternalToast | undefined {\n if (!options) {\n return undefined;\n }\n const { description: _desc, action: _act, ...rest } = options;\n const converted: Record<string, unknown> = { ...rest };\n if (typeof _desc === 'string') {\n converted.description = _desc;\n }\n return converted as ExtendedExternalToast;\n}\n\nconst DEFAULT_MESSAGES: Toast.DefaultMessage = {\n success: '성공',\n error: '오류',\n info: '정보',\n warning: '경고',\n loading: '로딩',\n};\n\n/**\n * @deprecated `toast` 함수를 직접 사용하세요.\n *\n * 하위호환을 위해 유지되며, 내부적으로 `toast`에 위임합니다.\n *\n * @example\n * ```tsx\n * // Before (useToast)\n * const { success } = useToast();\n * success('완료');\n *\n * // After (toast 직접 사용)\n * import { toast } from '@exem-ui/react';\n * toast.success('완료');\n * ```\n */\nexport function useToast() {\n const show = (message: string, options?: Toast.Options) => toast(message, toExtended(options));\n\n const dismiss = (toastId: string | number) => toast.dismiss(toastId);\n\n const showTypedToast = (type: Toast.Type, message?: string, options?: Toast.Options) => {\n const toastMessage = message ?? DEFAULT_MESSAGES[type];\n return toast[type](toastMessage, toExtended(options));\n };\n\n const promiseToast = <T,>(\n promiseTask: Promise<T>,\n options: Toast.PromiseOptions<T>,\n toastOptions?: Toast.Options,\n ) =>\n sonnerToast.promise(promiseTask, {\n loading: options.loading ?? DEFAULT_MESSAGES.loading,\n success: options.success ?? DEFAULT_MESSAGES.success,\n error: options.error ?? DEFAULT_MESSAGES.error,\n finally: options.finally,\n description: options.description,\n ...toastOptions,\n });\n\n const custom = (render: (id: string | number) => React.ReactElement, options?: Toast.Options) =>\n toast.custom(render, options);\n\n return {\n show,\n dismiss,\n promise: promiseToast,\n custom,\n success: (message?: string, options?: Toast.Options) =>\n showTypedToast('success', message, options),\n error: (message?: string, options?: Toast.Options) => showTypedToast('error', message, options),\n info: (message?: string, options?: Toast.Options) => showTypedToast('info', message, options),\n warning: (message?: string, options?: Toast.Options) =>\n showTypedToast('warning', message, options),\n loading: (message?: string, options?: Toast.Options) =>\n showTypedToast('loading', message, options),\n };\n}\n","import type React from 'react';\n\nconst buttonize = (\n fn: (e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => void,\n) => {\n return {\n role: 'button',\n onClick: fn,\n onKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n fn(event);\n }\n },\n };\n};\n\nexport { buttonize };\n"]}
1
+ {"version":3,"sources":["../src/avatar/Avatar.tsx","../src/badge/Badge.tsx","../src/star/Star.tsx","../src/tag/Tag.tsx","../src/breadcrumb/Breadcrumb.tsx","../src/button/Button.tsx","../src/button/IconButton.tsx","../src/button/ButtonGroup.tsx","../src/checkbox/Checkbox.tsx","../src/radio/Radio.tsx","../src/switch/Switch.tsx","../src/picker/DatePicker.tsx","../src/dropdown/dropdownVariants.ts","../src/dropdown/Dropdown.tsx","../src/input/TextArea.tsx","../src/input/TextField.tsx","../src/scrollArea/ScrollArea.tsx","../src/modal/Modal.tsx","../src/sheet/sheetResize.ts","../src/sheet/SheetResizable.tsx","../src/sheet/Sheet.tsx","../src/messageBox/MessageBox.tsx","../src/loading/Loading.tsx","../src/progress/Progress.tsx","../src/toast/Toaster.tsx","../src/toast/ToastProvider.tsx","../src/toast/toast.tsx","../src/toast/useToast.tsx","../src/utils.ts"],"names":["cva","jsx","Person","cn","forwardRef","jsxs","X","Fragment","Slot","MoreHorizontal","iconSizes","cloneElement","ConditionalTooltip","useId","CheckboxPrimitive","Minus","Check","containerVariants","stateClasses","labelVariants","RadioGroupPrimitive","SwitchPrimitives","ChevronLeft","ChevronRight","getDefaultClassNames","useState","DayPicker","month","overlayListVariants","createContext","useContext","DropdownMenuPrimitive","commonInputVariants","React","ScrollAreaPrimitive","DialogPrimitive","Resizable","DialogPrimitive2","DialogPrimitive3","Sonner","React2","sonnerToast","Error","Info","Warning"],"mappings":"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","file":"index.js","sourcesContent":["import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { PersonIcon } from '../icon';\n\ninterface AvatarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof avatarVariants> {\n /** 사용자 이름. 이미지가 없을 때 이니셜 폴백에 사용됩니다. */\n name?: string;\n /** 아바타 이미지 URL */\n src?: string;\n /** 이미지 대체 텍스트 */\n alt?: string;\n}\n\ntype AvatarComponent = React.ForwardRefExoticComponent<\n AvatarProps & React.RefAttributes<HTMLDivElement>\n>;\n\n// 크기별 설정 상수\nconst SIZE_CONFIG = {\n xsmall: {\n container: 'size-[16px] text-body-3',\n initialPadding: 'px-[2.5px] leading-none tracking-tight',\n imagePadding: 'p-[2px]',\n iconSize: 'size-[12px]',\n },\n small: {\n container: 'size-[20px] text-body-2',\n initialPadding: 'px-[3.5px]',\n imagePadding: 'p-[3px]',\n iconSize: 'size-[14px]',\n },\n medium: {\n container: 'size-[24px] text-body-2',\n initialPadding: 'px-[5.5px] py-[2px]',\n imagePadding: 'p-[4px]',\n iconSize: 'size-[16px]',\n },\n large: {\n container: 'size-[32px] text-title-2',\n initialPadding: 'px-[8px] py-[3.5px]',\n imagePadding: 'p-[6px]',\n iconSize: 'size-[20px]',\n },\n} as const;\n\nconst avatarVariants = cva(\n 'flex items-center justify-center rounded-[28px] text-center font-semibold',\n {\n variants: {\n size: {\n xsmall: SIZE_CONFIG.xsmall.container,\n small: SIZE_CONFIG.small.container,\n medium: SIZE_CONFIG.medium.container,\n large: SIZE_CONFIG.large.container,\n },\n type: {\n initial: 'bg-elevation-elevation-5 text-elevation-elevation-0',\n image: 'bg-elevation-elevation-4 text-elevation-elevation-0',\n },\n },\n compoundVariants: [\n // Initial type variants\n { type: 'initial', size: 'xsmall', class: SIZE_CONFIG.xsmall.initialPadding },\n { type: 'initial', size: 'small', class: SIZE_CONFIG.small.initialPadding },\n { type: 'initial', size: 'medium', class: SIZE_CONFIG.medium.initialPadding },\n { type: 'initial', size: 'large', class: SIZE_CONFIG.large.initialPadding },\n ],\n defaultVariants: {\n size: 'medium',\n type: 'initial',\n },\n },\n);\n\nconst getInitial = (name?: string): string => {\n return name ? name.charAt(0).toUpperCase() : '';\n};\n\nconst renderInitialContent = (name?: string) => {\n return <span>{getInitial(name)}</span>;\n};\n\nconst renderImageContent = (src: string, alt?: string, name?: string) => {\n return (\n <img src={src} alt={alt || name || 'Avatar'} className=\"size-full rounded-full object-cover\" />\n );\n};\n\nconst renderIconContent = (size: keyof typeof SIZE_CONFIG = 'medium') => {\n const iconSize = SIZE_CONFIG[size].iconSize;\n return <PersonIcon className={cn('shrink-0', iconSize)} />;\n};\n\n/**\n * 사용자 아바타를 표시하는 컴포넌트입니다. 이니셜, 이미지, 아이콘 폴백을 지원합니다.\n *\n * @example\n * ```tsx\n * // 이니셜 표시\n * <Avatar name=\"홍길동\" size=\"large\" />\n *\n * // 이미지 표시\n * <Avatar type=\"image\" src=\"/avatar.png\" name=\"홍길동\" />\n *\n * // 이미지 없을 때 아이콘 폴백\n * <Avatar type=\"image\" name=\"홍길동\" />\n * ```\n *\n * @see {@link AvatarProps} props 상세\n */\nconst Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, size = 'medium', type = 'initial', name, src, alt, ...props }, ref) => {\n const resolvedSize = size || 'medium';\n const isFallback = type === 'image' && !src;\n const fallbackPadding = isFallback ? SIZE_CONFIG[resolvedSize].imagePadding : undefined;\n\n const renderContent = () => {\n if (type === 'initial') {\n return renderInitialContent(name);\n }\n\n if (type === 'image') {\n return src ? renderImageContent(src, alt, name) : renderIconContent(resolvedSize);\n }\n\n return null;\n };\n\n return (\n <div\n ref={ref}\n className={cn(avatarVariants({ size, type }), fallbackPadding, className)}\n {...props}\n >\n {renderContent()}\n </div>\n );\n },\n) as AvatarComponent;\n\nAvatar.displayName = 'Avatar';\n\nexport { Avatar };\nexport type { AvatarComponent, AvatarProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * 배지 스타일 변형\n * @default 'default'\n */\n variant?: 'default' | 'accent';\n /**\n * 비활성화 상태\n * @default false\n */\n disabled?: boolean;\n}\n\ntype BadgeComponent = React.ForwardRefExoticComponent<\n BadgeProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-strong border px-[4px] text-body-3 font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n accent: 'border-transparent bg-solid-accent-default text-text-static-light',\n 'accent-disabled': 'border-transparent bg-solid-accent-disabled text-text-inverse-disabled',\n default: 'border-transparent bg-elevation-elevation-3 text-text-secondary',\n 'default-disabled': 'border-transparent bg-elevation-elevation-2 text-text-disabled',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\n/**\n * 상태나 카운트를 표시하는 배지 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Badge variant=\"accent\">3</Badge>\n * <Badge variant=\"default\" disabled>0</Badge>\n * ```\n *\n * @see {@link BadgeProps} props 상세\n */\nconst Badge = forwardRef<HTMLDivElement, BadgeProps>(\n ({ className, variant = 'default', disabled = false, ...props }, ref) => {\n const finalVariant = disabled ? (`${variant}-disabled` as const) : variant;\n\n return (\n <div\n ref={ref}\n className={cn(badgeVariants({ variant: finalVariant }), className)}\n {...props}\n />\n );\n },\n) as BadgeComponent;\n\nBadge.displayName = 'Badge';\n\nexport { Badge };\nexport type { BadgeComponent, BadgeProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef, type SVGProps } from 'react';\n\ninterface StarProps extends React.SVGProps<SVGSVGElement> {\n /**\n * 별 아이콘 크기\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * 선택(채워짐) 상태 여부\n * @default false\n */\n selected?: boolean;\n /** 클릭 이벤트 핸들러 */\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n}\n\ntype StarComponent = React.ForwardRefExoticComponent<\n Omit<StarProps, 'ref'> & React.RefAttributes<SVGSVGElement>\n>;\n\nconst StarRoundedEmpty = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"1em\"\n height=\"1em\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n stroke=\"#cfcfcf\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m10 14.773 4.275 2.628a.656.656 0 0 0 .978-.716l-1.162-4.905 3.804-3.282a.66.66 0 0 0-.374-1.154l-4.993-.407-1.923-4.656a.653.653 0 0 0-1.21 0L7.473 6.937l-4.993.407a.661.661 0 0 0-.374 1.158l3.805 3.281-1.163 4.902a.656.656 0 0 0 .978.716z\"\n />\n </svg>\n);\n\nconst StarRoundedFilled = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"1em\"\n height=\"1em\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fill=\"#FE9A00\"\n d=\"m18.304 8.973-3.516 3.033 1.071 4.537a1.281 1.281 0 0 1-1.914 1.392L10 15.507l-3.948 2.428a1.28 1.28 0 0 1-1.911-1.392l1.075-4.537L1.7 8.973a1.286 1.286 0 0 1 .728-2.254l4.61-.372 1.778-4.303a1.278 1.278 0 0 1 2.364 0l1.778 4.303 4.61.372a1.286 1.286 0 0 1 .731 2.255z\"\n />\n </svg>\n);\n\n/**\n * 별점 평가에 사용되는 Star 아이콘 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Star selected size=\"medium\" onClick={() => console.log('clicked')} />\n * ```\n *\n * @see {@link StarProps} props 상세\n */\nconst Star = forwardRef<SVGSVGElement, StarProps>(\n ({ size = 'medium', selected = false, className, onClick, ...props }, ref) => {\n const sizeConfig = {\n small: { width: 16, height: 16 },\n medium: { width: 20, height: 20 },\n large: { width: 24, height: 24 },\n };\n const config = sizeConfig[size];\n\n return selected ? (\n <StarRoundedFilled\n ref={ref}\n width={config.width}\n height={config.height}\n className={cn('cursor-pointer transition-colors', className)}\n onClick={onClick}\n {...props}\n />\n ) : (\n <StarRoundedEmpty\n ref={ref}\n width={config.width}\n height={config.height}\n className={cn('cursor-pointer transition-colors', className)}\n onClick={onClick}\n {...props}\n />\n );\n },\n) as StarComponent;\n\nStar.displayName = 'Star';\n\nexport { Star };\nexport type { StarComponent, StarProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { Fragment, forwardRef } from 'react';\nimport { XIcon } from '../icon';\n\ntype TagColor = VariantProps<typeof tagVariants>['color'];\n\ninterface TagProps\n extends Pick<React.HTMLAttributes<HTMLDivElement>, 'className' | 'children' | 'style'>,\n VariantProps<typeof tagVariants> {\n /** 텍스트 왼쪽에 표시할 아이콘 */\n leftIcon?: React.ReactElement<{ className?: string }>;\n /**\n * 삭제 아이콘 표시 여부\n * @default false\n */\n canDelete?: boolean;\n /** 삭제 버튼 클릭 핸들러 */\n onDelete?: () => void;\n /** 텍스트 오른쪽에 표시할 슬롯 요소 */\n rightSlot?: React.ReactNode;\n}\n\ntype TagComponent = React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLDivElement>>;\n\ninterface DoubleTagProps {\n /** 표시할 태그 항목 배열 (각 항목은 color와 content를 가짐) */\n items: {\n color: TagColor;\n content: React.ReactNode;\n }[];\n className?: string;\n}\n\nconst tagVariants = cva(\n 'inline-flex h-5 items-center gap-0.5 rounded-medium px-1 text-body-3 font-medium',\n {\n variants: {\n color: {\n mono: 'text-tint-foreground-mono',\n sky: 'text-tint-foreground-sky',\n red: 'text-tint-foreground-red',\n amber: 'text-tint-foreground-amber',\n green: 'text-tint-foreground-green',\n orange: 'text-tint-foreground-orange',\n cyan: 'text-tint-foreground-cyan',\n violet: 'text-tint-foreground-violet',\n pink: 'text-tint-foreground-pink',\n yellow: 'text-tint-foreground-yellow',\n lime: 'text-tint-foreground-lime',\n emerald: 'text-tint-foreground-emerald',\n teal: 'text-tint-foreground-teal',\n blue: 'text-tint-foreground-blue',\n indigo: 'text-tint-foreground-indigo',\n purple: 'text-tint-foreground-purple',\n fuchsia: 'text-tint-foreground-fuchsia',\n rose: 'text-tint-foreground-rose',\n },\n type: {\n fill: '',\n line: 'bg-component-tag border border-border-secondary',\n },\n },\n compoundVariants: [\n { color: 'mono', type: 'fill', className: 'bg-tint-background-mono' },\n { color: 'sky', type: 'fill', className: 'bg-tint-background-sky' },\n { color: 'red', type: 'fill', className: 'bg-tint-background-red' },\n { color: 'amber', type: 'fill', className: 'bg-tint-background-amber' },\n { color: 'green', type: 'fill', className: 'bg-tint-background-green' },\n { color: 'orange', type: 'fill', className: 'bg-tint-background-orange' },\n { color: 'cyan', type: 'fill', className: 'bg-tint-background-cyan' },\n { color: 'violet', type: 'fill', className: 'bg-tint-background-violet' },\n { color: 'pink', type: 'fill', className: 'bg-tint-background-pink' },\n { color: 'yellow', type: 'fill', className: 'bg-tint-background-yellow' },\n { color: 'lime', type: 'fill', className: 'bg-tint-background-lime' },\n { color: 'emerald', type: 'fill', className: 'bg-tint-background-emerald' },\n { color: 'teal', type: 'fill', className: 'bg-tint-background-teal' },\n { color: 'blue', type: 'fill', className: 'bg-tint-background-blue' },\n { color: 'indigo', type: 'fill', className: 'bg-tint-background-indigo' },\n { color: 'purple', type: 'fill', className: 'bg-tint-background-purple' },\n { color: 'fuchsia', type: 'fill', className: 'bg-tint-background-fuchsia' },\n { color: 'rose', type: 'fill', className: 'bg-tint-background-rose' },\n ],\n defaultVariants: {\n color: 'mono',\n type: 'fill',\n },\n },\n);\n\n/**\n * 카테고리나 상태를 나타내는 라벨 컴포넌트입니다.\n * 18가지 색상과 `fill`/`line` 타입을 지원합니다.\n *\n * @example\n * ```tsx\n * <Tag color=\"sky\">라벨</Tag>\n * <Tag color=\"red\" type=\"line\">경고</Tag>\n * <Tag color=\"green\" canDelete onDelete={handleDelete}>삭제 가능</Tag>\n * <Tag color=\"blue\" leftIcon={<StarIcon type=\"regular\" />}>아이콘 태그</Tag>\n * <Tag color=\"blue\" rightSlot={<Icon />}>커스텀 슬롯</Tag>\n * ```\n *\n * @see {@link TagProps} props 상세\n */\nconst Tag = forwardRef<HTMLDivElement, TagProps>(\n (\n {\n className,\n color,\n type = 'fill',\n leftIcon,\n canDelete,\n onDelete,\n rightSlot,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n data-slot=\"tag\"\n className={cn(tagVariants({ color, type, className }))}\n ref={ref}\n {...props}\n >\n {leftIcon && (\n <span className=\"flex shrink-0 size-3 items-center justify-center [&>svg]:size-3\">\n {leftIcon}\n </span>\n )}\n <span className=\"px-0.5 text-body-3 font-medium\">{children}</span>\n {canDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete?.();\n }}\n >\n <XIcon type=\"regular\" className=\"size-3 [&>*]:stroke-current [&>path]:fill-current\" />\n </button>\n )}\n {rightSlot && <div className=\"ml-auto\">{rightSlot}</div>}\n </div>\n );\n },\n);\n\nTag.displayName = 'Tag';\n\n/**\n * 두 개의 태그를 나란히 연결하여 키-값 쌍을 표시하는 컴포넌트입니다.\n * 각 태그는 `line` 타입으로 렌더링되며, 사이에 구분선이 표시됩니다.\n *\n * @example\n * ```tsx\n * <DoubleTag\n * items={[\n * { color: 'blue', content: '카테고리' },\n * { color: 'red', content: '긴급' },\n * ]}\n * />\n * ```\n *\n * @see {@link DoubleTagProps} props 상세\n */\nconst DoubleTag = forwardRef<HTMLDivElement, DoubleTagProps>(\n ({ className, items, ...props }, ref) => {\n return (\n <div\n className={cn(\n 'flex w-fit overflow-hidden rounded-medium border border-border-secondary',\n className,\n )}\n ref={ref}\n {...props}\n >\n {items.map((item, index) => (\n <Fragment key={index}>\n <Tag color={item.color} type=\"line\" className=\"rounded-none border-none\">\n {item.content}\n </Tag>\n {index < items.length - 1 && (\n <div className=\"min-h-[20px] w-px border-none bg-border-secondary\" />\n )}\n </Fragment>\n ))}\n </div>\n );\n },\n);\n\nDoubleTag.displayName = 'DoubleTag';\n\nexport { Tag, DoubleTag };\nexport type { TagComponent, TagProps, TagColor, DoubleTagProps };\n","import { cn } from '@exem-ui/core/utils';\nimport { Slot } from '@radix-ui/react-slot';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { MoreHorizontalIcon } from '../icon';\n\ntype BreadcrumbRootProps = React.ComponentPropsWithoutRef<'nav'>;\n\ntype BreadcrumbListProps = React.ComponentPropsWithoutRef<'ol'>;\n\ntype BreadcrumbItemProps = React.ComponentPropsWithoutRef<'li'>;\n\ntype BreadcrumbLinkProps = React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean;\n};\n\ntype BreadcrumbPageProps = React.ComponentPropsWithoutRef<'span'>;\n\ntype BreadcrumbPathProps = React.ComponentPropsWithoutRef<'span'>;\n\ntype BreadcrumbSeparatorProps = React.ComponentProps<'li'>;\n\ntype BreadcrumbEllipsisProps = React.ComponentProps<'span'>;\n\ntype BreadcrumbComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbRootProps> & React.RefAttributes<HTMLElement>\n> & {\n List: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbListProps> & React.RefAttributes<HTMLOListElement>\n >;\n Item: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbItemProps> & React.RefAttributes<HTMLLIElement>\n >;\n Link: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbLinkProps> & React.RefAttributes<HTMLAnchorElement>\n >;\n Page: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbPageProps> & React.RefAttributes<HTMLSpanElement>\n >;\n Path: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbPathProps> & React.RefAttributes<HTMLSpanElement>\n >;\n Separator: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbSeparatorProps> & React.RefAttributes<HTMLLIElement>\n >;\n Ellipsis: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<BreadcrumbEllipsisProps> & React.RefAttributes<HTMLSpanElement>\n >;\n};\n\n/**\n * 현재 페이지의 계층 위치를 표시하는 탐색 경로 컴포넌트입니다.\n * Compound Component 패턴으로 하위 컴포넌트와 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Breadcrumb>\n * <Breadcrumb.List>\n * <Breadcrumb.Item>\n * <Breadcrumb.Link href=\"/\">홈</Breadcrumb.Link>\n * </Breadcrumb.Item>\n * <Breadcrumb.Separator />\n * <Breadcrumb.Item>\n * <Breadcrumb.Path>상위 경로</Breadcrumb.Path>\n * </Breadcrumb.Item>\n * <Breadcrumb.Separator />\n * <Breadcrumb.Item>\n * <Breadcrumb.Page>현재 페이지</Breadcrumb.Page>\n * </Breadcrumb.Item>\n * </Breadcrumb.List>\n * </Breadcrumb>\n * ```\n *\n * @see {@link BreadcrumbRootProps} props 상세\n */\nconst Breadcrumb = forwardRef<HTMLElement, BreadcrumbRootProps>(({ ...props }, ref) => (\n <nav ref={ref} aria-label=\"breadcrumb\" {...props} />\n)) as BreadcrumbComponent;\n\nBreadcrumb.List = forwardRef<HTMLOListElement, BreadcrumbListProps>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-[4px] break-words text-body-2 text-text-tertiary',\n className,\n )}\n {...props}\n />\n ),\n) as BreadcrumbComponent['List'];\n\nBreadcrumb.Item = forwardRef<HTMLLIElement, BreadcrumbItemProps>(({ className, ...props }, ref) => (\n <li ref={ref} className={cn('inline-flex items-center', className)} {...props} />\n)) as BreadcrumbComponent['Item'];\n\nBreadcrumb.Link = forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return <Comp ref={ref} className={cn('text-text-link', className)} {...props} />;\n },\n) as BreadcrumbComponent['Link'];\n\nBreadcrumb.Page = forwardRef<HTMLSpanElement, BreadcrumbPageProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-text-primary', className)}\n {...props}\n />\n ),\n) as BreadcrumbComponent['Page'];\n\nBreadcrumb.Path = forwardRef<HTMLSpanElement, BreadcrumbPathProps>(\n ({ className, ...props }, ref) => (\n <span ref={ref} className={cn('text-text-tertiary', className)} {...props} />\n ),\n) as BreadcrumbComponent['Path'];\n\nBreadcrumb.Separator = forwardRef<HTMLLIElement, BreadcrumbSeparatorProps>(\n ({ children, className, ...props }, ref) => (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? '/'}\n </li>\n ),\n) as BreadcrumbComponent['Separator'];\n\nBreadcrumb.Ellipsis = forwardRef<HTMLSpanElement, BreadcrumbEllipsisProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontalIcon type=\"regular\" className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n ),\n) as BreadcrumbComponent['Ellipsis'];\n\nBreadcrumb.displayName = 'Breadcrumb';\nBreadcrumb.List.displayName = 'Breadcrumb.List';\nBreadcrumb.Item.displayName = 'Breadcrumb.Item';\nBreadcrumb.Link.displayName = 'Breadcrumb.Link';\nBreadcrumb.Page.displayName = 'Breadcrumb.Page';\nBreadcrumb.Path.displayName = 'Breadcrumb.Path';\nBreadcrumb.Separator.displayName = 'Breadcrumb.Separator';\nBreadcrumb.Ellipsis.displayName = 'Breadcrumb.Ellipsis';\n\nexport { Breadcrumb };\nexport type {\n BreadcrumbComponent,\n BreadcrumbRootProps,\n BreadcrumbListProps,\n BreadcrumbItemProps,\n BreadcrumbLinkProps,\n BreadcrumbPageProps,\n BreadcrumbPathProps,\n BreadcrumbSeparatorProps,\n BreadcrumbEllipsisProps,\n};\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { cloneElement, forwardRef } from 'react';\nimport { type IconBaseProps, iconSizes } from '../icon';\n\ntype ButtonColor = 'primary' | 'accent' | 'critical';\ntype ButtonSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\ntype ButtonBackground = 'none' | 'fill';\ntype ButtonVariant = 'solid' | 'assistive' | 'outlined' | 'invisible';\n\ntype ButtonVariantProps =\n | { variant?: 'solid' | 'assistive'; color?: ButtonColor; background?: never }\n | { variant: 'outlined' | 'invisible'; color?: ButtonColor; background?: ButtonBackground };\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color' | 'background'> &\n ButtonVariantProps & {\n size?: ButtonSize;\n icon?: React.ReactElement<IconBaseProps>;\n };\n\ntype ButtonComponent = React.ForwardRefExoticComponent<\n ButtonProps & React.RefAttributes<HTMLButtonElement>\n>;\n\ntype StylePart = { button: string; icon: string; text: string };\n\nconst colorStyles: Record<ButtonColor, Record<ButtonVariant, StylePart>> = {\n primary: {\n solid: {\n button:\n 'bg-solid-primary-default hover:bg-solid-primary-hovered disabled:bg-solid-primary-disabled',\n icon: 'text-icon-inverse group-disabled/button:text-icon-inverse',\n text: 'text-text-inverse group-disabled/button:text-text-inverse',\n },\n assistive: {\n button:\n 'bg-elevation-elevation-2 hover:bg-elevation-elevation-3 disabled:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n },\n accent: {\n solid: {\n button:\n 'bg-solid-accent-default hover:bg-solid-accent-hovered disabled:bg-solid-accent-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n assistive: {\n button: 'bg-elevation-accent-0 hover:bg-elevation-accent-1 disabled:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-accent-0',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n },\n critical: {\n solid: {\n button:\n 'bg-solid-critical-default hover:bg-solid-critical-hovered disabled:bg-solid-critical-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n assistive: {\n button:\n 'bg-elevation-critical-0 hover:bg-elevation-critical-1 disabled:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n outlined: {\n button:\n 'border border-border-primary disabled:border-border-primary hover:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-critical-0',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n },\n};\n\nconst buttonVariants = cva(\n 'inline-flex w-fit shrink-0 cursor-pointer flex-row items-center justify-center rounded-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed',\n {\n compoundVariants: [\n // Primary 색상 조합\n { className: colorStyles.primary.solid.button, color: 'primary', variant: 'solid' },\n { className: colorStyles.primary.assistive.button, color: 'primary', variant: 'assistive' },\n { className: colorStyles.primary.outlined.button, color: 'primary', variant: 'outlined' },\n { className: colorStyles.primary.invisible.button, color: 'primary', variant: 'invisible' },\n // Accent 색상 조합\n { className: colorStyles.accent.solid.button, color: 'accent', variant: 'solid' },\n { className: colorStyles.accent.assistive.button, color: 'accent', variant: 'assistive' },\n { className: colorStyles.accent.outlined.button, color: 'accent', variant: 'outlined' },\n { className: colorStyles.accent.invisible.button, color: 'accent', variant: 'invisible' },\n // Critical 색상 조합\n { className: colorStyles.critical.solid.button, color: 'critical', variant: 'solid' },\n { className: colorStyles.critical.assistive.button, color: 'critical', variant: 'assistive' },\n { className: colorStyles.critical.outlined.button, color: 'critical', variant: 'outlined' },\n { className: colorStyles.critical.invisible.button, color: 'critical', variant: 'invisible' },\n // background 표면은 outlined/invisible 에서만 추가\n {\n className: 'bg-elevation-elevation-0',\n background: 'fill',\n variant: ['outlined', 'invisible'],\n },\n ],\n defaultVariants: {\n background: 'none',\n color: 'primary',\n size: 'medium',\n variant: 'solid',\n },\n variants: {\n background: {\n none: '',\n fill: '',\n },\n color: {\n accent: '',\n critical: '',\n primary: '',\n },\n size: {\n xsmall: 'h-6 gap-0 px-1 text-body-3 font-medium',\n small: 'h-7 gap-0.5 px-1.5 text-body-2 font-medium',\n medium: 'h-8 gap-0.5 px-2 text-body-2 font-medium',\n large: 'h-10 gap-1 px-2.5 text-body-1 font-medium',\n xlarge: 'h-12 gap-1 px-3 text-title-2 font-medium',\n },\n variant: {\n solid: '',\n assistive: '',\n outlined: '',\n invisible: '',\n },\n },\n },\n);\n\nconst IconSizeMap = {\n xsmall: iconSizes.sm,\n small: iconSizes.sm,\n medium: iconSizes.sm,\n large: iconSizes.md,\n xlarge: iconSizes.lg,\n} as const;\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'solid',\n color = 'primary',\n background,\n size = 'medium',\n icon,\n children,\n ...props\n },\n ref,\n ) => {\n const content = (\n <>\n {icon &&\n cloneElement(icon, {\n className: cn(\n 'shrink-0 [&>path]:fill-current',\n colorStyles[color][variant].icon,\n icon.props.className,\n ),\n size: icon.props.size ?? IconSizeMap[size],\n })}\n {typeof children === 'string' ? (\n <span\n className={cn(\n 'truncate',\n size === 'xlarge' ? 'px-1' : 'px-0.5',\n colorStyles[color][variant].text,\n )}\n >\n {children}\n </span>\n ) : (\n children\n )}\n </>\n );\n\n return (\n <button\n className={cn(\n buttonVariants({\n background,\n className,\n color,\n size,\n variant,\n }),\n 'group/button',\n )}\n ref={ref}\n {...props}\n >\n {content}\n </button>\n );\n },\n) as ButtonComponent;\n\nButton.displayName = 'Button';\n\nexport { Button };\nexport type { ButtonComponent, ButtonProps, ButtonVariantProps, ButtonSize };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport type { ComponentProps } from 'react';\nimport { forwardRef } from 'react';\nimport { ConditionalTooltip } from '../flat';\nimport type { IconBaseProps } from '../icon';\nimport type { ButtonSize, ButtonVariantProps } from './Button';\nimport { Button } from './Button';\n\ntype IconButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> &\n ButtonVariantProps & {\n icon: React.ReactElement<IconBaseProps>;\n size?: ButtonSize;\n /** 툴팁 설정 (문자열 또는 FlatTooltip 설정 객체) */\n tooltip?: ComponentProps<typeof ConditionalTooltip>['tooltip'];\n };\n\ntype IconButtonComponent = React.ForwardRefExoticComponent<\n IconButtonProps & React.RefAttributes<HTMLButtonElement>\n>;\n\nconst iconButtonSizeClasses = {\n xsmall: 'size-6',\n small: 'size-7',\n medium: 'size-8',\n large: 'size-10',\n xlarge: 'size-12',\n};\n\nconst IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ className, tooltip, icon, size = 'medium', ...props }, ref) => {\n const buttonProps = {\n className: cn(iconButtonSizeClasses[size], 'px-0', className),\n icon,\n size,\n ...props,\n };\n\n return (\n <ConditionalTooltip tooltip={tooltip}>\n <Button ref={ref} {...(buttonProps as React.ComponentProps<typeof Button>)} />\n </ConditionalTooltip>\n );\n },\n) as IconButtonComponent;\n\nIconButton.displayName = 'IconButton';\n\nexport { IconButton };\nexport type { IconButtonComponent, IconButtonProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport type { ComponentProps } from 'react';\nimport { forwardRef } from 'react';\nimport { ConditionalTooltip } from '../flat';\nimport type { IconBaseProps } from '../icon';\nimport { Button } from './Button';\nimport { IconButton } from './IconButton';\n\ntype ButtonGroupSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\ninterface ButtonGroupItem {\n id: string;\n label?: string;\n icon?: React.ReactElement<IconBaseProps>;\n /** 툴팁 설정 (문자열 또는 FlatTooltip 설정 객체) */\n tooltip?: ComponentProps<typeof ConditionalTooltip>['tooltip'];\n onClick?: () => void;\n}\n\ninterface ButtonGroupProps {\n /** 버튼 그룹 스타일 변형 */\n variant?: 'contained' | 'outlined';\n /** 아이콘만 표시 */\n iconOnly?: boolean;\n /** 배경색 표시 여부 (뒷 레이어가 보이지 않아야 할 때) */\n hasBackground?: boolean;\n /** 버튼 크기 */\n size?: ButtonGroupSize;\n /** 버튼 항목 목록 */\n items: ButtonGroupItem[];\n /** 커스텀 className */\n className?: string;\n}\n\ntype ButtonGroupComponent = React.ForwardRefExoticComponent<\n ButtonGroupProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n variant = 'contained',\n iconOnly = false,\n hasBackground = false,\n size = 'medium',\n items,\n className,\n },\n ref,\n ) => {\n if (items.length === 0) {\n return null;\n }\n\n const isOutlined = variant === 'outlined';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'inline-flex items-center overflow-hidden rounded-medium',\n hasBackground && 'bg-elevation-elevation-0',\n className,\n )}\n role=\"group\"\n >\n {items.map((item, index) => {\n const isFirst = index === 0;\n const isLast = index === items.length - 1;\n\n const roundedClasses = cn('rounded-none', {\n 'rounded-l-medium': isFirst,\n 'rounded-r-medium': isLast,\n });\n\n // contained: 버튼 사이 divider, outlined: -ml-px로 border 병합\n const dividerClasses = !isOutlined && !isLast ? 'border-r border-border-primary' : '';\n const mergeClasses = isOutlined && !isFirst ? '-ml-px' : '';\n const hoverClasses = isOutlined ? 'relative hover:z-10' : '';\n\n if (iconOnly) {\n const iconBaseProps = {\n className: cn(roundedClasses, dividerClasses, mergeClasses, hoverClasses),\n icon: item.icon!,\n onClick: item.onClick,\n size,\n };\n\n return (\n <ConditionalTooltip key={item.id} tooltip={item.tooltip}>\n {variant === 'contained' ? (\n <IconButton {...iconBaseProps} variant=\"assistive\" />\n ) : (\n <IconButton {...iconBaseProps} color=\"primary\" variant=\"outlined\" />\n )}\n </ConditionalTooltip>\n );\n }\n\n const buttonBaseProps = {\n className: cn(roundedClasses, dividerClasses, mergeClasses, hoverClasses),\n icon: item.icon,\n onClick: item.onClick,\n size,\n };\n\n return (\n <ConditionalTooltip key={item.id} tooltip={item.tooltip}>\n {variant === 'contained' ? (\n <Button {...buttonBaseProps} variant=\"assistive\">\n {item.label}\n </Button>\n ) : (\n <Button {...buttonBaseProps} color=\"primary\" variant=\"outlined\">\n {item.label}\n </Button>\n )}\n </ConditionalTooltip>\n );\n })}\n </div>\n );\n },\n) as ButtonGroupComponent;\n\nButtonGroup.displayName = 'ButtonGroup';\n\nexport { ButtonGroup };\nexport type { ButtonGroupComponent, ButtonGroupItem, ButtonGroupProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { CheckIcon, MinusIcon } from '../icon';\n\ntype CheckboxSize = 'small' | 'medium' | 'large';\n\ntype LabelPosition = 'left' | 'right';\n\ninterface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /** 체크 상태. `'indeterminate'`는 부분 선택을 나타냅니다. */\n checked?: boolean | 'indeterminate';\n /** 체크박스 옆에 표시할 레이블 */\n label?: React.ReactNode;\n /** 추가 클래스명 */\n className?: string;\n /**\n * 체크박스 크기\n * @default 'medium'\n */\n size?: CheckboxSize;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: LabelPosition;\n /** 체크 상태 변경 핸들러 */\n onCheckedChange?: (checked: boolean) => void;\n /** 초기 체크 상태 (비제어) */\n defaultChecked?: boolean;\n /**\n * 비활성화 상태\n * @default false\n */\n disabled?: boolean;\n}\n\ntype CheckboxComponent = React.ForwardRefExoticComponent<\n CheckboxProps & React.RefAttributes<HTMLButtonElement>\n>;\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: {\n small: 'gap-1',\n medium: 'gap-1.5',\n large: 'gap-2',\n },\n labelPosition: {\n right: 'flex-row',\n left: 'flex-row-reverse',\n },\n },\n defaultVariants: {\n size: 'medium',\n labelPosition: 'right',\n },\n});\n\nconst boxVariants = cva(\n 'peer shrink-0 cursor-pointer rounded-weak border border-border-secondary ring-offset-background transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed enabled:data-[state=unchecked]:hover:bg-elevation-elevation-2 disabled:data-[state=unchecked]:bg-elevation-elevation-3 bg-background-primary',\n {\n variants: {\n size: {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-6',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst labelVariants = cva(\n 'cursor-pointer select-none text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: {\n size: {\n small: 'text-body-3',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst iconVariants = cva('text-icon-static-light', {\n variants: {\n size: {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-6',\n },\n disabled: {\n true: 'text-icon-inverse-disabled',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\nconst stateClasses = [\n 'data-[state=checked]:bg-solid-accent-default data-[state=checked]:border-transparent',\n 'data-[state=indeterminate]:bg-solid-accent-default data-[state=indeterminate]:border-transparent',\n 'enabled:data-[state=checked]:hover:bg-solid-accent-hovered enabled:data-[state=indeterminate]:hover:bg-solid-accent-hovered',\n 'enabled:data-[state=checked]:hover:border-transparent enabled:data-[state=indeterminate]:hover:border-transparent',\n 'disabled:data-[state=checked]:bg-solid-accent-disabled disabled:data-[state=indeterminate]:bg-solid-accent-disabled',\n 'disabled:data-[state=checked]:border-transparent disabled:data-[state=indeterminate]:border-transparent',\n];\n\n/**\n * 하나 이상의 항목을 선택하는 체크박스 컴포넌트입니다.\n * 체크, 미체크, indeterminate(부분 선택) 상태를 지원합니다.\n *\n * @example\n * ```tsx\n * // 기본 사용\n * <Checkbox label=\"이용 약관에 동의합니다\" />\n *\n * // 제어 컴포넌트\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} label=\"선택\" />\n *\n * // 부분 선택 상태\n * <Checkbox checked=\"indeterminate\" label=\"전체 선택\" />\n * ```\n *\n * @see {@link CheckboxProps} props 상세\n */\nconst Checkbox = forwardRef<React.ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n (\n {\n className,\n label,\n id,\n size = 'medium',\n labelPosition = 'right',\n checked,\n onCheckedChange,\n disabled = false,\n defaultChecked,\n ...props\n },\n ref,\n ) => {\n const uniqueId = useId();\n const checkboxId = id || uniqueId;\n\n const checkboxState =\n checked === 'indeterminate' ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n\n const checkboxProps: Record<string, unknown> = {\n ...props,\n ref,\n id: checkboxId,\n className: cn(boxVariants({ size }), stateClasses, className),\n onCheckedChange: (state: boolean | 'indeterminate') => {\n onCheckedChange?.(state === 'indeterminate' ? true : !!state);\n },\n 'data-state': checkboxState,\n disabled,\n };\n\n if (checked !== undefined) {\n checkboxProps.checked = checked;\n }\n\n if (defaultChecked !== undefined) {\n checkboxProps.defaultChecked = defaultChecked;\n }\n\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n <CheckboxPrimitive.Root\n {...(checkboxProps as React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>)}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n {checkboxState === 'indeterminate' ? (\n <MinusIcon type=\"regular\" className={cn(iconVariants({ size, disabled }))} />\n ) : checkboxState === 'checked' ? (\n <CheckIcon type=\"regular\" className={cn(iconVariants({ size, disabled }))} />\n ) : null}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label htmlFor={checkboxId} className={cn(labelVariants({ size }))}>\n {label}\n </label>\n )}\n </div>\n );\n },\n) as CheckboxComponent;\n\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\nexport type { CheckboxComponent, CheckboxProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\n\ntype RadioRootProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;\n\ntype RadioItemProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> & {\n /**\n * 라디오 버튼 크기\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /** 라디오 버튼 옆에 표시할 레이블 */\n label?: React.ReactNode;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: 'left' | 'right';\n};\n\ntype RadioComponent = React.ForwardRefExoticComponent<\n RadioRootProps & React.RefAttributes<React.ElementRef<typeof RadioGroupPrimitive.Root>>\n> & {\n Item: React.ForwardRefExoticComponent<\n RadioItemProps & React.RefAttributes<React.ElementRef<typeof RadioGroupPrimitive.Item>>\n >;\n};\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: { small: 'gap-1', medium: 'gap-1.5', large: 'gap-2' },\n labelPosition: { right: 'flex-row', left: 'flex-row-reverse' },\n },\n defaultVariants: { size: 'medium', labelPosition: 'right' },\n});\n\nconst radioVariants = cva(\n 'peer relative shrink-0 rounded-full border border-border-secondary ring-offset-background transition-colors hover:bg-elevation-elevation-2 bg-background-primary',\n {\n variants: { size: { small: 'size-4', medium: 'size-5', large: 'size-6' } },\n defaultVariants: { size: 'medium' },\n },\n);\n\nconst stateClasses = [\n 'disabled:cursor-not-allowed',\n 'disabled:data-[state=unchecked]:bg-elevation-elevation-3',\n];\n\nconst checkedStateClasses = [\n 'data-[state=checked]:border-border-accent',\n 'disabled:data-[state=checked]:border-border-accent-disabled',\n];\n\nconst indicatorVariants = cva(\n 'pointer-events-none block rounded-full bg-icon-accent data-[disabled]:bg-icon-accent-disabled',\n {\n variants: {\n size: { small: 'size-2.5', medium: 'size-3', large: 'size-3.5' },\n },\n defaultVariants: { size: 'medium' },\n },\n);\n\nconst labelVariants = cva(\n 'cursor-pointer select-none text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: { size: { small: 'text-body-3', medium: 'text-body-2', large: 'text-body-1' } },\n defaultVariants: { size: 'medium' },\n },\n);\n\n/**\n * 여러 옵션 중 하나를 선택하는 라디오 그룹 컴포넌트입니다.\n * Compound Component 패턴으로 `Radio.Item`과 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Radio defaultValue=\"a\">\n * <Radio.Item value=\"a\" label=\"옵션 A\" />\n * <Radio.Item value=\"b\" label=\"옵션 B\" />\n * </Radio>\n * ```\n *\n * @see {@link RadioRootProps} 루트 props 상세\n * @see {@link RadioItemProps} 아이템 props 상세\n */\nconst Radio = forwardRef<React.ElementRef<typeof RadioGroupPrimitive.Root>, RadioRootProps>(\n ({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-2', className)} {...props} />\n ),\n) as RadioComponent;\n\nRadio.Item = forwardRef<React.ElementRef<typeof RadioGroupPrimitive.Item>, RadioItemProps>(\n ({ className, size = 'medium', label, labelPosition = 'right', id, disabled, ...props }, ref) => {\n const uniqueId = useId();\n const radioId = id || uniqueId;\n const control = (\n <RadioGroupPrimitive.Item\n ref={ref}\n id={radioId}\n disabled={disabled}\n className={cn(radioVariants({ size }), stateClasses, checkedStateClasses, className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span\n className={cn('block', indicatorVariants({ size }))}\n data-disabled={disabled ? '' : undefined}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n if (!label) {\n return control;\n }\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n {control}\n <label htmlFor={radioId} className={cn(labelVariants({ size }))}>\n {label}\n </label>\n </div>\n );\n },\n) as RadioComponent['Item'];\n\nRadio.displayName = 'Radio';\nRadio.Item.displayName = 'Radio.Item';\n\nexport { Radio };\nexport type { RadioComponent, RadioRootProps, RadioItemProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport type React from 'react';\nimport { forwardRef, useId } from 'react';\n\nconst switchVariants = cva(\n 'peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full disabled:cursor-not-allowed data-[state=checked]:bg-solid-accent-default data-[state=unchecked]:bg-elevation-elevation-4 hover:data-[state=checked]:bg-solid-accent-hovered hover:data-[state=unchecked]:bg-elevation-elevation-5 disabled:data-[state=checked]:bg-solid-accent-disabled disabled:data-[state=unchecked]:bg-elevation-elevation-3 disabled:hover:data-[state=checked]:bg-solid-accent-disabled disabled:hover:data-[state=unchecked]:bg-elevation-elevation-3',\n {\n variants: {\n size: {\n small: 'h-[16px] w-[28px]',\n medium: 'h-[20px] w-[36px]',\n large: 'h-[24px] w-[44px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst switchThumbVariants = cva(\n 'pointer-events-none absolute bg-icon-static-light left-[2px] top-[2px] rounded-full ring-0 data-[state=unchecked]:translate-x-0 data-[disabled]:bg-icon-inverse-disabled',\n {\n variants: {\n size: {\n small: 'size-[12px] data-[state=checked]:translate-x-[12px]',\n medium: 'size-[16px] data-[state=checked]:translate-x-[16px]',\n large: 'size-[20px] data-[state=checked]:translate-x-[20px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst containerVariants = cva('inline-flex items-center', {\n variants: {\n size: {\n small: 'gap-1',\n medium: 'gap-1.5',\n large: 'gap-2',\n },\n labelPosition: {\n right: 'flex-row',\n left: 'flex-row-reverse',\n },\n },\n defaultVariants: {\n size: 'medium',\n labelPosition: 'right',\n },\n});\n\nconst switchLabelVariants = cva(\n 'cursor-pointer select-none font-regular text-text-primary peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled',\n {\n variants: {\n size: {\n small: 'text-body-3',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\ninterface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>,\n VariantProps<typeof switchVariants> {\n /** 스위치 옆에 표시할 레이블 텍스트 */\n label?: string;\n /**\n * 레이블 위치\n * @default 'right'\n */\n labelPosition?: 'left' | 'right';\n}\n\ntype SwitchComponent = React.ForwardRefExoticComponent<\n SwitchProps & React.RefAttributes<HTMLButtonElement>\n>;\n\n/**\n * 켜기/끄기 상태를 전환하는 스위치 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Switch label=\"알림 받기\" size=\"medium\" />\n * <Switch label=\"다크 모드\" labelPosition=\"left\" defaultChecked />\n * ```\n *\n * @see {@link SwitchProps} props 상세\n */\nconst Switch = forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\n ({ className, size = 'medium', label, labelPosition = 'right', id, ...props }, ref) => {\n // 고유한 ID 생성 (접근성을 위해)\n const switchId = useId();\n const finalId = id || switchId;\n\n const switchElement = (\n <SwitchPrimitives.Root\n id={finalId}\n className={cn(switchVariants({ size }), className)}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitives.Root>\n );\n\n if (!label) {\n return switchElement;\n }\n\n return (\n <div className={cn(containerVariants({ size, labelPosition }))}>\n {switchElement}\n <label htmlFor={finalId} className={cn(switchLabelVariants({ size }))}>\n {label}\n </label>\n </div>\n );\n },\n) as SwitchComponent;\n\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\nexport type { SwitchComponent, SwitchProps };\n","import { cn } from '@exem-ui/core/utils';\nimport { type ComponentProps, useState } from 'react';\nimport { type DayButtonProps, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { ChevronLeft, ChevronRight } from '../icon';\n\ntype DistributiveOmit<T, K extends string> = T extends unknown ? Omit<T, K> : never;\n\ntype DatePickerProps = DistributiveOmit<ComponentProps<typeof DayPicker>, 'mode'> & {\n /** 날짜 선택 유형 */\n type?: 'single' | 'range';\n};\n\nfunction DatePickerChevron({ orientation }: { orientation?: string }) {\n if (orientation === 'left') {\n return <ChevronLeft type=\"regular\" className=\"size-5\" />;\n }\n return <ChevronRight type=\"regular\" className=\"size-5\" />;\n}\n\nfunction DatePickerDayButton({\n day,\n modifiers,\n children,\n className,\n ...buttonProps\n}: DayButtonProps) {\n return (\n <button className={cn(className, 'relative')} {...buttonProps}>\n {children}\n {modifiers.today && (\n <span\n className={cn(\n 'absolute bottom-[3px] left-1/2 size-1 -translate-x-1/2 rounded-full',\n modifiers.selected ? 'bg-text-inverse' : 'bg-icon-critical',\n )}\n />\n )}\n </button>\n );\n}\n\nfunction DatePicker({ type = 'single', showOutsideDays = true, ...rest }: DatePickerProps) {\n const dayPickerProps = { ...rest, mode: type } as ComponentProps<typeof DayPicker>;\n const defaultClassNames = getDefaultClassNames();\n const [month, setMonth] = useState(\n dayPickerProps.month ?? dayPickerProps.defaultMonth ?? new Date(),\n );\n\n const rangeSelected =\n type === 'range' ? (rest as { selected?: { from?: Date; to?: Date } }).selected : undefined;\n const isRangeComplete = rangeSelected?.from != null && rangeSelected?.to != null;\n\n const handleMonthChange = (newMonth: Date) => {\n setMonth(newMonth);\n dayPickerProps.onMonthChange?.(newMonth);\n };\n\n const handleDayClick: ComponentProps<typeof DayPicker>['onDayClick'] = (day, modifiers, e) => {\n if (modifiers.outside) {\n setMonth(new Date(day.getFullYear(), day.getMonth()));\n }\n dayPickerProps.onDayClick?.(day, modifiers, e);\n };\n\n return (\n <DayPicker\n {...dayPickerProps}\n month={month}\n onMonthChange={handleMonthChange}\n onDayClick={handleDayClick}\n showOutsideDays={showOutsideDays}\n formatters={{\n formatCaption: (date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n return `${year}년 ${month}월`;\n },\n formatWeekdayName: (date) => date.toLocaleDateString('en-US', { weekday: 'short' }),\n ...dayPickerProps.formatters,\n }}\n components={{\n Chevron: DatePickerChevron,\n DayButton: DatePickerDayButton,\n ...dayPickerProps.components,\n }}\n classNames={{\n root: cn(\n defaultClassNames.root,\n 'rounded-medium border border-border-primary bg-background-overlay p-4 shadow-medium',\n ),\n months: cn(defaultClassNames.months, 'relative'),\n month: cn(defaultClassNames.month, 'flex flex-col gap-2'),\n month_caption: cn(defaultClassNames.month_caption, 'flex h-7 items-center px-0.5'),\n caption_label: 'text-body-2 font-semibold text-text-primary',\n nav: cn(defaultClassNames.nav, 'absolute right-0 top-0 flex h-7 items-center gap-2'),\n button_previous: cn(\n defaultClassNames.button_previous,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n button_next: cn(\n defaultClassNames.button_next,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n weekday: cn(\n defaultClassNames.weekday,\n 'size-8 text-body-3 font-regular text-text-tertiary',\n ),\n month_grid: cn(\n defaultClassNames.month_grid,\n 'border-separate border-spacing-x-0 border-spacing-y-1',\n ),\n week: cn(defaultClassNames.week, 'overflow-hidden rounded-medium'),\n day: cn(defaultClassNames.day, 'size-8 text-body-2 font-medium text-text-secondary'),\n day_button: cn(\n defaultClassNames.day_button,\n 'size-8 cursor-pointer rounded-full hover:border hover:border-border-focused',\n ),\n outside: '!text-text-disabled',\n selected: cn(\n '[&>button]:bg-solid-primary-default',\n '[&>button]:text-text-inverse',\n '[&>button]:border-0',\n '[&>button]:hover:border-0',\n ),\n range_start: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_right,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_end: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_left,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_middle: cn(\n 'bg-elevation-elevation-2 rounded-none',\n '[&>button]:!bg-transparent',\n '[&>button]:!text-text-secondary',\n ),\n ...dayPickerProps.classNames,\n }}\n modifiersClassNames={{\n today: 'rdp-calendar-today',\n ...dayPickerProps.modifiersClassNames,\n }}\n />\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps };\n","import { cn, cva } from '@exem-ui/core/utils';\nimport { overlayListVariants } from '../overlayList/overlayListVariants';\n\nexport const dropdownVariants = {\n content: cn(\n overlayListVariants.content,\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n ),\n\n viewport: overlayListVariants.viewport,\n\n item: (props?: Parameters<typeof overlayListVariants.item>[0]) =>\n cn(overlayListVariants.item(props), 'focus:bg-elevation-elevation-2'),\n\n slotSize: overlayListVariants.slotSize,\n\n separator: cn('my-0.5 h-px bg-border-primary'),\n\n label: cva('px-2 font-medium text-text-secondary', {\n defaultVariants: { size: 'medium' },\n variants: {\n size: {\n xsmall: 'h-6 text-caption leading-6',\n small: 'h-7 text-body-3 leading-7',\n medium: 'h-8 text-body-2 leading-8',\n large: 'h-10 text-body-1 leading-10',\n },\n },\n }),\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport type * as React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport { overlayListVariants } from '../overlayList/overlayListVariants';\nimport { dropdownVariants } from './dropdownVariants';\n\ntype Size = 'xsmall' | 'small' | 'medium' | 'large';\n\ntype DropdownContextValue = {\n size: Size;\n};\n\nconst DropdownContext = createContext<DropdownContextValue>({ size: 'medium' });\n\nconst useDropdownContext = () => useContext(DropdownContext);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\n/** Dropdown 루트 Props */\ntype DropdownRootProps = {\n children?: React.ReactNode;\n /** 드롭다운 아이템 크기 */\n size?: Size;\n} & React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>;\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\n/** Dropdown 트리거 Props */\ntype DropdownTriggerProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>;\n\n// ─── Content ─────────────────────────────────────────────────────────────────\n\n/** Dropdown 콘텐츠 Props */\ntype DropdownContentProps = {\n className?: string;\n children?: React.ReactNode;\n} & Omit<\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>,\n 'className' | 'children'\n>;\n\n// ─── Item ────────────────────────────────────────────────────────────────────\n\n/** Dropdown 아이템 Props */\ntype DropdownItemProps = {\n children?: React.ReactNode;\n /** 아이템 왼쪽에 표시할 슬롯 (아이콘, 이모지, 이미지 등) */\n leftSlot?: React.ReactNode;\n /** 아이템 오른쪽에 표시할 슬롯 (아이콘, 이모지, 이미지 등) */\n rightSlot?: React.ReactNode;\n /** 아이템 크기 (Context 크기 오버라이드) */\n size?: Size;\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>, 'children'>;\n\n// ─── Separator ───────────────────────────────────────────────────────────────\n\n/** Dropdown 구분선 Props */\ntype DropdownSeparatorProps = {\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>, 'className'>;\n\n// ─── Label ───────────────────────────────────────────────────────────────────\n\n/** Dropdown 라벨 Props */\ntype DropdownLabelProps = {\n children?: React.ReactNode;\n size?: Size;\n className?: string;\n} & Omit<\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>,\n 'children' | 'className'\n>;\n\n// ─── Group ───────────────────────────────────────────────────────────────────\n\n/** Dropdown 그룹 Props */\ntype DropdownGroupProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Group>;\n\n// ─── Component Type ──────────────────────────────────────────────────────────\n\ntype DropdownComponent = React.FC<DropdownRootProps> & {\n Trigger: React.ForwardRefExoticComponent<\n DropdownTriggerProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>>\n >;\n Content: React.ForwardRefExoticComponent<\n DropdownContentProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Content>>\n >;\n Item: React.ForwardRefExoticComponent<\n DropdownItemProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Item>>\n >;\n Separator: React.ForwardRefExoticComponent<\n DropdownSeparatorProps &\n React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Separator>>\n >;\n Label: React.ForwardRefExoticComponent<\n DropdownLabelProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Label>>\n >;\n Group: React.ForwardRefExoticComponent<\n DropdownGroupProps & React.RefAttributes<React.ComponentRef<typeof DropdownMenuPrimitive.Group>>\n >;\n};\n\n// ─── Implementation ──────────────────────────────────────────────────────────\n\nconst Dropdown: DropdownComponent = ({ children, size = 'medium', ...props }) => {\n return (\n <DropdownContext.Provider value={{ size }}>\n <DropdownMenuPrimitive.Root {...props}>{children}</DropdownMenuPrimitive.Root>\n </DropdownContext.Provider>\n );\n};\n\nDropdown.Trigger = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>,\n DropdownTriggerProps\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n data-slot=\"dropdown-trigger\"\n className={cn('outline-none', className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Trigger>\n)) as DropdownComponent['Trigger'];\n\nDropdown.Content = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n DropdownContentProps\n>(({ className, children, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-content\"\n sideOffset={sideOffset}\n className={cn(dropdownVariants.content, 'max-h-60', className)}\n {...props}\n >\n <div data-slot=\"dropdown-viewport\" className={dropdownVariants.viewport}>\n {children}\n </div>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n)) as DropdownComponent['Content'];\n\nDropdown.Item = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n DropdownItemProps\n>(({ className, children, leftSlot, rightSlot, size: sizeProp, ...props }, ref) => {\n const { size: contextSize } = useDropdownContext();\n const size = sizeProp ?? contextSize;\n\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-item\"\n className={cn(dropdownVariants.item({ size }), className)}\n {...props}\n >\n {leftSlot && <div className={overlayListVariants.slotSize({ size })}>{leftSlot}</div>}\n <div className={cn(overlayListVariants.itemText({ size }), 'min-w-0 flex-1 truncate')}>\n {children}\n </div>\n {rightSlot && <div className={overlayListVariants.slotSize({ size })}>{rightSlot}</div>}\n </DropdownMenuPrimitive.Item>\n );\n}) as DropdownComponent['Item'];\n\nDropdown.Separator = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n DropdownSeparatorProps\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-separator\"\n className={cn(dropdownVariants.separator, className)}\n {...props}\n />\n)) as DropdownComponent['Separator'];\n\nDropdown.Label = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n DropdownLabelProps\n>(({ className, children, size: sizeProp, ...props }, ref) => {\n const { size: contextSize } = useDropdownContext();\n const size = sizeProp ?? contextSize;\n\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-label\"\n className={cn(dropdownVariants.label({ size }), className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Label>\n );\n}) as DropdownComponent['Label'];\n\nDropdown.Group = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Group>,\n DropdownGroupProps\n>(({ ...props }, ref) => (\n <DropdownMenuPrimitive.Group ref={ref} data-slot=\"dropdown-group\" {...props} />\n)) as DropdownComponent['Group'];\n\nDropdown.displayName = 'Dropdown';\nDropdown.Trigger.displayName = 'Dropdown.Trigger';\nDropdown.Content.displayName = 'Dropdown.Content';\nDropdown.Item.displayName = 'Dropdown.Item';\nDropdown.Separator.displayName = 'Dropdown.Separator';\nDropdown.Label.displayName = 'Dropdown.Label';\nDropdown.Group.displayName = 'Dropdown.Group';\n\nexport { Dropdown };\nexport type {\n DropdownComponent,\n DropdownContentProps,\n DropdownGroupProps,\n DropdownItemProps,\n DropdownLabelProps,\n DropdownRootProps,\n DropdownSeparatorProps,\n DropdownTriggerProps,\n};\n","import { cn, cva } from '@exem-ui/core/utils';\nimport * as React from 'react';\nimport { createContext, useContext, useId } from 'react';\n\nimport { commonInputVariants, type Size, type Variant } from './inputVariants';\n\ntype TextAreaLabelProps = {\n children: React.ReactNode;\n required?: boolean;\n className?: string;\n};\n\ntype TextAreaBottomRightSlot = React.ReactNode;\n\ntype TextAreaFieldProps = Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size' | 'disabled' | 'id' | 'value' | 'onChange' | 'maxLength'\n> & {\n /**\n * Field 우측 하단에 표시할 슬롯입니다.\n * disabled 상태와 별개로 렌더되므로 필요 시 slot 요소에 직접 disabled를 전달하세요.\n * 입력 텍스트와 겹치지 않도록 Field에 우측/하단 padding을 함께 지정하는 것을 권장합니다.\n */\n bottomRightSlot?: TextAreaBottomRightSlot;\n};\n\ntype TextAreaDescriptionProps = {\n children?: React.ReactNode;\n showCounter?: boolean;\n className?: string;\n};\n\ntype TextAreaRootProps = {\n children?: React.ReactNode;\n /**\n * 입력 필드 스타일 유형\n * @default 'fill'\n */\n variant?: Variant;\n size?: Size;\n error?: boolean;\n disabled?: boolean;\n /**\n * TextArea의 기본값. Context를 통해 하위 컴포넌트로 전달됩니다.\n * TextArea.Field에서 value prop이 전달되면 Field의 value가 우선 적용됩니다.\n *\n * 사용 패턴:\n * - 통합 관리: <TextArea value={state}> - Context로 모든 Field에 적용\n * - 개별 제어: <TextArea.Field value={localState}> - 특정 Field만 개별 제어\n */\n value?: string;\n maxLength?: number;\n className?: string;\n} & Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size' | 'disabled' | 'id' | 'className'\n>;\n\ntype TextAreaComponent = React.ForwardRefExoticComponent<\n TextAreaRootProps & React.RefAttributes<HTMLDivElement>\n> & {\n Label: React.ForwardRefExoticComponent<\n TextAreaLabelProps & React.RefAttributes<HTMLLabelElement>\n >;\n Field: React.ForwardRefExoticComponent<\n TextAreaFieldProps & React.RefAttributes<HTMLTextAreaElement>\n >;\n Description: React.ForwardRefExoticComponent<\n TextAreaDescriptionProps & React.RefAttributes<HTMLDivElement>\n >;\n};\n\ntype TextAreaContextType = {\n variant: Variant;\n size: Size;\n error: boolean;\n disabled: boolean;\n id: string;\n value?: string;\n maxLength?: number;\n onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;\n};\n\nconst TextAreaContext = createContext<TextAreaContextType | null>(null);\n\nconst useTextAreaContext = () => {\n const context = useContext(TextAreaContext);\n if (!context) {\n throw new Error('TextArea components must be used within a TextArea');\n }\n return context;\n};\n\nconst textAreaVariants = {\n container: commonInputVariants.container,\n label: commonInputVariants.label,\n\n field: cva(\n 'scrollbar-overlay block w-full resize-none rounded-medium border transition-colors focus:outline-none',\n {\n variants: {\n variant: {\n fill: 'border-transparent bg-elevation-elevation-2',\n line: 'border-border-primary',\n lineBackground: 'border-border-primary bg-background-primary',\n },\n size: {\n xsmall: 'min-h-[60px] px-1.5 py-[3.5px] text-body-3',\n small: 'min-h-[80px] px-2 py-1 text-body-2',\n medium: 'min-h-[100px] px-2.5 py-1.5 text-body-2',\n large: 'min-h-[120px] px-3 py-[9px] text-body-1',\n },\n state: {\n default: 'text-text-primary placeholder:text-text-tertiary',\n focused: 'text-text-primary placeholder:text-text-tertiary',\n error: 'text-text-primary placeholder:text-text-tertiary',\n disabled: 'cursor-not-allowed text-text-disabled placeholder:text-text-disabled',\n },\n },\n compoundVariants: [\n { variant: 'fill', state: 'focused', class: 'border-border-focused' },\n { variant: 'fill', state: 'error', class: 'border-border-critical' },\n {\n variant: 'fill',\n state: 'disabled',\n class: 'bg-elevation-elevation-2 border-transparent',\n },\n { variant: 'line', state: 'focused', class: 'border-border-focused' },\n { variant: 'line', state: 'error', class: 'border-border-critical' },\n { variant: 'line', state: 'disabled', class: 'border-border-primary' },\n { variant: 'lineBackground', state: 'focused', class: 'border-border-focused' },\n { variant: 'lineBackground', state: 'error', class: 'border-border-critical' },\n { variant: 'lineBackground', state: 'disabled', class: 'border-border-primary' },\n ],\n defaultVariants: { variant: 'fill', size: 'medium', state: 'default' },\n },\n ),\n\n fieldWrapper: 'relative w-full',\n\n bottomRightSlot: 'absolute right-0 bottom-0 flex items-center justify-center',\n\n descriptionContainer: cva('flex flex-row items-center justify-between', {\n variants: {\n size: {\n xsmall: 'gap-0.5 text-caption',\n small: 'gap-1 text-body-3',\n medium: 'gap-1 text-body-3',\n large: 'gap-1 text-body-2',\n },\n },\n defaultVariants: { size: 'medium' },\n }),\n\n description: commonInputVariants.description,\n\n counter: cva('text-nowrap font-regular', {\n variants: {\n disabled: {\n true: 'text-gray-04',\n false: 'text-text-tertiary',\n },\n },\n defaultVariants: { disabled: false },\n }),\n};\n\nconst TextArea = React.forwardRef<HTMLDivElement, TextAreaRootProps>(\n (\n {\n children,\n variant = 'fill',\n size = 'medium',\n error = false,\n disabled = false,\n value = '',\n maxLength,\n className,\n ...textAreaProps\n },\n ref,\n ) => {\n const uniqueId = useId();\n const id = `text-area-${uniqueId}`;\n const { onChange, ...restTextAreaProps } = textAreaProps;\n\n return (\n <TextAreaContext.Provider\n value={{ variant, size, error, disabled, id, value, maxLength, onChange }}\n >\n <div ref={ref} className={cn(textAreaVariants.container(), className)}>\n {children || <TextArea.Field {...restTextAreaProps} />}\n </div>\n </TextAreaContext.Provider>\n );\n },\n) as TextAreaComponent;\n\nTextArea.Label = React.forwardRef<HTMLLabelElement, TextAreaLabelProps>(\n ({ children, required = false, className }, ref) => {\n const { size, disabled, id } = useTextAreaContext();\n\n return (\n <label\n ref={ref}\n htmlFor={id}\n className={cn(textAreaVariants.label({ size, disabled, required }), className)}\n >\n {children}\n </label>\n );\n },\n) as TextAreaComponent['Label'];\n\nTextArea.Field = React.forwardRef<HTMLTextAreaElement, TextAreaFieldProps>(\n ({ className, onFocus, onBlur, bottomRightSlot, ...props }, ref) => {\n const {\n variant,\n size,\n error,\n disabled,\n id,\n maxLength,\n value: contextValue,\n onChange: contextOnChange,\n } = useTextAreaContext();\n const [focused, setFocused] = React.useState(false);\n\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const state = disabled ? 'disabled' : error ? 'error' : focused ? 'focused' : 'default';\n\n const isControlled = contextValue !== undefined;\n\n const field = (\n <textarea\n ref={ref}\n id={id}\n disabled={disabled}\n maxLength={maxLength}\n className={cn(textAreaVariants.field({ variant, size, state }), className)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={(e) => {\n contextOnChange?.(e);\n }}\n {...(isControlled ? { value: contextValue } : {})}\n {...props}\n />\n );\n\n if (!bottomRightSlot) {\n return field;\n }\n\n return (\n <div className={textAreaVariants.fieldWrapper}>\n {field}\n <div className={textAreaVariants.bottomRightSlot}>{bottomRightSlot}</div>\n </div>\n );\n },\n) as TextAreaComponent['Field'];\n\nTextArea.Description = React.forwardRef<HTMLDivElement, TextAreaDescriptionProps>(\n ({ children, showCounter = true, className }, ref) => {\n const { size, error, disabled, value = '', maxLength } = useTextAreaContext();\n\n if (!children && (!showCounter || !maxLength)) {\n return null;\n }\n\n return (\n <div ref={ref} className={cn(textAreaVariants.descriptionContainer({ size }), className)}>\n {children && (\n <p className={cn(textAreaVariants.description({ size, error, disabled }), 'flex-1')}>\n {children}\n </p>\n )}\n {showCounter && maxLength && (\n <span className={cn(textAreaVariants.counter({ disabled }))}>\n {value.length}/{maxLength}\n </span>\n )}\n </div>\n );\n },\n) as TextAreaComponent['Description'];\n\nTextArea.displayName = 'TextArea';\nTextArea.Label.displayName = 'TextArea.Label';\nTextArea.Field.displayName = 'TextArea.Field';\nTextArea.Description.displayName = 'TextArea.Description';\n\nexport { TextArea };\nexport type {\n TextAreaComponent,\n TextAreaBottomRightSlot,\n TextAreaRootProps,\n TextAreaLabelProps,\n TextAreaFieldProps,\n TextAreaDescriptionProps,\n};\n","import { cn, cva } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext, useId } from 'react';\nimport { commonInputVariants, type Icon, type Size, type Variant } from './inputVariants';\n\ntype TextFieldContextType = {\n variant: Variant;\n size: Size;\n error: boolean;\n disabled: boolean;\n id: string;\n value?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n};\n\ntype TextFieldRootProps = {\n children?: React.ReactNode;\n /**\n * 입력 필드 스타일 유형\n * @default 'fill'\n */\n variant?: Variant;\n size?: Size;\n error?: boolean;\n disabled?: boolean;\n className?: string;\n value?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n} & Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'disabled' | 'className' | 'value' | 'onChange'\n>;\n\ntype TextFieldLabelProps = {\n children: React.ReactNode;\n required?: boolean;\n className?: string;\n};\n\ntype TextFieldInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'disabled' | 'id' | 'value' | 'onChange'\n> & {\n leftIcon?: Icon;\n rightIcon?: Icon;\n subText?: string;\n};\n\ntype TextFieldDescriptionProps = {\n children: React.ReactNode;\n className?: string;\n};\n\ntype TextFieldComponent = React.ForwardRefExoticComponent<\n TextFieldRootProps & React.RefAttributes<HTMLDivElement>\n> & {\n Label: React.ForwardRefExoticComponent<\n TextFieldLabelProps & React.RefAttributes<HTMLLabelElement>\n >;\n Input: React.ForwardRefExoticComponent<\n TextFieldInputProps & React.RefAttributes<HTMLInputElement>\n >;\n Description: React.ForwardRefExoticComponent<\n TextFieldDescriptionProps & React.RefAttributes<HTMLParagraphElement>\n >;\n};\n\nconst TextFieldContext = createContext<TextFieldContextType | null>(null);\n\nconst useTextFieldContext = () => {\n const context = useContext(TextFieldContext);\n if (!context) {\n throw new Error('TextField components must be used within a TextField');\n }\n return context;\n};\n\nconst textFieldVariants = {\n container: commonInputVariants.container,\n label: commonInputVariants.label,\n\n wrapper: cva(\n 'flex w-full flex-row items-center rounded-medium border transition-colors focus-within:border-border-focused focus-within:outline-none',\n {\n variants: {\n variant: {\n fill: 'border-transparent bg-elevation-elevation-2',\n line: 'border-border-primary',\n lineBackground: 'border-border-primary bg-background-primary',\n },\n size: {\n xsmall: 'h-6 gap-0 px-1',\n small: 'h-7 gap-0.5 px-1.5',\n medium: 'h-8 gap-0.5 px-2',\n large: 'h-10 gap-1 px-2.5',\n },\n state: {\n default: 'text-text-primary',\n error: 'text-text-primary',\n disabled: 'cursor-not-allowed text-text-disabled',\n },\n },\n compoundVariants: [\n { variant: 'fill', state: 'error', class: 'border-border-critical' },\n {\n variant: 'fill',\n state: 'disabled',\n class: 'bg-elevation-elevation-2 border-transparent',\n },\n { variant: 'line', state: 'error', class: 'border-border-critical' },\n { variant: 'line', state: 'disabled', class: 'border-border-primary' },\n { variant: 'lineBackground', state: 'error', class: 'border-border-critical' },\n { variant: 'lineBackground', state: 'disabled', class: 'border-border-primary' },\n ],\n defaultVariants: { variant: 'fill', size: 'medium', state: 'default' },\n },\n ),\n\n input: cva(\n 'w-full border-none bg-transparent p-0 focus:outline-none focus:ring-0 disabled:cursor-not-allowed',\n {\n variants: {\n size: {\n xsmall: 'text-body-3 placeholder:text-body-3',\n small: 'text-body-2 placeholder:text-body-2',\n medium: 'text-body-2 placeholder:text-body-2',\n large: 'text-body-1 placeholder:text-body-1',\n },\n state: {\n default: 'text-text-primary placeholder:text-text-tertiary',\n error: 'text-text-primary placeholder:text-text-tertiary',\n disabled: 'text-text-disabled placeholder:text-text-disabled',\n },\n },\n defaultVariants: { size: 'medium', state: 'default' },\n },\n ),\n\n description: cva('mt-0.5 font-regular text-text-tertiary', {\n variants: {\n size: {\n xsmall: 'text-caption',\n small: 'text-body-3',\n medium: 'text-body-3',\n large: 'text-body-2',\n },\n error: {\n true: 'text-text-critical',\n false: '',\n },\n disabled: {\n true: 'text-text-disabled',\n false: '',\n },\n },\n compoundVariants: [\n {\n disabled: true,\n error: true,\n class: 'text-text-disabled', // disabled가 error보다 우선\n },\n ],\n defaultVariants: { size: 'medium', error: false, disabled: false },\n }),\n\n subText: cva('ml-1 shrink-0 font-regular', {\n variants: {\n size: {\n xsmall: 'text-body-3',\n small: 'text-body-2',\n medium: 'text-body-2',\n large: 'text-body-1',\n },\n disabled: {\n true: 'text-text-disabled',\n false: 'text-text-tertiary',\n },\n },\n defaultVariants: { size: 'medium', disabled: false },\n }),\n\n icon: cva('shrink-0 text-icon-tertiary', {\n variants: {\n size: {\n xsmall: 'size-4',\n small: 'size-4',\n medium: 'size-4',\n large: 'size-5',\n },\n },\n defaultVariants: { size: 'medium' },\n }),\n};\n\nconst TextField = forwardRef<HTMLDivElement, TextFieldRootProps>(\n (\n {\n children,\n variant = 'fill',\n size = 'medium',\n error = false,\n disabled = false,\n className,\n id: providedId,\n value,\n onChange,\n ...inputProps\n },\n ref,\n ) => {\n const uniqueId = useId();\n const id = providedId || `text-field-${uniqueId}`;\n\n return (\n <TextFieldContext.Provider value={{ variant, size, error, disabled, id, value, onChange }}>\n <div ref={ref} className={cn(textFieldVariants.container(), className)}>\n {children || <TextField.Input {...inputProps} />}\n </div>\n </TextFieldContext.Provider>\n );\n },\n) as TextFieldComponent;\n\nTextField.Label = forwardRef<HTMLLabelElement, TextFieldLabelProps>(\n ({ children, required = false, className }, ref) => {\n const { size, disabled, id } = useTextFieldContext();\n\n return (\n <label\n ref={ref}\n htmlFor={id}\n className={cn(textFieldVariants.label({ size, disabled, required }), className)}\n >\n {children}\n </label>\n );\n },\n) as TextFieldComponent['Label'];\n\nTextField.Input = forwardRef<HTMLInputElement, TextFieldInputProps>(\n ({ className, leftIcon, rightIcon, subText, ...props }, ref) => {\n const {\n variant,\n size,\n error,\n disabled,\n id,\n value: contextValue,\n onChange: contextOnChange,\n } = useTextFieldContext();\n const state = disabled ? 'disabled' : error ? 'error' : 'default';\n const isControlled = contextValue !== undefined;\n\n return (\n <div className={cn(textFieldVariants.wrapper({ variant, size, state }), className)}>\n {leftIcon && (\n <span\n className={cn('flex items-center justify-center', textFieldVariants.icon({ size }))}\n >\n {leftIcon}\n </span>\n )}\n\n <div className=\"flex flex-1 flex-row items-center justify-center\">\n <input\n ref={ref}\n id={id}\n disabled={disabled}\n className={cn(textFieldVariants.input({ size, state }))}\n onChange={(e) => {\n contextOnChange?.(e);\n }}\n {...props}\n {...(isControlled ? { value: contextValue } : {})}\n />\n {subText && (\n <span className={cn(textFieldVariants.subText({ size, disabled }))}>{subText}</span>\n )}\n </div>\n\n {rightIcon && (\n <span\n className={cn('flex items-center justify-center', textFieldVariants.icon({ size }))}\n >\n {rightIcon}\n </span>\n )}\n </div>\n );\n },\n) as TextFieldComponent['Input'];\n\nTextField.Description = forwardRef<HTMLParagraphElement, TextFieldDescriptionProps>(\n ({ children, className }, ref) => {\n const { size, error, disabled } = useTextFieldContext();\n\n return (\n <p\n ref={ref}\n className={cn(textFieldVariants.description({ size, error, disabled }), className)}\n >\n {children}\n </p>\n );\n },\n) as TextFieldComponent['Description'];\n\nTextField.displayName = 'TextField';\nTextField.Label.displayName = 'TextField.Label';\nTextField.Input.displayName = 'TextField.Input';\nTextField.Description.displayName = 'TextField.Description';\n\nexport { TextField };\nexport type {\n TextFieldComponent,\n TextFieldRootProps,\n TextFieldLabelProps,\n TextFieldInputProps,\n TextFieldDescriptionProps,\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport type React from 'react';\n\ninterface ScrollAreaProps extends React.ComponentProps<typeof ScrollAreaPrimitive.Root> {\n /** 스크롤 뷰포트의 ref. 스크롤 위치 제어 시 사용합니다. */\n scrollRef?: React.ComponentProps<typeof ScrollAreaPrimitive.Viewport>['ref'];\n /** 세로 스크롤바 숨김 여부 */\n hideVerticalScrollbar?: boolean;\n /** 가로 스크롤바 숨김 여부 */\n hideHorizontalScrollbar?: boolean;\n /** 가로 스크롤 비활성화 (overflow-x: hidden) */\n disableHorizontalScroll?: boolean;\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-opacity',\n orientation === 'vertical' &&\n 'w-[10px] p-[2px] opacity-0 duration-300 ease-out group-hover:opacity-100',\n orientation === 'horizontal' && 'h-[10px] flex-col px-[3px] py-[2px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-component-scroll\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\n/**\n * 커스텀 스크롤바를 제공하는 스크롤 영역 컴포넌트입니다.\n * 마우스 호버 시 스크롤바가 나타나는 UX를 제공합니다.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-[300px]\">\n * <div>스크롤 가능한 콘텐츠</div>\n * </ScrollArea>\n * ```\n *\n * @see {@link ScrollAreaProps} props 상세\n */\nfunction ScrollArea({\n className,\n children,\n onScroll,\n scrollRef,\n hideVerticalScrollbar = false,\n hideHorizontalScrollbar = false,\n disableHorizontalScroll = false,\n ...props\n}: ScrollAreaProps) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn('group relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n ref={scrollRef}\n onScroll={onScroll}\n className={cn(\n 'size-full rounded-[inherit]',\n disableHorizontalScroll && '!overflow-x-hidden',\n )}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {!hideVerticalScrollbar && <ScrollBar orientation=\"vertical\" forceMount />}\n {!(hideHorizontalScrollbar || disableHorizontalScroll) && (\n <ScrollBar orientation=\"horizontal\" forceMount />\n )}\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nexport { ScrollArea, ScrollBar };\nexport type { ScrollAreaProps };\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport type { ButtonProps } from '../button/Button';\nimport { Button } from '../button/Button';\nimport { XIcon } from '../icon';\nimport { ScrollArea } from '../scrollArea/ScrollArea';\n\ntype ModalSize = 'default' | 'fullsize';\n\ntype ModalRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype ModalTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype ModalPortalProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>;\n\ntype ModalOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\ntype ModalContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * 모달 크기\n * @default 'default'\n */\n size?: ModalSize;\n};\n\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>;\ntype InteractOutsideEvent = Parameters<NonNullable<DialogContentProps['onInteractOutside']>>[0];\n\ntype ModalCloseProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype ModalHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 하단 구분선 표시 여부\n * @default false\n */\n line?: boolean;\n /**\n * 헤더 오른쪽 끝 영역에 렌더링할 콘텐츠\n * - `undefined` (미전달): 기본 닫기(X) 아이콘 렌더링\n * - `null`: 닫기 버튼 없이 빈 영역 (기존 `showCloseIcon={false}` 대응)\n * - `ReactNode`: 전달된 콘텐츠로 대체 (닫기 동작이 필요하면 `Modal.Close`를 직접 포함)\n */\n rightSlot?: React.ReactNode;\n};\n\ntype ModalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype ModalFooterProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 상단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n};\n\ntype ModalFooterDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n /** 에러 상태 표시 여부 */\n error?: boolean;\n /** 설명 앞에 표시할 아이콘 요소 */\n icon?: React.ReactNode;\n};\n\ntype ModalActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype ModalActionProps = Omit<ButtonProps, 'color' | 'variant' | 'background'> & {\n /**\n * 버튼 색상\n * @default 'primary'\n */\n color?: 'primary' | 'critical';\n};\n\ntype ModalTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype ModalDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\ntype ModalComponent = typeof DialogPrimitive.Root & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalTriggerProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Trigger>>\n >;\n Portal: React.FC<ModalPortalProps>;\n Close: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalCloseProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Overlay: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalOverlayProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Overlay>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalContentProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Content>>\n >;\n Header: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalHeaderProps> & React.RefAttributes<HTMLDivElement>\n >;\n Body: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalBodyProps> & React.RefAttributes<HTMLDivElement>\n >;\n Footer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalFooterProps> & React.RefAttributes<HTMLDivElement>\n >;\n FooterDescription: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalFooterDescriptionProps> & React.RefAttributes<HTMLDivElement>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Action: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalActionProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalTitleProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ModalDescriptionProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Description>>\n >;\n};\n\nconst MODAL_PADDING = {\n body: 'px-4 pb-4',\n footer: 'px-4 py-3',\n};\n\nconst ModalContext = createContext<{ size: ModalSize }>({ size: 'default' });\n\n/**\n * 사용자 인터랙션이 필요한 오버레이 다이얼로그 컴포넌트입니다.\n * Compound Component 패턴으로 하위 컴포넌트와 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Modal>\n * <Modal.Trigger>열기</Modal.Trigger>\n * <Modal.Content>\n * <Modal.Header>\n * <Modal.Title>제목</Modal.Title>\n * </Modal.Header>\n * <Modal.Body>내용</Modal.Body>\n * <Modal.Footer>\n * <Modal.Actions>\n * <Modal.Close>닫기</Modal.Close>\n * </Modal.Actions>\n * </Modal.Footer>\n * </Modal.Content>\n * </Modal>\n * ```\n *\n * @see {@link ModalContentProps} Content props 상세\n */\nconst ModalRoot: React.FC<ModalRootProps> = (props) => <DialogPrimitive.Root {...props} />;\n\nconst Modal = ModalRoot as ModalComponent;\n\nModal.Trigger = forwardRef<React.ElementRef<typeof DialogPrimitive.Trigger>, ModalTriggerProps>(\n (props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />,\n);\n\nModal.Portal = (props: ModalPortalProps) => <DialogPrimitive.Portal {...props} />;\n\nModal.Close = forwardRef<HTMLButtonElement, ModalCloseProps>(({ size, ...props }, ref) => {\n const { size: modalSize } = useContext(ModalContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n {...props}\n ref={ref}\n variant=\"assistive\"\n size={size ?? (modalSize === 'fullsize' ? 'large' : 'medium')}\n />\n </DialogPrimitive.Close>\n );\n}) as ModalComponent['Close'];\n\nModal.Overlay = forwardRef<React.ComponentRef<typeof DialogPrimitive.Overlay>, ModalOverlayProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Overlay'];\n\nModal.Content = forwardRef<React.ComponentRef<typeof DialogPrimitive.Content>, ModalContentProps>(\n ({ className, children, size = 'default', onInteractOutside, onFocusOutside, ...props }, ref) => {\n const isFullSize = size === 'fullsize';\n\n const shouldPreventDismissForSelect = (target: EventTarget | null) => {\n const isSelectOpen = Boolean(\n document.querySelector('[data-radix-select-content][data-state=\"open\"]'),\n );\n if (isSelectOpen) {\n return true;\n }\n\n if (!(target instanceof Element)) {\n return false;\n }\n\n return Boolean(\n target.closest('[data-radix-select-content]') ||\n target.closest('[data-radix-select-viewport]'),\n );\n };\n\n const handleInteractOutside = (event: InteractOutsideEvent) => {\n // Select가 열려있는 경우: Modal 닫힘 방지\n if (shouldPreventDismissForSelect(event.target)) {\n event.preventDefault();\n }\n\n onInteractOutside?.(event);\n };\n\n return (\n <ModalContext.Provider value={{ size }}>\n <Modal.Portal>\n <Modal.Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n // 공통 스타일\n 'fixed z-50 flex flex-col rounded-strong border border-border-primary bg-background-primary duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n // fullsize일 때\n isFullSize\n ? 'inset-0 m-10'\n : // 일반 모달일 때\n 'left-[50%] top-[50%] max-w-[calc(100vw-32px)] max-h-[calc(100vh-80px)] w-[800px] h-[560px] translate-x-[-50%] translate-y-[-50%] shadow-strong data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n onInteractOutside={handleInteractOutside}\n >\n {children}\n </DialogPrimitive.Content>\n </Modal.Portal>\n </ModalContext.Provider>\n );\n },\n) as ModalComponent['Content'];\n\nModal.Header = forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, line = false, rightSlot, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex shrink-0 flex-row items-center gap-2 pl-4 pr-2 min-h-12',\n line && 'border-b border-border-primary',\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-row items-center gap-1\">{children}</div>\n {rightSlot === undefined ? (\n <DialogPrimitive.Close\n className={cn(\n 'flex shrink-0 items-center justify-center size-8 rounded-medium text-icon-secondary transition-colors hover:bg-elevation-elevation-2 focus:outline-none disabled:pointer-events-none',\n )}\n >\n <XIcon type=\"regular\" size={20} />\n </DialogPrimitive.Close>\n ) : (\n rightSlot\n )}\n </div>\n ),\n) as ModalComponent['Header'];\n\nModal.Body = forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex-1 flex flex-col min-h-0 h-full',\n '[&_[data-slot=scroll-area-viewport]>div]:h-full',\n )}\n {...props}\n >\n <ScrollArea className=\"h-full flex flex-col\">\n <div className={cn(MODAL_PADDING.body, className)}>{children}</div>\n </ScrollArea>\n </div>\n ),\n) as ModalComponent['Body'];\n\nModal.Footer = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, line = true, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center justify-between min-h-14 gap-3',\n line && 'border-t border-border-primary',\n MODAL_PADDING.footer,\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Footer'];\n\nModal.FooterDescription = forwardRef<HTMLDivElement, ModalFooterDescriptionProps>(\n ({ className, error = false, icon, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center gap-1 text-body-3',\n error ? 'text-text-critical' : 'text-text-tertiary',\n className,\n )}\n {...props}\n >\n {icon && (\n <span className=\"flex shrink-0 size-4 items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n {children}\n </div>\n ),\n) as ModalComponent['FooterDescription'];\n\nModal.Actions = forwardRef<HTMLDivElement, ModalActionsProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('ml-auto flex flex-row items-center gap-2', className)} {...props} />\n)) as ModalComponent['Actions'];\n\nModal.Action = forwardRef<HTMLButtonElement, ModalActionProps>(\n ({ color = 'primary', size, ...props }, ref) => {\n const { size: modalSize } = useContext(ModalContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n {...props}\n ref={ref}\n color={color}\n variant=\"solid\"\n size={size ?? (modalSize === 'fullsize' ? 'large' : 'medium')}\n />\n </DialogPrimitive.Close>\n );\n },\n) as ModalComponent['Action'];\n\nModal.Title = forwardRef<React.ComponentRef<typeof DialogPrimitive.Title>, ModalTitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-body-1 font-semibold leading-none tracking-tight text-text-primary',\n className,\n )}\n {...props}\n />\n ),\n) as ModalComponent['Title'];\n\nModal.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n ModalDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-body-2 text-text-tertiary', className)}\n {...props}\n />\n)) as ModalComponent['Description'];\n\nModal.displayName = 'Modal';\nModal.Trigger.displayName = 'Modal.Trigger';\nModal.Portal.displayName = 'Modal.Portal';\nModal.Close.displayName = 'Modal.Close';\nModal.Overlay.displayName = 'Modal.Overlay';\nModal.Content.displayName = 'Modal.Content';\nModal.Header.displayName = 'Modal.Header';\nModal.Body.displayName = 'Modal.Body';\nModal.Footer.displayName = 'Modal.Footer';\nModal.FooterDescription.displayName = 'Modal.FooterDescription';\nModal.Actions.displayName = 'Modal.Actions';\nModal.Action.displayName = 'Modal.Action';\nModal.Title.displayName = 'Modal.Title';\nModal.Description.displayName = 'Modal.Description';\n\nexport { Modal };\nexport type {\n ModalComponent,\n ModalRootProps,\n ModalTriggerProps,\n ModalPortalProps,\n ModalOverlayProps,\n ModalContentProps,\n ModalCloseProps,\n ModalHeaderProps,\n ModalBodyProps,\n ModalFooterProps,\n ModalFooterDescriptionProps,\n ModalActionsProps,\n ModalActionProps,\n ModalTitleProps,\n ModalDescriptionProps,\n};\n","import type { SheetSide } from './Sheet';\n\nexport type SheetAxis = 'horizontal' | 'vertical';\n\nexport const SHEET_EDGE_GAP = '[--sheet-edge-gap:40px]';\n\nexport const getAxis = (side: SheetSide): SheetAxis =>\n side === 'left' || side === 'right' ? 'horizontal' : 'vertical';\n\nexport const getDefaults = (\n axis: SheetAxis,\n): { minSize: number; maxSize: number | string; defaultSize: number } =>\n axis === 'horizontal'\n ? { minSize: 400, maxSize: '80%', defaultSize: 800 }\n : { minSize: 300, maxSize: '80%', defaultSize: 600 };\n\n// re-resizable의 maxWidth/maxHeight prop 값.\n// '%'는 vw/vh로 매핑 → inline max-width가 뷰포트에 반응(창 축소 시 박스도 축소,\n// stale px·!important·resize 리스너 불필요). 그 외(px number/string)는 그대로 전달.\nexport const resolveMaxSize = (maxSize: number | string, axis: SheetAxis): number | string => {\n if (typeof maxSize === 'number') {\n return maxSize;\n }\n const value = Number.parseFloat(maxSize);\n if (maxSize.trim().endsWith('%') && Number.isFinite(value)) {\n return `${value}${axis === 'horizontal' ? 'vw' : 'vh'}`;\n }\n return maxSize;\n};\n\nconst STORAGE_PREFIX = 'exem-ui:sheet-size:';\n\nexport const readStoredSize = (key: string): number | null => {\n if (typeof window === 'undefined') {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(STORAGE_PREFIX + key);\n if (raw == null) {\n return null;\n }\n const value = Number.parseFloat(raw);\n return Number.isFinite(value) ? value : null;\n } catch {\n return null;\n }\n};\n\nexport const writeStoredSize = (key: string, size: number): void => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(STORAGE_PREFIX + key, String(size));\n } catch {\n // best-effort\n }\n};\n","import { cn } from '@exem-ui/core/utils';\nimport { type Enable, type HandleComponent, Resizable } from 're-resizable';\nimport type React from 'react';\nimport { useState } from 'react';\nimport type { SheetSide } from './Sheet';\nimport {\n getAxis,\n getDefaults,\n readStoredSize,\n resolveMaxSize,\n type SheetAxis,\n writeStoredSize,\n} from './sheetResize';\n\nexport type SheetResizeOptions = {\n /** @default true (객체를 전달한 경우) */\n use?: boolean;\n /** 최소 크기(px). 기본: left/right 400, top/bottom 300 */\n minSize?: number;\n /** 최대 크기(px 또는 '80%'). 퍼센트는 뷰포트 기준. @default '80%' */\n maxSize?: number | string;\n /** 기본 크기(px). 기본: left/right 800, top/bottom 600 */\n defaultSize?: number;\n /** 지정 시 localStorage에 크기를 저장/복원 */\n storageKey?: string;\n /** 드래그 종료 시 최종 크기(px) 콜백 */\n onResize?: (size: number) => void;\n};\n\nconst ENABLE_BY_SIDE: Record<SheetSide, Enable> = {\n right: { left: true },\n left: { right: true },\n top: { bottom: true },\n bottom: { top: true },\n};\n\nconst HANDLE_EDGE_BY_SIDE: Record<SheetSide, 'left' | 'right' | 'top' | 'bottom'> = {\n right: 'left',\n left: 'right',\n top: 'bottom',\n bottom: 'top',\n};\n\nconst SheetResizeHandle: React.FC<{ axis: SheetAxis; active: boolean }> = ({ axis, active }) => (\n <div\n className={cn(\n 'group/sheet-handle flex h-full w-full items-center justify-center',\n axis === 'horizontal' ? 'cursor-col-resize' : 'cursor-row-resize',\n )}\n >\n <span\n className={cn(\n 'transition-colors group-hover/sheet-handle:bg-border-accent',\n active ? 'bg-border-accent' : 'bg-border-primary',\n axis === 'horizontal' ? 'h-full w-px' : 'h-px w-full',\n )}\n />\n </div>\n);\n\ntype SheetResizableBoxProps = {\n side: SheetSide;\n options: SheetResizeOptions;\n children: React.ReactNode;\n};\n\n// Sheet.Content(Radix) 내부에서 실제 크기를 갖는 박스. fixed인 부모 Content가 이 크기에 shrink-wrap된다.\nconst SheetResizableBox: React.FC<SheetResizableBoxProps> = ({ side, options, children }) => {\n const { minSize, maxSize, defaultSize, storageKey, onResize } = options;\n const axis = getAxis(side);\n const isHorizontal = axis === 'horizontal';\n const defaults = getDefaults(axis);\n const resolvedMin = minSize ?? defaults.minSize;\n const resolvedMax = resolveMaxSize(maxSize ?? defaults.maxSize, axis); // re-resizable prop(vw/vh|px)\n\n const [initialSize] = useState(() => {\n const stored = storageKey ? readStoredSize(storageKey) : null;\n // max는 re-resizable의 inline max-width(CSS)가 렌더에서 캡하므로 여기선 min만 보장.\n return Math.max(stored ?? defaultSize ?? defaults.defaultSize, resolvedMin);\n });\n const [resizing, setResizing] = useState(false);\n\n const handleResizeStop: NonNullable<React.ComponentProps<typeof Resizable>['onResizeStop']> = (\n _event,\n _direction,\n refElement,\n ) => {\n setResizing(false);\n const next = isHorizontal ? refElement.offsetWidth : refElement.offsetHeight;\n if (storageKey) {\n writeStoredSize(storageKey, next);\n }\n onResize?.(next);\n };\n\n const handleComponent: HandleComponent = {\n [HANDLE_EDGE_BY_SIDE[side]]: <SheetResizeHandle axis={axis} active={resizing} />,\n };\n\n return (\n <Resizable\n enable={ENABLE_BY_SIDE[side]}\n defaultSize={\n isHorizontal\n ? { width: initialSize, height: '100%' }\n : { width: '100%', height: initialSize }\n }\n minWidth={isHorizontal ? resolvedMin : undefined}\n maxWidth={isHorizontal ? resolvedMax : undefined}\n minHeight={isHorizontal ? undefined : resolvedMin}\n maxHeight={isHorizontal ? undefined : resolvedMax}\n onResizeStart={() => setResizing(true)}\n onResizeStop={handleResizeStop}\n handleComponent={handleComponent}\n className=\"flex min-h-0 flex-col bg-background-primary shadow-strong\"\n >\n {children}\n </Resizable>\n );\n};\n\nexport { SheetResizableBox };\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport { XIcon } from '../icon';\nimport { ScrollArea } from '../scrollArea/ScrollArea';\nimport { SheetResizableBox, type SheetResizeOptions } from './SheetResizable';\nimport { SHEET_EDGE_GAP } from './sheetResize';\n\ntype SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\ntype SheetRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype SheetTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype SheetPortalProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>;\n\ntype SheetOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\ntype SheetContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * Sheet가 열리는 방향\n * @default 'right'\n */\n side?: SheetSide;\n /**\n * 드래그 리사이징. `true` 또는 옵션 객체로 활성화.\n * @default false\n */\n resizable?: boolean | SheetResizeOptions;\n};\n\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>;\ntype InteractOutsideEvent = Parameters<NonNullable<DialogContentProps['onInteractOutside']>>[0];\n\ntype SheetCloseProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>;\n\ntype SheetHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 하단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n /**\n * 헤더 우측 영역(rightSlot).\n * - 미지정(`undefined`): 기본 닫기(X) 버튼을 렌더링하며 클릭 시 Sheet를 닫는다.\n * - `null` / `false`: 우측 영역을 숨긴다.\n * - ReactNode: 전달한 노드를 그대로 렌더링한다. 닫기 동작이 필요하면 `Sheet.Close`로 감싼다.\n */\n rightSlot?: React.ReactNode;\n};\n\ntype SheetBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype SheetFooterProps = React.HTMLAttributes<HTMLDivElement> & {\n /**\n * 상단 구분선 표시 여부\n * @default true\n */\n line?: boolean;\n};\n\ntype SheetFooterDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n /** 에러 상태 표시 여부 */\n error?: boolean;\n /** 설명 앞에 표시할 아이콘 요소 */\n icon?: React.ReactNode;\n};\n\ntype SheetActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype SheetTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype SheetDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\ntype SheetComponent = typeof DialogPrimitive.Root & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetTriggerProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Trigger>>\n >;\n Portal: React.FC<SheetPortalProps>;\n Close: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetCloseProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Close>>\n >;\n Overlay: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetOverlayProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Overlay>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetContentProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Content>>\n >;\n Header: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetHeaderProps> & React.RefAttributes<HTMLDivElement>\n >;\n Body: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetBodyProps> & React.RefAttributes<HTMLDivElement>\n >;\n Footer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetFooterProps> & React.RefAttributes<HTMLDivElement>\n >;\n FooterDescription: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetFooterDescriptionProps> & React.RefAttributes<HTMLDivElement>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetTitleProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<SheetDescriptionProps> &\n React.RefAttributes<React.ComponentRef<typeof DialogPrimitive.Description>>\n >;\n};\n\nconst SHEET_CONTENT_BASE =\n 'fixed z-50 data-[state=open]:duration-300 data-[state=closed]:duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0';\nconst SHEET_CONTENT_BOX = 'flex flex-col border-border-primary bg-background-primary shadow-strong';\n\nconst SHEET_SIDE_CLASSES: Record<SheetSide, string> = {\n right:\n 'inset-y-0 right-0 h-full w-[800px] max-w-[calc(100vw-var(--sheet-edge-gap))] border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n left: 'inset-y-0 left-0 h-full w-[800px] max-w-[calc(100vw-var(--sheet-edge-gap))] border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n top: 'inset-x-0 top-0 w-full h-auto max-h-[calc(100vh-var(--sheet-edge-gap))] border-b data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 w-full h-auto max-h-[calc(100vh-var(--sheet-edge-gap))] border-t data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n};\n\n// 리사이즈 시: Content는 크기·box 없이 위치/슬라이드/max(안전망)만 (자식 박스에 shrink-wrap).\nconst SHEET_RESIZE_SIDE_CLASSES: Record<SheetSide, string> = {\n right:\n 'inset-y-0 right-0 max-w-[calc(100vw-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n left: 'inset-y-0 left-0 max-w-[calc(100vw-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n top: 'inset-x-0 top-0 max-h-[calc(100vh-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 max-h-[calc(100vh-var(--sheet-edge-gap))] data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n};\n\nconst SheetContext = createContext<{ side: SheetSide }>({ side: 'right' });\n\n/**\n * 화면 가장자리에서 슬라이드되어 열리는 패널 컴포넌트입니다.\n * Radix UI Dialog 기반이며 Compound Component 패턴으로 사용합니다.\n *\n * @example\n * ```tsx\n * <Sheet>\n * <Sheet.Trigger>열기</Sheet.Trigger>\n * <Sheet.Content side=\"right\">\n * <Sheet.Header>\n * <Sheet.Title>제목</Sheet.Title>\n * </Sheet.Header>\n * <Sheet.Body>내용</Sheet.Body>\n * <Sheet.Footer>\n * <Sheet.Actions>\n * <Sheet.Close>닫기</Sheet.Close>\n * <Button>확인</Button>\n * </Sheet.Actions>\n * </Sheet.Footer>\n * </Sheet.Content>\n * </Sheet>\n * ```\n *\n * @see {@link SheetContentProps} Content props 상세\n */\nconst SheetRoot: React.FC<SheetRootProps> = (props) => <DialogPrimitive.Root {...props} />;\n\nconst Sheet = SheetRoot as SheetComponent;\n\nSheet.Trigger = forwardRef<React.ComponentRef<typeof DialogPrimitive.Trigger>, SheetTriggerProps>(\n (props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />,\n);\n\nSheet.Portal = (props: SheetPortalProps) => <DialogPrimitive.Portal {...props} />;\n\nSheet.Close = forwardRef<React.ComponentRef<typeof DialogPrimitive.Close>, SheetCloseProps>(\n (props, ref) => <DialogPrimitive.Close ref={ref} {...props} />,\n);\n\nSheet.Overlay = forwardRef<React.ComponentRef<typeof DialogPrimitive.Overlay>, SheetOverlayProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.Content = forwardRef<React.ComponentRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n (\n { className, children, side = 'right', resizable = false, onInteractOutside, ...props },\n ref,\n ) => {\n const resizeOptions: SheetResizeOptions =\n typeof resizable === 'object' ? resizable : { use: resizable };\n const isResizable = resizeOptions.use ?? true;\n\n const shouldPreventDismissForSelect = (target: EventTarget | null) => {\n const isSelectOpen = Boolean(\n document.querySelector('[data-radix-select-content][data-state=\"open\"]'),\n );\n if (isSelectOpen) {\n return true;\n }\n\n if (!(target instanceof Element)) {\n return false;\n }\n\n return Boolean(\n target.closest('[data-radix-select-content]') ||\n target.closest('[data-radix-select-viewport]'),\n );\n };\n\n const handleInteractOutside = (event: InteractOutsideEvent) => {\n // Select가 열려있는 경우: Sheet 닫힘 방지\n if (shouldPreventDismissForSelect(event.target)) {\n event.preventDefault();\n }\n\n onInteractOutside?.(event);\n };\n\n return (\n <SheetContext.Provider value={{ side }}>\n <Sheet.Portal>\n <Sheet.Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n SHEET_CONTENT_BASE,\n SHEET_EDGE_GAP,\n isResizable\n ? SHEET_RESIZE_SIDE_CLASSES[side]\n : cn(SHEET_CONTENT_BOX, SHEET_SIDE_CLASSES[side]),\n className,\n )}\n {...props}\n onInteractOutside={handleInteractOutside}\n >\n {isResizable ? (\n <SheetResizableBox side={side} options={resizeOptions}>\n {children}\n </SheetResizableBox>\n ) : (\n children\n )}\n </DialogPrimitive.Content>\n </Sheet.Portal>\n </SheetContext.Provider>\n );\n },\n);\n\nSheet.Header = forwardRef<HTMLDivElement, SheetHeaderProps>(\n ({ className, line = true, rightSlot, children, ...props }, ref) => {\n // 미지정 시 기본 닫기(X) 버튼. null/false면 우측 영역을 숨기고, 노드가 오면 그대로 렌더링한다.\n const rightElement =\n rightSlot === undefined ? (\n <DialogPrimitive.Close\n className={cn(\n 'flex shrink-0 items-center justify-center size-8 rounded-medium text-icon-secondary transition-colors hover:bg-elevation-elevation-2 focus:outline-none disabled:pointer-events-none',\n )}\n >\n <XIcon type=\"regular\" size={20} />\n </DialogPrimitive.Close>\n ) : (\n rightSlot\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex shrink-0 flex-row items-center gap-2 h-12 pl-4 pr-2',\n line && 'border-b border-border-primary',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 flex-row items-center gap-1\">{children}</div>\n {rightElement ? (\n <div className=\"flex shrink-0 flex-row items-center\">{rightElement}</div>\n ) : null}\n </div>\n );\n },\n);\n\nSheet.Body = forwardRef<HTMLDivElement, SheetBodyProps>(\n ({ className, children, ...props }, ref) => {\n const { side } = useContext(SheetContext);\n // 좌/우 Sheet는 폭이 고정이므로, 콘텐츠가 넘쳐도 가로 스크롤을 만들지 않고 영역 안에 가둔다.\n const disableHorizontalScroll = side === 'left' || side === 'right';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex-1 flex flex-col min-h-0 h-full',\n '[&_[data-slot=scroll-area-viewport]>div]:h-full',\n )}\n {...props}\n >\n <ScrollArea\n className=\"h-full flex flex-col\"\n disableHorizontalScroll={disableHorizontalScroll}\n >\n <div className={cn('p-4', className)}>{children}</div>\n </ScrollArea>\n </div>\n );\n },\n);\n\nSheet.Footer = forwardRef<HTMLDivElement, SheetFooterProps>(\n ({ className, line = true, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center justify-between h-14 gap-3 px-4 py-3',\n line && 'border-t border-border-primary',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.FooterDescription = forwardRef<HTMLDivElement, SheetFooterDescriptionProps>(\n ({ className, error = false, icon, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-row items-center gap-1 text-body-3',\n error ? 'text-text-critical' : 'text-text-tertiary',\n className,\n )}\n {...props}\n >\n {icon && (\n <span className=\"flex shrink-0 size-4 items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n {children}\n </div>\n ),\n);\n\nSheet.Actions = forwardRef<HTMLDivElement, SheetActionsProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('ml-auto flex flex-row items-center gap-2', className)} {...props} />\n));\n\nSheet.Title = forwardRef<React.ComponentRef<typeof DialogPrimitive.Title>, SheetTitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-body-1 font-semibold leading-none tracking-tight text-text-primary',\n className,\n )}\n {...props}\n />\n ),\n);\n\nSheet.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n SheetDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-body-2 text-text-tertiary', className)}\n {...props}\n />\n));\n\nSheet.displayName = 'Sheet';\nSheet.Trigger.displayName = 'Sheet.Trigger';\nSheet.Portal.displayName = 'Sheet.Portal';\nSheet.Close.displayName = 'Sheet.Close';\nSheet.Overlay.displayName = 'Sheet.Overlay';\nSheet.Content.displayName = 'Sheet.Content';\nSheet.Header.displayName = 'Sheet.Header';\nSheet.Body.displayName = 'Sheet.Body';\nSheet.Footer.displayName = 'Sheet.Footer';\nSheet.FooterDescription.displayName = 'Sheet.FooterDescription';\nSheet.Actions.displayName = 'Sheet.Actions';\nSheet.Title.displayName = 'Sheet.Title';\nSheet.Description.displayName = 'Sheet.Description';\n\nexport { Sheet };\nexport type {\n SheetComponent,\n SheetRootProps,\n SheetTriggerProps,\n SheetPortalProps,\n SheetOverlayProps,\n SheetContentProps,\n SheetResizeOptions,\n SheetSide,\n SheetCloseProps,\n SheetHeaderProps,\n SheetBodyProps,\n SheetFooterProps,\n SheetFooterDescriptionProps,\n SheetActionsProps,\n SheetTitleProps,\n SheetDescriptionProps,\n};\n","import { cn } from '@exem-ui/core/utils';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\nimport type { ButtonProps } from '../button/Button';\nimport { Button } from '../button/Button';\n\ntype MessageBoxVariant = 'default' | 'critical';\n\ntype MessageBoxRootProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\ntype MessageBoxTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\n\ntype MessageBoxContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n /**\n * 메시지 박스 variant\n * @default 'default'\n */\n variant?: MessageBoxVariant;\n};\n\ntype MessageBoxTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\ntype MessageBoxDescriptionProps = React.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Description\n>;\n\ntype MessageBoxActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\ntype MessageBoxCancelProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype MessageBoxActionProps = Omit<ButtonProps, 'color' | 'variant' | 'background'>;\n\ntype MessageBoxComponent = React.FC<MessageBoxRootProps> & {\n Trigger: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxTriggerProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Trigger>>\n >;\n Content: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxContentProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Content>>\n >;\n Title: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxTitleProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Title>>\n >;\n Description: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxDescriptionProps> &\n React.RefAttributes<React.ElementRef<typeof DialogPrimitive.Description>>\n >;\n Actions: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxActionsProps> & React.RefAttributes<HTMLDivElement>\n >;\n Cancel: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxCancelProps> & React.RefAttributes<HTMLButtonElement>\n >;\n Action: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<MessageBoxActionProps> & React.RefAttributes<HTMLButtonElement>\n >;\n};\n\nconst MessageBoxContext = createContext<{ variant: MessageBoxVariant }>({ variant: 'default' });\n\n/**\n * 확인/경고 다이얼로그 컴포넌트입니다.\n * Modal보다 단순한 구조로, title + description + 버튼(취소/확인)으로 구성됩니다.\n *\n * @example\n * ```tsx\n * <MessageBox>\n * <MessageBox.Trigger>열기</MessageBox.Trigger>\n * <MessageBox.Content variant=\"default\">\n * <MessageBox.Title>상태를 확인하시겠습니까?</MessageBox.Title>\n * <MessageBox.Description>현재 상태에 대한 추가 확인이 필요합니다.</MessageBox.Description>\n * <MessageBox.Actions>\n * <MessageBox.Cancel>취소</MessageBox.Cancel>\n * <MessageBox.Action>확인</MessageBox.Action>\n * </MessageBox.Actions>\n * </MessageBox.Content>\n * </MessageBox>\n * ```\n */\nconst MessageBoxRoot: React.FC<MessageBoxRootProps> = (props) => (\n <DialogPrimitive.Root {...props} />\n);\n\nconst MessageBox = MessageBoxRoot as MessageBoxComponent;\n\nMessageBox.Trigger = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Trigger>,\n MessageBoxTriggerProps\n>((props, ref) => <DialogPrimitive.Trigger ref={ref} {...props} />);\n\nMessageBox.Content = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n MessageBoxContentProps\n>(({ className, children, variant = 'default', ...props }, ref) => (\n <MessageBoxContext.Provider value={{ variant }}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-component-dim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n )}\n />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 flex w-[400px] translate-x-[-50%] translate-y-[-50%] flex-col items-end gap-4 rounded-medium border border-border-primary bg-elevation-elevation-0 p-4 shadow-strong duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </MessageBoxContext.Provider>\n)) as MessageBoxComponent['Content'];\n\nMessageBox.Title = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n MessageBoxTitleProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('w-full text-body-1 font-semibold text-text-primary', className)}\n {...props}\n />\n)) as MessageBoxComponent['Title'];\n\nMessageBox.Description = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n MessageBoxDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('w-full text-body-2 text-text-secondary', className)}\n {...props}\n />\n)) as MessageBoxComponent['Description'];\n\nMessageBox.Actions = forwardRef<HTMLDivElement, MessageBoxActionsProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-row gap-2', className)} {...props} />\n ),\n) as MessageBoxComponent['Actions'];\n\nMessageBox.Cancel = forwardRef<HTMLButtonElement, MessageBoxCancelProps>(\n ({ size = 'medium', ...props }, ref) => (\n <DialogPrimitive.Close asChild>\n <Button ref={ref} variant=\"assistive\" size={size} {...props} />\n </DialogPrimitive.Close>\n ),\n) as MessageBoxComponent['Cancel'];\n\nMessageBox.Action = forwardRef<HTMLButtonElement, MessageBoxActionProps>(\n ({ size = 'medium', ...props }, ref) => {\n const { variant } = useContext(MessageBoxContext);\n\n return (\n <DialogPrimitive.Close asChild>\n <Button\n ref={ref}\n color={variant === 'critical' ? 'critical' : 'primary'}\n variant=\"solid\"\n size={size}\n {...props}\n />\n </DialogPrimitive.Close>\n );\n },\n) as MessageBoxComponent['Action'];\n\nMessageBox.displayName = 'MessageBox';\nMessageBox.Trigger.displayName = 'MessageBox.Trigger';\nMessageBox.Content.displayName = 'MessageBox.Content';\nMessageBox.Title.displayName = 'MessageBox.Title';\nMessageBox.Description.displayName = 'MessageBox.Description';\nMessageBox.Actions.displayName = 'MessageBox.Actions';\nMessageBox.Cancel.displayName = 'MessageBox.Cancel';\nMessageBox.Action.displayName = 'MessageBox.Action';\n\nexport { MessageBox };\nexport type {\n MessageBoxActionProps,\n MessageBoxActionsProps,\n MessageBoxCancelProps,\n MessageBoxComponent,\n MessageBoxContentProps,\n MessageBoxDescriptionProps,\n MessageBoxRootProps,\n MessageBoxTitleProps,\n MessageBoxTriggerProps,\n MessageBoxVariant,\n};\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\ninterface LoadingProps\n extends VariantProps<typeof containerVariants>,\n VariantProps<typeof spinnerVariants>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /**\n * 로딩 표시 여부\n * @default true\n */\n isLoading?: boolean;\n /**\n * 배경 딤 처리 여부\n * @default true\n */\n dim?: boolean;\n /**\n * 로딩 중 하위 요소 인터랙션 차단 여부\n * @default false\n */\n blockInteraction?: boolean;\n /** 컨테이너 추가 클래스 */\n containerClassName?: string;\n /** 오버레이 추가 클래스 */\n overlayClassName?: string;\n /** 스피너 추가 클래스 */\n spinnerClassName?: string;\n}\n\ntype LoadingComponent = React.ForwardRefExoticComponent<\n LoadingProps & React.RefAttributes<HTMLDivElement>\n>;\n\nconst containerVariants = cva('inset-0 z-[49] flex items-center justify-center', {\n variants: {\n position: {\n fixed: 'fixed',\n absolute: 'absolute',\n },\n blockInteraction: {\n true: 'pointer-events-auto',\n false: 'pointer-events-none',\n },\n },\n defaultVariants: {\n position: 'fixed',\n blockInteraction: false,\n },\n});\n\nconst overlayVariants = cva('absolute inset-0 transition-opacity duration-150', {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n tone: {\n // 대비감 높은 톤 설정 추후 디자인 시스템에서 추가 되어야함\n auto: 'bg-black/30 dark:bg-white/10',\n dark: 'bg-black/50',\n light: 'bg-white/70',\n brand: 'bg-primary/20',\n },\n },\n defaultVariants: {\n visible: true,\n tone: 'auto',\n },\n});\n\nconst spinnerVariants = cva(\n 'z-50 shrink-0 animate-spin rounded-full border-elevation-elevation-4 border-t-transparent',\n {\n variants: {\n size: {\n small: 'size-6 border-2',\n medium: 'size-9 border-[3px]',\n large: 'size-12 border-4',\n },\n },\n defaultVariants: {\n size: 'large',\n },\n },\n);\n\n/**\n * 비동기 작업 중 로딩 상태를 표시하는 오버레이 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * // 기본 사용 (전체 화면 고정)\n * <Loading isLoading />\n *\n * // 특정 영역 내 로딩 (absolute 위치)\n * <div style={{ position: 'relative' }}>\n * <Loading isLoading position=\"absolute\" size=\"small\" />\n * </div>\n * ```\n *\n * @see {@link LoadingProps} props 상세\n */\nconst Loading = forwardRef<HTMLDivElement, LoadingProps>(\n (\n {\n isLoading = true,\n dim = true,\n blockInteraction = false,\n position = 'fixed',\n size = 'medium',\n containerClassName,\n overlayClassName,\n spinnerClassName,\n className,\n ...props\n },\n ref,\n ) => {\n if (!isLoading) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n className={cn(\n containerVariants({ position, blockInteraction }),\n containerClassName,\n className,\n )}\n {...props}\n >\n {/* overlay 항상 존재 (dim 여부로만 표시) */}\n <div\n aria-hidden=\"true\"\n className={cn(overlayVariants({ visible: dim }), overlayClassName)}\n />\n {/* 스피너 레이어 */}\n <div className=\"relative z-50 flex size-full items-center justify-center\">\n <div className={cn(spinnerVariants({ size }), spinnerClassName)} />\n </div>\n </div>\n );\n },\n) as LoadingComponent;\n\nLoading.displayName = 'Loading';\n\nexport { Loading };\nexport type { LoadingComponent, LoadingProps };\n","import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { forwardRef } from 'react';\n\nconst trackVariants = cva('w-full overflow-hidden rounded-full bg-elevation-elevation-3', {\n variants: {\n size: {\n small: 'h-1',\n medium: 'h-1.5',\n large: 'h-2',\n },\n },\n defaultVariants: {\n size: 'large',\n },\n});\n\nconst gaugeVariants = cva('h-full rounded-full bg-icon-accent transition-[width] duration-300', {\n variants: {\n size: {\n small: '',\n medium: '',\n large: '',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\ninterface ProgressProps\n extends VariantProps<typeof trackVariants>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /**\n * 현재 진행 값\n * @default 0\n */\n value?: number;\n /**\n * 최대 값\n * @default 100\n */\n max?: number;\n /** 트랙(배경) 추가 클래스 */\n trackClassName?: string;\n /** 게이지(채움) 추가 클래스 */\n gaugeClassName?: string;\n}\n\ntype ProgressComponent = React.ForwardRefExoticComponent<\n ProgressProps & React.RefAttributes<HTMLDivElement>\n>;\n\n/**\n * 작업 진행률을 시각적으로 표시하는 바 컴포넌트입니다.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={30} max={100} size=\"large\" />\n * ```\n */\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n { value = 0, max = 100, size = 'medium', trackClassName, gaugeClassName, className, ...props },\n ref,\n ) => {\n const clampedValue = Math.min(Math.max(value, 0), max);\n const percent = max > 0 ? (clampedValue / max) * 100 : 0;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn(trackVariants({ size }), trackClassName, className)}\n {...props}\n >\n <div\n className={cn(gaugeVariants({ size }), gaugeClassName)}\n style={{ width: `${percent}%` }}\n />\n </div>\n );\n },\n) as ProgressComponent;\n\nProgress.displayName = 'Progress';\n\nexport { Progress };\nexport type { ProgressComponent, ProgressProps };\n","import { cn } from '@exem-ui/core/utils';\nimport type * as ReactTypes from 'react';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\nimport { XIcon } from '../icon';\n\n// Props 타입 정의\ntype ToasterRootProps = ReactTypes.ComponentProps<typeof Sonner>;\n\ntype ToasterContainerProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterIconProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterTitleProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterDescriptionProps = {\n children: ReactTypes.ReactNode;\n} & ReactTypes.HTMLAttributes<HTMLDivElement>;\n\ntype ToasterActionProps = {\n children?: ReactTypes.ReactNode;\n altText?: string;\n} & ReactTypes.ButtonHTMLAttributes<HTMLButtonElement>;\n\n// Namespace 타입 정의\ntype ToasterComponent = React.FC<ToasterRootProps> & {\n Container: React.ForwardRefExoticComponent<\n ToasterContainerProps & React.RefAttributes<HTMLDivElement>\n >;\n Icon: React.ForwardRefExoticComponent<ToasterIconProps & React.RefAttributes<HTMLDivElement>>;\n Title: React.ForwardRefExoticComponent<ToasterTitleProps & React.RefAttributes<HTMLDivElement>>;\n Description: React.ForwardRefExoticComponent<\n ToasterDescriptionProps & React.RefAttributes<HTMLDivElement>\n >;\n Action: React.ForwardRefExoticComponent<\n ToasterActionProps & React.RefAttributes<HTMLButtonElement>\n >;\n};\n\n/**\n * Sonner center 포지셔닝 보정\n *\n * Sonner는 toaster(`<ol>`)를 left:50% + translateX(-50%)로 중앙 정렬하지만,\n * 개별 toast는 toaster 내에서 left:0으로 왼쪽 정렬됩니다.\n * auto-width toast는 toaster(356px)보다 좁아 왼쪽으로 치우칩니다.\n *\n * 해결: 개별 toast에 left:calc(--width/2) + translateX(-50%) 적용\n * (참고: https://github.com/emilkowalski/sonner/issues/678)\n */\nconst positionFix = `\n[data-sonner-toaster][data-x-position='center'] [data-sonner-toast] {\n left: calc(var(--width) / 2) !important;\n transform: translateX(-50%) var(--y) !important;\n width: fit-content !important;\n max-width: calc(100% - var(--mobile-offset-left) * 2) !important;\n}\n@media (max-width: 600px) {\n [data-sonner-toaster] {\n left: 0 !important;\n right: 0 !important;\n }\n [data-sonner-toaster] [data-sonner-toast] {\n width: fit-content !important;\n max-width: calc(100% - var(--mobile-offset-left) - var(--mobile-offset-right)) !important;\n }\n [data-sonner-toaster][data-x-position='center'] [data-sonner-toast] {\n left: 50% !important;\n }\n [data-sonner-toaster][data-x-position='right'] [data-sonner-toast] {\n left: auto !important;\n right: var(--mobile-offset-right) !important;\n }\n [data-sonner-toaster][data-x-position='left'] [data-sonner-toast] {\n left: var(--mobile-offset-left) !important;\n right: auto !important;\n }\n}\n`;\n\n// Root 컴포넌트 (Provider)\nconst Toaster: ToasterComponent = ({ ...props }: ToasterRootProps) => {\n return (\n <>\n <style>{positionFix}</style>\n <Sonner\n // eslint-disable-next-line tailwindcss/no-custom-classname -- toaster는 shadcn의 클래스 구성임\n className=\"toaster group [--toast-width:auto] [&_li]:!flex [&_li]:!items-center [&_li]:!justify-between [&_li]:!gap-2\"\n closeButton={false}\n toastOptions={{\n closeButton: false,\n }}\n {...props}\n />\n </>\n );\n};\n\n// Toast Container (커스텀 토스트용)\nToaster.Container = React.forwardRef<HTMLDivElement, ToasterContainerProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-3 rounded-medium border border-border-primary bg-component-toast py-[10px] pl-3 pr-4 text-mono-light shadow-strong',\n 'h-10 w-auto min-w-0 max-w-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Container'];\n\n// Icon 컴포넌트\nToaster.Icon = React.forwardRef<HTMLDivElement, ToasterIconProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex shrink-0 items-center justify-center', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Icon'];\n\n// Title 컴포넌트\nToaster.Title = React.forwardRef<HTMLDivElement, ToasterTitleProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-body-2 font-medium',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Title'];\n\n// Description 컴포넌트\nToaster.Description = React.forwardRef<HTMLDivElement, ToasterDescriptionProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full text-body-3 font-regular text-text-static-light/80',\n 'overflow-hidden text-ellipsis',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n) as ToasterComponent['Description'];\n\n// Action 컴포넌트 (닫기 버튼 등)\nToaster.Action = React.forwardRef<HTMLButtonElement, ToasterActionProps>(\n ({ className, children, altText, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n 'flex h-7 min-h-[28px] w-auto min-w-[28px] shrink-0 items-center justify-center',\n 'rounded-small bg-transparent px-0 py-0',\n 'border-0 transition-colors',\n 'hover:bg-solid-primary-hovered',\n 'whitespace-nowrap',\n 'cursor-pointer',\n 'text-body-2',\n className,\n )}\n aria-label={altText}\n {...props}\n >\n {children || <XIcon type=\"regular\" className=\"size-4\" />}\n </button>\n );\n },\n) as ToasterComponent['Action'];\n\n// displayName 설정\nToaster.displayName = 'Toaster';\nToaster.Container.displayName = 'Toaster.Container';\nToaster.Icon.displayName = 'Toaster.Icon';\nToaster.Title.displayName = 'Toaster.Title';\nToaster.Description.displayName = 'Toaster.Description';\nToaster.Action.displayName = 'Toaster.Action';\n\nexport { Toaster };\nexport type {\n ToasterActionProps,\n ToasterComponent,\n ToasterContainerProps,\n ToasterDescriptionProps,\n ToasterIconProps,\n ToasterRootProps,\n ToasterTitleProps,\n};\n","import type React from 'react';\n\nimport type { ToasterRootProps } from './Toaster';\nimport { Toaster } from './Toaster';\n\nexport interface ToastProviderProps {\n children?: React.ReactNode;\n /**\n * 호버 시 토스트 확장\n * @default true\n */\n expand?: boolean;\n /**\n * Rich colors 스타일 적용\n * @default false\n */\n richColors?: boolean;\n /**\n * Provider 레벨 닫기 버튼\n * @default false\n */\n closeButton?: boolean;\n /**\n * 토스트가 표시될 위치\n * @default 'top-center'\n */\n position?:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n /**\n * 토스트 표시 시간 (ms)\n * @default 4000\n */\n duration?: number;\n /**\n * 토스트 최대 개수\n * @default 10\n */\n visibleToasts?: number;\n /**\n * 추가 Toaster props\n */\n toasterProps?: Omit<ToasterRootProps, 'children' | 'expand' | 'richColors' | 'closeButton'>;\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n expand = true,\n richColors = false,\n closeButton = false,\n position = 'top-center',\n duration = 4000,\n visibleToasts = 10,\n toasterProps,\n}) => {\n return (\n <>\n {children}\n <Toaster\n position={position}\n closeButton={closeButton}\n richColors={richColors}\n expand={expand}\n duration={duration}\n visibleToasts={visibleToasts}\n {...toasterProps}\n />\n </>\n );\n};\n","import type { ExternalToast } from 'sonner';\nimport { toast as sonnerToast } from 'sonner';\n\nimport { CheckIcon, ErrorIcon, InfoIcon, WarningIcon } from '../icon';\nimport { Toaster } from './Toaster';\n\n// ── Types ──\n\ninterface ToastAction {\n label: string;\n onClick: () => void;\n}\n\ninterface ToastOptions {\n title: string;\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}\n\ninterface ExtendedExternalToast extends ExternalToast {\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}\n\ntype ToastInput = string | ToastOptions;\n\n// ── Helpers ──\n\nfunction isToastOptions(input: ToastInput): input is ToastOptions {\n return typeof input === 'object' && input !== null && 'title' in input;\n}\n\nfunction extractToastParams(\n input: ToastInput,\n options?: ExtendedExternalToast,\n): { title: string; description?: string; action?: ToastAction; close?: boolean } {\n if (isToastOptions(input)) {\n return {\n title: input.title,\n description: input.description,\n action: input.action,\n close: input.close,\n };\n }\n return {\n title: input,\n description: options?.description,\n action: options?.action,\n close: options?.close,\n };\n}\n\nfunction getSonnerOptions(options?: ExtendedExternalToast): ExternalToast | undefined {\n if (!options) {\n return undefined;\n }\n const { description: _description, action: _action, close: _close, ...sonnerOptions } = options;\n return sonnerOptions;\n}\n\n// ── Toast Content ──\n\nfunction ToastContent({\n id,\n icon,\n title,\n description,\n action,\n close,\n}: {\n id: string | number;\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: ToastAction;\n close?: boolean;\n}) {\n const hasExtra = description || action;\n\n if (hasExtra) {\n return (\n <Toaster.Container className=\"h-auto min-h-12 flex-col items-start gap-1 py-3\">\n <div className=\"flex w-full items-center gap-2\">\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n {close && (\n <Toaster.Action className=\"rounded-medium\" onClick={() => sonnerToast.dismiss(id)} />\n )}\n </div>\n {description && <Toaster.Description>{description}</Toaster.Description>}\n {action && (\n <Toaster.Action\n className=\"mt-1 text-text-info hover:text-text-info-hovered\"\n onClick={() => {\n action.onClick();\n sonnerToast.dismiss(id);\n }}\n >\n {action.label}\n </Toaster.Action>\n )}\n </Toaster.Container>\n );\n }\n\n // Figma: close=true → pl-12 pr-6 py-6 gap-12, Content(icon+text) gap-8\n // Figma: close=false → pl-12 pr-16 py-10, Content(icon+text) gap-8\n if (close) {\n return (\n <Toaster.Container className=\"py-1.5 pr-1.5\">\n <div className=\"flex flex-1 items-center gap-2 overflow-hidden\">\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n </div>\n <Toaster.Action className=\"rounded-medium\" onClick={() => sonnerToast.dismiss(id)} />\n </Toaster.Container>\n );\n }\n\n return (\n <Toaster.Container>\n {icon && <Toaster.Icon>{icon}</Toaster.Icon>}\n <Toaster.Title>{title}</Toaster.Title>\n </Toaster.Container>\n );\n}\n\n// ── Internal creator ──\n\nfunction createToast(\n input: ToastInput,\n options: ExtendedExternalToast | undefined,\n icon?: React.ReactNode,\n) {\n const { title, description, action, close } = extractToastParams(input, options);\n\n return sonnerToast.custom(\n (id) => (\n <ToastContent\n id={id}\n icon={icon}\n title={title}\n description={description}\n action={action}\n close={close}\n />\n ),\n { unstyled: true, ...getSonnerOptions(options) },\n );\n}\n\n// ── Public API ──\n\n/**\n * toast() — 커스텀 디자인이 적용된 toast 함수\n *\n * sonner의 toast를 래핑하여 프로젝트의 디자인 시스템을 자동으로 적용합니다.\n *\n * @example\n * ```tsx\n * import { toast } from '@exem-ui/react';\n *\n * // 간단한 메시지\n * toast('기본 메시지');\n * toast.success('성공');\n * toast.error('오류');\n * toast.info('정보');\n * toast.warning('경고');\n *\n * // title + description + action\n * toast.success({\n * title: '저장 완료',\n * description: '변경사항이 저장되었습니다.',\n * action: { label: '되돌리기', onClick: () => handleUndo() },\n * });\n *\n * // 닫기 버튼\n * toast.success({ title: '저장 완료', close: true });\n *\n * // 문자열 + 옵션 (sonner 스타일)\n * toast.success('생성 완료', {\n * description: '일요일, 12월 3일',\n * action: { label: 'Undo', onClick: () => console.log('Undo') },\n * });\n * ```\n */\nexport const toast = Object.assign(\n (input: ToastInput, options?: ExtendedExternalToast) => createToast(input, options),\n {\n success: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <CheckIcon type=\"regular\" className=\"size-5 text-icon-success\" />,\n ),\n\n error: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <ErrorIcon type=\"regular\" className=\"size-5 text-icon-critical\" />,\n ),\n\n info: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <InfoIcon type=\"regular\" className=\"size-5 text-icon-static-light\" />,\n ),\n\n warning: (input: ToastInput, options?: ExtendedExternalToast) =>\n createToast(\n input,\n options,\n <WarningIcon type=\"regular\" className=\"size-5 text-icon-warning\" />,\n ),\n\n loading: (input: ToastInput, options?: ExtendedExternalToast) => createToast(input, options),\n\n dismiss: sonnerToast.dismiss,\n promise: sonnerToast.promise as typeof sonnerToast.promise,\n custom: sonnerToast.custom,\n },\n);\n\nexport type { ExtendedExternalToast, ToastAction, ToastInput, ToastOptions };\n","import type React from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport type { ExtendedExternalToast } from './toast';\nimport { toast } from './toast';\nimport type * as Toast from './types';\n\nfunction toExtended(options?: Toast.Options): ExtendedExternalToast | undefined {\n if (!options) {\n return undefined;\n }\n const { description: _desc, action: _act, ...rest } = options;\n const converted: Record<string, unknown> = { ...rest };\n if (typeof _desc === 'string') {\n converted.description = _desc;\n }\n return converted as ExtendedExternalToast;\n}\n\nconst DEFAULT_MESSAGES: Toast.DefaultMessage = {\n success: '성공',\n error: '오류',\n info: '정보',\n warning: '경고',\n loading: '로딩',\n};\n\n/**\n * @deprecated `toast` 함수를 직접 사용하세요.\n *\n * 하위호환을 위해 유지되며, 내부적으로 `toast`에 위임합니다.\n *\n * @example\n * ```tsx\n * // Before (useToast)\n * const { success } = useToast();\n * success('완료');\n *\n * // After (toast 직접 사용)\n * import { toast } from '@exem-ui/react';\n * toast.success('완료');\n * ```\n */\nexport function useToast() {\n const show = (message: string, options?: Toast.Options) => toast(message, toExtended(options));\n\n const dismiss = (toastId: string | number) => toast.dismiss(toastId);\n\n const showTypedToast = (type: Toast.Type, message?: string, options?: Toast.Options) => {\n const toastMessage = message ?? DEFAULT_MESSAGES[type];\n return toast[type](toastMessage, toExtended(options));\n };\n\n const promiseToast = <T,>(\n promiseTask: Promise<T>,\n options: Toast.PromiseOptions<T>,\n toastOptions?: Toast.Options,\n ) =>\n sonnerToast.promise(promiseTask, {\n loading: options.loading ?? DEFAULT_MESSAGES.loading,\n success: options.success ?? DEFAULT_MESSAGES.success,\n error: options.error ?? DEFAULT_MESSAGES.error,\n finally: options.finally,\n description: options.description,\n ...toastOptions,\n });\n\n const custom = (render: (id: string | number) => React.ReactElement, options?: Toast.Options) =>\n toast.custom(render, options);\n\n return {\n show,\n dismiss,\n promise: promiseToast,\n custom,\n success: (message?: string, options?: Toast.Options) =>\n showTypedToast('success', message, options),\n error: (message?: string, options?: Toast.Options) => showTypedToast('error', message, options),\n info: (message?: string, options?: Toast.Options) => showTypedToast('info', message, options),\n warning: (message?: string, options?: Toast.Options) =>\n showTypedToast('warning', message, options),\n loading: (message?: string, options?: Toast.Options) =>\n showTypedToast('loading', message, options),\n };\n}\n","import type React from 'react';\n\nconst buttonize = (\n fn: (e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => void,\n) => {\n return {\n role: 'button',\n onClick: fn,\n onKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n fn(event);\n }\n },\n };\n};\n\nexport { buttonize };\n"]}