@mondrianai/runyourai-design-system 0.0.12 → 0.0.13

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/components/index.ts","../src/components/ui/accordion.tsx","../src/lib/utils.ts","../src/components/ui/icon.tsx","../src/components/ui/icon-registry.ts","../src/components/ui/alert-dialog.tsx","../src/components/ui/button.tsx","../src/components/ui/alert.tsx","../src/components/ui/avatar.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/card.tsx","../src/components/ui/data-section.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/icons/custom/empty-tray.tsx","../src/components/ui/empty.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/choice-card.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/combobox.tsx","../src/components/icons/custom/chevrons-up-down.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/field.tsx","../src/components/ui/header.tsx","../src/components/ui/input.tsx","../src/components/ui/input-group.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/kb-card.tsx","../src/components/icons/custom/folder-amber.tsx","../src/components/ui/markdown-message.tsx","../src/components/ui/message-footer.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/modal.tsx","../src/components/ui/menubar.tsx","../src/components/ui/number-badge.tsx","../src/components/ui/progress.tsx","../src/components/ui/segmented-control.tsx","../src/components/ui/search-input.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/sidebar.tsx","../src/components/icons/custom/panel-left.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/slider.tsx","../src/components/ui/stepper.tsx","../src/components/ui/tabs.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/circle-indicator.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/user-message-bubble.tsx","../src/components/providers.tsx","../src/components/icons/brand/ryai-logo.tsx","../src/components/icons/brand/claude.tsx","../src/components/icons/brand/deepseek.tsx","../src/components/icons/brand/gemini.tsx","../src/components/icons/brand/google.tsx","../src/components/icons/brand/openai.tsx","../src/components/icons/brand/upstage.tsx","../src/components/icons/custom/agent-blog.tsx","../src/components/icons/custom/agent-cs.tsx","../src/components/icons/custom/agent-data.tsx","../src/components/icons/custom/agent-hr.tsx","../src/components/icons/custom/agent-mail.tsx","../src/components/icons/custom/agent-trend.tsx","../src/components/icons/custom/ai-agent.tsx","../src/components/icons/custom/ai-builder.tsx","../src/components/icons/custom/ai-cloud.tsx","../src/components/icons/custom/ai-datacenter.tsx","../src/components/icons/custom/align-justify.tsx","../src/components/icons/custom/align-left.tsx","../src/components/icons/custom/arrow-down.tsx","../src/components/icons/custom/blockquote.tsx","../src/components/icons/custom/bold.tsx","../src/components/icons/custom/book-open.tsx","../src/components/icons/custom/book-up.tsx","../src/components/icons/custom/circle-check-fill.tsx","../src/components/icons/custom/circle-help.tsx","../src/components/icons/custom/circle-outline.tsx","../src/components/icons/custom/code.tsx","../src/components/icons/custom/code-square.tsx","../src/components/icons/custom/credit.tsx","../src/components/icons/custom/download.tsx","../src/components/icons/custom/drive.tsx","../src/components/icons/custom/file-code.tsx","../src/components/icons/custom/file-search.tsx","../src/components/icons/custom/file-type-corner.tsx","../src/components/icons/custom/folder-blue.tsx","../src/components/icons/custom/folder-closed.tsx","../src/components/icons/custom/folder-green.tsx","../src/components/icons/custom/folder-violet.tsx","../src/components/icons/custom/hangul.tsx","../src/components/icons/custom/heading.tsx","../src/components/icons/custom/html.tsx","../src/components/icons/custom/image.tsx","../src/components/icons/custom/import.tsx","../src/components/icons/custom/indent.tsx","../src/components/icons/custom/italic.tsx","../src/components/icons/custom/key-round.tsx","../src/components/icons/custom/layers.tsx","../src/components/icons/custom/layout-grid.tsx","../src/components/icons/custom/line-chart.tsx","../src/components/icons/custom/link.tsx","../src/components/icons/custom/list.tsx","../src/components/icons/custom/list-ordered.tsx","../src/components/icons/custom/message-circle.tsx","../src/components/icons/custom/markdown.tsx","../src/components/icons/custom/messages-square.tsx","../src/components/icons/custom/my-page.tsx","../src/components/icons/custom/outdent.tsx","../src/components/icons/custom/pdf.tsx","../src/components/icons/custom/refresh-cw.tsx","../src/components/icons/custom/pen-line.tsx","../src/components/icons/custom/pencil-line.tsx","../src/components/icons/custom/presentation.tsx","../src/components/icons/custom/sheet.tsx","../src/components/icons/custom/shopping-bag.tsx","../src/components/icons/custom/slide.tsx","../src/components/icons/custom/smile.tsx","../src/components/icons/custom/sparkles.tsx","../src/components/icons/custom/square-check.tsx","../src/components/icons/custom/square-check-outline.tsx","../src/components/icons/custom/star.tsx","../src/components/icons/custom/strikethrough.tsx","../src/components/icons/custom/table-properties.tsx","../src/components/icons/custom/trash.tsx","../src/components/icons/custom/wand-sparkles.tsx","../src/components/icons/custom/word.tsx"],"sourcesContent":["// ── UI Components ─────────────────────────────────────────────────────────────\nexport * from \"./ui/accordion\";\nexport * from \"./ui/alert-dialog\";\nexport * from \"./ui/alert\";\nexport * from \"./ui/avatar\";\nexport * from \"./ui/badge\";\nexport * from \"./ui/breadcrumb\";\nexport * from \"./ui/button\";\nexport * from \"./ui/card\";\nexport * from \"./ui/data-section\";\nexport * from \"./ui/drawer\";\nexport * from \"./ui/dropdown-menu\";\nexport * from \"./ui/empty\";\nexport * from \"./ui/checkbox\";\nexport * from \"./ui/choice-card\";\nexport * from \"./ui/collapsible\";\nexport * from \"./ui/combobox\";\nexport * from \"./ui/date-picker\";\nexport * from \"./ui/field\";\nexport * from \"./ui/header\";\nexport * from \"./ui/icon-registry\";\nexport * from \"./ui/icon\";\nexport * from \"./ui/input\";\nexport * from \"./ui/input-group\";\nexport * from \"./ui/input-otp\";\nexport * from \"./ui/kb-card\";\nexport * from \"./ui/markdown-message\";\nexport * from \"./ui/modal\";\nexport * from \"./ui/menubar\";\nexport * from \"./ui/message-footer\";\nexport * from \"./ui/number-badge\";\nexport * from \"./ui/progress\";\nexport * from \"./ui/segmented-control\";\nexport * from \"./ui/search-input\";\nexport * from \"./ui/select\";\nexport * from \"./ui/sheet\";\nexport * from \"./ui/sidebar\";\nexport * from \"./ui/skeleton\";\nexport * from \"./ui/slider\";\nexport * from \"./ui/stepper\";\nexport * from \"./ui/tabs\";\nexport * from \"./ui/toggle\";\nexport * from \"./ui/toggle-group\";\nexport * from \"./ui/circle-indicator\";\nexport * from \"./ui/switch\";\nexport * from \"./ui/table\";\nexport * from \"./ui/tooltip\";\nexport * from \"./ui/user-message-bubble\";\n\n// ── Providers ──────────────────────────────────────────────────────────────────\nexport * from \"./providers\";\n\n// ── Custom Icons ───────────────────────────────────────────────────────────────\nexport * from \"./icons\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Accordion as AccordionPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nconst Accordion = AccordionPrimitive.Root;\n\n// ─── Item ─────────────────────────────────────────────────────────────────────\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-border\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n // 기본 레이아웃\n \"flex flex-1 cursor-pointer items-center justify-between py-4\",\n // 텍스트 스타일 (Figma: Text-sm/Medium)\n \"text-sm font-medium leading-5 tracking-tight text-foreground\",\n // hover: 텍스트에만 underline (SVG 체브론은 text-decoration 상속 안 됨)\n \"hover:underline underline-offset-2\",\n // 체브론 회전 애니메이션 (열릴 때 180도) — SVG는 자체 transition-transform 보유\n \"[&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <Icon name=\"chevron-down\" className=\"size-4 text-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n {/* Figma: pb-4 gap-4, Text-sm/Regular */}\n <div\n className={cn(\n \"flex flex-col gap-4 pb-4\",\n \"text-sm font-normal leading-5 tracking-tight text-foreground\",\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n","import { clsx, type ClassValue } from \"clsx\"\nimport { extendTailwindMerge } from \"tailwind-merge\"\n\n// Register text-2xs as a font-size class so tailwind-merge doesn't\n// confuse it with text-color utilities (e.g. text-muted-foreground).\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n \"font-size\": [{ text: [\"2xs\"] }],\n },\n },\n})\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { ICON_NODES } from \"@/components/ui/icon-registry\";\n\ntype IconNode = [string, Record<string, string>, ...IconNode[]];\n\nfunction renderNode(node: IconNode, idx: number): React.ReactNode {\n const [tag, attrs, ...children] = node;\n return React.createElement(\n tag,\n { key: idx, ...attrs },\n ...children.map((child, i) => renderNode(child as IconNode, i)),\n );\n}\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n /** Icon name in kebab-case (e.g. \"arrow-up\", \"chevron-down\") */\n name: string;\n className?: string;\n strokeWidth?: number;\n}\n\n/**\n * Inline SVG icon component.\n * Uses `stroke=\"currentColor\"` so color is controlled via CSS `text-*` classes.\n * Renders the same paths as lucide-react but without the library dependency.\n */\nexport function Icon({\n name,\n className,\n strokeWidth = 1.5,\n ...props\n}: IconProps) {\n const nodes = ICON_NODES[name];\n if (!nodes) return null;\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n {nodes.map((node, i) => renderNode(node, i))}\n </svg>\n );\n}\n","// Auto-generated by scripts/gen-icon-registry.mjs — do not edit manually.\n// Source: lucide-react ESM icon nodes.\n\ntype IconNode = [string, Record<string, string>, ...IconNode[]];\n\nexport const ICON_NODES: Record<string, IconNode[]> = {\n \"arrow-up\": [\n [\"path\", {\"d\":\"m5 12 7-7 7 7\"}],\n [\"path\", {\"d\":\"M12 19V5\"}]\n ],\n \"bar-chart-3\": [\n [\"path\", {\"d\":\"M3 3v16a2 2 0 0 0 2 2h16\"}],\n [\"path\", {\"d\":\"M18 17V9\"}],\n [\"path\", {\"d\":\"M13 17V5\"}],\n [\"path\", {\"d\":\"M8 17v-3\"}]\n ],\n \"bell\": [\n [\"path\", {\"d\":\"M10.268 21a2 2 0 0 0 3.464 0\"}],\n [\"path\", {\"d\":\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"}]\n ],\n \"box\": [\n [\"path\", {\"d\":\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\"}],\n [\"path\", {\"d\":\"m3.3 7 8.7 5 8.7-5\"}],\n [\"path\", {\"d\":\"M12 22V12\"}]\n ],\n \"calendar\": [\n [\"path\", {\"d\":\"M8 2v4\"}],\n [\"path\", {\"d\":\"M16 2v4\"}],\n [\"rect\", {\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],\n [\"path\", {\"d\":\"M3 10h18\"}]\n ],\n \"check\": [\n [\"path\", {\"d\":\"M20 6 9 17l-5-5\"}]\n ],\n \"chevron-down\": [\n [\"path\", {\"d\":\"m6 9 6 6 6-6\"}]\n ],\n \"chevron-left\": [\n [\"path\", {\"d\":\"m15 18-6-6 6-6\"}]\n ],\n \"chevron-right\": [\n [\"path\", {\"d\":\"m9 18 6-6-6-6\"}]\n ],\n \"circle-alert\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"8\",\"y2\":\"12\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12.01\",\"y1\":\"16\",\"y2\":\"16\"}]\n ],\n \"circle-arrow-up\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m16 12-4-4-4 4\"}],\n [\"path\", {\"d\":\"M12 16V8\"}]\n ],\n \"circle-check\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m9 12 2 2 4-4\"}]\n ],\n \"circle-stop\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"rect\", {\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\",\"rx\":\"1\"}]\n ],\n \"circle-x\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m15 9-6 6\"}],\n [\"path\", {\"d\":\"m9 9 6 6\"}]\n ],\n \"copy\": [\n [\"rect\", {\"width\":\"14\",\"height\":\"14\",\"x\":\"8\",\"y\":\"8\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"path\", {\"d\":\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"}]\n ],\n \"code-xml\": [\n [\"path\", {\"d\":\"m18 16 4-4-4-4\"}],\n [\"path\", {\"d\":\"m6 8-4 4 4 4\"}],\n [\"path\", {\"d\":\"m14.5 4-5 16\"}]\n ],\n \"database\": [\n [\"ellipse\", {\"cx\":\"12\",\"cy\":\"5\",\"rx\":\"9\",\"ry\":\"3\"}],\n [\"path\", {\"d\":\"M3 5V19A9 3 0 0 0 21 19V5\"}],\n [\"path\", {\"d\":\"M3 12A9 3 0 0 0 21 12\"}]\n ],\n \"ellipsis\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"}]\n ],\n \"eye\": [\n [\"path\", {\"d\":\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}]\n ],\n \"file\": [\n [\"path\", {\"d\":\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}]\n ],\n \"file-plus-2\": [\n [\"path\", {\"d\":\"M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}],\n [\"path\", {\"d\":\"M14 19h6\"}],\n [\"path\", {\"d\":\"M17 16v6\"}]\n ],\n \"file-text\": [\n [\"path\", {\"d\":\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}],\n [\"path\", {\"d\":\"M10 9H8\"}],\n [\"path\", {\"d\":\"M16 13H8\"}],\n [\"path\", {\"d\":\"M16 17H8\"}]\n ],\n \"folder\": [\n [\"path\", {\"d\":\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"}]\n ],\n \"folder-open-dot\": [\n [\"path\", {\"d\":\"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2\"}],\n [\"circle\", {\"cx\":\"14\",\"cy\":\"15\",\"r\":\"1\"}]\n ],\n \"globe\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"}],\n [\"path\", {\"d\":\"M2 12h20\"}]\n ],\n \"grid-2x2\": [\n [\"path\", {\"d\":\"M12 3v18\"}],\n [\"path\", {\"d\":\"M3 12h18\"}],\n [\"rect\", {\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\"}]\n ],\n \"hard-drive\": [\n [\"path\", {\"d\":\"M10 16h.01\"}],\n [\"path\", {\"d\":\"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"}],\n [\"path\", {\"d\":\"M21.946 12.013H2.054\"}],\n [\"path\", {\"d\":\"M6 16h.01\"}]\n ],\n \"history\": [\n [\"path\", {\"d\":\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"}],\n [\"path\", {\"d\":\"M3 3v5h5\"}],\n [\"path\", {\"d\":\"M12 7v5l4 2\"}]\n ],\n \"info\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"M12 16v-4\"}],\n [\"path\", {\"d\":\"M12 8h.01\"}]\n ],\n \"joystick\": [\n [\"path\", {\"d\":\"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z\"}],\n [\"path\", {\"d\":\"M6 15v-2\"}],\n [\"path\", {\"d\":\"M12 15V9\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"6\",\"r\":\"3\"}]\n ],\n \"key-round\": [\n [\"path\", {\"d\":\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"}],\n [\"circle\", {\"cx\":\"16.5\",\"cy\":\"7.5\",\"r\":\".5\",\"fill\":\"currentColor\"}]\n ],\n \"languages\": [\n [\"path\", {\"d\":\"m5 8 6 6\"}],\n [\"path\", {\"d\":\"m4 14 6-6 2-3\"}],\n [\"path\", {\"d\":\"M2 5h12\"}],\n [\"path\", {\"d\":\"M7 2h1\"}],\n [\"path\", {\"d\":\"m22 22-5-10-5 10\"}],\n [\"path\", {\"d\":\"M14 18h6\"}]\n ],\n \"loader-2\": [\n [\"path\", {\"d\":\"M21 12a9 9 0 1 1-6.219-8.56\"}]\n ],\n \"loader-circle\": [\n [\"path\", {\"d\":\"M21 12a9 9 0 1 1-6.219-8.56\"}]\n ],\n \"log-out\": [\n [\"path\", {\"d\":\"m16 17 5-5-5-5\"}],\n [\"path\", {\"d\":\"M21 12H9\"}],\n [\"path\", {\"d\":\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"}]\n ],\n \"mic\": [\n [\"path\", {\"d\":\"M12 19v3\"}],\n [\"path\", {\"d\":\"M19 10v2a7 7 0 0 1-14 0v-2\"}],\n [\"rect\", {\"x\":\"9\",\"y\":\"2\",\"width\":\"6\",\"height\":\"13\",\"rx\":\"3\"}]\n ],\n \"monitor\": [\n [\"rect\", {\"width\":\"20\",\"height\":\"14\",\"x\":\"2\",\"y\":\"3\",\"rx\":\"2\"}],\n [\"line\", {\"x1\":\"8\",\"x2\":\"16\",\"y1\":\"21\",\"y2\":\"21\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"17\",\"y2\":\"21\"}]\n ],\n \"more-horizontal\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"}]\n ],\n \"paperclip\": [\n [\"path\", {\"d\":\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"}]\n ],\n \"pen-tool\": [\n [\"path\", {\"d\":\"M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z\"}],\n [\"path\", {\"d\":\"m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18\"}],\n [\"path\", {\"d\":\"m2.3 2.3 7.286 7.286\"}],\n [\"circle\", {\"cx\":\"11\",\"cy\":\"11\",\"r\":\"2\"}]\n ],\n \"phone-off\": [\n [\"path\", {\"d\":\"M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272\"}],\n [\"path\", {\"d\":\"M22 2 2 22\"}],\n [\"path\", {\"d\":\"M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473\"}]\n ],\n \"minus\": [\n [\"path\", {\"d\":\"M5 12h14\"}]\n ],\n \"plus\": [\n [\"path\", {\"d\":\"M5 12h14\"}],\n [\"path\", {\"d\":\"M12 5v14\"}]\n ],\n \"receipt-text\": [\n [\"path\", {\"d\":\"M13 16H8\"}],\n [\"path\", {\"d\":\"M14 8H8\"}],\n [\"path\", {\"d\":\"M16 12H8\"}],\n [\"path\", {\"d\":\"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z\"}]\n ],\n \"search\": [\n [\"path\", {\"d\":\"m21 21-4.34-4.34\"}],\n [\"circle\", {\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"}]\n ],\n \"server\": [\n [\"rect\", {\"width\":\"20\",\"height\":\"8\",\"x\":\"2\",\"y\":\"2\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"rect\", {\"width\":\"20\",\"height\":\"8\",\"x\":\"2\",\"y\":\"14\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"line\", {\"x1\":\"6\",\"x2\":\"6.01\",\"y1\":\"6\",\"y2\":\"6\"}],\n [\"line\", {\"x1\":\"6\",\"x2\":\"6.01\",\"y1\":\"18\",\"y2\":\"18\"}]\n ],\n \"settings\": [\n [\"path\", {\"d\":\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}]\n ],\n \"slash\": [\n [\"path\", {\"d\":\"M22 2 2 22\"}]\n ],\n \"sliders-horizontal\": [\n [\"path\", {\"d\":\"M10 5H3\"}],\n [\"path\", {\"d\":\"M12 19H3\"}],\n [\"path\", {\"d\":\"M14 3v4\"}],\n [\"path\", {\"d\":\"M16 17v4\"}],\n [\"path\", {\"d\":\"M21 12h-9\"}],\n [\"path\", {\"d\":\"M21 19h-5\"}],\n [\"path\", {\"d\":\"M21 5h-7\"}],\n [\"path\", {\"d\":\"M8 10v4\"}],\n [\"path\", {\"d\":\"M8 12H3\"}]\n ],\n \"sparkles\": [\n [\"path\", {\"d\":\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"}],\n [\"path\", {\"d\":\"M20 2v4\"}],\n [\"path\", {\"d\":\"M22 4h-4\"}],\n [\"circle\", {\"cx\":\"4\",\"cy\":\"20\",\"r\":\"2\"}]\n ],\n \"square\": [\n [\"rect\", {\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\"}]\n ],\n \"square-pen\": [\n [\"path\", {\"d\":\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"}],\n [\"path\", {\"d\":\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"}]\n ],\n \"terminal\": [\n [\"path\", {\"d\":\"M12 19h8\"}],\n [\"path\", {\"d\":\"m4 17 6-6-6-6\"}]\n ],\n \"trash-2\": [\n [\"path\", {\"d\":\"M10 11v6\"}],\n [\"path\", {\"d\":\"M14 11v6\"}],\n [\"path\", {\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"}],\n [\"path\", {\"d\":\"M3 6h18\"}],\n [\"path\", {\"d\":\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"}]\n ],\n \"user\": [\n [\"path\", {\"d\":\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"}]\n ],\n \"user-cog\": [\n [\"path\", {\"d\":\"M10 15H6a4 4 0 0 0-4 4v2\"}],\n [\"path\", {\"d\":\"m14.305 16.53.923-.382\"}],\n [\"path\", {\"d\":\"m15.228 13.852-.923-.383\"}],\n [\"path\", {\"d\":\"m16.852 12.228-.383-.923\"}],\n [\"path\", {\"d\":\"m16.852 17.772-.383.924\"}],\n [\"path\", {\"d\":\"m19.148 12.228.383-.923\"}],\n [\"path\", {\"d\":\"m19.53 18.696-.382-.924\"}],\n [\"path\", {\"d\":\"m20.772 13.852.924-.383\"}],\n [\"path\", {\"d\":\"m20.772 16.148.924.383\"}],\n [\"circle\", {\"cx\":\"18\",\"cy\":\"15\",\"r\":\"3\"}],\n [\"circle\", {\"cx\":\"9\",\"cy\":\"7\",\"r\":\"4\"}]\n ],\n \"link-2\": [\n [\"path\", {\"d\":\"M9 17H7A5 5 0 0 1 7 7h2\"}],\n [\"path\", {\"d\":\"M15 7h2a5 5 0 1 1 0 10h-2\"}],\n [\"line\", {\"x1\":\"8\",\"x2\":\"16\",\"y1\":\"12\",\"y2\":\"12\"}]\n ],\n \"download\": [\n [\"path\", {\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"}],\n [\"polyline\", {\"points\":\"7 10 12 15 17 10\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"15\",\"y2\":\"3\"}]\n ],\n \"external-link\": [\n [\"path\", {\"d\":\"M15 3h6v6\"}],\n [\"path\", {\"d\":\"M10 14 21 3\"}],\n [\"path\", {\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}]\n ],\n \"x\": [\n [\"path\", {\"d\":\"M18 6 6 18\"}],\n [\"path\", {\"d\":\"m6 6 12 12\"}]\n ],\n \"zap\": [\n [\"path\", {\"d\":\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"}]\n ]\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\n// ─── Portal ───────────────────────────────────────────────────────────────────\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\n// ─── Overlay ──────────────────────────────────────────────────────────────────\n// 배경 딤(dim) 레이어: 다이얼로그 열릴 때 fade-in, 닫힐 때 fade-out\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n // 배경 딤 레이어 — 스크롤 없이 화면 전체 덮기\n \"fixed inset-0 z-50 bg-black/30\",\n // 열림/닫힘 애니메이션 (tw-animate-css)\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"duration-200\",\n className\n )}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = \"AlertDialogOverlay\";\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n// 다이얼로그 패널: 360px 고정폭, rounded-lg(10px), shadow-lg\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n // 위치 — 화면 중앙 고정\n \"fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2\",\n // 레이아웃\n \"flex w-90 flex-col gap-4 p-6\",\n // 외형\n \"bg-background border border-border rounded-lg\",\n \"shadow-modal\",\n // 열림/닫힘 애니메이션 (tw-animate-css)\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"duration-200\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n// 제목 + 설명 묶음 영역\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n// 버튼 묶음 영역 — 오른쪽 정렬, gap-2\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"flex items-center justify-end gap-2\", className)}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n// 18px / SemiBold / text-foreground\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-7 tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\n// ─── Description ──────────────────────────────────────────────────────────────\n// 14px / Regular / text-muted-foreground\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\n \"text-sm font-normal leading-5 tracking-tight text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\n// ─── Action ───────────────────────────────────────────────────────────────────\n// 확인/계속 버튼 — primary variant (Button 스타일 재사용)\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"default\" }), className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = \"AlertDialogAction\";\n\n// ─── Cancel ───────────────────────────────────────────────────────────────────\n// 취소 버튼 — outline variant (Button 스타일 재사용)\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = \"AlertDialogCancel\";\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n// Derived from RYAI Design System — Button component (node 402:654)\n\nconst buttonVariants = cva(\n // Base — 모든 버튼 공통 스타일\n 'inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg text-sm font-medium leading-5 tracking-tight whitespace-nowrap cursor-pointer select-none transition-[transform,opacity,background-color,border-color,color,box-shadow] duration-150 active:scale-[0.97] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:pointer-events-auto disabled:bg-muted disabled:text-muted-foreground disabled:border-transparent disabled:shadow-none disabled:active:scale-100 [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n /**\n * variant — 버튼 색상/스타일\n * default 검정 배경, 흰 글자(primary-foreground), 그림자 / hover: opacity-90\n * secondary 연회색 배경, 검정 글자 / hover: accent 배경 (텍스트·opacity 변화 없음)\n * outline 흰 배경 + 테두리, 검정 글자 / hover: accent 배경 (텍스트 색 변화 없음)\n * ghost 배경 없음, 검정 글자 / hover: accent 배경 (텍스트 색 변화 없음)\n * destructive 빨간 배경, 흰 글자(95% opacity) / hover: opacity-90\n * link 배경/테두리 없음, primary 색 글자 / hover: underline\n */\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow-button hover:opacity-90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-accent',\n outline:\n 'border border-border bg-background text-foreground hover:bg-accent',\n ghost: 'text-foreground hover:bg-accent',\n destructive:\n 'bg-destructive text-white/95 shadow-button hover:opacity-90',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n /**\n * size — 버튼 크기\n * default h-9 (36px) px-4 텍스트 버튼 표준\n * icon 36×36 정사각형 아이콘 전용, rounded-lg 유지 / hover: opacity-80\n * rounded 36×36 원형 아이콘 전용, rounded-full / hover: opacity-80\n * pill px-3 py-1.5 rounded-full Rounded-text 필셋 스타일\n */\n size: {\n default: 'h-9 px-4 py-2',\n icon: 'size-9 p-0 hover:opacity-80',\n rounded: 'size-9 p-0 rounded-full hover:opacity-80',\n pill: 'px-3 py-1.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Radix Slot 패턴 — true 이면 자식 요소에 props를 병합 */\n asChild?: boolean;\n /** 로딩 상태 — 스피너 표시, 클릭 불가, 반투명 처리 (h-8 / 32px) */\n loading?: boolean;\n /**\n * 텍스트 앞에 렌더링할 아이콘 (primary / secondary / outline 전용)\n * loading 상태에서는 자동으로 숨겨집니다.\n */\n iconStart?: React.ReactNode;\n /**\n * 텍스트 뒤에 렌더링할 아이콘 (primary / secondary / outline 전용)\n * loading 상태에서는 자동으로 숨겨집니다.\n */\n iconEnd?: React.ReactNode;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n loading = false,\n iconStart,\n iconEnd,\n disabled,\n children,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n disabled={disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n // loading 상태: 크기·배경색은 variant 그대로 유지하고 opacity로 비활성 표현\n loading && 'opacity-60 shadow-none active:scale-100 cursor-not-allowed',\n className,\n )}\n {...props}\n >\n {loading ? (\n <>\n <Icon name='loader-2' className='size-3.5 animate-spin' />\n {children}\n </>\n ) : (\n <>\n {iconStart}\n {children}\n {iconEnd}\n </>\n )}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\n/**\n * 2-column grid layout:\n * Col 1 (16px): icon\n * Col 2 (1fr): title (row 1) / description (row 2, col-start-2)\n *\n * variant 색상은 CSS 상속으로 모든 자식에 자동 적용됩니다.\n * description font-weight은 CSS custom property로 제어합니다.\n * default → Pretendard Light (300)\n * destructive → Pretendard Regular (400)\n */\nconst alertVariants = cva(\n [\n // 레이아웃\n \"grid grid-cols-[16px_1fr] items-start gap-x-3 gap-y-0.5\",\n // 컨테이너\n \"w-full rounded-lg border border-border bg-background px-4 py-3\",\n // 아이콘 (직계 SVG 자식) — mt-[2px]로 텍스트 기준선에 시각적 정렬\n \"[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:mt-0.5\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n // 색상은 CSS 상속 / font-weight은 CSS variable로 자식에 주입\n default: \"text-foreground [--alert-desc-weight:300]\",\n destructive: \"text-destructive [--alert-desc-weight:400]\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\n// ─── Alert (Root) ─────────────────────────────────────────────────────────────\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\n// ─── AlertTitle ───────────────────────────────────────────────────────────────\n// Grid [col 2, row 1] — 아이콘 오른쪽, 첫 번째 행\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n // 색상은 Alert root에서 상속 (text-foreground / text-destructive)\n \"text-sm font-medium leading-5 tracking-tight\",\n className\n )}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\n// ─── AlertDescription ─────────────────────────────────────────────────────────\n// Grid [col 2, row 2+] — col-start-2로 아이콘 열 건너뜀\n\nconst AlertDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n // col-start-2: 아이콘 열을 건너뛰어 제목과 세로 정렬\n \"col-start-2\",\n // 색상 상속 / font-weight는 부모 CSS variable로 주입 (300 light ↔ 400 normal)\n \"text-sm [font-weight:var(--alert-desc-weight,400)] leading-5 tracking-tight\",\n // 내부에 ul이 포함될 경우 bullet 스타일 자동 적용\n \"[&_ul]:list-disc [&_ul]:ml-5 [&_ul]:mt-1 [&_li]:mt-0.5\",\n className\n )}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertDescription, AlertTitle };\n","import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { User } from 'lucide-react';\n\n// ─── Size map ─────────────────────────────────────────────────────────────────\n// Figma 기준 md = 32px (size-8)\n\nconst SIZE: Record<AvatarSize, { root: string; text: string }> = {\n sm: { root: 'size-6', text: 'text-xs' },\n md: { root: 'size-8', text: 'text-base' },\n lg: { root: 'size-10', text: 'text-lg' },\n};\n\nexport type AvatarSize = 'sm' | 'md' | 'lg';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface AvatarProps {\n /** 이미지 URL */\n src?: string;\n /** 이미지 alt 텍스트 */\n alt?: string;\n /** 이미지 fallback으로 이니셜 표시. 미제공 시 User 아이콘 표시 */\n username?: string;\n /**\n * circle(기본): 원형, 사진 아바타\n * square: 모서리 둥근 사각형, 이니셜 아바타 (bg-gray-500 + 흰 글자)\n */\n shape?: 'circle' | 'square';\n /** sm (24px) | md (32px, 기본) | lg (40px) */\n size?: AvatarSize;\n className?: string;\n}\n\nexport interface AvatarGroupItem {\n /** 고유 식별자 (key prop으로 사용) */\n id: string;\n username?: string;\n src?: string;\n alt?: string;\n}\n\nexport interface AvatarGroupProps {\n avatars: AvatarGroupItem[];\n size?: AvatarSize;\n className?: string;\n}\n\n// ─── Avatar ───────────────────────────────────────────────────────────────────\n// 렌더링 순서: src(이미지) || username(이니셜 최대 2자) || User 아이콘(최종 fallback)\nfunction Avatar({\n src,\n alt = '',\n username,\n shape = 'circle',\n size = 'md',\n className,\n}: AvatarProps) {\n const isCircle = shape === 'circle';\n const { root, text } = SIZE[size];\n\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-shape={shape}\n className={cn(\n 'relative inline-flex shrink-0 select-none overflow-hidden',\n root,\n isCircle ? 'rounded-full' : 'rounded-md',\n !src && 'border border-border',\n className,\n )}\n >\n {src && (\n <AvatarPrimitive.Image\n src={src}\n alt={alt}\n className='aspect-square size-full object-cover'\n />\n )}\n <AvatarPrimitive.Fallback\n className={cn(\n 'flex size-full items-center justify-center font-medium leading-none',\n text,\n isCircle\n ? 'bg-secondary text-secondary-foreground'\n : 'bg-gray-500 text-white',\n )}\n >\n {username ? (\n username.slice(0, 2)\n ) : (\n <User className='size-3/5 text-gray-600' strokeWidth={1.5} />\n )}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n );\n}\n\n// ─── AvatarGroup ──────────────────────────────────────────────────────────────\n// 아바타를 -8px(= -mr-2) 간격으로 겹쳐서 표시.\n// 두 번째 아바타부터 border-border 테두리로 구분.\n\nfunction AvatarGroup({ avatars, size = 'md', className }: AvatarGroupProps) {\n return (\n <div className={cn('flex items-center pr-2', className)}>\n {avatars.map((avatar, i) => (\n <Avatar\n key={avatar.id}\n src={avatar.src}\n alt={avatar.alt}\n size={size}\n username={avatar.username}\n shape='circle'\n className={cn('-mr-2', i > 0 && 'border border-border')}\n />\n ))}\n </div>\n );\n}\n\nexport { Avatar, AvatarGroup };\n","import { cn } from '@/lib/utils';\nimport { Icon } from './icon';\n\n// ─── Style constants ──────────────────────────────────────────────────────────\n// Derived from RYAI Design System - Badge component (node 73:3479)\n// h-5.5(22px) · rounded-lg(10px) · px-2.5 py-0.5 · text-xs font-medium\nconst TEXT_BADGE_BASE =\n 'inline-flex w-fit shrink-0 items-center justify-center gap-1 h-5.5 rounded-lg px-2.5 py-0.5 text-xs font-medium leading-xs tracking-tight whitespace-nowrap';\nconst BADGE_ICON_BASE = 'size-3';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * 배지 시맨틱 변형:\n * - default: primary 배경 (검정/흰)\n * - secondary: secondary 배경 (회색)\n * - destructive: destructive 배경 (강한 빨강)\n * - outline: 테두리만, 투명 배경 (회색)\n * - info: blue-50 배경 + blue-800 텍스트 (정보/완료)\n * - error: red-50 배경 + red-800 텍스트 (오류/실패)\n * - warning: amber-50 배경 + amber-800 텍스트 (경고/on-demand)\n * - success: green-50 배경 + green-800 텍스트 (성공/reserved)\n */\nexport type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'info' | 'error' | 'warning' | 'success';\n\nexport interface BadgeProps {\n /** 배지 표시 텍스트 */\n text: string;\n /** 배지 시맨틱 변형 (기본값: default) */\n variant?: BadgeVariant;\n /** 아이콘 이름 (@/components/ui/icon-registry에 정의된 이름) */\n iconName?: string;\n className?: string;\n /** 아이콘 회전 여부 */\n spin?: boolean;\n}\n\n// ─── Variant → className lookup ───────────────────────────────────────────────\n\nexport const BADGE_VARIANT_STYLES: Record<BadgeVariant, string> = {\n default: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n destructive: 'bg-destructive text-white',\n outline: 'border border-border bg-transparent text-foreground',\n info: 'bg-blue-50 text-blue-800',\n error: 'bg-red-50 text-red-800',\n warning: 'bg-amber-50 text-amber-800',\n success: 'bg-green-50 text-green-800',\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Badge({\n text,\n variant = 'default',\n spin = false,\n iconName,\n className,\n}: BadgeProps) {\n return (\n <span\n data-slot='badge'\n className={cn(TEXT_BADGE_BASE, BADGE_VARIANT_STYLES[variant], className)}\n >\n {iconName && (\n <Icon\n name={iconName}\n className={cn(BADGE_ICON_BASE, spin && 'animate-spin')}\n />\n )}\n {text}\n </span>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\ntype BreadcrumbSeparator = 'slash' | 'chevron-right';\n\ninterface BreadcrumbProps extends React.ComponentPropsWithoutRef<'nav'> {\n items: { label: string; href?: string; onClick?: () => void }[];\n separator?: BreadcrumbSeparator;\n collapse?: 'dropdown' | 'ellipsis';\n}\n\nconst getCollapsedItems = (items: BreadcrumbProps['items']) => {\n if (items.length <= 4) return items;\n\n return {\n first: items[0],\n middle: items.slice(1, -2),\n lastTwo: items.slice(-2),\n };\n};\n\nconst EllipsisBreadcrumb = ({\n items,\n separator,\n}: {\n items: BreadcrumbProps['items'];\n separator: BreadcrumbSeparator;\n}) => {\n const collapsed = getCollapsedItems(items);\n\n if (!('first' in collapsed)) {\n return items.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < items.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ));\n }\n return (\n <>\n <BreadcrumbItem\n label={collapsed.first.label}\n href={collapsed.first.href}\n onClick={collapsed.first.onClick}\n />\n <BreadcrumbSeparator iconName={separator} />\n <Ellipsis />\n <BreadcrumbSeparator iconName={separator} />\n {collapsed.lastTwo.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < collapsed.lastTwo.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ))}\n </>\n );\n};\n\nconst DropdownBreadcrumb = ({\n items,\n separator,\n}: {\n items: BreadcrumbProps['items'];\n separator: BreadcrumbSeparator;\n}) => {\n const collapsed = getCollapsedItems(items);\n\n if (!('first' in collapsed)) {\n return items.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < items.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ));\n }\n\n const { first, middle, lastTwo } = collapsed;\n\n return (\n <>\n <BreadcrumbItem label={first.label} href={first.href} onClick={first.onClick} />\n <BreadcrumbSeparator iconName={separator} />\n <Dropdown middle={middle} />\n <BreadcrumbSeparator iconName={separator} />\n {lastTwo.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < lastTwo.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ))}\n </>\n );\n};\n\nfunction Breadcrumb({\n items,\n separator = 'chevron-right',\n collapse = 'ellipsis',\n className,\n}: BreadcrumbProps) {\n return (\n <nav aria-label='breadcrumb' className={cn(className)}>\n <BreadcrumbList>\n {collapse === 'ellipsis' ? (\n <EllipsisBreadcrumb items={items} separator={separator} />\n ) : (\n <DropdownBreadcrumb items={items} separator={separator} />\n )}\n </BreadcrumbList>\n </nav>\n );\n}\n\nfunction BreadcrumbList({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'ol'>) {\n return (\n <ol\n className={cn(\n 'flex flex-wrap items-center gap-1.5 text-sm tracking-tight text-gray-500',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({\n label,\n href,\n onClick,\n className,\n}: {\n label: string;\n href?: string;\n onClick?: () => void;\n className?: string;\n}) {\n const isLink = href !== undefined || onClick !== undefined;\n return (\n <li className={cn('inline-flex items-center gap-1', className)}>\n {isLink ? (\n <a\n href={href}\n onClick={onClick}\n className='text-gray-500 transition-colors hover:text-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm'\n >\n {label}\n </a>\n ) : (\n <span className='text-gray-900'>{label}</span>\n )}\n </li>\n );\n}\n\nfunction BreadcrumbSeparator({\n iconName,\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'li'> & {\n iconName: 'slash' | 'chevron-right';\n}) {\n return (\n <li\n role='presentation'\n aria-hidden\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {iconName === 'slash' ? (\n <Icon name='slash' className='size-3.5' />\n ) : (\n <Icon name='chevron-right' className='size-3.5' />\n )}\n </li>\n );\n}\n\nfunction Ellipsis() {\n return (\n <span\n role='presentation'\n aria-hidden\n className={cn('flex items-center justify-center')}\n >\n <Icon name='more-horizontal' className='size-3.5' />\n {/* <span className='sr-only'>More</span> */}\n </span>\n );\n}\n\nfunction Dropdown({ middle }: { middle: BreadcrumbProps['items'] }) {\n const [open, setOpen] = useState(false);\n\n return (\n <div className='relative'>\n <button\n type='button'\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n 'inline-flex items-center gap-1 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n )}\n >\n <Icon\n name='chevron-down'\n className='size-3.5 cursor-pointer hover:text-foreground hover:bg-gray-100 rounded-sm'\n />\n </button>\n {open && (\n <div className='absolute p-1 flex flex-col gap-2 top-full left-0 mt-2 w-36 bg-white rounded-md shadow-lg'>\n {middle.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className='px-2 py-1 hover:bg-gray-100 cursor-pointer text-sm tracking-tight rounded-sm text-gray-500 hover:text-gray-900'\n >\n {item.label}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport { Breadcrumb };\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/** 예약 유형: Reserved(사전 예약) 또는 On-demand(즉시 사용) */\nexport type MachineType = 'reserved' | 'on-demand';\n\n/** 이용 상태: 대여가능 또는 대여중 */\nexport type AvailabilityStatus = 'available' | 'rented';\n\nexport interface CardSpec {\n label: string;\n value: string;\n}\n\nexport interface CardProps {\n /** 예약 유형 배지 — reserved 또는 on-demand (필수) */\n machineType: MachineType;\n /** 이용 상태 배지 — available(대여가능) 또는 rented(대여중) (필수) */\n availability: AvailabilityStatus;\n /** 머신 이름 (예: \"NVIDIA B300 x 8\") */\n machineName: string;\n /** 머신 이름 앞 이니셜 박스에 표시할 문자 (예: \"B\") */\n machineInitial: string;\n /** 스펙 태그 목록 (예: [\"4x8x\", \"000GB VRAM\", \"B-Series\"]) */\n tags?: string[];\n /** 스펙 상세 목록 (예: [{ label: \"CPU\", value: \"128 Core\" }]) */\n specs?: CardSpec[];\n /** 머신 선택 버튼 클릭 핸들러 */\n onSelect?: () => void;\n /** 버튼 텍스트 (기본값: \"머신 선택\") */\n selectLabel?: string;\n className?: string;\n}\n\n// ─── Badge color 매핑 ────────────────────────────────────────────────────────\n// 도메인 데이터 값 → Badge color + label + icon\n\nconst AVAILABILITY_BADGE = {\n available: { variant: 'info', label: '대여 가능', icon: null } as const,\n rented: { variant: 'secondary', label: '대여 중', icon: 'settings' } as const,\n};\n\nconst MACHINE_TYPE_BADGE = {\n reserved: {\n variant: 'success',\n label: 'Reserved',\n icon: 'calendar',\n } as const,\n 'on-demand': { variant: 'warning', label: 'On-demand', icon: 'zap' } as const,\n};\n\n// ─── Card ─────────────────────────────────────────────────────────────────────\n\nfunction Card({\n machineType,\n availability,\n machineName,\n machineInitial,\n tags = [],\n specs = [],\n onSelect,\n selectLabel = '머신 선택',\n className,\n}: CardProps) {\n const avail = AVAILABILITY_BADGE[availability];\n const mtype = MACHINE_TYPE_BADGE[machineType];\n\n return (\n <div\n className={cn(\n 'flex w-80 flex-col gap-6 rounded-2xl border border-border bg-card py-6 shadow-sm',\n className,\n )}\n >\n {/* 상태 배지 영역 — 이용 상태 + 예약 유형 순서 */}\n <div className='flex items-center gap-1 px-6'>\n <Badge\n text={avail.label}\n variant={avail.variant}\n iconName={avail.icon ?? undefined}\n />\n <Badge\n text={mtype.label}\n variant={mtype.variant}\n iconName={mtype.icon}\n />\n </div>\n\n {/* 머신 이름 + 스펙 태그 */}\n <div className='flex flex-col gap-2 px-6'>\n <div className='flex items-center gap-2 w-full'>\n <div className='flex size-10 shrink-0 items-center justify-center rounded-lg border border-border bg-background'>\n <span className='text-xl font-bold leading-7 tracking-tight text-foreground'>\n {machineInitial}\n </span>\n </div>\n <span className='text-xl font-semibold leading-7 tracking-tight text-card-foreground whitespace-nowrap'>\n {machineName}\n </span>\n </div>\n\n {tags.length > 0 && (\n <div className='flex min-h-12 flex-wrap content-center items-center gap-1.5'>\n {tags.map((tag) => (\n <Badge key={tag} text={tag} variant='secondary' />\n ))}\n </div>\n )}\n </div>\n\n {/* 스펙 상세 */}\n {specs.length > 0 && (\n <div className='flex flex-col gap-2 px-6'>\n {specs.map(({ label, value }) => (\n <div key={label} className='flex items-start w-full'>\n <span className='w-15 shrink-0 text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {label}\n </span>\n <div className='flex min-w-0 flex-1 items-center justify-end'>\n <span className='text-sm font-medium leading-5 tracking-tight text-card-foreground whitespace-nowrap'>\n {value}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* 선택 버튼 */}\n <div className='px-6'>\n <Button variant='outline' className='w-full' onClick={onSelect}>\n {selectLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport { Card };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── DataSection ──────────────────────────────────────────────────────────────\n// 제목 + 툴바(검색 슬롯 / 액션 버튼) + 콘텐츠(children) 레이아웃 컴포넌트.\n// 상태(editMode, viewMode 등)는 소비자가 관리하고 slots에 주입한다.\n\nexport interface DataSectionProps {\n /** 섹션 제목 */\n title?: string;\n children: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n className?: string;\n childrenClassName?: string;\n}\n\nexport function DataSection({\n title,\n left,\n right,\n className,\n childrenClassName,\n children,\n}: DataSectionProps) {\n return (\n <div className={cn('flex flex-col gap-4', className)}>\n {title && (\n <h2 className='text-xl font-semibold leading-none tracking-tight text-foreground'>\n {title}\n </h2>\n )}\n {(left || right) && (\n <div className='flex items-center justify-between gap-2 shrink-0'>\n <div className='flex items-center gap-2 flex-1 min-w-0'>{left}</div>\n <div className='flex items-center gap-2 shrink-0'>{right}</div>\n </div>\n )}\n <div className={cn(childrenClassName)}>{children}</div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n title: React.ReactNode;\n children: React.ReactNode;\n metadata?: React.ReactNode;\n className?: string;\n}\n\nexport function Drawer({\n open,\n onClose,\n title,\n children,\n metadata,\n className,\n}: DrawerProps) {\n // isVisible: DOM 존재 여부 (닫힘 애니메이션이 끝난 후 false)\n // isOpen: CSS 애니메이션 상태 (translate-x-0 / translate-x-full)\n const [isVisible, setIsVisible] = React.useState(open);\n const [isOpen, setIsOpen] = React.useState(open);\n\n // 닫힘 애니메이션 중에도 마지막 컨텐츠를 유지 (열려 있을 때만 갱신)\n const [snapshot, setSnapshot] = React.useState({ title, children, metadata });\n React.useEffect(() => {\n if (open) setSnapshot({ title, children, metadata });\n }, [open, title, children, metadata]);\n\n // 열려 있을 때는 최신 props를, 닫히는 중에는 마지막 스냅샷을 표시\n const displayTitle = open ? title : snapshot.title;\n const displayChildren = open ? children : snapshot.children;\n const displayMetadata = open ? metadata : snapshot.metadata;\n\n React.useEffect(() => {\n if (open) {\n // 마운트 후 다음 프레임에 열림 애니메이션 시작\n setIsVisible(true);\n const raf = requestAnimationFrame(() => {\n requestAnimationFrame(() => setIsOpen(true));\n });\n return () => cancelAnimationFrame(raf);\n } else {\n // 닫힘 애니메이션 시작 (isVisible은 transitionend 후 false)\n setIsOpen(false);\n }\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose]);\n\n React.useEffect(() => {\n document.body.style.overflow = open ? 'hidden' : '';\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // transform 트랜지션이 끝난 후에만 언마운트\n const handleTransitionEnd = (e: React.TransitionEvent) => {\n if (!open && e.propertyName === 'transform') setIsVisible(false);\n };\n\n if (!isVisible) return null;\n\n return (\n <>\n {/* Backdrop with blur */}\n <div\n className={cn(\n 'fixed inset-0 z-40 bg-black/20 backdrop-blur-sm transition-opacity duration-300',\n isOpen\n ? 'opacity-100 pointer-events-auto'\n : 'opacity-0 pointer-events-none',\n )}\n onClick={onClose}\n />\n\n {/* Drawer panel */}\n <div\n className={cn(\n 'fixed top-0 right-0 z-50 flex flex-col h-full w-[560px] bg-background',\n 'border-l border-border',\n 'transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full',\n className,\n )}\n style={{ boxShadow: '-4px 0 24px rgba(0,0,0,0.08)' }}\n onTransitionEnd={handleTransitionEnd}\n >\n {/* Header */}\n <div className='flex flex-col gap-1.5 p-4'>\n <div className='flex items-center justify-between'>\n <div className='flex-1 min-w-0'>{displayTitle}</div>\n <button\n onClick={onClose}\n className='ml-3 size-8 shrink-0 flex items-center justify-center rounded-lg hover:bg-accent transition-colors'\n aria-label='닫기'\n >\n <Icon name='x' className='size-4 text-foreground' />\n </button>\n </div>\n {displayMetadata && (\n <p className='text-sm text-muted-foreground'>{displayMetadata}</p>\n )}\n </div>\n\n {/* Content */}\n <div className='flex-1 overflow-y-auto'>{displayChildren}</div>\n </div>\n </>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cn } from '@/lib/utils';\n\nexport function EmptyTrayIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n width='64'\n height='41'\n viewBox='0 0 64 41'\n fill='none'\n aria-hidden\n className={cn('shrink-0', className)}\n >\n <g clipPath='url(#clip0_19425_37257)'>\n <path\n d='M32 41C49.6731 41 64 37.866 64 34C64 30.134 49.6731 27 32 27C14.3269 27 0 30.134 0 34C0 37.866 14.3269 41 32 41Z'\n fill='#F5F5F5'\n />\n <path\n d='M55 13.76L44.854 2.258C44.367 1.474 43.656 1 42.907 1H21.093C20.344 1 19.633 1.474 19.146 2.257L9 13.761V23H55V13.76Z'\n stroke='#D9D9D9'\n />\n <path\n d='M41.613 16.931C41.613 15.326 42.607 14.001 43.84 14H55V32.137C55 34.26 53.68 36 52.05 36H11.95C10.32 36 9 34.259 9 32.137V14H20.16C21.393 14 22.387 15.323 22.387 16.928V16.95C22.387 18.555 23.392 19.851 24.624 19.851H39.376C40.608 19.851 41.613 18.543 41.613 16.938V16.931Z'\n fill='#FAFAFA'\n stroke='#D9D9D9'\n />\n </g>\n <defs>\n <clipPath id='clip0_19425_37257'>\n <rect width='64' height='41' fill='white' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import * as React from 'react';\nimport { EmptyTrayIcon } from '@/components/icons/custom/empty-tray';\nimport { cn } from '@/lib/utils';\n\ninterface EmptyProps {\n image?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Empty({ image, description, children, className }: EmptyProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center gap-4 py-16',\n className,\n )}\n >\n {image !== undefined ? image : <EmptyTrayIcon />}\n\n {description && (\n <p className='text-center text-sm leading-xs text-muted-foreground whitespace-pre-line'>\n {description}\n </p>\n )}\n\n {children && (\n <div className='flex items-center gap-2'>{children}</div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── FilledSquareMinus ────────────────────────────────────────────────────────\n// Indeterminate state indicator: filled square + white horizontal dash.\n// Same geometry as FilledSquareCheck.\n\nfunction FilledSquareMinus({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={cn(className)}\n aria-hidden\n >\n <rect\n x='2.5'\n y='2.5'\n width='15'\n height='15'\n rx='1.66667'\n fill='currentColor'\n stroke='currentColor'\n strokeWidth='1.5'\n />\n <path\n d='M7 10H13'\n stroke='white'\n strokeWidth='1.5'\n strokeLinecap='round'\n />\n </svg>\n );\n}\n\n// ─── FilledSquareCheck ────────────────────────────────────────────────────────\n// Figma lucide/square-check: filled square background + white stroke checkmark\n// Standard lucide SquareCheck is stroke-only; Figma uses the filled variant.\n// Shared by Checkbox and Label components.\n//\n// Coordinates derived from Figma node 73-4564 asset analysis:\n// - 20×20 viewBox, filled rect 15×15 at (2.5, 2.5), rx=1.66667\n// - White check path strokeWidth=1.25px (Figma imgVector2 reference)\n\nfunction FilledSquareCheck({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={cn(className)}\n aria-hidden\n >\n <rect\n x='2.5'\n y='2.5'\n width='15'\n height='15'\n rx='1.66667'\n fill='currentColor'\n stroke='currentColor'\n strokeWidth='1.5'\n />\n <path\n d='M7.5 10L9.16667 11.66667L12.5 8.33333'\n stroke='white'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeDasharray='8'\n style={{\n animation:\n 'check-draw 160ms cubic-bezier(0.23, 1, 0.32, 1) 40ms both',\n }}\n />\n </svg>\n );\n}\n\n// ─── Checkbox ─────────────────────────────────────────────────────────────────\n// Figma node 73-4564\n// Icon size: 20×20 (size-5)\n// Unchecked: lucide/square — stroke outline square (Square icon, text-foreground)\n// Checked: lucide/square-check filled — FilledSquareCheck (filled bg + white check)\n//\n// Optional label + description props:\n// - Without label: renders only the CheckboxPrimitive.Root (className → root)\n// - With label: renders a wrapper row with label/description (className → wrapper)\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n /** Optional label rendered to the right of the checkbox */\n label?: string;\n /** Optional description rendered below the label (requires label) */\n description?: string;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, id, label, description, disabled, ...props }, ref) => {\n const checkboxRoot = (\n <CheckboxPrimitive.Root\n ref={ref}\n id={id}\n disabled={disabled}\n className={cn(\n 'group peer relative size-5 shrink-0 cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed',\n // When standalone (no label), disabled opacity lives here\n !label && 'disabled:opacity-50',\n // When description is present, nudge down to align with first line of text\n label && description && 'mt-0.5',\n !label && className,\n )}\n {...props}\n >\n {/* Unchecked icon — hidden when Root has data-state=checked */}\n <Icon\n name='square'\n className='size-5 text-border group-data-[state=checked]:hidden'\n />\n {/* Checked/indeterminate indicator — mounts for both states */}\n <CheckboxPrimitive.Indicator className='absolute inset-0 flex items-center justify-center animate-checkbox-in'>\n {props.checked === 'indeterminate' ? (\n <FilledSquareMinus className='size-5 text-foreground' />\n ) : (\n <FilledSquareCheck className='size-5 text-foreground' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n\n if (!label) return checkboxRoot;\n\n return (\n <label\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n className,\n )}\n >\n {checkboxRoot}\n <div className='flex flex-col gap-2'>\n <span className='text-sm font-medium leading-5 tracking-tight text-foreground select-none'>\n {label}\n </span>\n {description && (\n <p className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </p>\n )}\n </div>\n </label>\n );\n});\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\n// ─── CheckboxCard ──────────────────────────────────────────────────────────────\n// Figma variant: card with border-border (unchecked) → border-primary (checked)\n// CSS has() reacts to inner Checkbox's data-state without extra JS state\n\nexport interface CheckboxCardProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n /** Main label text */\n label: string;\n /** Optional description below the label */\n description?: string;\n}\n\nconst CheckboxCard = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxCardProps\n>(({ className, id, label, description, disabled, ...props }, ref) => (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer gap-2 items-start rounded-lg border border-border bg-background p-3',\n 'transition-colors',\n // has() — card border switches to primary when inner checkbox is checked\n 'has-[[data-state=checked]]:border-primary',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n >\n <Checkbox\n ref={ref}\n id={id}\n disabled={disabled}\n className='mt-0.5'\n {...props}\n />\n <div className='flex flex-col gap-2 flex-1 min-w-0'>\n <span className='text-sm font-medium leading-5 tracking-tight text-foreground'>\n {label}\n </span>\n {description && (\n <span className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </span>\n )}\n </div>\n </label>\n));\nCheckboxCard.displayName = 'CheckboxCard';\n\nexport { Checkbox, CheckboxCard };\n","\"use client\";\n\nimport React, { createContext, useContext, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface ChoiceCardGroupCtx {\n value: string;\n onChange: (value: string) => void;\n}\n\nconst ChoiceCardGroupContext = createContext<ChoiceCardGroupCtx>({\n value: \"\",\n onChange: () => {},\n});\n\n// ─── ChoiceCardGroup ──────────────────────────────────────────────────────────\n// 카드형 라디오 그룹 컨테이너\n// 비제어(defaultValue) / 제어(value + onValueChange) 모드 모두 지원\n\nexport interface ChoiceCardGroupProps {\n /** 초기 선택값 (비제어 모드) */\n defaultValue?: string;\n /** 선택값 (제어 모드) */\n value?: string;\n /** 선택 변경 콜백 */\n onValueChange?: (value: string) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction ChoiceCardGroup({\n defaultValue = \"\",\n value: controlledValue,\n onValueChange,\n className,\n children,\n}: ChoiceCardGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const onChange = (v: string) => {\n if (!isControlled) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <ChoiceCardGroupContext.Provider value={{ value, onChange }}>\n <div className={cn(\"flex flex-col gap-3\", className)} role=\"radiogroup\">\n {children}\n </div>\n </ChoiceCardGroupContext.Provider>\n );\n}\n\n// ─── ChoiceCardItem ───────────────────────────────────────────────────────────\n// 개별 선택 카드\n//\n// 선택됨 : bg-background border-primary — 라디오 인디케이터 활성 (Figma 1188-5356)\n// 미선택 : bg-background border-border — 라디오 인디케이터 비활성\n\nexport interface ChoiceCardItemProps {\n /** 그룹 내 고유 값 */\n value: string;\n /** 카드 제목 */\n title: string;\n /** 카드 설명 (선택) */\n description?: string;\n className?: string;\n}\n\nfunction ChoiceCardItem({\n value,\n title,\n description,\n className,\n}: ChoiceCardItemProps) {\n const { value: groupValue, onChange } = useContext(ChoiceCardGroupContext);\n const isSelected = groupValue === value;\n\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onChange(value)}\n className={cn(\n \"flex items-center gap-3 overflow-hidden rounded-lg border p-4 text-left transition-colors\",\n isSelected\n ? \"border-primary bg-background\"\n : \"border-border bg-background hover:bg-secondary\"\n )}\n >\n {/* 텍스트 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5 min-w-0\">\n <p className=\"text-sm font-medium tracking-tight text-foreground\">\n {title}\n </p>\n {description && (\n <p className=\"text-xs tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* 라디오 인디케이터 */}\n <div\n className={cn(\n \"mt-px size-4 shrink-0 self-start rounded-full border shadow-button transition-colors\",\n isSelected ? \"border-ring\" : \"border-border bg-background\"\n )}\n >\n {isSelected && (\n <div className=\"mx-auto size-2 rounded-full bg-foreground\" style={{ marginTop: \"3px\" }} />\n )}\n </div>\n </button>\n );\n}\n\nexport { ChoiceCardGroup, ChoiceCardItem };\n","\"use client\";\n\n// ─── Collapsible ──────────────────────────────────────────────────────────────\n//\n// 피그마 노드: 73-4665\n//\n// 워크스페이스 전환용 콜랩서블 컴포넌트.\n// 트리거(아바타 + 이름 + 뱃지 + ChevronsUpDown)를 클릭하면\n// 워크스페이스 목록 드롭다운이 열린다.\n//\n// 사용 예시 (비제어):\n// <Collapsible\n// activeWorkspace={{ id: \"1\", name: \"박찬준\", badge: \"개인\", avatarText: \"박\" }}\n// workspaces={[...]}\n// onSelectWorkspace={(ws) => console.log(ws)}\n// onCreateTeam={() => {}}\n// />\n//\n// 사용 예시 (제어):\n// <Collapsible\n// activeWorkspace={...}\n// workspaces={[...]}\n// open={isOpen}\n// onOpenChange={setIsOpen}\n// />\n//\n// 기본 Radix 프리미티브가 필요한 경우:\n// import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent } from \"./collapsible\"\n\nimport * as React from \"react\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CollapsibleWorkspace {\n id: string;\n /** 워크스페이스 이름 */\n name: string;\n /** 뱃지 텍스트 (예: \"개인\", \"Enterprise\", \"Team\") */\n badge: string;\n /** 아바타에 표시할 텍스트 (미지정 시 name[0]) */\n avatarText?: string;\n /** 아바타 이미지 URL (지정 시 텍스트 대신 이미지 표시) */\n avatarSrc?: string;\n /**\n * 아바타 배경색\n * - \"sidebar-ring\" : 회색 (#6b7280) — 개인/기본\n * - \"chart-1\" : 파란색 (#3b82f6) — 팀/엔터프라이즈\n * @default \"sidebar-ring\"\n */\n avatarColor?: \"sidebar-ring\" | \"chart-1\";\n /** 현재 활성 워크스페이스 여부 (드롭다운에서 강조 + Check 표시) */\n isActive?: boolean;\n}\n\nexport interface CollapsibleProps {\n /** 트리거에 표시되는 현재 워크스페이스 */\n activeWorkspace: CollapsibleWorkspace;\n /**\n * 드롭다운에 표시할 워크스페이스 목록.\n * isActive=true인 항목이 강조(bg-accent + Check 아이콘)로 표시된다.\n */\n workspaces?: CollapsibleWorkspace[];\n /** 제어 모드: 열림 상태 */\n open?: boolean;\n /** 제어 모드: 열림 상태 변경 콜백 */\n onOpenChange?: (open: boolean) => void;\n /** 비제어 모드: 초기 열림 상태 @default false */\n defaultOpen?: boolean;\n /** \"+ 팀 생성하기\" 클릭 콜백 */\n onCreateTeam?: () => void;\n /** 워크스페이스 항목 클릭 콜백 */\n onSelectWorkspace?: (workspace: CollapsibleWorkspace) => void;\n className?: string;\n}\n\n// ─── Internal: Avatar ────────────────────────────────────────────────────────\n\n/**\n * size=\"lg\" → 36×36 rounded-lg (트리거용, Figma 기본)\n * size=\"md\" → 32×32 rounded-md (드롭다운 목록용)\n */\nfunction CollapsibleAvatar({\n workspace,\n size = \"lg\",\n}: {\n workspace: CollapsibleWorkspace;\n size?: \"lg\" | \"md\";\n}) {\n const sizeClass = size === \"lg\" ? \"size-9 rounded-lg\" : \"size-8 rounded-md\";\n const bgClass =\n workspace.avatarColor === \"chart-1\" ? \"bg-chart-1\" : \"bg-sidebar-ring\";\n\n return (\n <div\n className={cn(\n \"relative overflow-hidden shrink-0 select-none\",\n sizeClass,\n bgClass,\n )}\n >\n {workspace.avatarSrc ? (\n <img\n src={workspace.avatarSrc}\n alt={workspace.name}\n className=\"absolute inset-0 size-full object-cover\"\n />\n ) : (\n <span className=\"absolute inset-0 flex items-center justify-center text-base font-medium leading-6 text-center text-white tracking-tight whitespace-nowrap\">\n {workspace.avatarText ?? workspace.name[0]}\n </span>\n )}\n </div>\n );\n}\n\n// ─── Internal: Badge ─────────────────────────────────────────────────────────\n\nfunction CollapsibleBadge({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"bg-background border border-border flex gap-1 h-5.5 items-center justify-center px-2.5 py-0.5 rounded-lg shrink-0\">\n <span className=\"text-xs font-medium leading-xs text-foreground text-center tracking-tight whitespace-nowrap\">\n {children}\n </span>\n </div>\n );\n}\n\n// ─── ChevronsUpDown Icon (Figma node 4724-41809, stroke-width: 1, size: 16×16) ─\n// inset: 16.67% 세로 / 29.17% 가로 — viewBox 0 0 9.58333 14.5833\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <div className={cn(\"overflow-hidden relative shrink-0 size-4\", className)}>\n <div className=\"absolute\" style={{ inset: \"16.67% 29.17%\" }}>\n <div className=\"absolute\" style={{ inset: \"-4.69% -7.5%\" }}>\n <img alt=\"\" aria-hidden src=\"/icons/chevrons-up-down.svg\" className=\"block max-w-none size-full\" />\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Collapsible ─────────────────────────────────────────────────────────────\n\nexport function Collapsible({\n activeWorkspace,\n workspaces = [],\n open,\n onOpenChange,\n defaultOpen = false,\n onCreateTeam,\n onSelectWorkspace,\n className,\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = open !== undefined ? open : internalOpen;\n\n function handleOpenChange(next: boolean) {\n setInternalOpen(next);\n onOpenChange?.(next);\n }\n\n return (\n <CollapsiblePrimitive.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(\"relative flex flex-col w-full\", className)}\n >\n {/* 외부 클릭 감지 backdrop */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-10\"\n onClick={() => handleOpenChange(false)}\n />\n )}\n {/* ── Trigger ─────────────────────────────────────────────── */}\n <CollapsiblePrimitive.Trigger asChild>\n <button\n className={cn(\n \"flex items-center justify-between pl-2 py-2 w-full rounded-md\",\n \"cursor-pointer transition-colors hover:bg-sidebar-accent\",\n \"data-[state=open]:bg-sidebar-accent\",\n )}\n >\n {/* 아바타 + 이름 + 뱃지 */}\n <div className=\"flex flex-1 gap-2 items-center min-w-0\">\n <CollapsibleAvatar workspace={activeWorkspace} size=\"lg\" />\n <div className=\"flex gap-1 items-center min-w-0 shrink-0\">\n <span className=\"text-base font-medium leading-6 text-foreground tracking-tight whitespace-nowrap\">\n {activeWorkspace.name}\n </span>\n <CollapsibleBadge>{activeWorkspace.badge}</CollapsibleBadge>\n </div>\n </div>\n {/* ChevronsUpDown — Figma: 32×32 button, 16×16 icon, stroke-width: 1 */}\n <div className=\"flex items-center justify-center rounded-lg shrink-0 size-8\">\n <ChevronsUpDownIcon />\n </div>\n </button>\n </CollapsiblePrimitive.Trigger>\n\n {/* ── Dropdown Panel ──────────────────────────────────────── */}\n {/* z-20으로 아래 콘텐츠를 오버레이, w-80 = 320px (Figma 스펙) */}\n <CollapsiblePrimitive.Content className={cn(\n \"absolute left-0 top-full z-20 pt-1 w-80\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 duration-200\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\",\n )}>\n <div className=\"bg-background border border-border rounded-xl shadow-sm px-2 py-2 flex flex-col gap-1\">\n\n {workspaces.map((ws) =>\n ws.isActive ? (\n /* ── 활성 워크스페이스 (강조 + Check 아이콘) ── */\n <div\n key={ws.id}\n className=\"flex items-center justify-between h-12 px-2 py-2 rounded-md bg-accent\"\n >\n {/* 아바타 + 이름 + 뱃지 */}\n <div className=\"flex gap-2 items-center\">\n <CollapsibleAvatar workspace={ws} size=\"md\" />\n <div className=\"flex gap-1 items-center\">\n <span className=\"text-sm text-foreground leading-5 tracking-tight whitespace-nowrap\">\n {ws.name}\n </span>\n <CollapsibleBadge>{ws.badge}</CollapsibleBadge>\n </div>\n </div>\n {/* Check 아이콘 */}\n <div className=\"flex items-center justify-center size-9 shrink-0\">\n <Icon name=\"check\" className=\"size-4 text-foreground\" />\n </div>\n </div>\n ) : (\n /* ── 비활성 워크스페이스 (클릭 가능) ── */\n <button\n key={ws.id}\n className=\"flex items-center w-full h-12 px-2 py-2 rounded-md hover:bg-accent transition-colors cursor-pointer\"\n onClick={() => onSelectWorkspace?.(ws)}\n >\n <div className=\"flex gap-2 items-center\">\n <CollapsibleAvatar workspace={ws} size=\"md\" />\n <div className=\"flex gap-1 items-center\">\n <span className=\"text-sm text-foreground leading-5 tracking-tight whitespace-nowrap\">\n {ws.name}\n </span>\n <CollapsibleBadge>{ws.badge}</CollapsibleBadge>\n </div>\n </div>\n </button>\n ),\n )}\n\n {/* ── \"+ 팀 생성하기\" ── */}\n <button\n className=\"flex items-center justify-center gap-2 w-full h-12 px-2 py-2 rounded-md hover:bg-accent transition-colors cursor-pointer\"\n onClick={onCreateTeam}\n >\n <Icon name=\"plus\" className=\"size-4 text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground leading-5 tracking-tight whitespace-nowrap\">\n 팀 생성하기\n </span>\n </button>\n </div>\n </CollapsiblePrimitive.Content>\n </CollapsiblePrimitive.Root>\n );\n}\n\n// ─── Re-export Radix primitives ───────────────────────────────────────────────\n// 완전한 커스텀 콘텐츠가 필요한 경우 이 프리미티브를 직접 사용한다.\n\nexport const CollapsibleRoot = CollapsiblePrimitive.Root;\nexport const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nexport const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\nimport { ChevronsUpDownIcon } from \"@/components/icons/custom/chevrons-up-down\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n /** Unique identifier for the option */\n value: string;\n /** Display text shown in the list and trigger */\n label: string;\n /** Optional icon rendered before the label (16×16) */\n icon?: React.ReactNode;\n}\n\nexport interface ComboboxProps {\n /** List of selectable options */\n options: ComboboxOption[];\n /** Controlled selected value */\n value?: string;\n /** Callback when selection changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text shown when no value is selected */\n placeholder?: string;\n /** Placeholder inside the search input */\n searchPlaceholder?: string;\n /** Whether to show the search input (default: false) */\n showSearch?: boolean;\n /** Optional footer action at the bottom (e.g. \"+ 새 컬렉션 만들기\") */\n footer?: { label: string; onClick: () => void };\n /** Additional className for the trigger button */\n className?: string;\n /** Disable the combobox */\n disabled?: boolean;\n}\n\n// ─── Combobox ─────────────────────────────────────────────────────────────────\n// Figma nodes: 3580-11925 (combobox examples), 3824-7499 (usage in page)\n//\n// Trigger: h-9, w-full, border, rounded-[--radius-md], px-3 py-2, gap-2\n// selected → font-medium text-foreground\n// empty → font-normal text-muted-foreground\n// Dropdown: w-[var(--radix-popover-trigger-width)], border, rounded-[--radius-md],\n// shadow-md (0,4,6 + 0,2,4), bg-popover\n// Search: border-b, px-3, gap-2, Search 16px + input py-2\n// Items: p-1 wrapper; each item px-2 py-1.5 gap-2 rounded-sm\n// Active: bg-accent text-accent-foreground + Check icon right\n// Footer: Plus icon + label, text-muted-foreground\n\nexport function Combobox({\n options,\n value,\n onValueChange,\n placeholder = \"선택해 주세요\",\n searchPlaceholder = \"검색해 보세요\",\n showSearch = false,\n footer,\n className,\n disabled = false,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Filter options by search query (only when showSearch is true)\n const filtered = React.useMemo(\n () =>\n showSearch && search.trim()\n ? options.filter((opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options,\n [options, search, showSearch],\n );\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n function handleOpenChange(next: boolean) {\n setOpen(next);\n if (!next) setSearch(\"\");\n }\n\n React.useEffect(() => {\n if (open && showSearch) {\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open, showSearch]);\n\n function handleSelect(optionValue: string) {\n onValueChange?.(optionValue === value ? \"\" : optionValue);\n setOpen(false);\n setSearch(\"\");\n }\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n {/* ── Trigger ─────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 py-2\",\n \"cursor-pointer transition-colors hover:bg-accent\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {/* Icon + Label */}\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n {selectedOption?.icon && (\n <span className=\"shrink-0 flex items-center\">\n {selectedOption.icon}\n </span>\n )}\n <span\n className={cn(\n \"flex-1 min-w-0 truncate text-left text-sm leading-5 tracking-tight\",\n selectedOption\n ? \"font-medium text-foreground\"\n : \"font-normal text-muted-foreground\",\n )}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n </span>\n {/* Chevrons */}\n <ChevronsUpDownIcon className=\"size-4 text-muted-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n\n {/* ── Dropdown ────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: \"var(--radix-popover-trigger-width)\" }}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-border bg-popover\",\n \"shadow-dropdown\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"duration-200 data-[state=closed]:duration-150\",\n )}\n >\n {/* Optional search row */}\n {showSearch && (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Icon name=\"search\" className=\"size-4 text-muted-foreground\" />\n <input\n ref={inputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"flex-1 min-w-0 py-2 bg-transparent outline-none text-sm font-normal leading-5 tracking-tight text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n )}\n\n {/* Options list */}\n <div className=\"p-1 flex flex-col overflow-y-auto\" style={{ maxHeight: 384 }}>\n {filtered.length === 0 ? (\n <p className=\"px-2 py-1.5 text-sm text-muted-foreground text-center\">\n 결과 없음\n </p>\n ) : (\n filtered.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => handleSelect(opt.value)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5\",\n \"text-sm font-normal leading-5 tracking-tight\",\n \"cursor-pointer transition-colors\",\n isSelected\n ? \"bg-accent text-accent-foreground\"\n : \"text-popover-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n >\n {opt.icon && (\n <span className=\"shrink-0 flex items-center\">\n {opt.icon}\n </span>\n )}\n <span className=\"flex-1 min-w-0 truncate text-left\">\n {opt.label}\n </span>\n {isSelected && <Icon name=\"check\" className=\"size-4 text-foreground\" />}\n </button>\n );\n })\n )}\n\n {/* Optional footer action */}\n {footer && (\n <button\n type=\"button\"\n onClick={() => {\n footer.onClick();\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm font-normal leading-5 tracking-tight text-muted-foreground hover:bg-accent hover:text-accent-foreground cursor-pointer transition-colors\"\n >\n <Icon name=\"plus\" className=\"size-4 text-muted-foreground\" />\n <span className=\"flex-1 min-w-0 truncate text-left\">\n {footer.label}\n </span>\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface ChevronsUpDownIconProps {\n className?: string;\n}\n\n/**\n * Chevrons-up-down icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:607 (lucide/chevrons-up-down)\n */\nexport function ChevronsUpDownIcon({ className }: ChevronsUpDownIconProps) {\n return (\n <svg\n viewBox=\"-6.25 -3.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 11.75L5.75 16.75L10.75 11.75M0.75 5.75L5.75 0.75L10.75 5.75\" />\n </svg>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DatePickerLocale = 'ko' | 'en' | 'jp';\nexport type DatePickerMode = 'date' | 'offset';\n\nexport interface DatePickerProps {\n /** Controlled value */\n value?: Date;\n /** Uncontrolled default value */\n defaultValue?: Date;\n /** Called when user selects a date */\n onChange?: (date: Date | undefined) => void;\n /**\n * 'date' — trigger shows formatted date (e.g. \"June 01, 2025\")\n * 'offset' — trigger shows days-from-today (e.g. \"In 2 days\")\n */\n mode?: DatePickerMode;\n /** When true, dates before today cannot be selected and prev-month nav is blocked at current month */\n disablePast?: boolean;\n locale?: DatePickerLocale;\n /** Override the placeholder shown when no date is selected */\n placeholder?: string;\n /**\n * Receives the selected date and returns a helper string rendered below the trigger.\n * Only shown when mode='offset' and a date is selected.\n */\n className?: string;\n /**\n * [minYear, maxYear] for the year dropdown.\n * Defaults to [currentYear - 10, currentYear + 10].\n */\n yearRange?: [number, number];\n /** When true, shows locale-specific \"Today\" label instead of formatted date when today is selected */\n showTodayLabel?: boolean;\n disabled?: boolean;\n}\n\n// ─── Locale Config ────────────────────────────────────────────────────────────\n\ninterface LocaleConfig {\n dayHeaders: string[];\n formatYear: (y: number) => string;\n formatMonth: (m: number) => string;\n formatTriggerDate: (d: Date) => string;\n formatOffset: (days: number) => string;\n defaultPlaceholder: string;\n}\n\nconst EN_MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst LOCALE_CONFIG: Record<DatePickerLocale, LocaleConfig> = {\n en: {\n dayHeaders: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n formatYear: (y) => `${y}`,\n formatMonth: (m) => EN_MONTHS[m],\n formatTriggerDate: (d) =>\n `${EN_MONTHS[d.getMonth()]} ${String(d.getDate()).padStart(2, '0')}, ${d.getFullYear()}`,\n formatOffset: (days) => {\n if (days === 0) return 'Today';\n if (days === 1) return 'In 1 day';\n return `In ${days} days`;\n },\n defaultPlaceholder: 'Select a date',\n },\n ko: {\n dayHeaders: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n formatYear: (y) => `${y}년`,\n formatMonth: (m) => `${m + 1}월`,\n formatTriggerDate: (d) =>\n `${d.getFullYear()}년 ${d.getMonth() + 1}월 ${d.getDate()}일`,\n formatOffset: (days) => {\n if (days === 0) return '오늘';\n return `${days}일 후`;\n },\n defaultPlaceholder: '날짜 선택',\n },\n jp: {\n dayHeaders: ['日', '月', '火', '水', '木', '金', '土'],\n formatYear: (y) => `${y}年`,\n formatMonth: (m) => `${m + 1}月`,\n formatTriggerDate: (d) =>\n `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`,\n formatOffset: (days) => {\n if (days === 0) return '今日';\n return `${days}日後`;\n },\n defaultPlaceholder: '日付を選択',\n },\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nfunction diffDays(selected: Date, today: Date): number {\n return Math.round(\n (startOfDay(selected).getTime() - startOfDay(today).getTime()) / 86_400_000,\n );\n}\n\n// ─── CalendarGrid ─────────────────────────────────────────────────────────────\n\ninterface CalendarGridProps {\n year: number;\n month: number;\n selected: Date | undefined;\n today: Date;\n disablePast: boolean;\n onSelect: (date: Date) => void;\n onYearChange: (y: number) => void;\n onMonthChange: (m: number) => void;\n locale: DatePickerLocale;\n yearRange: [number, number];\n}\n\nfunction CalendarGrid({\n year,\n month,\n selected,\n today,\n disablePast,\n onSelect,\n onYearChange,\n onMonthChange,\n locale,\n yearRange,\n}: CalendarGridProps) {\n const config = LOCALE_CONFIG[locale];\n const todayStart = startOfDay(today);\n const selectedStart = selected ? startOfDay(selected) : null;\n\n // Calendar grid: 6 rows × 7 cols = 42 cells\n const firstDay = new Date(year, month, 1).getDay(); // 0 = Sunday\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n type Cell = { day: number; currentMonth: boolean; date: Date };\n const cells: Cell[] = [];\n\n for (let i = firstDay - 1; i >= 0; i--) {\n const day = daysInPrevMonth - i;\n cells.push({\n day,\n currentMonth: false,\n date: new Date(year, month - 1, day),\n });\n }\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ day: d, currentMonth: true, date: new Date(year, month, d) });\n }\n for (let d = 1; cells.length < 42; d++) {\n cells.push({\n day: d,\n currentMonth: false,\n date: new Date(year, month + 1, d),\n });\n }\n\n const years = Array.from(\n { length: yearRange[1] - yearRange[0] + 1 },\n (_, i) => yearRange[0] + i,\n );\n\n function prevMonth() {\n if (month === 0) {\n onYearChange(year - 1);\n onMonthChange(11);\n } else onMonthChange(month - 1);\n }\n\n function nextMonth() {\n if (month === 11) {\n onYearChange(year + 1);\n onMonthChange(0);\n } else onMonthChange(month + 1);\n }\n\n // Disable \"prev\" when going back would reach a month entirely in the past\n const prevYear = month === 0 ? year - 1 : year;\n const prevMon = month === 0 ? 11 : month - 1;\n const isPrevDisabled =\n disablePast &&\n (prevYear < today.getFullYear() ||\n (prevYear === today.getFullYear() && prevMon < today.getMonth()));\n\n return (\n <div className='px-5 pt-3 pb-4'>\n {/* ── Navigation header ─────────────────────────────────────── */}\n <div className='mb-4 flex items-center justify-between'>\n <button\n type='button'\n onClick={prevMonth}\n disabled={isPrevDisabled}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isPrevDisabled\n ? 'text-muted-foreground opacity-30 cursor-not-allowed'\n : 'text-foreground hover:bg-accent active:bg-accent cursor-pointer',\n )}\n >\n <Icon name='chevron-left' className='size-4' />\n </button>\n\n <div className='flex items-center gap-1.5'>\n {/* Year select */}\n <div className='relative'>\n <select\n value={year}\n onChange={(e) => onYearChange(Number(e.target.value))}\n className='h-8 appearance-none rounded-lg border border-border bg-background pl-3 pr-6 text-sm font-medium text-foreground transition-colors hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n {years.map((y) => (\n <option key={y} value={y}>\n {config.formatYear(y)}\n </option>\n ))}\n </select>\n <Icon\n name='chevron-down'\n className='pointer-events-none absolute right-1.5 top-1/2 size-3 -translate-y-1/2 text-foreground'\n />\n </div>\n\n {/* Month select */}\n <div className='relative'>\n <select\n value={month}\n onChange={(e) => onMonthChange(Number(e.target.value))}\n className='h-8 appearance-none rounded-lg border border-border bg-background pl-3 pr-6 text-sm font-medium text-foreground transition-colors hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n {Array.from({ length: 12 }, (_, i) => (\n <option key={i} value={i}>\n {config.formatMonth(i)}\n </option>\n ))}\n </select>\n <Icon\n name='chevron-down'\n className='pointer-events-none absolute right-1.5 top-1/2 size-3 -translate-y-1/2 text-foreground'\n />\n </div>\n </div>\n\n <button\n type='button'\n onClick={nextMonth}\n className='flex size-8 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent active:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n <Icon name='chevron-right' className='size-4' />\n </button>\n </div>\n\n {/* ── Day-of-week headers ────────────────────────────────────── */}\n <div className='mb-1 grid grid-cols-7 gap-1'>\n {config.dayHeaders.map((d) => (\n <div\n key={d}\n className='flex h-10 items-center justify-center text-sm font-normal leading-xs text-muted-foreground'\n >\n {d}\n </div>\n ))}\n </div>\n\n {/* ── Date grid ─────────────────────────────────────────────── */}\n <div className='grid grid-cols-7 gap-1'>\n {cells.map(({ day, currentMonth, date }) => {\n const dateStart = startOfDay(date);\n const isSelected = selectedStart?.getTime() === dateStart.getTime();\n const isToday = todayStart.getTime() === dateStart.getTime();\n const isPast = dateStart < todayStart;\n const isDisabled = disablePast && isPast;\n\n return (\n <button\n key={date.toISOString()}\n type='button'\n disabled={isDisabled}\n onClick={() => onSelect(date)}\n className={cn(\n 'flex aspect-square w-full items-center justify-center rounded-lg text-sm leading-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isSelected\n ? 'bg-foreground font-normal text-background hover:bg-foreground active:bg-foreground'\n : isDisabled\n ? 'cursor-not-allowed text-foreground opacity-50'\n : !currentMonth\n ? 'cursor-pointer text-foreground opacity-50 hover:bg-accent active:bg-accent'\n : 'cursor-pointer text-foreground hover:bg-accent active:bg-accent',\n isToday && !isSelected && 'border border-border',\n )}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ─── DatePicker ───────────────────────────────────────────────────────────────\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n mode = 'date',\n disablePast = false,\n locale = 'en',\n placeholder,\n className,\n yearRange,\n showTodayLabel = false,\n disabled = false,\n}: DatePickerProps) {\n const today = React.useMemo(() => new Date(), []);\n const config = LOCALE_CONFIG[locale];\n\n const [open, setOpen] = React.useState(false);\n const [selected, setSelected] = React.useState<Date | undefined>(\n defaultValue,\n );\n\n // Support both controlled (value prop) and uncontrolled (internal state)\n const activeDate = value !== undefined ? value : selected;\n\n const [viewYear, setViewYear] = React.useState(() =>\n (activeDate ?? today).getFullYear(),\n );\n const [viewMonth, setViewMonth] = React.useState(() =>\n (activeDate ?? today).getMonth(),\n );\n\n // Snap calendar view to active date whenever the popup opens\n const activeDateRef = React.useRef(activeDate);\n activeDateRef.current = activeDate;\n const todayRef = React.useRef(today);\n todayRef.current = today;\n\n React.useEffect(() => {\n if (open) {\n const d = activeDateRef.current ?? todayRef.current;\n setViewYear(d.getFullYear());\n setViewMonth(d.getMonth());\n }\n\n // Intentionally only runs on open/close; reads current values via refs\n }, [open]);\n\n const effectiveYearRange = React.useMemo<[number, number]>(\n () => yearRange ?? [today.getFullYear() - 10, today.getFullYear() + 10],\n [yearRange, today],\n );\n\n function handleSelect(date: Date) {\n if (value === undefined) setSelected(date);\n onChange?.(date);\n setOpen(false);\n }\n\n // ── Trigger display ──────────────────────────────────────────────\n let triggerText: string;\n let showCalendarIcon: boolean;\n\n if (!activeDate) {\n triggerText = placeholder ?? config.defaultPlaceholder;\n showCalendarIcon = false;\n } else if (mode === 'offset') {\n triggerText = config.formatOffset(diffDays(activeDate, today));\n showCalendarIcon = true;\n } else if (showTodayLabel && diffDays(activeDate, today) === 0) {\n triggerText = config.formatOffset(0); // \"오늘\" / \"Today\" / \"今日\"\n showCalendarIcon = true;\n } else {\n triggerText = config.formatTriggerDate(activeDate);\n showCalendarIcon = true;\n }\n\n return (\n <div className={cn(className)}>\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={disabled ? undefined : setOpen}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n type='button'\n disabled={disabled}\n className={cn(\n 'flex h-9 w-full items-center justify-between rounded-xl border border-border bg-background px-4',\n 'text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled\n ? 'bg-muted opacity-60 cursor-not-allowed'\n : 'hover:bg-accent cursor-pointer',\n !activeDate && 'text-muted-foreground',\n )}\n >\n <span className='truncate text-left'>{triggerText}</span>\n {showCalendarIcon ? (\n <Icon\n name='calendar'\n className='size-4 shrink-0 text-foreground'\n />\n ) : (\n <Icon\n name='chevron-down'\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align='start'\n sideOffset={4}\n style={{ minWidth: 'var(--radix-popover-trigger-width)' }}\n className={cn(\n 'z-50 w-64 rounded-2xl border border-border bg-background',\n 'shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'duration-200 data-[state=closed]:duration-150',\n )}\n >\n <CalendarGrid\n year={viewYear}\n month={viewMonth}\n selected={activeDate}\n today={today}\n disablePast={disablePast}\n onSelect={handleSelect}\n onYearChange={setViewYear}\n onMonthChange={setViewMonth}\n locale={locale}\n yearRange={effectiveYearRange}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── FieldLabel ───────────────────────────────────────────────────────────────\n// text-sm font-medium — 필드 레이블 (foreground)\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"label\">) {\n return (\n <label\n className={cn(\n \"text-sm font-medium tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ─── FieldDescription ─────────────────────────────────────────────────────────\n// text-sm regular — 보조 설명 (muted-foreground)\n\nfunction FieldDescription({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"p\">) {\n return (\n <p\n className={cn(\n \"text-sm tracking-tight text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ─── Field ────────────────────────────────────────────────────────────────────\n// 세로 스택: label → [hint] → children(control) → [description]\n//\n// hint : 컨트롤 위에 표시되는 보조 텍스트 (선택)\n// description : 컨트롤 아래에 표시되는 헬퍼 텍스트 (선택)\n\nexport interface FieldProps {\n /** 필드 레이블 */\n label?: string;\n /** 컨트롤 위 보조 텍스트 */\n hint?: string;\n /** 컨트롤 아래 헬퍼 텍스트 */\n description?: string;\n /** label 의 htmlFor — input id 와 연결 */\n htmlFor?: string;\n /** 필수 항목 표시 * */\n required?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Field({\n label,\n hint,\n description,\n htmlFor,\n required,\n className,\n children,\n}: FieldProps) {\n return (\n <div className={cn(\"flex flex-col gap-3\", className)}>\n {label && (\n <FieldLabel htmlFor={htmlFor}>\n {label}\n {required && (\n <span className=\"ml-0.5 text-destructive\" aria-hidden>\n *\n </span>\n )}\n </FieldLabel>\n )}\n {hint && <FieldDescription>{hint}</FieldDescription>}\n {children}\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n );\n}\n\n// ─── FieldSection ─────────────────────────────────────────────────────────────\n// 섹션 헤딩 + 설명 + (선택) 구분선 + 하위 필드\n//\n// titleSize : \"base\"(16px) | \"sm\"(14px) — Figma 에서 두 크기 모두 사용됨\n\nexport interface FieldSectionProps {\n title: string;\n description?: string;\n /** 섹션 헤더 하단 구분선 표시 여부 */\n showDivider?: boolean;\n /** 헤딩 텍스트 크기: \"base\"=16px (기본), \"sm\"=14px */\n titleSize?: \"base\" | \"sm\";\n className?: string;\n children?: React.ReactNode;\n}\n\nfunction FieldSection({\n title,\n description,\n showDivider = false,\n titleSize = \"base\",\n className,\n children,\n}: FieldSectionProps) {\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {/* 헤딩 블록 */}\n <div className=\"flex flex-col\">\n <p\n className={cn(\n \"pb-3 font-medium tracking-tight text-foreground\",\n titleSize === \"base\" ? \"text-base\" : \"text-sm\"\n )}\n >\n {title}\n </p>\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n\n {/* 구분선 + 하위 필드 */}\n {children && (\n <>\n {showDivider && <FieldDivider />}\n <div className=\"flex flex-col gap-7\">{children}</div>\n </>\n )}\n </div>\n );\n}\n\n// ─── FieldRow ─────────────────────────────────────────────────────────────────\n// 가로 레이아웃: [레이블 + 설명] (flex-1) | [컨트롤] (shrink-0)\n// Figma \"Responsive Layout\" 패턴 — 폼 섹션에서 레이블을 왼쪽에 고정\n\nexport interface FieldRowProps {\n label: string;\n description?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction FieldRow({ label, description, className, children }: FieldRowProps) {\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n {/* 레이블 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <p className=\"text-sm font-medium tracking-tight text-foreground\">\n {label}\n </p>\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n\n {/* 컨트롤 영역 */}\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ─── FieldDivider ─────────────────────────────────────────────────────────────\n// 섹션 간 구분선 — border-border 1px 가로선\n\nfunction FieldDivider({ className }: { className?: string }) {\n return (\n <div className={cn(\"flex h-5 items-center\", className)}>\n <div className=\"h-px w-full border-t border-border\" />\n </div>\n );\n}\n\nexport { Field, FieldSection, FieldRow, FieldDivider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu, Popover } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface NavDropdownItem {\n label: string;\n icon?: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface HeaderNavItem {\n label: string;\n href?: string;\n active?: boolean;\n onClick?: () => void;\n /** 하위 드롭다운 아이템이 있으면 클릭 시 드롭다운 오픈 */\n dropdownItems?: NavDropdownItem[];\n}\n\nexport interface UserMenuSectionItem {\n label: string;\n icon?: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"destructive\";\n}\n\nexport interface UserMenuSection {\n /** 섹션 헤더 레이블 (생략 시 레이블 없음) */\n label?: string;\n items: UserMenuSectionItem[];\n}\n\nexport interface NotificationItem {\n id: string;\n badge?: string;\n date?: string;\n title: string;\n description: string;\n highlighted?: boolean; // bg-secondary 강조\n}\n\nexport interface LanguageItem {\n code: string;\n label: string;\n /** 국기 이모지 */\n flag: string;\n}\n\nexport interface HeaderProps {\n logo?: React.ReactNode;\n brandName?: string;\n navItems?: HeaderNavItem[];\n upgradeLabel?: string;\n onUpgrade?: () => void;\n userEmail?: string;\n userMenuSections?: UserMenuSection[];\n notifications?: NotificationItem[];\n onViewAllNotifications?: () => void;\n hasNotification?: boolean;\n languages?: LanguageItem[];\n currentLanguage?: string;\n onLanguageChange?: (code: string) => void;\n className?: string;\n}\n\n\n// ─── Shared dropdown panel styles ─────────────────────────────────────────────\n// Figma: bg-popover, border, rounded-md, shadow-dropdown, max-h-416px\n\nconst PANEL_CLS =\n \"z-50 overflow-hidden rounded-md border border-border bg-popover shadow-dropdown\" +\n \" animate-in fade-in-0 zoom-in-95 duration-200\" +\n \" data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\";\n\n// ─── DropdownSectionLabel ─────────────────────────────────────────────────────\n// Figma: h-8, px-2, py-1.5, text-sm/Medium, popover-foreground\n\nfunction DropdownSectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-8 items-center px-2 py-1.5\">\n <span className=\"text-sm font-medium tracking-tight text-popover-foreground\">\n {children}\n </span>\n </div>\n );\n}\n\n// ─── DropdownMenuRow ──────────────────────────────────────────────────────────\n// Figma: px-2, py-1.5, rounded-sm, gap-2.5, text-sm/Regular\n\ninterface DropdownMenuRowProps {\n icon?: string;\n children: React.ReactNode;\n variant?: \"default\" | \"destructive\";\n href?: string;\n onSelect?: () => void;\n className?: string;\n}\n\nfunction DropdownMenuRow({\n icon,\n children,\n variant = \"default\",\n href,\n onSelect,\n className,\n}: DropdownMenuRowProps) {\n const itemClassName = cn(\n \"flex cursor-pointer select-none items-center gap-2.5 rounded-sm px-2 py-1.5 outline-none\",\n \"text-sm font-normal tracking-tight\",\n \"transition-colors focus:bg-accent data-[highlighted]:bg-accent\",\n variant === \"destructive\"\n ? \"text-destructive\"\n : \"text-popover-foreground\",\n className,\n );\n const content = (\n <>\n {icon && <Icon name={icon} className=\"size-4 text-foreground\" />}\n {children}\n </>\n );\n if (href) {\n return (\n <DropdownMenu.Item asChild onSelect={onSelect}>\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={itemClassName}>\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n return (\n <DropdownMenu.Item onSelect={onSelect} className={itemClassName}>\n {content}\n </DropdownMenu.Item>\n );\n}\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n// Figma node 4679-24453 + dropdown cases 4679-25199\n\nexport function Header({\n logo,\n brandName = \"\",\n navItems = [],\n upgradeLabel = \"\",\n onUpgrade,\n userEmail = \"\",\n userMenuSections = [],\n notifications = [],\n onViewAllNotifications,\n hasNotification = false,\n languages = [],\n currentLanguage = \"\",\n onLanguageChange,\n className,\n}: HeaderProps) {\n return (\n <header\n className={cn(\n \"flex w-full items-center justify-between px-6 py-4 shrink-0\",\n \"bg-background border-b border-border z-10\",\n className,\n )}\n >\n {/* ── Left: 로고 + 브랜드명 + 네비게이션 ───────────────────────────── */}\n <div className=\"flex items-center gap-4\">\n {(logo || brandName) && (\n <div className=\"flex items-center gap-2.5 shrink-0\">\n {logo}\n {brandName && (\n <span className=\"text-xl font-bold tracking-tight text-foreground whitespace-nowrap\">\n {brandName}\n </span>\n )}\n </div>\n )}\n\n <nav className=\"flex items-center gap-2\" aria-label=\"주요 메뉴\">\n {navItems.map((item) =>\n item.dropdownItems?.length ? (\n // 드롭다운이 있는 nav 아이템 (예: 스토어)\n <DropdownMenu.Root key={item.label}>\n <DropdownMenu.Trigger\n className={cn(\n \"flex h-9 items-center justify-center rounded-lg px-3 py-2 outline-none\",\n \"text-sm font-medium tracking-tight whitespace-nowrap transition-colors\",\n item.active\n ? \"bg-blue-50 text-blue-800\"\n : \"text-muted-foreground hover:bg-muted/60 hover:text-foreground\",\n // 드롭다운 열린 상태 — bg-accent\n \"data-[state=open]:bg-accent data-[state=open]:text-foreground\",\n )}\n >\n {item.label}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n className={cn(PANEL_CLS, \"w-50 py-1 px-1\")}\n style={{ maxHeight: \"416px\" }}\n >\n {/* 섹션 레이블 */}\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>{item.label}</DropdownSectionLabel>\n </DropdownMenu.Label>\n {item.dropdownItems.map((di) => (\n <DropdownMenuRow\n key={di.label}\n icon={di.icon}\n href={di.href}\n onSelect={di.onClick}\n >\n {di.label}\n </DropdownMenuRow>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n ) : (\n // 일반 nav 아이템\n <button\n key={item.label}\n type=\"button\"\n onClick={item.onClick}\n className={cn(\n \"flex h-9 items-center justify-center rounded-lg px-3 py-2\",\n \"text-sm font-medium tracking-tight whitespace-nowrap transition-colors\",\n item.active\n ? \"bg-blue-50 text-blue-800\"\n : \"text-muted-foreground hover:bg-muted/60 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* ── Right: CTA + 유저 + Bell + Globe ───────────────────────────────── */}\n <div className=\"flex items-center gap-2\">\n\n {/* CTA 버튼 */}\n <button\n type=\"button\"\n onClick={onUpgrade}\n className={cn(\n \"flex h-9 items-center gap-1.5 rounded-lg px-4 py-2 shrink-0\",\n \"bg-primary text-primary-foreground shadow-button\",\n \"text-sm font-medium tracking-tight whitespace-nowrap\",\n \"transition-opacity hover:opacity-90 active:opacity-80\",\n )}\n >\n <Icon name=\"circle-arrow-up\" className=\"size-4 text-primary-foreground\" />\n {upgradeLabel}\n </button>\n\n {/* ── 유저 드롭다운 ─────────────────────────────────────────────── */}\n <DropdownMenu.Root>\n <DropdownMenu.Trigger\n className={cn(\n \"flex h-9 items-center gap-1.5 rounded-lg border border-border bg-background\",\n \"pl-4 pr-3 py-2 shrink-0 outline-none\",\n \"text-sm font-normal tracking-tight text-foreground whitespace-nowrap\",\n \"transition-colors hover:bg-muted/60\",\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"user\" className=\"size-4 text-foreground\" />\n <span>{userEmail}</span>\n <Icon name=\"chevron-down\" className=\"size-4 text-foreground\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={4}\n className={cn(\n PANEL_CLS,\n )}\n style={{ minWidth: \"var(--radix-dropdown-menu-trigger-width)\", maxHeight: \"416px\" }}\n >\n {userMenuSections.map((section, si) => (\n <React.Fragment key={si}>\n {/* 섹션 간 구분선 */}\n {si > 0 && (\n <DropdownMenu.Separator className=\"my-1 h-px bg-border mx-1\" />\n )}\n <DropdownMenu.Group className=\"py-1 px-1\">\n {section.label && (\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>{section.label}</DropdownSectionLabel>\n </DropdownMenu.Label>\n )}\n {section.items.map((item) => (\n <DropdownMenuRow\n key={item.label}\n icon={item.icon}\n variant={item.variant}\n onSelect={item.onClick}\n >\n {item.label}\n </DropdownMenuRow>\n ))}\n </DropdownMenu.Group>\n </React.Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {/* ── Bell 알림 다이얼로그 (Popover) ───────────────────────────── */}\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"알림\"\n className={cn(\n \"relative flex size-9 items-center justify-center rounded-lg shrink-0 outline-none\",\n \"border border-border bg-background\",\n \"transition-colors hover:bg-muted/60\",\n // 열린 상태\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"bell\" className=\"size-4 text-foreground\" />\n {hasNotification && (\n <span\n aria-hidden\n className=\"absolute size-1.5 rounded-full bg-destructive\"\n style={{ right: \"5px\", top: \"5px\" }}\n />\n )}\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align=\"end\"\n sideOffset={4}\n className={cn(\n \"z-50 w-423 rounded-lg border border-border bg-background p-6\",\n \"shadow-dropdown\",\n \"animate-in fade-in-0 zoom-in-95 duration-200\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\",\n )}\n >\n {/* 헤더 */}\n <div className=\"mb-4 flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold tracking-tight text-foreground\">\n 서비스 업데이트\n </h3>\n <Popover.Close\n aria-label=\"닫기\"\n className=\"opacity-70 hover:opacity-100 transition-opacity\"\n >\n <Icon name=\"x\" className=\"size-4 text-foreground\" />\n </Popover.Close>\n </div>\n\n {/* 알림 목록 */}\n <div className=\"flex flex-col\">\n {notifications.map((n, i) => (\n <React.Fragment key={n.id}>\n {i > 0 && (\n <div className=\"flex h-6 items-center\">\n <hr className=\"w-full border-border\" />\n </div>\n )}\n <div\n className=\"flex flex-col gap-4 rounded-md p-3 cursor-pointer transition-colors hover:bg-secondary\"\n >\n {/* 배지 + 날짜 */}\n <div className=\"flex items-center justify-between\">\n {n.badge && (\n <span className=\"inline-flex h-5.5 items-center rounded-lg bg-amber-50 px-2.5 py-0.5 text-xs font-medium tracking-tight text-amber-700 whitespace-nowrap\">\n {n.badge}\n </span>\n )}\n {n.date && (\n <span className=\"text-sm font-normal tracking-tight text-muted-foreground\">\n {n.date}\n </span>\n )}\n </div>\n {/* 제목 + 설명 */}\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-base font-medium tracking-tight text-foreground whitespace-nowrap\">\n {n.title}\n </p>\n <p className=\"line-clamp-2 text-sm font-normal tracking-tight text-muted-foreground\">\n {n.description}\n </p>\n </div>\n </div>\n </React.Fragment>\n ))}\n </div>\n\n {/* 전체 내역 보기 버튼 */}\n <button\n type=\"button\"\n onClick={onViewAllNotifications}\n className={cn(\n \"mt-4 flex h-9 w-full items-center justify-center gap-1.5 rounded-lg\",\n \"border border-border bg-background\",\n \"text-sm font-medium tracking-tight text-foreground\",\n \"transition-colors hover:bg-muted/60\",\n )}\n >\n 전체 내역 보기\n <Icon name=\"chevron-right\" className=\"size-4 text-foreground\" />\n </button>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {/* ── Globe 언어 드롭다운 ───────────────────────────────────────── */}\n <DropdownMenu.Root>\n <DropdownMenu.Trigger\n aria-label=\"언어 선택\"\n className={cn(\n \"flex size-9 items-center justify-center rounded-lg shrink-0 outline-none\",\n \"border border-border bg-background\",\n \"transition-colors hover:bg-muted/60\",\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"globe\" className=\"size-4 text-foreground\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={4}\n className={cn(PANEL_CLS, \"w-50 py-1 px-1\")}\n style={{ maxHeight: \"416px\" }}\n >\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>언어</DropdownSectionLabel>\n </DropdownMenu.Label>\n {languages.map((lang) => (\n <DropdownMenu.Item\n key={lang.code}\n onSelect={() => onLanguageChange?.(lang.code)}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-2.5 rounded-sm px-2 py-1.5 outline-none\",\n \"text-sm font-normal tracking-tight text-popover-foreground\",\n \"transition-colors focus:bg-accent data-[highlighted]:bg-accent\",\n lang.code === currentLanguage && \"bg-accent/50\",\n )}\n >\n {/* 국기 이모지 — 16×12px 컨테이너에 맞춤 */}\n <span\n className=\"flex size-4 shrink-0 items-center justify-center overflow-hidden text-sm leading-none\"\n aria-hidden\n >\n {lang.flag}\n </span>\n {lang.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n </header>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none dark:bg-input/30\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"flex items-center gap-2 text-sm shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { FolderAmberIcon } from '@/components/icons/custom/folder-amber';\n\nexport interface KbCardMetadataItem {\n label: string;\n value: React.ReactNode;\n}\n\nexport interface KbCardProps {\n name: string;\n metadata?: KbCardMetadataItem[];\n icon?: React.ReactNode;\n /** 아이콘 우측 상단에 노출할 콘텐츠 (e.g. 스크랩 날짜). selectable 모드에서는 무시됨. */\n topRight?: React.ReactNode;\n selectable?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n /** 카드 클릭 핸들러. selectable(편집 모드)일 때는 동작하지 않음. */\n onClick?: () => void;\n className?: string;\n variant?: 'grid' | 'list';\n}\n\nexport function KbCard({\n name,\n metadata = [],\n icon,\n topRight,\n selectable = false,\n checked = false,\n onCheckedChange,\n onClick,\n className,\n variant = 'grid',\n}: KbCardProps) {\n const id = React.useId();\n const iconNode = icon ?? <FolderAmberIcon className='size-6' />;\n\n if (variant === 'list') {\n const listContent = (\n <>\n <div className='flex size-10 shrink-0 items-center justify-center rounded-xl bg-white shadow-[inset_0_0_0_0.5px_rgba(0,0,0,0.1),inset_0_2px_4px_rgba(0,0,0,0.1)]'>\n {iconNode}\n </div>\n <div className='flex flex-col gap-0.5 flex-1 min-w-0'>\n <p className='text-sm font-semibold leading-5 text-foreground line-clamp-1'>\n {name}\n </p>\n {metadata.length > 0 && (\n <p className='text-sm text-muted-foreground truncate'>\n {metadata.map((item) => item.value).join(' · ')}\n </p>\n )}\n </div>\n {selectable && (\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v) => onCheckedChange?.(!!v)}\n onClick={(e) => e.stopPropagation()}\n className='shrink-0'\n />\n )}\n </>\n );\n\n if (selectable) {\n return (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer items-center gap-3 rounded-2xl border border-border p-4',\n 'transition-[border-color,box-shadow] hover:shadow-md',\n 'has-[[data-state=checked]]:border-primary',\n className,\n )}\n >\n {listContent}\n </label>\n );\n }\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'flex items-center gap-3 rounded-2xl border border-border p-4',\n 'transition-shadow hover:shadow-md',\n onClick && 'cursor-pointer',\n className,\n )}\n >\n {listContent}\n </div>\n );\n }\n\n const cardBody = (\n <>\n <div className='flex flex-col justify-between'>\n <div className='flex items-center justify-between'>\n <div className='flex size-10 items-center justify-center rounded-xl bg-white shadow-[inset_0_0_0_0.5px_rgba(0,0,0,0.1),inset_0_2px_4px_rgba(0,0,0,0.1)]'>\n {iconNode}\n </div>\n {selectable ? (\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v) => onCheckedChange?.(!!v)}\n onClick={(e) => e.stopPropagation()}\n />\n ) : topRight ? (\n topRight\n ) : null}\n </div>\n <p className='text-sm font-semibold leading-5 text-foreground line-clamp-1 mt-2'>\n {name}\n </p>\n </div>\n {/* <div className='border-t border-border' /> */}\n {metadata.length > 0 && (\n <div className='flex flex-col gap-2'>\n {metadata.map((item) => (\n <div\n key={item.label}\n className='flex items-center justify-between gap-4'\n >\n <span className='text-sm text-muted-foreground'>\n {item.label}\n </span>\n <span className='text-sm text-foreground'>{item.value}</span>\n </div>\n ))}\n </div>\n )}\n </>\n );\n\n if (selectable) {\n return (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer flex-col gap-3 rounded-2xl border border-border p-4',\n 'transition-[border-color,box-shadow] hover:shadow-md',\n 'has-[[data-state=checked]]:border-primary',\n className,\n )}\n >\n {cardBody}\n </label>\n );\n }\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'flex flex-col justify-between rounded-2xl border border-border p-4 gap-3',\n 'transition-shadow hover:shadow-md',\n onClick && 'cursor-pointer',\n className,\n )}\n >\n {cardBody}\n </div>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderAmberIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFE386\" />\n <stop offset=\"1\" stopColor=\"#EAC448\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFE693\" />\n <stop offset=\"1\" stopColor=\"#FCC24D\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { MessageFooter } from '@/components/ui/message-footer';\n\n// ── Register common languages (tree-shaking) ──────────────────────────────────\nimport javascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript';\nimport typescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript';\nimport jsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';\nimport tsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx';\nimport python from 'react-syntax-highlighter/dist/esm/languages/prism/python';\nimport bash from 'react-syntax-highlighter/dist/esm/languages/prism/bash';\nimport json from 'react-syntax-highlighter/dist/esm/languages/prism/json';\nimport css from 'react-syntax-highlighter/dist/esm/languages/prism/css';\nimport markup from 'react-syntax-highlighter/dist/esm/languages/prism/markup';\nimport sql from 'react-syntax-highlighter/dist/esm/languages/prism/sql';\nimport go from 'react-syntax-highlighter/dist/esm/languages/prism/go';\nimport rust from 'react-syntax-highlighter/dist/esm/languages/prism/rust';\nimport java from 'react-syntax-highlighter/dist/esm/languages/prism/java';\nimport kotlin from 'react-syntax-highlighter/dist/esm/languages/prism/kotlin';\nimport swift from 'react-syntax-highlighter/dist/esm/languages/prism/swift';\nimport yaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml';\nimport markdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown';\nimport diff from 'react-syntax-highlighter/dist/esm/languages/prism/diff';\n\nSyntaxHighlighter.registerLanguage('javascript', javascript);\nSyntaxHighlighter.registerLanguage('js', javascript);\nSyntaxHighlighter.registerLanguage('typescript', typescript);\nSyntaxHighlighter.registerLanguage('ts', typescript);\nSyntaxHighlighter.registerLanguage('jsx', jsx);\nSyntaxHighlighter.registerLanguage('tsx', tsx);\nSyntaxHighlighter.registerLanguage('python', python);\nSyntaxHighlighter.registerLanguage('py', python);\nSyntaxHighlighter.registerLanguage('bash', bash);\nSyntaxHighlighter.registerLanguage('sh', bash);\nSyntaxHighlighter.registerLanguage('shell', bash);\nSyntaxHighlighter.registerLanguage('zsh', bash);\nSyntaxHighlighter.registerLanguage('json', json);\nSyntaxHighlighter.registerLanguage('css', css);\nSyntaxHighlighter.registerLanguage('html', markup);\nSyntaxHighlighter.registerLanguage('xml', markup);\nSyntaxHighlighter.registerLanguage('sql', sql);\nSyntaxHighlighter.registerLanguage('go', go);\nSyntaxHighlighter.registerLanguage('rust', rust);\nSyntaxHighlighter.registerLanguage('java', java);\nSyntaxHighlighter.registerLanguage('kotlin', kotlin);\nSyntaxHighlighter.registerLanguage('swift', swift);\nSyntaxHighlighter.registerLanguage('yaml', yaml);\nSyntaxHighlighter.registerLanguage('yml', yaml);\nSyntaxHighlighter.registerLanguage('markdown', markdown);\nSyntaxHighlighter.registerLanguage('md', markdown);\nSyntaxHighlighter.registerLanguage('diff', diff);\n\n// ── Syntax theme (GitHub Light inspired) ─────────────────────────────────────\nconst codeTheme: { [key: string]: React.CSSProperties } = {\n 'code[class*=\"language-\"]': { color: 'var(--syntax-default)', background: 'transparent' },\n 'pre[class*=\"language-\"]': { color: 'var(--syntax-default)', background: 'transparent', margin: 0, padding: 0 },\n comment: { color: 'var(--syntax-comment)', fontStyle: 'italic' },\n prolog: { color: 'var(--syntax-comment)' },\n doctype: { color: 'var(--syntax-comment)' },\n cdata: { color: 'var(--syntax-comment)' },\n punctuation: { color: 'var(--syntax-default)' },\n namespace: { color: 'var(--syntax-namespace)' },\n property: { color: 'var(--syntax-property)' },\n tag: { color: 'var(--syntax-tag)' },\n boolean: { color: 'var(--syntax-property)' },\n number: { color: 'var(--syntax-property)' },\n constant: { color: 'var(--syntax-property)' },\n symbol: { color: 'var(--syntax-property)' },\n deleted: { color: 'var(--syntax-deleted)' },\n selector: { color: 'var(--syntax-selector)' },\n 'attr-name': { color: 'var(--syntax-property)' },\n string: { color: 'var(--syntax-selector)' },\n char: { color: 'var(--syntax-selector)' },\n builtin: { color: 'var(--syntax-property)' },\n inserted: { color: 'var(--syntax-tag)' },\n operator: { color: 'var(--syntax-default)' },\n entity: { color: 'var(--syntax-namespace)' },\n url: { color: 'var(--syntax-selector)' },\n atrule: { color: 'var(--syntax-keyword)' },\n 'attr-value': { color: 'var(--syntax-selector)' },\n keyword: { color: 'var(--syntax-keyword)' },\n function: { color: 'var(--syntax-function)' },\n 'class-name': { color: 'var(--syntax-namespace)' },\n regex: { color: 'var(--syntax-selector)' },\n important: { color: 'var(--syntax-keyword)', fontWeight: 'bold' },\n variable: { color: 'var(--syntax-variable)' },\n bold: { fontWeight: 'bold' },\n italic: { fontStyle: 'italic' },\n};\n\n// ── Code block component ──────────────────────────────────────────────────────\n\nfunction CodeBlock({ lang, code }: { lang: string; code: string }) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n const displayLang = lang || 'text';\n\n return (\n <div className='relative group bg-secondary border border-border rounded-xl overflow-hidden'>\n {/* Lang label + copy button */}\n <div className='flex items-center justify-between px-3 py-2 border-b border-border'>\n <span\n className='text-xs leading-xs tracking-tight text-muted-foreground'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {displayLang}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className='flex items-center gap-1 px-2 py-1 rounded-md text-xs leading-xs tracking-tight text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer'\n aria-label='코드 복사'\n >\n {copied ? (\n <Icon name='check' className='size-3 text-foreground' />\n ) : (\n <Icon name='copy' className='size-3 text-muted-foreground' />\n )}\n {copied ? '복사됨' : '복사'}\n </button>\n </div>\n\n {/* Code content */}\n <div className='p-3 overflow-x-auto'>\n <SyntaxHighlighter\n language={displayLang}\n style={codeTheme}\n customStyle={{\n background: 'transparent',\n padding: 0,\n margin: 0,\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n }}\n codeTagProps={{\n style: {\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n },\n }}\n wrapLongLines={false}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n </div>\n );\n}\n\n// ── Inline parser: **bold**, *italic*, `code`, <br> ──────────────────────────\n\nfunction renderInline(text: string): React.ReactNode {\n // Normalise <br> → newline\n const normalized = text.replace(/<br\\s*\\/?>/gi, '\\n');\n\n const result: React.ReactNode[] = [];\n const regex = /\\*\\*(.+?)\\*\\*|\\*(.+?)\\*|`(.+?)`/g;\n let last = 0;\n let m: RegExpExecArray | null;\n let k = 0;\n\n const pushText = (raw: string) => {\n if (!raw) return;\n raw.split('\\n').forEach((line, i, arr) => {\n result.push(<React.Fragment key={k++}>{line}</React.Fragment>);\n if (i < arr.length - 1) result.push(<br key={k++} />);\n });\n };\n\n while ((m = regex.exec(normalized)) !== null) {\n pushText(normalized.slice(last, m.index));\n if (m[1] !== undefined) {\n result.push(\n <strong key={k++} className='font-semibold'>\n {m[1]}\n </strong>,\n );\n } else if (m[2] !== undefined) {\n result.push(\n <em key={k++} className='italic'>\n {m[2]}\n </em>,\n );\n } else if (m[3] !== undefined) {\n result.push(\n <code\n key={k++}\n className='text-sm bg-muted px-1 py-0.5 rounded'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {m[3]}\n </code>,\n );\n }\n last = regex.lastIndex;\n }\n pushText(normalized.slice(last));\n\n return result.length === 0 ? null : <>{result}</>;\n}\n\n// ── Block types ────────────────────────────────────────────────────────────────\n\ntype Block =\n | { type: 'heading'; level: 1 | 2 | 3; text: string }\n | { type: 'paragraph'; text: string }\n | { type: 'list'; ordered: boolean; items: string[] }\n | { type: 'table'; headers: string[]; rows: string[][] }\n | { type: 'codeblock'; lang: string; code: string }\n | { type: 'divider' };\n\n// ── Markdown → blocks parser ───────────────────────────────────────────────────\n\nfunction parseMarkdown(text: string): Block[] {\n const lines = text.split('\\n');\n const blocks: Block[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip blank lines\n if (!trimmed) {\n i++;\n continue;\n }\n\n // Code fence (``` or ~~~)\n if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) {\n const fence = trimmed.startsWith('```') ? '```' : '~~~';\n const langMatch = trimmed.match(/^[`~]{3}(\\w*)/);\n const lang = langMatch?.[1] ?? '';\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].trim().startsWith(fence)) {\n codeLines.push(lines[i]);\n i++;\n }\n i++; // skip closing fence\n blocks.push({ type: 'codeblock', lang, code: codeLines.join('\\n') });\n continue;\n }\n\n // Heading (#, ##, ###)\n const hm = trimmed.match(/^(#{1,3})\\s+(.+)$/);\n if (hm) {\n blocks.push({\n type: 'heading',\n level: Math.min(hm[1].length, 3) as 1 | 2 | 3,\n text: hm[2],\n });\n i++;\n continue;\n }\n\n // Horizontal rule (---+)\n if (/^-{3,}$/.test(trimmed)) {\n blocks.push({ type: 'divider' });\n i++;\n continue;\n }\n\n // Table (lines starting with |)\n if (trimmed.startsWith('|')) {\n const tableLines: string[] = [];\n while (i < lines.length && lines[i].trim().startsWith('|')) {\n tableLines.push(lines[i]);\n i++;\n }\n const splitRow = (row: string) =>\n row\n .split('|')\n .slice(1, -1)\n .map((c) => c.trim());\n const isSep = (row: string) => /^[\\s|:=-]+$/.test(row);\n\n if (tableLines.length >= 1) {\n const headers = splitRow(tableLines[0]);\n const dataStart =\n tableLines.length >= 2 && isSep(tableLines[1]) ? 2 : 1;\n const rows = tableLines.slice(dataStart).map(splitRow);\n if (headers.some(Boolean)) {\n blocks.push({ type: 'table', headers, rows });\n }\n }\n continue;\n }\n\n // Unordered list (-, *, +)\n if (/^[-*+] /.test(trimmed)) {\n const items: string[] = [];\n while (i < lines.length && /^[-*+] /.test(lines[i].trim())) {\n items.push(lines[i].trim().replace(/^[-*+] /, ''));\n i++;\n }\n blocks.push({ type: 'list', ordered: false, items });\n continue;\n }\n\n // Ordered list (1., 2., …)\n if (/^\\d+\\. /.test(trimmed)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\. /.test(lines[i].trim())) {\n items.push(lines[i].trim().replace(/^\\d+\\. /, ''));\n i++;\n }\n blocks.push({ type: 'list', ordered: true, items });\n continue;\n }\n\n // Plain paragraph\n blocks.push({ type: 'paragraph', text: trimmed });\n i++;\n }\n\n return blocks;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport function MarkdownMessage({\n content,\n isStreaming = false,\n footerMeta,\n className,\n}: {\n content: string;\n isStreaming?: boolean;\n /**\n * MessageFooter의 meta 슬롯에 들어갈 ReactNode.\n * streaming 중에는 렌더링되지 않습니다.\n */\n footerMeta?: React.ReactNode;\n className?: string;\n}) {\n const blocks = parseMarkdown(content);\n\n // ── Cursor element (streaming only) ─────────────────────────────────────────\n const cursor = isStreaming ? (\n <span\n className='inline-block w-0.5 bg-foreground ml-0.5 animate-pulse align-middle'\n style={{ height: '1em' }}\n />\n ) : null;\n\n return (\n <div\n className={cn('flex flex-col gap-2 w-full text-foreground', className)}\n >\n {blocks.map((block, idx) => {\n const blockKey = `${block.type}-${idx}`;\n const headingTop = idx > 0 ? 'mt-4' : '';\n const isLast = idx === blocks.length - 1;\n\n switch (block.type) {\n // ── Heading ────────────────────────────────────────────────────────\n case 'heading':\n if (block.level === 1)\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-xl font-bold leading-8 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n if (block.level === 2)\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-lg font-semibold leading-7 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-base font-semibold leading-6 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n\n // ── Paragraph ──────────────────────────────────────────────────────\n case 'paragraph':\n return (\n <p\n key={blockKey}\n className='text-base font-normal leading-6 tracking-tight text-foreground/90'\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n\n // ── Code block ─────────────────────────────────────────────────────\n // 스트리밍 중에는 SyntaxHighlighter 대신 plain <pre>로 렌더링하여\n // 매 청크마다 하이라이터가 재실행되는 성능 문제를 방지.\n case 'codeblock':\n if (isStreaming) {\n return (\n <div\n key={blockKey}\n className='relative bg-secondary border border-border rounded-xl overflow-hidden'\n >\n <div className='flex items-center px-3 py-2 border-b border-border'>\n <span\n className='text-xs leading-xs tracking-tight text-muted-foreground'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {block.lang || 'text'}\n </span>\n </div>\n <div className='p-3 overflow-x-auto'>\n <pre\n className='text-sm leading-5 text-foreground whitespace-pre-wrap'\n style={{\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n }}\n >\n {block.code}\n {isLast && cursor}\n </pre>\n </div>\n </div>\n );\n }\n return (\n <CodeBlock key={blockKey} lang={block.lang} code={block.code} />\n );\n\n // ── List ───────────────────────────────────────────────────────────\n case 'list':\n return (\n <ul\n key={blockKey}\n className={cn(\n 'flex flex-col gap-1 pl-5 text-base font-normal leading-6 tracking-tight text-foreground/90',\n block.ordered ? 'list-decimal' : 'list-disc',\n )}\n >\n {block.items.map((item, j) => (\n <li key={`item-${j}`}>\n {renderInline(item)}\n {isLast && j === block.items.length - 1 && cursor}\n </li>\n ))}\n </ul>\n );\n\n // ── Table ──────────────────────────────────────────────────────────\n case 'table':\n return (\n <div\n key={blockKey}\n className='flex flex-col w-full text-sm leading-5 tracking-tight overflow-x-auto'\n >\n <div className='flex items-center py-2 border-b border-border gap-4 font-semibold text-foreground'>\n {block.headers.map((h, j) => (\n <span key={`th-${j}`} className='flex-1 min-w-0 shrink-0'>\n {renderInline(h)}\n </span>\n ))}\n </div>\n {block.rows.map((row, j) => (\n <div\n key={`tr-${j}`}\n className='flex items-center py-2 border-b border-border gap-4 font-normal text-foreground/90'\n >\n {row.map((cell, k) => (\n <span key={`td-${k}`} className='flex-1 min-w-0'>\n {renderInline(cell)}\n </span>\n ))}\n </div>\n ))}\n </div>\n );\n\n // ── Divider ────────────────────────────────────────────────────────\n case 'divider':\n return (\n <div\n key={blockKey}\n className='flex h-12 items-center'\n >\n <div className='h-px w-full bg-border' />\n </div>\n );\n\n default:\n return null;\n }\n })}\n\n {/* content가 비어있거나 마지막 블록이 없을 때도 커서 표시 */}\n {isStreaming && blocks.length === 0 && cursor}\n\n {/* Footer: streaming 완료 후에만 표시 */}\n {!isStreaming && footerMeta !== undefined && (\n <MessageFooter content={content} meta={footerMeta} />\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip } from '@/components/ui/tooltip';\nimport { Icon } from '@/components/ui/icon';\n\n// ── Component ─────────────────────────────────────────────────────────────────\n// Figma node 4829:43262\n// Left: meta 슬롯 (임의 ReactNode — 예: ModelInfo)\n// Right: 32×32 copy button, hover → bg-accent, tooltip \"복사하기\"\n\nexport interface MessageFooterProps {\n /** 복사할 원본 텍스트 */\n content: string;\n /** 복사 버튼 왼쪽에 표시할 임의 콘텐츠 (예: src/app/components/model-info.tsx) */\n meta?: React.ReactNode;\n}\n\nexport function MessageFooter({ content, meta }: MessageFooterProps) {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 2000);\n } catch {\n // clipboard not available\n }\n };\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return (\n <div className='flex items-center gap-2 py-2 animate-in fade-in-0 slide-in-from-bottom-1 duration-300'>\n {/* ── Copy button ────────────────────────────────────────── */}\n <Tooltip content='복사하기'>\n <button\n type='button'\n onClick={handleCopy}\n className='group/copy flex items-center justify-center size-8 rounded-lg hover:bg-accent transition-colors cursor-pointer shrink-0'\n aria-label='복사하기'\n >\n <Icon\n name={copied ? 'check' : 'copy'}\n className='size-4 shrink-0 text-muted-foreground transition-colors group-hover/copy:text-foreground'\n />\n </button>\n </Tooltip>\n\n {/* ── Meta slot ──────────────────────────────────────────── */}\n {meta}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\n// ─── TooltipContent (internal) ────────────────────────────────────────────────\n// Figma node 5132-2568\n//\n// 구조 (Figma 기준):\n// [Bubble] bg-primary, px-2.5 py-1.5, rounded-md, max-w-50 (200px)\n// └ Text text-xs (12px), text-primary-foreground, tracking-tight\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(\n (\n {\n className,\n side = 'top',\n sideOffset = 4,\n children,\n ...props\n },\n ref,\n ) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-max max-w-[200px]',\n 'bg-primary rounded-md px-2.5 py-1.5',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n >\n <span className='block text-xs font-normal leading-snug tracking-tight text-primary-foreground whitespace-normal break-words'>\n {children}\n </span>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n ),\n);\nTooltipContent.displayName = 'TooltipContent';\n\n// ─── Tooltip ──────────────────────────────────────────────────────────────────\n\nexport interface TooltipProps\n extends\n Pick<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>,\n 'open' | 'defaultOpen' | 'onOpenChange' | 'delayDuration'\n >,\n Omit<React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>, 'children' | 'content'> {\n /** 툴팁 말풍선에 표시할 내용 */\n content: React.ReactNode;\n /** 호버 시 툴팁을 여는 트리거 요소 (asChild로 렌더링) */\n children: React.ReactNode;\n}\n\nfunction Tooltip({\n content,\n children,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration,\n ...contentProps\n}: TooltipProps) {\n if (!content) return children;\n return (\n <TooltipPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n delayDuration={delayDuration}\n >\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipContent {...contentProps}>{content}</TooltipContent>\n </TooltipPrimitive.Root>\n );\n}\n\n// ─── TooltipWithIcon ──────────────────────────────────────────────────────────────\n// \"size-5 아이콘 버튼 + 툴팁\" 패턴 캡슐화\n\nexport interface TooltipWithIconProps {\n content: string;\n /** 트리거 아이콘 이름 (Lucide). @default \"info\" */\n iconName?: string;\n className?: string;\n}\n\nfunction TooltipWithIcon({\n content,\n iconName = 'info',\n className,\n}: TooltipWithIconProps) {\n if (!content) return null;\n return (\n <Tooltip content={content}>\n <Icon\n name={iconName}\n className={cn('size-4 text-muted-foreground cursor-pointer', className)}\n />\n </Tooltip>\n );\n}\n\nexport { Tooltip, TooltipProvider, TooltipWithIcon };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { Button } from '@/components/ui/button';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ModalProps {\n id?: string;\n /**\n * 모달을 여는 트리거 — render prop 패턴.\n * open 함수를 인자로 받아 원하는 요소에 직접 연결.\n * ex) trigger={(open) => <Button onClick={open}>열기</Button>}\n */\n trigger?: (open: () => void) => React.ReactNode;\n /**\n * controlled 모드: 외부에서 열림 상태를 직접 제어.\n * onOpenChange와 함께 사용.\n */\n open?: boolean;\n /** controlled 모드에서 열림 상태 변경 콜백 */\n onOpenChange?: (open: boolean) => void;\n /**\n * footer 버튼 렌더 방식\n * confirm — 취소 + default(검정) 확인 버튼\n * danger — 취소 + destructive(빨강) 확인 버튼\n * dialog — footer 없음 (children으로 모든 콘텐츠 처리)\n */\n variant?: 'confirm' | 'danger' | 'dialog';\n /** 모달 제목 */\n title: string;\n /** 제목 아래 부제목 (선택) */\n description?: string;\n /** 우상단 X 닫기 버튼 표시 여부 */\n showCloseButton?: boolean;\n /** 모달 본문 */\n children?: React.ReactNode;\n /** 취소 버튼 레이블 (기본: \"취소\") */\n cancelLabel?: string;\n /** 확인 버튼 레이블 (기본: \"확인\") */\n confirmLabel?: string;\n /**\n * 확인 버튼 콜백.\n * Promise를 반환하면 resolve될 때까지 loading 상태를 내부에서 자동 처리하고\n * 완료 후 모달을 닫음.\n */\n onConfirm?: () => void | Promise<void>;\n /** 취소/닫기 시 콜백 (cancel 버튼, X 버튼, ESC, 오버레이 클릭) */\n onCancel?: () => void;\n /** 확인 버튼 비활성화 */\n confirmDisabled?: boolean;\n isLoading?: boolean;\n /** 오버레이 클릭 시 닫기 (기본: true) */\n closeOnOverlayClick?: boolean;\n /** 모달 패널에 추가할 className */\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Modal({\n id,\n trigger,\n open: openProp,\n onOpenChange,\n variant = 'confirm',\n title,\n description,\n showCloseButton = false,\n children,\n cancelLabel = '취소',\n confirmLabel = '확인',\n onConfirm,\n onCancel,\n confirmDisabled = false,\n closeOnOverlayClick = true,\n className,\n isLoading,\n}: ModalProps) {\n const isControlled = openProp !== undefined;\n const [openState, setOpenState] = React.useState(false);\n const open = isControlled ? openProp : openState;\n const [loading, setLoading] = React.useState(false);\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setOpenState(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const isLoadingCombined = loading || !!isLoading;\n\n // ref로 최신 loading 값을 ESC 핸들러에서 읽어 stale closure 방지\n const loadingRef = React.useRef(isLoadingCombined);\n loadingRef.current = isLoadingCombined;\n\n const handleClose = React.useCallback(() => {\n if (loadingRef.current) return;\n setOpen(false);\n onCancel?.();\n }, [onCancel, setOpen]);\n\n async function handleConfirm() {\n if (!onConfirm) {\n setOpen(false);\n return;\n }\n const result = onConfirm();\n if (result instanceof Promise) {\n setLoading(true);\n try {\n await result;\n setOpen(false);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n }\n\n // ESC 닫기 — 모달이 열린 경우에만 등록\n React.useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') handleClose();\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, handleClose]);\n\n function handleOverlayClick(e: React.MouseEvent) {\n if (closeOnOverlayClick && e.target === overlayRef.current) handleClose();\n }\n\n return (\n <>\n {/* ── Trigger ────────────────────────────────────────────────── */}\n {trigger?.(() => setOpen(true))}\n\n {/* ── Modal overlay ──────────────────────────────────────────── */}\n {open && (\n <div\n ref={overlayRef}\n onClick={handleOverlayClick}\n className='fixed inset-0 z-50 flex items-center justify-center animate-kb-overlay-in'\n style={{ backgroundColor: 'rgba(0,0,0,0.32)' }}\n >\n <div\n id={id}\n className={cn(\n 'bg-background border border-border rounded-2xl shadow-modal flex flex-col gap-4 p-6 w-423 animate-kb-modal-in',\n className,\n )}\n >\n {/* ── Header ─────────────────────────────────────────── */}\n <div\n className={cn(\n 'flex flex-col w-full',\n description ? 'gap-1' : 'gap-0',\n )}\n >\n <div className='flex items-start justify-between w-full'>\n <p className='flex-1 text-left text-lg font-semibold leading-7 tracking-tight text-foreground'>\n {title}\n </p>\n {showCloseButton && (\n <button\n type='button'\n onClick={handleClose}\n className='flex size-5 items-center justify-center ml-2 shrink-0 opacity-70 hover:opacity-100 transition-opacity cursor-pointer'\n >\n <Icon name='x' className='size-4 text-foreground' />\n </button>\n )}\n </div>\n {description && (\n <p className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </p>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────── */}\n {children && <div className='w-full text-left'>{children}</div>}\n\n {/* ── Footer ─────────────────────────────────────────── */}\n {variant !== 'dialog' && (\n <div className='flex gap-2 items-center justify-end w-full'>\n <Button\n variant='outline'\n onClick={handleClose}\n disabled={isLoadingCombined}\n >\n {cancelLabel}\n </Button>\n <Button\n variant={variant === 'danger' ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={confirmDisabled}\n loading={isLoadingCombined}\n >\n {confirmLabel}\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport { Modal };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menubar as MenubarPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Root ──────────────────────────────────────────────────────────────────────\n// Figma: bg-background border border-border rounded-[radius-md] shadow-xs p-1 gap-1\n\nconst Menubar = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn(\n \"flex items-center gap-1 p-1\",\n \"bg-background border border-border rounded-md\",\n className,\n )}\n {...props}\n />\n));\nMenubar.displayName = MenubarPrimitive.Root.displayName;\n\n// ─── Menu ──────────────────────────────────────────────────────────────────────\n\nconst MenubarMenu = MenubarPrimitive.Menu;\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n// Figma: px-2 py-1 rounded-[radius-sm] Text-sm/Medium text-foreground\n// Active (data-state=open): bg-accent text-accent-foreground\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex items-center justify-center cursor-pointer select-none outline-none\",\n \"px-2 py-1 rounded-sm\",\n \"text-sm font-medium leading-5 tracking-tight text-foreground\",\n \"transition-colors hover:bg-accent hover:text-accent-foreground\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n className,\n )}\n {...props}\n />\n));\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n// Figma: bg-popover border border-border rounded-[radius-md] shadow-md w-[192px]\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(({ className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-48 overflow-hidden\",\n \"bg-popover border border-border rounded-md\",\n \"shadow-dropdown\",\n // Entry / exit animations\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"duration-200 data-[state=closed]:duration-150\",\n className,\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n));\nMenubarContent.displayName = MenubarPrimitive.Content.displayName;\n\n// ─── Group ────────────────────────────────────────────────────────────────────\n\nconst MenubarGroup = MenubarPrimitive.Group;\n\n// ─── Item ─────────────────────────────────────────────────────────────────────\n// Figma: h-8 px-2 py-1.5 gap-2 rounded-[radius-sm] flex items-center\n// text-sm/Regular text-popover-foreground\n// disabled: opacity-50 cursor-not-allowed\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex h-8 cursor-pointer select-none items-center gap-2\",\n \"px-2 py-1.5 rounded-sm\",\n \"text-sm font-normal leading-5 tracking-tight text-popover-foreground\",\n \"outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nMenubarItem.displayName = MenubarPrimitive.Item.displayName;\n\n// ─── Sub ──────────────────────────────────────────────────────────────────────\n\nconst MenubarSub = MenubarPrimitive.Sub;\n\n// ─── SubTrigger ───────────────────────────────────────────────────────────────\n// Figma: same as item but with ChevronRight icon on the right\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenubarPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex h-8 cursor-pointer select-none items-center gap-2\",\n \"px-2 py-1.5 rounded-sm\",\n \"text-sm font-normal leading-5 tracking-tight text-popover-foreground\",\n \"outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n <span className=\"flex-1 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap\">\n {children}\n </span>\n <Icon name=\"chevron-right\" className=\"size-4 text-foreground\" />\n </MenubarPrimitive.SubTrigger>\n));\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;\n\n// ─── SubContent ───────────────────────────────────────────────────────────────\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-48 overflow-hidden\",\n \"bg-popover border border-border rounded-md\",\n \"shadow-dropdown\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"duration-200 data-[state=closed]:duration-150\",\n className,\n )}\n {...props}\n />\n));\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;\n\n// ─── Shortcut ─────────────────────────────────────────────────────────────────\n// Figma: Text-xs/Regular text-muted-foreground ml-auto\n\nconst MenubarShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\n \"ml-auto text-xs font-normal leading-4 tracking-tight\",\n \"text-muted-foreground shrink-0\",\n className,\n )}\n {...props}\n />\n);\nMenubarShortcut.displayName = \"MenubarShortcut\";\n\n// ─── Separator ────────────────────────────────────────────────────────────────\n// Figma: Divider — h-2 containing a horizontal rule\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator\n ref={ref}\n className={cn(\"my-1 h-px bg-border mx-1\", className)}\n {...props}\n />\n));\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n MenubarShortcut,\n MenubarSeparator,\n};\n","import { cn } from '@/lib/utils';\nimport { BADGE_VARIANT_STYLES, type BadgeVariant } from '@/components/ui/badge';\n\n// ─── Style constants ──────────────────────────────────────────────────────────\n// Derived from RYAI Design System - Badge component (node 73:3479)\n// rounded-full · font-mono · text-xs\n// size-5 (20×20) ← count < 10 (한 자리: 원형)\n// h-5 min-w-5 px-2 ← count ≥ 10, filled variants (두 자리 이상: pill)\nconst NUMBER_BADGE_BASE =\n 'inline-flex shrink-0 items-center justify-center rounded-full font-mono text-xs font-medium leading-xs whitespace-nowrap';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface NumberBadgeProps {\n /** 표시할 숫자 */\n count: number;\n /** 배지 시맨틱 변형 (기본값: default) */\n variant?: BadgeVariant;\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction NumberBadge({\n count,\n variant = 'default',\n className,\n}: NumberBadgeProps) {\n // 한 자리(0-9): 원형 size-5\n // 두 자리 이상: 가로 가변 pill\n const sizeClass = count < 10 ? 'size-5' : 'h-5 min-w-5 px-2';\n\n return (\n <span\n data-slot='number-badge'\n className={cn(\n NUMBER_BADGE_BASE,\n sizeClass,\n 'tracking-tight',\n BADGE_VARIANT_STYLES[variant],\n className,\n )}\n >\n {count}\n </span>\n );\n}\n\nexport { NumberBadge };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ProgressThreshold {\n /** Value (0–100) at which this color activates */\n at: number;\n /** CSS color value, e.g. 'var(--color-amber-500)' or '#ef4444' */\n color: string;\n}\n\nexport interface ProgressProps {\n /** Current progress value (0–100) */\n value: number;\n /** Activates when value >= at */\n warning?: ProgressThreshold;\n /** Activates when value >= at (takes precedence over warning) */\n danger?: ProgressThreshold;\n /** Tooltip text shown on hover */\n tooltip?: string;\n className?: string;\n}\n\n// ─── Progress ────────────────────────────────────────────────────────────────\n\nexport function Progress({\n value,\n warning,\n danger,\n tooltip,\n className,\n}: ProgressProps) {\n const clamped = Math.min(100, Math.max(0, value));\n\n const barColor =\n danger && clamped >= danger.at\n ? danger.color\n : warning && clamped >= warning.at\n ? warning.color\n : undefined;\n\n const track = (\n <div\n className={cn(\n 'relative w-full h-1.5 rounded-full bg-muted overflow-hidden',\n className,\n )}\n >\n <div\n className={cn(\n 'h-full transition-all duration-300',\n !barColor && 'bg-primary',\n )}\n style={{\n width: `${clamped}%`,\n ...(barColor ? { backgroundColor: barColor } : {}),\n }}\n />\n </div>\n );\n\n if (!tooltip) return track;\n\n return <Tooltip content={tooltip}>{track}</Tooltip>;\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface Item<T extends string> {\n key: T;\n label: string;\n}\n\ninterface SegmentedControlProps<T extends string> {\n value: T;\n onChange: (value: T) => void;\n items: readonly Item<T>[];\n}\n\nexport function SegmentedControl<T extends string>({\n value,\n onChange,\n items,\n}: SegmentedControlProps<T>) {\n return (\n <div className=\"flex items-start w-full rounded-md\">\n {items.map(({ key, label }, idx) => {\n const isActive = value === key;\n const isFirst = idx === 0;\n const isLast = idx === items.length - 1;\n return (\n <button\n key={key}\n type=\"button\"\n onClick={() => onChange(key)}\n className={cn(\n \"flex flex-1 h-9 items-center justify-center px-2 cursor-pointer transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset\",\n \"text-sm leading-5 tracking-tight text-foreground\",\n isActive ? \"font-medium bg-background\" : \"font-normal bg-accent\",\n isFirst\n ? \"border-l border-t border-b border-border rounded-tl-md rounded-bl-md\"\n : isLast\n ? \"border-t border-b border-r border-border rounded-tr-md rounded-br-md\"\n : \"border border-border\",\n )}\n >\n {label}\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nexport interface SearchInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'type'> {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nexport function SearchInput({\n value,\n onChange,\n placeholder,\n className,\n ...props\n}: SearchInputProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <Icon\n name='search'\n className='pointer-events-none absolute left-3 size-4 text-muted-foreground'\n />\n <input\n type='text'\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className={cn(\n 'h-9 w-full rounded-lg border border-border bg-background pl-9 pr-3',\n 'text-sm text-foreground placeholder:text-muted-foreground',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring',\n )}\n {...props}\n />\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SelectOption {\n value: string;\n label: string;\n /** Optional icon rendered before the label */\n icon?: React.ReactNode;\n}\n\nexport interface SelectGroup {\n /** Category label shown above items */\n label?: string;\n /** Icon rendered before the group label */\n icon?: React.ReactNode;\n options: SelectOption[];\n}\n\ninterface SelectBase {\n /** Flat list of options (shorthand for a single unnamed group) */\n options?: SelectOption[];\n /** Grouped options with optional labels and icons */\n groups?: SelectGroup[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\ninterface SingleSelectProps extends SelectBase {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\ninterface MultiSelectProps extends SelectBase {\n multiple: true;\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultiSelectProps;\n\n// ─── Select ──────────────────────────────────────────────────────────────────\n\nexport function Select(props: SelectProps) {\n const { placeholder = '선택해 주세요', className, disabled = false } = props;\n\n const [open, setOpen] = React.useState(false);\n const [selected, setSelected] = React.useState<Set<string>>(() => {\n if (props.multiple) return new Set(props.defaultValue ?? []);\n const dv = props.defaultValue;\n return dv ? new Set([dv]) : new Set();\n });\n\n const optionsProp = props.options;\n const groupsProp = props.groups;\n const valueProp = props.value;\n const { multiple } = props;\n\n const groups = React.useMemo((): SelectGroup[] => {\n if (groupsProp) return groupsProp;\n if (optionsProp) return [{ options: optionsProp }];\n return [];\n }, [groupsProp, optionsProp]);\n\n const options = React.useMemo(() => groups.flatMap((g) => g.options), [groups]);\n\n const activeSet = React.useMemo((): Set<string> => {\n if (valueProp !== undefined) {\n return multiple\n ? new Set(valueProp as string[])\n : new Set([valueProp as string]);\n }\n return selected;\n }, [multiple, valueProp, selected]);\n\n // Find first selected option for trigger icons\n const firstSelected = options.find((o) => activeSet.has(o.value));\n const firstSelectedGroup = firstSelected\n ? groups.find((g) => g.options.some((o) => o.value === firstSelected.value))\n : null;\n // Group icon → leading (before label), Option icon → trailing (after label, single only)\n const triggerGroupIcon = firstSelectedGroup?.icon ?? null;\n const triggerOptionIcon = !multiple ? (firstSelected?.icon ?? null) : null;\n\n // Trigger label\n const selectedOptions = options.filter((o) => activeSet.has(o.value));\n let triggerLabel: string;\n if (selectedOptions.length === 0) {\n triggerLabel = '';\n } else if (!multiple) {\n triggerLabel = selectedOptions[0]?.label ?? '';\n } else if (selectedOptions.length <= 2) {\n triggerLabel = selectedOptions.map((o) => o.label).join(', ');\n } else {\n triggerLabel = `${selectedOptions.length}개 선택됨`;\n }\n\n function handleSelect(optionValue: string) {\n if (props.multiple) {\n const next = new Set(activeSet);\n if (next.has(optionValue)) next.delete(optionValue);\n else next.add(optionValue);\n if (props.value === undefined) setSelected(next);\n props.onValueChange?.([...next]);\n } else {\n if (props.value === undefined) setSelected(new Set([optionValue]));\n props.onValueChange?.(optionValue);\n setOpen(false);\n }\n }\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={disabled ? undefined : setOpen}>\n {/* ── Trigger ──────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'flex h-9 w-full items-center justify-between rounded-lg border border-border px-3 py-2',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n disabled\n ? 'bg-muted cursor-not-allowed opacity-60'\n : 'bg-background cursor-pointer hover:bg-accent',\n className,\n )}\n >\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n {triggerGroupIcon && (\n <span className=\"shrink-0 flex items-center\">{triggerGroupIcon}</span>\n )}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'min-w-0 truncate text-left text-sm leading-5 tracking-tight',\n triggerLabel ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {triggerLabel || placeholder}\n </span>\n {triggerOptionIcon && (\n <span className=\"shrink-0 flex items-center\">{triggerOptionIcon}</span>\n )}\n </span>\n </span>\n <Icon\n name=\"chevron-down\"\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n {/* ── Dropdown ─────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: 'var(--radix-popover-trigger-width)' }}\n className={cn(\n 'z-50 rounded-lg border border-border bg-popover overflow-hidden',\n 'shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'duration-200 data-[state=closed]:duration-150',\n )}\n >\n <div\n className=\"p-1 flex flex-col max-h-96 overflow-y-auto [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300\"\n >\n {groups.map((group, gi) => (\n <div key={gi}>\n {(group.label || group.icon) && (\n <div className=\"flex items-center gap-1.5 px-2 py-1.5\">\n {group.icon && (\n <span className=\"shrink-0 flex items-center\">{group.icon}</span>\n )}\n {group.label && (\n <span className=\"text-xs leading-xs tracking-tight font-normal text-muted-foreground\">\n {group.label}\n </span>\n )}\n </div>\n )}\n {group.options.map((opt) => {\n const isSelected = activeSet.has(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => handleSelect(opt.value)}\n className={cn(\n 'flex w-full items-center justify-between rounded-sm px-2 py-1.5',\n 'text-sm font-normal leading-5 tracking-tight',\n 'cursor-pointer transition-colors',\n isSelected\n ? 'bg-accent text-accent-foreground'\n : 'text-popover-foreground hover:bg-accent hover:text-accent-foreground',\n )}\n >\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n <span className=\"min-w-0 truncate text-left\">{opt.label}</span>\n {opt.icon && (\n <span className=\"shrink-0 flex items-center\">{opt.icon}</span>\n )}\n </span>\n {isSelected && (\n <Icon name=\"check\" className=\"size-4 shrink-0 ml-2\" />\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Icon } from \"@/components/ui/icon\";\n\ninterface SheetProps {\n open: boolean;\n onClose: () => void;\n title: string;\n description?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function Sheet({ open, onClose, title, description, children, footer }: SheetProps) {\n // Close on Escape key\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [open, onClose]);\n\n return (\n <div\n className={[\n \"fixed top-0 right-0 z-50 flex flex-col h-full w-96\",\n \"bg-background border-l border-border\",\n \"shadow-sheet\",\n \"transition-transform duration-300\",\n open ? \"translate-x-0\" : \"translate-x-full\",\n ].join(\" \")}\n style={{ transitionTimingFunction: \"cubic-bezier(0.32, 0.72, 0, 1)\" }}\n >\n {/* ── Header ───────────────────────────────────────────── */}\n <div className=\"flex flex-col gap-1.5 p-4 shrink-0\">\n <div className=\"flex items-center justify-between\">\n <p className=\"flex-1 min-w-0 text-base font-semibold leading-6 tracking-tight text-foreground\">\n {title}\n </p>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex items-center justify-center shrink-0 size-4 cursor-pointer hover:opacity-70 transition-opacity\"\n >\n <Icon name=\"x\" className=\"size-4 text-foreground\" />\n </button>\n </div>\n {description && (\n <p className=\"text-sm font-normal leading-5 tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* ── Content ──────────────────────────────────────────── */}\n <div className=\"flex flex-1 flex-col gap-4 min-h-0 overflow-y-auto px-4\">\n {children}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────── */}\n {footer && (\n <div className=\"flex flex-col gap-2 items-end p-4 shrink-0\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowUpRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\nimport { PanelLeftIcon } from '@/components/icons/custom/panel-left';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * 링크 컴포넌트 타입. next/link의 Link, react-router의 Link 등을 그대로 전달할 수 있습니다.\n * 미지정 시 기본 <a> 태그로 렌더링됩니다.\n */\ntype SidebarLinkComponent = React.ComponentType<{\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n}>;\n\nexport type SidebarSubMenuItem = {\n id: string;\n title: string;\n href: string;\n icon: React.ReactNode;\n isActive?: boolean;\n titleBadge?: string | number;\n onClick?: () => void;\n isExternal?: boolean;\n};\n\nexport type SidebarMainMenuItem =\n | {\n type?: 'item';\n id: string;\n title: string;\n href: string;\n icon: React.ReactNode;\n isActive?: boolean;\n onClick?: () => void;\n onHover?: (e: React.MouseEvent<HTMLElement>) => void;\n subMenus?: SidebarSubMenuItem[];\n }\n | { type: 'divider' };\n\nexport type SidebarUtilityItem = {\n id: string;\n /**\n * popover가 지정된 경우 icon·label·href·onClick은 무시됩니다.\n * Sidebar는 단순 렌더링만 수행합니다.\n */\n popover?: React.ReactNode;\n icon?: React.ReactNode;\n label?: string;\n href?: string;\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n onHover?: (e: React.MouseEvent<HTMLElement>) => void;\n notiBadge?: boolean | number;\n};\n\n// ─── Link Context ─────────────────────────────────────────────────────────────\ntype SidebarLinkRender = (props: {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n}) => React.ReactElement;\n\nconst defaultSidebarLinkRender: SidebarLinkRender = ({\n href,\n className,\n style,\n onClick,\n children,\n}) => (\n <a href={href} className={cn(className)} style={style} onClick={onClick}>\n {children}\n </a>\n);\n\nconst SidebarLinkContext = React.createContext<SidebarLinkRender>(\n defaultSidebarLinkRender,\n);\n\nfunction SidebarLinkProvider({\n LinkComponent,\n children,\n}: {\n LinkComponent: SidebarLinkComponent;\n children: React.ReactNode;\n}) {\n const linkRef = React.useRef(LinkComponent);\n // React 19는 렌더 중 ref 쓰기를 금지하므로 useLayoutEffect 사용\n React.useLayoutEffect(() => {\n linkRef.current = LinkComponent;\n });\n function sidebarLinkRender(props: Parameters<SidebarLinkRender>[0]) {\n if (!linkRef.current) return defaultSidebarLinkRender(props);\n return React.createElement(linkRef.current, props);\n }\n const [stableRender] = React.useState<SidebarLinkRender>(\n () => sidebarLinkRender,\n );\n\n return (\n <SidebarLinkContext.Provider value={stableRender}>\n {children}\n </SidebarLinkContext.Provider>\n );\n}\n\nexport function SidebarLink({\n href,\n className,\n style,\n onClick,\n children,\n}: {\n href: string;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n children: React.ReactNode;\n}) {\n const renderLink = React.useContext(SidebarLinkContext);\n return renderLink({ href, className, style, onClick, children });\n}\n\nexport function Sidebar({\n logo,\n menus,\n avatar,\n utilities,\n panelTopContent,\n panelCenterContent,\n panelBottomContent,\n className,\n LinkComponent,\n}: {\n logo: React.ReactNode;\n menus: SidebarMainMenuItem[];\n avatar: React.ReactNode;\n utilities?: SidebarUtilityItem[];\n panelTopContent?: React.ReactNode;\n panelCenterContent?: React.ReactNode;\n panelBottomContent?: React.ReactNode;\n className?: string;\n LinkComponent: SidebarLinkComponent;\n}) {\n const [isPanelOpen, setIsPanelOpen] = React.useState(true);\n\n // 활성 메뉴 및 서브메뉴 파생\n type SidebarMenuItem = Extract<SidebarMainMenuItem, { type?: 'item' }>;\n const activeMenu = React.useMemo(\n () =>\n (menus.filter((m): m is SidebarMenuItem => m.type !== 'divider').find((m) => m.isActive)) ?? null,\n [menus],\n );\n const subMenus = activeMenu?.subMenus ?? [];\n\n return (\n <SidebarLinkProvider LinkComponent={LinkComponent}>\n <aside\n className={cn(\n 'flex h-full bg-background shrink-0 transition-[width]',\n isPanelOpen && subMenus.length > 0 ? 'w-70' : 'w-17',\n className,\n )}\n >\n {/* ── 메인 메뉴 ─────────────────────────────────────────────────── */}\n <div\n className='flex flex-col h-full shrink-0'\n style={{ width: '68px' }}\n >\n {/* 브랜드 로고 */}\n <div className='flex items-center justify-center py-4 shrink-0 w-full'>\n {logo}\n </div>\n\n {/* 메인 메뉴 목록(서비스 내비게이터) */}\n <div className='flex flex-col flex-1 items-center min-h-0 min-w-0 pb-4 pt-3 px-2 w-full'>\n {menus.length > 0 && (\n <nav\n className='flex flex-col gap-4 items-center w-10'\n aria-label='메인 메뉴'\n >\n {menus.map((item, index) => {\n if (item.type === 'divider') {\n return (\n <hr\n key={`divider-${index}`}\n className='w-6 border-t border-border'\n />\n );\n }\n return (\n <div\n key={item.id}\n className='flex flex-col items-center'\n onMouseEnter={(e) => item.onHover?.(e)}\n >\n <SidebarLink\n href={item.href}\n onClick={() => {\n const hasSubMenus =\n item.subMenus && item.subMenus.length > 0;\n if (hasSubMenus && !isPanelOpen) setIsPanelOpen(true);\n item.onClick?.();\n }}\n className='flex flex-col items-center cursor-pointer'\n style={{ gap: '4px' }}\n >\n <div\n className={cn(\n 'relative flex items-center justify-center rounded-md size-8 transition-colors',\n item.isActive\n ? 'bg-accent'\n : 'hover:bg-sidebar-accent',\n )}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {item.icon}\n </span>\n </div>\n <span className='text-2xs leading-xs text-foreground text-center tracking-tight whitespace-nowrap'>\n {item.title}\n </span>\n </SidebarLink>\n </div>\n );\n })}\n </nav>\n )}\n </div>\n\n {/* 유틸리티 */}\n <div className='flex flex-col flex-1 items-center justify-end min-h-0 min-w-0 px-4 py-3 gap-3 w-full'>\n {utilities?.map((util) => {\n if (util.popover) {\n return (\n <React.Fragment key={util.id}>{util.popover}</React.Fragment>\n );\n }\n return util.href ? (\n <Tooltip\n key={util.id ?? util.label}\n content={util.label}\n side='right'\n >\n <a\n href={util.href}\n target='_blank'\n rel='noopener noreferrer'\n className='relative flex items-center justify-center rounded-md size-8 text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n aria-label={util.label}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {util.icon}\n </span>\n </a>\n </Tooltip>\n ) : (\n <Tooltip\n key={util.id ?? util.label}\n content={util.label}\n side='right'\n >\n <button\n type='button'\n onClick={(e) => util.onClick?.(e)}\n onMouseEnter={(e) => util.onHover?.(e)}\n className='relative flex items-center justify-center rounded-md size-8 text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n aria-label={util.label}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {util.icon}\n </span>\n </button>\n </Tooltip>\n );\n })}\n </div>\n\n <div className='flex items-center justify-center pt-3 pb-5 shrink-0 w-full'>\n {avatar}\n </div>\n </div>\n\n {/* ── 서브 메뉴 ─────────────────────────────────────────────────── */}\n <div\n className={cn(\n 'flex flex-col flex-1 h-full min-h-0 min-w-0',\n (!isPanelOpen || !subMenus.length) && 'hidden',\n )}\n >\n {/* 서브 메뉴 헤더 */}\n <div className='flex flex-col shrink-0 w-full'>\n <div className='flex flex-col items-start justify-center p-2'>\n <div\n className='flex items-center justify-between pl-2 pr-0.5 py-2 w-full'\n style={{ height: '36px' }}\n >\n <div className='flex items-center gap-1.5 min-w-0'>\n <span className='text-sm font-semibold leading-5 text-foreground tracking-tight truncate'>\n {activeMenu?.title || '-'}\n </span>\n </div>\n <button\n type='button'\n aria-label='패널 닫기'\n onClick={() => setIsPanelOpen(false)}\n className='flex items-center justify-center p-2 rounded-lg text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n >\n <PanelLeftIcon className='size-4' />\n </button>\n </div>\n </div>\n </div>\n\n {/* 서브 메뉴 목록*/}\n <div className='flex flex-col flex-1 min-h-0'>\n <div className='flex flex-col p-2 shrink-0 w-full'>\n <div className='flex flex-col gap-0.5'>\n {subMenus.map((item) => (\n <div\n key={item.id}\n className={cn('rounded-md', item.isActive && 'bg-accent')}\n >\n <SidebarLink\n href={item.href}\n onClick={item.onClick}\n className='flex gap-2 h-8 items-center p-2 rounded-md hover:bg-sidebar-accent transition-colors'\n >\n <span className='flex items-center justify-center size-4 shrink-0 [&_svg]:size-full'>\n {item.icon}\n </span>\n <span className='flex-1 min-w-0 text-sm font-normal leading-5 tracking-tight overflow-hidden text-ellipsis whitespace-nowrap text-foreground'>\n {item.title}\n </span>\n {item.isExternal && (\n <span className='flex items-center justify-center shrink-0 text-[#8C8C8C]'>\n <ArrowUpRight size={12} strokeWidth={1.5} />\n </span>\n )}\n </SidebarLink>\n </div>\n ))}\n </div>\n </div>\n\n {panelCenterContent && (\n <div className='flex flex-col shrink-0 w-full'>\n {panelCenterContent}\n </div>\n )}\n\n {panelTopContent && (\n <div className='flex flex-col flex-1 min-h-0'>\n {panelTopContent}\n </div>\n )}\n </div>\n\n {/* 패널 하단 고정 푸터 (스크롤 영역 바깥) */}\n {panelBottomContent && (\n <div className='shrink-0 w-full'>{panelBottomContent}</div>\n )}\n </div>\n </aside>\n </SidebarLinkProvider>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Panel-left icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function PanelLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 0.5V12.5M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * bar — 가로 막대, width=100%, 양쪽 rounded-full (default)\n * circle — 원형, size prop으로 지름 조절\n * card — 대형 사각형 블록, rounded-xl\n */\n shape?: 'bar' | 'circle' | 'card';\n /**\n * lg — bar: 24px / circle: 40px / card: 128px\n * md — bar: 12px / circle: 32px / card: 96px\n * sm — bar: 6px / circle: 24px / card: 64px\n */\n size?: 'lg' | 'md' | 'sm';\n}\n\nconst classes: Record<'bar' | 'circle' | 'card', Record<'lg' | 'md' | 'sm', string>> = {\n bar: {\n lg: 'h-6 w-full rounded-full',\n md: 'h-3 w-full rounded-full',\n sm: 'h-1.5 w-full rounded-full',\n },\n circle: {\n lg: 'size-10 shrink-0 rounded-full',\n md: 'size-8 shrink-0 rounded-full',\n sm: 'size-6 shrink-0 rounded-full',\n },\n card: {\n lg: 'h-32 w-full rounded-xl',\n md: 'h-24 w-full rounded-xl',\n sm: 'h-16 w-full rounded-xl',\n },\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Skeleton({\n className,\n shape = 'bar',\n size = 'lg',\n ...props\n}: SkeletonProps) {\n return (\n <div\n data-slot='skeleton'\n data-shape={shape}\n data-size={size}\n aria-hidden\n className={cn('skeleton-shimmer block', classes[shape][size], className)}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slider as SliderPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Slider ───────────────────────────────────────────────────────────────────\n// · defaultValue={[50]} → Thumb 1개 (단일 슬라이더)\n// · defaultValue={[200, 800]} → Thumb 2개 (범위 슬라이더)\n//\n// 값 툴팁:\n// - hover → 해당 thumb 인덱스만 표시\n// - drag → 움직인 thumb 인덱스만 표시 (이전 값과 비교해 변경된 인덱스 특정)\n// - 드래그 종료(onValueCommit) 후 600ms → 해당 thumb 툴팁 숨김\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(\n (\n {\n className,\n defaultValue,\n value: valueProp,\n min = 0,\n max = 100,\n onValueChange,\n onValueCommit,\n ...props\n },\n ref,\n ) => {\n // 표시용 값 — 외부 제어든 내부 상태든 항상 동기화\n const [displayValues, setDisplayValues] = React.useState<number[]>(\n valueProp ?? defaultValue ?? [0],\n );\n\n // 툴팁을 표시할 thumb 인덱스 집합 (여러 thumb 독립 제어)\n const [visibleSet, setVisibleSet] = React.useState<Set<number>>(new Set());\n\n // thumb 별 hide 타이머 (인덱스 → 타이머 ID)\n const hideTimers = React.useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n\n // 외부 value prop 동기화\n React.useEffect(() => {\n if (valueProp !== undefined) setDisplayValues(valueProp);\n }, [valueProp]);\n\n // cleanup\n React.useEffect(\n () => () => hideTimers.current.forEach((t) => clearTimeout(t)),\n [],\n );\n\n const showThumb = (i: number) => {\n clearTimeout(hideTimers.current.get(i));\n hideTimers.current.delete(i);\n setVisibleSet((prev) => new Set(prev).add(i));\n };\n\n const hideThumb = (i: number, delay = 300) => {\n clearTimeout(hideTimers.current.get(i));\n const t = setTimeout(() => {\n setVisibleSet((prev) => {\n const next = new Set(prev);\n next.delete(i);\n return next;\n });\n }, delay);\n hideTimers.current.set(i, t);\n };\n\n const prevValuesRef = React.useRef<number[]>(displayValues);\n\n const handleValueChange = (newVals: number[]) => {\n // 변경된 thumb 인덱스만 툴팁 표시\n newVals.forEach((v, i) => {\n if (v !== prevValuesRef.current[i]) showThumb(i);\n });\n prevValuesRef.current = newVals;\n setDisplayValues(newVals);\n onValueChange?.(newVals);\n };\n\n const handleValueCommit = (newVals: number[]) => {\n // 드래그 종료 후 600ms 뒤 모든 thumb 툴팁 숨기기\n newVals.forEach((_, i) => hideThumb(i, 600));\n onValueCommit?.(newVals);\n };\n\n const thumbCount = displayValues.length;\n\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={valueProp === undefined ? defaultValue : undefined}\n value={valueProp !== undefined ? valueProp : undefined}\n min={min}\n max={max}\n onValueChange={handleValueChange}\n onValueCommit={handleValueCommit}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n {/* Track */}\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\"\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute h-full bg-primary\",\n thumbCount > 1 ? \"rounded-full\" : \"rounded-l-full\",\n )}\n />\n </SliderPrimitive.Track>\n\n {/* Thumbs — 각 thumb 안에 툴팁 자식으로 렌더 (thumb 중앙 기준 정렬) */}\n {displayValues.map((val, i) => (\n <SliderPrimitive.Thumb\n key={`thumb-${i}`}\n data-slot=\"slider-thumb\"\n onMouseEnter={() => showThumb(i)}\n onMouseLeave={() => hideThumb(i, 300)}\n className={cn(\n \"relative block size-5 shrink-0 rounded-full overflow-visible\",\n \"border border-primary bg-background\",\n \"ring-offset-background transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n )}\n >\n {/* 값 툴팁 — 해당 thumb 만 독립적으로 표시/숨김 */}\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute bottom-full left-1/2 -translate-x-1/2 mb-2\",\n \"flex flex-col items-center\",\n \"z-10 transition-opacity duration-150\",\n visibleSet.has(i) ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n {/* 버블 — tooltip.tsx TooltipContent 버블과 동일한 스타일 */}\n <span className=\"block rounded-md bg-primary px-2.5 py-1.5 text-xs font-normal leading-snug tracking-tight text-primary-foreground whitespace-nowrap\">\n {val}\n </span>\n {/* 화살표 — tooltip.tsx 와 동일한 Figma SVG path (sm = 20px) */}\n <svg\n width=\"20\"\n height=\"5\"\n viewBox=\"0 0 20 5\"\n fill=\"none\"\n preserveAspectRatio=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"-mt-px shrink-0\"\n aria-hidden\n >\n <path\n d=\"M9.29289 4.29289L5 0H15L10.7071 4.29289C10.3166 4.68342 9.68342 4.68342 9.29289 4.29289Z\"\n className=\"fill-primary\"\n />\n </svg>\n </div>\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n },\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface StepperProps {\n /** Step 라벨 문자열 배열 */\n steps: string[];\n /**\n * 현재 진행 중인 step의 0-based 인덱스.\n * 이 인덱스 이전 step은 complete, 이 인덱스는 current, 이후는 next.\n */\n currentStep: number;\n className?: string;\n}\n\ntype StepStatus = \"complete\" | \"current\" | \"next\";\n\nfunction getStatus(index: number, currentStep: number): StepStatus {\n if (index < currentStep) return \"complete\";\n if (index === currentStep) return \"current\";\n return \"next\";\n}\n\n// ─── CircleCheckFilled ────────────────────────────────────────────────────────\n// complete 상태 전용 — blue filled circle + white check stroke\n\nfunction CircleCheckFilled({ className }: { className?: string }) {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"shrink-0\", className)}\n aria-hidden\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" className=\"fill-blue-500\" />\n <path\n d=\"m9 12 2 2 4-4\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"stroke-white\"\n />\n </svg>\n );\n}\n\n// ─── Stepper ──────────────────────────────────────────────────────────────────\n\nexport function Stepper({ steps, currentStep, className }: StepperProps) {\n return (\n <div className={cn(\"flex items-center\", className)}>\n {steps.map((label, index) => {\n const status = getStatus(index, currentStep);\n\n return (\n <React.Fragment key={label}>\n <div className=\"flex shrink-0 items-center gap-1.5 px-2.5 py-2.5\">\n {status === \"complete\" ? (\n <CircleCheckFilled />\n ) : (\n <Icon\n name=\"circle-check\"\n className={cn(\n \"size-5\",\n status === \"current\"\n ? \"text-foreground\"\n : \"text-muted-foreground\"\n )}\n />\n )}\n <span\n className={cn(\n \"whitespace-nowrap text-sm tracking-tight\",\n status === \"next\"\n ? \"font-normal text-muted-foreground\"\n : \"font-semibold text-foreground\"\n )}\n >\n {label}\n </span>\n </div>\n\n {index < steps.length - 1 && (\n <div className=\"h-px flex-1 bg-border\" />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface TabItem<T extends string = string> {\n value: T;\n label: string;\n}\n\nexport interface TabsProps<T extends string = string> {\n allTabs: TabItem<T>[];\n current: T;\n onTabChange: (value: T) => void;\n /**\n * \"pill\" — 회색 배경 컨테이너 + 흰 배경 active (segment control 스타일)\n * \"underline\" — 하단 밑줄 active (default)\n */\n variant?: 'pill' | 'underline';\n /** 컨테이너를 w-full로 펼치고 각 탭 버튼을 균등 분할(flex-1)합니다 */\n block?: boolean;\n /** Tailwind height 클래스 (e.g. \"h-[36px]\"). 지정 시 내부 버튼 패딩도 자동 조정됩니다. */\n height?: string;\n className?: string;\n}\n\n// ─── Tabs ─────────────────────────────────────────────────────────────────────\n\nexport function Tabs<T extends string = string>({\n allTabs,\n current,\n onTabChange,\n variant = 'underline',\n block = false,\n height = 'h-[36px]',\n className,\n}: TabsProps<T>) {\n if (variant === 'pill') {\n return (\n <div\n className={cn(\n 'items-center gap-1 rounded-lg bg-muted p-1',\n block ? 'flex w-full' : 'inline-flex',\n height,\n height && '[&_button]:py-1',\n className,\n )}\n >\n {allTabs.map((tab) => {\n const isActive = tab.value === current;\n return (\n <button\n key={tab.value}\n type='button'\n onClick={() => onTabChange(tab.value)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-sm font-medium tracking-tight transition-all',\n block && 'flex-1',\n isActive\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n }\n\n // underline variant\n return (\n <div className={cn('flex items-center', block && 'w-full', className)}>\n {allTabs.map((tab) => {\n const isActive = tab.value === current;\n return (\n <button\n key={tab.value}\n type='button'\n onClick={() => onTabChange(tab.value)}\n className={cn(\n 'px-3 py-2 text-sm tracking-tight transition-colors',\n block && 'flex-1',\n isActive\n ? 'border-b-2 border-foreground font-semibold text-foreground'\n : 'border-b border-border font-medium text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ToggleProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick'\n> {\n pressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: 'sm' | 'md' | 'lg';\n}\n\n// ─── Shared style helpers (used by ToggleGroup too) ───────────────────────────\n\nexport const toggleSizeClasses = {\n sm: 'h-7 min-w-7 px-1.5 text-sm',\n md: 'h-9 min-w-9 px-2 text-sm',\n lg: 'h-10 min-w-10 px-2.5 text-base',\n} as const;\n\nexport const toggleBaseClasses =\n 'inline-flex items-center justify-center gap-1.5 font-medium tracking-tight transition-colors select-none';\n\n// ─── Toggle ───────────────────────────────────────────────────────────────────\n\nexport function Toggle({\n pressed = false,\n onPressedChange,\n size = 'md',\n disabled = false,\n className,\n children,\n ...props\n}: ToggleProps) {\n return (\n <button\n type='button'\n role='switch'\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n disabled={disabled}\n onClick={() => onPressedChange?.(!pressed)}\n className={cn(\n toggleBaseClasses,\n 'rounded-md',\n 'border border-border',\n toggleSizeClasses[size],\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n pressed ? 'bg-muted text-foreground' : 'bg-transparent text-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import { cn } from '@/lib/utils';\nimport { toggleBaseClasses, toggleSizeClasses } from './toggle';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ToggleGroupItemData<T extends string = string> {\n value: T;\n children: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface ToggleGroupBaseProps<T extends string = string> {\n items: ToggleGroupItemData<T>[];\n /**\n * outlined — 컨테이너 border + 아이템 사이 divider (default)\n * noBorder — border 없음, 아이템마다 rounded-md 독립 적용\n */\n variant?: 'bordered' | 'noBorder';\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\ninterface ToggleGroupSingleProps<\n T extends string = string,\n> extends ToggleGroupBaseProps<T> {\n type?: 'single';\n value?: T;\n onValueChange?: (value: T) => void;\n}\n\ninterface ToggleGroupMultipleProps<\n T extends string = string,\n> extends ToggleGroupBaseProps<T> {\n type: 'multiple';\n value?: T[];\n onValueChange?: (value: T[]) => void;\n}\n\nexport type ToggleGroupProps<T extends string = string> =\n | ToggleGroupSingleProps<T>\n | ToggleGroupMultipleProps<T>;\n\n// ─── ToggleGroup ──────────────────────────────────────────────────────────────\n\nexport function ToggleGroup<T extends string = string>({\n items,\n variant = 'bordered',\n disabled = false,\n size = 'md',\n className,\n ...rest\n}: ToggleGroupProps<T>) {\n const isPressed = (itemValue: T): boolean => {\n if (rest.type === 'multiple') {\n return (rest.value ?? []).includes(itemValue);\n }\n return (rest as ToggleGroupSingleProps<T>).value === itemValue;\n };\n\n const handlePress = (itemValue: T) => {\n if (rest.type === 'multiple') {\n const current = rest.value ?? [];\n const next = current.includes(itemValue)\n ? current.filter((v) => v !== itemValue)\n : [...current, itemValue];\n rest.onValueChange?.(next as T[]);\n } else {\n (rest as ToggleGroupSingleProps<T>).onValueChange?.(itemValue);\n }\n };\n\n const isBordered = variant === 'bordered';\n\n return (\n <div\n className={cn(\n // noBorder도 동일 구조(overflow-hidden, rounded-lg)이되 border만 없음\n 'inline-flex items-center overflow-hidden rounded-lg',\n isBordered && 'border border-border',\n className,\n )}\n >\n {items.map((item, index) => {\n const itemDisabled = disabled || (item.disabled ?? false);\n const pressed = isPressed(item.value);\n\n return (\n <button\n key={item.value}\n type='button'\n role='switch'\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n disabled={itemDisabled}\n onClick={() => !itemDisabled && handlePress(item.value)}\n className={cn(\n toggleBaseClasses,\n toggleSizeClasses[size],\n // 두 variant 모두 아이템 자체는 rounded-none\n 'rounded-none',\n // outlined만 아이템 사이 vertical divider 표시\n isBordered && index > 0 && 'border-l border-border',\n // 선택 상태\n pressed\n ? 'bg-muted text-foreground'\n : 'bg-transparent text-foreground',\n // disabled\n itemDisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n )}\n >\n {item.children}\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\n\nexport interface CircleIndicatorProps {\n /** 사용량 (바이트 또는 임의 단위) */\n used: number;\n /** 전체 용량 */\n total: number;\n /** 중앙에 표시할 콘텐츠 */\n centerContent?: React.ReactNode;\n /** hover 시 표시할 툴팁 텍스트 */\n tooltip?: string;\n /**\n * progress arc 색상. CSS color 값 또는 디자인 시스템 토큰을 받습니다.\n * 예) \"#3b82f6\" | \"var(--color-primary)\" | \"var(--color-blue-500)\"\n * 미지정 시 primary 색상이 적용됩니다.\n */\n color?: string;\n /** 컴포넌트 크기 (px, 기본값 44) */\n size?: number;\n /** stroke 두께 (px, 기본값 3) */\n strokeWidth?: number;\n /** stroke 끝 모양 (기본값 'round') */\n strokeLinecap?: 'round' | 'square';\n className?: string;\n}\n\nexport function CircleIndicator({\n used,\n total,\n centerContent,\n tooltip,\n color,\n size = 44,\n strokeWidth = 3,\n strokeLinecap = 'round',\n className,\n}: CircleIndicatorProps) {\n const ratio = total > 0 ? Math.min(used / total, 1) : 0;\n const padding = strokeWidth / 2 + 1;\n const radius = size / 2 - padding;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference * (1 - ratio);\n\n return (\n <Tooltip content={tooltip}>\n <div\n className={cn('relative grid place-items-center shrink-0', className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n aria-hidden\n className=\"absolute inset-0 -rotate-90\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n className=\"text-gray-200\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeLinecap={strokeLinecap}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className={cn(!color && 'text-primary')}\n stroke={color ?? 'currentColor'}\n />\n </svg>\n {centerContent && <div className=\"z-10\">{centerContent}</div>}\n </div>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Switch ───────────────────────────────────────────────────────────────────\n// Figma: w-44px h-24px pill — checked: bg-foreground, unchecked: bg-input\n// Thumb: size-20px, 흰색 원, left-2px(unchecked) / left-22px(checked)\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n // 크기 — Figma: w-44px h-24px\n \"inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full\",\n // 색상 — 미체크: bg-input, 체크: bg-foreground\n \"bg-input transition-colors data-[state=checked]:bg-foreground\",\n // 포커스\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // 비활성\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n // 크기 — Figma: size-20px\n \"pointer-events-none block size-5 rounded-full bg-background\",\n // 위치 전환: 미체크 → 2px, 체크 → 22px\n \"transition-transform data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5\"\n )}\n />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\n// ─── SwitchField ──────────────────────────────────────────────────────────────\n// 가로 레이아웃: [레이블 + 설명] (flex-1) | [Switch]\n// Figma \"Switch\" 패턴 — 설정 항목 토글\n\nexport interface SwitchFieldProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n /** 레이블 텍스트 */\n label: string;\n /** 보조 설명 (선택) */\n description?: string;\n className?: string;\n}\n\nfunction SwitchField({ label, description, className, id, ...props }: SwitchFieldProps) {\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n {/* 텍스트 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <label\n htmlFor={id}\n className=\"cursor-pointer pb-0.5 text-sm font-medium tracking-tight text-foreground\"\n >\n {label}\n </label>\n {description && (\n <p className=\"text-sm tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* Switch */}\n <Switch id={id} className=\"shrink-0\" {...props} />\n </div>\n );\n}\n\nexport { Switch, SwitchField };\n","'use client';\n\nimport * as React from 'react';\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type PaginationState,\n type OnChangeFn,\n type RowSelectionState,\n} from '@tanstack/react-table';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Tooltip } from '@/components/ui/tooltip';\n\n// ─── Re-exports (TanStack 타입 직접 참조 가능하도록) ─────────────────────────\n\nexport type { SortingState, PaginationState, OnChangeFn, RowSelectionState };\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SortDirection = 'ASC' | 'DESC' | null;\n\nexport interface TableColumn<T> {\n key: string;\n header: string;\n sortable?: boolean;\n /** 정렬 기준값 추출. sortable=true 시 필수 */\n sortValue?: (row: T) => string | number;\n /** 헤더·셀 text-align. 기본값 \"left\" */\n align?: 'left' | 'center' | 'right';\n cellClassName?: string;\n headerClassName?: string;\n /**\n * true이면 셀 내용을 한 줄로 잘라내고 hover 시 tooltip으로 전체 내용을 표시.\n * tooltip에 표시할 텍스트를 별도로 지정하려면 ellipsisTooltip을 함께 사용.\n */\n ellipsis?: boolean;\n /** ellipsis=true 일 때 tooltip에 표시할 내용. 미제공 시 cell 렌더 결과를 그대로 사용. */\n ellipsisTooltip?: (row: T) => React.ReactNode;\n cell: (row: T) => React.ReactNode;\n}\n\nexport interface TablePaginationConfig {\n pageSize?: number;\n /** 현재 페이지 번호 (1-based). 외부에서 제어할 때 전달. */\n currentPage?: number;\n /** 페이지 변경 콜백 (1-based page). */\n onPageChange?: (page: number) => void;\n /** 서버사이드 페이지네이션 시 true로 설정 */\n manualPagination?: boolean;\n /** manualPagination=true 일 때 전체 페이지 수 */\n pageCount?: number;\n /** manualPagination=true 일 때 전체 행 수 (pageCount 대신 사용 가능) */\n rowCount?: number;\n}\n\nexport interface TableSortingItem {\n /** TableColumn.key 와 일치해야 함 */\n key: TableColumn<never>['key'];\n desc?: boolean;\n}\n\nexport interface TableProps<T> {\n columns: TableColumn<T>[];\n data: T[];\n /**\n * 각 행의 고유 키.\n * - keyof T (예: \"id\") — T[key]를 string으로 변환해 사용\n * - (row: T) => string — 함수로 직접 계산\n */\n rowKey: keyof T | ((row: T) => string);\n /**\n * 페이지네이션 설정. 미전달 시 페이지네이션 비활성화.\n * 외부 API는 1-based page를 사용하고, TanStack의 0-based pageIndex는 내부에서 변환한다.\n */\n pagination?: TablePaginationConfig;\n /**\n * 초기 정렬 상태. 복수 컬럼 정렬 지원.\n * 각 항목의 key는 TableColumn.key 와 일치해야 함.\n */\n defaultSorting?: TableSortingItem[];\n /** 데이터 로딩 중 상태. true이면 tbody 대신 스피너를 표시 */\n loading?: boolean;\n /** true이면 각 행 앞에 체크박스가 추가되어 row multi-select 활성화 */\n enableRowSelection?: boolean;\n /** 외부에서 selection 상태를 제어할 때 사용 (controlled) */\n rowSelection?: RowSelectionState;\n /** selection 상태 변경 콜백 */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /**\n * 각 행 오른쪽 끝에 렌더링할 액션 영역.\n * row 데이터를 받아 ReactNode를 반환하는 함수.\n * 예: hover 시 나타나는 삭제·편집 버튼 등.\n */\n rowActions?: (row: T) => React.ReactNode;\n /** 행 클릭 핸들러. enableRowSelection=true(편집 모드)일 때는 동작하지 않음. */\n onRowClick?: (row: T) => void;\n /**\n * 정렬 상태 변경 콜백. 서버사이드 정렬 연동에 사용.\n * 빈 배열(정렬 해제)은 전달되지 않으므로 항상 최소 1개 항목 보장.\n */\n onSortingChange?: (sorting: SortingState) => void;\n className?: string;\n}\n\n// ─── EllipsisCell ────────────────────────────────────────────────────────────\n//\n// 실제 overflow 여부를 ResizeObserver로 감지해 잘린 경우에만 Tooltip을 활성화.\n// inline-flex 사용으로 hover 영역이 실제 콘텐츠 너비에만 한정됨.\n//\n// [ref 전략] Tooltip content null→값 전환 시 DOM 구조가 변경돼 div가 remount됨.\n// useRef 대신 refCallback+useState(el) 패턴으로 remount를 감지해 ResizeObserver를 재연결.\n//\n// [overflow 감지] wrapper의 inline-flex 내부에서 flex 자식이 shrink하면\n// wrapper 자체의 scrollWidth === clientWidth가 돼서 감지 실패.\n// querySelectorAll로 후손 요소까지 순회해 truncate된 텍스트 span을 찾아야 함.\n//\n// [primitive 텍스트] flexRender는 항상 React element를 반환하므로 isPrimitiveText 판별이\n// 불가. Table 컴포넌트에서 col.cell을 직접 호출한 rawContent를 rendered로 전달해야 한다.\n// flex-1 min-w-0 패턴으로 퍼센트 너비 없이 너비를 확정.\n\ninterface EllipsisCellProps {\n rendered: React.ReactNode;\n tooltip: React.ReactNode;\n}\n\nfunction EllipsisCell({ rendered, tooltip }: EllipsisCellProps) {\n const [el, setEl] = React.useState<HTMLDivElement | null>(null);\n const [overflowing, setOverflowing] = React.useState(false);\n const isPrimitiveText =\n typeof rendered === 'string' || typeof rendered === 'number';\n\n const refCallback = React.useCallback((node: HTMLDivElement | null) => {\n setEl(node);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!el) return;\n const check = () => {\n const selfOverflow = el.scrollWidth > el.clientWidth;\n const childOverflow = Array.from(el.querySelectorAll<Element>('*')).some(\n (d) => d.scrollWidth > d.clientWidth,\n );\n setOverflowing(selfOverflow || childOverflow);\n };\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [el]);\n\n return (\n <Tooltip content={overflowing ? tooltip : null}>\n <div\n ref={refCallback}\n className='inline-flex max-w-full overflow-hidden items-center whitespace-nowrap'\n >\n {isPrimitiveText ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {rendered}\n </span>\n ) : (\n rendered\n )}\n </div>\n </Tooltip>\n );\n}\n\n// ─── Sort Icon ────────────────────────────────────────────────────────────────\n\nexport function SortIcon({ direction }: { direction: SortDirection }) {\n if (direction === 'ASC') {\n return <Icon name='arrow-up' className='size-3.5 text-foreground' />;\n }\n if (direction === 'DESC') {\n return (\n <svg\n viewBox='-5.54 -5.54 24 24'\n fill='none'\n className='size-3.5 text-foreground'\n stroke='currentColor'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n >\n <path d='M6.45833 0.625V12.2917M6.45833 12.2917L12.2917 6.45833M6.45833 12.2917L0.625 6.45833' />\n </svg>\n );\n }\n // neutral: group-hover로 부모 th hover 시 색상 연동\n return (\n <svg\n viewBox='0 0 24 24'\n fill='none'\n className='size-3.5 text-muted-foreground transition-colors group-hover:text-foreground'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n >\n <path d='M8 9l4-4 4 4M16 15l-4 4-4-4' />\n </svg>\n );\n}\n\n// ─── Compact Pagination Helpers ───────────────────────────────────────────────\n//\n// TanStack Table은 페이지네이션 상태 관리만 제공하고 UI는 직접 구현해야 함.\n// (https://tanstack.com/table/latest/docs/framework/react/examples/pagination)\n// 아래 함수는 최대 5개의 페이지 번호 버튼을 표시하고\n// 범위를 벗어난 구간은 ellipsis('…')로 축약한다.\n\ntype PageItem = number | 'ellipsis-start' | 'ellipsis-end';\n\nfunction getVisiblePageItems(\n currentPage: number,\n totalPages: number,\n): PageItem[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n if (currentPage <= 3) {\n return [1, 2, 3, 4, 'ellipsis-end', totalPages];\n }\n if (currentPage >= totalPages - 2) {\n return [\n 1,\n 'ellipsis-start',\n totalPages - 3,\n totalPages - 2,\n totalPages - 1,\n totalPages,\n ];\n }\n return [\n 1,\n 'ellipsis-start',\n currentPage - 1,\n currentPage,\n currentPage + 1,\n 'ellipsis-end',\n totalPages,\n ];\n}\n\n// ─── TablePagination ──────────────────────────────────────────────────────────\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n className?: string;\n}\n\nexport function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) {\n const items = getVisiblePageItems(currentPage, totalPages);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <div\n className={cn('flex items-center justify-center gap-1 pt-4', className)}\n >\n {/* 이전 — disabled 시 cursor-not-allowed를 wrapper span으로 노출\n Button의 disabled:pointer-events-none 으로 인해 button 자체에서는\n cursor가 바뀌지 않으므로 부모 span에 cursor 지정 */}\n <span\n className={cn('inline-flex', isPrevDisabled && 'cursor-not-allowed')}\n >\n <Button\n variant='ghost'\n size='icon'\n onClick={() => onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label='이전 페이지'\n className='cursor-pointer disabled:bg-transparent'\n >\n <Icon name='chevron-left' className='size-4' />\n </Button>\n </span>\n\n {items.map((item, idx) => {\n if (item === 'ellipsis-start' || item === 'ellipsis-end') {\n return (\n <span\n key={item}\n aria-hidden\n className='flex size-8 items-center justify-center text-sm leading-none text-muted-foreground select-none'\n >\n …\n </span>\n );\n }\n return (\n <button\n key={`${item}-${idx}`}\n onClick={() => onPageChange(item)}\n aria-current={item === currentPage ? 'page' : undefined}\n className={cn(\n 'flex size-8 cursor-pointer items-center justify-center rounded-lg text-sm font-medium transition-colors',\n item === currentPage\n ? 'bg-foreground text-background'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n )}\n >\n {item}\n </button>\n );\n })}\n\n {/* 다음 */}\n <span\n className={cn('inline-flex', isNextDisabled && 'cursor-not-allowed')}\n >\n <Button\n variant='ghost'\n size='icon'\n onClick={() => onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label='다음 페이지'\n className='cursor-pointer disabled:bg-transparent'\n >\n <Icon name='chevron-right' className='size-4' />\n </Button>\n </span>\n </div>\n );\n}\n\n// ─── Table ────────────────────────────────────────────────────────────────────\n\nexport function Table<T>({\n columns,\n data,\n rowKey,\n pagination,\n defaultSorting,\n loading = false,\n enableRowSelection,\n rowSelection: rowSelectionProp,\n onRowSelectionChange,\n rowActions,\n onRowClick,\n onSortingChange,\n className,\n}: TableProps<T>) {\n const getRowKey = React.useCallback(\n (row: T): string =>\n typeof rowKey === 'function' ? rowKey(row) : String(row[rowKey]),\n [rowKey],\n );\n\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({});\n\n const isControlledSelection = rowSelectionProp !== undefined;\n const effectiveRowSelection = isControlledSelection\n ? rowSelectionProp\n : internalRowSelection;\n\n const handleRowSelectionChange: OnChangeFn<RowSelectionState> = (updater) => {\n if (!isControlledSelection) {\n setInternalRowSelection((prev) =>\n typeof updater === 'function' ? updater(prev) : updater,\n );\n }\n onRowSelectionChange?.(updater);\n };\n\n const [sorting, setSorting] = React.useState<SortingState>(\n () =>\n defaultSorting?.map(({ key, desc }) => ({\n id: key,\n desc: desc ?? false,\n })) ?? [],\n );\n\n const handleSortingChange = React.useCallback<OnChangeFn<SortingState>>(\n (updater) => {\n setSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n if (next.length > 0) onSortingChange?.(next);\n return next;\n });\n },\n [onSortingChange],\n );\n\n const [internalPagination, setInternalPagination] =\n React.useState<PaginationState>({\n pageIndex: (pagination?.currentPage ?? 1) - 1,\n pageSize: pagination?.pageSize ?? 10,\n });\n\n // 외부에서 currentPage가 변경될 때(sort/search 리셋 등) 내부 상태를 동기화\n React.useEffect(() => {\n if (pagination?.currentPage !== undefined) {\n setInternalPagination((prev) => ({\n ...prev,\n pageIndex: pagination.currentPage! - 1,\n }));\n }\n }, [pagination?.currentPage]);\n\n const handlePaginationChange: OnChangeFn<PaginationState> = (updater) => {\n const next =\n typeof updater === 'function' ? updater(internalPagination) : updater;\n setInternalPagination(next);\n pagination?.onPageChange?.(next.pageIndex + 1);\n };\n\n const isSelectionActive = enableRowSelection === true;\n\n const selectionColumn = React.useMemo<ColumnDef<T>>(\n () => ({\n id: '__select__',\n header: '__select_header__',\n // 체크박스 렌더링은 td/th에서 isSelectionActive 가드 후 호출하므로 항상 반환\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(checked) => row.toggleSelected(!!checked)}\n aria-label='행 선택'\n onClick={(e) => e.stopPropagation()}\n />\n ),\n enableSorting: false,\n }),\n [],\n );\n\n const rowActionsColumn = React.useMemo<ColumnDef<T>>(\n () => ({\n id: '__row_actions__',\n header: '',\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) =>\n rowActions!(row.original),\n enableSorting: false,\n }),\n [rowActions],\n );\n\n const tanstackColumns = React.useMemo<ColumnDef<T>[]>(\n () => [\n ...(isSelectionActive ? [selectionColumn] : []),\n ...columns.map((col) => ({\n id: col.key,\n header: col.header,\n accessorFn: col.sortValue ?? (() => null),\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) =>\n col.cell(row.original),\n enableSorting: col.sortable ?? false,\n })),\n ...(rowActions ? [rowActionsColumn] : []),\n ],\n [columns, isSelectionActive, selectionColumn, rowActions, rowActionsColumn],\n );\n\n const hasPagination = pagination !== undefined;\n\n const table = useReactTable<T>({\n data,\n columns: tanstackColumns,\n state: {\n sorting,\n ...(hasPagination && { pagination: internalPagination }),\n ...(isSelectionActive && { rowSelection: effectiveRowSelection }),\n },\n getRowId: (row) => getRowKey(row),\n onSortingChange: handleSortingChange,\n ...(hasPagination && { onPaginationChange: handlePaginationChange }),\n ...(isSelectionActive && {\n enableRowSelection: true,\n onRowSelectionChange: handleRowSelectionChange,\n }),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...(hasPagination && { getPaginationRowModel: getPaginationRowModel() }),\n ...(pagination?.manualPagination !== undefined && {\n manualPagination: pagination.manualPagination,\n }),\n ...(pagination?.pageCount !== undefined && {\n pageCount: pagination.pageCount,\n }),\n ...(pagination?.rowCount !== undefined && {\n rowCount: pagination.rowCount,\n }),\n });\n\n // colMap: 컬럼 key → 스타일·동작 설정 매핑 (렌더마다 참조)\n const colMap = React.useMemo(\n () =>\n Object.fromEntries(\n columns.map((c) => [\n c.key,\n {\n align: c.align ?? 'left',\n headerCls: c.headerClassName ?? '',\n cellCls: c.cellClassName ?? '',\n ellipsis: c.ellipsis ?? false,\n ellipsisTooltip: c.ellipsisTooltip,\n cellFn: c.cell,\n },\n ]),\n ) as Record<\n string,\n {\n align: 'left' | 'center' | 'right';\n headerCls: string;\n cellCls: string;\n ellipsis: boolean;\n ellipsisTooltip: ((row: T) => React.ReactNode) | undefined;\n cellFn: (row: T) => React.ReactNode;\n }\n >,\n [columns],\n );\n\n const { pageIndex } = table.getState().pagination ?? { pageIndex: 0 };\n const totalPages = hasPagination ? table.getPageCount() : 1;\n const currentPage = pageIndex + 1;\n const colCount =\n columns.length + (isSelectionActive ? 1 : 0) + (rowActions ? 1 : 0);\n const selectedCount = isSelectionActive\n ? Object.values(effectiveRowSelection).filter(Boolean).length\n : 0;\n const hasSelection = selectedCount > 0;\n\n return (\n <div className={cn('flex flex-col', className)}>\n <div className='w-full overflow-x-auto'>\n <table className='w-full border-collapse'>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className='border-b border-border'>\n {headerGroup.headers.map((header, headerIdx) => {\n // __select__ 컬럼: p-0 relative, 체크박스를 absolute로 배치\n if (header.id === '__select__') {\n return (\n <th key={header.id} className='w-10 p-0 relative'>\n {isSelectionActive && (\n <div className='absolute inset-0 flex items-center justify-center'>\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? 'indeterminate'\n : false\n }\n onCheckedChange={(checked) =>\n table.toggleAllPageRowsSelected(!!checked)\n }\n aria-label='전체 선택'\n />\n </div>\n )}\n </th>\n );\n }\n\n // __row_actions__ 컬럼: 빈 헤더\n if (header.id === '__row_actions__') {\n return <th key={header.id} className='w-12 px-2 py-3' />;\n }\n\n const { align, headerCls } = colMap[header.id] ?? {\n align: 'left',\n headerCls: '',\n };\n const canSort = header.column.getCanSort();\n const sorted = header.column.getIsSorted();\n const direction: SortDirection =\n sorted === 'asc'\n ? 'ASC'\n : sorted === 'desc'\n ? 'DESC'\n : null;\n\n // 선택됨 상태: 첫 번째 데이터 컬럼에만 \"N개 선택됨\" 표시,\n // 나머지 데이터 컬럼은 레이블을 숨겨 레이아웃은 그대로 유지\n const isFirstDataCol = isSelectionActive\n ? headerIdx === 1\n : headerIdx === 0;\n const showSelectionLabel =\n isSelectionActive && hasSelection && isFirstDataCol;\n const hideLabel =\n isSelectionActive && hasSelection && !isFirstDataCol;\n\n return (\n <th\n key={header.id}\n className={cn(\n 'px-2 py-3 text-sm font-medium text-muted-foreground transition-colors',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n align === 'left' && 'text-left',\n canSort &&\n !hideLabel &&\n !showSelectionLabel &&\n 'group cursor-pointer select-none hover:font-semibold hover:text-foreground',\n showSelectionLabel && 'text-foreground',\n headerCls,\n )}\n onClick={\n showSelectionLabel || hideLabel\n ? undefined\n : header.column.getToggleSortingHandler()\n }\n >\n {showSelectionLabel ? (\n `${selectedCount}개 선택됨`\n ) : hideLabel ? null : (\n <div\n className={cn(\n 'inline-flex items-center gap-1',\n align === 'center' && 'justify-center',\n align === 'right' && 'justify-end',\n )}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {canSort && <SortIcon direction={direction} />}\n </div>\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {loading ? (\n <tr>\n <td colSpan={colCount} className='py-16 text-center'>\n <Icon\n name='loader-2'\n className='mx-auto size-6 animate-spin text-muted-foreground'\n />\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row) => (\n <tr\n key={getRowKey(row.original)}\n onClick={\n !isSelectionActive && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n className={cn(\n 'group border-b border-border transition-colors hover:bg-accent/50 last:border-b-0',\n !isSelectionActive && onRowClick && 'cursor-pointer',\n isSelectionActive && row.getIsSelected() && 'bg-accent/30',\n )}\n >\n {row.getVisibleCells().map((cell) => {\n // __select__: p-0 relative, 체크박스 absolute 배치\n if (cell.column.id === '__select__') {\n return (\n <td key={cell.id} className='w-10 p-0 relative'>\n {isSelectionActive && (\n <div className='absolute inset-0 flex items-center justify-center'>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </div>\n )}\n </td>\n );\n }\n\n // __row_actions__: 오른쪽 끝 액션 셀\n if (cell.column.id === '__row_actions__') {\n return (\n <td\n key={cell.id}\n className='w-12 px-2 py-4 align-middle text-right'\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n );\n }\n\n const {\n align,\n cellCls,\n ellipsis,\n ellipsisTooltip,\n cellFn,\n } = colMap[cell.column.id] ?? {\n align: 'left',\n cellCls: '',\n ellipsis: false,\n ellipsisTooltip: undefined,\n cellFn: () => null,\n };\n\n const rendered = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n\n // flexRender는 항상 React element를 반환하므로\n // isPrimitiveText 판별을 위해 col.cell을 직접 호출\n const rawContent = ellipsis ? cellFn(row.original) : null;\n\n const cellContent = ellipsis ? (\n <EllipsisCell\n rendered={rawContent}\n tooltip={\n ellipsisTooltip\n ? ellipsisTooltip(row.original)\n : rawContent\n }\n />\n ) : (\n rendered\n );\n\n return (\n <td\n key={cell.id}\n className={cn(\n 'px-2 py-4 text-sm leading-none text-foreground align-middle',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n // ellipsis 컬럼은 max-w-0으로 table 레이아웃상 너비를 고정하고\n // overflow-hidden으로 td 밖으로 나가는 콘텐츠를 클리핑\n ellipsis && 'max-w-0 overflow-hidden',\n cellCls,\n )}\n >\n {cellContent}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {!loading && hasPagination && totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={(page) => table.setPageIndex(page - 1)}\n />\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * 사용자 메시지 말풍선.\n * 텍스트가 한 줄이면 rounded-full, 두 줄 이상이면 rounded-2xl.\n * leading-6 = 24px 기준으로 28px 초과 여부로 판별.\n */\nexport function UserMessageBubble({ content }: { content: string }) {\n const textRef = React.useRef<HTMLParagraphElement>(null);\n const [multiLine, setMultiLine] = React.useState(false);\n\n React.useEffect(() => {\n const el = textRef.current;\n if (!el) return;\n const check = () => setMultiLine(el.offsetHeight > 28);\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [content]);\n\n return (\n <div className=\"flex items-end justify-end w-full\">\n <div\n className={cn(\n \"bg-secondary px-4 py-3 max-w-130\",\n multiLine ? \"rounded-2xl\" : \"rounded-full\",\n )}\n >\n <p\n ref={textRef}\n className=\"text-base leading-6 tracking-tight text-foreground\"\n >\n {content}\n </p>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\n\n/**\n * 디자인 시스템 전역 Provider 묶음.\n * layout.tsx (Server Component) 안에서 children을 감싸는 용도.\n *\n * 현재 포함된 Provider:\n * - TooltipProvider: Radix Tooltip 전역 설정\n * · delayDuration — hover → open 지연 시간 (ms)\n * · skipDelayDuration — 빠르게 연속 이동 시 딜레이 스킵 임계치 (ms)\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <TooltipProvider delayDuration={200} skipDelayDuration={300}>\n {children}\n </TooltipProvider>\n );\n}\n","export function RyaiLogoIcon() {\n return (\n <div className='flex size-10 shrink-0 items-center justify-center rounded-lg bg-sidebar-primary'>\n <div className='relative size-6 overflow-clip shrink-0'>\n <svg\n className='-translate-x-1/2 absolute left-[calc(50%+0.5px)] top-[12.5%] bottom-[12.5%] w-3.75'\n viewBox='0 0 15 18'\n fill='none'\n preserveAspectRatio='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n >\n <path\n d='M2.0625 17.9568C1.5 17.9568 1.01564 17.7837 0.609377 17.4375C0.203126 17.0625 0 16.6299 0 16.1394V2.8125C0 1.97597 0.28125 1.29807 0.84375 0.778845C1.43752 0.25962 2.21875 0 3.1875 0H7.875C9.7814 0 11.3125 0.519225 12.4688 1.55769C13.6563 2.59615 14.25 3.89422 14.25 5.45193C14.25 6.375 13.9844 7.24035 13.4531 8.0481C12.922 8.8557 12.1563 9.50475 11.1562 9.99525C11.5937 10.1972 11.9845 10.4712 12.3281 10.8172C12.7031 11.1634 13 11.5818 13.2187 12.072L14.7656 15.3606C14.9219 15.7068 15 15.9951 15 16.226C15 16.7453 14.7813 17.178 14.3438 17.524C13.9064 17.8414 13.4219 18 12.8906 18C12.547 18 12.2031 17.9135 11.8594 17.7405C11.5469 17.5672 11.2969 17.2933 11.1094 16.9182L9.32812 12.9807C9.01562 12.2885 8.59374 11.7981 8.06249 11.5095C7.56249 11.1923 6.96874 11.0337 6.28124 11.0337H5.06249C4.43749 11.0337 4.12501 11.3222 4.12501 11.899V16.1394C4.12501 16.6299 3.9219 17.0625 3.51563 17.4375C3.10938 17.7837 2.625 17.9568 2.0625 17.9568ZM4.82812 7.78845H7.68749C8.4689 7.78845 9.07828 7.58655 9.51562 7.18275C9.98437 6.7788 10.2187 6.25965 10.2187 5.625C10.2187 4.96153 9.98437 4.44231 9.51562 4.06731C9.07828 3.66347 8.4689 3.46155 7.68749 3.46155H4.82812C4.35938 3.46155 4.12501 3.67788 4.12501 4.11057V7.1394C4.12501 7.57215 4.35938 7.78845 4.82812 7.78845Z'\n fill='var(--sidebar-primary-foreground)'\n />\n </svg>\n </div>\n </div>\n );\n}\n","// Claude (Anthropic) icon — Figma node 3512:10198\nimport { cn } from '@/lib/utils';\n\nexport function ClaudeIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M3.74692 10.3071L6.50025 8.763L6.54692 8.62883L6.50025 8.55417H6.36667L5.90583 8.52617L4.332 8.48358L2.96758 8.427L1.64575 8.35583L1.31267 8.28525L1 7.874L1.03208 7.66867L1.31208 7.48142L1.71225 7.51642L2.59892 7.5765L3.92775 7.66867L4.89142 7.72525L6.32 7.874H6.54692L6.579 7.78242L6.50083 7.72525L6.44075 7.66867L5.06525 6.73767L3.57658 5.753L2.79725 5.186L2.37492 4.89958L2.16258 4.63008L2.07042 4.04208L2.45308 3.62092L2.967 3.65592L3.09825 3.6915L3.61917 4.09167L4.73217 4.95267L6.18525 6.02192L6.39817 6.19925L6.48275 6.13917L6.49383 6.09658L6.39817 5.93675L5.60775 4.50992L4.76425 3.05742L4.38858 2.45542L4.28942 2.09433C4.25163 1.95565 4.23125 1.8128 4.22875 1.66908L4.66508 1.07817L4.906 1L5.487 1.07817L5.732 1.2905L6.09367 2.11533L6.67817 3.41558L7.58525 5.18308L7.85125 5.70692L7.993 6.19225L8.04608 6.341H8.13825V6.25583L8.21292 5.26067L8.35117 4.03858L8.48533 2.4665L8.532 2.02317L8.75133 1.49233L9.18708 1.20533L9.52775 1.36867L9.80775 1.76825L9.76867 2.02725L9.60183 3.107L9.27575 4.80042L9.06342 5.93325H9.18708L9.32883 5.79208L9.90342 5.03025L10.8671 3.82625L11.2929 3.34792L11.7888 2.82058L12.1078 2.56917H12.7104L13.1537 3.22775L12.9554 3.90792L12.3348 4.69367L11.8208 5.35983L11.0835 6.3515L10.6227 7.14483L10.6653 7.209L10.7749 7.19733L12.4409 6.84383L13.341 6.6805L14.4149 6.49675L14.9008 6.72308L14.9539 6.9535L14.7626 7.42425L13.614 7.70775L12.2671 7.97725L10.261 8.4515L10.2365 8.469L10.2651 8.50458L11.1687 8.58975L11.5548 8.61075H12.501L14.2627 8.742L14.7235 9.0465L15 9.41867L14.9539 9.70158L14.2452 10.0632L13.2885 9.83633L11.0549 9.3055L10.2896 9.11358H10.1834V9.17775L10.821 9.80075L11.9912 10.8566L13.4548 12.2157L13.5288 12.5529L13.341 12.8183L13.1427 12.7898L11.8564 11.8232L11.36 11.3874L10.2365 10.4424H10.1618V10.5416L10.4208 10.9202L11.7888 12.9741L11.8599 13.6041L11.7607 13.81L11.4061 13.9343L11.0164 13.8631L10.2149 12.7402L9.3895 11.4761L8.72275 10.3427L8.64108 10.3893L8.24792 14.6208L8.06358 14.8367L7.63833 15L7.28425 14.7311L7.09642 14.2953L7.28425 13.4343L7.51117 12.312L7.69492 11.4195L7.86175 10.3112L7.96092 9.9425L7.95392 9.918L7.87225 9.9285L7.03575 11.0759L5.76408 12.7938L4.75725 13.8701L4.51575 13.9657L4.0975 13.7499L4.13658 13.3638L4.3705 13.0202L5.7635 11.2492L6.6035 10.1513L7.146 9.51783L7.1425 9.42567H7.11042L3.41033 11.8267L2.75117 11.9118L2.46708 11.6458L2.50267 11.2107L2.63742 11.0689L3.75042 10.3036L3.74692 10.3071Z'\n fill='#D97757'\n />\n </svg>\n );\n}\n","// DeepSeek icon — Figma node 3512:10200\nimport { cn } from '@/lib/utils';\n\nexport function DeepSeekIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M14.8531 3.83931C14.7048 3.76878 14.641 3.90319 14.5543 3.97146C14.5246 3.99349 14.4995 4.02212 14.4744 4.04854C14.2576 4.27321 14.0044 4.42084 13.6736 4.40319C13.1899 4.37674 12.777 4.52437 12.4119 4.88344C12.3343 4.44067 12.0765 4.17628 11.6841 4.00669C11.4788 3.91856 11.2712 3.83043 11.1274 3.63877C11.027 3.50224 10.9997 3.35023 10.9495 3.20042C10.9175 3.11012 10.8856 3.01756 10.7783 3.00214C10.662 2.98453 10.6163 3.07922 10.5707 3.15857C10.3882 3.48241 10.3175 3.83928 10.3243 4.20055C10.3403 5.01345 10.6939 5.66106 11.3966 6.12149C11.4765 6.17437 11.497 6.2272 11.4719 6.30435C11.424 6.46296 11.3669 6.61714 11.3168 6.77575C11.2848 6.87711 11.2369 6.89913 11.1251 6.85503C10.7395 6.69867 10.4064 6.46733 10.1121 6.18759C9.61244 5.71836 9.1607 5.20069 8.59719 4.79534C8.46487 4.70061 8.33252 4.61253 8.19561 4.52877C7.62067 3.98689 8.27092 3.54187 8.4215 3.48904C8.5789 3.43396 8.47625 3.24447 7.96746 3.24672C7.45868 3.2489 6.99326 3.41413 6.40008 3.63442C6.31339 3.66747 6.2221 3.69167 6.12856 3.7115C5.59013 3.61239 5.03115 3.59032 4.44709 3.65425C3.34739 3.77318 2.46904 4.27766 1.82337 5.13901C1.04768 6.17437 0.865163 7.35068 1.08876 8.57773C1.32376 9.8708 2.00362 10.9414 3.04857 11.7786C4.1323 12.6465 5.38029 13.0716 6.80394 12.9901C7.66864 12.9417 8.63144 12.8293 9.71744 11.9372C9.9912 12.0694 10.2787 12.1222 10.7555 12.1618C11.1229 12.1949 11.4765 12.1442 11.7503 12.0892C12.1792 12.0011 12.1495 11.6155 11.9944 11.5451C10.7373 10.9767 11.0133 11.208 10.7624 11.0207C11.4012 10.2872 12.364 9.52496 12.7405 7.05549C12.7701 6.85946 12.745 6.73607 12.7405 6.57747C12.7382 6.48056 12.761 6.44313 12.8751 6.43208C13.1899 6.39683 13.4956 6.31315 13.7763 6.16334C14.5908 5.73159 14.9193 5.02225 14.9969 4.17193C15.0083 4.04194 14.9946 3.90754 14.8531 3.83931ZM7.75533 11.4921C6.53701 10.5626 5.94612 10.2563 5.70198 10.2696C5.47383 10.2828 5.5149 10.5361 5.56507 10.7014C5.61756 10.8643 5.68601 10.9767 5.78181 11.1199C5.84798 11.2146 5.89364 11.3556 5.71568 11.4613C5.32325 11.6971 4.64106 11.382 4.6091 11.3666C3.81517 10.9128 3.15125 10.3136 2.68351 9.49416C2.23177 8.70546 1.96942 7.85959 1.92605 6.95639C1.91464 6.73832 1.98081 6.66117 2.2044 6.62157C2.49871 6.56869 2.80216 6.55764 3.09647 6.59949C4.33993 6.77575 5.39853 7.31546 6.28602 8.17018C6.79251 8.65701 7.1758 9.23862 7.57052 9.80695C7.99031 10.4105 8.44205 10.9855 9.01699 11.4569C9.22003 11.6221 9.38202 11.7477 9.53716 11.8402C9.06948 11.8909 8.2892 11.9019 7.75533 11.4921ZM8.33939 7.84636C8.33939 7.74943 8.41926 7.67235 8.51967 7.67235C8.54248 7.67235 8.56301 7.6767 8.58127 7.6833C8.60638 7.69215 8.6292 7.70538 8.64743 7.72516C8.67939 7.75603 8.69762 7.80006 8.69762 7.84634C8.69762 7.94327 8.61779 8.02035 8.51743 8.02035C8.41706 8.02035 8.33939 7.94329 8.33939 7.84636ZM10.1532 8.74956C10.0369 8.79584 9.9205 8.83544 9.80871 8.83987C9.63531 8.84867 9.44594 8.78037 9.34329 8.69666C9.18359 8.56668 9.0695 8.49402 9.0216 8.26711C9.00105 8.17018 9.01246 8.02037 9.03074 7.93449C9.0718 7.74943 9.02616 7.6305 8.89157 7.52252C8.78204 7.43439 8.64287 7.41019 8.49 7.41019C8.43296 7.41019 8.38052 7.38594 8.34171 7.36611C8.27782 7.33528 8.22538 7.25818 8.27555 7.16345C8.29152 7.13265 8.36911 7.05772 8.38737 7.04452C8.59499 6.92994 8.83455 6.96741 9.05585 7.05332C9.26121 7.13482 9.41635 7.28463 9.63992 7.49609C9.86807 7.75161 9.90912 7.82216 10.0392 8.01377C10.1419 8.16358 10.2354 8.31777 10.2993 8.49402C10.3381 8.60418 10.2878 8.69449 10.1532 8.74956Z'\n fill='#4D6BFE'\n />\n </svg>\n );\n}\n","// Gemini icon — Figma node 3512:10201\nimport { cn } from '@/lib/utils';\n\nexport function GeminiIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M13.4834 7.25875C12.4047 6.79445 11.461 6.15749 10.6518 5.34864C9.84291 4.5398 9.20592 3.59569 8.74162 2.51711C8.56338 2.10374 8.42015 1.67883 8.31034 1.24318C8.27453 1.10075 8.14682 1.00049 8.00001 1.00049C7.85318 1.00049 7.72547 1.10075 7.68968 1.24318C7.57985 1.67883 7.43662 2.10334 7.25838 2.51711C6.79408 3.59569 6.15711 4.5398 5.34824 5.34864C4.53939 6.15749 3.59525 6.79445 2.51665 7.25875C2.10327 7.43698 1.67836 7.5802 1.2427 7.69003C1.10026 7.72582 1 7.85353 1 8.00036C1 8.14716 1.10026 8.27487 1.2427 8.31068C1.67836 8.42049 2.10288 8.56371 2.51665 8.74195C3.59525 9.20624 4.539 9.84322 5.34824 10.6521C6.1575 11.4609 6.79408 12.405 7.25838 13.4836C7.43662 13.897 7.57985 14.3219 7.68968 14.7575C7.72547 14.9 7.85318 15.0002 8.00001 15.0002C8.14682 15.0002 8.27453 14.9 8.31034 14.7575C8.42015 14.3219 8.56338 13.8974 8.74162 13.4836C9.20592 12.405 9.84291 11.4613 10.6518 10.6521C11.4606 9.84322 12.4047 9.20624 13.4834 8.74195C13.8967 8.56371 14.3216 8.42049 14.7573 8.31068C14.8997 8.27487 15 8.14716 15 8.00036C15 7.85353 14.8997 7.72582 14.7573 7.69003C14.3216 7.5802 13.8971 7.43698 13.4834 7.25875Z'\n fill='white'\n />\n <mask\n id='mask0_3512_10201'\n style={{ maskType: 'alpha' }}\n maskUnits='userSpaceOnUse'\n x='1'\n y='1'\n width='14'\n height='14'\n >\n <path\n d='M7.99997 1C8.14678 1 8.27447 1.10027 8.31028 1.2427C8.42009 1.67834 8.56331 2.10327 8.74155 2.51663C9.20583 3.5952 9.84291 4.53925 10.6518 5.34808C11.461 6.1569 12.4047 6.79396 13.4833 7.25826C13.897 7.43647 14.3216 7.57969 14.7572 7.6895C14.8996 7.72531 14.9999 7.85302 14.9999 7.99983C14.9999 8.14663 14.8997 8.27434 14.7572 8.31013C14.3216 8.41994 13.8966 8.56316 13.4833 8.74139C12.4047 9.20569 11.4606 9.84273 10.6518 10.6516C9.84291 11.4608 9.20585 12.4044 8.74155 13.483C8.56331 13.8968 8.42009 14.3213 8.31028 14.7569C8.27449 14.8994 8.14678 14.9996 7.99997 14.9996C7.85316 14.9996 7.72545 14.8994 7.68964 14.7569C7.57983 14.3213 7.4366 13.8963 7.25838 13.483C6.79408 12.4045 6.15739 11.4604 5.34817 10.6516C4.53891 9.84273 3.59525 9.20566 2.51666 8.74139C2.10289 8.56316 1.67835 8.41994 1.2427 8.31013C1.10027 8.27432 1 8.14663 1 7.99983C1.00002 7.85302 1.10028 7.72531 1.2427 7.6895C1.67836 7.57969 2.10329 7.43649 2.51666 7.25826C3.59527 6.79394 4.53932 6.15692 5.34817 5.34808C6.15702 4.53925 6.79406 3.59522 7.25838 2.51663C7.43662 2.10287 7.57983 1.67834 7.68964 1.2427C7.72545 1.10028 7.85316 1.00002 7.99997 1Z'\n fill='black'\n />\n <path\n d='M7.99997 1C8.14678 1 8.27447 1.10027 8.31028 1.2427C8.42009 1.67834 8.56331 2.10327 8.74155 2.51663C9.20583 3.5952 9.84291 4.53925 10.6518 5.34808C11.461 6.1569 12.4047 6.79396 13.4833 7.25826C13.897 7.43647 14.3216 7.57969 14.7572 7.6895C14.8996 7.72531 14.9999 7.85302 14.9999 7.99983C14.9999 8.14663 14.8997 8.27434 14.7572 8.31013C14.3216 8.41994 13.8966 8.56316 13.4833 8.74139C12.4047 9.20569 11.4606 9.84273 10.6518 10.6516C9.84291 11.4608 9.20585 12.4044 8.74155 13.483C8.56331 13.8968 8.42009 14.3213 8.31028 14.7569C8.27449 14.8994 8.14678 14.9996 7.99997 14.9996C7.85316 14.9996 7.72545 14.8994 7.68964 14.7569C7.57983 14.3213 7.4366 13.8963 7.25838 13.483C6.79408 12.4045 6.15739 11.4604 5.34817 10.6516C4.53891 9.84273 3.59525 9.20566 2.51666 8.74139C2.10289 8.56316 1.67835 8.41994 1.2427 8.31013C1.10027 8.27432 1 8.14663 1 7.99983C1.00002 7.85302 1.10028 7.72531 1.2427 7.6895C1.67836 7.57969 2.10329 7.43649 2.51666 7.25826C3.59527 6.79394 4.53932 6.15692 5.34817 5.34808C6.15702 4.53925 6.79406 3.59522 7.25838 2.51663C7.43662 2.10287 7.57983 1.67834 7.68964 1.2427C7.72545 1.10028 7.85316 1.00002 7.99997 1Z'\n fill='url(#paint0_linear_3512_10201)'\n />\n </mask>\n <g mask='url(#mask0_3512_10201)'>\n <g filter='url(#filter0_f_3512_10201)'>\n <path\n d='M-0.264191 11.9446C1.3534 12.5191 3.2126 11.442 3.88846 9.53892C4.56431 7.63582 3.80089 5.62738 2.1833 5.05294C0.56571 4.4785 -1.29349 5.55558 -1.96935 7.45867C-2.64521 9.36177 -1.88178 11.3702 -0.264191 11.9446Z'\n fill='#FFE432'\n />\n </g>\n <g filter='url(#filter1_f_3512_10201)'>\n <path\n d='M6.9183 5.67012C9.14057 5.67012 10.9421 3.82905 10.9421 1.55796C10.9421 -0.713121 9.14057 -2.5542 6.9183 -2.5542C4.69604 -2.5542 2.89453 -0.713121 2.89453 1.55796C2.89453 3.82905 4.69604 5.67012 6.9183 5.67012Z'\n fill='#FC413D'\n />\n </g>\n <g filter='url(#filter2_f_3512_10201)'>\n <path\n d='M5.35356 18.821C7.67335 18.7074 9.435 16.1792 9.28833 13.174C9.14166 10.1689 7.1422 7.8248 4.82242 7.93838C2.50263 8.05197 0.740971 10.5802 0.887641 13.5854C1.03431 16.5905 3.03377 18.9346 5.35356 18.821Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter3_f_3512_10201)'>\n <path\n d='M5.35356 18.821C7.67335 18.7074 9.435 16.1792 9.28833 13.174C9.14166 10.1689 7.1422 7.8248 4.82242 7.93838C2.50263 8.05197 0.740971 10.5802 0.887641 13.5854C1.03431 16.5905 3.03377 18.9346 5.35356 18.821Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter4_f_3512_10201)'>\n <path\n d='M7.67771 17.0029C9.62249 15.8197 10.143 13.1249 8.84034 10.9839C7.53767 8.8429 4.90508 8.0665 2.9603 9.24975C1.01552 10.433 0.494992 13.1278 1.79767 15.2688C3.10034 17.4098 5.73293 18.1862 7.67771 17.0029Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter5_f_3512_10201)'>\n <path\n d='M15.5385 10.2746C17.7244 10.2746 19.4964 8.56823 19.4964 6.46334C19.4964 4.35845 17.7244 2.6521 15.5385 2.6521C13.3526 2.6521 11.5806 4.35845 11.5806 6.46334C11.5806 8.56823 13.3526 10.2746 15.5385 10.2746Z'\n fill='#3186FF'\n />\n </g>\n <g filter='url(#filter6_f_3512_10201)'>\n <path\n d='M-1.81884 9.8328C0.193829 11.3633 3.13412 10.8831 4.74849 8.7603C6.36286 6.63745 6.03998 3.67581 4.02731 2.14528C2.01464 0.614758 -0.925648 1.09493 -2.54002 3.21778C-4.15439 5.34063 -3.8315 8.30228 -1.81884 9.8328Z'\n fill='#FBBC04'\n />\n </g>\n <g filter='url(#filter7_f_3512_10201)'>\n <path\n d='M8.49415 12.0947C10.8965 13.7463 14.0809 13.2862 15.6067 11.067C17.1325 8.84777 16.4219 5.70982 14.0195 4.05818C11.6172 2.40654 8.43278 2.86666 6.907 5.08588C5.38121 7.30511 6.0918 10.4431 8.49415 12.0947Z'\n fill='#3186FF'\n />\n </g>\n <g filter='url(#filter8_f_3512_10201)'>\n <path\n d='M12.8618 0.495981C13.4729 1.32693 12.6876 2.94257 11.1077 4.1046C9.52771 5.26664 7.75145 5.53503 7.14028 4.70409C6.52908 3.87314 7.31444 2.2575 8.89436 1.09547C10.4743 -0.0665693 12.2506 -0.334969 12.8618 0.495981Z'\n fill='#749BFF'\n />\n </g>\n <g filter='url(#filter9_f_3512_10201)'>\n <path\n d='M7.84441 4.47389C10.2878 2.20754 11.1264 -0.860964 9.71758 -2.37981C8.30872 -3.89865 5.18586 -3.29267 2.74249 -1.02632C0.299108 1.24003 -0.539536 4.30854 0.869322 5.82738C2.27818 7.34622 5.40103 6.74025 7.84441 4.47389Z'\n fill='#FC413D'\n />\n </g>\n <g filter='url(#filter10_f_3512_10201)'>\n <path\n d='M2.83607 12.6143C4.28829 13.6536 5.95555 13.8116 6.56 12.9671C7.16446 12.1225 6.4772 10.5954 5.02498 9.556C3.57276 8.51664 1.9055 8.35869 1.30105 9.20321C0.696601 10.0477 1.38385 11.5749 2.83607 12.6143Z'\n fill='#FFEE48'\n />\n </g>\n </g>\n <defs>\n <filter\n id='filter0_f_3512_10201'\n x='-3.01023'\n y='4.10378'\n width='7.93965'\n height='8.79'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.397328'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter1_f_3512_10201'\n x='-0.947209'\n y='-6.39594'\n width='15.7311'\n height='15.9078'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.92087'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter2_f_3512_10201'\n x='-2.38671'\n y='4.66859'\n width='14.9494'\n height='17.4222'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter3_f_3512_10201'\n x='-2.38671'\n y='4.66859'\n width='14.9494'\n height='17.4222'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter4_f_3512_10201'\n x='-2.18553'\n y='5.43043'\n width='15.0093'\n height='15.3918'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter5_f_3512_10201'\n x='8.47705'\n y='-0.451419'\n width='14.1228'\n height='13.8295'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.55176'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter6_f_3512_10201'\n x='-6.38031'\n y='-1.56256'\n width='14.9691'\n height='15.1033'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.40634'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter7_f_3512_10201'\n x='3.59144'\n y='0.555303'\n width='15.3308'\n height='15.0422'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.25592'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter8_f_3512_10201'\n x='4.68523'\n y='-2.23444'\n width='10.6315'\n height='9.66896'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.12381'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter9_f_3512_10201'\n x='-1.7126'\n y='-5.11507'\n width='14.0121'\n height='13.6776'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.949197'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter10_f_3512_10201'\n x='-1.26804'\n y='6.31057'\n width='10.3972'\n height='9.54903'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.17479'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <linearGradient\n id='paint0_linear_3512_10201'\n x1='4.97972'\n y1='10.367'\n x2='12.251'\n y2='4.23654'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#4893FC' />\n <stop offset='0.27' stopColor='#4893FC' />\n <stop offset='0.776981' stopColor='#969DFF' />\n <stop offset='1' stopColor='#BD99FE' />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","// Google icon — Figma node 3003:3042\nimport { cn } from '@/lib/utils';\n\nexport function GoogleIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <defs>\n {/* G-shape clip path from google-mask.svg, translated to match original 9.38%/10.23% inset layout */}\n <clipPath id='google-g-clip'>\n <path\n transform='translate(1.637, 1.5)'\n d='M12.6058 5.2941H6.49957V7.79314H10.0082C9.95182 8.14681 9.82517 8.49474 9.6397 8.81199C9.42721 9.17546 9.16451 9.45219 8.89525 9.66292C8.08869 10.2942 7.14836 10.4233 6.49531 10.4233C4.84561 10.4233 3.43605 9.33425 2.89038 7.85448C2.86836 7.80078 2.85373 7.74531 2.83593 7.69048C2.71535 7.31386 2.64946 6.91499 2.64946 6.50041C2.64946 6.06895 2.72081 5.65594 2.85089 5.26587C3.36401 3.72743 4.80534 2.57837 6.49649 2.57837C6.83665 2.57837 7.16421 2.61972 7.47485 2.70221C8.18477 2.89071 8.68693 3.26198 8.99464 3.55565L10.8513 1.69854C9.7219 0.640882 8.24962 0 6.49341 0C5.08943 0 3.79321 0.446757 2.73101 1.20184C1.86959 1.8142 1.16311 2.63406 0.686317 3.58624C0.242835 4.46911 0 5.44749 0 6.49944C0 7.55143 0.243206 8.53998 0.68669 9.41469V9.42058C1.15512 10.3492 1.84012 11.1487 2.67267 11.7583C3.39999 12.2908 4.70415 13 6.49341 13C7.52236 13 8.4343 12.8105 9.23855 12.4554C9.81872 12.1993 10.3328 11.8652 10.7982 11.4358C11.4131 10.8684 11.8947 10.1666 12.2234 9.35918C12.5522 8.55175 12.728 7.63869 12.728 6.64878C12.728 6.18776 12.6827 5.71957 12.6058 5.29405V5.2941Z'\n />\n </clipPath>\n </defs>\n <g clipPath='url(#google-g-clip)'>\n {/* google.svg content scaled to fit the 12.728×13 area at offset (1.637, 1.5) */}\n <svg\n x='1.637'\n y='1.5'\n width='12.728'\n height='13'\n viewBox='0 0 12.9934 13.226'\n preserveAspectRatio='none'\n >\n <defs>\n <filter\n id='filter0_f_0_4'\n x='0.00123978'\n y='6.59908'\n width='5.01811'\n height='4.65866'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter1_f_0_4'\n x='6.41386'\n y='0.0083065'\n width='4.65522'\n height='3.72592'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter2_f_0_4'\n x='1.61592'\n y='0'\n width='5.10149'\n height='4.13858'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter3_f_0_4'\n x='6.00225'\n y='6.70434'\n width='6.97976'\n height='6.51173'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter4_f_0_4'\n x='6.49965'\n y='5.25479'\n width='6.49376'\n height='2.76446'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter5_f_0_4'\n x='0'\n y='2.12696'\n width='4.17777'\n height='4.80938'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter6_f_0_4'\n x='1.08794'\n y='0.303909'\n width='4.36359'\n height='3.80976'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.132733'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter7_f_0_4'\n x='1.90901'\n y='9.87395'\n width='4.76089'\n height='3.35204'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter8_f_0_4'\n x='5.80414'\n y='10.2966'\n width='1.65634'\n height='2.92939'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <radialGradient\n id='paint0_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(4.92213 11.1224) rotate(-92.3395) scale(6.47935 9.51739)'\n >\n <stop offset='0.141612' stopColor='#1ABD4D' />\n <stop offset='0.247515' stopColor='#6EC30D' />\n <stop offset='0.311547' stopColor='#8AC502' />\n <stop offset='0.366013' stopColor='#A2C600' />\n <stop offset='0.445673' stopColor='#C8C903' />\n <stop offset='0.540305' stopColor='#EBCB03' />\n <stop offset='0.615636' stopColor='#F7CD07' />\n <stop offset='0.699345' stopColor='#FDCD04' />\n <stop offset='0.771242' stopColor='#FDCE05' />\n <stop offset='0.860566' stopColor='#FFCE0A' />\n </radialGradient>\n <radialGradient\n id='paint1_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientTransform='matrix(4.49175 -1.1026e-05 -6.31333e-06 5.80085 10.8532 3.55867)'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='0.408458' stopColor='#FB4E5A' />\n <stop offset='1' stopColor='#FF4540' />\n </radialGradient>\n <radialGradient\n id='paint2_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(8.40027 -0.801934) rotate(151.02) scale(7.19406 9.76228)'\n >\n <stop offset='0.231273' stopColor='#FF4541' />\n <stop offset='0.311547' stopColor='#FF4540' />\n <stop offset='0.457516' stopColor='#FF4640' />\n <stop offset='0.540305' stopColor='#FF473F' />\n <stop offset='0.699346' stopColor='#FF5138' />\n <stop offset='0.771242' stopColor='#FF5B33' />\n <stop offset='0.860566' stopColor='#FF6C29' />\n <stop offset='1' stopColor='#FF8C18' />\n </radialGradient>\n <radialGradient\n id='paint3_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(6.7259 12.3369) rotate(-127.454) scale(18.7675 6.92755)'\n >\n <stop offset='0.131546' stopColor='#0CBA65' />\n <stop offset='0.209784' stopColor='#0BB86D' />\n <stop offset='0.297297' stopColor='#09B479' />\n <stop offset='0.396257' stopColor='#08AD93' />\n <stop offset='0.477124' stopColor='#0AA6A9' />\n <stop offset='0.568425' stopColor='#0D9CC6' />\n <stop offset='0.667385' stopColor='#1893DD' />\n <stop offset='0.768727' stopColor='#258BF1' />\n <stop offset='0.858506' stopColor='#3086FF' />\n </radialGradient>\n <radialGradient\n id='paint4_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(6.07459 1.26562) rotate(96.6178) scale(7.00829 9.69018)'\n >\n <stop offset='0.366013' stopColor='#FF4E3A' />\n <stop offset='0.457516' stopColor='#FF8A1B' />\n <stop offset='0.540305' stopColor='#FFA312' />\n <stop offset='0.615636' stopColor='#FFB60C' />\n <stop offset='0.771242' stopColor='#FFCD0A' />\n <stop offset='0.860566' stopColor='#FECF0A' />\n <stop offset='0.915033' stopColor='#FECF08' />\n <stop offset='1' stopColor='#FDCD01' />\n </radialGradient>\n <radialGradient\n id='paint5_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(4.93896 1.1933) rotate(132.119) scale(3.48096 9.81819)'\n >\n <stop offset='0.315904' stopColor='#FF4C3C' />\n <stop offset='0.603818' stopColor='#FF692C' />\n <stop offset='0.726837' stopColor='#FF7825' />\n <stop offset='0.884534' stopColor='#FF8D1B' />\n <stop offset='1' stopColor='#FF9F13' />\n </radialGradient>\n <radialGradient\n id='paint6_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientTransform='matrix(-6.29326 -3.48558 4.72991 -8.5399 8.40022 13.9884)'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='0.231273' stopColor='#0FBC5F' />\n <stop offset='0.311547' stopColor='#0FBC5F' />\n <stop offset='0.366013' stopColor='#0FBC5E' />\n <stop offset='0.457516' stopColor='#0FBC5D' />\n <stop offset='0.540305' stopColor='#12BC58' />\n <stop offset='0.699346' stopColor='#28BF3C' />\n <stop offset='0.771242' stopColor='#38C02B' />\n <stop offset='0.860566' stopColor='#52C218' />\n <stop offset='0.915033' stopColor='#67C30F' />\n <stop offset='1' stopColor='#86C504' />\n </radialGradient>\n <linearGradient\n id='paint7_linear_0_4'\n x1='5.8419'\n y1='11.7613'\n x2='7.42272'\n y2='11.7613'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#0FBC5C' />\n <stop offset='1' stopColor='#0CBA65' />\n </linearGradient>\n </defs>\n <g id='Group'>\n <g id='Vector' filter='url(#filter0_f_0_4)'>\n <path\n d='M0.0389995 6.63684C0.0457489 7.67224 0.334607 8.7405 0.771843 9.60288V9.60882C1.08777 10.2351 1.51954 10.7298 2.01133 11.22L4.98159 10.113C4.41963 9.82148 4.33389 9.64283 3.93105 9.31684C3.5194 8.89287 3.21259 8.40614 3.02152 7.83544H3.01382L3.02152 7.8295C2.89581 7.45263 2.88341 7.05259 2.87878 6.63684H0.0389995Z'\n fill='url(#paint0_radial_0_4)'\n />\n </g>\n <g id='Vector_2' filter='url(#filter1_f_0_4)'>\n <path\n d='M6.63213 0.0460663C6.33855 1.0995 6.4508 2.12346 6.63213 2.71925C6.97115 2.71951 7.29773 2.76079 7.6074 2.84301C8.31732 3.03152 8.81943 3.4028 9.12713 3.69647L11.0313 1.79191C9.90328 0.735517 8.54574 0.0477307 6.63213 0.0460663Z'\n fill='url(#paint1_radial_0_4)'\n />\n </g>\n <g id='Vector_3' filter='url(#filter2_f_0_4)'>\n <path\n d='M6.62582 0.0377598C5.1858 0.037728 3.85631 0.495986 2.76684 1.27046C2.36232 1.55802 1.9911 1.8902 1.66055 2.25959C1.57395 3.08935 2.30878 4.10921 3.76398 4.10077C4.47003 3.26192 5.51426 2.71919 6.6765 2.71919C6.67756 2.71919 6.67859 2.71927 6.67965 2.71928L6.63219 0.0379496C6.63004 0.0379482 6.62797 0.0377598 6.62582 0.0377598Z'\n fill='url(#paint2_radial_0_4)'\n />\n </g>\n <g id='Vector_4' filter='url(#filter3_f_0_4)'>\n <path\n d='M11.3788 6.93713L10.0935 7.839C10.0371 8.19267 9.91039 8.54059 9.72492 8.85784C9.51243 9.22132 9.24975 9.49805 8.98049 9.70879C8.1756 10.3387 7.23775 10.4684 6.58487 10.469C5.91005 11.6429 5.79174 12.2309 6.63233 13.1783C7.67248 13.1775 8.59461 12.9858 9.40799 12.6266C9.99595 12.367 10.5169 12.0284 10.9885 11.5933C11.6117 11.0183 12.0998 10.3071 12.433 9.48882C12.7661 8.67056 12.9443 7.74529 12.9443 6.7421L11.3788 6.93713Z'\n fill='url(#paint3_radial_0_4)'\n />\n </g>\n <g id='Vector_5' filter='url(#filter4_f_0_4)'>\n <path\n d='M6.53741 5.29255V7.98149H12.7214C12.7758 7.61324 12.9557 7.1367 12.9557 6.7422C12.9557 6.28118 12.9104 5.71807 12.8335 5.29255H6.53741Z'\n fill='#3086FF'\n />\n </g>\n <g id='Vector_6' filter='url(#filter5_f_0_4)'>\n <path\n d='M1.69018 2.16472C1.30857 2.59118 0.982551 3.06851 0.724059 3.58474C0.280584 4.46761 0.0377598 5.54093 0.0377598 6.59288C0.0377598 6.6077 0.038961 6.6222 0.0390579 6.637C0.23546 7.02162 2.75199 6.94797 2.87884 6.637C2.87868 6.62249 2.87708 6.60835 2.87708 6.5938C2.87708 6.16234 2.94844 5.84432 3.07853 5.45425C3.239 4.9731 3.49028 4.53003 3.81158 4.14829C3.88442 4.05331 4.0787 3.84913 4.13538 3.72666C4.15697 3.68001 4.09618 3.65383 4.09278 3.63741C4.08898 3.61904 4.00747 3.63381 3.98921 3.62013C3.93124 3.5767 3.81643 3.55402 3.74671 3.53386C3.5977 3.49076 3.35075 3.39573 3.21359 3.29722C2.78001 2.98582 2.10339 2.61387 1.69018 2.16472Z'\n fill='url(#paint4_radial_0_4)'\n />\n </g>\n <g id='Vector_7' filter='url(#filter6_f_0_4)'>\n <path\n d='M3.22306 3.63913C4.22847 4.26118 4.51761 3.32515 5.18606 3.03225L4.02326 0.569376C3.59552 0.752998 3.19139 0.981132 2.81641 1.24769C2.25643 1.64576 1.76191 2.13153 1.35341 2.68435L3.22306 3.63913Z'\n fill='url(#paint5_radial_0_4)'\n />\n </g>\n <g id='Vector_8' filter='url(#filter7_f_0_4)'>\n <path\n d='M3.63192 9.92279C2.28229 10.4204 2.071 10.4383 1.94677 11.2926C2.18417 11.5292 2.43924 11.7481 2.7103 11.9465C3.43762 12.479 4.83667 13.1882 6.62593 13.1882C6.62803 13.1882 6.63004 13.188 6.63214 13.188V10.4215C6.63079 10.4215 6.62923 10.4216 6.62788 10.4216C5.95786 10.4216 5.42245 10.2419 4.87349 9.92929C4.73814 9.85222 4.49258 10.0592 4.36775 9.96665C4.19559 9.83906 3.78125 10.0766 3.63192 9.92279Z'\n fill='url(#paint6_radial_0_4)'\n />\n </g>\n <g id='Vector_9' opacity='0.5' filter='url(#filter8_f_0_4)'>\n <path\n d='M5.8419 10.3344V13.1401C6.09225 13.17 6.35278 13.1882 6.6261 13.1882C6.90009 13.1882 7.16515 13.1738 7.42272 13.1474V10.3533C7.13408 10.4037 6.86223 10.4216 6.62805 10.4216C6.35834 10.4216 6.09604 10.3895 5.8419 10.3344Z'\n fill='url(#paint7_linear_0_4)'\n />\n </g>\n </g>\n </svg>\n </g>\n </svg>\n );\n}\n","// OpenAI icon — Figma node 3512:10197\nimport { cn } from \"@/lib/utils\";\n\nexport function OpenAiIcon({ className }: { className?: string }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0 size-4\", className)}\n >\n <path d=\"M14.0768 6.73012C14.3987 5.77679 14.2879 4.73246 13.7731 3.86531C12.9989 2.53529 11.4427 1.85102 9.92273 2.17303C9.24656 1.42139 8.2751 0.99394 7.25664 1.00006C5.70301 0.996565 4.32452 1.98359 3.84655 3.44224C2.84849 3.64393 1.98699 4.26038 1.48286 5.13409C0.70294 6.46062 0.880738 8.13278 1.9227 9.2703C1.6008 10.2236 1.71164 11.268 2.22642 12.1351C3.00057 13.4651 4.55686 14.1494 6.07679 13.8274C6.75251 14.579 7.72441 15.0065 8.74287 14.9999C10.2974 15.0039 11.6763 14.016 12.1543 12.556C13.1524 12.3543 14.0139 11.7379 14.518 10.8642C15.297 9.53762 15.1188 7.86677 14.0773 6.72925L14.0768 6.73012ZM8.74376 14.0851C8.12169 14.086 7.51913 13.8712 7.0416 13.4778C7.06332 13.4665 7.10101 13.4459 7.1254 13.431L9.95066 11.821C10.0952 11.74 10.1839 11.5882 10.183 11.4242V7.49402L11.377 8.17434C11.3899 8.18047 11.3983 8.19272 11.4001 8.20672V11.4614C11.3983 12.9086 10.2105 14.082 8.74376 14.0851ZM3.03116 11.6775C2.71946 11.1463 2.60729 10.5238 2.71414 9.91957C2.73498 9.93182 2.77178 9.95413 2.79794 9.96901L5.6232 11.579C5.76642 11.6617 5.94377 11.6617 6.08743 11.579L9.53654 9.61375V10.9744C9.53742 10.9884 9.53077 11.002 9.51969 11.0107L6.66383 12.6378C5.39176 13.3606 3.76719 12.9309 3.03161 11.6775H3.03116ZM2.2876 5.59216C2.59798 5.06015 3.08792 4.65327 3.67141 4.44195C3.67141 4.46601 3.67008 4.50845 3.67008 4.5382V7.75871C3.6692 7.92234 3.75788 8.07415 3.90198 8.15509L7.35108 10.1199L6.15704 10.8003C6.14507 10.8081 6.12999 10.8095 6.11669 10.8038L3.2604 9.17536C1.99098 8.44997 1.55557 6.84738 2.28716 5.5926L2.2876 5.59216ZM12.098 7.8449L8.64888 5.87961L9.84292 5.19972C9.85489 5.19184 9.86996 5.19053 9.88326 5.19622L12.7396 6.82331C14.0112 7.54827 14.447 9.15349 13.7124 10.4083C13.4015 10.9394 12.912 11.3463 12.329 11.558V8.24128C12.3303 8.07765 12.2421 7.92628 12.0984 7.8449H12.098ZM13.2863 6.07999C13.2654 6.0673 13.2286 6.04542 13.2025 6.03055L10.3772 4.42051C10.234 4.33782 10.0566 4.33782 9.91297 4.42051L6.46386 6.38581V5.02515C6.46298 5.01115 6.46963 4.99759 6.48071 4.98884L9.33657 3.36305C10.6086 2.63897 12.235 3.06992 12.9684 4.32557C13.2783 4.85583 13.3905 5.47666 13.2854 6.07999H13.2863ZM5.81475 8.5051L4.62026 7.82477C4.6074 7.81865 4.59898 7.8064 4.59721 7.7924V4.53777C4.59809 3.08873 5.78947 1.91446 7.25797 1.91533C7.87916 1.91533 8.48039 2.13059 8.95792 2.5226C8.93619 2.53397 8.89895 2.55454 8.87412 2.56941L6.04885 4.17945C5.90431 4.26038 5.81563 4.41176 5.81652 4.57583L5.81475 8.50423V8.5051ZM6.46342 7.1252L7.99976 6.24974L9.53609 7.12476V8.87523L7.99976 9.75025L6.46342 8.87523V7.1252Z\" fill=\"black\"/>\n </svg>\n );\n}\n","// Upstage (Solar) icon — Figma node 3512:10199\nimport { cn } from '@/lib/utils';\n\nexport function UpstageIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M12.1333 1L11.9366 1.75658H13.3048L13.5 1H12.1333ZM10.2497 2.32417L10.0514 3.08133H12.963L13.1582 2.32417H10.2497ZM8.51165 3.64833L8.31332 4.4055H12.6207L12.8159 3.64833H8.51165ZM3.21209 4.9725L3.01323 5.72967H12.2784L12.4735 4.97308H3.21104L3.21209 4.9725ZM3.7575 6.29725L3.55917 7.05383H11.9366L12.1317 6.29725H3.75645H3.7575ZM3.86511 15L4.06344 14.2434H2.69306L2.5 15H3.86511ZM5.75031 13.6758L5.94864 12.9192H3.03539L2.84286 13.6758H5.75031ZM7.48835 12.3511L7.68668 11.5945H3.37719L3.18414 12.3511H7.48835ZM12.7884 11.0269L12.9868 10.2703H3.71953L3.52647 11.0269H12.7884ZM12.2409 9.70275L12.4392 8.94617H4.06186L3.8688 9.70275H12.2409ZM11.618 8.37858L11.8163 7.622H3.95584L3.76278 8.37858H11.6185H11.618Z'\n fill='url(#paint0_linear_3512_10199)'\n />\n <defs>\n <linearGradient\n id='paint0_linear_3512_10199'\n x1='8'\n y1='1'\n x2='8'\n y2='15'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#AEBCFE' />\n <stop offset='1' stopColor='#805DFA' />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentBlogIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-blog.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentCsIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-cs.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentDataIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-data.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentHrIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-hr.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentMailIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-mail.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentTrendIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-trend.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","// AI 에이전트 icon — Figma lucide/aiagent (node 3101:6885)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiAgentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 19.5002 21.0003\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M8.47946 18.7503C7.56995 18.6171 6.69834 18.3505 5.88357 17.9697C5.60883 17.8365 5.16355 17.7793 4.86985 17.846C4.24457 17.9983 3.19296 18.2553 2.3024 18.4647C1.44974 18.6742 0.919194 18.1411 1.12762 17.2843L1.74343 14.7141C1.81922 14.419 1.74343 13.962 1.62027 13.6859C0.86235 12.0867 0.559182 10.2304 0.871824 8.27887C1.47816 4.52813 4.49089 1.4914 8.22366 0.872636C14.3818 -0.126913 19.6304 5.1469 18.6261 11.3346C18.4745 12.2485 18.1998 13.1148 17.8114 13.9049M13.5987 14.7668C13.7576 14.0782 14.7417 14.0782 14.9006 14.7668L14.9014 14.7683L15.0945 15.6184C15.1833 16.0091 15.4905 16.3162 15.8813 16.4052L16.7321 16.599H16.7336C17.4222 16.7579 17.4221 17.742 16.7336 17.901L16.7321 17.9017L15.882 18.0948C15.4913 18.1837 15.1834 18.4909 15.0945 18.8816L14.9014 19.7325L14.9006 19.734C14.7417 20.4224 13.7576 20.4225 13.5987 19.734V19.7325L13.4048 18.8823C13.327 18.5405 13.0823 18.2622 12.7606 18.1386L12.6181 18.0948L11.768 17.9017L11.7664 17.901C11.0779 17.7421 11.0779 16.7579 11.7664 16.599H11.768L12.6181 16.4052L12.7606 16.3622C13.0825 16.2385 13.3271 15.9604 13.4048 15.6184L13.5987 14.7683V14.7668Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","// AI 빌더 icon — Figma lucide/aibuilder (node 4043:15581)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiBuilderIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 18.6801 21.5001\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M9.34003 13.75C4.6 13.75 0.75 16.88 0.75 20.75M17.9301 20.7501C17.9301 19.8401 17.7201 18.9801 17.3301 18.1801M9.34009 10.75C12.1001 10.75 14.3401 8.51 14.3401 5.75C14.3401 2.99 12.1001 0.75 9.34009 0.75C6.58009 0.75 4.34009 2.99 4.34009 5.75C4.34009 8.51 6.58009 10.75 9.34009 10.75ZM17.0901 15.52L16.0101 15.77C15.2401 15.95 14.6301 16.55 14.4501 17.32L14.2001 18.4C14.1801 18.51 14.0101 18.51 13.9801 18.4L13.7301 17.32C13.5501 16.55 12.9501 15.94 12.1801 15.76L11.1001 15.51C10.9901 15.49 10.9901 15.32 11.1001 15.29L12.1801 15.04C12.9501 14.86 13.5601 14.26 13.7401 13.49L13.9901 12.41C14.0101 12.3 14.1801 12.3 14.2101 12.41L14.4601 13.49C14.6401 14.26 15.2401 14.87 16.0101 15.05L17.0901 15.3C17.2001 15.32 17.2001 15.49 17.0901 15.52Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","// AI 클라우드 icon — Figma lucide/aicloud (node 3101:6899)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiCloudIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 22.5 18.5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M11.775 15.1742H18.1117C20.1214 15.1742 21.75 13.4433 21.75 11.3052C21.75 9.16817 20.1214 7.43726 18.1128 7.43726H17.0733C17.4849 5.48223 16.7772 3.46616 15.2148 2.14579C13.6524 0.826524 11.4726 0.406001 9.4986 1.04067C7.52355 1.67644 6.0525 3.27199 5.63985 5.22703C2.93925 5.22703 0.75 7.45391 0.75 10.2001C0.75 10.7477 0.836994 11.2747 0.997692 11.7674M6.15888 12.1002C5.99203 11.3908 4.95868 11.3908 4.79183 12.1002L4.79104 12.1018L4.58828 12.9777C4.49503 13.3803 4.17243 13.6966 3.76219 13.7883L2.86877 13.988H2.86719C2.14424 14.1517 2.1443 15.1656 2.86719 15.3294L2.86877 15.3302L3.7614 15.5291C4.1716 15.6207 4.49496 15.9372 4.58828 16.3397L4.79104 17.2164L4.79183 17.2179C4.95877 17.9273 5.99202 17.9273 6.15888 17.2179V17.2164L6.36244 16.3405C6.44412 15.9884 6.70108 15.7016 7.03884 15.5742L7.18853 15.5291L8.08115 15.3302L8.08274 15.3294C8.80575 15.1657 8.80575 14.1517 8.08274 13.988H8.08115L7.18853 13.7883L7.03884 13.744C6.70091 13.6166 6.44405 13.33 6.36244 12.9777L6.15888 12.1018V12.1002Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * AI Datacenter icon — SVG from public/icons/aidatacenter.svg\n * Uses stroke=\"currentColor\" for CSS color control.\n */\nexport function AiDatacenterIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.7018 17.917\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M15.625 3.125C15.625 4.50571 12.2671 5.625 8.125 5.625C3.98286 5.625 0.625 4.50571 0.625 3.125M15.625 3.125C15.625 1.74429 12.2671 0.625 8.125 0.625C3.98286 0.625 0.625 1.74429 0.625 3.125M15.625 3.125V10.2083M0.625 3.125V14.7917M0.625 14.7917C0.625 15.4547 1.41518 16.0906 2.8217 16.5594C4.22822 17.0283 6.13588 17.2917 8.125 17.2917C8.69035 17.2917 9.24912 17.2704 9.79167 17.2292M0.625 14.7917C0.624849 15.1266 0.826543 15.458 1.21811 15.7664C1.60968 16.0748 2.18313 16.3539 2.90444 16.587C3.62575 16.8201 4.4802 17.0025 5.41708 17.1234C6.35396 17.2443 7.35417 17.3013 8.35833 17.2908M0.625 8.95833C0.625 9.62137 1.41518 10.2573 2.8217 10.7261C4.22822 11.1949 6.13588 11.4583 8.125 11.4583C8.54666 11.4583 8.96466 11.4465 9.375 11.4234M12.8819 12.3222C13.021 11.731 13.8821 11.731 14.0211 12.3222L14.0218 12.3235L14.1908 13.0534C14.2685 13.3889 14.5373 13.6526 14.8792 13.7289L15.6237 13.8953H15.625C16.2275 14.0318 16.2274 14.8767 15.625 15.0132L15.6237 15.0138L14.8798 15.1796C14.538 15.2559 14.2685 15.5197 14.1908 15.8551L14.0218 16.5857L14.0211 16.587C13.882 17.1781 13.021 17.1781 12.8819 16.587V16.5857L12.7123 15.8558C12.6442 15.5623 12.4301 15.3233 12.1486 15.2172L12.0239 15.1796L11.28 15.0138L11.2787 15.0132C10.6762 14.8768 10.6762 14.0318 11.2787 13.8953H11.28L12.0239 13.7289L12.1486 13.692C12.4302 13.5858 12.6443 13.347 12.7123 13.0534L12.8819 12.3235V12.3222Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface AlignJustifyIconProps {\n className?: string;\n}\n\n/**\n * align-justify icon — SVG downloaded from Figma Lucide Icon library.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:64\n */\nexport function AlignJustifyIcon({ className }: AlignJustifyIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -5.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 0.75H18.75M0.75 6.75H18.75M0.75 12.75H18.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Align-left icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/align-left)\n */\nexport function AlignLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 9\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.5 0.5H0.5M8.5 4.5H0.5M9.833 8.5H0.5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function ArrowDownIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-5.54 -5.54 24 24\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6.45833 0.625V12.2917M6.45833 12.2917L12.2917 6.45833M6.45833 12.2917L0.625 6.45833\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Blockquote icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/quote)\n */\nexport function BlockquoteIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.8334 -2.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M7.23921 8.10008C7.23921 9.42557 8.26764 10.5001 9.53627 10.5001C10.8049 10.5001 11.8333 9.42557 11.8333 8.10008C11.8333 6.7746 10.8049 5.70008 9.53627 5.70008C8.26764 5.70008 7.23921 6.7746 7.23921 8.10008ZM7.23921 8.10008C6.85637 3.70008 8.00488 0.900082 10.302 0.500082M0.572549 8.10008C0.572549 9.42557 1.60098 10.5001 2.86961 10.5001C4.13824 10.5001 5.16667 9.42557 5.16667 8.10008C5.16667 6.7746 4.13824 5.70008 2.86961 5.70008C1.60098 5.70008 0.572549 6.7746 0.572549 8.10008ZM0.572549 8.10008C0.189707 3.70008 1.33822 0.900082 3.63535 0.500082\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Bold icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/bold)\n */\nexport function BoldIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-3.1667 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 5.83333H6.5C7.20724 5.83333 7.88552 6.11428 8.38562 6.61438C8.88571 7.11448 9.16667 7.79276 9.16667 8.5C9.16667 9.20724 8.88571 9.88552 8.38562 10.3856C7.88552 10.8857 7.20724 11.1667 6.5 11.1667H1.16667C0.989856 11.1667 0.820287 11.0964 0.695262 10.9714C0.570238 10.8464 0.5 10.6768 0.5 10.5V1.16667C0.5 0.989856 0.570238 0.820287 0.695262 0.695262C0.820287 0.570238 0.989856 0.5 1.16667 0.5H5.83333C6.54058 0.5 7.21885 0.780951 7.71895 1.28105C8.21905 1.78115 8.5 2.45942 8.5 3.16667C8.5 3.87391 8.21905 4.55219 7.71895 5.05229C7.21885 5.55238 6.54058 5.83333 5.83333 5.83333\" />\n </svg>\n );\n}\n","import { cn } from '@/lib/utils';\n\n/**\n * Book-open icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function BookOpenIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 17.9167 16.25'\n fill='none'\n stroke='currentColor'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n className={cn('shrink-0', className)}\n >\n <path d='M8.95833 3.95833C8.95833 3.07428 8.60714 2.22643 7.98202 1.60131C7.3569 0.976189 6.50905 0.625 5.625 0.625H0.625V13.125H6.45833C7.12137 13.125 7.75726 13.3884 8.2261 13.8572C8.69494 14.3261 8.95833 14.962 8.95833 15.625M8.95833 3.95833V15.625M8.95833 3.95833C8.95833 3.07428 9.30952 2.22643 9.93464 1.60131C10.5598 0.976189 11.4076 0.625 12.2917 0.625H17.2917V13.125H11.4583C10.7953 13.125 10.1594 13.3884 9.69057 13.8572C9.22172 14.3261 8.95833 14.962 8.95833 15.625' />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface BookUpIconProps {\n className?: string;\n}\n\n/**\n * Book-up icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:418 (lucide/book-up)\n */\nexport function BookUpIcon({ className }: BookUpIconProps) {\n return (\n <svg\n viewBox=\"-3.25 -1.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 18.25V3.25C0.75 2.58696 1.01339 1.95107 1.48223 1.48223C1.95107 1.01339 2.58696 0.75 3.25 0.75H16.75V20.75H3.25C2.58696 20.75 1.95107 20.4866 1.48223 20.0178C1.01339 19.5489 0.75 18.913 0.75 18.25ZM0.75 18.25C0.75 17.587 1.01339 16.9511 1.48223 16.4822C1.95107 16.0134 2.58696 15.75 3.25 15.75H16.75M8.75 11.75V5.75M8.75 5.75L5.75 8.75M8.75 5.75L11.75 8.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-check-fill icon — filled circle with white checkmark.\n * SVG downloaded from Figma design system.\n */\nexport function CircleCheckFillIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.917 17.917\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M8.958 16.458C13.1 16.458 16.458 13.1 16.458 8.958C16.458 4.817 13.1 1.458 8.958 1.458C4.817 1.458 1.458 4.817 1.458 8.958C1.458 13.1 4.817 16.458 8.958 16.458Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.458 8.958L8.125 10.625L11.458 7.292\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-help icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function CircleHelpIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M6.5332 6.4584C6.72912 5.90146 7.11583 5.43182 7.62483 5.13268C8.13383 4.83353 8.73228 4.72418 9.31418 4.82399C9.89608 4.92381 10.4239 5.22634 10.8041 5.67801C11.1843 6.12968 11.3924 6.70134 11.3915 7.29173C11.3915 8.9584 8.89154 9.79173 8.89154 9.79173M8.95833 13.125H8.96667M17.2917 8.95833C17.2917 13.5607 13.5607 17.2917 8.95833 17.2917C4.35596 17.2917 0.625 13.5607 0.625 8.95833C0.625 4.35596 4.35596 0.625 8.95833 0.625C13.5607 0.625 17.2917 4.35596 17.2917 8.95833Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-outline icon — stroke-only circle.\n * SVG downloaded from Figma design system.\n */\nexport function CircleOutlineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.917 17.917\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M8.958 16.458C13.1 16.458 16.458 13.1 16.458 8.958C16.458 4.817 13.1 1.458 8.958 1.458C4.817 1.458 1.458 4.817 1.458 8.958C1.458 13.1 4.817 16.458 8.958 16.458Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Code icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/code)\n */\nexport function CodeIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-0.8334 -2.1666 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M11.1667 8.50013L13.8333 5.83347L11.1667 3.1668M3.16667 3.1668L0.5 5.83347L3.16667 8.50013M8.83333 0.500134L5.5 11.1668\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Code-square icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/square-code)\n */\nexport function CodeSquareIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.16667 4.83333L3.83333 6.5L5.16667 8.16667M7.83333 4.83333L9.16667 6.5L7.83333 8.16667M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Credit icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function CreditIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.3864 10.9375C11.9507 11.6921 11.2782 12.2819 10.4731 12.6154C9.66809 12.9488 8.77552 13.0073 7.93384 12.7818C7.09217 12.5563 6.34843 12.0593 5.81798 11.368C5.28752 10.6767 5 9.8297 5 8.95834C5 8.08697 5.28752 7.23995 5.81798 6.54865C6.34843 5.85735 7.09217 5.3604 7.93384 5.13488C8.77551 4.90935 9.66808 4.96785 10.4731 5.30131C11.2782 5.63477 11.9507 6.22454 12.3863 6.97917M17.2917 8.95833C17.2917 13.5607 13.5607 17.2917 8.95833 17.2917C4.35596 17.2917 0.625 13.5607 0.625 8.95833C0.625 4.35596 4.35596 0.625 8.95833 0.625C13.5607 0.625 17.2917 4.35596 17.2917 8.95833Z\" />\n </svg>\n );\n}\n","// download icon — Figma node 128:960 (lucide/download)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function DownloadIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.25 -2.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M18.75 12.75V16.75C18.75 17.2804 18.5393 17.7891 18.1642 18.1642C17.7891 18.5393 17.2804 18.75 16.75 18.75H2.75C2.21957 18.75 1.71086 18.5393 1.33579 18.1642C0.960714 17.7891 0.75 17.2804 0.75 16.75V12.75M4.75 7.75L9.75 12.75M9.75 12.75L14.75 7.75M9.75 12.75V0.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function DriveIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/drive.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * File-code icon — SVG downloaded from Figma design system.\n * Source: public/icons/file-code.svg\n */\nexport function FileCodeIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 11.6667 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 7.5L3.16667 9.16667L4.5 10.8333M7.16667 7.5L8.5 9.16667L7.16667 10.8333M7.16667 0.5V3.16667C7.16667 3.52029 7.30714 3.85943 7.55719 4.10948C7.80724 4.35952 8.14638 4.5 8.5 4.5H11.1667M7.83333 0.5H1.83333C1.47971 0.5 1.14057 0.640476 0.890524 0.890524C0.640476 1.14057 0.5 1.47971 0.5 1.83333V12.5C0.5 12.8536 0.640476 13.1928 0.890524 13.4428C1.14057 13.6929 1.47971 13.8333 1.83333 13.8333H9.83333C10.187 13.8333 10.5261 13.6929 10.7761 13.4428C11.0262 13.1928 11.1667 12.8536 11.1667 12.5V3.83333L7.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * File-search icon — SVG downloaded from Figma design system.\n * Source: public/icons/file-search.svg\n */\nexport function FileSearchIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.5 0.5V3.16667C8.5 3.52029 8.64048 3.85943 8.89052 4.10948C9.14057 4.35952 9.47971 4.5 9.83333 4.5H12.5M2.012 13.1667C2.12874 13.3689 2.29653 13.5369 2.49858 13.6539C2.70063 13.7709 2.92986 13.8327 3.16333 13.8333H11.1667C11.5203 13.8333 11.8594 13.6929 12.1095 13.4428C12.3595 13.1928 12.5 12.8536 12.5 12.5V3.83333L9.16667 0.5H3.16667C2.81304 0.5 2.47391 0.640476 2.22386 0.890524C1.97381 1.14057 1.83333 1.47971 1.83333 1.83333V3.83333M5.16667 11.1667L4.16667 10.1667M4.5 8.5C4.5 9.60457 3.60457 10.5 2.5 10.5C1.39543 10.5 0.5 9.60457 0.5 8.5C0.5 7.39543 1.39543 6.5 2.5 6.5C3.60457 6.5 4.5 7.39543 4.5 8.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function FileTypeCornerIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6\" />\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\n <path d=\"M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16\" />\n <path d=\"M6 22h2\" />\n <path d=\"M7 14v8\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderBlueIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#AFDBFF\" />\n <stop offset=\"1\" stopColor=\"#7DC0F6\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A8D8FF\" />\n <stop offset=\"1\" stopColor=\"#6FBEFF\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Folder-closed icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.02\n */\nexport function FolderClosedIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.5833 12.5833\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.625 5.29167H13.9583M12.625 11.9583C12.9786 11.9583 13.3178 11.8179 13.5678 11.5678C13.8179 11.3178 13.9583 10.9786 13.9583 10.625V3.95833C13.9583 3.60471 13.8179 3.26557 13.5678 3.01552C13.3178 2.76548 12.9786 2.625 12.625 2.625H7.35833C7.13534 2.62719 6.91536 2.57341 6.71853 2.46859C6.5217 2.36377 6.35431 2.21125 6.23167 2.025L5.69167 1.225C5.57026 1.04065 5.40498 0.889319 5.21067 0.784598C5.01635 0.679876 4.79907 0.625036 4.57833 0.625H1.95833C1.60471 0.625 1.26557 0.765476 1.01552 1.01552C0.765476 1.26557 0.625 1.60471 0.625 1.95833V10.625C0.625 10.9786 0.765476 11.3178 1.01552 11.5678C1.26557 11.8179 1.60471 11.9583 1.95833 11.9583H12.625Z\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderGreenIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#B5F1CB\" />\n <stop offset=\"1\" stopColor=\"#5ECB86\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A3E5BB\" />\n <stop offset=\"1\" stopColor=\"#4ADE4C\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderVioletIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#D9D1F5\" />\n <stop offset=\"1\" stopColor=\"#AC9CE9\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#E1DAFF\" />\n <stop offset=\"1\" stopColor=\"#C4B5FD\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function HangulFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const grad = `grad_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill={`url(#${grad})`}\n />\n <rect x=\"9.33325\" y=\"6.99963\" width=\"1.33333\" height=\"1.33333\" fill=\"white\" />\n <rect x=\"6\" y=\"8.33301\" width=\"8\" height=\"1.33333\" fill=\"white\" />\n <circle cx=\"10.0001\" cy=\"12.333\" r=\"2.66667\" stroke=\"white\" strokeWidth=\"1.33333\" />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#1D4ED8\"\n />\n <defs>\n <linearGradient\n id={grad}\n x1=\"10\"\n y1=\"1\"\n x2=\"10\"\n y2=\"19\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#3B82F6\" />\n <stop offset=\"1\" stopColor=\"#1F6FF0\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Heading icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/heading)\n */\nexport function HeadingIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-3.5 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 5.83333H8.5M0.5 11.1667V0.5M8.5 11.1667V0.5\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function HtmlFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill=\"#EDEEF0\"\n />\n <path\n d=\"M5.875 11.5H12.625M9.25 8.125V14.875M6.625 8.125H11.875C12.2892 8.125 12.625 8.46079 12.625 8.875V14.125C12.625 14.5392 12.2892 14.875 11.875 14.875H6.625C6.21079 14.875 5.875 14.5392 5.875 14.125V8.875C5.875 8.46079 6.21079 8.125 6.625 8.125Z\"\n stroke=\"#EDEEF0\"\n strokeWidth=\"0.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#D1D5DB\"\n />\n <g clipPath={`url(#${clip})`}>\n <path\n d=\"M11.5 13L13 11.5L11.5 10M7 10L5.5 11.5L7 13M10.1875 8.5L8.3125 14.5\"\n stroke=\"#6B7280\"\n strokeWidth=\"0.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id={clip}>\n <rect width=\"9\" height=\"9\" fill=\"white\" transform=\"translate(4.75 7)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Image icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/image)\n */\nexport function ImageIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.5 8.49996L10.4427 6.44263C10.1926 6.19267 9.85355 6.05225 9.5 6.05225C9.14645 6.05225 8.80737 6.19267 8.55733 6.44263L2.5 12.5M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5ZM5.83333 4.5C5.83333 5.23638 5.23638 5.83333 4.5 5.83333C3.76362 5.83333 3.16667 5.23638 3.16667 4.5C3.16667 3.76362 3.76362 3.16667 4.5 3.16667C5.23638 3.16667 5.83333 3.76362 5.83333 4.5Z\" />\n </svg>\n );\n}\n","// import icon — Figma node 128:1476 (lucide/import)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function ImportIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.25 -3.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M10.75 0.75V12.75M10.75 12.75L6.75 8.75M10.75 12.75L14.75 8.75M6.75 2.75H2.75C2.21957 2.75 1.71086 2.96071 1.33579 3.33579C0.960714 3.71086 0.75 4.21957 0.75 4.75V14.75C0.75 15.2804 0.960714 15.7891 1.33579 16.1642C1.71086 16.5393 2.21957 16.75 2.75 16.75H18.75C19.2804 16.75 19.7891 16.5393 20.1642 16.1642C20.5393 15.7891 20.75 15.2804 20.75 14.75V4.75C20.75 4.21957 20.5393 3.71086 20.1642 3.33579C19.7891 2.96071 19.2804 2.75 18.75 2.75H14.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Indent icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/indent)\n */\nexport function IndentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 1.83333L3.16667 4.5L0.5 7.16667M12.5 4.5H5.83333M12.5 0.5H5.83333M12.5 8.5H5.83333\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Italic icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/italic)\n */\nexport function ItalicIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.8334 -2.1666 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.83333 0.500136H3.83333M6.5 11.1668H0.5M7.16667 0.500136L3.16667 11.1668\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Key-round icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.02\n */\nexport function KeyRoundIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.6088 14.6088\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M10.2917 4.65055C10.4758 4.65055 10.625 4.50132 10.625 4.31722C10.625 4.13313 10.4758 3.98389 10.2917 3.98389C10.1076 3.98389 9.95833 4.13313 9.95833 4.31722C9.95833 4.50132 10.1076 4.65055 10.2917 4.65055Z\"\n fill=\"currentColor\"\n />\n <path d=\"M0.625 11.3172V13.3172C0.625 13.7172 0.891667 13.9838 1.29167 13.9838H3.95833V11.9838H5.95833V9.98383H7.29167L8.225 9.0505C9.15156 9.37326 10.1602 9.37203 11.086 9.047C12.0118 8.72197 12.7998 8.09239 13.3212 7.26125C13.8427 6.43011 14.0666 5.44661 13.9564 4.47166C13.8462 3.4967 13.4084 2.588 12.7146 1.89421C12.0208 1.20042 11.1121 0.762621 10.1372 0.652425C9.16222 0.542228 8.17872 0.766162 7.34758 1.28759C6.51644 1.80902 5.88686 2.59708 5.56183 3.52284C5.2368 4.44861 5.23557 5.45727 5.55833 6.38383L0.625 11.3172Z\" />\n <path d=\"M10.2917 4.65055C10.4758 4.65055 10.625 4.50132 10.625 4.31722C10.625 4.13313 10.4758 3.98389 10.2917 3.98389C10.1076 3.98389 9.95833 4.13313 9.95833 4.31722C9.95833 4.50132 10.1076 4.65055 10.2917 4.65055Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function LayersIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.35 14.33\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M13.8335 10.9334L7.72012 13.7068C7.54641 13.786 7.35772 13.827 7.16679 13.827C6.97586 13.827 6.78716 13.786 6.61346 13.7068L0.500123 10.9334M13.8335 7.6001L7.72012 10.3734C7.54641 10.4527 7.35772 10.4937 7.16679 10.4937C6.97586 10.4937 6.78716 10.4527 6.61346 10.3734L0.500123 7.6001M7.7201 0.620238C7.54639 0.541004 7.35769 0.5 7.16677 0.5C6.97584 0.5 6.78714 0.541004 6.61343 0.620238L0.900099 3.22024C0.781798 3.2724 0.681218 3.35784 0.610607 3.46614C0.539996 3.57445 0.502401 3.70095 0.502401 3.83024C0.502401 3.95953 0.539996 4.08603 0.610607 4.19433C0.681218 4.30264 0.781798 4.38808 0.900099 4.44024L6.6201 7.0469C6.79381 7.12614 6.98251 7.16714 7.17343 7.16714C7.36436 7.16714 7.55306 7.12614 7.72677 7.0469L13.4468 4.4469C13.5651 4.39474 13.6656 4.30931 13.7363 4.201C13.8069 4.0927 13.8445 3.9662 13.8445 3.8369C13.8445 3.70761 13.8069 3.58111 13.7363 3.47281C13.6656 3.3645 13.5651 3.27907 13.4468 3.2269L7.7201 0.620238Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface LayoutGridIconProps {\n className?: string;\n}\n\n/**\n * layout-grid icon — SVG downloaded from Figma Lucide Icon library.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:1554\n */\nexport function LayoutGridIcon({ className }: LayoutGridIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -2.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M6.75 0.75H1.75C1.19772 0.75 0.75 1.19772 0.75 1.75V6.75C0.75 7.30228 1.19772 7.75 1.75 7.75H6.75C7.30228 7.75 7.75 7.30228 7.75 6.75V1.75C7.75 1.19772 7.30228 0.75 6.75 0.75Z\" />\n <path d=\"M17.75 0.75H12.75C12.1977 0.75 11.75 1.19772 11.75 1.75V6.75C11.75 7.30228 12.1977 7.75 12.75 7.75H17.75C18.3023 7.75 18.75 7.30228 18.75 6.75V1.75C18.75 1.19772 18.3023 0.75 17.75 0.75Z\" />\n <path d=\"M17.75 11.75H12.75C12.1977 11.75 11.75 12.1977 11.75 12.75V17.75C11.75 18.3023 12.1977 18.75 12.75 18.75H17.75C18.3023 18.75 18.75 18.3023 18.75 17.75V12.75C18.75 12.1977 18.3023 11.75 17.75 11.75Z\" />\n <path d=\"M6.75 11.75H1.75C1.19772 11.75 0.75 12.1977 0.75 12.75V17.75C0.75 18.3023 1.19772 18.75 1.75 18.75H6.75C7.30228 18.75 7.75 18.3023 7.75 17.75V12.75C7.75 12.1977 7.30228 11.75 6.75 11.75Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Line-chart icon — SVG downloaded from Figma design system.\n * Source: public/icons/line-chart.svg\n */\nexport function LineChartIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 0.5V12.5H12.5M11.1667 4.5L7.83333 7.83333L5.16667 5.16667L3.16667 7.16667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Link icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/link)\n */\nexport function LinkIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-0.871 -0.8776 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.79557 7.78904C6.08187 8.17179 6.44714 8.48849 6.86661 8.71767C7.28607 8.94684 7.74991 9.08312 8.22667 9.11726C8.70344 9.15141 9.18196 9.08262 9.6298 8.91556C10.0776 8.7485 10.4843 8.48709 10.8222 8.14904L12.8222 6.14904C13.4294 5.52037 13.7654 4.67836 13.7578 3.80437C13.7502 2.93038 13.3997 2.09434 12.7816 1.47631C12.1636 0.858284 11.3276 0.507721 10.4536 0.500126C9.57959 0.492531 8.73758 0.828513 8.10891 1.43571L6.96224 2.57571M8.46237 6.45572C8.17607 6.07296 7.8108 5.75626 7.39134 5.52709C6.97188 5.29792 6.50803 5.16164 6.03127 5.12749C5.55451 5.09335 5.07598 5.16214 4.62814 5.3292C4.1803 5.49625 3.77363 5.75767 3.43571 6.09572L1.43571 8.09572C0.828513 8.72439 0.492531 9.5664 0.500126 10.4404C0.507721 11.3144 0.858284 12.1504 1.47631 12.7684C2.09434 13.3865 2.93038 13.737 3.80437 13.7446C4.67836 13.7522 5.52037 13.4162 6.14904 12.809L7.28904 11.669\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * List (unordered) icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/list)\n */\nexport function ListIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3.83333 0.5H12.5M3.83333 4.5H12.5M3.83333 8.5H12.5M0.5 0.5H0.506667M0.5 4.5H0.506667M0.5 8.5H0.506667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * List-ordered icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/list-ordered)\n */\nexport function ListOrderedIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M7.20655 3.9678H14M7.20655 7.83902H14M7.20655 11.7102H14M3.24525 6.54798V3H2M2 6.54798H4.49049M4.32065 13H2.22053C2.22053 11.0054 4.32065 11.5041 4.32065 10.0081C4.32065 9.26018 3.27059 8.76153 2.22053 9.5095\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Message-circle icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function MessageCircleIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.0899 17.0899\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.54168 14.7982C7.13217 15.6141 8.96175 15.8351 10.7008 15.4214C12.4398 15.0076 13.9738 13.9864 15.0265 12.5417C16.0791 11.097 16.5812 9.32381 16.4422 7.54168C16.3031 5.75956 15.5322 4.08569 14.2682 2.82171C13.0042 1.55773 11.3303 0.78676 9.54822 0.647731C7.76609 0.508701 5.99291 1.01076 4.5482 2.06342C3.10349 3.11609 2.08226 4.65014 1.66854 6.38914C1.25481 8.12815 1.4758 9.95774 2.29168 11.5482L0.625017 16.4649L5.54168 14.7982Z\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function MarkdownFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill=\"#EDEEF0\"\n />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#D1D5DB\"\n />\n <path\n d=\"M5.12891 9.34375H6.17578L7.96484 13.7266H8.03516L9.82422 9.34375H10.8711V15H10.0508V10.9141H9.99609L8.33984 14.9922H7.66016L5.99609 10.9062H5.94922V15H5.12891V9.34375Z\"\n fill=\"#6B7280\"\n />\n <path\n d=\"M13.5 10.25V13.75M13.5 13.75L15.25 12M13.5 13.75L11.75 12\"\n stroke=\"#6B7280\"\n strokeWidth=\"0.7\"\n />\n </g>\n <defs>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Messages-square icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function MessagesSquareIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M13.9583 6.45833H15.625C16.067 6.45833 16.4909 6.63393 16.8035 6.94649C17.1161 7.25905 17.2917 7.68297 17.2917 8.125V17.2917L13.9583 13.9583H8.95833C8.51631 13.9583 8.09238 13.7827 7.77982 13.4702C7.46726 13.1576 7.29167 12.7337 7.29167 12.2917V11.4583M10.625 6.45833C10.625 6.90036 10.4494 7.32428 10.1368 7.63684C9.82428 7.9494 9.40036 8.125 8.95833 8.125H3.95833L0.625 11.4583V2.29167C0.625 1.375 1.375 0.625 2.29167 0.625H8.95833C9.40036 0.625 9.82428 0.800595 10.1368 1.11316C10.4494 1.42572 10.625 1.84964 10.625 2.29167V6.45833Z\" />\n </svg>\n );\n}\n","// MyPage icon — Figma lucide/mypage (node 3101:11166 / vector 3101:11161)\n// Inline SVG of stylized \"My\" lettermark — stroke=\"currentColor\", URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function MyPageIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 21.5002 15.5006\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M0.75 11.6468V0.750065L5.5815 8.76602L10.413 0.750065V11.6468M14.0879 2.83125L17.4458 11.1374M20.75 2.83125C20.75 2.83125 17.6826 10.9954 17.3135 11.9753C16.9444 12.9551 16.5664 14.2253 15.4739 14.6504C14.3814 15.0755 13.3953 14.0035 13.3953 14.0035\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Outdent icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/outdent)\n */\nexport function OutdentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3.16667 1.83333L0.5 4.5L3.16667 7.16667M12.5 4.5H5.83333M12.5 0.5H5.83333M12.5 8.5H5.83333\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function PdfFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"pdf-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#EF4444\" />\n <stop offset=\"1\" stopColor=\"#E43A3A\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#pdf-bg)\" />\n <path d=\"M13.9058 12.1455C13.7086 12.2037 13.419 12.2103 13.1085 12.1652C12.7752 12.1169 12.4353 12.015 12.1012 11.8649C12.697 11.7782 13.1592 11.8049 13.5545 11.945C13.6482 11.9782 13.802 12.0669 13.9058 12.1455ZM10.5817 11.599C10.5575 11.6056 10.5336 11.6118 10.5098 11.6184C10.3495 11.662 10.1935 11.7046 10.0432 11.7425L9.84053 11.7939C9.43281 11.897 9.01595 12.0024 8.60422 12.1279C8.76069 11.7506 8.90607 11.3691 9.04841 10.9961C9.1538 10.72 9.26141 10.438 9.37271 10.1596C9.42917 10.2528 9.4881 10.3461 9.54941 10.4396C9.82875 10.8651 10.1799 11.2584 10.5817 11.599ZM9.5446 7.344C9.57102 7.8096 9.47057 8.2575 9.32321 8.6872C9.1417 8.15588 9.05711 7.56915 9.28404 7.09546C9.34224 6.97405 9.38991 6.90913 9.42083 6.87526C9.46859 6.949 9.5314 7.11396 9.5446 7.344ZM7.41607 13.2419C7.31408 13.4244 7.20998 13.5952 7.10328 13.7565C6.8458 14.1445 6.42469 14.56 6.20836 14.56C6.18707 14.56 6.16131 14.5566 6.12366 14.5168C6.09943 14.4914 6.09555 14.4732 6.09672 14.4483C6.10402 14.3057 6.29305 14.0516 6.56688 13.816C6.81543 13.6023 7.09636 13.4122 7.41607 13.2419ZM14.5947 12.1657C14.5616 11.6904 13.7616 11.3856 13.7537 11.3827C13.4445 11.2731 13.1085 11.2198 12.7267 11.2198C12.318 11.2198 11.8773 11.279 11.3114 11.4112C10.8079 11.0542 10.3729 10.6073 10.0479 10.1126C9.90435 9.894 9.77533 9.67581 9.66286 9.46268C9.93742 8.80618 10.1847 8.10031 10.1397 7.30972C10.1035 6.67581 9.81766 6.25 9.42893 6.25C9.16226 6.25 8.93266 6.4475 8.74596 6.83758C8.41291 7.53265 8.50045 8.42202 9.00603 9.48328C8.82395 9.91095 8.65477 10.3543 8.49102 10.7835C8.28729 11.3172 8.07736 11.8679 7.84076 12.3917C7.17723 12.6542 6.63213 12.9726 6.17784 13.3635C5.88024 13.6191 5.52147 14.0099 5.50099 14.4178C5.49099 14.6099 5.55687 14.7861 5.69073 14.9272C5.83294 15.0771 6.01161 15.156 6.20807 15.1563C6.85691 15.1563 7.4814 14.2648 7.59987 14.086C7.83829 13.7266 8.06145 13.3257 8.28012 12.8633C8.83087 12.6643 9.4178 12.5157 9.98667 12.3721L10.1904 12.3203C10.3436 12.2814 10.5027 12.2383 10.666 12.1937C10.8388 12.147 11.0165 12.0985 11.1972 12.0525C11.7813 12.424 12.4095 12.6663 13.0221 12.7552C13.5382 12.8303 13.9964 12.7867 14.3066 12.625C14.5858 12.4796 14.6012 12.2553 14.5947 12.1657Z\" fill=\"white\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#B91C1C\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function RefreshCwIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface PenLineIconProps {\n className?: string;\n}\n\n/**\n * Pen-line icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 4798:68154 (lucide/pen-line)\n */\nexport function PenLineIcon({ className }: PenLineIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -2.75 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.74902 17.7498H18.749M14.125 1.37173C14.5231 0.973645 15.063 0.75 15.626 0.75C16.189 0.75 16.7289 0.973645 17.127 1.37173C17.5251 1.76982 17.7487 2.30975 17.7487 2.87273C17.7487 3.43572 17.5251 3.97564 17.127 4.37373L5.117 16.3847C4.8791 16.6226 4.58502 16.7967 4.262 16.8907L1.39 17.7287C1.30395 17.7538 1.21274 17.7553 1.12591 17.7331C1.03908 17.7108 0.959827 17.6657 0.896447 17.6023C0.833066 17.5389 0.787889 17.4597 0.765643 17.3728C0.743398 17.286 0.744903 17.1948 0.77 17.1087L1.608 14.2367C1.70222 13.9141 1.87625 13.6204 2.114 13.3827L14.125 1.37173Z\" />\n </svg>\n );\n}\n","// pencil-line icon — Figma node 128:1988 (lucide/pencil-line)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function PencilLineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.25 -2.75 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.74902 17.7498H18.749M12.749 2.74976L15.749 5.74976M14.125 1.37173C14.5231 0.973645 15.063 0.75 15.626 0.75C16.189 0.75 16.7289 0.973645 17.127 1.37173C17.5251 1.76982 17.7487 2.30975 17.7487 2.87273C17.7487 3.43572 17.5251 3.97564 17.127 4.37373L5.117 16.3847C4.8791 16.6226 4.58502 16.7967 4.262 16.8907L1.39 17.7287C1.30395 17.7538 1.21274 17.7553 1.12591 17.7331C1.03908 17.7108 0.959827 17.6657 0.896447 17.6023C0.833066 17.5389 0.787889 17.4597 0.765643 17.3728C0.743398 17.286 0.744903 17.1948 0.77 17.1087L1.608 14.2367C1.70222 13.9141 1.87625 13.6204 2.114 13.3827L14.125 1.37173Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Presentation icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/presentation)\n */\nexport function PresentationIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.333 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 0.5H13.833M13.167 0.5V7.833C13.167 8.187 13.026 8.526 12.776 8.776C12.526 9.026 12.187 9.167 11.833 9.167H2.5C2.146 9.167 1.807 9.026 1.557 8.776C1.307 8.526 1.167 8.187 1.167 7.833V0.5M3.833 12.5L7.167 9.167L10.5 12.5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SheetFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"sheet-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#16A316\" />\n <stop offset=\"1\" stopColor=\"#098838\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#sheet-bg)\" />\n <path d=\"M5.875 11.5H12.625M9.25 8.125V14.875M6.625 8.125H11.875C12.2892 8.125 12.625 8.46079 12.625 8.875V14.125C12.625 14.5392 12.2892 14.875 11.875 14.875H6.625C6.21079 14.875 5.875 14.5392 5.875 14.125V8.875C5.875 8.46079 6.21079 8.125 6.625 8.125Z\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#166516\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Shopping Bag icon — SVG from public/icons/shopping-bag.svg\n * Uses stroke=\"currentColor\" for CSS color control.\n */\nexport function ShoppingBagIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.25 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.625 3.95833L3.125 0.625H13.125L15.625 3.95833M0.625 3.95833V15.625C0.625 16.067 0.800595 16.4909 1.11316 16.8035C1.42572 17.1161 1.84964 17.2917 2.29167 17.2917H13.9583C14.4004 17.2917 14.8243 17.1161 15.1368 16.8035C15.4494 16.4909 15.625 16.067 15.625 15.625V3.95833M0.625 3.95833H15.625M11.4583 7.29167C11.4583 8.17572 11.1071 9.02357 10.482 9.64869C9.8569 10.2738 9.00905 10.625 8.125 10.625C7.24094 10.625 6.3931 10.2738 5.76798 9.64869C5.14286 9.02357 4.79167 8.17572 4.79167 7.29167\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SlideFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"slide-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#F97116\" />\n <stop offset=\"1\" stopColor=\"#F16606\" />\n </linearGradient>\n <clipPath id=\"slide-clip\">\n <rect width=\"9\" height=\"9\" fill=\"white\" transform=\"translate(4.75 7)\" />\n </clipPath>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#slide-bg)\" />\n <g clipPath=\"url(#slide-clip)\">\n <path d=\"M12.7037 12.9588C12.4651 13.523 12.092 14.0201 11.6169 14.4068C11.1418 14.7934 10.5792 15.0578 9.97832 15.1768C9.37745 15.2958 8.75657 15.2658 8.16996 15.0895C7.58336 14.9131 7.04889 14.5957 6.61329 14.165C6.17769 13.7344 5.85421 13.2036 5.67115 12.619C5.48808 12.0345 5.45099 11.414 5.56313 10.8118C5.67527 10.2096 5.93322 9.64401 6.31442 9.16454C6.69563 8.68507 7.18849 8.30627 7.74991 8.06128M12.9999 11.5C12.9999 11.0075 12.9029 10.5199 12.7145 10.0649C12.526 9.60997 12.2498 9.19657 11.9016 8.84835C11.5534 8.50013 11.14 8.22391 10.685 8.03545C10.23 7.847 9.7424 7.75 9.24994 7.75V11.5H12.9999Z\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#C2550C\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Smile icon — SVG downloaded from Figma design system.\n * Source: public/icons/smile.svg\n */\nexport function SmileIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.3333 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 8.5C4.5 8.5 5.5 9.83333 7.16667 9.83333C8.83333 9.83333 9.83333 8.5 9.83333 8.5M5.16667 5.16667H5.17333M9.16667 5.16667H9.17333M13.8333 7.16667C13.8333 10.8486 10.8486 13.8333 7.16667 13.8333C3.48477 13.8333 0.5 10.8486 0.5 7.16667C0.5 3.48477 3.48477 0.5 7.16667 0.5C10.8486 0.5 13.8333 3.48477 13.8333 7.16667Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SparklesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9171 17.9171\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15.6238 1.45854V4.79187M17.2904 3.1252H13.9571M2.29045 13.1252V14.7919M3.12378 13.9585H1.45711M7.2379 11.8752C7.1635 11.5868 7.01318 11.3236 6.80258 11.113C6.59198 10.9024 6.32879 10.7521 6.0404 10.6777L0.927896 9.35937C0.840672 9.33462 0.763903 9.28208 0.70924 9.20975C0.654576 9.13741 0.625 9.04921 0.625 8.95854C0.625 8.86787 0.654576 8.77968 0.70924 8.70734C0.763903 8.635 0.840672 8.58247 0.927896 8.55771L6.0404 7.23854C6.32869 7.16421 6.59181 7.01402 6.8024 6.80357C7.01299 6.59313 7.16337 6.33011 7.2379 6.04187L8.55623 0.929374C8.58074 0.841806 8.63322 0.764659 8.70566 0.709703C8.77811 0.654747 8.86655 0.625 8.95748 0.625C9.04841 0.625 9.13685 0.654747 9.20929 0.709703C9.28174 0.764659 9.33422 0.841806 9.35873 0.929374L10.6762 6.04187C10.7506 6.33027 10.9009 6.59346 11.1115 6.80406C11.3221 7.01466 11.5853 7.16498 11.8737 7.23938L16.9862 8.55687C17.0741 8.58112 17.1517 8.63355 17.2069 8.70611C17.2622 8.77866 17.2921 8.86734 17.2921 8.95854C17.2921 9.04974 17.2622 9.13842 17.2069 9.21098C17.1517 9.28353 17.0741 9.33596 16.9862 9.36021L11.8737 10.6777C11.5853 10.7521 11.3221 10.9024 11.1115 11.113C10.9009 11.3236 10.7506 11.5868 10.6762 11.8752L9.3579 16.9877C9.33339 17.0753 9.28091 17.1524 9.20846 17.2074C9.13601 17.2623 9.04758 17.2921 8.95665 17.2921C8.86571 17.2921 8.77728 17.2623 8.70483 17.2074C8.63238 17.1524 8.5799 17.0753 8.5554 16.9877L7.2379 11.8752Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Square-check icon (filled) — SVG downloaded from Figma design system.\n * Uses fill=\"currentColor\" for the background rect and white stroke for checkmark.\n */\nexport function SquareCheckIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.5 16.5\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <rect x=\"0.75\" y=\"0.75\" width=\"15\" height=\"15\" rx=\"1.667\" fill=\"currentColor\" />\n <path\n d=\"M5.75 8.25L7.417 9.917L10.75 6.583\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Square-check-outline icon — outlined square with checkmark (task list).\n * SVG downloaded from Figma design system.\n */\nexport function SquareCheckOutlineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 6.5L5.83333 7.83333L8.5 5.16667M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface StarIconProps {\n className?: string;\n filled?: boolean;\n}\n\n/**\n * Star icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:2564 (lucide/star)\n */\nexport function StarIcon({ className, filled }: StarIconProps) {\n return (\n <svg\n viewBox=\"-1.25 -1.74 24 24\"\n fill={filled ? \"currentColor\" : \"none\"}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M10.75 0.75L13.84 7.01L20.75 8.02L15.75 12.89L16.93 19.77L10.75 16.52L4.57002 19.77L5.75002 12.89L0.750022 8.02L7.66002 7.01L10.75 0.75Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Strikethrough icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/strikethrough)\n */\nexport function StrikethroughIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.1667 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.50007 0.5H3.83341C3.51336 0.499832 3.19794 0.576476 2.91365 0.723491C2.62937 0.870506 2.38452 1.0836 2.19967 1.34487C2.01482 1.60614 1.89537 1.90796 1.85136 2.22497C1.80735 2.54198 1.84006 2.86492 1.94674 3.16667M7.16667 5.83333C7.87391 5.83333 8.55219 6.11428 9.05228 6.61438C9.55238 7.11448 9.83333 7.79276 9.83333 8.5C9.83333 9.20724 9.55238 9.88552 9.05228 10.3856C8.55219 10.8857 7.87391 11.1667 7.16667 11.1667H1.83333M0.5 5.83333H11.1667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Table-properties icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/table-properties)\n */\nexport function TablePropertiesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.5 0.5V12.5M12.5 4.5H0.5M12.5 8.5H0.5M1.833 0.5H11.167C11.903 0.5 12.5 1.097 12.5 1.833V11.167C12.5 11.903 11.903 12.5 11.167 12.5H1.833C1.097 12.5 0.5 11.903 0.5 11.167V1.833C0.5 1.097 1.097 0.5 1.833 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface TrashIconProps {\n className?: string;\n}\n\n/**\n * Trash-2 icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:2738 (lucide/trash-2)\n */\nexport function TrashIcon({ className }: TrashIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3 6H21M19 6V20C19 21 18 22 17 22H7C6 22 5 21 5 20V6M8 6V4C8 3 9 2 10 2H14C15 2 16 3 16 4V6M10 11V17M14 11V17\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Wand-sparkles icon — SVG downloaded from Figma design system.\n * Source: public/icons/wand-sparkles.svg\n */\nexport function WandSparklesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.3346 14.3354\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.49935 3.83333L10.4993 5.83333M2.49935 3.16667V5.83333M11.8327 8.5V11.1667M5.83268 0.5V1.83333M3.83268 4.5H1.16602M13.166 9.83333H10.4993M6.49935 1.16667H5.16602M13.5926 1.59336L12.7392 0.74003C12.6642 0.664241 12.5749 0.604077 12.4765 0.563016C12.3781 0.521956 12.2725 0.500814 12.1659 0.500814C12.0593 0.500814 11.9537 0.521956 11.8553 0.563016C11.7569 0.604077 11.6676 0.664241 11.5925 0.74003L0.739216 11.5934C0.663427 11.6684 0.603263 11.7577 0.562202 11.8561C0.521142 11.9545 0.5 12.0601 0.5 12.1667C0.5 12.2733 0.521142 12.3789 0.562202 12.4773C0.603263 12.5757 0.663427 12.665 0.739216 12.74L1.59255 13.5934C1.6671 13.67 1.75624 13.7309 1.85471 13.7724C1.95319 13.814 2.05899 13.8354 2.16588 13.8354C2.27277 13.8354 2.37858 13.814 2.47705 13.7724C2.57553 13.7309 2.66467 13.67 2.73922 13.5934L13.5926 2.74003C13.6692 2.66548 13.73 2.57634 13.7716 2.47787C13.8132 2.37939 13.8346 2.27359 13.8346 2.1667C13.8346 2.05981 13.8132 1.954 13.7716 1.85553C13.73 1.75705 13.6692 1.66791 13.5926 1.59336Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function WordFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"word-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#3B82F6\" />\n <stop offset=\"1\" stopColor=\"#1F6FF0\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#word-bg)\" />\n <path d=\"M12.625 9.25H5.875M10.375 11.5H5.875M11.125 13.75H5.875\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#1D4ED8\" />\n </svg>\n );\n}\n"],"mappings":"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","names":["ChevronsUpDownIcon","React","import_jsx_runtime","AccordionPrimitive","React","import_radix_ui","import_radix_ui","import_jsx_runtime","import_jsx_runtime","AlertDialogPrimitive","React","import_class_variance_authority","import_jsx_runtime","import_radix_ui","import_jsx_runtime","AvatarPrimitive","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","DropdownMenuPrimitive","import_jsx_runtime","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","CheckboxPrimitive","import_react","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","CollapsiblePrimitive","React","import_radix_ui","import_jsx_runtime","ChevronsUpDownIcon","import_jsx_runtime","PopoverPrimitive","ChevronsUpDownIcon","React","import_radix_ui","import_jsx_runtime","PopoverPrimitive","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","_a","_b","React","import_lucide_react","import_jsx_runtime","_a","React","import_react","import_jsx_runtime","import_jsx_runtime","React","React","React","import_radix_ui","import_jsx_runtime","TooltipPrimitive","import_jsx_runtime","import_jsx_runtime","SyntaxHighlighter","javascript","typescript","jsx","tsx","python","bash","json","css","markup","sql","go","rust","java","kotlin","swift","yaml","markdown","diff","React","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","MenubarPrimitive","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","_a","_b","PopoverPrimitive","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","_a","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","_a","SliderPrimitive","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_a","_b","import_jsx_runtime","import_react","import_radix_ui","import_jsx_runtime","React","SwitchPrimitive","React","import_jsx_runtime","_a","_b","_c","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/components/index.ts","../src/components/ui/accordion.tsx","../src/lib/utils.ts","../src/components/ui/icon.tsx","../src/components/ui/icon-registry.ts","../src/components/ui/alert-dialog.tsx","../src/components/ui/button.tsx","../src/components/ui/alert.tsx","../src/components/ui/avatar.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/card.tsx","../src/components/ui/data-section.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/icons/custom/empty-tray.tsx","../src/components/ui/empty.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/choice-card.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/combobox.tsx","../src/components/icons/custom/chevrons-up-down.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/field.tsx","../src/components/ui/header.tsx","../src/components/ui/input.tsx","../src/components/ui/input-group.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/kb-card.tsx","../src/components/icons/custom/folder-amber.tsx","../src/components/ui/markdown-message.tsx","../src/components/ui/message-footer.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/modal.tsx","../src/components/ui/menubar.tsx","../src/components/ui/number-badge.tsx","../src/components/ui/progress.tsx","../src/components/ui/segmented-control.tsx","../src/components/ui/search-input.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/sidebar.tsx","../src/components/icons/custom/panel-left.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/slider.tsx","../src/components/ui/stepper.tsx","../src/components/ui/tabs.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/circle-indicator.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/user-message-bubble.tsx","../src/components/providers.tsx","../src/components/icons/brand/ryai-logo.tsx","../src/components/icons/brand/claude.tsx","../src/components/icons/brand/deepseek.tsx","../src/components/icons/brand/gemini.tsx","../src/components/icons/brand/google.tsx","../src/components/icons/brand/openai.tsx","../src/components/icons/brand/upstage.tsx","../src/components/icons/custom/agent-blog.tsx","../src/components/icons/custom/agent-cs.tsx","../src/components/icons/custom/agent-data.tsx","../src/components/icons/custom/agent-hr.tsx","../src/components/icons/custom/agent-mail.tsx","../src/components/icons/custom/agent-trend.tsx","../src/components/icons/custom/ai-agent.tsx","../src/components/icons/custom/ai-builder.tsx","../src/components/icons/custom/ai-cloud.tsx","../src/components/icons/custom/ai-datacenter.tsx","../src/components/icons/custom/align-justify.tsx","../src/components/icons/custom/align-left.tsx","../src/components/icons/custom/arrow-down.tsx","../src/components/icons/custom/blockquote.tsx","../src/components/icons/custom/bold.tsx","../src/components/icons/custom/book-open.tsx","../src/components/icons/custom/book-up.tsx","../src/components/icons/custom/circle-check-fill.tsx","../src/components/icons/custom/circle-help.tsx","../src/components/icons/custom/circle-outline.tsx","../src/components/icons/custom/code.tsx","../src/components/icons/custom/code-square.tsx","../src/components/icons/custom/credit.tsx","../src/components/icons/custom/download.tsx","../src/components/icons/custom/drive.tsx","../src/components/icons/custom/file-code.tsx","../src/components/icons/custom/file-search.tsx","../src/components/icons/custom/file-type-corner.tsx","../src/components/icons/custom/folder-blue.tsx","../src/components/icons/custom/folder-closed.tsx","../src/components/icons/custom/folder-green.tsx","../src/components/icons/custom/folder-violet.tsx","../src/components/icons/custom/hangul.tsx","../src/components/icons/custom/heading.tsx","../src/components/icons/custom/html.tsx","../src/components/icons/custom/image.tsx","../src/components/icons/custom/import.tsx","../src/components/icons/custom/indent.tsx","../src/components/icons/custom/italic.tsx","../src/components/icons/custom/key-round.tsx","../src/components/icons/custom/layers.tsx","../src/components/icons/custom/layout-grid.tsx","../src/components/icons/custom/line-chart.tsx","../src/components/icons/custom/link.tsx","../src/components/icons/custom/list.tsx","../src/components/icons/custom/list-ordered.tsx","../src/components/icons/custom/message-circle.tsx","../src/components/icons/custom/markdown.tsx","../src/components/icons/custom/messages-square.tsx","../src/components/icons/custom/my-page.tsx","../src/components/icons/custom/outdent.tsx","../src/components/icons/custom/pdf.tsx","../src/components/icons/custom/refresh-cw.tsx","../src/components/icons/custom/pen-line.tsx","../src/components/icons/custom/pencil-line.tsx","../src/components/icons/custom/presentation.tsx","../src/components/icons/custom/sheet.tsx","../src/components/icons/custom/shopping-bag.tsx","../src/components/icons/custom/slide.tsx","../src/components/icons/custom/smile.tsx","../src/components/icons/custom/sparkles.tsx","../src/components/icons/custom/square-check.tsx","../src/components/icons/custom/square-check-outline.tsx","../src/components/icons/custom/star.tsx","../src/components/icons/custom/strikethrough.tsx","../src/components/icons/custom/table-properties.tsx","../src/components/icons/custom/trash.tsx","../src/components/icons/custom/wand-sparkles.tsx","../src/components/icons/custom/word.tsx"],"sourcesContent":["// ── UI Components ─────────────────────────────────────────────────────────────\nexport * from \"./ui/accordion\";\nexport * from \"./ui/alert-dialog\";\nexport * from \"./ui/alert\";\nexport * from \"./ui/avatar\";\nexport * from \"./ui/badge\";\nexport * from \"./ui/breadcrumb\";\nexport * from \"./ui/button\";\nexport * from \"./ui/card\";\nexport * from \"./ui/data-section\";\nexport * from \"./ui/drawer\";\nexport * from \"./ui/dropdown-menu\";\nexport * from \"./ui/empty\";\nexport * from \"./ui/checkbox\";\nexport * from \"./ui/choice-card\";\nexport * from \"./ui/collapsible\";\nexport * from \"./ui/combobox\";\nexport * from \"./ui/date-picker\";\nexport * from \"./ui/field\";\nexport * from \"./ui/header\";\nexport * from \"./ui/icon-registry\";\nexport * from \"./ui/icon\";\nexport * from \"./ui/input\";\nexport * from \"./ui/input-group\";\nexport * from \"./ui/input-otp\";\nexport * from \"./ui/kb-card\";\nexport * from \"./ui/markdown-message\";\nexport * from \"./ui/modal\";\nexport * from \"./ui/menubar\";\nexport * from \"./ui/message-footer\";\nexport * from \"./ui/number-badge\";\nexport * from \"./ui/progress\";\nexport * from \"./ui/segmented-control\";\nexport * from \"./ui/search-input\";\nexport * from \"./ui/select\";\nexport * from \"./ui/sheet\";\nexport * from \"./ui/sidebar\";\nexport * from \"./ui/skeleton\";\nexport * from \"./ui/slider\";\nexport * from \"./ui/stepper\";\nexport * from \"./ui/tabs\";\nexport * from \"./ui/toggle\";\nexport * from \"./ui/toggle-group\";\nexport * from \"./ui/circle-indicator\";\nexport * from \"./ui/switch\";\nexport * from \"./ui/table\";\nexport * from \"./ui/tooltip\";\nexport * from \"./ui/user-message-bubble\";\n\n// ── Providers ──────────────────────────────────────────────────────────────────\nexport * from \"./providers\";\n\n// ── Custom Icons ───────────────────────────────────────────────────────────────\nexport * from \"./icons\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Accordion as AccordionPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nconst Accordion = AccordionPrimitive.Root;\n\n// ─── Item ─────────────────────────────────────────────────────────────────────\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-border\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n // 기본 레이아웃\n \"flex flex-1 cursor-pointer items-center justify-between py-4\",\n // 텍스트 스타일 (Figma: Text-sm/Medium)\n \"text-sm font-medium leading-5 tracking-tight text-foreground\",\n // hover: 텍스트에만 underline (SVG 체브론은 text-decoration 상속 안 됨)\n \"hover:underline underline-offset-2\",\n // 체브론 회전 애니메이션 (열릴 때 180도) — SVG는 자체 transition-transform 보유\n \"[&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <Icon name=\"chevron-down\" className=\"size-4 text-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n {/* Figma: pb-4 gap-4, Text-sm/Regular */}\n <div\n className={cn(\n \"flex flex-col gap-4 pb-4\",\n \"text-sm font-normal leading-5 tracking-tight text-foreground\",\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n","import { clsx, type ClassValue } from \"clsx\"\nimport { extendTailwindMerge } from \"tailwind-merge\"\n\n// Register text-2xs as a font-size class so tailwind-merge doesn't\n// confuse it with text-color utilities (e.g. text-muted-foreground).\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n \"font-size\": [{ text: [\"2xs\"] }],\n },\n },\n})\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { ICON_NODES } from \"@/components/ui/icon-registry\";\n\ntype IconNode = [string, Record<string, string>, ...IconNode[]];\n\nfunction renderNode(node: IconNode, idx: number): React.ReactNode {\n const [tag, attrs, ...children] = node;\n return React.createElement(\n tag,\n { key: idx, ...attrs },\n ...children.map((child, i) => renderNode(child as IconNode, i)),\n );\n}\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n /** Icon name in kebab-case (e.g. \"arrow-up\", \"chevron-down\") */\n name: string;\n className?: string;\n strokeWidth?: number;\n}\n\n/**\n * Inline SVG icon component.\n * Uses `stroke=\"currentColor\"` so color is controlled via CSS `text-*` classes.\n * Renders the same paths as lucide-react but without the library dependency.\n */\nexport function Icon({\n name,\n className,\n strokeWidth = 1.5,\n ...props\n}: IconProps) {\n const nodes = ICON_NODES[name];\n if (!nodes) return null;\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n {nodes.map((node, i) => renderNode(node, i))}\n </svg>\n );\n}\n","// Auto-generated by scripts/gen-icon-registry.mjs — do not edit manually.\n// Source: lucide-react ESM icon nodes.\n\ntype IconNode = [string, Record<string, string>, ...IconNode[]];\n\nexport const ICON_NODES: Record<string, IconNode[]> = {\n \"arrow-up\": [\n [\"path\", {\"d\":\"m5 12 7-7 7 7\"}],\n [\"path\", {\"d\":\"M12 19V5\"}]\n ],\n \"bar-chart-3\": [\n [\"path\", {\"d\":\"M3 3v16a2 2 0 0 0 2 2h16\"}],\n [\"path\", {\"d\":\"M18 17V9\"}],\n [\"path\", {\"d\":\"M13 17V5\"}],\n [\"path\", {\"d\":\"M8 17v-3\"}]\n ],\n \"bell\": [\n [\"path\", {\"d\":\"M10.268 21a2 2 0 0 0 3.464 0\"}],\n [\"path\", {\"d\":\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"}]\n ],\n \"box\": [\n [\"path\", {\"d\":\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\"}],\n [\"path\", {\"d\":\"m3.3 7 8.7 5 8.7-5\"}],\n [\"path\", {\"d\":\"M12 22V12\"}]\n ],\n \"calendar\": [\n [\"path\", {\"d\":\"M8 2v4\"}],\n [\"path\", {\"d\":\"M16 2v4\"}],\n [\"rect\", {\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],\n [\"path\", {\"d\":\"M3 10h18\"}]\n ],\n \"check\": [\n [\"path\", {\"d\":\"M20 6 9 17l-5-5\"}]\n ],\n \"chevron-down\": [\n [\"path\", {\"d\":\"m6 9 6 6 6-6\"}]\n ],\n \"chevron-left\": [\n [\"path\", {\"d\":\"m15 18-6-6 6-6\"}]\n ],\n \"chevron-right\": [\n [\"path\", {\"d\":\"m9 18 6-6-6-6\"}]\n ],\n \"circle-alert\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"8\",\"y2\":\"12\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12.01\",\"y1\":\"16\",\"y2\":\"16\"}]\n ],\n \"circle-arrow-up\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m16 12-4-4-4 4\"}],\n [\"path\", {\"d\":\"M12 16V8\"}]\n ],\n \"circle-check\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m9 12 2 2 4-4\"}]\n ],\n \"circle-stop\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"rect\", {\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\",\"rx\":\"1\"}]\n ],\n \"circle-x\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"m15 9-6 6\"}],\n [\"path\", {\"d\":\"m9 9 6 6\"}]\n ],\n \"copy\": [\n [\"rect\", {\"width\":\"14\",\"height\":\"14\",\"x\":\"8\",\"y\":\"8\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"path\", {\"d\":\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"}]\n ],\n \"code-xml\": [\n [\"path\", {\"d\":\"m18 16 4-4-4-4\"}],\n [\"path\", {\"d\":\"m6 8-4 4 4 4\"}],\n [\"path\", {\"d\":\"m14.5 4-5 16\"}]\n ],\n \"database\": [\n [\"ellipse\", {\"cx\":\"12\",\"cy\":\"5\",\"rx\":\"9\",\"ry\":\"3\"}],\n [\"path\", {\"d\":\"M3 5V19A9 3 0 0 0 21 19V5\"}],\n [\"path\", {\"d\":\"M3 12A9 3 0 0 0 21 12\"}]\n ],\n \"ellipsis\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"}]\n ],\n \"eye\": [\n [\"path\", {\"d\":\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}]\n ],\n \"file\": [\n [\"path\", {\"d\":\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}]\n ],\n \"file-plus-2\": [\n [\"path\", {\"d\":\"M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}],\n [\"path\", {\"d\":\"M14 19h6\"}],\n [\"path\", {\"d\":\"M17 16v6\"}]\n ],\n \"file-text\": [\n [\"path\", {\"d\":\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"}],\n [\"path\", {\"d\":\"M14 2v5a1 1 0 0 0 1 1h5\"}],\n [\"path\", {\"d\":\"M10 9H8\"}],\n [\"path\", {\"d\":\"M16 13H8\"}],\n [\"path\", {\"d\":\"M16 17H8\"}]\n ],\n \"folder\": [\n [\"path\", {\"d\":\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"}]\n ],\n \"folder-open-dot\": [\n [\"path\", {\"d\":\"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2\"}],\n [\"circle\", {\"cx\":\"14\",\"cy\":\"15\",\"r\":\"1\"}]\n ],\n \"globe\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"}],\n [\"path\", {\"d\":\"M2 12h20\"}]\n ],\n \"grid-2x2\": [\n [\"path\", {\"d\":\"M12 3v18\"}],\n [\"path\", {\"d\":\"M3 12h18\"}],\n [\"rect\", {\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\"}]\n ],\n \"hard-drive\": [\n [\"path\", {\"d\":\"M10 16h.01\"}],\n [\"path\", {\"d\":\"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"}],\n [\"path\", {\"d\":\"M21.946 12.013H2.054\"}],\n [\"path\", {\"d\":\"M6 16h.01\"}]\n ],\n \"history\": [\n [\"path\", {\"d\":\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"}],\n [\"path\", {\"d\":\"M3 3v5h5\"}],\n [\"path\", {\"d\":\"M12 7v5l4 2\"}]\n ],\n \"info\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\n [\"path\", {\"d\":\"M12 16v-4\"}],\n [\"path\", {\"d\":\"M12 8h.01\"}]\n ],\n \"joystick\": [\n [\"path\", {\"d\":\"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z\"}],\n [\"path\", {\"d\":\"M6 15v-2\"}],\n [\"path\", {\"d\":\"M12 15V9\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"6\",\"r\":\"3\"}]\n ],\n \"key-round\": [\n [\"path\", {\"d\":\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"}],\n [\"circle\", {\"cx\":\"16.5\",\"cy\":\"7.5\",\"r\":\".5\",\"fill\":\"currentColor\"}]\n ],\n \"languages\": [\n [\"path\", {\"d\":\"m5 8 6 6\"}],\n [\"path\", {\"d\":\"m4 14 6-6 2-3\"}],\n [\"path\", {\"d\":\"M2 5h12\"}],\n [\"path\", {\"d\":\"M7 2h1\"}],\n [\"path\", {\"d\":\"m22 22-5-10-5 10\"}],\n [\"path\", {\"d\":\"M14 18h6\"}]\n ],\n \"loader-2\": [\n [\"path\", {\"d\":\"M21 12a9 9 0 1 1-6.219-8.56\"}]\n ],\n \"loader-circle\": [\n [\"path\", {\"d\":\"M21 12a9 9 0 1 1-6.219-8.56\"}]\n ],\n \"log-out\": [\n [\"path\", {\"d\":\"m16 17 5-5-5-5\"}],\n [\"path\", {\"d\":\"M21 12H9\"}],\n [\"path\", {\"d\":\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"}]\n ],\n \"mic\": [\n [\"path\", {\"d\":\"M12 19v3\"}],\n [\"path\", {\"d\":\"M19 10v2a7 7 0 0 1-14 0v-2\"}],\n [\"rect\", {\"x\":\"9\",\"y\":\"2\",\"width\":\"6\",\"height\":\"13\",\"rx\":\"3\"}]\n ],\n \"monitor\": [\n [\"rect\", {\"width\":\"20\",\"height\":\"14\",\"x\":\"2\",\"y\":\"3\",\"rx\":\"2\"}],\n [\"line\", {\"x1\":\"8\",\"x2\":\"16\",\"y1\":\"21\",\"y2\":\"21\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"17\",\"y2\":\"21\"}]\n ],\n \"more-horizontal\": [\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"}],\n [\"circle\", {\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"}]\n ],\n \"paperclip\": [\n [\"path\", {\"d\":\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"}]\n ],\n \"pen-tool\": [\n [\"path\", {\"d\":\"M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z\"}],\n [\"path\", {\"d\":\"m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18\"}],\n [\"path\", {\"d\":\"m2.3 2.3 7.286 7.286\"}],\n [\"circle\", {\"cx\":\"11\",\"cy\":\"11\",\"r\":\"2\"}]\n ],\n \"phone-off\": [\n [\"path\", {\"d\":\"M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272\"}],\n [\"path\", {\"d\":\"M22 2 2 22\"}],\n [\"path\", {\"d\":\"M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473\"}]\n ],\n \"minus\": [\n [\"path\", {\"d\":\"M5 12h14\"}]\n ],\n \"plus\": [\n [\"path\", {\"d\":\"M5 12h14\"}],\n [\"path\", {\"d\":\"M12 5v14\"}]\n ],\n \"receipt-text\": [\n [\"path\", {\"d\":\"M13 16H8\"}],\n [\"path\", {\"d\":\"M14 8H8\"}],\n [\"path\", {\"d\":\"M16 12H8\"}],\n [\"path\", {\"d\":\"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z\"}]\n ],\n \"search\": [\n [\"path\", {\"d\":\"m21 21-4.34-4.34\"}],\n [\"circle\", {\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"}]\n ],\n \"server\": [\n [\"rect\", {\"width\":\"20\",\"height\":\"8\",\"x\":\"2\",\"y\":\"2\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"rect\", {\"width\":\"20\",\"height\":\"8\",\"x\":\"2\",\"y\":\"14\",\"rx\":\"2\",\"ry\":\"2\"}],\n [\"line\", {\"x1\":\"6\",\"x2\":\"6.01\",\"y1\":\"6\",\"y2\":\"6\"}],\n [\"line\", {\"x1\":\"6\",\"x2\":\"6.01\",\"y1\":\"18\",\"y2\":\"18\"}]\n ],\n \"settings\": [\n [\"path\", {\"d\":\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}]\n ],\n \"slash\": [\n [\"path\", {\"d\":\"M22 2 2 22\"}]\n ],\n \"sliders-horizontal\": [\n [\"path\", {\"d\":\"M10 5H3\"}],\n [\"path\", {\"d\":\"M12 19H3\"}],\n [\"path\", {\"d\":\"M14 3v4\"}],\n [\"path\", {\"d\":\"M16 17v4\"}],\n [\"path\", {\"d\":\"M21 12h-9\"}],\n [\"path\", {\"d\":\"M21 19h-5\"}],\n [\"path\", {\"d\":\"M21 5h-7\"}],\n [\"path\", {\"d\":\"M8 10v4\"}],\n [\"path\", {\"d\":\"M8 12H3\"}]\n ],\n \"sparkles\": [\n [\"path\", {\"d\":\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"}],\n [\"path\", {\"d\":\"M20 2v4\"}],\n [\"path\", {\"d\":\"M22 4h-4\"}],\n [\"circle\", {\"cx\":\"4\",\"cy\":\"20\",\"r\":\"2\"}]\n ],\n \"square\": [\n [\"rect\", {\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\"}]\n ],\n \"square-pen\": [\n [\"path\", {\"d\":\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"}],\n [\"path\", {\"d\":\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"}]\n ],\n \"terminal\": [\n [\"path\", {\"d\":\"M12 19h8\"}],\n [\"path\", {\"d\":\"m4 17 6-6-6-6\"}]\n ],\n \"trash-2\": [\n [\"path\", {\"d\":\"M10 11v6\"}],\n [\"path\", {\"d\":\"M14 11v6\"}],\n [\"path\", {\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"}],\n [\"path\", {\"d\":\"M3 6h18\"}],\n [\"path\", {\"d\":\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"}]\n ],\n \"user\": [\n [\"path\", {\"d\":\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"}],\n [\"circle\", {\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"}]\n ],\n \"user-cog\": [\n [\"path\", {\"d\":\"M10 15H6a4 4 0 0 0-4 4v2\"}],\n [\"path\", {\"d\":\"m14.305 16.53.923-.382\"}],\n [\"path\", {\"d\":\"m15.228 13.852-.923-.383\"}],\n [\"path\", {\"d\":\"m16.852 12.228-.383-.923\"}],\n [\"path\", {\"d\":\"m16.852 17.772-.383.924\"}],\n [\"path\", {\"d\":\"m19.148 12.228.383-.923\"}],\n [\"path\", {\"d\":\"m19.53 18.696-.382-.924\"}],\n [\"path\", {\"d\":\"m20.772 13.852.924-.383\"}],\n [\"path\", {\"d\":\"m20.772 16.148.924.383\"}],\n [\"circle\", {\"cx\":\"18\",\"cy\":\"15\",\"r\":\"3\"}],\n [\"circle\", {\"cx\":\"9\",\"cy\":\"7\",\"r\":\"4\"}]\n ],\n \"link-2\": [\n [\"path\", {\"d\":\"M9 17H7A5 5 0 0 1 7 7h2\"}],\n [\"path\", {\"d\":\"M15 7h2a5 5 0 1 1 0 10h-2\"}],\n [\"line\", {\"x1\":\"8\",\"x2\":\"16\",\"y1\":\"12\",\"y2\":\"12\"}]\n ],\n \"download\": [\n [\"path\", {\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"}],\n [\"polyline\", {\"points\":\"7 10 12 15 17 10\"}],\n [\"line\", {\"x1\":\"12\",\"x2\":\"12\",\"y1\":\"15\",\"y2\":\"3\"}]\n ],\n \"external-link\": [\n [\"path\", {\"d\":\"M15 3h6v6\"}],\n [\"path\", {\"d\":\"M10 14 21 3\"}],\n [\"path\", {\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}]\n ],\n \"x\": [\n [\"path\", {\"d\":\"M18 6 6 18\"}],\n [\"path\", {\"d\":\"m6 6 12 12\"}]\n ],\n \"zap\": [\n [\"path\", {\"d\":\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"}]\n ]\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\n// ─── Portal ───────────────────────────────────────────────────────────────────\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\n// ─── Overlay ──────────────────────────────────────────────────────────────────\n// 배경 딤(dim) 레이어: 다이얼로그 열릴 때 fade-in, 닫힐 때 fade-out\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n // 배경 딤 레이어 — 스크롤 없이 화면 전체 덮기\n \"fixed inset-0 z-50 bg-black/30\",\n // 열림/닫힘 애니메이션 (tw-animate-css)\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"duration-200\",\n className\n )}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = \"AlertDialogOverlay\";\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n// 다이얼로그 패널: 360px 고정폭, rounded-lg(10px), shadow-lg\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n // 위치 — 화면 중앙 고정\n \"fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2\",\n // 레이아웃\n \"flex w-90 flex-col gap-4 p-6\",\n // 외형\n \"bg-background border border-border rounded-lg\",\n \"shadow-modal\",\n // 열림/닫힘 애니메이션 (tw-animate-css)\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"duration-200\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n// 제목 + 설명 묶음 영역\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n// 버튼 묶음 영역 — 오른쪽 정렬, gap-2\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"flex items-center justify-end gap-2\", className)}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n// 18px / SemiBold / text-foreground\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-7 tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\n// ─── Description ──────────────────────────────────────────────────────────────\n// 14px / Regular / text-muted-foreground\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\n \"text-sm font-normal leading-5 tracking-tight text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\n// ─── Action ───────────────────────────────────────────────────────────────────\n// 확인/계속 버튼 — primary variant (Button 스타일 재사용)\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"default\" }), className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = \"AlertDialogAction\";\n\n// ─── Cancel ───────────────────────────────────────────────────────────────────\n// 취소 버튼 — outline variant (Button 스타일 재사용)\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = \"AlertDialogCancel\";\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n// Derived from RYAI Design System — Button component (node 402:654)\n\nconst buttonVariants = cva(\n // Base — 모든 버튼 공통 스타일\n 'inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg text-sm font-medium leading-5 tracking-tight whitespace-nowrap cursor-pointer select-none transition-[transform,opacity,background-color,border-color,color,box-shadow] duration-150 active:scale-[0.97] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:pointer-events-auto disabled:bg-muted disabled:text-muted-foreground disabled:border-transparent disabled:shadow-none disabled:active:scale-100 [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n /**\n * variant — 버튼 색상/스타일\n * default 검정 배경, 흰 글자(primary-foreground), 그림자 / hover: opacity-90\n * secondary 연회색 배경, 검정 글자 / hover: accent 배경 (텍스트·opacity 변화 없음)\n * outline 흰 배경 + 테두리, 검정 글자 / hover: accent 배경 (텍스트 색 변화 없음)\n * ghost 배경 없음, 검정 글자 / hover: accent 배경 (텍스트 색 변화 없음)\n * destructive 빨간 배경, 흰 글자(95% opacity) / hover: opacity-90\n * link 배경/테두리 없음, primary 색 글자 / hover: underline\n */\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow-button hover:opacity-90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-accent',\n outline:\n 'border border-border bg-background text-foreground hover:bg-accent',\n ghost: 'text-foreground hover:bg-accent',\n destructive:\n 'bg-destructive text-white/95 shadow-button hover:opacity-90',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n /**\n * size — 버튼 크기\n * default h-9 (36px) px-4 텍스트 버튼 표준\n * icon 36×36 정사각형 아이콘 전용, rounded-lg 유지 / hover: opacity-80\n * rounded 36×36 원형 아이콘 전용, rounded-full / hover: opacity-80\n * pill px-3 py-1.5 rounded-full Rounded-text 필셋 스타일\n */\n size: {\n default: 'h-9 px-4 py-2',\n icon: 'size-9 p-0 hover:opacity-80',\n rounded: 'size-9 p-0 rounded-full hover:opacity-80',\n pill: 'px-3 py-1.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Radix Slot 패턴 — true 이면 자식 요소에 props를 병합 */\n asChild?: boolean;\n /** 로딩 상태 — 스피너 표시, 클릭 불가, 반투명 처리 (h-8 / 32px) */\n loading?: boolean;\n /**\n * 텍스트 앞에 렌더링할 아이콘 (primary / secondary / outline 전용)\n * loading 상태에서는 자동으로 숨겨집니다.\n */\n iconStart?: React.ReactNode;\n /**\n * 텍스트 뒤에 렌더링할 아이콘 (primary / secondary / outline 전용)\n * loading 상태에서는 자동으로 숨겨집니다.\n */\n iconEnd?: React.ReactNode;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n loading = false,\n iconStart,\n iconEnd,\n disabled,\n children,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n disabled={disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n // loading 상태: 크기·배경색은 variant 그대로 유지하고 opacity로 비활성 표현\n loading && 'opacity-60 shadow-none active:scale-100 cursor-not-allowed',\n className,\n )}\n {...props}\n >\n {loading ? (\n <>\n <Icon name='loader-2' className='size-3.5 animate-spin' />\n {children}\n </>\n ) : (\n <>\n {iconStart}\n {children}\n {iconEnd}\n </>\n )}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\n/**\n * 2-column grid layout:\n * Col 1 (16px): icon\n * Col 2 (1fr): title (row 1) / description (row 2, col-start-2)\n *\n * variant 색상은 CSS 상속으로 모든 자식에 자동 적용됩니다.\n * description font-weight은 CSS custom property로 제어합니다.\n * default → Pretendard Light (300)\n * destructive → Pretendard Regular (400)\n */\nconst alertVariants = cva(\n [\n // 레이아웃\n \"grid grid-cols-[16px_1fr] items-start gap-x-3 gap-y-0.5\",\n // 컨테이너\n \"w-full rounded-lg border border-border bg-background px-4 py-3\",\n // 아이콘 (직계 SVG 자식) — mt-[2px]로 텍스트 기준선에 시각적 정렬\n \"[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:mt-0.5\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n // 색상은 CSS 상속 / font-weight은 CSS variable로 자식에 주입\n default: \"text-foreground [--alert-desc-weight:300]\",\n destructive: \"text-destructive [--alert-desc-weight:400]\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\n// ─── Alert (Root) ─────────────────────────────────────────────────────────────\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\n// ─── AlertTitle ───────────────────────────────────────────────────────────────\n// Grid [col 2, row 1] — 아이콘 오른쪽, 첫 번째 행\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n // 색상은 Alert root에서 상속 (text-foreground / text-destructive)\n \"text-sm font-medium leading-5 tracking-tight\",\n className\n )}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\n// ─── AlertDescription ─────────────────────────────────────────────────────────\n// Grid [col 2, row 2+] — col-start-2로 아이콘 열 건너뜀\n\nconst AlertDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n // col-start-2: 아이콘 열을 건너뛰어 제목과 세로 정렬\n \"col-start-2\",\n // 색상 상속 / font-weight는 부모 CSS variable로 주입 (300 light ↔ 400 normal)\n \"text-sm [font-weight:var(--alert-desc-weight,400)] leading-5 tracking-tight\",\n // 내부에 ul이 포함될 경우 bullet 스타일 자동 적용\n \"[&_ul]:list-disc [&_ul]:ml-5 [&_ul]:mt-1 [&_li]:mt-0.5\",\n className\n )}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertDescription, AlertTitle };\n","import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { User } from 'lucide-react';\n\n// ─── Size map ─────────────────────────────────────────────────────────────────\n// Figma 기준 md = 32px (size-8)\n\nconst SIZE: Record<AvatarSize, { root: string; text: string }> = {\n sm: { root: 'size-6', text: 'text-xs' },\n md: { root: 'size-8', text: 'text-base' },\n lg: { root: 'size-10', text: 'text-lg' },\n};\n\nexport type AvatarSize = 'sm' | 'md' | 'lg';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface AvatarProps {\n /** 이미지 URL */\n src?: string;\n /** 이미지 alt 텍스트 */\n alt?: string;\n /** 이미지 fallback으로 이니셜 표시. 미제공 시 User 아이콘 표시 */\n username?: string;\n /**\n * circle(기본): 원형, 사진 아바타\n * square: 모서리 둥근 사각형, 이니셜 아바타 (bg-gray-500 + 흰 글자)\n */\n shape?: 'circle' | 'square';\n /** sm (24px) | md (32px, 기본) | lg (40px) */\n size?: AvatarSize;\n className?: string;\n}\n\nexport interface AvatarGroupItem {\n /** 고유 식별자 (key prop으로 사용) */\n id: string;\n username?: string;\n src?: string;\n alt?: string;\n}\n\nexport interface AvatarGroupProps {\n avatars: AvatarGroupItem[];\n size?: AvatarSize;\n className?: string;\n}\n\n// ─── Avatar ───────────────────────────────────────────────────────────────────\n// 렌더링 순서: src(이미지) || username(이니셜 최대 2자) || User 아이콘(최종 fallback)\nfunction Avatar({\n src,\n alt = '',\n username,\n shape = 'circle',\n size = 'md',\n className,\n}: AvatarProps) {\n const isCircle = shape === 'circle';\n const { root, text } = SIZE[size];\n\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-shape={shape}\n className={cn(\n 'relative inline-flex shrink-0 select-none overflow-hidden',\n root,\n isCircle ? 'rounded-full' : 'rounded-md',\n !src && 'border border-border',\n className,\n )}\n >\n {src && (\n <AvatarPrimitive.Image\n src={src}\n alt={alt}\n className='aspect-square size-full object-cover'\n />\n )}\n <AvatarPrimitive.Fallback\n className={cn(\n 'flex size-full items-center justify-center font-medium leading-none',\n text,\n isCircle\n ? 'bg-secondary text-secondary-foreground'\n : 'bg-gray-500 text-white',\n )}\n >\n {username ? (\n username.slice(0, 2)\n ) : (\n <User className='size-3/5 text-gray-600' strokeWidth={1.5} />\n )}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n );\n}\n\n// ─── AvatarGroup ──────────────────────────────────────────────────────────────\n// 아바타를 -8px(= -mr-2) 간격으로 겹쳐서 표시.\n// 두 번째 아바타부터 border-border 테두리로 구분.\n\nfunction AvatarGroup({ avatars, size = 'md', className }: AvatarGroupProps) {\n return (\n <div className={cn('flex items-center pr-2', className)}>\n {avatars.map((avatar, i) => (\n <Avatar\n key={avatar.id}\n src={avatar.src}\n alt={avatar.alt}\n size={size}\n username={avatar.username}\n shape='circle'\n className={cn('-mr-2', i > 0 && 'border border-border')}\n />\n ))}\n </div>\n );\n}\n\nexport { Avatar, AvatarGroup };\n","import { cn } from '@/lib/utils';\nimport { Icon } from './icon';\n\n// ─── Style constants ──────────────────────────────────────────────────────────\n// Derived from RYAI Design System - Badge component (node 73:3479)\n// h-5.5(22px) · rounded-lg(10px) · px-2.5 py-0.5 · text-xs font-medium\nconst TEXT_BADGE_BASE =\n 'inline-flex w-fit shrink-0 items-center justify-center gap-1 h-5.5 rounded-lg px-2.5 py-0.5 text-xs font-medium leading-xs tracking-tight whitespace-nowrap';\nconst BADGE_ICON_BASE = 'size-3';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * 배지 시맨틱 변형:\n * - default: primary 배경 (검정/흰)\n * - secondary: secondary 배경 (회색)\n * - destructive: destructive 배경 (강한 빨강)\n * - outline: 테두리만, 투명 배경 (회색)\n * - info: blue-50 배경 + blue-800 텍스트 (정보/완료)\n * - error: red-50 배경 + red-800 텍스트 (오류/실패)\n * - warning: amber-50 배경 + amber-800 텍스트 (경고/on-demand)\n * - success: green-50 배경 + green-800 텍스트 (성공/reserved)\n */\nexport type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'info' | 'error' | 'warning' | 'success';\n\nexport interface BadgeProps {\n /** 배지 표시 텍스트 */\n text: string;\n /** 배지 시맨틱 변형 (기본값: default) */\n variant?: BadgeVariant;\n /** 아이콘 이름 (@/components/ui/icon-registry에 정의된 이름) */\n iconName?: string;\n className?: string;\n /** 아이콘 회전 여부 */\n spin?: boolean;\n}\n\n// ─── Variant → className lookup ───────────────────────────────────────────────\n\nexport const BADGE_VARIANT_STYLES: Record<BadgeVariant, string> = {\n default: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n destructive: 'bg-destructive text-white',\n outline: 'border border-border bg-transparent text-foreground',\n info: 'bg-blue-50 text-blue-800',\n error: 'bg-red-50 text-red-800',\n warning: 'bg-amber-50 text-amber-800',\n success: 'bg-green-50 text-green-800',\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Badge({\n text,\n variant = 'default',\n spin = false,\n iconName,\n className,\n}: BadgeProps) {\n return (\n <span\n data-slot='badge'\n className={cn(TEXT_BADGE_BASE, BADGE_VARIANT_STYLES[variant], className)}\n >\n {iconName && (\n <Icon\n name={iconName}\n className={cn(BADGE_ICON_BASE, spin && 'animate-spin')}\n />\n )}\n {text}\n </span>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\ntype BreadcrumbSeparator = 'slash' | 'chevron-right';\n\ninterface BreadcrumbProps extends React.ComponentPropsWithoutRef<'nav'> {\n items: { label: string; href?: string; onClick?: () => void }[];\n separator?: BreadcrumbSeparator;\n collapse?: 'dropdown' | 'ellipsis';\n}\n\nconst getCollapsedItems = (items: BreadcrumbProps['items']) => {\n if (items.length <= 4) return items;\n\n return {\n first: items[0],\n middle: items.slice(1, -2),\n lastTwo: items.slice(-2),\n };\n};\n\nconst EllipsisBreadcrumb = ({\n items,\n separator,\n}: {\n items: BreadcrumbProps['items'];\n separator: BreadcrumbSeparator;\n}) => {\n const collapsed = getCollapsedItems(items);\n\n if (!('first' in collapsed)) {\n return items.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < items.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ));\n }\n return (\n <>\n <BreadcrumbItem\n label={collapsed.first.label}\n href={collapsed.first.href}\n onClick={collapsed.first.onClick}\n />\n <BreadcrumbSeparator iconName={separator} />\n <Ellipsis />\n <BreadcrumbSeparator iconName={separator} />\n {collapsed.lastTwo.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < collapsed.lastTwo.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ))}\n </>\n );\n};\n\nconst DropdownBreadcrumb = ({\n items,\n separator,\n}: {\n items: BreadcrumbProps['items'];\n separator: BreadcrumbSeparator;\n}) => {\n const collapsed = getCollapsedItems(items);\n\n if (!('first' in collapsed)) {\n return items.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < items.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ));\n }\n\n const { first, middle, lastTwo } = collapsed;\n\n return (\n <>\n <BreadcrumbItem label={first.label} href={first.href} onClick={first.onClick} />\n <BreadcrumbSeparator iconName={separator} />\n <Dropdown middle={middle} />\n <BreadcrumbSeparator iconName={separator} />\n {lastTwo.map((item, index) => (\n <>\n <BreadcrumbItem key={index} label={item.label} href={item.href} onClick={item.onClick} />\n {index < lastTwo.length - 1 && (\n <BreadcrumbSeparator iconName={separator} />\n )}\n </>\n ))}\n </>\n );\n};\n\nfunction Breadcrumb({\n items,\n separator = 'chevron-right',\n collapse = 'ellipsis',\n className,\n}: BreadcrumbProps) {\n return (\n <nav aria-label='breadcrumb' className={cn(className)}>\n <BreadcrumbList>\n {collapse === 'ellipsis' ? (\n <EllipsisBreadcrumb items={items} separator={separator} />\n ) : (\n <DropdownBreadcrumb items={items} separator={separator} />\n )}\n </BreadcrumbList>\n </nav>\n );\n}\n\nfunction BreadcrumbList({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'ol'>) {\n return (\n <ol\n className={cn(\n 'flex flex-wrap items-center gap-1.5 text-sm tracking-tight text-gray-500',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({\n label,\n href,\n onClick,\n className,\n}: {\n label: string;\n href?: string;\n onClick?: () => void;\n className?: string;\n}) {\n const isLink = href !== undefined || onClick !== undefined;\n return (\n <li className={cn('inline-flex items-center gap-1', className)}>\n {isLink ? (\n <a\n href={href}\n onClick={onClick}\n className='text-gray-500 transition-colors hover:text-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm'\n >\n {label}\n </a>\n ) : (\n <span className='text-gray-900'>{label}</span>\n )}\n </li>\n );\n}\n\nfunction BreadcrumbSeparator({\n iconName,\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'li'> & {\n iconName: 'slash' | 'chevron-right';\n}) {\n return (\n <li\n role='presentation'\n aria-hidden\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {iconName === 'slash' ? (\n <Icon name='slash' className='size-3.5' />\n ) : (\n <Icon name='chevron-right' className='size-3.5' />\n )}\n </li>\n );\n}\n\nfunction Ellipsis() {\n return (\n <span\n role='presentation'\n aria-hidden\n className={cn('flex items-center justify-center')}\n >\n <Icon name='more-horizontal' className='size-3.5' />\n {/* <span className='sr-only'>More</span> */}\n </span>\n );\n}\n\nfunction Dropdown({ middle }: { middle: BreadcrumbProps['items'] }) {\n const [open, setOpen] = useState(false);\n\n return (\n <div className='relative'>\n <button\n type='button'\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n 'inline-flex items-center gap-1 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n )}\n >\n <Icon\n name='chevron-down'\n className='size-3.5 cursor-pointer hover:text-foreground hover:bg-gray-100 rounded-sm'\n />\n </button>\n {open && (\n <div className='absolute p-1 flex flex-col gap-2 top-full left-0 mt-2 w-36 bg-white rounded-md shadow-lg'>\n {middle.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className='px-2 py-1 hover:bg-gray-100 cursor-pointer text-sm tracking-tight rounded-sm text-gray-500 hover:text-gray-900'\n >\n {item.label}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport { Breadcrumb };\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── DataSection ──────────────────────────────────────────────────────────────\n// 제목 + 툴바(검색 슬롯 / 액션 버튼) + 콘텐츠(children) 레이아웃 컴포넌트.\n// 상태(editMode, viewMode 등)는 소비자가 관리하고 slots에 주입한다.\n\nexport interface DataSectionProps {\n /** 섹션 제목 */\n title?: string;\n children: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n className?: string;\n childrenClassName?: string;\n}\n\nexport function DataSection({\n title,\n left,\n right,\n className,\n childrenClassName,\n children,\n}: DataSectionProps) {\n return (\n <div className={cn('flex flex-col gap-4', className)}>\n {title && (\n <h2 className='text-xl font-semibold leading-none tracking-tight text-foreground'>\n {title}\n </h2>\n )}\n {(left || right) && (\n <div className='flex items-center justify-between gap-2 shrink-0'>\n <div className='flex items-center gap-2 flex-1 min-w-0'>{left}</div>\n <div className='flex items-center gap-2 shrink-0'>{right}</div>\n </div>\n )}\n <div className={cn(childrenClassName)}>{children}</div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n title: React.ReactNode;\n children: React.ReactNode;\n metadata?: React.ReactNode;\n className?: string;\n}\n\nexport function Drawer({\n open,\n onClose,\n title,\n children,\n metadata,\n className,\n}: DrawerProps) {\n // isVisible: DOM 존재 여부 (닫힘 애니메이션이 끝난 후 false)\n // isOpen: CSS 애니메이션 상태 (translate-x-0 / translate-x-full)\n const [isVisible, setIsVisible] = React.useState(open);\n const [isOpen, setIsOpen] = React.useState(open);\n\n // 닫힘 애니메이션 중에도 마지막 컨텐츠를 유지 (열려 있을 때만 갱신)\n const [snapshot, setSnapshot] = React.useState({ title, children, metadata });\n React.useEffect(() => {\n if (open) setSnapshot({ title, children, metadata });\n }, [open, title, children, metadata]);\n\n // 열려 있을 때는 최신 props를, 닫히는 중에는 마지막 스냅샷을 표시\n const displayTitle = open ? title : snapshot.title;\n const displayChildren = open ? children : snapshot.children;\n const displayMetadata = open ? metadata : snapshot.metadata;\n\n React.useEffect(() => {\n if (open) {\n // 마운트 후 다음 프레임에 열림 애니메이션 시작\n setIsVisible(true);\n const raf = requestAnimationFrame(() => {\n requestAnimationFrame(() => setIsOpen(true));\n });\n return () => cancelAnimationFrame(raf);\n } else {\n // 닫힘 애니메이션 시작 (isVisible은 transitionend 후 false)\n setIsOpen(false);\n }\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose]);\n\n React.useEffect(() => {\n document.body.style.overflow = open ? 'hidden' : '';\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // transform 트랜지션이 끝난 후에만 언마운트\n const handleTransitionEnd = (e: React.TransitionEvent) => {\n if (!open && e.propertyName === 'transform') setIsVisible(false);\n };\n\n if (!isVisible) return null;\n\n return (\n <>\n {/* Backdrop with blur */}\n <div\n className={cn(\n 'fixed inset-0 z-40 bg-black/20 backdrop-blur-sm transition-opacity duration-300',\n isOpen\n ? 'opacity-100 pointer-events-auto'\n : 'opacity-0 pointer-events-none',\n )}\n onClick={onClose}\n />\n\n {/* Drawer panel */}\n <div\n className={cn(\n 'fixed top-0 right-0 z-50 flex flex-col h-full w-[560px] bg-background',\n 'border-l border-border',\n 'transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full',\n className,\n )}\n style={{ boxShadow: '-4px 0 24px rgba(0,0,0,0.08)' }}\n onTransitionEnd={handleTransitionEnd}\n >\n {/* Header */}\n <div className='flex flex-col gap-1.5 p-4'>\n <div className='flex items-center justify-between'>\n <div className='flex-1 min-w-0'>{displayTitle}</div>\n <button\n onClick={onClose}\n className='ml-3 size-8 shrink-0 flex items-center justify-center rounded-lg hover:bg-accent transition-colors'\n aria-label='닫기'\n >\n <Icon name='x' className='size-4 text-foreground' />\n </button>\n </div>\n {displayMetadata && (\n <p className='text-sm text-muted-foreground'>{displayMetadata}</p>\n )}\n </div>\n\n {/* Content */}\n <div className='flex-1 overflow-y-auto'>{displayChildren}</div>\n </div>\n </>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cn } from '@/lib/utils';\n\nexport function EmptyTrayIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n width='64'\n height='41'\n viewBox='0 0 64 41'\n fill='none'\n aria-hidden\n className={cn('shrink-0', className)}\n >\n <g clipPath='url(#clip0_19425_37257)'>\n <path\n d='M32 41C49.6731 41 64 37.866 64 34C64 30.134 49.6731 27 32 27C14.3269 27 0 30.134 0 34C0 37.866 14.3269 41 32 41Z'\n fill='#F5F5F5'\n />\n <path\n d='M55 13.76L44.854 2.258C44.367 1.474 43.656 1 42.907 1H21.093C20.344 1 19.633 1.474 19.146 2.257L9 13.761V23H55V13.76Z'\n stroke='#D9D9D9'\n />\n <path\n d='M41.613 16.931C41.613 15.326 42.607 14.001 43.84 14H55V32.137C55 34.26 53.68 36 52.05 36H11.95C10.32 36 9 34.259 9 32.137V14H20.16C21.393 14 22.387 15.323 22.387 16.928V16.95C22.387 18.555 23.392 19.851 24.624 19.851H39.376C40.608 19.851 41.613 18.543 41.613 16.938V16.931Z'\n fill='#FAFAFA'\n stroke='#D9D9D9'\n />\n </g>\n <defs>\n <clipPath id='clip0_19425_37257'>\n <rect width='64' height='41' fill='white' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import * as React from 'react';\nimport { EmptyTrayIcon } from '@/components/icons/custom/empty-tray';\nimport { cn } from '@/lib/utils';\n\ninterface EmptyProps {\n image?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Empty({ image, description, children, className }: EmptyProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center gap-4 py-16',\n className,\n )}\n >\n {image !== undefined ? image : <EmptyTrayIcon />}\n\n {description && (\n <p className='text-center text-sm leading-xs text-muted-foreground whitespace-pre-line'>\n {description}\n </p>\n )}\n\n {children && (\n <div className='flex items-center gap-2'>{children}</div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── FilledSquareMinus ────────────────────────────────────────────────────────\n// Indeterminate state indicator: filled square + white horizontal dash.\n// Same geometry as FilledSquareCheck.\n\nfunction FilledSquareMinus({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={cn(className)}\n aria-hidden\n >\n <rect\n x='2.5'\n y='2.5'\n width='15'\n height='15'\n rx='1.66667'\n fill='currentColor'\n stroke='currentColor'\n strokeWidth='1.5'\n />\n <path\n d='M7 10H13'\n stroke='white'\n strokeWidth='1.5'\n strokeLinecap='round'\n />\n </svg>\n );\n}\n\n// ─── FilledSquareCheck ────────────────────────────────────────────────────────\n// Figma lucide/square-check: filled square background + white stroke checkmark\n// Standard lucide SquareCheck is stroke-only; Figma uses the filled variant.\n// Shared by Checkbox and Label components.\n//\n// Coordinates derived from Figma node 73-4564 asset analysis:\n// - 20×20 viewBox, filled rect 15×15 at (2.5, 2.5), rx=1.66667\n// - White check path strokeWidth=1.25px (Figma imgVector2 reference)\n\nfunction FilledSquareCheck({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={cn(className)}\n aria-hidden\n >\n <rect\n x='2.5'\n y='2.5'\n width='15'\n height='15'\n rx='1.66667'\n fill='currentColor'\n stroke='currentColor'\n strokeWidth='1.5'\n />\n <path\n d='M7.5 10L9.16667 11.66667L12.5 8.33333'\n stroke='white'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeDasharray='8'\n style={{\n animation:\n 'check-draw 160ms cubic-bezier(0.23, 1, 0.32, 1) 40ms both',\n }}\n />\n </svg>\n );\n}\n\n// ─── Checkbox ─────────────────────────────────────────────────────────────────\n// Figma node 73-4564\n// Icon size: 20×20 (size-5)\n// Unchecked: lucide/square — stroke outline square (Square icon, text-foreground)\n// Checked: lucide/square-check filled — FilledSquareCheck (filled bg + white check)\n//\n// Optional label + description props:\n// - Without label: renders only the CheckboxPrimitive.Root (className → root)\n// - With label: renders a wrapper row with label/description (className → wrapper)\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n /** Optional label rendered to the right of the checkbox */\n label?: string;\n /** Optional description rendered below the label (requires label) */\n description?: string;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, id, label, description, disabled, ...props }, ref) => {\n const checkboxRoot = (\n <CheckboxPrimitive.Root\n ref={ref}\n id={id}\n disabled={disabled}\n className={cn(\n 'group peer relative size-5 shrink-0 cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed',\n // When standalone (no label), disabled opacity lives here\n !label && 'disabled:opacity-50',\n // When description is present, nudge down to align with first line of text\n label && description && 'mt-0.5',\n !label && className,\n )}\n {...props}\n >\n {/* Unchecked icon — hidden when Root has data-state=checked */}\n <Icon\n name='square'\n className='size-5 text-border group-data-[state=checked]:hidden'\n />\n {/* Checked/indeterminate indicator — mounts for both states */}\n <CheckboxPrimitive.Indicator className='absolute inset-0 flex items-center justify-center animate-checkbox-in'>\n {props.checked === 'indeterminate' ? (\n <FilledSquareMinus className='size-5 text-foreground' />\n ) : (\n <FilledSquareCheck className='size-5 text-foreground' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n\n if (!label) return checkboxRoot;\n\n return (\n <label\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n className,\n )}\n >\n {checkboxRoot}\n <div className='flex flex-col gap-2'>\n <span className='text-sm font-medium leading-5 tracking-tight text-foreground select-none'>\n {label}\n </span>\n {description && (\n <p className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </p>\n )}\n </div>\n </label>\n );\n});\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\n// ─── CheckboxCard ──────────────────────────────────────────────────────────────\n// Figma variant: card with border-border (unchecked) → border-primary (checked)\n// CSS has() reacts to inner Checkbox's data-state without extra JS state\n\nexport interface CheckboxCardProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n /** Main label text */\n label: string;\n /** Optional description below the label */\n description?: string;\n}\n\nconst CheckboxCard = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxCardProps\n>(({ className, id, label, description, disabled, ...props }, ref) => (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer gap-2 items-start rounded-lg border border-border bg-background p-3',\n 'transition-colors',\n // has() — card border switches to primary when inner checkbox is checked\n 'has-[[data-state=checked]]:border-primary',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n >\n <Checkbox\n ref={ref}\n id={id}\n disabled={disabled}\n className='mt-0.5'\n {...props}\n />\n <div className='flex flex-col gap-2 flex-1 min-w-0'>\n <span className='text-sm font-medium leading-5 tracking-tight text-foreground'>\n {label}\n </span>\n {description && (\n <span className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </span>\n )}\n </div>\n </label>\n));\nCheckboxCard.displayName = 'CheckboxCard';\n\nexport { Checkbox, CheckboxCard };\n","\"use client\";\n\nimport React, { createContext, useContext, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface ChoiceCardGroupCtx {\n value: string;\n onChange: (value: string) => void;\n}\n\nconst ChoiceCardGroupContext = createContext<ChoiceCardGroupCtx>({\n value: \"\",\n onChange: () => {},\n});\n\n// ─── ChoiceCardGroup ──────────────────────────────────────────────────────────\n// 카드형 라디오 그룹 컨테이너\n// 비제어(defaultValue) / 제어(value + onValueChange) 모드 모두 지원\n\nexport interface ChoiceCardGroupProps {\n /** 초기 선택값 (비제어 모드) */\n defaultValue?: string;\n /** 선택값 (제어 모드) */\n value?: string;\n /** 선택 변경 콜백 */\n onValueChange?: (value: string) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction ChoiceCardGroup({\n defaultValue = \"\",\n value: controlledValue,\n onValueChange,\n className,\n children,\n}: ChoiceCardGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const onChange = (v: string) => {\n if (!isControlled) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <ChoiceCardGroupContext.Provider value={{ value, onChange }}>\n <div className={cn(\"flex flex-col gap-3\", className)} role=\"radiogroup\">\n {children}\n </div>\n </ChoiceCardGroupContext.Provider>\n );\n}\n\n// ─── ChoiceCardItem ───────────────────────────────────────────────────────────\n// 개별 선택 카드\n//\n// 선택됨 : bg-background border-primary — 라디오 인디케이터 활성 (Figma 1188-5356)\n// 미선택 : bg-background border-border — 라디오 인디케이터 비활성\n\nexport interface ChoiceCardItemProps {\n /** 그룹 내 고유 값 */\n value: string;\n /** 카드 제목 */\n title: string;\n /** 카드 설명 (선택) */\n description?: string;\n className?: string;\n}\n\nfunction ChoiceCardItem({\n value,\n title,\n description,\n className,\n}: ChoiceCardItemProps) {\n const { value: groupValue, onChange } = useContext(ChoiceCardGroupContext);\n const isSelected = groupValue === value;\n\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onChange(value)}\n className={cn(\n \"flex items-center gap-3 overflow-hidden rounded-lg border p-4 text-left transition-colors\",\n isSelected\n ? \"border-primary bg-background\"\n : \"border-border bg-background hover:bg-secondary\"\n )}\n >\n {/* 텍스트 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5 min-w-0\">\n <p className=\"text-sm font-medium tracking-tight text-foreground\">\n {title}\n </p>\n {description && (\n <p className=\"text-xs tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* 라디오 인디케이터 */}\n <div\n className={cn(\n \"mt-px size-4 shrink-0 self-start rounded-full border shadow-button transition-colors\",\n isSelected ? \"border-ring\" : \"border-border bg-background\"\n )}\n >\n {isSelected && (\n <div className=\"mx-auto size-2 rounded-full bg-foreground\" style={{ marginTop: \"3px\" }} />\n )}\n </div>\n </button>\n );\n}\n\nexport { ChoiceCardGroup, ChoiceCardItem };\n","\"use client\";\n\n// ─── Collapsible ──────────────────────────────────────────────────────────────\n//\n// 피그마 노드: 73-4665\n//\n// 워크스페이스 전환용 콜랩서블 컴포넌트.\n// 트리거(아바타 + 이름 + 뱃지 + ChevronsUpDown)를 클릭하면\n// 워크스페이스 목록 드롭다운이 열린다.\n//\n// 사용 예시 (비제어):\n// <Collapsible\n// activeWorkspace={{ id: \"1\", name: \"박찬준\", badge: \"개인\", avatarText: \"박\" }}\n// workspaces={[...]}\n// onSelectWorkspace={(ws) => console.log(ws)}\n// onCreateTeam={() => {}}\n// />\n//\n// 사용 예시 (제어):\n// <Collapsible\n// activeWorkspace={...}\n// workspaces={[...]}\n// open={isOpen}\n// onOpenChange={setIsOpen}\n// />\n//\n// 기본 Radix 프리미티브가 필요한 경우:\n// import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent } from \"./collapsible\"\n\nimport * as React from \"react\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CollapsibleWorkspace {\n id: string;\n /** 워크스페이스 이름 */\n name: string;\n /** 뱃지 텍스트 (예: \"개인\", \"Enterprise\", \"Team\") */\n badge: string;\n /** 아바타에 표시할 텍스트 (미지정 시 name[0]) */\n avatarText?: string;\n /** 아바타 이미지 URL (지정 시 텍스트 대신 이미지 표시) */\n avatarSrc?: string;\n /**\n * 아바타 배경색\n * - \"sidebar-ring\" : 회색 (#6b7280) — 개인/기본\n * - \"chart-1\" : 파란색 (#3b82f6) — 팀/엔터프라이즈\n * @default \"sidebar-ring\"\n */\n avatarColor?: \"sidebar-ring\" | \"chart-1\";\n /** 현재 활성 워크스페이스 여부 (드롭다운에서 강조 + Check 표시) */\n isActive?: boolean;\n}\n\nexport interface CollapsibleProps {\n /** 트리거에 표시되는 현재 워크스페이스 */\n activeWorkspace: CollapsibleWorkspace;\n /**\n * 드롭다운에 표시할 워크스페이스 목록.\n * isActive=true인 항목이 강조(bg-accent + Check 아이콘)로 표시된다.\n */\n workspaces?: CollapsibleWorkspace[];\n /** 제어 모드: 열림 상태 */\n open?: boolean;\n /** 제어 모드: 열림 상태 변경 콜백 */\n onOpenChange?: (open: boolean) => void;\n /** 비제어 모드: 초기 열림 상태 @default false */\n defaultOpen?: boolean;\n /** \"+ 팀 생성하기\" 클릭 콜백 */\n onCreateTeam?: () => void;\n /** 워크스페이스 항목 클릭 콜백 */\n onSelectWorkspace?: (workspace: CollapsibleWorkspace) => void;\n className?: string;\n}\n\n// ─── Internal: Avatar ────────────────────────────────────────────────────────\n\n/**\n * size=\"lg\" → 36×36 rounded-lg (트리거용, Figma 기본)\n * size=\"md\" → 32×32 rounded-md (드롭다운 목록용)\n */\nfunction CollapsibleAvatar({\n workspace,\n size = \"lg\",\n}: {\n workspace: CollapsibleWorkspace;\n size?: \"lg\" | \"md\";\n}) {\n const sizeClass = size === \"lg\" ? \"size-9 rounded-lg\" : \"size-8 rounded-md\";\n const bgClass =\n workspace.avatarColor === \"chart-1\" ? \"bg-chart-1\" : \"bg-sidebar-ring\";\n\n return (\n <div\n className={cn(\n \"relative overflow-hidden shrink-0 select-none\",\n sizeClass,\n bgClass,\n )}\n >\n {workspace.avatarSrc ? (\n <img\n src={workspace.avatarSrc}\n alt={workspace.name}\n className=\"absolute inset-0 size-full object-cover\"\n />\n ) : (\n <span className=\"absolute inset-0 flex items-center justify-center text-base font-medium leading-6 text-center text-white tracking-tight whitespace-nowrap\">\n {workspace.avatarText ?? workspace.name[0]}\n </span>\n )}\n </div>\n );\n}\n\n// ─── Internal: Badge ─────────────────────────────────────────────────────────\n\nfunction CollapsibleBadge({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"bg-background border border-border flex gap-1 h-5.5 items-center justify-center px-2.5 py-0.5 rounded-lg shrink-0\">\n <span className=\"text-xs font-medium leading-xs text-foreground text-center tracking-tight whitespace-nowrap\">\n {children}\n </span>\n </div>\n );\n}\n\n// ─── ChevronsUpDown Icon (Figma node 4724-41809, stroke-width: 1, size: 16×16) ─\n// inset: 16.67% 세로 / 29.17% 가로 — viewBox 0 0 9.58333 14.5833\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <div className={cn(\"overflow-hidden relative shrink-0 size-4\", className)}>\n <div className=\"absolute\" style={{ inset: \"16.67% 29.17%\" }}>\n <div className=\"absolute\" style={{ inset: \"-4.69% -7.5%\" }}>\n <img alt=\"\" aria-hidden src=\"/icons/chevrons-up-down.svg\" className=\"block max-w-none size-full\" />\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Collapsible ─────────────────────────────────────────────────────────────\n\nexport function Collapsible({\n activeWorkspace,\n workspaces = [],\n open,\n onOpenChange,\n defaultOpen = false,\n onCreateTeam,\n onSelectWorkspace,\n className,\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = open !== undefined ? open : internalOpen;\n\n function handleOpenChange(next: boolean) {\n setInternalOpen(next);\n onOpenChange?.(next);\n }\n\n return (\n <CollapsiblePrimitive.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(\"relative flex flex-col w-full\", className)}\n >\n {/* 외부 클릭 감지 backdrop */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-10\"\n onClick={() => handleOpenChange(false)}\n />\n )}\n {/* ── Trigger ─────────────────────────────────────────────── */}\n <CollapsiblePrimitive.Trigger asChild>\n <button\n className={cn(\n \"flex items-center justify-between pl-2 py-2 w-full rounded-md\",\n \"cursor-pointer transition-colors hover:bg-sidebar-accent\",\n \"data-[state=open]:bg-sidebar-accent\",\n )}\n >\n {/* 아바타 + 이름 + 뱃지 */}\n <div className=\"flex flex-1 gap-2 items-center min-w-0\">\n <CollapsibleAvatar workspace={activeWorkspace} size=\"lg\" />\n <div className=\"flex gap-1 items-center min-w-0 shrink-0\">\n <span className=\"text-base font-medium leading-6 text-foreground tracking-tight whitespace-nowrap\">\n {activeWorkspace.name}\n </span>\n <CollapsibleBadge>{activeWorkspace.badge}</CollapsibleBadge>\n </div>\n </div>\n {/* ChevronsUpDown — Figma: 32×32 button, 16×16 icon, stroke-width: 1 */}\n <div className=\"flex items-center justify-center rounded-lg shrink-0 size-8\">\n <ChevronsUpDownIcon />\n </div>\n </button>\n </CollapsiblePrimitive.Trigger>\n\n {/* ── Dropdown Panel ──────────────────────────────────────── */}\n {/* z-20으로 아래 콘텐츠를 오버레이, w-80 = 320px (Figma 스펙) */}\n <CollapsiblePrimitive.Content className={cn(\n \"absolute left-0 top-full z-20 pt-1 w-80\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 duration-200\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\",\n )}>\n <div className=\"bg-background border border-border rounded-xl shadow-sm px-2 py-2 flex flex-col gap-1\">\n\n {workspaces.map((ws) =>\n ws.isActive ? (\n /* ── 활성 워크스페이스 (강조 + Check 아이콘) ── */\n <div\n key={ws.id}\n className=\"flex items-center justify-between h-12 px-2 py-2 rounded-md bg-accent\"\n >\n {/* 아바타 + 이름 + 뱃지 */}\n <div className=\"flex gap-2 items-center\">\n <CollapsibleAvatar workspace={ws} size=\"md\" />\n <div className=\"flex gap-1 items-center\">\n <span className=\"text-sm text-foreground leading-5 tracking-tight whitespace-nowrap\">\n {ws.name}\n </span>\n <CollapsibleBadge>{ws.badge}</CollapsibleBadge>\n </div>\n </div>\n {/* Check 아이콘 */}\n <div className=\"flex items-center justify-center size-9 shrink-0\">\n <Icon name=\"check\" className=\"size-4 text-foreground\" />\n </div>\n </div>\n ) : (\n /* ── 비활성 워크스페이스 (클릭 가능) ── */\n <button\n key={ws.id}\n className=\"flex items-center w-full h-12 px-2 py-2 rounded-md hover:bg-accent transition-colors cursor-pointer\"\n onClick={() => onSelectWorkspace?.(ws)}\n >\n <div className=\"flex gap-2 items-center\">\n <CollapsibleAvatar workspace={ws} size=\"md\" />\n <div className=\"flex gap-1 items-center\">\n <span className=\"text-sm text-foreground leading-5 tracking-tight whitespace-nowrap\">\n {ws.name}\n </span>\n <CollapsibleBadge>{ws.badge}</CollapsibleBadge>\n </div>\n </div>\n </button>\n ),\n )}\n\n {/* ── \"+ 팀 생성하기\" ── */}\n <button\n className=\"flex items-center justify-center gap-2 w-full h-12 px-2 py-2 rounded-md hover:bg-accent transition-colors cursor-pointer\"\n onClick={onCreateTeam}\n >\n <Icon name=\"plus\" className=\"size-4 text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground leading-5 tracking-tight whitespace-nowrap\">\n 팀 생성하기\n </span>\n </button>\n </div>\n </CollapsiblePrimitive.Content>\n </CollapsiblePrimitive.Root>\n );\n}\n\n// ─── Re-export Radix primitives ───────────────────────────────────────────────\n// 완전한 커스텀 콘텐츠가 필요한 경우 이 프리미티브를 직접 사용한다.\n\nexport const CollapsibleRoot = CollapsiblePrimitive.Root;\nexport const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nexport const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\nimport { ChevronsUpDownIcon } from \"@/components/icons/custom/chevrons-up-down\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n /** Unique identifier for the option */\n value: string;\n /** Display text shown in the list and trigger */\n label: string;\n /** Optional icon rendered before the label (16×16) */\n icon?: React.ReactNode;\n}\n\nexport interface ComboboxProps {\n /** List of selectable options */\n options: ComboboxOption[];\n /** Controlled selected value */\n value?: string;\n /** Callback when selection changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text shown when no value is selected */\n placeholder?: string;\n /** Placeholder inside the search input */\n searchPlaceholder?: string;\n /** Whether to show the search input (default: false) */\n showSearch?: boolean;\n /** Optional footer action at the bottom (e.g. \"+ 새 컬렉션 만들기\") */\n footer?: { label: string; onClick: () => void };\n /** Additional className for the trigger button */\n className?: string;\n /** Disable the combobox */\n disabled?: boolean;\n}\n\n// ─── Combobox ─────────────────────────────────────────────────────────────────\n// Figma nodes: 3580-11925 (combobox examples), 3824-7499 (usage in page)\n//\n// Trigger: h-9, w-full, border, rounded-[--radius-md], px-3 py-2, gap-2\n// selected → font-medium text-foreground\n// empty → font-normal text-muted-foreground\n// Dropdown: w-[var(--radix-popover-trigger-width)], border, rounded-[--radius-md],\n// shadow-md (0,4,6 + 0,2,4), bg-popover\n// Search: border-b, px-3, gap-2, Search 16px + input py-2\n// Items: p-1 wrapper; each item px-2 py-1.5 gap-2 rounded-sm\n// Active: bg-accent text-accent-foreground + Check icon right\n// Footer: Plus icon + label, text-muted-foreground\n\nexport function Combobox({\n options,\n value,\n onValueChange,\n placeholder = \"선택해 주세요\",\n searchPlaceholder = \"검색해 보세요\",\n showSearch = false,\n footer,\n className,\n disabled = false,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Filter options by search query (only when showSearch is true)\n const filtered = React.useMemo(\n () =>\n showSearch && search.trim()\n ? options.filter((opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options,\n [options, search, showSearch],\n );\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n function handleOpenChange(next: boolean) {\n setOpen(next);\n if (!next) setSearch(\"\");\n }\n\n React.useEffect(() => {\n if (open && showSearch) {\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open, showSearch]);\n\n function handleSelect(optionValue: string) {\n onValueChange?.(optionValue === value ? \"\" : optionValue);\n setOpen(false);\n setSearch(\"\");\n }\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n {/* ── Trigger ─────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 py-2\",\n \"cursor-pointer transition-colors hover:bg-accent\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {/* Icon + Label */}\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n {selectedOption?.icon && (\n <span className=\"shrink-0 flex items-center\">\n {selectedOption.icon}\n </span>\n )}\n <span\n className={cn(\n \"flex-1 min-w-0 truncate text-left text-sm leading-5 tracking-tight\",\n selectedOption\n ? \"font-medium text-foreground\"\n : \"font-normal text-muted-foreground\",\n )}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n </span>\n {/* Chevrons */}\n <ChevronsUpDownIcon className=\"size-4 text-muted-foreground\" />\n </button>\n </PopoverPrimitive.Trigger>\n\n {/* ── Dropdown ────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: \"var(--radix-popover-trigger-width)\" }}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-border bg-popover\",\n \"shadow-dropdown\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"duration-200 data-[state=closed]:duration-150\",\n )}\n >\n {/* Optional search row */}\n {showSearch && (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Icon name=\"search\" className=\"size-4 text-muted-foreground\" />\n <input\n ref={inputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"flex-1 min-w-0 py-2 bg-transparent outline-none text-sm font-normal leading-5 tracking-tight text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n )}\n\n {/* Options list */}\n <div className=\"p-1 flex flex-col overflow-y-auto\" style={{ maxHeight: 384 }}>\n {filtered.length === 0 ? (\n <p className=\"px-2 py-1.5 text-sm text-muted-foreground text-center\">\n 결과 없음\n </p>\n ) : (\n filtered.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => handleSelect(opt.value)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5\",\n \"text-sm font-normal leading-5 tracking-tight\",\n \"cursor-pointer transition-colors\",\n isSelected\n ? \"bg-accent text-accent-foreground\"\n : \"text-popover-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n >\n {opt.icon && (\n <span className=\"shrink-0 flex items-center\">\n {opt.icon}\n </span>\n )}\n <span className=\"flex-1 min-w-0 truncate text-left\">\n {opt.label}\n </span>\n {isSelected && <Icon name=\"check\" className=\"size-4 text-foreground\" />}\n </button>\n );\n })\n )}\n\n {/* Optional footer action */}\n {footer && (\n <button\n type=\"button\"\n onClick={() => {\n footer.onClick();\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm font-normal leading-5 tracking-tight text-muted-foreground hover:bg-accent hover:text-accent-foreground cursor-pointer transition-colors\"\n >\n <Icon name=\"plus\" className=\"size-4 text-muted-foreground\" />\n <span className=\"flex-1 min-w-0 truncate text-left\">\n {footer.label}\n </span>\n </button>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface ChevronsUpDownIconProps {\n className?: string;\n}\n\n/**\n * Chevrons-up-down icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:607 (lucide/chevrons-up-down)\n */\nexport function ChevronsUpDownIcon({ className }: ChevronsUpDownIconProps) {\n return (\n <svg\n viewBox=\"-6.25 -3.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 11.75L5.75 16.75L10.75 11.75M0.75 5.75L5.75 0.75L10.75 5.75\" />\n </svg>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DatePickerLocale = 'ko' | 'en' | 'jp';\nexport type DatePickerMode = 'date' | 'offset';\n\nexport interface DatePickerProps {\n /** Controlled value */\n value?: Date;\n /** Uncontrolled default value */\n defaultValue?: Date;\n /** Called when user selects a date */\n onChange?: (date: Date | undefined) => void;\n /**\n * 'date' — trigger shows formatted date (e.g. \"June 01, 2025\")\n * 'offset' — trigger shows days-from-today (e.g. \"In 2 days\")\n */\n mode?: DatePickerMode;\n /** When true, dates before today cannot be selected and prev-month nav is blocked at current month */\n disablePast?: boolean;\n locale?: DatePickerLocale;\n /** Override the placeholder shown when no date is selected */\n placeholder?: string;\n /**\n * Receives the selected date and returns a helper string rendered below the trigger.\n * Only shown when mode='offset' and a date is selected.\n */\n className?: string;\n /**\n * [minYear, maxYear] for the year dropdown.\n * Defaults to [currentYear - 10, currentYear + 10].\n */\n yearRange?: [number, number];\n /** When true, shows locale-specific \"Today\" label instead of formatted date when today is selected */\n showTodayLabel?: boolean;\n disabled?: boolean;\n}\n\n// ─── Locale Config ────────────────────────────────────────────────────────────\n\ninterface LocaleConfig {\n dayHeaders: string[];\n formatYear: (y: number) => string;\n formatMonth: (m: number) => string;\n formatTriggerDate: (d: Date) => string;\n formatOffset: (days: number) => string;\n defaultPlaceholder: string;\n}\n\nconst EN_MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst LOCALE_CONFIG: Record<DatePickerLocale, LocaleConfig> = {\n en: {\n dayHeaders: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n formatYear: (y) => `${y}`,\n formatMonth: (m) => EN_MONTHS[m],\n formatTriggerDate: (d) =>\n `${EN_MONTHS[d.getMonth()]} ${String(d.getDate()).padStart(2, '0')}, ${d.getFullYear()}`,\n formatOffset: (days) => {\n if (days === 0) return 'Today';\n if (days === 1) return 'In 1 day';\n return `In ${days} days`;\n },\n defaultPlaceholder: 'Select a date',\n },\n ko: {\n dayHeaders: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n formatYear: (y) => `${y}년`,\n formatMonth: (m) => `${m + 1}월`,\n formatTriggerDate: (d) =>\n `${d.getFullYear()}년 ${d.getMonth() + 1}월 ${d.getDate()}일`,\n formatOffset: (days) => {\n if (days === 0) return '오늘';\n return `${days}일 후`;\n },\n defaultPlaceholder: '날짜 선택',\n },\n jp: {\n dayHeaders: ['日', '月', '火', '水', '木', '金', '土'],\n formatYear: (y) => `${y}年`,\n formatMonth: (m) => `${m + 1}月`,\n formatTriggerDate: (d) =>\n `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`,\n formatOffset: (days) => {\n if (days === 0) return '今日';\n return `${days}日後`;\n },\n defaultPlaceholder: '日付を選択',\n },\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nfunction diffDays(selected: Date, today: Date): number {\n return Math.round(\n (startOfDay(selected).getTime() - startOfDay(today).getTime()) / 86_400_000,\n );\n}\n\n// ─── CalendarGrid ─────────────────────────────────────────────────────────────\n\ninterface CalendarGridProps {\n year: number;\n month: number;\n selected: Date | undefined;\n today: Date;\n disablePast: boolean;\n onSelect: (date: Date) => void;\n onYearChange: (y: number) => void;\n onMonthChange: (m: number) => void;\n locale: DatePickerLocale;\n yearRange: [number, number];\n}\n\nfunction CalendarGrid({\n year,\n month,\n selected,\n today,\n disablePast,\n onSelect,\n onYearChange,\n onMonthChange,\n locale,\n yearRange,\n}: CalendarGridProps) {\n const config = LOCALE_CONFIG[locale];\n const todayStart = startOfDay(today);\n const selectedStart = selected ? startOfDay(selected) : null;\n\n // Calendar grid: 6 rows × 7 cols = 42 cells\n const firstDay = new Date(year, month, 1).getDay(); // 0 = Sunday\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n type Cell = { day: number; currentMonth: boolean; date: Date };\n const cells: Cell[] = [];\n\n for (let i = firstDay - 1; i >= 0; i--) {\n const day = daysInPrevMonth - i;\n cells.push({\n day,\n currentMonth: false,\n date: new Date(year, month - 1, day),\n });\n }\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ day: d, currentMonth: true, date: new Date(year, month, d) });\n }\n for (let d = 1; cells.length < 42; d++) {\n cells.push({\n day: d,\n currentMonth: false,\n date: new Date(year, month + 1, d),\n });\n }\n\n const years = Array.from(\n { length: yearRange[1] - yearRange[0] + 1 },\n (_, i) => yearRange[0] + i,\n );\n\n function prevMonth() {\n if (month === 0) {\n onYearChange(year - 1);\n onMonthChange(11);\n } else onMonthChange(month - 1);\n }\n\n function nextMonth() {\n if (month === 11) {\n onYearChange(year + 1);\n onMonthChange(0);\n } else onMonthChange(month + 1);\n }\n\n // Disable \"prev\" when going back would reach a month entirely in the past\n const prevYear = month === 0 ? year - 1 : year;\n const prevMon = month === 0 ? 11 : month - 1;\n const isPrevDisabled =\n disablePast &&\n (prevYear < today.getFullYear() ||\n (prevYear === today.getFullYear() && prevMon < today.getMonth()));\n\n return (\n <div className='px-5 pt-3 pb-4'>\n {/* ── Navigation header ─────────────────────────────────────── */}\n <div className='mb-4 flex items-center justify-between'>\n <button\n type='button'\n onClick={prevMonth}\n disabled={isPrevDisabled}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isPrevDisabled\n ? 'text-muted-foreground opacity-30 cursor-not-allowed'\n : 'text-foreground hover:bg-accent active:bg-accent cursor-pointer',\n )}\n >\n <Icon name='chevron-left' className='size-4' />\n </button>\n\n <div className='flex items-center gap-1.5'>\n {/* Year select */}\n <div className='relative'>\n <select\n value={year}\n onChange={(e) => onYearChange(Number(e.target.value))}\n className='h-8 appearance-none rounded-lg border border-border bg-background pl-3 pr-6 text-sm font-medium text-foreground transition-colors hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n {years.map((y) => (\n <option key={y} value={y}>\n {config.formatYear(y)}\n </option>\n ))}\n </select>\n <Icon\n name='chevron-down'\n className='pointer-events-none absolute right-1.5 top-1/2 size-3 -translate-y-1/2 text-foreground'\n />\n </div>\n\n {/* Month select */}\n <div className='relative'>\n <select\n value={month}\n onChange={(e) => onMonthChange(Number(e.target.value))}\n className='h-8 appearance-none rounded-lg border border-border bg-background pl-3 pr-6 text-sm font-medium text-foreground transition-colors hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n {Array.from({ length: 12 }, (_, i) => (\n <option key={i} value={i}>\n {config.formatMonth(i)}\n </option>\n ))}\n </select>\n <Icon\n name='chevron-down'\n className='pointer-events-none absolute right-1.5 top-1/2 size-3 -translate-y-1/2 text-foreground'\n />\n </div>\n </div>\n\n <button\n type='button'\n onClick={nextMonth}\n className='flex size-8 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent active:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer'\n >\n <Icon name='chevron-right' className='size-4' />\n </button>\n </div>\n\n {/* ── Day-of-week headers ────────────────────────────────────── */}\n <div className='mb-1 grid grid-cols-7 gap-1'>\n {config.dayHeaders.map((d) => (\n <div\n key={d}\n className='flex h-10 items-center justify-center text-sm font-normal leading-xs text-muted-foreground'\n >\n {d}\n </div>\n ))}\n </div>\n\n {/* ── Date grid ─────────────────────────────────────────────── */}\n <div className='grid grid-cols-7 gap-1'>\n {cells.map(({ day, currentMonth, date }) => {\n const dateStart = startOfDay(date);\n const isSelected = selectedStart?.getTime() === dateStart.getTime();\n const isToday = todayStart.getTime() === dateStart.getTime();\n const isPast = dateStart < todayStart;\n const isDisabled = disablePast && isPast;\n\n return (\n <button\n key={date.toISOString()}\n type='button'\n disabled={isDisabled}\n onClick={() => onSelect(date)}\n className={cn(\n 'flex aspect-square w-full items-center justify-center rounded-lg text-sm leading-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isSelected\n ? 'bg-foreground font-normal text-background hover:bg-foreground active:bg-foreground'\n : isDisabled\n ? 'cursor-not-allowed text-foreground opacity-50'\n : !currentMonth\n ? 'cursor-pointer text-foreground opacity-50 hover:bg-accent active:bg-accent'\n : 'cursor-pointer text-foreground hover:bg-accent active:bg-accent',\n isToday && !isSelected && 'border border-border',\n )}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ─── DatePicker ───────────────────────────────────────────────────────────────\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n mode = 'date',\n disablePast = false,\n locale = 'en',\n placeholder,\n className,\n yearRange,\n showTodayLabel = false,\n disabled = false,\n}: DatePickerProps) {\n const today = React.useMemo(() => new Date(), []);\n const config = LOCALE_CONFIG[locale];\n\n const [open, setOpen] = React.useState(false);\n const [selected, setSelected] = React.useState<Date | undefined>(\n defaultValue,\n );\n\n // Support both controlled (value prop) and uncontrolled (internal state)\n const activeDate = value !== undefined ? value : selected;\n\n const [viewYear, setViewYear] = React.useState(() =>\n (activeDate ?? today).getFullYear(),\n );\n const [viewMonth, setViewMonth] = React.useState(() =>\n (activeDate ?? today).getMonth(),\n );\n\n // Snap calendar view to active date whenever the popup opens\n const activeDateRef = React.useRef(activeDate);\n activeDateRef.current = activeDate;\n const todayRef = React.useRef(today);\n todayRef.current = today;\n\n React.useEffect(() => {\n if (open) {\n const d = activeDateRef.current ?? todayRef.current;\n setViewYear(d.getFullYear());\n setViewMonth(d.getMonth());\n }\n\n // Intentionally only runs on open/close; reads current values via refs\n }, [open]);\n\n const effectiveYearRange = React.useMemo<[number, number]>(\n () => yearRange ?? [today.getFullYear() - 10, today.getFullYear() + 10],\n [yearRange, today],\n );\n\n function handleSelect(date: Date) {\n if (value === undefined) setSelected(date);\n onChange?.(date);\n setOpen(false);\n }\n\n // ── Trigger display ──────────────────────────────────────────────\n let triggerText: string;\n let showCalendarIcon: boolean;\n\n if (!activeDate) {\n triggerText = placeholder ?? config.defaultPlaceholder;\n showCalendarIcon = false;\n } else if (mode === 'offset') {\n triggerText = config.formatOffset(diffDays(activeDate, today));\n showCalendarIcon = true;\n } else if (showTodayLabel && diffDays(activeDate, today) === 0) {\n triggerText = config.formatOffset(0); // \"오늘\" / \"Today\" / \"今日\"\n showCalendarIcon = true;\n } else {\n triggerText = config.formatTriggerDate(activeDate);\n showCalendarIcon = true;\n }\n\n return (\n <div className={cn(className)}>\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={disabled ? undefined : setOpen}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n type='button'\n disabled={disabled}\n className={cn(\n 'flex h-9 w-full items-center justify-between rounded-xl border border-border bg-background px-4',\n 'text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled\n ? 'bg-muted opacity-60 cursor-not-allowed'\n : 'hover:bg-accent cursor-pointer',\n !activeDate && 'text-muted-foreground',\n )}\n >\n <span className='truncate text-left'>{triggerText}</span>\n {showCalendarIcon ? (\n <Icon\n name='calendar'\n className='size-4 shrink-0 text-foreground'\n />\n ) : (\n <Icon\n name='chevron-down'\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align='start'\n sideOffset={4}\n style={{ minWidth: 'var(--radix-popover-trigger-width)' }}\n className={cn(\n 'z-50 w-64 rounded-2xl border border-border bg-background',\n 'shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'duration-200 data-[state=closed]:duration-150',\n )}\n >\n <CalendarGrid\n year={viewYear}\n month={viewMonth}\n selected={activeDate}\n today={today}\n disablePast={disablePast}\n onSelect={handleSelect}\n onYearChange={setViewYear}\n onMonthChange={setViewMonth}\n locale={locale}\n yearRange={effectiveYearRange}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── FieldLabel ───────────────────────────────────────────────────────────────\n// text-sm font-medium — 필드 레이블 (foreground)\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"label\">) {\n return (\n <label\n className={cn(\n \"text-sm font-medium tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ─── FieldDescription ─────────────────────────────────────────────────────────\n// text-sm regular — 보조 설명 (muted-foreground)\n\nfunction FieldDescription({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"p\">) {\n return (\n <p\n className={cn(\n \"text-sm tracking-tight text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ─── Field ────────────────────────────────────────────────────────────────────\n// 세로 스택: label → [hint] → children(control) → [description]\n//\n// hint : 컨트롤 위에 표시되는 보조 텍스트 (선택)\n// description : 컨트롤 아래에 표시되는 헬퍼 텍스트 (선택)\n\nexport interface FieldProps {\n /** 필드 레이블 */\n label?: string;\n /** 컨트롤 위 보조 텍스트 */\n hint?: string;\n /** 컨트롤 아래 헬퍼 텍스트 */\n description?: string;\n /** label 의 htmlFor — input id 와 연결 */\n htmlFor?: string;\n /** 필수 항목 표시 * */\n required?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Field({\n label,\n hint,\n description,\n htmlFor,\n required,\n className,\n children,\n}: FieldProps) {\n return (\n <div className={cn(\"flex flex-col gap-3\", className)}>\n {label && (\n <FieldLabel htmlFor={htmlFor}>\n {label}\n {required && (\n <span className=\"ml-0.5 text-destructive\" aria-hidden>\n *\n </span>\n )}\n </FieldLabel>\n )}\n {hint && <FieldDescription>{hint}</FieldDescription>}\n {children}\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n );\n}\n\n// ─── FieldSection ─────────────────────────────────────────────────────────────\n// 섹션 헤딩 + 설명 + (선택) 구분선 + 하위 필드\n//\n// titleSize : \"base\"(16px) | \"sm\"(14px) — Figma 에서 두 크기 모두 사용됨\n\nexport interface FieldSectionProps {\n title: string;\n description?: string;\n /** 섹션 헤더 하단 구분선 표시 여부 */\n showDivider?: boolean;\n /** 헤딩 텍스트 크기: \"base\"=16px (기본), \"sm\"=14px */\n titleSize?: \"base\" | \"sm\";\n className?: string;\n children?: React.ReactNode;\n}\n\nfunction FieldSection({\n title,\n description,\n showDivider = false,\n titleSize = \"base\",\n className,\n children,\n}: FieldSectionProps) {\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {/* 헤딩 블록 */}\n <div className=\"flex flex-col\">\n <p\n className={cn(\n \"pb-3 font-medium tracking-tight text-foreground\",\n titleSize === \"base\" ? \"text-base\" : \"text-sm\"\n )}\n >\n {title}\n </p>\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n\n {/* 구분선 + 하위 필드 */}\n {children && (\n <>\n {showDivider && <FieldDivider />}\n <div className=\"flex flex-col gap-7\">{children}</div>\n </>\n )}\n </div>\n );\n}\n\n// ─── FieldRow ─────────────────────────────────────────────────────────────────\n// 가로 레이아웃: [레이블 + 설명] (flex-1) | [컨트롤] (shrink-0)\n// Figma \"Responsive Layout\" 패턴 — 폼 섹션에서 레이블을 왼쪽에 고정\n\nexport interface FieldRowProps {\n label: string;\n description?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction FieldRow({ label, description, className, children }: FieldRowProps) {\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n {/* 레이블 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <p className=\"text-sm font-medium tracking-tight text-foreground\">\n {label}\n </p>\n {description && <FieldDescription>{description}</FieldDescription>}\n </div>\n\n {/* 컨트롤 영역 */}\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ─── FieldDivider ─────────────────────────────────────────────────────────────\n// 섹션 간 구분선 — border-border 1px 가로선\n\nfunction FieldDivider({ className }: { className?: string }) {\n return (\n <div className={cn(\"flex h-5 items-center\", className)}>\n <div className=\"h-px w-full border-t border-border\" />\n </div>\n );\n}\n\nexport { Field, FieldSection, FieldRow, FieldDivider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu, Popover } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface NavDropdownItem {\n label: string;\n icon?: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface HeaderNavItem {\n label: string;\n href?: string;\n active?: boolean;\n onClick?: () => void;\n /** 하위 드롭다운 아이템이 있으면 클릭 시 드롭다운 오픈 */\n dropdownItems?: NavDropdownItem[];\n}\n\nexport interface UserMenuSectionItem {\n label: string;\n icon?: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"destructive\";\n}\n\nexport interface UserMenuSection {\n /** 섹션 헤더 레이블 (생략 시 레이블 없음) */\n label?: string;\n items: UserMenuSectionItem[];\n}\n\nexport interface NotificationItem {\n id: string;\n badge?: string;\n date?: string;\n title: string;\n description: string;\n highlighted?: boolean; // bg-secondary 강조\n}\n\nexport interface LanguageItem {\n code: string;\n label: string;\n /** 국기 이모지 */\n flag: string;\n}\n\nexport interface HeaderProps {\n logo?: React.ReactNode;\n brandName?: string;\n navItems?: HeaderNavItem[];\n upgradeLabel?: string;\n onUpgrade?: () => void;\n userEmail?: string;\n userMenuSections?: UserMenuSection[];\n notifications?: NotificationItem[];\n onViewAllNotifications?: () => void;\n hasNotification?: boolean;\n languages?: LanguageItem[];\n currentLanguage?: string;\n onLanguageChange?: (code: string) => void;\n className?: string;\n}\n\n\n// ─── Shared dropdown panel styles ─────────────────────────────────────────────\n// Figma: bg-popover, border, rounded-md, shadow-dropdown, max-h-416px\n\nconst PANEL_CLS =\n \"z-50 overflow-hidden rounded-md border border-border bg-popover shadow-dropdown\" +\n \" animate-in fade-in-0 zoom-in-95 duration-200\" +\n \" data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\";\n\n// ─── DropdownSectionLabel ─────────────────────────────────────────────────────\n// Figma: h-8, px-2, py-1.5, text-sm/Medium, popover-foreground\n\nfunction DropdownSectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-8 items-center px-2 py-1.5\">\n <span className=\"text-sm font-medium tracking-tight text-popover-foreground\">\n {children}\n </span>\n </div>\n );\n}\n\n// ─── DropdownMenuRow ──────────────────────────────────────────────────────────\n// Figma: px-2, py-1.5, rounded-sm, gap-2.5, text-sm/Regular\n\ninterface DropdownMenuRowProps {\n icon?: string;\n children: React.ReactNode;\n variant?: \"default\" | \"destructive\";\n href?: string;\n onSelect?: () => void;\n className?: string;\n}\n\nfunction DropdownMenuRow({\n icon,\n children,\n variant = \"default\",\n href,\n onSelect,\n className,\n}: DropdownMenuRowProps) {\n const itemClassName = cn(\n \"flex cursor-pointer select-none items-center gap-2.5 rounded-sm px-2 py-1.5 outline-none\",\n \"text-sm font-normal tracking-tight\",\n \"transition-colors focus:bg-accent data-[highlighted]:bg-accent\",\n variant === \"destructive\"\n ? \"text-destructive\"\n : \"text-popover-foreground\",\n className,\n );\n const content = (\n <>\n {icon && <Icon name={icon} className=\"size-4 text-foreground\" />}\n {children}\n </>\n );\n if (href) {\n return (\n <DropdownMenu.Item asChild onSelect={onSelect}>\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={itemClassName}>\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n return (\n <DropdownMenu.Item onSelect={onSelect} className={itemClassName}>\n {content}\n </DropdownMenu.Item>\n );\n}\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n// Figma node 4679-24453 + dropdown cases 4679-25199\n\nexport function Header({\n logo,\n brandName = \"\",\n navItems = [],\n upgradeLabel = \"\",\n onUpgrade,\n userEmail = \"\",\n userMenuSections = [],\n notifications = [],\n onViewAllNotifications,\n hasNotification = false,\n languages = [],\n currentLanguage = \"\",\n onLanguageChange,\n className,\n}: HeaderProps) {\n return (\n <header\n className={cn(\n \"flex w-full items-center justify-between px-6 py-4 shrink-0\",\n \"bg-background border-b border-border z-10\",\n className,\n )}\n >\n {/* ── Left: 로고 + 브랜드명 + 네비게이션 ───────────────────────────── */}\n <div className=\"flex items-center gap-4\">\n {(logo || brandName) && (\n <div className=\"flex items-center gap-2.5 shrink-0\">\n {logo}\n {brandName && (\n <span className=\"text-xl font-bold tracking-tight text-foreground whitespace-nowrap\">\n {brandName}\n </span>\n )}\n </div>\n )}\n\n <nav className=\"flex items-center gap-2\" aria-label=\"주요 메뉴\">\n {navItems.map((item) =>\n item.dropdownItems?.length ? (\n // 드롭다운이 있는 nav 아이템 (예: 스토어)\n <DropdownMenu.Root key={item.label}>\n <DropdownMenu.Trigger\n className={cn(\n \"flex h-9 items-center justify-center rounded-lg px-3 py-2 outline-none\",\n \"text-sm font-medium tracking-tight whitespace-nowrap transition-colors\",\n item.active\n ? \"bg-blue-50 text-blue-800\"\n : \"text-muted-foreground hover:bg-muted/60 hover:text-foreground\",\n // 드롭다운 열린 상태 — bg-accent\n \"data-[state=open]:bg-accent data-[state=open]:text-foreground\",\n )}\n >\n {item.label}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n className={cn(PANEL_CLS, \"w-50 py-1 px-1\")}\n style={{ maxHeight: \"416px\" }}\n >\n {/* 섹션 레이블 */}\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>{item.label}</DropdownSectionLabel>\n </DropdownMenu.Label>\n {item.dropdownItems.map((di) => (\n <DropdownMenuRow\n key={di.label}\n icon={di.icon}\n href={di.href}\n onSelect={di.onClick}\n >\n {di.label}\n </DropdownMenuRow>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n ) : (\n // 일반 nav 아이템\n <button\n key={item.label}\n type=\"button\"\n onClick={item.onClick}\n className={cn(\n \"flex h-9 items-center justify-center rounded-lg px-3 py-2\",\n \"text-sm font-medium tracking-tight whitespace-nowrap transition-colors\",\n item.active\n ? \"bg-blue-50 text-blue-800\"\n : \"text-muted-foreground hover:bg-muted/60 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* ── Right: CTA + 유저 + Bell + Globe ───────────────────────────────── */}\n <div className=\"flex items-center gap-2\">\n\n {/* CTA 버튼 */}\n <button\n type=\"button\"\n onClick={onUpgrade}\n className={cn(\n \"flex h-9 items-center gap-1.5 rounded-lg px-4 py-2 shrink-0\",\n \"bg-primary text-primary-foreground shadow-button\",\n \"text-sm font-medium tracking-tight whitespace-nowrap\",\n \"transition-opacity hover:opacity-90 active:opacity-80\",\n )}\n >\n <Icon name=\"circle-arrow-up\" className=\"size-4 text-primary-foreground\" />\n {upgradeLabel}\n </button>\n\n {/* ── 유저 드롭다운 ─────────────────────────────────────────────── */}\n <DropdownMenu.Root>\n <DropdownMenu.Trigger\n className={cn(\n \"flex h-9 items-center gap-1.5 rounded-lg border border-border bg-background\",\n \"pl-4 pr-3 py-2 shrink-0 outline-none\",\n \"text-sm font-normal tracking-tight text-foreground whitespace-nowrap\",\n \"transition-colors hover:bg-muted/60\",\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"user\" className=\"size-4 text-foreground\" />\n <span>{userEmail}</span>\n <Icon name=\"chevron-down\" className=\"size-4 text-foreground\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={4}\n className={cn(\n PANEL_CLS,\n )}\n style={{ minWidth: \"var(--radix-dropdown-menu-trigger-width)\", maxHeight: \"416px\" }}\n >\n {userMenuSections.map((section, si) => (\n <React.Fragment key={si}>\n {/* 섹션 간 구분선 */}\n {si > 0 && (\n <DropdownMenu.Separator className=\"my-1 h-px bg-border mx-1\" />\n )}\n <DropdownMenu.Group className=\"py-1 px-1\">\n {section.label && (\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>{section.label}</DropdownSectionLabel>\n </DropdownMenu.Label>\n )}\n {section.items.map((item) => (\n <DropdownMenuRow\n key={item.label}\n icon={item.icon}\n variant={item.variant}\n onSelect={item.onClick}\n >\n {item.label}\n </DropdownMenuRow>\n ))}\n </DropdownMenu.Group>\n </React.Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {/* ── Bell 알림 다이얼로그 (Popover) ───────────────────────────── */}\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"알림\"\n className={cn(\n \"relative flex size-9 items-center justify-center rounded-lg shrink-0 outline-none\",\n \"border border-border bg-background\",\n \"transition-colors hover:bg-muted/60\",\n // 열린 상태\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"bell\" className=\"size-4 text-foreground\" />\n {hasNotification && (\n <span\n aria-hidden\n className=\"absolute size-1.5 rounded-full bg-destructive\"\n style={{ right: \"5px\", top: \"5px\" }}\n />\n )}\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align=\"end\"\n sideOffset={4}\n className={cn(\n \"z-50 w-423 rounded-lg border border-border bg-background p-6\",\n \"shadow-dropdown\",\n \"animate-in fade-in-0 zoom-in-95 duration-200\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-150\",\n )}\n >\n {/* 헤더 */}\n <div className=\"mb-4 flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold tracking-tight text-foreground\">\n 서비스 업데이트\n </h3>\n <Popover.Close\n aria-label=\"닫기\"\n className=\"opacity-70 hover:opacity-100 transition-opacity\"\n >\n <Icon name=\"x\" className=\"size-4 text-foreground\" />\n </Popover.Close>\n </div>\n\n {/* 알림 목록 */}\n <div className=\"flex flex-col\">\n {notifications.map((n, i) => (\n <React.Fragment key={n.id}>\n {i > 0 && (\n <div className=\"flex h-6 items-center\">\n <hr className=\"w-full border-border\" />\n </div>\n )}\n <div\n className=\"flex flex-col gap-4 rounded-md p-3 cursor-pointer transition-colors hover:bg-secondary\"\n >\n {/* 배지 + 날짜 */}\n <div className=\"flex items-center justify-between\">\n {n.badge && (\n <span className=\"inline-flex h-5.5 items-center rounded-lg bg-amber-50 px-2.5 py-0.5 text-xs font-medium tracking-tight text-amber-700 whitespace-nowrap\">\n {n.badge}\n </span>\n )}\n {n.date && (\n <span className=\"text-sm font-normal tracking-tight text-muted-foreground\">\n {n.date}\n </span>\n )}\n </div>\n {/* 제목 + 설명 */}\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-base font-medium tracking-tight text-foreground whitespace-nowrap\">\n {n.title}\n </p>\n <p className=\"line-clamp-2 text-sm font-normal tracking-tight text-muted-foreground\">\n {n.description}\n </p>\n </div>\n </div>\n </React.Fragment>\n ))}\n </div>\n\n {/* 전체 내역 보기 버튼 */}\n <button\n type=\"button\"\n onClick={onViewAllNotifications}\n className={cn(\n \"mt-4 flex h-9 w-full items-center justify-center gap-1.5 rounded-lg\",\n \"border border-border bg-background\",\n \"text-sm font-medium tracking-tight text-foreground\",\n \"transition-colors hover:bg-muted/60\",\n )}\n >\n 전체 내역 보기\n <Icon name=\"chevron-right\" className=\"size-4 text-foreground\" />\n </button>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {/* ── Globe 언어 드롭다운 ───────────────────────────────────────── */}\n <DropdownMenu.Root>\n <DropdownMenu.Trigger\n aria-label=\"언어 선택\"\n className={cn(\n \"flex size-9 items-center justify-center rounded-lg shrink-0 outline-none\",\n \"border border-border bg-background\",\n \"transition-colors hover:bg-muted/60\",\n \"data-[state=open]:bg-accent\",\n )}\n >\n <Icon name=\"globe\" className=\"size-4 text-foreground\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={4}\n className={cn(PANEL_CLS, \"w-50 py-1 px-1\")}\n style={{ maxHeight: \"416px\" }}\n >\n <DropdownMenu.Label asChild>\n <DropdownSectionLabel>언어</DropdownSectionLabel>\n </DropdownMenu.Label>\n {languages.map((lang) => (\n <DropdownMenu.Item\n key={lang.code}\n onSelect={() => onLanguageChange?.(lang.code)}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-2.5 rounded-sm px-2 py-1.5 outline-none\",\n \"text-sm font-normal tracking-tight text-popover-foreground\",\n \"transition-colors focus:bg-accent data-[highlighted]:bg-accent\",\n lang.code === currentLanguage && \"bg-accent/50\",\n )}\n >\n {/* 국기 이모지 — 16×12px 컨테이너에 맞춤 */}\n <span\n className=\"flex size-4 shrink-0 items-center justify-center overflow-hidden text-sm leading-none\"\n aria-hidden\n >\n {lang.flag}\n </span>\n {lang.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n </header>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex w-full items-center rounded-md border border-input transition-[color,box-shadow] outline-none dark:bg-input/30\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"flex items-center gap-2 text-sm shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n },\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { FolderAmberIcon } from '@/components/icons/custom/folder-amber';\n\nexport interface KbCardMetadataItem {\n label: string;\n value: React.ReactNode;\n}\n\nexport interface KbCardProps {\n name: string;\n metadata?: KbCardMetadataItem[];\n icon?: React.ReactNode;\n /** 아이콘 우측 상단에 노출할 콘텐츠 (e.g. 스크랩 날짜). selectable 모드에서는 무시됨. */\n topRight?: React.ReactNode;\n selectable?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n /** 카드 클릭 핸들러. selectable(편집 모드)일 때는 동작하지 않음. */\n onClick?: () => void;\n className?: string;\n variant?: 'grid' | 'list';\n}\n\nexport function KbCard({\n name,\n metadata = [],\n icon,\n topRight,\n selectable = false,\n checked = false,\n onCheckedChange,\n onClick,\n className,\n variant = 'grid',\n}: KbCardProps) {\n const id = React.useId();\n const iconNode = icon ?? <FolderAmberIcon className='size-6' />;\n\n if (variant === 'list') {\n const listContent = (\n <>\n <div className='flex size-10 shrink-0 items-center justify-center rounded-xl bg-white shadow-[inset_0_0_0_0.5px_rgba(0,0,0,0.1),inset_0_2px_4px_rgba(0,0,0,0.1)]'>\n {iconNode}\n </div>\n <div className='flex flex-col gap-0.5 flex-1 min-w-0'>\n <p className='text-sm font-semibold leading-5 text-foreground line-clamp-1'>\n {name}\n </p>\n {metadata.length > 0 && (\n <p className='text-sm text-muted-foreground truncate'>\n {metadata.map((item) => item.value).join(' · ')}\n </p>\n )}\n </div>\n {selectable && (\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v) => onCheckedChange?.(!!v)}\n onClick={(e) => e.stopPropagation()}\n className='shrink-0'\n />\n )}\n </>\n );\n\n if (selectable) {\n return (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer items-center gap-3 rounded-2xl border border-border p-4',\n 'transition-[border-color,box-shadow] hover:shadow-md',\n 'has-[[data-state=checked]]:border-primary',\n className,\n )}\n >\n {listContent}\n </label>\n );\n }\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'flex items-center gap-3 rounded-2xl border border-border p-4',\n 'transition-shadow hover:shadow-md',\n onClick && 'cursor-pointer',\n className,\n )}\n >\n {listContent}\n </div>\n );\n }\n\n const cardBody = (\n <>\n <div className='flex flex-col justify-between'>\n <div className='flex items-center justify-between'>\n <div className='flex size-10 items-center justify-center rounded-xl bg-white shadow-[inset_0_0_0_0.5px_rgba(0,0,0,0.1),inset_0_2px_4px_rgba(0,0,0,0.1)]'>\n {iconNode}\n </div>\n {selectable ? (\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v) => onCheckedChange?.(!!v)}\n onClick={(e) => e.stopPropagation()}\n />\n ) : topRight ? (\n topRight\n ) : null}\n </div>\n <p className='text-sm font-semibold leading-5 text-foreground line-clamp-1 mt-2'>\n {name}\n </p>\n </div>\n {/* <div className='border-t border-border' /> */}\n {metadata.length > 0 && (\n <div className='flex flex-col gap-2'>\n {metadata.map((item) => (\n <div\n key={item.label}\n className='flex items-center justify-between gap-4'\n >\n <span className='text-sm text-muted-foreground'>\n {item.label}\n </span>\n <span className='text-sm text-foreground'>{item.value}</span>\n </div>\n ))}\n </div>\n )}\n </>\n );\n\n if (selectable) {\n return (\n <label\n htmlFor={id}\n className={cn(\n 'flex cursor-pointer flex-col gap-3 rounded-2xl border border-border p-4',\n 'transition-[border-color,box-shadow] hover:shadow-md',\n 'has-[[data-state=checked]]:border-primary',\n className,\n )}\n >\n {cardBody}\n </label>\n );\n }\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'flex flex-col justify-between rounded-2xl border border-border p-4 gap-3',\n 'transition-shadow hover:shadow-md',\n onClick && 'cursor-pointer',\n className,\n )}\n >\n {cardBody}\n </div>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderAmberIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFE386\" />\n <stop offset=\"1\" stopColor=\"#EAC448\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFE693\" />\n <stop offset=\"1\" stopColor=\"#FCC24D\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { MessageFooter } from '@/components/ui/message-footer';\n\n// ── Register common languages (tree-shaking) ──────────────────────────────────\nimport javascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript';\nimport typescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript';\nimport jsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';\nimport tsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx';\nimport python from 'react-syntax-highlighter/dist/esm/languages/prism/python';\nimport bash from 'react-syntax-highlighter/dist/esm/languages/prism/bash';\nimport json from 'react-syntax-highlighter/dist/esm/languages/prism/json';\nimport css from 'react-syntax-highlighter/dist/esm/languages/prism/css';\nimport markup from 'react-syntax-highlighter/dist/esm/languages/prism/markup';\nimport sql from 'react-syntax-highlighter/dist/esm/languages/prism/sql';\nimport go from 'react-syntax-highlighter/dist/esm/languages/prism/go';\nimport rust from 'react-syntax-highlighter/dist/esm/languages/prism/rust';\nimport java from 'react-syntax-highlighter/dist/esm/languages/prism/java';\nimport kotlin from 'react-syntax-highlighter/dist/esm/languages/prism/kotlin';\nimport swift from 'react-syntax-highlighter/dist/esm/languages/prism/swift';\nimport yaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml';\nimport markdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown';\nimport diff from 'react-syntax-highlighter/dist/esm/languages/prism/diff';\n\nSyntaxHighlighter.registerLanguage('javascript', javascript);\nSyntaxHighlighter.registerLanguage('js', javascript);\nSyntaxHighlighter.registerLanguage('typescript', typescript);\nSyntaxHighlighter.registerLanguage('ts', typescript);\nSyntaxHighlighter.registerLanguage('jsx', jsx);\nSyntaxHighlighter.registerLanguage('tsx', tsx);\nSyntaxHighlighter.registerLanguage('python', python);\nSyntaxHighlighter.registerLanguage('py', python);\nSyntaxHighlighter.registerLanguage('bash', bash);\nSyntaxHighlighter.registerLanguage('sh', bash);\nSyntaxHighlighter.registerLanguage('shell', bash);\nSyntaxHighlighter.registerLanguage('zsh', bash);\nSyntaxHighlighter.registerLanguage('json', json);\nSyntaxHighlighter.registerLanguage('css', css);\nSyntaxHighlighter.registerLanguage('html', markup);\nSyntaxHighlighter.registerLanguage('xml', markup);\nSyntaxHighlighter.registerLanguage('sql', sql);\nSyntaxHighlighter.registerLanguage('go', go);\nSyntaxHighlighter.registerLanguage('rust', rust);\nSyntaxHighlighter.registerLanguage('java', java);\nSyntaxHighlighter.registerLanguage('kotlin', kotlin);\nSyntaxHighlighter.registerLanguage('swift', swift);\nSyntaxHighlighter.registerLanguage('yaml', yaml);\nSyntaxHighlighter.registerLanguage('yml', yaml);\nSyntaxHighlighter.registerLanguage('markdown', markdown);\nSyntaxHighlighter.registerLanguage('md', markdown);\nSyntaxHighlighter.registerLanguage('diff', diff);\n\n// ── Syntax theme (GitHub Light inspired) ─────────────────────────────────────\nconst codeTheme: { [key: string]: React.CSSProperties } = {\n 'code[class*=\"language-\"]': { color: 'var(--syntax-default)', background: 'transparent' },\n 'pre[class*=\"language-\"]': { color: 'var(--syntax-default)', background: 'transparent', margin: 0, padding: 0 },\n comment: { color: 'var(--syntax-comment)', fontStyle: 'italic' },\n prolog: { color: 'var(--syntax-comment)' },\n doctype: { color: 'var(--syntax-comment)' },\n cdata: { color: 'var(--syntax-comment)' },\n punctuation: { color: 'var(--syntax-default)' },\n namespace: { color: 'var(--syntax-namespace)' },\n property: { color: 'var(--syntax-property)' },\n tag: { color: 'var(--syntax-tag)' },\n boolean: { color: 'var(--syntax-property)' },\n number: { color: 'var(--syntax-property)' },\n constant: { color: 'var(--syntax-property)' },\n symbol: { color: 'var(--syntax-property)' },\n deleted: { color: 'var(--syntax-deleted)' },\n selector: { color: 'var(--syntax-selector)' },\n 'attr-name': { color: 'var(--syntax-property)' },\n string: { color: 'var(--syntax-selector)' },\n char: { color: 'var(--syntax-selector)' },\n builtin: { color: 'var(--syntax-property)' },\n inserted: { color: 'var(--syntax-tag)' },\n operator: { color: 'var(--syntax-default)' },\n entity: { color: 'var(--syntax-namespace)' },\n url: { color: 'var(--syntax-selector)' },\n atrule: { color: 'var(--syntax-keyword)' },\n 'attr-value': { color: 'var(--syntax-selector)' },\n keyword: { color: 'var(--syntax-keyword)' },\n function: { color: 'var(--syntax-function)' },\n 'class-name': { color: 'var(--syntax-namespace)' },\n regex: { color: 'var(--syntax-selector)' },\n important: { color: 'var(--syntax-keyword)', fontWeight: 'bold' },\n variable: { color: 'var(--syntax-variable)' },\n bold: { fontWeight: 'bold' },\n italic: { fontStyle: 'italic' },\n};\n\n// ── Code block component ──────────────────────────────────────────────────────\n\nfunction CodeBlock({ lang, code }: { lang: string; code: string }) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n const displayLang = lang || 'text';\n\n return (\n <div className='relative group bg-secondary border border-border rounded-xl overflow-hidden'>\n {/* Lang label + copy button */}\n <div className='flex items-center justify-between px-3 py-2 border-b border-border'>\n <span\n className='text-xs leading-xs tracking-tight text-muted-foreground'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {displayLang}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className='flex items-center gap-1 px-2 py-1 rounded-md text-xs leading-xs tracking-tight text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer'\n aria-label='코드 복사'\n >\n {copied ? (\n <Icon name='check' className='size-3 text-foreground' />\n ) : (\n <Icon name='copy' className='size-3 text-muted-foreground' />\n )}\n {copied ? '복사됨' : '복사'}\n </button>\n </div>\n\n {/* Code content */}\n <div className='p-3 overflow-x-auto'>\n <SyntaxHighlighter\n language={displayLang}\n style={codeTheme}\n customStyle={{\n background: 'transparent',\n padding: 0,\n margin: 0,\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n }}\n codeTagProps={{\n style: {\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n },\n }}\n wrapLongLines={false}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n </div>\n );\n}\n\n// ── Inline parser: **bold**, *italic*, `code`, <br> ──────────────────────────\n\nfunction renderInline(text: string): React.ReactNode {\n // Normalise <br> → newline\n const normalized = text.replace(/<br\\s*\\/?>/gi, '\\n');\n\n const result: React.ReactNode[] = [];\n const regex = /\\*\\*(.+?)\\*\\*|\\*(.+?)\\*|`(.+?)`/g;\n let last = 0;\n let m: RegExpExecArray | null;\n let k = 0;\n\n const pushText = (raw: string) => {\n if (!raw) return;\n raw.split('\\n').forEach((line, i, arr) => {\n result.push(<React.Fragment key={k++}>{line}</React.Fragment>);\n if (i < arr.length - 1) result.push(<br key={k++} />);\n });\n };\n\n while ((m = regex.exec(normalized)) !== null) {\n pushText(normalized.slice(last, m.index));\n if (m[1] !== undefined) {\n result.push(\n <strong key={k++} className='font-semibold'>\n {m[1]}\n </strong>,\n );\n } else if (m[2] !== undefined) {\n result.push(\n <em key={k++} className='italic'>\n {m[2]}\n </em>,\n );\n } else if (m[3] !== undefined) {\n result.push(\n <code\n key={k++}\n className='text-sm bg-muted px-1 py-0.5 rounded'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {m[3]}\n </code>,\n );\n }\n last = regex.lastIndex;\n }\n pushText(normalized.slice(last));\n\n return result.length === 0 ? null : <>{result}</>;\n}\n\n// ── Block types ────────────────────────────────────────────────────────────────\n\ntype Block =\n | { type: 'heading'; level: 1 | 2 | 3; text: string }\n | { type: 'paragraph'; text: string }\n | { type: 'list'; ordered: boolean; items: string[] }\n | { type: 'table'; headers: string[]; rows: string[][] }\n | { type: 'codeblock'; lang: string; code: string }\n | { type: 'divider' };\n\n// ── Markdown → blocks parser ───────────────────────────────────────────────────\n\nfunction parseMarkdown(text: string): Block[] {\n const lines = text.split('\\n');\n const blocks: Block[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip blank lines\n if (!trimmed) {\n i++;\n continue;\n }\n\n // Code fence (``` or ~~~)\n if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) {\n const fence = trimmed.startsWith('```') ? '```' : '~~~';\n const langMatch = trimmed.match(/^[`~]{3}(\\w*)/);\n const lang = langMatch?.[1] ?? '';\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].trim().startsWith(fence)) {\n codeLines.push(lines[i]);\n i++;\n }\n i++; // skip closing fence\n blocks.push({ type: 'codeblock', lang, code: codeLines.join('\\n') });\n continue;\n }\n\n // Heading (#, ##, ###)\n const hm = trimmed.match(/^(#{1,3})\\s+(.+)$/);\n if (hm) {\n blocks.push({\n type: 'heading',\n level: Math.min(hm[1].length, 3) as 1 | 2 | 3,\n text: hm[2],\n });\n i++;\n continue;\n }\n\n // Horizontal rule (---+)\n if (/^-{3,}$/.test(trimmed)) {\n blocks.push({ type: 'divider' });\n i++;\n continue;\n }\n\n // Table (lines starting with |)\n if (trimmed.startsWith('|')) {\n const tableLines: string[] = [];\n while (i < lines.length && lines[i].trim().startsWith('|')) {\n tableLines.push(lines[i]);\n i++;\n }\n const splitRow = (row: string) =>\n row\n .split('|')\n .slice(1, -1)\n .map((c) => c.trim());\n const isSep = (row: string) => /^[\\s|:=-]+$/.test(row);\n\n if (tableLines.length >= 1) {\n const headers = splitRow(tableLines[0]);\n const dataStart =\n tableLines.length >= 2 && isSep(tableLines[1]) ? 2 : 1;\n const rows = tableLines.slice(dataStart).map(splitRow);\n if (headers.some(Boolean)) {\n blocks.push({ type: 'table', headers, rows });\n }\n }\n continue;\n }\n\n // Unordered list (-, *, +)\n if (/^[-*+] /.test(trimmed)) {\n const items: string[] = [];\n while (i < lines.length && /^[-*+] /.test(lines[i].trim())) {\n items.push(lines[i].trim().replace(/^[-*+] /, ''));\n i++;\n }\n blocks.push({ type: 'list', ordered: false, items });\n continue;\n }\n\n // Ordered list (1., 2., …)\n if (/^\\d+\\. /.test(trimmed)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\. /.test(lines[i].trim())) {\n items.push(lines[i].trim().replace(/^\\d+\\. /, ''));\n i++;\n }\n blocks.push({ type: 'list', ordered: true, items });\n continue;\n }\n\n // Plain paragraph\n blocks.push({ type: 'paragraph', text: trimmed });\n i++;\n }\n\n return blocks;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport function MarkdownMessage({\n content,\n isStreaming = false,\n footerMeta,\n className,\n}: {\n content: string;\n isStreaming?: boolean;\n /**\n * MessageFooter의 meta 슬롯에 들어갈 ReactNode.\n * streaming 중에는 렌더링되지 않습니다.\n */\n footerMeta?: React.ReactNode;\n className?: string;\n}) {\n const blocks = parseMarkdown(content);\n\n // ── Cursor element (streaming only) ─────────────────────────────────────────\n const cursor = isStreaming ? (\n <span\n className='inline-block w-0.5 bg-foreground ml-0.5 animate-pulse align-middle'\n style={{ height: '1em' }}\n />\n ) : null;\n\n return (\n <div\n className={cn('flex flex-col gap-2 w-full text-foreground', className)}\n >\n {blocks.map((block, idx) => {\n const blockKey = `${block.type}-${idx}`;\n const headingTop = idx > 0 ? 'mt-4' : '';\n const isLast = idx === blocks.length - 1;\n\n switch (block.type) {\n // ── Heading ────────────────────────────────────────────────────────\n case 'heading':\n if (block.level === 1)\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-xl font-bold leading-8 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n if (block.level === 2)\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-lg font-semibold leading-7 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n return (\n <p\n key={blockKey}\n className={cn(\n 'text-base font-semibold leading-6 tracking-tight',\n headingTop,\n )}\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n\n // ── Paragraph ──────────────────────────────────────────────────────\n case 'paragraph':\n return (\n <p\n key={blockKey}\n className='text-base font-normal leading-6 tracking-tight text-foreground/90'\n >\n {renderInline(block.text)}\n {isLast && cursor}\n </p>\n );\n\n // ── Code block ─────────────────────────────────────────────────────\n // 스트리밍 중에는 SyntaxHighlighter 대신 plain <pre>로 렌더링하여\n // 매 청크마다 하이라이터가 재실행되는 성능 문제를 방지.\n case 'codeblock':\n if (isStreaming) {\n return (\n <div\n key={blockKey}\n className='relative bg-secondary border border-border rounded-xl overflow-hidden'\n >\n <div className='flex items-center px-3 py-2 border-b border-border'>\n <span\n className='text-xs leading-xs tracking-tight text-muted-foreground'\n style={{ fontFamily: 'var(--font-mono)' }}\n >\n {block.lang || 'text'}\n </span>\n </div>\n <div className='p-3 overflow-x-auto'>\n <pre\n className='text-sm leading-5 text-foreground whitespace-pre-wrap'\n style={{\n fontFamily:\n \"var(--font-mono, ui-monospace, 'SFMono-Regular', Consolas, monospace)\",\n }}\n >\n {block.code}\n {isLast && cursor}\n </pre>\n </div>\n </div>\n );\n }\n return (\n <CodeBlock key={blockKey} lang={block.lang} code={block.code} />\n );\n\n // ── List ───────────────────────────────────────────────────────────\n case 'list':\n return (\n <ul\n key={blockKey}\n className={cn(\n 'flex flex-col gap-1 pl-5 text-base font-normal leading-6 tracking-tight text-foreground/90',\n block.ordered ? 'list-decimal' : 'list-disc',\n )}\n >\n {block.items.map((item, j) => (\n <li key={`item-${j}`}>\n {renderInline(item)}\n {isLast && j === block.items.length - 1 && cursor}\n </li>\n ))}\n </ul>\n );\n\n // ── Table ──────────────────────────────────────────────────────────\n case 'table':\n return (\n <div\n key={blockKey}\n className='flex flex-col w-full text-sm leading-5 tracking-tight overflow-x-auto'\n >\n <div className='flex items-center py-2 border-b border-border gap-4 font-semibold text-foreground'>\n {block.headers.map((h, j) => (\n <span key={`th-${j}`} className='flex-1 min-w-0 shrink-0'>\n {renderInline(h)}\n </span>\n ))}\n </div>\n {block.rows.map((row, j) => (\n <div\n key={`tr-${j}`}\n className='flex items-center py-2 border-b border-border gap-4 font-normal text-foreground/90'\n >\n {row.map((cell, k) => (\n <span key={`td-${k}`} className='flex-1 min-w-0'>\n {renderInline(cell)}\n </span>\n ))}\n </div>\n ))}\n </div>\n );\n\n // ── Divider ────────────────────────────────────────────────────────\n case 'divider':\n return (\n <div\n key={blockKey}\n className='flex h-12 items-center'\n >\n <div className='h-px w-full bg-border' />\n </div>\n );\n\n default:\n return null;\n }\n })}\n\n {/* content가 비어있거나 마지막 블록이 없을 때도 커서 표시 */}\n {isStreaming && blocks.length === 0 && cursor}\n\n {/* Footer: streaming 완료 후에만 표시 */}\n {!isStreaming && footerMeta !== undefined && (\n <MessageFooter content={content} meta={footerMeta} />\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip } from '@/components/ui/tooltip';\nimport { Icon } from '@/components/ui/icon';\n\n// ── Component ─────────────────────────────────────────────────────────────────\n// Figma node 4829:43262\n// Left: meta 슬롯 (임의 ReactNode — 예: ModelInfo)\n// Right: 32×32 copy button, hover → bg-accent, tooltip \"복사하기\"\n\nexport interface MessageFooterProps {\n /** 복사할 원본 텍스트 */\n content: string;\n /** 복사 버튼 왼쪽에 표시할 임의 콘텐츠 (예: src/app/components/model-info.tsx) */\n meta?: React.ReactNode;\n}\n\nexport function MessageFooter({ content, meta }: MessageFooterProps) {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 2000);\n } catch {\n // clipboard not available\n }\n };\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return (\n <div className='flex items-center gap-2 py-2 animate-in fade-in-0 slide-in-from-bottom-1 duration-300'>\n {/* ── Copy button ────────────────────────────────────────── */}\n <Tooltip content='복사하기'>\n <button\n type='button'\n onClick={handleCopy}\n className='group/copy flex items-center justify-center size-8 rounded-lg hover:bg-accent transition-colors cursor-pointer shrink-0'\n aria-label='복사하기'\n >\n <Icon\n name={copied ? 'check' : 'copy'}\n className='size-4 shrink-0 text-muted-foreground transition-colors group-hover/copy:text-foreground'\n />\n </button>\n </Tooltip>\n\n {/* ── Meta slot ──────────────────────────────────────────── */}\n {meta}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\n// ─── TooltipContent (internal) ────────────────────────────────────────────────\n// Figma node 5132-2568\n//\n// 구조 (Figma 기준):\n// [Bubble] bg-primary, px-2.5 py-1.5, rounded-md, max-w-50 (200px)\n// └ Text text-xs (12px), text-primary-foreground, tracking-tight\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(\n (\n {\n className,\n side = 'top',\n sideOffset = 4,\n children,\n ...props\n },\n ref,\n ) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-max max-w-[200px]',\n 'bg-primary rounded-md px-2.5 py-1.5',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n >\n <span className='block text-xs font-normal leading-snug tracking-tight text-primary-foreground whitespace-normal break-words'>\n {children}\n </span>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n ),\n);\nTooltipContent.displayName = 'TooltipContent';\n\n// ─── Tooltip ──────────────────────────────────────────────────────────────────\n\nexport interface TooltipProps\n extends\n Pick<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>,\n 'open' | 'defaultOpen' | 'onOpenChange' | 'delayDuration'\n >,\n Omit<React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>, 'children' | 'content'> {\n /** 툴팁 말풍선에 표시할 내용 */\n content: React.ReactNode;\n /** 호버 시 툴팁을 여는 트리거 요소 (asChild로 렌더링) */\n children: React.ReactNode;\n}\n\nfunction Tooltip({\n content,\n children,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration,\n ...contentProps\n}: TooltipProps) {\n if (!content) return children;\n return (\n <TooltipPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n delayDuration={delayDuration}\n >\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipContent {...contentProps}>{content}</TooltipContent>\n </TooltipPrimitive.Root>\n );\n}\n\n// ─── TooltipWithIcon ──────────────────────────────────────────────────────────────\n// \"size-5 아이콘 버튼 + 툴팁\" 패턴 캡슐화\n\nexport interface TooltipWithIconProps {\n content: string;\n /** 트리거 아이콘 이름 (Lucide). @default \"info\" */\n iconName?: string;\n className?: string;\n}\n\nfunction TooltipWithIcon({\n content,\n iconName = 'info',\n className,\n}: TooltipWithIconProps) {\n if (!content) return null;\n return (\n <Tooltip content={content}>\n <Icon\n name={iconName}\n className={cn('size-4 text-muted-foreground cursor-pointer', className)}\n />\n </Tooltip>\n );\n}\n\nexport { Tooltip, TooltipProvider, TooltipWithIcon };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { Button } from '@/components/ui/button';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ModalProps {\n id?: string;\n /**\n * 모달을 여는 트리거 — render prop 패턴.\n * open 함수를 인자로 받아 원하는 요소에 직접 연결.\n * ex) trigger={(open) => <Button onClick={open}>열기</Button>}\n */\n trigger?: (open: () => void) => React.ReactNode;\n /**\n * controlled 모드: 외부에서 열림 상태를 직접 제어.\n * onOpenChange와 함께 사용.\n */\n open?: boolean;\n /** controlled 모드에서 열림 상태 변경 콜백 */\n onOpenChange?: (open: boolean) => void;\n /**\n * footer 버튼 렌더 방식\n * confirm — 취소 + default(검정) 확인 버튼\n * danger — 취소 + destructive(빨강) 확인 버튼\n * dialog — footer 없음 (children으로 모든 콘텐츠 처리)\n */\n variant?: 'confirm' | 'danger' | 'dialog';\n /** 모달 제목 */\n title: string;\n /** 제목 아래 부제목 (선택) */\n description?: string;\n /** 우상단 X 닫기 버튼 표시 여부 */\n showCloseButton?: boolean;\n /** 모달 본문 */\n children?: React.ReactNode;\n /** 취소 버튼 레이블 (기본: \"취소\") */\n cancelLabel?: string;\n /** 확인 버튼 레이블 (기본: \"확인\") */\n confirmLabel?: string;\n /**\n * 확인 버튼 콜백.\n * Promise를 반환하면 resolve될 때까지 loading 상태를 내부에서 자동 처리하고\n * 완료 후 모달을 닫음.\n */\n onConfirm?: () => void | Promise<void>;\n /** 취소/닫기 시 콜백 (cancel 버튼, X 버튼, ESC, 오버레이 클릭) */\n onCancel?: () => void;\n /** 확인 버튼 비활성화 */\n confirmDisabled?: boolean;\n isLoading?: boolean;\n /** 오버레이 클릭 시 닫기 (기본: true) */\n closeOnOverlayClick?: boolean;\n /** 모달 패널에 추가할 className */\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Modal({\n id,\n trigger,\n open: openProp,\n onOpenChange,\n variant = 'confirm',\n title,\n description,\n showCloseButton = false,\n children,\n cancelLabel = '취소',\n confirmLabel = '확인',\n onConfirm,\n onCancel,\n confirmDisabled = false,\n closeOnOverlayClick = true,\n className,\n isLoading,\n}: ModalProps) {\n const isControlled = openProp !== undefined;\n const [openState, setOpenState] = React.useState(false);\n const open = isControlled ? openProp : openState;\n const [loading, setLoading] = React.useState(false);\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setOpenState(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const isLoadingCombined = loading || !!isLoading;\n\n // ref로 최신 loading 값을 ESC 핸들러에서 읽어 stale closure 방지\n const loadingRef = React.useRef(isLoadingCombined);\n loadingRef.current = isLoadingCombined;\n\n const handleClose = React.useCallback(() => {\n if (loadingRef.current) return;\n setOpen(false);\n onCancel?.();\n }, [onCancel, setOpen]);\n\n async function handleConfirm() {\n if (!onConfirm) {\n setOpen(false);\n return;\n }\n const result = onConfirm();\n if (result instanceof Promise) {\n setLoading(true);\n try {\n await result;\n setOpen(false);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n }\n\n // ESC 닫기 — 모달이 열린 경우에만 등록\n React.useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') handleClose();\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, handleClose]);\n\n function handleOverlayClick(e: React.MouseEvent) {\n if (closeOnOverlayClick && e.target === overlayRef.current) handleClose();\n }\n\n return (\n <>\n {/* ── Trigger ────────────────────────────────────────────────── */}\n {trigger?.(() => setOpen(true))}\n\n {/* ── Modal overlay ──────────────────────────────────────────── */}\n {open && (\n <div\n ref={overlayRef}\n onClick={handleOverlayClick}\n className='fixed inset-0 z-50 flex items-center justify-center animate-kb-overlay-in'\n style={{ backgroundColor: 'rgba(0,0,0,0.32)' }}\n >\n <div\n id={id}\n className={cn(\n 'bg-background border border-border rounded-2xl shadow-modal flex flex-col gap-4 p-6 w-423 animate-kb-modal-in',\n className,\n )}\n >\n {/* ── Header ─────────────────────────────────────────── */}\n <div\n className={cn(\n 'flex flex-col w-full',\n description ? 'gap-1' : 'gap-0',\n )}\n >\n <div className='flex items-start justify-between w-full'>\n <p className='flex-1 text-left text-lg font-semibold leading-7 tracking-tight text-foreground'>\n {title}\n </p>\n {showCloseButton && (\n <button\n type='button'\n onClick={handleClose}\n className='flex size-5 items-center justify-center ml-2 shrink-0 opacity-70 hover:opacity-100 transition-opacity cursor-pointer'\n >\n <Icon name='x' className='size-4 text-foreground' />\n </button>\n )}\n </div>\n {description && (\n <p className='text-sm font-normal leading-5 tracking-tight text-muted-foreground'>\n {description}\n </p>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────── */}\n {children && <div className='w-full text-left'>{children}</div>}\n\n {/* ── Footer ─────────────────────────────────────────── */}\n {variant !== 'dialog' && (\n <div className='flex gap-2 items-center justify-end w-full'>\n <Button\n variant='outline'\n onClick={handleClose}\n disabled={isLoadingCombined}\n >\n {cancelLabel}\n </Button>\n <Button\n variant={variant === 'danger' ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={confirmDisabled}\n loading={isLoadingCombined}\n >\n {confirmLabel}\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport { Modal };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menubar as MenubarPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Root ──────────────────────────────────────────────────────────────────────\n// Figma: bg-background border border-border rounded-[radius-md] shadow-xs p-1 gap-1\n\nconst Menubar = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn(\n \"flex items-center gap-1 p-1\",\n \"bg-background border border-border rounded-md\",\n className,\n )}\n {...props}\n />\n));\nMenubar.displayName = MenubarPrimitive.Root.displayName;\n\n// ─── Menu ──────────────────────────────────────────────────────────────────────\n\nconst MenubarMenu = MenubarPrimitive.Menu;\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n// Figma: px-2 py-1 rounded-[radius-sm] Text-sm/Medium text-foreground\n// Active (data-state=open): bg-accent text-accent-foreground\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex items-center justify-center cursor-pointer select-none outline-none\",\n \"px-2 py-1 rounded-sm\",\n \"text-sm font-medium leading-5 tracking-tight text-foreground\",\n \"transition-colors hover:bg-accent hover:text-accent-foreground\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n className,\n )}\n {...props}\n />\n));\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n// Figma: bg-popover border border-border rounded-[radius-md] shadow-md w-[192px]\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(({ className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-48 overflow-hidden\",\n \"bg-popover border border-border rounded-md\",\n \"shadow-dropdown\",\n // Entry / exit animations\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"duration-200 data-[state=closed]:duration-150\",\n className,\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n));\nMenubarContent.displayName = MenubarPrimitive.Content.displayName;\n\n// ─── Group ────────────────────────────────────────────────────────────────────\n\nconst MenubarGroup = MenubarPrimitive.Group;\n\n// ─── Item ─────────────────────────────────────────────────────────────────────\n// Figma: h-8 px-2 py-1.5 gap-2 rounded-[radius-sm] flex items-center\n// text-sm/Regular text-popover-foreground\n// disabled: opacity-50 cursor-not-allowed\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex h-8 cursor-pointer select-none items-center gap-2\",\n \"px-2 py-1.5 rounded-sm\",\n \"text-sm font-normal leading-5 tracking-tight text-popover-foreground\",\n \"outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nMenubarItem.displayName = MenubarPrimitive.Item.displayName;\n\n// ─── Sub ──────────────────────────────────────────────────────────────────────\n\nconst MenubarSub = MenubarPrimitive.Sub;\n\n// ─── SubTrigger ───────────────────────────────────────────────────────────────\n// Figma: same as item but with ChevronRight icon on the right\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenubarPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex h-8 cursor-pointer select-none items-center gap-2\",\n \"px-2 py-1.5 rounded-sm\",\n \"text-sm font-normal leading-5 tracking-tight text-popover-foreground\",\n \"outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n <span className=\"flex-1 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap\">\n {children}\n </span>\n <Icon name=\"chevron-right\" className=\"size-4 text-foreground\" />\n </MenubarPrimitive.SubTrigger>\n));\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;\n\n// ─── SubContent ───────────────────────────────────────────────────────────────\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-48 overflow-hidden\",\n \"bg-popover border border-border rounded-md\",\n \"shadow-dropdown\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"duration-200 data-[state=closed]:duration-150\",\n className,\n )}\n {...props}\n />\n));\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;\n\n// ─── Shortcut ─────────────────────────────────────────────────────────────────\n// Figma: Text-xs/Regular text-muted-foreground ml-auto\n\nconst MenubarShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\n \"ml-auto text-xs font-normal leading-4 tracking-tight\",\n \"text-muted-foreground shrink-0\",\n className,\n )}\n {...props}\n />\n);\nMenubarShortcut.displayName = \"MenubarShortcut\";\n\n// ─── Separator ────────────────────────────────────────────────────────────────\n// Figma: Divider — h-2 containing a horizontal rule\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator\n ref={ref}\n className={cn(\"my-1 h-px bg-border mx-1\", className)}\n {...props}\n />\n));\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n MenubarShortcut,\n MenubarSeparator,\n};\n","import { cn } from '@/lib/utils';\nimport { BADGE_VARIANT_STYLES, type BadgeVariant } from '@/components/ui/badge';\n\n// ─── Style constants ──────────────────────────────────────────────────────────\n// Derived from RYAI Design System - Badge component (node 73:3479)\n// rounded-full · font-mono · text-xs\n// size-5 (20×20) ← count < 10 (한 자리: 원형)\n// h-5 min-w-5 px-2 ← count ≥ 10, filled variants (두 자리 이상: pill)\nconst NUMBER_BADGE_BASE =\n 'inline-flex shrink-0 items-center justify-center rounded-full font-mono text-xs font-medium leading-xs whitespace-nowrap';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface NumberBadgeProps {\n /** 표시할 숫자 */\n count: number;\n /** 배지 시맨틱 변형 (기본값: default) */\n variant?: BadgeVariant;\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction NumberBadge({\n count,\n variant = 'default',\n className,\n}: NumberBadgeProps) {\n // 한 자리(0-9): 원형 size-5\n // 두 자리 이상: 가로 가변 pill\n const sizeClass = count < 10 ? 'size-5' : 'h-5 min-w-5 px-2';\n\n return (\n <span\n data-slot='number-badge'\n className={cn(\n NUMBER_BADGE_BASE,\n sizeClass,\n 'tracking-tight',\n BADGE_VARIANT_STYLES[variant],\n className,\n )}\n >\n {count}\n </span>\n );\n}\n\nexport { NumberBadge };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ProgressThreshold {\n /** Value (0–100) at which this color activates */\n at: number;\n /** CSS color value, e.g. 'var(--color-amber-500)' or '#ef4444' */\n color: string;\n}\n\nexport interface ProgressProps {\n /** Current progress value (0–100) */\n value: number;\n /** Activates when value >= at */\n warning?: ProgressThreshold;\n /** Activates when value >= at (takes precedence over warning) */\n danger?: ProgressThreshold;\n /** Tooltip text shown on hover */\n tooltip?: string;\n className?: string;\n}\n\n// ─── Progress ────────────────────────────────────────────────────────────────\n\nexport function Progress({\n value,\n warning,\n danger,\n tooltip,\n className,\n}: ProgressProps) {\n const clamped = Math.min(100, Math.max(0, value));\n\n const barColor =\n danger && clamped >= danger.at\n ? danger.color\n : warning && clamped >= warning.at\n ? warning.color\n : undefined;\n\n const track = (\n <div\n className={cn(\n 'relative w-full h-1.5 rounded-full bg-muted overflow-hidden',\n className,\n )}\n >\n <div\n className={cn(\n 'h-full transition-all duration-300',\n !barColor && 'bg-primary',\n )}\n style={{\n width: `${clamped}%`,\n ...(barColor ? { backgroundColor: barColor } : {}),\n }}\n />\n </div>\n );\n\n if (!tooltip) return track;\n\n return <Tooltip content={tooltip}>{track}</Tooltip>;\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface Item<T extends string> {\n key: T;\n label: string;\n}\n\ninterface SegmentedControlProps<T extends string> {\n value: T;\n onChange: (value: T) => void;\n items: readonly Item<T>[];\n}\n\nexport function SegmentedControl<T extends string>({\n value,\n onChange,\n items,\n}: SegmentedControlProps<T>) {\n return (\n <div className=\"flex items-start w-full rounded-md\">\n {items.map(({ key, label }, idx) => {\n const isActive = value === key;\n const isFirst = idx === 0;\n const isLast = idx === items.length - 1;\n return (\n <button\n key={key}\n type=\"button\"\n onClick={() => onChange(key)}\n className={cn(\n \"flex flex-1 h-9 items-center justify-center px-2 cursor-pointer transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset\",\n \"text-sm leading-5 tracking-tight text-foreground\",\n isActive ? \"font-medium bg-background\" : \"font-normal bg-accent\",\n isFirst\n ? \"border-l border-t border-b border-border rounded-tl-md rounded-bl-md\"\n : isLast\n ? \"border-t border-b border-r border-border rounded-tr-md rounded-br-md\"\n : \"border border-border\",\n )}\n >\n {label}\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\nexport interface SearchInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'type'> {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nexport function SearchInput({\n value,\n onChange,\n placeholder,\n className,\n ...props\n}: SearchInputProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <Icon\n name='search'\n className='pointer-events-none absolute left-3 size-4 text-muted-foreground'\n />\n <input\n type='text'\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className={cn(\n 'h-9 w-full rounded-lg border border-border bg-background pl-9 pr-3',\n 'text-sm text-foreground placeholder:text-muted-foreground',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring',\n )}\n {...props}\n />\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SelectOption {\n value: string;\n label: string;\n /** Optional icon rendered before the label */\n icon?: React.ReactNode;\n}\n\nexport interface SelectGroup {\n /** Category label shown above items */\n label?: string;\n /** Icon rendered before the group label */\n icon?: React.ReactNode;\n options: SelectOption[];\n}\n\ninterface SelectBase {\n /** Flat list of options (shorthand for a single unnamed group) */\n options?: SelectOption[];\n /** Grouped options with optional labels and icons */\n groups?: SelectGroup[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\ninterface SingleSelectProps extends SelectBase {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\ninterface MultiSelectProps extends SelectBase {\n multiple: true;\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultiSelectProps;\n\n// ─── Select ──────────────────────────────────────────────────────────────────\n\nexport function Select(props: SelectProps) {\n const { placeholder = '선택해 주세요', className, disabled = false } = props;\n\n const [open, setOpen] = React.useState(false);\n const [selected, setSelected] = React.useState<Set<string>>(() => {\n if (props.multiple) return new Set(props.defaultValue ?? []);\n const dv = props.defaultValue;\n return dv ? new Set([dv]) : new Set();\n });\n\n const optionsProp = props.options;\n const groupsProp = props.groups;\n const valueProp = props.value;\n const { multiple } = props;\n\n const groups = React.useMemo((): SelectGroup[] => {\n if (groupsProp) return groupsProp;\n if (optionsProp) return [{ options: optionsProp }];\n return [];\n }, [groupsProp, optionsProp]);\n\n const options = React.useMemo(() => groups.flatMap((g) => g.options), [groups]);\n\n const activeSet = React.useMemo((): Set<string> => {\n if (valueProp !== undefined) {\n return multiple\n ? new Set(valueProp as string[])\n : new Set([valueProp as string]);\n }\n return selected;\n }, [multiple, valueProp, selected]);\n\n // Find first selected option for trigger icons\n const firstSelected = options.find((o) => activeSet.has(o.value));\n const firstSelectedGroup = firstSelected\n ? groups.find((g) => g.options.some((o) => o.value === firstSelected.value))\n : null;\n // Group icon → leading (before label), Option icon → trailing (after label, single only)\n const triggerGroupIcon = firstSelectedGroup?.icon ?? null;\n const triggerOptionIcon = !multiple ? (firstSelected?.icon ?? null) : null;\n\n // Trigger label\n const selectedOptions = options.filter((o) => activeSet.has(o.value));\n let triggerLabel: string;\n if (selectedOptions.length === 0) {\n triggerLabel = '';\n } else if (!multiple) {\n triggerLabel = selectedOptions[0]?.label ?? '';\n } else if (selectedOptions.length <= 2) {\n triggerLabel = selectedOptions.map((o) => o.label).join(', ');\n } else {\n triggerLabel = `${selectedOptions.length}개 선택됨`;\n }\n\n function handleSelect(optionValue: string) {\n if (props.multiple) {\n const next = new Set(activeSet);\n if (next.has(optionValue)) next.delete(optionValue);\n else next.add(optionValue);\n if (props.value === undefined) setSelected(next);\n props.onValueChange?.([...next]);\n } else {\n if (props.value === undefined) setSelected(new Set([optionValue]));\n props.onValueChange?.(optionValue);\n setOpen(false);\n }\n }\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={disabled ? undefined : setOpen}>\n {/* ── Trigger ──────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'flex h-9 w-full items-center justify-between rounded-lg border border-border px-3 py-2',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n disabled\n ? 'bg-muted cursor-not-allowed opacity-60'\n : 'bg-background cursor-pointer hover:bg-accent',\n className,\n )}\n >\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n {triggerGroupIcon && (\n <span className=\"shrink-0 flex items-center\">{triggerGroupIcon}</span>\n )}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'min-w-0 truncate text-left text-sm leading-5 tracking-tight',\n triggerLabel ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {triggerLabel || placeholder}\n </span>\n {triggerOptionIcon && (\n <span className=\"shrink-0 flex items-center\">{triggerOptionIcon}</span>\n )}\n </span>\n </span>\n <Icon\n name=\"chevron-down\"\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n {/* ── Dropdown ─────────────────────────────────────────────────────── */}\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: 'var(--radix-popover-trigger-width)' }}\n className={cn(\n 'z-50 rounded-lg border border-border bg-popover overflow-hidden',\n 'shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'duration-200 data-[state=closed]:duration-150',\n )}\n >\n <div\n className=\"p-1 flex flex-col max-h-96 overflow-y-auto [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300\"\n >\n {groups.map((group, gi) => (\n <div key={gi}>\n {(group.label || group.icon) && (\n <div className=\"flex items-center gap-1.5 px-2 py-1.5\">\n {group.icon && (\n <span className=\"shrink-0 flex items-center\">{group.icon}</span>\n )}\n {group.label && (\n <span className=\"text-xs leading-xs tracking-tight font-normal text-muted-foreground\">\n {group.label}\n </span>\n )}\n </div>\n )}\n {group.options.map((opt) => {\n const isSelected = activeSet.has(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => handleSelect(opt.value)}\n className={cn(\n 'flex w-full items-center justify-between rounded-sm px-2 py-1.5',\n 'text-sm font-normal leading-5 tracking-tight',\n 'cursor-pointer transition-colors',\n isSelected\n ? 'bg-accent text-accent-foreground'\n : 'text-popover-foreground hover:bg-accent hover:text-accent-foreground',\n )}\n >\n <span className=\"flex flex-1 min-w-0 items-center gap-1.5\">\n <span className=\"min-w-0 truncate text-left\">{opt.label}</span>\n {opt.icon && (\n <span className=\"shrink-0 flex items-center\">{opt.icon}</span>\n )}\n </span>\n {isSelected && (\n <Icon name=\"check\" className=\"size-4 shrink-0 ml-2\" />\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Icon } from \"@/components/ui/icon\";\n\ninterface SheetProps {\n open: boolean;\n onClose: () => void;\n title: string;\n description?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function Sheet({ open, onClose, title, description, children, footer }: SheetProps) {\n // Close on Escape key\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [open, onClose]);\n\n return (\n <div\n className={[\n \"fixed top-0 right-0 z-50 flex flex-col h-full w-96\",\n \"bg-background border-l border-border\",\n \"shadow-sheet\",\n \"transition-transform duration-300\",\n open ? \"translate-x-0\" : \"translate-x-full\",\n ].join(\" \")}\n style={{ transitionTimingFunction: \"cubic-bezier(0.32, 0.72, 0, 1)\" }}\n >\n {/* ── Header ───────────────────────────────────────────── */}\n <div className=\"flex flex-col gap-1.5 p-4 shrink-0\">\n <div className=\"flex items-center justify-between\">\n <p className=\"flex-1 min-w-0 text-base font-semibold leading-6 tracking-tight text-foreground\">\n {title}\n </p>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex items-center justify-center shrink-0 size-4 cursor-pointer hover:opacity-70 transition-opacity\"\n >\n <Icon name=\"x\" className=\"size-4 text-foreground\" />\n </button>\n </div>\n {description && (\n <p className=\"text-sm font-normal leading-5 tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* ── Content ──────────────────────────────────────────── */}\n <div className=\"flex flex-1 flex-col gap-4 min-h-0 overflow-y-auto px-4\">\n {children}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────── */}\n {footer && (\n <div className=\"flex flex-col gap-2 items-end p-4 shrink-0\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowUpRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\nimport { PanelLeftIcon } from '@/components/icons/custom/panel-left';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * 링크 컴포넌트 타입. next/link의 Link, react-router의 Link 등을 그대로 전달할 수 있습니다.\n * 미지정 시 기본 <a> 태그로 렌더링됩니다.\n */\ntype SidebarLinkComponent = React.ComponentType<{\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n}>;\n\nexport type SidebarSubMenuItem = {\n id: string;\n title: string;\n href: string;\n icon: React.ReactNode;\n isActive?: boolean;\n titleBadge?: string | number;\n onClick?: () => void;\n isExternal?: boolean;\n};\n\nexport type SidebarMainMenuItem =\n | {\n type?: 'item';\n id: string;\n title: string;\n href: string;\n icon: React.ReactNode;\n isActive?: boolean;\n onClick?: () => void;\n onHover?: (e: React.MouseEvent<HTMLElement>) => void;\n subMenus?: SidebarSubMenuItem[];\n }\n | { type: 'divider' };\n\nexport type SidebarUtilityItem = {\n id: string;\n /**\n * popover가 지정된 경우 icon·label·href·onClick은 무시됩니다.\n * Sidebar는 단순 렌더링만 수행합니다.\n */\n popover?: React.ReactNode;\n icon?: React.ReactNode;\n label?: string;\n href?: string;\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n onHover?: (e: React.MouseEvent<HTMLElement>) => void;\n notiBadge?: boolean | number;\n};\n\n// ─── Link Context ─────────────────────────────────────────────────────────────\ntype SidebarLinkRender = (props: {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n}) => React.ReactElement;\n\nconst defaultSidebarLinkRender: SidebarLinkRender = ({\n href,\n className,\n style,\n onClick,\n children,\n}) => (\n <a href={href} className={cn(className)} style={style} onClick={onClick}>\n {children}\n </a>\n);\n\nconst SidebarLinkContext = React.createContext<SidebarLinkRender>(\n defaultSidebarLinkRender,\n);\n\nfunction SidebarLinkProvider({\n LinkComponent,\n children,\n}: {\n LinkComponent: SidebarLinkComponent;\n children: React.ReactNode;\n}) {\n const linkRef = React.useRef(LinkComponent);\n // React 19는 렌더 중 ref 쓰기를 금지하므로 useLayoutEffect 사용\n React.useLayoutEffect(() => {\n linkRef.current = LinkComponent;\n });\n function sidebarLinkRender(props: Parameters<SidebarLinkRender>[0]) {\n if (!linkRef.current) return defaultSidebarLinkRender(props);\n return React.createElement(linkRef.current, props);\n }\n const [stableRender] = React.useState<SidebarLinkRender>(\n () => sidebarLinkRender,\n );\n\n return (\n <SidebarLinkContext.Provider value={stableRender}>\n {children}\n </SidebarLinkContext.Provider>\n );\n}\n\nexport function SidebarLink({\n href,\n className,\n style,\n onClick,\n children,\n}: {\n href: string;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n children: React.ReactNode;\n}) {\n const renderLink = React.useContext(SidebarLinkContext);\n return renderLink({ href, className, style, onClick, children });\n}\n\nexport function Sidebar({\n logo,\n menus,\n avatar,\n utilities,\n panelTopContent,\n panelCenterContent,\n panelBottomContent,\n className,\n LinkComponent,\n}: {\n logo: React.ReactNode;\n menus: SidebarMainMenuItem[];\n avatar: React.ReactNode;\n utilities?: SidebarUtilityItem[];\n panelTopContent?: React.ReactNode;\n panelCenterContent?: React.ReactNode;\n panelBottomContent?: React.ReactNode;\n className?: string;\n LinkComponent: SidebarLinkComponent;\n}) {\n const [isPanelOpen, setIsPanelOpen] = React.useState(true);\n\n // 활성 메뉴 및 서브메뉴 파생\n type SidebarMenuItem = Extract<SidebarMainMenuItem, { type?: 'item' }>;\n const activeMenu = React.useMemo(\n () =>\n (menus.filter((m): m is SidebarMenuItem => m.type !== 'divider').find((m) => m.isActive)) ?? null,\n [menus],\n );\n const subMenus = activeMenu?.subMenus ?? [];\n\n return (\n <SidebarLinkProvider LinkComponent={LinkComponent}>\n <aside\n className={cn(\n 'flex h-full bg-background shrink-0 transition-[width]',\n isPanelOpen && subMenus.length > 0 ? 'w-70' : 'w-17',\n className,\n )}\n >\n {/* ── 메인 메뉴 ─────────────────────────────────────────────────── */}\n <div\n className='flex flex-col h-full shrink-0'\n style={{ width: '68px' }}\n >\n {/* 브랜드 로고 */}\n <div className='flex items-center justify-center py-4 shrink-0 w-full'>\n {logo}\n </div>\n\n {/* 메인 메뉴 목록(서비스 내비게이터) */}\n <div className='flex flex-col flex-1 items-center min-h-0 min-w-0 pb-4 pt-3 px-2 w-full'>\n {menus.length > 0 && (\n <nav\n className='flex flex-col gap-4 items-center w-10'\n aria-label='메인 메뉴'\n >\n {menus.map((item, index) => {\n if (item.type === 'divider') {\n return (\n <hr\n key={`divider-${index}`}\n className='w-6 border-t border-border'\n />\n );\n }\n return (\n <div\n key={item.id}\n className='flex flex-col items-center'\n onMouseEnter={(e) => item.onHover?.(e)}\n >\n <SidebarLink\n href={item.href}\n onClick={() => {\n const hasSubMenus =\n item.subMenus && item.subMenus.length > 0;\n if (hasSubMenus && !isPanelOpen) setIsPanelOpen(true);\n item.onClick?.();\n }}\n className='flex flex-col items-center cursor-pointer'\n style={{ gap: '4px' }}\n >\n <div\n className={cn(\n 'relative flex items-center justify-center rounded-md size-8 transition-colors',\n item.isActive\n ? 'bg-accent'\n : 'hover:bg-sidebar-accent',\n )}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {item.icon}\n </span>\n </div>\n <span className='text-2xs leading-xs text-foreground text-center tracking-tight whitespace-nowrap'>\n {item.title}\n </span>\n </SidebarLink>\n </div>\n );\n })}\n </nav>\n )}\n </div>\n\n {/* 유틸리티 */}\n <div className='flex flex-col flex-1 items-center justify-end min-h-0 min-w-0 px-4 py-3 gap-3 w-full'>\n {utilities?.map((util) => {\n if (util.popover) {\n return (\n <React.Fragment key={util.id}>{util.popover}</React.Fragment>\n );\n }\n return util.href ? (\n <Tooltip\n key={util.id ?? util.label}\n content={util.label}\n side='right'\n >\n <a\n href={util.href}\n target='_blank'\n rel='noopener noreferrer'\n className='relative flex items-center justify-center rounded-md size-8 text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n aria-label={util.label}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {util.icon}\n </span>\n </a>\n </Tooltip>\n ) : (\n <Tooltip\n key={util.id ?? util.label}\n content={util.label}\n side='right'\n >\n <button\n type='button'\n onClick={(e) => util.onClick?.(e)}\n onMouseEnter={(e) => util.onHover?.(e)}\n className='relative flex items-center justify-center rounded-md size-8 text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n aria-label={util.label}\n >\n <span className='flex items-center justify-center size-5 shrink-0 [&_svg]:size-full'>\n {util.icon}\n </span>\n </button>\n </Tooltip>\n );\n })}\n </div>\n\n <div className='flex items-center justify-center pt-3 pb-5 shrink-0 w-full'>\n {avatar}\n </div>\n </div>\n\n {/* ── 서브 메뉴 ─────────────────────────────────────────────────── */}\n <div\n className={cn(\n 'flex flex-col flex-1 h-full min-h-0 min-w-0',\n (!isPanelOpen || !subMenus.length) && 'hidden',\n )}\n >\n {/* 서브 메뉴 헤더 */}\n <div className='flex flex-col shrink-0 w-full'>\n <div className='flex flex-col items-start justify-center p-2'>\n <div\n className='flex items-center justify-between pl-2 pr-0.5 py-2 w-full'\n style={{ height: '36px' }}\n >\n <div className='flex items-center gap-1.5 min-w-0'>\n <span className='text-sm font-semibold leading-5 text-foreground tracking-tight truncate'>\n {activeMenu?.title || '-'}\n </span>\n </div>\n <button\n type='button'\n aria-label='패널 닫기'\n onClick={() => setIsPanelOpen(false)}\n className='flex items-center justify-center p-2 rounded-lg text-sidebar-foreground hover:bg-sidebar-accent transition-colors cursor-pointer'\n >\n <PanelLeftIcon className='size-4' />\n </button>\n </div>\n </div>\n </div>\n\n {/* 서브 메뉴 목록*/}\n <div className='flex flex-col flex-1 min-h-0'>\n <div className='flex flex-col p-2 shrink-0 w-full'>\n <div className='flex flex-col gap-0.5'>\n {subMenus.map((item) => (\n <div\n key={item.id}\n className={cn('rounded-md', item.isActive && 'bg-accent')}\n >\n <SidebarLink\n href={item.href}\n onClick={item.onClick}\n className='flex gap-2 h-8 items-center p-2 rounded-md hover:bg-sidebar-accent transition-colors'\n >\n <span className='flex items-center justify-center size-4 shrink-0 [&_svg]:size-full'>\n {item.icon}\n </span>\n <span className='flex-1 min-w-0 text-sm font-normal leading-5 tracking-tight overflow-hidden text-ellipsis whitespace-nowrap text-foreground'>\n {item.title}\n </span>\n {item.isExternal && (\n <span className='flex items-center justify-center shrink-0 text-[#8C8C8C]'>\n <ArrowUpRight size={12} strokeWidth={1.5} />\n </span>\n )}\n </SidebarLink>\n </div>\n ))}\n </div>\n </div>\n\n {panelCenterContent && (\n <div className='flex flex-col shrink-0 w-full'>\n {panelCenterContent}\n </div>\n )}\n\n {panelTopContent && (\n <div className='flex flex-col flex-1 min-h-0'>\n {panelTopContent}\n </div>\n )}\n </div>\n\n {/* 패널 하단 고정 푸터 (스크롤 영역 바깥) */}\n {panelBottomContent && (\n <div className='shrink-0 w-full'>{panelBottomContent}</div>\n )}\n </div>\n </aside>\n </SidebarLinkProvider>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Panel-left icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function PanelLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 0.5V12.5M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * bar — 가로 막대, width=100%, 양쪽 rounded-full (default)\n * circle — 원형, size prop으로 지름 조절\n * card — 대형 사각형 블록, rounded-xl\n */\n shape?: 'bar' | 'circle' | 'card';\n /**\n * lg — bar: 24px / circle: 40px / card: 128px\n * md — bar: 12px / circle: 32px / card: 96px\n * sm — bar: 6px / circle: 24px / card: 64px\n */\n size?: 'lg' | 'md' | 'sm';\n}\n\nconst classes: Record<'bar' | 'circle' | 'card', Record<'lg' | 'md' | 'sm', string>> = {\n bar: {\n lg: 'h-6 w-full rounded-full',\n md: 'h-3 w-full rounded-full',\n sm: 'h-1.5 w-full rounded-full',\n },\n circle: {\n lg: 'size-10 shrink-0 rounded-full',\n md: 'size-8 shrink-0 rounded-full',\n sm: 'size-6 shrink-0 rounded-full',\n },\n card: {\n lg: 'h-32 w-full rounded-xl',\n md: 'h-24 w-full rounded-xl',\n sm: 'h-16 w-full rounded-xl',\n },\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Skeleton({\n className,\n shape = 'bar',\n size = 'lg',\n ...props\n}: SkeletonProps) {\n return (\n <div\n data-slot='skeleton'\n data-shape={shape}\n data-size={size}\n aria-hidden\n className={cn('skeleton-shimmer block', classes[shape][size], className)}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slider as SliderPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Slider ───────────────────────────────────────────────────────────────────\n// · defaultValue={[50]} → Thumb 1개 (단일 슬라이더)\n// · defaultValue={[200, 800]} → Thumb 2개 (범위 슬라이더)\n//\n// 값 툴팁:\n// - hover → 해당 thumb 인덱스만 표시\n// - drag → 움직인 thumb 인덱스만 표시 (이전 값과 비교해 변경된 인덱스 특정)\n// - 드래그 종료(onValueCommit) 후 600ms → 해당 thumb 툴팁 숨김\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(\n (\n {\n className,\n defaultValue,\n value: valueProp,\n min = 0,\n max = 100,\n onValueChange,\n onValueCommit,\n ...props\n },\n ref,\n ) => {\n // 표시용 값 — 외부 제어든 내부 상태든 항상 동기화\n const [displayValues, setDisplayValues] = React.useState<number[]>(\n valueProp ?? defaultValue ?? [0],\n );\n\n // 툴팁을 표시할 thumb 인덱스 집합 (여러 thumb 독립 제어)\n const [visibleSet, setVisibleSet] = React.useState<Set<number>>(new Set());\n\n // thumb 별 hide 타이머 (인덱스 → 타이머 ID)\n const hideTimers = React.useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n\n // 외부 value prop 동기화\n React.useEffect(() => {\n if (valueProp !== undefined) setDisplayValues(valueProp);\n }, [valueProp]);\n\n // cleanup\n React.useEffect(\n () => () => hideTimers.current.forEach((t) => clearTimeout(t)),\n [],\n );\n\n const showThumb = (i: number) => {\n clearTimeout(hideTimers.current.get(i));\n hideTimers.current.delete(i);\n setVisibleSet((prev) => new Set(prev).add(i));\n };\n\n const hideThumb = (i: number, delay = 300) => {\n clearTimeout(hideTimers.current.get(i));\n const t = setTimeout(() => {\n setVisibleSet((prev) => {\n const next = new Set(prev);\n next.delete(i);\n return next;\n });\n }, delay);\n hideTimers.current.set(i, t);\n };\n\n const prevValuesRef = React.useRef<number[]>(displayValues);\n\n const handleValueChange = (newVals: number[]) => {\n // 변경된 thumb 인덱스만 툴팁 표시\n newVals.forEach((v, i) => {\n if (v !== prevValuesRef.current[i]) showThumb(i);\n });\n prevValuesRef.current = newVals;\n setDisplayValues(newVals);\n onValueChange?.(newVals);\n };\n\n const handleValueCommit = (newVals: number[]) => {\n // 드래그 종료 후 600ms 뒤 모든 thumb 툴팁 숨기기\n newVals.forEach((_, i) => hideThumb(i, 600));\n onValueCommit?.(newVals);\n };\n\n const thumbCount = displayValues.length;\n\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={valueProp === undefined ? defaultValue : undefined}\n value={valueProp !== undefined ? valueProp : undefined}\n min={min}\n max={max}\n onValueChange={handleValueChange}\n onValueCommit={handleValueCommit}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n {/* Track */}\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\"\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute h-full bg-primary\",\n thumbCount > 1 ? \"rounded-full\" : \"rounded-l-full\",\n )}\n />\n </SliderPrimitive.Track>\n\n {/* Thumbs — 각 thumb 안에 툴팁 자식으로 렌더 (thumb 중앙 기준 정렬) */}\n {displayValues.map((val, i) => (\n <SliderPrimitive.Thumb\n key={`thumb-${i}`}\n data-slot=\"slider-thumb\"\n onMouseEnter={() => showThumb(i)}\n onMouseLeave={() => hideThumb(i, 300)}\n className={cn(\n \"relative block size-5 shrink-0 rounded-full overflow-visible\",\n \"border border-primary bg-background\",\n \"ring-offset-background transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n )}\n >\n {/* 값 툴팁 — 해당 thumb 만 독립적으로 표시/숨김 */}\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute bottom-full left-1/2 -translate-x-1/2 mb-2\",\n \"flex flex-col items-center\",\n \"z-10 transition-opacity duration-150\",\n visibleSet.has(i) ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n {/* 버블 — tooltip.tsx TooltipContent 버블과 동일한 스타일 */}\n <span className=\"block rounded-md bg-primary px-2.5 py-1.5 text-xs font-normal leading-snug tracking-tight text-primary-foreground whitespace-nowrap\">\n {val}\n </span>\n {/* 화살표 — tooltip.tsx 와 동일한 Figma SVG path (sm = 20px) */}\n <svg\n width=\"20\"\n height=\"5\"\n viewBox=\"0 0 20 5\"\n fill=\"none\"\n preserveAspectRatio=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"-mt-px shrink-0\"\n aria-hidden\n >\n <path\n d=\"M9.29289 4.29289L5 0H15L10.7071 4.29289C10.3166 4.68342 9.68342 4.68342 9.29289 4.29289Z\"\n className=\"fill-primary\"\n />\n </svg>\n </div>\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n },\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Icon } from \"@/components/ui/icon\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface StepperProps {\n /** Step 라벨 문자열 배열 */\n steps: string[];\n /**\n * 현재 진행 중인 step의 0-based 인덱스.\n * 이 인덱스 이전 step은 complete, 이 인덱스는 current, 이후는 next.\n */\n currentStep: number;\n className?: string;\n}\n\ntype StepStatus = \"complete\" | \"current\" | \"next\";\n\nfunction getStatus(index: number, currentStep: number): StepStatus {\n if (index < currentStep) return \"complete\";\n if (index === currentStep) return \"current\";\n return \"next\";\n}\n\n// ─── CircleCheckFilled ────────────────────────────────────────────────────────\n// complete 상태 전용 — blue filled circle + white check stroke\n\nfunction CircleCheckFilled({ className }: { className?: string }) {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"shrink-0\", className)}\n aria-hidden\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" className=\"fill-blue-500\" />\n <path\n d=\"m9 12 2 2 4-4\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"stroke-white\"\n />\n </svg>\n );\n}\n\n// ─── Stepper ──────────────────────────────────────────────────────────────────\n\nexport function Stepper({ steps, currentStep, className }: StepperProps) {\n return (\n <div className={cn(\"flex items-center\", className)}>\n {steps.map((label, index) => {\n const status = getStatus(index, currentStep);\n\n return (\n <React.Fragment key={label}>\n <div className=\"flex shrink-0 items-center gap-1.5 px-2.5 py-2.5\">\n {status === \"complete\" ? (\n <CircleCheckFilled />\n ) : (\n <Icon\n name=\"circle-check\"\n className={cn(\n \"size-5\",\n status === \"current\"\n ? \"text-foreground\"\n : \"text-muted-foreground\"\n )}\n />\n )}\n <span\n className={cn(\n \"whitespace-nowrap text-sm tracking-tight\",\n status === \"next\"\n ? \"font-normal text-muted-foreground\"\n : \"font-semibold text-foreground\"\n )}\n >\n {label}\n </span>\n </div>\n\n {index < steps.length - 1 && (\n <div className=\"h-px flex-1 bg-border\" />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface TabItem<T extends string = string> {\n value: T;\n label: string;\n}\n\nexport interface TabsProps<T extends string = string> {\n allTabs: TabItem<T>[];\n current: T;\n onTabChange: (value: T) => void;\n /**\n * \"pill\" — 회색 배경 컨테이너 + 흰 배경 active (segment control 스타일)\n * \"underline\" — 하단 밑줄 active (default)\n */\n variant?: 'pill' | 'underline';\n /** 컨테이너를 w-full로 펼치고 각 탭 버튼을 균등 분할(flex-1)합니다 */\n block?: boolean;\n /** Tailwind height 클래스 (e.g. \"h-[36px]\"). 지정 시 내부 버튼 패딩도 자동 조정됩니다. */\n height?: string;\n className?: string;\n}\n\n// ─── Tabs ─────────────────────────────────────────────────────────────────────\n\nexport function Tabs<T extends string = string>({\n allTabs,\n current,\n onTabChange,\n variant = 'underline',\n block = false,\n height = 'h-[36px]',\n className,\n}: TabsProps<T>) {\n if (variant === 'pill') {\n return (\n <div\n className={cn(\n 'items-center gap-1 rounded-lg bg-muted p-1',\n block ? 'flex w-full' : 'inline-flex',\n height,\n height && '[&_button]:py-1',\n className,\n )}\n >\n {allTabs.map((tab) => {\n const isActive = tab.value === current;\n return (\n <button\n key={tab.value}\n type='button'\n onClick={() => onTabChange(tab.value)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-sm font-medium tracking-tight transition-all',\n block && 'flex-1',\n isActive\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n }\n\n // underline variant\n return (\n <div className={cn('flex items-center', block && 'w-full', className)}>\n {allTabs.map((tab) => {\n const isActive = tab.value === current;\n return (\n <button\n key={tab.value}\n type='button'\n onClick={() => onTabChange(tab.value)}\n className={cn(\n 'px-3 py-2 text-sm tracking-tight transition-colors',\n block && 'flex-1',\n isActive\n ? 'border-b-2 border-foreground font-semibold text-foreground'\n : 'border-b border-border font-medium text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ToggleProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick'\n> {\n pressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: 'sm' | 'md' | 'lg';\n}\n\n// ─── Shared style helpers (used by ToggleGroup too) ───────────────────────────\n\nexport const toggleSizeClasses = {\n sm: 'h-7 min-w-7 px-1.5 text-sm',\n md: 'h-9 min-w-9 px-2 text-sm',\n lg: 'h-10 min-w-10 px-2.5 text-base',\n} as const;\n\nexport const toggleBaseClasses =\n 'inline-flex items-center justify-center gap-1.5 font-medium tracking-tight transition-colors select-none';\n\n// ─── Toggle ───────────────────────────────────────────────────────────────────\n\nexport function Toggle({\n pressed = false,\n onPressedChange,\n size = 'md',\n disabled = false,\n className,\n children,\n ...props\n}: ToggleProps) {\n return (\n <button\n type='button'\n role='switch'\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n disabled={disabled}\n onClick={() => onPressedChange?.(!pressed)}\n className={cn(\n toggleBaseClasses,\n 'rounded-md',\n 'border border-border',\n toggleSizeClasses[size],\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n pressed ? 'bg-muted text-foreground' : 'bg-transparent text-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import { cn } from '@/lib/utils';\nimport { toggleBaseClasses, toggleSizeClasses } from './toggle';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ToggleGroupItemData<T extends string = string> {\n value: T;\n children: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface ToggleGroupBaseProps<T extends string = string> {\n items: ToggleGroupItemData<T>[];\n /**\n * outlined — 컨테이너 border + 아이템 사이 divider (default)\n * noBorder — border 없음, 아이템마다 rounded-md 독립 적용\n */\n variant?: 'bordered' | 'noBorder';\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\ninterface ToggleGroupSingleProps<\n T extends string = string,\n> extends ToggleGroupBaseProps<T> {\n type?: 'single';\n value?: T;\n onValueChange?: (value: T) => void;\n}\n\ninterface ToggleGroupMultipleProps<\n T extends string = string,\n> extends ToggleGroupBaseProps<T> {\n type: 'multiple';\n value?: T[];\n onValueChange?: (value: T[]) => void;\n}\n\nexport type ToggleGroupProps<T extends string = string> =\n | ToggleGroupSingleProps<T>\n | ToggleGroupMultipleProps<T>;\n\n// ─── ToggleGroup ──────────────────────────────────────────────────────────────\n\nexport function ToggleGroup<T extends string = string>({\n items,\n variant = 'bordered',\n disabled = false,\n size = 'md',\n className,\n ...rest\n}: ToggleGroupProps<T>) {\n const isPressed = (itemValue: T): boolean => {\n if (rest.type === 'multiple') {\n return (rest.value ?? []).includes(itemValue);\n }\n return (rest as ToggleGroupSingleProps<T>).value === itemValue;\n };\n\n const handlePress = (itemValue: T) => {\n if (rest.type === 'multiple') {\n const current = rest.value ?? [];\n const next = current.includes(itemValue)\n ? current.filter((v) => v !== itemValue)\n : [...current, itemValue];\n rest.onValueChange?.(next as T[]);\n } else {\n (rest as ToggleGroupSingleProps<T>).onValueChange?.(itemValue);\n }\n };\n\n const isBordered = variant === 'bordered';\n\n return (\n <div\n className={cn(\n // noBorder도 동일 구조(overflow-hidden, rounded-lg)이되 border만 없음\n 'inline-flex items-center overflow-hidden rounded-lg',\n isBordered && 'border border-border',\n className,\n )}\n >\n {items.map((item, index) => {\n const itemDisabled = disabled || (item.disabled ?? false);\n const pressed = isPressed(item.value);\n\n return (\n <button\n key={item.value}\n type='button'\n role='switch'\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n disabled={itemDisabled}\n onClick={() => !itemDisabled && handlePress(item.value)}\n className={cn(\n toggleBaseClasses,\n toggleSizeClasses[size],\n // 두 variant 모두 아이템 자체는 rounded-none\n 'rounded-none',\n // outlined만 아이템 사이 vertical divider 표시\n isBordered && index > 0 && 'border-l border-border',\n // 선택 상태\n pressed\n ? 'bg-muted text-foreground'\n : 'bg-transparent text-foreground',\n // disabled\n itemDisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n )}\n >\n {item.children}\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Tooltip } from '@/components/ui/tooltip';\n\nexport interface CircleIndicatorProps {\n /** 사용량 (바이트 또는 임의 단위) */\n used: number;\n /** 전체 용량 */\n total: number;\n /** 중앙에 표시할 콘텐츠 */\n centerContent?: React.ReactNode;\n /** hover 시 표시할 툴팁 텍스트 */\n tooltip?: string;\n /**\n * progress arc 색상. CSS color 값 또는 디자인 시스템 토큰을 받습니다.\n * 예) \"#3b82f6\" | \"var(--color-primary)\" | \"var(--color-blue-500)\"\n * 미지정 시 primary 색상이 적용됩니다.\n */\n color?: string;\n /** 컴포넌트 크기 (px, 기본값 44) */\n size?: number;\n /** stroke 두께 (px, 기본값 3) */\n strokeWidth?: number;\n /** stroke 끝 모양 (기본값 'round') */\n strokeLinecap?: 'round' | 'square';\n className?: string;\n}\n\nexport function CircleIndicator({\n used,\n total,\n centerContent,\n tooltip,\n color,\n size = 44,\n strokeWidth = 3,\n strokeLinecap = 'round',\n className,\n}: CircleIndicatorProps) {\n const ratio = total > 0 ? Math.min(used / total, 1) : 0;\n const padding = strokeWidth / 2 + 1;\n const radius = size / 2 - padding;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference * (1 - ratio);\n\n return (\n <Tooltip content={tooltip}>\n <div\n className={cn('relative grid place-items-center shrink-0', className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n aria-hidden\n className=\"absolute inset-0 -rotate-90\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n className=\"text-gray-200\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeLinecap={strokeLinecap}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className={cn(!color && 'text-primary')}\n stroke={color ?? 'currentColor'}\n />\n </svg>\n {centerContent && <div className=\"z-10\">{centerContent}</div>}\n </div>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Switch ───────────────────────────────────────────────────────────────────\n// Figma: w-44px h-24px pill — checked: bg-foreground, unchecked: bg-input\n// Thumb: size-20px, 흰색 원, left-2px(unchecked) / left-22px(checked)\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n // 크기 — Figma: w-44px h-24px\n \"inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full\",\n // 색상 — 미체크: bg-input, 체크: bg-foreground\n \"bg-input transition-colors data-[state=checked]:bg-foreground\",\n // 포커스\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // 비활성\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n // 크기 — Figma: size-20px\n \"pointer-events-none block size-5 rounded-full bg-background\",\n // 위치 전환: 미체크 → 2px, 체크 → 22px\n \"transition-transform data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5\"\n )}\n />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\n// ─── SwitchField ──────────────────────────────────────────────────────────────\n// 가로 레이아웃: [레이블 + 설명] (flex-1) | [Switch]\n// Figma \"Switch\" 패턴 — 설정 항목 토글\n\nexport interface SwitchFieldProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n /** 레이블 텍스트 */\n label: string;\n /** 보조 설명 (선택) */\n description?: string;\n className?: string;\n}\n\nfunction SwitchField({ label, description, className, id, ...props }: SwitchFieldProps) {\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n {/* 텍스트 영역 */}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <label\n htmlFor={id}\n className=\"cursor-pointer pb-0.5 text-sm font-medium tracking-tight text-foreground\"\n >\n {label}\n </label>\n {description && (\n <p className=\"text-sm tracking-tight text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {/* Switch */}\n <Switch id={id} className=\"shrink-0\" {...props} />\n </div>\n );\n}\n\nexport { Switch, SwitchField };\n","'use client';\n\nimport * as React from 'react';\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type PaginationState,\n type OnChangeFn,\n type RowSelectionState,\n} from '@tanstack/react-table';\nimport { cn } from '@/lib/utils';\nimport { Icon } from '@/components/ui/icon';\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Tooltip } from '@/components/ui/tooltip';\n\n// ─── Re-exports (TanStack 타입 직접 참조 가능하도록) ─────────────────────────\n\nexport type { SortingState, PaginationState, OnChangeFn, RowSelectionState };\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SortDirection = 'ASC' | 'DESC' | null;\n\nexport interface TableColumn<T> {\n key: string;\n header: string;\n sortable?: boolean;\n /** 정렬 기준값 추출. sortable=true 시 필수 */\n sortValue?: (row: T) => string | number;\n /** 헤더·셀 text-align. 기본값 \"left\" */\n align?: 'left' | 'center' | 'right';\n cellClassName?: string;\n headerClassName?: string;\n /**\n * true이면 셀 내용을 한 줄로 잘라내고 hover 시 tooltip으로 전체 내용을 표시.\n * tooltip에 표시할 텍스트를 별도로 지정하려면 ellipsisTooltip을 함께 사용.\n */\n ellipsis?: boolean;\n /** ellipsis=true 일 때 tooltip에 표시할 내용. 미제공 시 cell 렌더 결과를 그대로 사용. */\n ellipsisTooltip?: (row: T) => React.ReactNode;\n cell: (row: T) => React.ReactNode;\n}\n\nexport interface TablePaginationConfig {\n pageSize?: number;\n /** 현재 페이지 번호 (1-based). 외부에서 제어할 때 전달. */\n currentPage?: number;\n /** 페이지 변경 콜백 (1-based page). */\n onPageChange?: (page: number) => void;\n /** 서버사이드 페이지네이션 시 true로 설정 */\n manualPagination?: boolean;\n /** manualPagination=true 일 때 전체 페이지 수 */\n pageCount?: number;\n /** manualPagination=true 일 때 전체 행 수 (pageCount 대신 사용 가능) */\n rowCount?: number;\n}\n\nexport interface TableSortingItem {\n /** TableColumn.key 와 일치해야 함 */\n key: TableColumn<never>['key'];\n desc?: boolean;\n}\n\nexport interface TableProps<T> {\n columns: TableColumn<T>[];\n data: T[];\n /**\n * 각 행의 고유 키.\n * - keyof T (예: \"id\") — T[key]를 string으로 변환해 사용\n * - (row: T) => string — 함수로 직접 계산\n */\n rowKey: keyof T | ((row: T) => string);\n /**\n * 페이지네이션 설정. 미전달 시 페이지네이션 비활성화.\n * 외부 API는 1-based page를 사용하고, TanStack의 0-based pageIndex는 내부에서 변환한다.\n */\n pagination?: TablePaginationConfig;\n /**\n * 초기 정렬 상태. 복수 컬럼 정렬 지원.\n * 각 항목의 key는 TableColumn.key 와 일치해야 함.\n */\n defaultSorting?: TableSortingItem[];\n /** 데이터 로딩 중 상태. true이면 tbody 대신 스피너를 표시 */\n loading?: boolean;\n /** true이면 각 행 앞에 체크박스가 추가되어 row multi-select 활성화 */\n enableRowSelection?: boolean;\n /** 외부에서 selection 상태를 제어할 때 사용 (controlled) */\n rowSelection?: RowSelectionState;\n /** selection 상태 변경 콜백 */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /**\n * 각 행 오른쪽 끝에 렌더링할 액션 영역.\n * row 데이터를 받아 ReactNode를 반환하는 함수.\n * 예: hover 시 나타나는 삭제·편집 버튼 등.\n */\n rowActions?: (row: T) => React.ReactNode;\n /** 행 클릭 핸들러. enableRowSelection=true(편집 모드)일 때는 동작하지 않음. */\n onRowClick?: (row: T) => void;\n /**\n * 정렬 상태 변경 콜백. 서버사이드 정렬 연동에 사용.\n * 빈 배열(정렬 해제)은 전달되지 않으므로 항상 최소 1개 항목 보장.\n */\n onSortingChange?: (sorting: SortingState) => void;\n className?: string;\n}\n\n// ─── EllipsisCell ────────────────────────────────────────────────────────────\n//\n// 실제 overflow 여부를 ResizeObserver로 감지해 잘린 경우에만 Tooltip을 활성화.\n// inline-flex 사용으로 hover 영역이 실제 콘텐츠 너비에만 한정됨.\n//\n// [ref 전략] Tooltip content null→값 전환 시 DOM 구조가 변경돼 div가 remount됨.\n// useRef 대신 refCallback+useState(el) 패턴으로 remount를 감지해 ResizeObserver를 재연결.\n//\n// [overflow 감지] wrapper의 inline-flex 내부에서 flex 자식이 shrink하면\n// wrapper 자체의 scrollWidth === clientWidth가 돼서 감지 실패.\n// querySelectorAll로 후손 요소까지 순회해 truncate된 텍스트 span을 찾아야 함.\n//\n// [primitive 텍스트] flexRender는 항상 React element를 반환하므로 isPrimitiveText 판별이\n// 불가. Table 컴포넌트에서 col.cell을 직접 호출한 rawContent를 rendered로 전달해야 한다.\n// flex-1 min-w-0 패턴으로 퍼센트 너비 없이 너비를 확정.\n\ninterface EllipsisCellProps {\n rendered: React.ReactNode;\n tooltip: React.ReactNode;\n}\n\nfunction EllipsisCell({ rendered, tooltip }: EllipsisCellProps) {\n const [el, setEl] = React.useState<HTMLDivElement | null>(null);\n const [overflowing, setOverflowing] = React.useState(false);\n const isPrimitiveText =\n typeof rendered === 'string' || typeof rendered === 'number';\n\n const refCallback = React.useCallback((node: HTMLDivElement | null) => {\n setEl(node);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!el) return;\n const check = () => {\n const selfOverflow = el.scrollWidth > el.clientWidth;\n const childOverflow = Array.from(el.querySelectorAll<Element>('*')).some(\n (d) => d.scrollWidth > d.clientWidth,\n );\n setOverflowing(selfOverflow || childOverflow);\n };\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [el]);\n\n return (\n <Tooltip content={overflowing ? tooltip : null}>\n <div\n ref={refCallback}\n className='inline-flex max-w-full overflow-hidden items-center whitespace-nowrap'\n >\n {isPrimitiveText ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {rendered}\n </span>\n ) : (\n rendered\n )}\n </div>\n </Tooltip>\n );\n}\n\n// ─── Sort Icon ────────────────────────────────────────────────────────────────\n\nexport function SortIcon({ direction }: { direction: SortDirection }) {\n if (direction === 'ASC') {\n return <Icon name='arrow-up' className='size-3.5 text-foreground' />;\n }\n if (direction === 'DESC') {\n return (\n <svg\n viewBox='-5.54 -5.54 24 24'\n fill='none'\n className='size-3.5 text-foreground'\n stroke='currentColor'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n >\n <path d='M6.45833 0.625V12.2917M6.45833 12.2917L12.2917 6.45833M6.45833 12.2917L0.625 6.45833' />\n </svg>\n );\n }\n // neutral: group-hover로 부모 th hover 시 색상 연동\n return (\n <svg\n viewBox='0 0 24 24'\n fill='none'\n className='size-3.5 text-muted-foreground transition-colors group-hover:text-foreground'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n >\n <path d='M8 9l4-4 4 4M16 15l-4 4-4-4' />\n </svg>\n );\n}\n\n// ─── Compact Pagination Helpers ───────────────────────────────────────────────\n//\n// TanStack Table은 페이지네이션 상태 관리만 제공하고 UI는 직접 구현해야 함.\n// (https://tanstack.com/table/latest/docs/framework/react/examples/pagination)\n// 아래 함수는 최대 5개의 페이지 번호 버튼을 표시하고\n// 범위를 벗어난 구간은 ellipsis('…')로 축약한다.\n\ntype PageItem = number | 'ellipsis-start' | 'ellipsis-end';\n\nfunction getVisiblePageItems(\n currentPage: number,\n totalPages: number,\n): PageItem[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n if (currentPage <= 3) {\n return [1, 2, 3, 4, 'ellipsis-end', totalPages];\n }\n if (currentPage >= totalPages - 2) {\n return [\n 1,\n 'ellipsis-start',\n totalPages - 3,\n totalPages - 2,\n totalPages - 1,\n totalPages,\n ];\n }\n return [\n 1,\n 'ellipsis-start',\n currentPage - 1,\n currentPage,\n currentPage + 1,\n 'ellipsis-end',\n totalPages,\n ];\n}\n\n// ─── TablePagination ──────────────────────────────────────────────────────────\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n className?: string;\n}\n\nexport function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) {\n const items = getVisiblePageItems(currentPage, totalPages);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <div\n className={cn('flex items-center justify-center gap-1 pt-4', className)}\n >\n {/* 이전 — disabled 시 cursor-not-allowed를 wrapper span으로 노출\n Button의 disabled:pointer-events-none 으로 인해 button 자체에서는\n cursor가 바뀌지 않으므로 부모 span에 cursor 지정 */}\n <span\n className={cn('inline-flex', isPrevDisabled && 'cursor-not-allowed')}\n >\n <Button\n variant='ghost'\n size='icon'\n onClick={() => onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label='이전 페이지'\n className='cursor-pointer disabled:bg-transparent'\n >\n <Icon name='chevron-left' className='size-4' />\n </Button>\n </span>\n\n {items.map((item, idx) => {\n if (item === 'ellipsis-start' || item === 'ellipsis-end') {\n return (\n <span\n key={item}\n aria-hidden\n className='flex size-8 items-center justify-center text-sm leading-none text-muted-foreground select-none'\n >\n …\n </span>\n );\n }\n return (\n <button\n key={`${item}-${idx}`}\n onClick={() => onPageChange(item)}\n aria-current={item === currentPage ? 'page' : undefined}\n className={cn(\n 'flex size-8 cursor-pointer items-center justify-center rounded-lg text-sm font-medium transition-colors',\n item === currentPage\n ? 'bg-foreground text-background'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n )}\n >\n {item}\n </button>\n );\n })}\n\n {/* 다음 */}\n <span\n className={cn('inline-flex', isNextDisabled && 'cursor-not-allowed')}\n >\n <Button\n variant='ghost'\n size='icon'\n onClick={() => onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label='다음 페이지'\n className='cursor-pointer disabled:bg-transparent'\n >\n <Icon name='chevron-right' className='size-4' />\n </Button>\n </span>\n </div>\n );\n}\n\n// ─── Table ────────────────────────────────────────────────────────────────────\n\nexport function Table<T>({\n columns,\n data,\n rowKey,\n pagination,\n defaultSorting,\n loading = false,\n enableRowSelection,\n rowSelection: rowSelectionProp,\n onRowSelectionChange,\n rowActions,\n onRowClick,\n onSortingChange,\n className,\n}: TableProps<T>) {\n const getRowKey = React.useCallback(\n (row: T): string =>\n typeof rowKey === 'function' ? rowKey(row) : String(row[rowKey]),\n [rowKey],\n );\n\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({});\n\n const isControlledSelection = rowSelectionProp !== undefined;\n const effectiveRowSelection = isControlledSelection\n ? rowSelectionProp\n : internalRowSelection;\n\n const handleRowSelectionChange: OnChangeFn<RowSelectionState> = (updater) => {\n if (!isControlledSelection) {\n setInternalRowSelection((prev) =>\n typeof updater === 'function' ? updater(prev) : updater,\n );\n }\n onRowSelectionChange?.(updater);\n };\n\n const [sorting, setSorting] = React.useState<SortingState>(\n () =>\n defaultSorting?.map(({ key, desc }) => ({\n id: key,\n desc: desc ?? false,\n })) ?? [],\n );\n\n const handleSortingChange = React.useCallback<OnChangeFn<SortingState>>(\n (updater) => {\n setSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n if (next.length > 0) onSortingChange?.(next);\n return next;\n });\n },\n [onSortingChange],\n );\n\n const [internalPagination, setInternalPagination] =\n React.useState<PaginationState>({\n pageIndex: (pagination?.currentPage ?? 1) - 1,\n pageSize: pagination?.pageSize ?? 10,\n });\n\n // 외부에서 currentPage가 변경될 때(sort/search 리셋 등) 내부 상태를 동기화\n React.useEffect(() => {\n if (pagination?.currentPage !== undefined) {\n setInternalPagination((prev) => ({\n ...prev,\n pageIndex: pagination.currentPage! - 1,\n }));\n }\n }, [pagination?.currentPage]);\n\n const handlePaginationChange: OnChangeFn<PaginationState> = (updater) => {\n const next =\n typeof updater === 'function' ? updater(internalPagination) : updater;\n setInternalPagination(next);\n pagination?.onPageChange?.(next.pageIndex + 1);\n };\n\n const isSelectionActive = enableRowSelection === true;\n\n const selectionColumn = React.useMemo<ColumnDef<T>>(\n () => ({\n id: '__select__',\n header: '__select_header__',\n // 체크박스 렌더링은 td/th에서 isSelectionActive 가드 후 호출하므로 항상 반환\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(checked) => row.toggleSelected(!!checked)}\n aria-label='행 선택'\n onClick={(e) => e.stopPropagation()}\n />\n ),\n enableSorting: false,\n }),\n [],\n );\n\n const rowActionsColumn = React.useMemo<ColumnDef<T>>(\n () => ({\n id: '__row_actions__',\n header: '',\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) =>\n rowActions!(row.original),\n enableSorting: false,\n }),\n [rowActions],\n );\n\n const tanstackColumns = React.useMemo<ColumnDef<T>[]>(\n () => [\n ...(isSelectionActive ? [selectionColumn] : []),\n ...columns.map((col) => ({\n id: col.key,\n header: col.header,\n accessorFn: col.sortValue ?? (() => null),\n cell: ({ row }: { row: import('@tanstack/react-table').Row<T> }) =>\n col.cell(row.original),\n enableSorting: col.sortable ?? false,\n })),\n ...(rowActions ? [rowActionsColumn] : []),\n ],\n [columns, isSelectionActive, selectionColumn, rowActions, rowActionsColumn],\n );\n\n const hasPagination = pagination !== undefined;\n\n const table = useReactTable<T>({\n data,\n columns: tanstackColumns,\n state: {\n sorting,\n ...(hasPagination && { pagination: internalPagination }),\n ...(isSelectionActive && { rowSelection: effectiveRowSelection }),\n },\n getRowId: (row) => getRowKey(row),\n onSortingChange: handleSortingChange,\n ...(hasPagination && { onPaginationChange: handlePaginationChange }),\n ...(isSelectionActive && {\n enableRowSelection: true,\n onRowSelectionChange: handleRowSelectionChange,\n }),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...(hasPagination && { getPaginationRowModel: getPaginationRowModel() }),\n ...(pagination?.manualPagination !== undefined && {\n manualPagination: pagination.manualPagination,\n }),\n ...(pagination?.pageCount !== undefined && {\n pageCount: pagination.pageCount,\n }),\n ...(pagination?.rowCount !== undefined && {\n rowCount: pagination.rowCount,\n }),\n });\n\n // colMap: 컬럼 key → 스타일·동작 설정 매핑 (렌더마다 참조)\n const colMap = React.useMemo(\n () =>\n Object.fromEntries(\n columns.map((c) => [\n c.key,\n {\n align: c.align ?? 'left',\n headerCls: c.headerClassName ?? '',\n cellCls: c.cellClassName ?? '',\n ellipsis: c.ellipsis ?? false,\n ellipsisTooltip: c.ellipsisTooltip,\n cellFn: c.cell,\n },\n ]),\n ) as Record<\n string,\n {\n align: 'left' | 'center' | 'right';\n headerCls: string;\n cellCls: string;\n ellipsis: boolean;\n ellipsisTooltip: ((row: T) => React.ReactNode) | undefined;\n cellFn: (row: T) => React.ReactNode;\n }\n >,\n [columns],\n );\n\n const { pageIndex } = table.getState().pagination ?? { pageIndex: 0 };\n const totalPages = hasPagination ? table.getPageCount() : 1;\n const currentPage = pageIndex + 1;\n const colCount =\n columns.length + (isSelectionActive ? 1 : 0) + (rowActions ? 1 : 0);\n const selectedCount = isSelectionActive\n ? Object.values(effectiveRowSelection).filter(Boolean).length\n : 0;\n const hasSelection = selectedCount > 0;\n\n return (\n <div className={cn('flex flex-col', className)}>\n <div className='w-full overflow-x-auto'>\n <table className='w-full border-collapse'>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className='border-b border-border'>\n {headerGroup.headers.map((header, headerIdx) => {\n // __select__ 컬럼: p-0 relative, 체크박스를 absolute로 배치\n if (header.id === '__select__') {\n return (\n <th key={header.id} className='w-10 p-0 relative'>\n {isSelectionActive && (\n <div className='absolute inset-0 flex items-center justify-center'>\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? 'indeterminate'\n : false\n }\n onCheckedChange={(checked) =>\n table.toggleAllPageRowsSelected(!!checked)\n }\n aria-label='전체 선택'\n />\n </div>\n )}\n </th>\n );\n }\n\n // __row_actions__ 컬럼: 빈 헤더\n if (header.id === '__row_actions__') {\n return <th key={header.id} className='w-12 px-2 py-3' />;\n }\n\n const { align, headerCls } = colMap[header.id] ?? {\n align: 'left',\n headerCls: '',\n };\n const canSort = header.column.getCanSort();\n const sorted = header.column.getIsSorted();\n const direction: SortDirection =\n sorted === 'asc'\n ? 'ASC'\n : sorted === 'desc'\n ? 'DESC'\n : null;\n\n // 선택됨 상태: 첫 번째 데이터 컬럼에만 \"N개 선택됨\" 표시,\n // 나머지 데이터 컬럼은 레이블을 숨겨 레이아웃은 그대로 유지\n const isFirstDataCol = isSelectionActive\n ? headerIdx === 1\n : headerIdx === 0;\n const showSelectionLabel =\n isSelectionActive && hasSelection && isFirstDataCol;\n const hideLabel =\n isSelectionActive && hasSelection && !isFirstDataCol;\n\n return (\n <th\n key={header.id}\n className={cn(\n 'px-2 py-3 text-sm font-medium text-muted-foreground transition-colors',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n align === 'left' && 'text-left',\n canSort &&\n !hideLabel &&\n !showSelectionLabel &&\n 'group cursor-pointer select-none hover:font-semibold hover:text-foreground',\n showSelectionLabel && 'text-foreground',\n headerCls,\n )}\n onClick={\n showSelectionLabel || hideLabel\n ? undefined\n : header.column.getToggleSortingHandler()\n }\n >\n {showSelectionLabel ? (\n `${selectedCount}개 선택됨`\n ) : hideLabel ? null : (\n <div\n className={cn(\n 'inline-flex items-center gap-1',\n align === 'center' && 'justify-center',\n align === 'right' && 'justify-end',\n )}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {canSort && <SortIcon direction={direction} />}\n </div>\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {loading ? (\n <tr>\n <td colSpan={colCount} className='py-16 text-center'>\n <Icon\n name='loader-2'\n className='mx-auto size-6 animate-spin text-muted-foreground'\n />\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row) => (\n <tr\n key={getRowKey(row.original)}\n onClick={\n !isSelectionActive && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n className={cn(\n 'group border-b border-border transition-colors hover:bg-accent/50 last:border-b-0',\n !isSelectionActive && onRowClick && 'cursor-pointer',\n isSelectionActive && row.getIsSelected() && 'bg-accent/30',\n )}\n >\n {row.getVisibleCells().map((cell) => {\n // __select__: p-0 relative, 체크박스 absolute 배치\n if (cell.column.id === '__select__') {\n return (\n <td key={cell.id} className='w-10 p-0 relative'>\n {isSelectionActive && (\n <div className='absolute inset-0 flex items-center justify-center'>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </div>\n )}\n </td>\n );\n }\n\n // __row_actions__: 오른쪽 끝 액션 셀\n if (cell.column.id === '__row_actions__') {\n return (\n <td\n key={cell.id}\n className='w-12 px-2 py-4 align-middle text-right'\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n );\n }\n\n const {\n align,\n cellCls,\n ellipsis,\n ellipsisTooltip,\n cellFn,\n } = colMap[cell.column.id] ?? {\n align: 'left',\n cellCls: '',\n ellipsis: false,\n ellipsisTooltip: undefined,\n cellFn: () => null,\n };\n\n const rendered = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n\n // flexRender는 항상 React element를 반환하므로\n // isPrimitiveText 판별을 위해 col.cell을 직접 호출\n const rawContent = ellipsis ? cellFn(row.original) : null;\n\n const cellContent = ellipsis ? (\n <EllipsisCell\n rendered={rawContent}\n tooltip={\n ellipsisTooltip\n ? ellipsisTooltip(row.original)\n : rawContent\n }\n />\n ) : (\n rendered\n );\n\n return (\n <td\n key={cell.id}\n className={cn(\n 'px-2 py-4 text-sm leading-none text-foreground align-middle',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n // ellipsis 컬럼은 max-w-0으로 table 레이아웃상 너비를 고정하고\n // overflow-hidden으로 td 밖으로 나가는 콘텐츠를 클리핑\n ellipsis && 'max-w-0 overflow-hidden',\n cellCls,\n )}\n >\n {cellContent}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {!loading && hasPagination && totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={(page) => table.setPageIndex(page - 1)}\n />\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * 사용자 메시지 말풍선.\n * 텍스트가 한 줄이면 rounded-full, 두 줄 이상이면 rounded-2xl.\n * leading-6 = 24px 기준으로 28px 초과 여부로 판별.\n */\nexport function UserMessageBubble({ content }: { content: string }) {\n const textRef = React.useRef<HTMLParagraphElement>(null);\n const [multiLine, setMultiLine] = React.useState(false);\n\n React.useEffect(() => {\n const el = textRef.current;\n if (!el) return;\n const check = () => setMultiLine(el.offsetHeight > 28);\n check();\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [content]);\n\n return (\n <div className=\"flex items-end justify-end w-full\">\n <div\n className={cn(\n \"bg-secondary px-4 py-3 max-w-130\",\n multiLine ? \"rounded-2xl\" : \"rounded-full\",\n )}\n >\n <p\n ref={textRef}\n className=\"text-base leading-6 tracking-tight text-foreground\"\n >\n {content}\n </p>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\n\n/**\n * 디자인 시스템 전역 Provider 묶음.\n * layout.tsx (Server Component) 안에서 children을 감싸는 용도.\n *\n * 현재 포함된 Provider:\n * - TooltipProvider: Radix Tooltip 전역 설정\n * · delayDuration — hover → open 지연 시간 (ms)\n * · skipDelayDuration — 빠르게 연속 이동 시 딜레이 스킵 임계치 (ms)\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <TooltipProvider delayDuration={200} skipDelayDuration={300}>\n {children}\n </TooltipProvider>\n );\n}\n","export function RyaiLogoIcon() {\n return (\n <div className='flex size-10 shrink-0 items-center justify-center rounded-lg bg-sidebar-primary'>\n <div className='relative size-6 overflow-clip shrink-0'>\n <svg\n className='-translate-x-1/2 absolute left-[calc(50%+0.5px)] top-[12.5%] bottom-[12.5%] w-3.75'\n viewBox='0 0 15 18'\n fill='none'\n preserveAspectRatio='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n >\n <path\n d='M2.0625 17.9568C1.5 17.9568 1.01564 17.7837 0.609377 17.4375C0.203126 17.0625 0 16.6299 0 16.1394V2.8125C0 1.97597 0.28125 1.29807 0.84375 0.778845C1.43752 0.25962 2.21875 0 3.1875 0H7.875C9.7814 0 11.3125 0.519225 12.4688 1.55769C13.6563 2.59615 14.25 3.89422 14.25 5.45193C14.25 6.375 13.9844 7.24035 13.4531 8.0481C12.922 8.8557 12.1563 9.50475 11.1562 9.99525C11.5937 10.1972 11.9845 10.4712 12.3281 10.8172C12.7031 11.1634 13 11.5818 13.2187 12.072L14.7656 15.3606C14.9219 15.7068 15 15.9951 15 16.226C15 16.7453 14.7813 17.178 14.3438 17.524C13.9064 17.8414 13.4219 18 12.8906 18C12.547 18 12.2031 17.9135 11.8594 17.7405C11.5469 17.5672 11.2969 17.2933 11.1094 16.9182L9.32812 12.9807C9.01562 12.2885 8.59374 11.7981 8.06249 11.5095C7.56249 11.1923 6.96874 11.0337 6.28124 11.0337H5.06249C4.43749 11.0337 4.12501 11.3222 4.12501 11.899V16.1394C4.12501 16.6299 3.9219 17.0625 3.51563 17.4375C3.10938 17.7837 2.625 17.9568 2.0625 17.9568ZM4.82812 7.78845H7.68749C8.4689 7.78845 9.07828 7.58655 9.51562 7.18275C9.98437 6.7788 10.2187 6.25965 10.2187 5.625C10.2187 4.96153 9.98437 4.44231 9.51562 4.06731C9.07828 3.66347 8.4689 3.46155 7.68749 3.46155H4.82812C4.35938 3.46155 4.12501 3.67788 4.12501 4.11057V7.1394C4.12501 7.57215 4.35938 7.78845 4.82812 7.78845Z'\n fill='var(--sidebar-primary-foreground)'\n />\n </svg>\n </div>\n </div>\n );\n}\n","// Claude (Anthropic) icon — Figma node 3512:10198\nimport { cn } from '@/lib/utils';\n\nexport function ClaudeIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M3.74692 10.3071L6.50025 8.763L6.54692 8.62883L6.50025 8.55417H6.36667L5.90583 8.52617L4.332 8.48358L2.96758 8.427L1.64575 8.35583L1.31267 8.28525L1 7.874L1.03208 7.66867L1.31208 7.48142L1.71225 7.51642L2.59892 7.5765L3.92775 7.66867L4.89142 7.72525L6.32 7.874H6.54692L6.579 7.78242L6.50083 7.72525L6.44075 7.66867L5.06525 6.73767L3.57658 5.753L2.79725 5.186L2.37492 4.89958L2.16258 4.63008L2.07042 4.04208L2.45308 3.62092L2.967 3.65592L3.09825 3.6915L3.61917 4.09167L4.73217 4.95267L6.18525 6.02192L6.39817 6.19925L6.48275 6.13917L6.49383 6.09658L6.39817 5.93675L5.60775 4.50992L4.76425 3.05742L4.38858 2.45542L4.28942 2.09433C4.25163 1.95565 4.23125 1.8128 4.22875 1.66908L4.66508 1.07817L4.906 1L5.487 1.07817L5.732 1.2905L6.09367 2.11533L6.67817 3.41558L7.58525 5.18308L7.85125 5.70692L7.993 6.19225L8.04608 6.341H8.13825V6.25583L8.21292 5.26067L8.35117 4.03858L8.48533 2.4665L8.532 2.02317L8.75133 1.49233L9.18708 1.20533L9.52775 1.36867L9.80775 1.76825L9.76867 2.02725L9.60183 3.107L9.27575 4.80042L9.06342 5.93325H9.18708L9.32883 5.79208L9.90342 5.03025L10.8671 3.82625L11.2929 3.34792L11.7888 2.82058L12.1078 2.56917H12.7104L13.1537 3.22775L12.9554 3.90792L12.3348 4.69367L11.8208 5.35983L11.0835 6.3515L10.6227 7.14483L10.6653 7.209L10.7749 7.19733L12.4409 6.84383L13.341 6.6805L14.4149 6.49675L14.9008 6.72308L14.9539 6.9535L14.7626 7.42425L13.614 7.70775L12.2671 7.97725L10.261 8.4515L10.2365 8.469L10.2651 8.50458L11.1687 8.58975L11.5548 8.61075H12.501L14.2627 8.742L14.7235 9.0465L15 9.41867L14.9539 9.70158L14.2452 10.0632L13.2885 9.83633L11.0549 9.3055L10.2896 9.11358H10.1834V9.17775L10.821 9.80075L11.9912 10.8566L13.4548 12.2157L13.5288 12.5529L13.341 12.8183L13.1427 12.7898L11.8564 11.8232L11.36 11.3874L10.2365 10.4424H10.1618V10.5416L10.4208 10.9202L11.7888 12.9741L11.8599 13.6041L11.7607 13.81L11.4061 13.9343L11.0164 13.8631L10.2149 12.7402L9.3895 11.4761L8.72275 10.3427L8.64108 10.3893L8.24792 14.6208L8.06358 14.8367L7.63833 15L7.28425 14.7311L7.09642 14.2953L7.28425 13.4343L7.51117 12.312L7.69492 11.4195L7.86175 10.3112L7.96092 9.9425L7.95392 9.918L7.87225 9.9285L7.03575 11.0759L5.76408 12.7938L4.75725 13.8701L4.51575 13.9657L4.0975 13.7499L4.13658 13.3638L4.3705 13.0202L5.7635 11.2492L6.6035 10.1513L7.146 9.51783L7.1425 9.42567H7.11042L3.41033 11.8267L2.75117 11.9118L2.46708 11.6458L2.50267 11.2107L2.63742 11.0689L3.75042 10.3036L3.74692 10.3071Z'\n fill='#D97757'\n />\n </svg>\n );\n}\n","// DeepSeek icon — Figma node 3512:10200\nimport { cn } from '@/lib/utils';\n\nexport function DeepSeekIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M14.8531 3.83931C14.7048 3.76878 14.641 3.90319 14.5543 3.97146C14.5246 3.99349 14.4995 4.02212 14.4744 4.04854C14.2576 4.27321 14.0044 4.42084 13.6736 4.40319C13.1899 4.37674 12.777 4.52437 12.4119 4.88344C12.3343 4.44067 12.0765 4.17628 11.6841 4.00669C11.4788 3.91856 11.2712 3.83043 11.1274 3.63877C11.027 3.50224 10.9997 3.35023 10.9495 3.20042C10.9175 3.11012 10.8856 3.01756 10.7783 3.00214C10.662 2.98453 10.6163 3.07922 10.5707 3.15857C10.3882 3.48241 10.3175 3.83928 10.3243 4.20055C10.3403 5.01345 10.6939 5.66106 11.3966 6.12149C11.4765 6.17437 11.497 6.2272 11.4719 6.30435C11.424 6.46296 11.3669 6.61714 11.3168 6.77575C11.2848 6.87711 11.2369 6.89913 11.1251 6.85503C10.7395 6.69867 10.4064 6.46733 10.1121 6.18759C9.61244 5.71836 9.1607 5.20069 8.59719 4.79534C8.46487 4.70061 8.33252 4.61253 8.19561 4.52877C7.62067 3.98689 8.27092 3.54187 8.4215 3.48904C8.5789 3.43396 8.47625 3.24447 7.96746 3.24672C7.45868 3.2489 6.99326 3.41413 6.40008 3.63442C6.31339 3.66747 6.2221 3.69167 6.12856 3.7115C5.59013 3.61239 5.03115 3.59032 4.44709 3.65425C3.34739 3.77318 2.46904 4.27766 1.82337 5.13901C1.04768 6.17437 0.865163 7.35068 1.08876 8.57773C1.32376 9.8708 2.00362 10.9414 3.04857 11.7786C4.1323 12.6465 5.38029 13.0716 6.80394 12.9901C7.66864 12.9417 8.63144 12.8293 9.71744 11.9372C9.9912 12.0694 10.2787 12.1222 10.7555 12.1618C11.1229 12.1949 11.4765 12.1442 11.7503 12.0892C12.1792 12.0011 12.1495 11.6155 11.9944 11.5451C10.7373 10.9767 11.0133 11.208 10.7624 11.0207C11.4012 10.2872 12.364 9.52496 12.7405 7.05549C12.7701 6.85946 12.745 6.73607 12.7405 6.57747C12.7382 6.48056 12.761 6.44313 12.8751 6.43208C13.1899 6.39683 13.4956 6.31315 13.7763 6.16334C14.5908 5.73159 14.9193 5.02225 14.9969 4.17193C15.0083 4.04194 14.9946 3.90754 14.8531 3.83931ZM7.75533 11.4921C6.53701 10.5626 5.94612 10.2563 5.70198 10.2696C5.47383 10.2828 5.5149 10.5361 5.56507 10.7014C5.61756 10.8643 5.68601 10.9767 5.78181 11.1199C5.84798 11.2146 5.89364 11.3556 5.71568 11.4613C5.32325 11.6971 4.64106 11.382 4.6091 11.3666C3.81517 10.9128 3.15125 10.3136 2.68351 9.49416C2.23177 8.70546 1.96942 7.85959 1.92605 6.95639C1.91464 6.73832 1.98081 6.66117 2.2044 6.62157C2.49871 6.56869 2.80216 6.55764 3.09647 6.59949C4.33993 6.77575 5.39853 7.31546 6.28602 8.17018C6.79251 8.65701 7.1758 9.23862 7.57052 9.80695C7.99031 10.4105 8.44205 10.9855 9.01699 11.4569C9.22003 11.6221 9.38202 11.7477 9.53716 11.8402C9.06948 11.8909 8.2892 11.9019 7.75533 11.4921ZM8.33939 7.84636C8.33939 7.74943 8.41926 7.67235 8.51967 7.67235C8.54248 7.67235 8.56301 7.6767 8.58127 7.6833C8.60638 7.69215 8.6292 7.70538 8.64743 7.72516C8.67939 7.75603 8.69762 7.80006 8.69762 7.84634C8.69762 7.94327 8.61779 8.02035 8.51743 8.02035C8.41706 8.02035 8.33939 7.94329 8.33939 7.84636ZM10.1532 8.74956C10.0369 8.79584 9.9205 8.83544 9.80871 8.83987C9.63531 8.84867 9.44594 8.78037 9.34329 8.69666C9.18359 8.56668 9.0695 8.49402 9.0216 8.26711C9.00105 8.17018 9.01246 8.02037 9.03074 7.93449C9.0718 7.74943 9.02616 7.6305 8.89157 7.52252C8.78204 7.43439 8.64287 7.41019 8.49 7.41019C8.43296 7.41019 8.38052 7.38594 8.34171 7.36611C8.27782 7.33528 8.22538 7.25818 8.27555 7.16345C8.29152 7.13265 8.36911 7.05772 8.38737 7.04452C8.59499 6.92994 8.83455 6.96741 9.05585 7.05332C9.26121 7.13482 9.41635 7.28463 9.63992 7.49609C9.86807 7.75161 9.90912 7.82216 10.0392 8.01377C10.1419 8.16358 10.2354 8.31777 10.2993 8.49402C10.3381 8.60418 10.2878 8.69449 10.1532 8.74956Z'\n fill='#4D6BFE'\n />\n </svg>\n );\n}\n","// Gemini icon — Figma node 3512:10201\nimport { cn } from '@/lib/utils';\n\nexport function GeminiIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M13.4834 7.25875C12.4047 6.79445 11.461 6.15749 10.6518 5.34864C9.84291 4.5398 9.20592 3.59569 8.74162 2.51711C8.56338 2.10374 8.42015 1.67883 8.31034 1.24318C8.27453 1.10075 8.14682 1.00049 8.00001 1.00049C7.85318 1.00049 7.72547 1.10075 7.68968 1.24318C7.57985 1.67883 7.43662 2.10334 7.25838 2.51711C6.79408 3.59569 6.15711 4.5398 5.34824 5.34864C4.53939 6.15749 3.59525 6.79445 2.51665 7.25875C2.10327 7.43698 1.67836 7.5802 1.2427 7.69003C1.10026 7.72582 1 7.85353 1 8.00036C1 8.14716 1.10026 8.27487 1.2427 8.31068C1.67836 8.42049 2.10288 8.56371 2.51665 8.74195C3.59525 9.20624 4.539 9.84322 5.34824 10.6521C6.1575 11.4609 6.79408 12.405 7.25838 13.4836C7.43662 13.897 7.57985 14.3219 7.68968 14.7575C7.72547 14.9 7.85318 15.0002 8.00001 15.0002C8.14682 15.0002 8.27453 14.9 8.31034 14.7575C8.42015 14.3219 8.56338 13.8974 8.74162 13.4836C9.20592 12.405 9.84291 11.4613 10.6518 10.6521C11.4606 9.84322 12.4047 9.20624 13.4834 8.74195C13.8967 8.56371 14.3216 8.42049 14.7573 8.31068C14.8997 8.27487 15 8.14716 15 8.00036C15 7.85353 14.8997 7.72582 14.7573 7.69003C14.3216 7.5802 13.8971 7.43698 13.4834 7.25875Z'\n fill='white'\n />\n <mask\n id='mask0_3512_10201'\n style={{ maskType: 'alpha' }}\n maskUnits='userSpaceOnUse'\n x='1'\n y='1'\n width='14'\n height='14'\n >\n <path\n d='M7.99997 1C8.14678 1 8.27447 1.10027 8.31028 1.2427C8.42009 1.67834 8.56331 2.10327 8.74155 2.51663C9.20583 3.5952 9.84291 4.53925 10.6518 5.34808C11.461 6.1569 12.4047 6.79396 13.4833 7.25826C13.897 7.43647 14.3216 7.57969 14.7572 7.6895C14.8996 7.72531 14.9999 7.85302 14.9999 7.99983C14.9999 8.14663 14.8997 8.27434 14.7572 8.31013C14.3216 8.41994 13.8966 8.56316 13.4833 8.74139C12.4047 9.20569 11.4606 9.84273 10.6518 10.6516C9.84291 11.4608 9.20585 12.4044 8.74155 13.483C8.56331 13.8968 8.42009 14.3213 8.31028 14.7569C8.27449 14.8994 8.14678 14.9996 7.99997 14.9996C7.85316 14.9996 7.72545 14.8994 7.68964 14.7569C7.57983 14.3213 7.4366 13.8963 7.25838 13.483C6.79408 12.4045 6.15739 11.4604 5.34817 10.6516C4.53891 9.84273 3.59525 9.20566 2.51666 8.74139C2.10289 8.56316 1.67835 8.41994 1.2427 8.31013C1.10027 8.27432 1 8.14663 1 7.99983C1.00002 7.85302 1.10028 7.72531 1.2427 7.6895C1.67836 7.57969 2.10329 7.43649 2.51666 7.25826C3.59527 6.79394 4.53932 6.15692 5.34817 5.34808C6.15702 4.53925 6.79406 3.59522 7.25838 2.51663C7.43662 2.10287 7.57983 1.67834 7.68964 1.2427C7.72545 1.10028 7.85316 1.00002 7.99997 1Z'\n fill='black'\n />\n <path\n d='M7.99997 1C8.14678 1 8.27447 1.10027 8.31028 1.2427C8.42009 1.67834 8.56331 2.10327 8.74155 2.51663C9.20583 3.5952 9.84291 4.53925 10.6518 5.34808C11.461 6.1569 12.4047 6.79396 13.4833 7.25826C13.897 7.43647 14.3216 7.57969 14.7572 7.6895C14.8996 7.72531 14.9999 7.85302 14.9999 7.99983C14.9999 8.14663 14.8997 8.27434 14.7572 8.31013C14.3216 8.41994 13.8966 8.56316 13.4833 8.74139C12.4047 9.20569 11.4606 9.84273 10.6518 10.6516C9.84291 11.4608 9.20585 12.4044 8.74155 13.483C8.56331 13.8968 8.42009 14.3213 8.31028 14.7569C8.27449 14.8994 8.14678 14.9996 7.99997 14.9996C7.85316 14.9996 7.72545 14.8994 7.68964 14.7569C7.57983 14.3213 7.4366 13.8963 7.25838 13.483C6.79408 12.4045 6.15739 11.4604 5.34817 10.6516C4.53891 9.84273 3.59525 9.20566 2.51666 8.74139C2.10289 8.56316 1.67835 8.41994 1.2427 8.31013C1.10027 8.27432 1 8.14663 1 7.99983C1.00002 7.85302 1.10028 7.72531 1.2427 7.6895C1.67836 7.57969 2.10329 7.43649 2.51666 7.25826C3.59527 6.79394 4.53932 6.15692 5.34817 5.34808C6.15702 4.53925 6.79406 3.59522 7.25838 2.51663C7.43662 2.10287 7.57983 1.67834 7.68964 1.2427C7.72545 1.10028 7.85316 1.00002 7.99997 1Z'\n fill='url(#paint0_linear_3512_10201)'\n />\n </mask>\n <g mask='url(#mask0_3512_10201)'>\n <g filter='url(#filter0_f_3512_10201)'>\n <path\n d='M-0.264191 11.9446C1.3534 12.5191 3.2126 11.442 3.88846 9.53892C4.56431 7.63582 3.80089 5.62738 2.1833 5.05294C0.56571 4.4785 -1.29349 5.55558 -1.96935 7.45867C-2.64521 9.36177 -1.88178 11.3702 -0.264191 11.9446Z'\n fill='#FFE432'\n />\n </g>\n <g filter='url(#filter1_f_3512_10201)'>\n <path\n d='M6.9183 5.67012C9.14057 5.67012 10.9421 3.82905 10.9421 1.55796C10.9421 -0.713121 9.14057 -2.5542 6.9183 -2.5542C4.69604 -2.5542 2.89453 -0.713121 2.89453 1.55796C2.89453 3.82905 4.69604 5.67012 6.9183 5.67012Z'\n fill='#FC413D'\n />\n </g>\n <g filter='url(#filter2_f_3512_10201)'>\n <path\n d='M5.35356 18.821C7.67335 18.7074 9.435 16.1792 9.28833 13.174C9.14166 10.1689 7.1422 7.8248 4.82242 7.93838C2.50263 8.05197 0.740971 10.5802 0.887641 13.5854C1.03431 16.5905 3.03377 18.9346 5.35356 18.821Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter3_f_3512_10201)'>\n <path\n d='M5.35356 18.821C7.67335 18.7074 9.435 16.1792 9.28833 13.174C9.14166 10.1689 7.1422 7.8248 4.82242 7.93838C2.50263 8.05197 0.740971 10.5802 0.887641 13.5854C1.03431 16.5905 3.03377 18.9346 5.35356 18.821Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter4_f_3512_10201)'>\n <path\n d='M7.67771 17.0029C9.62249 15.8197 10.143 13.1249 8.84034 10.9839C7.53767 8.8429 4.90508 8.0665 2.9603 9.24975C1.01552 10.433 0.494992 13.1278 1.79767 15.2688C3.10034 17.4098 5.73293 18.1862 7.67771 17.0029Z'\n fill='#00B95C'\n />\n </g>\n <g filter='url(#filter5_f_3512_10201)'>\n <path\n d='M15.5385 10.2746C17.7244 10.2746 19.4964 8.56823 19.4964 6.46334C19.4964 4.35845 17.7244 2.6521 15.5385 2.6521C13.3526 2.6521 11.5806 4.35845 11.5806 6.46334C11.5806 8.56823 13.3526 10.2746 15.5385 10.2746Z'\n fill='#3186FF'\n />\n </g>\n <g filter='url(#filter6_f_3512_10201)'>\n <path\n d='M-1.81884 9.8328C0.193829 11.3633 3.13412 10.8831 4.74849 8.7603C6.36286 6.63745 6.03998 3.67581 4.02731 2.14528C2.01464 0.614758 -0.925648 1.09493 -2.54002 3.21778C-4.15439 5.34063 -3.8315 8.30228 -1.81884 9.8328Z'\n fill='#FBBC04'\n />\n </g>\n <g filter='url(#filter7_f_3512_10201)'>\n <path\n d='M8.49415 12.0947C10.8965 13.7463 14.0809 13.2862 15.6067 11.067C17.1325 8.84777 16.4219 5.70982 14.0195 4.05818C11.6172 2.40654 8.43278 2.86666 6.907 5.08588C5.38121 7.30511 6.0918 10.4431 8.49415 12.0947Z'\n fill='#3186FF'\n />\n </g>\n <g filter='url(#filter8_f_3512_10201)'>\n <path\n d='M12.8618 0.495981C13.4729 1.32693 12.6876 2.94257 11.1077 4.1046C9.52771 5.26664 7.75145 5.53503 7.14028 4.70409C6.52908 3.87314 7.31444 2.2575 8.89436 1.09547C10.4743 -0.0665693 12.2506 -0.334969 12.8618 0.495981Z'\n fill='#749BFF'\n />\n </g>\n <g filter='url(#filter9_f_3512_10201)'>\n <path\n d='M7.84441 4.47389C10.2878 2.20754 11.1264 -0.860964 9.71758 -2.37981C8.30872 -3.89865 5.18586 -3.29267 2.74249 -1.02632C0.299108 1.24003 -0.539536 4.30854 0.869322 5.82738C2.27818 7.34622 5.40103 6.74025 7.84441 4.47389Z'\n fill='#FC413D'\n />\n </g>\n <g filter='url(#filter10_f_3512_10201)'>\n <path\n d='M2.83607 12.6143C4.28829 13.6536 5.95555 13.8116 6.56 12.9671C7.16446 12.1225 6.4772 10.5954 5.02498 9.556C3.57276 8.51664 1.9055 8.35869 1.30105 9.20321C0.696601 10.0477 1.38385 11.5749 2.83607 12.6143Z'\n fill='#FFEE48'\n />\n </g>\n </g>\n <defs>\n <filter\n id='filter0_f_3512_10201'\n x='-3.01023'\n y='4.10378'\n width='7.93965'\n height='8.79'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.397328'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter1_f_3512_10201'\n x='-0.947209'\n y='-6.39594'\n width='15.7311'\n height='15.9078'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.92087'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter2_f_3512_10201'\n x='-2.38671'\n y='4.66859'\n width='14.9494'\n height='17.4222'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter3_f_3512_10201'\n x='-2.38671'\n y='4.66859'\n width='14.9494'\n height='17.4222'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter4_f_3512_10201'\n x='-2.18553'\n y='5.43043'\n width='15.0093'\n height='15.3918'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.63293'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter5_f_3512_10201'\n x='8.47705'\n y='-0.451419'\n width='14.1228'\n height='13.8295'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.55176'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter6_f_3512_10201'\n x='-6.38031'\n y='-1.56256'\n width='14.9691'\n height='15.1033'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.40634'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter7_f_3512_10201'\n x='3.59144'\n y='0.555303'\n width='15.3308'\n height='15.0422'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.25592'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter8_f_3512_10201'\n x='4.68523'\n y='-2.23444'\n width='10.6315'\n height='9.66896'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.12381'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter9_f_3512_10201'\n x='-1.7126'\n y='-5.11507'\n width='14.0121'\n height='13.6776'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.949197'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <filter\n id='filter10_f_3512_10201'\n x='-1.26804'\n y='6.31057'\n width='10.3972'\n height='9.54903'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='1.17479'\n result='effect1_foregroundBlur_3512_10201'\n />\n </filter>\n <linearGradient\n id='paint0_linear_3512_10201'\n x1='4.97972'\n y1='10.367'\n x2='12.251'\n y2='4.23654'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#4893FC' />\n <stop offset='0.27' stopColor='#4893FC' />\n <stop offset='0.776981' stopColor='#969DFF' />\n <stop offset='1' stopColor='#BD99FE' />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","// Google icon — Figma node 3003:3042\nimport { cn } from '@/lib/utils';\n\nexport function GoogleIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <defs>\n {/* G-shape clip path from google-mask.svg, translated to match original 9.38%/10.23% inset layout */}\n <clipPath id='google-g-clip'>\n <path\n transform='translate(1.637, 1.5)'\n d='M12.6058 5.2941H6.49957V7.79314H10.0082C9.95182 8.14681 9.82517 8.49474 9.6397 8.81199C9.42721 9.17546 9.16451 9.45219 8.89525 9.66292C8.08869 10.2942 7.14836 10.4233 6.49531 10.4233C4.84561 10.4233 3.43605 9.33425 2.89038 7.85448C2.86836 7.80078 2.85373 7.74531 2.83593 7.69048C2.71535 7.31386 2.64946 6.91499 2.64946 6.50041C2.64946 6.06895 2.72081 5.65594 2.85089 5.26587C3.36401 3.72743 4.80534 2.57837 6.49649 2.57837C6.83665 2.57837 7.16421 2.61972 7.47485 2.70221C8.18477 2.89071 8.68693 3.26198 8.99464 3.55565L10.8513 1.69854C9.7219 0.640882 8.24962 0 6.49341 0C5.08943 0 3.79321 0.446757 2.73101 1.20184C1.86959 1.8142 1.16311 2.63406 0.686317 3.58624C0.242835 4.46911 0 5.44749 0 6.49944C0 7.55143 0.243206 8.53998 0.68669 9.41469V9.42058C1.15512 10.3492 1.84012 11.1487 2.67267 11.7583C3.39999 12.2908 4.70415 13 6.49341 13C7.52236 13 8.4343 12.8105 9.23855 12.4554C9.81872 12.1993 10.3328 11.8652 10.7982 11.4358C11.4131 10.8684 11.8947 10.1666 12.2234 9.35918C12.5522 8.55175 12.728 7.63869 12.728 6.64878C12.728 6.18776 12.6827 5.71957 12.6058 5.29405V5.2941Z'\n />\n </clipPath>\n </defs>\n <g clipPath='url(#google-g-clip)'>\n {/* google.svg content scaled to fit the 12.728×13 area at offset (1.637, 1.5) */}\n <svg\n x='1.637'\n y='1.5'\n width='12.728'\n height='13'\n viewBox='0 0 12.9934 13.226'\n preserveAspectRatio='none'\n >\n <defs>\n <filter\n id='filter0_f_0_4'\n x='0.00123978'\n y='6.59908'\n width='5.01811'\n height='4.65866'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter1_f_0_4'\n x='6.41386'\n y='0.0083065'\n width='4.65522'\n height='3.72592'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter2_f_0_4'\n x='1.61592'\n y='0'\n width='5.10149'\n height='4.13858'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter3_f_0_4'\n x='6.00225'\n y='6.70434'\n width='6.97976'\n height='6.51173'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter4_f_0_4'\n x='6.49965'\n y='5.25479'\n width='6.49376'\n height='2.76446'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter5_f_0_4'\n x='0'\n y='2.12696'\n width='4.17777'\n height='4.80938'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter6_f_0_4'\n x='1.08794'\n y='0.303909'\n width='4.36359'\n height='3.80976'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.132733'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter7_f_0_4'\n x='1.90901'\n y='9.87395'\n width='4.76089'\n height='3.35204'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <filter\n id='filter8_f_0_4'\n x='5.80414'\n y='10.2966'\n width='1.65634'\n height='2.92939'\n filterUnits='userSpaceOnUse'\n colorInterpolationFilters='sRGB'\n >\n <feFlood floodOpacity={0} result='BackgroundImageFix' />\n <feBlend\n mode='normal'\n in='SourceGraphic'\n in2='BackgroundImageFix'\n result='shape'\n />\n <feGaussianBlur\n stdDeviation='0.0188799'\n result='effect1_foregroundBlur_0_4'\n />\n </filter>\n <radialGradient\n id='paint0_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(4.92213 11.1224) rotate(-92.3395) scale(6.47935 9.51739)'\n >\n <stop offset='0.141612' stopColor='#1ABD4D' />\n <stop offset='0.247515' stopColor='#6EC30D' />\n <stop offset='0.311547' stopColor='#8AC502' />\n <stop offset='0.366013' stopColor='#A2C600' />\n <stop offset='0.445673' stopColor='#C8C903' />\n <stop offset='0.540305' stopColor='#EBCB03' />\n <stop offset='0.615636' stopColor='#F7CD07' />\n <stop offset='0.699345' stopColor='#FDCD04' />\n <stop offset='0.771242' stopColor='#FDCE05' />\n <stop offset='0.860566' stopColor='#FFCE0A' />\n </radialGradient>\n <radialGradient\n id='paint1_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientTransform='matrix(4.49175 -1.1026e-05 -6.31333e-06 5.80085 10.8532 3.55867)'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='0.408458' stopColor='#FB4E5A' />\n <stop offset='1' stopColor='#FF4540' />\n </radialGradient>\n <radialGradient\n id='paint2_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(8.40027 -0.801934) rotate(151.02) scale(7.19406 9.76228)'\n >\n <stop offset='0.231273' stopColor='#FF4541' />\n <stop offset='0.311547' stopColor='#FF4540' />\n <stop offset='0.457516' stopColor='#FF4640' />\n <stop offset='0.540305' stopColor='#FF473F' />\n <stop offset='0.699346' stopColor='#FF5138' />\n <stop offset='0.771242' stopColor='#FF5B33' />\n <stop offset='0.860566' stopColor='#FF6C29' />\n <stop offset='1' stopColor='#FF8C18' />\n </radialGradient>\n <radialGradient\n id='paint3_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(6.7259 12.3369) rotate(-127.454) scale(18.7675 6.92755)'\n >\n <stop offset='0.131546' stopColor='#0CBA65' />\n <stop offset='0.209784' stopColor='#0BB86D' />\n <stop offset='0.297297' stopColor='#09B479' />\n <stop offset='0.396257' stopColor='#08AD93' />\n <stop offset='0.477124' stopColor='#0AA6A9' />\n <stop offset='0.568425' stopColor='#0D9CC6' />\n <stop offset='0.667385' stopColor='#1893DD' />\n <stop offset='0.768727' stopColor='#258BF1' />\n <stop offset='0.858506' stopColor='#3086FF' />\n </radialGradient>\n <radialGradient\n id='paint4_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(6.07459 1.26562) rotate(96.6178) scale(7.00829 9.69018)'\n >\n <stop offset='0.366013' stopColor='#FF4E3A' />\n <stop offset='0.457516' stopColor='#FF8A1B' />\n <stop offset='0.540305' stopColor='#FFA312' />\n <stop offset='0.615636' stopColor='#FFB60C' />\n <stop offset='0.771242' stopColor='#FFCD0A' />\n <stop offset='0.860566' stopColor='#FECF0A' />\n <stop offset='0.915033' stopColor='#FECF08' />\n <stop offset='1' stopColor='#FDCD01' />\n </radialGradient>\n <radialGradient\n id='paint5_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientUnits='userSpaceOnUse'\n gradientTransform='translate(4.93896 1.1933) rotate(132.119) scale(3.48096 9.81819)'\n >\n <stop offset='0.315904' stopColor='#FF4C3C' />\n <stop offset='0.603818' stopColor='#FF692C' />\n <stop offset='0.726837' stopColor='#FF7825' />\n <stop offset='0.884534' stopColor='#FF8D1B' />\n <stop offset='1' stopColor='#FF9F13' />\n </radialGradient>\n <radialGradient\n id='paint6_radial_0_4'\n cx='0'\n cy='0'\n r='1'\n gradientTransform='matrix(-6.29326 -3.48558 4.72991 -8.5399 8.40022 13.9884)'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='0.231273' stopColor='#0FBC5F' />\n <stop offset='0.311547' stopColor='#0FBC5F' />\n <stop offset='0.366013' stopColor='#0FBC5E' />\n <stop offset='0.457516' stopColor='#0FBC5D' />\n <stop offset='0.540305' stopColor='#12BC58' />\n <stop offset='0.699346' stopColor='#28BF3C' />\n <stop offset='0.771242' stopColor='#38C02B' />\n <stop offset='0.860566' stopColor='#52C218' />\n <stop offset='0.915033' stopColor='#67C30F' />\n <stop offset='1' stopColor='#86C504' />\n </radialGradient>\n <linearGradient\n id='paint7_linear_0_4'\n x1='5.8419'\n y1='11.7613'\n x2='7.42272'\n y2='11.7613'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#0FBC5C' />\n <stop offset='1' stopColor='#0CBA65' />\n </linearGradient>\n </defs>\n <g id='Group'>\n <g id='Vector' filter='url(#filter0_f_0_4)'>\n <path\n d='M0.0389995 6.63684C0.0457489 7.67224 0.334607 8.7405 0.771843 9.60288V9.60882C1.08777 10.2351 1.51954 10.7298 2.01133 11.22L4.98159 10.113C4.41963 9.82148 4.33389 9.64283 3.93105 9.31684C3.5194 8.89287 3.21259 8.40614 3.02152 7.83544H3.01382L3.02152 7.8295C2.89581 7.45263 2.88341 7.05259 2.87878 6.63684H0.0389995Z'\n fill='url(#paint0_radial_0_4)'\n />\n </g>\n <g id='Vector_2' filter='url(#filter1_f_0_4)'>\n <path\n d='M6.63213 0.0460663C6.33855 1.0995 6.4508 2.12346 6.63213 2.71925C6.97115 2.71951 7.29773 2.76079 7.6074 2.84301C8.31732 3.03152 8.81943 3.4028 9.12713 3.69647L11.0313 1.79191C9.90328 0.735517 8.54574 0.0477307 6.63213 0.0460663Z'\n fill='url(#paint1_radial_0_4)'\n />\n </g>\n <g id='Vector_3' filter='url(#filter2_f_0_4)'>\n <path\n d='M6.62582 0.0377598C5.1858 0.037728 3.85631 0.495986 2.76684 1.27046C2.36232 1.55802 1.9911 1.8902 1.66055 2.25959C1.57395 3.08935 2.30878 4.10921 3.76398 4.10077C4.47003 3.26192 5.51426 2.71919 6.6765 2.71919C6.67756 2.71919 6.67859 2.71927 6.67965 2.71928L6.63219 0.0379496C6.63004 0.0379482 6.62797 0.0377598 6.62582 0.0377598Z'\n fill='url(#paint2_radial_0_4)'\n />\n </g>\n <g id='Vector_4' filter='url(#filter3_f_0_4)'>\n <path\n d='M11.3788 6.93713L10.0935 7.839C10.0371 8.19267 9.91039 8.54059 9.72492 8.85784C9.51243 9.22132 9.24975 9.49805 8.98049 9.70879C8.1756 10.3387 7.23775 10.4684 6.58487 10.469C5.91005 11.6429 5.79174 12.2309 6.63233 13.1783C7.67248 13.1775 8.59461 12.9858 9.40799 12.6266C9.99595 12.367 10.5169 12.0284 10.9885 11.5933C11.6117 11.0183 12.0998 10.3071 12.433 9.48882C12.7661 8.67056 12.9443 7.74529 12.9443 6.7421L11.3788 6.93713Z'\n fill='url(#paint3_radial_0_4)'\n />\n </g>\n <g id='Vector_5' filter='url(#filter4_f_0_4)'>\n <path\n d='M6.53741 5.29255V7.98149H12.7214C12.7758 7.61324 12.9557 7.1367 12.9557 6.7422C12.9557 6.28118 12.9104 5.71807 12.8335 5.29255H6.53741Z'\n fill='#3086FF'\n />\n </g>\n <g id='Vector_6' filter='url(#filter5_f_0_4)'>\n <path\n d='M1.69018 2.16472C1.30857 2.59118 0.982551 3.06851 0.724059 3.58474C0.280584 4.46761 0.0377598 5.54093 0.0377598 6.59288C0.0377598 6.6077 0.038961 6.6222 0.0390579 6.637C0.23546 7.02162 2.75199 6.94797 2.87884 6.637C2.87868 6.62249 2.87708 6.60835 2.87708 6.5938C2.87708 6.16234 2.94844 5.84432 3.07853 5.45425C3.239 4.9731 3.49028 4.53003 3.81158 4.14829C3.88442 4.05331 4.0787 3.84913 4.13538 3.72666C4.15697 3.68001 4.09618 3.65383 4.09278 3.63741C4.08898 3.61904 4.00747 3.63381 3.98921 3.62013C3.93124 3.5767 3.81643 3.55402 3.74671 3.53386C3.5977 3.49076 3.35075 3.39573 3.21359 3.29722C2.78001 2.98582 2.10339 2.61387 1.69018 2.16472Z'\n fill='url(#paint4_radial_0_4)'\n />\n </g>\n <g id='Vector_7' filter='url(#filter6_f_0_4)'>\n <path\n d='M3.22306 3.63913C4.22847 4.26118 4.51761 3.32515 5.18606 3.03225L4.02326 0.569376C3.59552 0.752998 3.19139 0.981132 2.81641 1.24769C2.25643 1.64576 1.76191 2.13153 1.35341 2.68435L3.22306 3.63913Z'\n fill='url(#paint5_radial_0_4)'\n />\n </g>\n <g id='Vector_8' filter='url(#filter7_f_0_4)'>\n <path\n d='M3.63192 9.92279C2.28229 10.4204 2.071 10.4383 1.94677 11.2926C2.18417 11.5292 2.43924 11.7481 2.7103 11.9465C3.43762 12.479 4.83667 13.1882 6.62593 13.1882C6.62803 13.1882 6.63004 13.188 6.63214 13.188V10.4215C6.63079 10.4215 6.62923 10.4216 6.62788 10.4216C5.95786 10.4216 5.42245 10.2419 4.87349 9.92929C4.73814 9.85222 4.49258 10.0592 4.36775 9.96665C4.19559 9.83906 3.78125 10.0766 3.63192 9.92279Z'\n fill='url(#paint6_radial_0_4)'\n />\n </g>\n <g id='Vector_9' opacity='0.5' filter='url(#filter8_f_0_4)'>\n <path\n d='M5.8419 10.3344V13.1401C6.09225 13.17 6.35278 13.1882 6.6261 13.1882C6.90009 13.1882 7.16515 13.1738 7.42272 13.1474V10.3533C7.13408 10.4037 6.86223 10.4216 6.62805 10.4216C6.35834 10.4216 6.09604 10.3895 5.8419 10.3344Z'\n fill='url(#paint7_linear_0_4)'\n />\n </g>\n </g>\n </svg>\n </g>\n </svg>\n );\n}\n","// OpenAI icon — Figma node 3512:10197\nimport { cn } from \"@/lib/utils\";\n\nexport function OpenAiIcon({ className }: { className?: string }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0 size-4\", className)}\n >\n <path d=\"M14.0768 6.73012C14.3987 5.77679 14.2879 4.73246 13.7731 3.86531C12.9989 2.53529 11.4427 1.85102 9.92273 2.17303C9.24656 1.42139 8.2751 0.99394 7.25664 1.00006C5.70301 0.996565 4.32452 1.98359 3.84655 3.44224C2.84849 3.64393 1.98699 4.26038 1.48286 5.13409C0.70294 6.46062 0.880738 8.13278 1.9227 9.2703C1.6008 10.2236 1.71164 11.268 2.22642 12.1351C3.00057 13.4651 4.55686 14.1494 6.07679 13.8274C6.75251 14.579 7.72441 15.0065 8.74287 14.9999C10.2974 15.0039 11.6763 14.016 12.1543 12.556C13.1524 12.3543 14.0139 11.7379 14.518 10.8642C15.297 9.53762 15.1188 7.86677 14.0773 6.72925L14.0768 6.73012ZM8.74376 14.0851C8.12169 14.086 7.51913 13.8712 7.0416 13.4778C7.06332 13.4665 7.10101 13.4459 7.1254 13.431L9.95066 11.821C10.0952 11.74 10.1839 11.5882 10.183 11.4242V7.49402L11.377 8.17434C11.3899 8.18047 11.3983 8.19272 11.4001 8.20672V11.4614C11.3983 12.9086 10.2105 14.082 8.74376 14.0851ZM3.03116 11.6775C2.71946 11.1463 2.60729 10.5238 2.71414 9.91957C2.73498 9.93182 2.77178 9.95413 2.79794 9.96901L5.6232 11.579C5.76642 11.6617 5.94377 11.6617 6.08743 11.579L9.53654 9.61375V10.9744C9.53742 10.9884 9.53077 11.002 9.51969 11.0107L6.66383 12.6378C5.39176 13.3606 3.76719 12.9309 3.03161 11.6775H3.03116ZM2.2876 5.59216C2.59798 5.06015 3.08792 4.65327 3.67141 4.44195C3.67141 4.46601 3.67008 4.50845 3.67008 4.5382V7.75871C3.6692 7.92234 3.75788 8.07415 3.90198 8.15509L7.35108 10.1199L6.15704 10.8003C6.14507 10.8081 6.12999 10.8095 6.11669 10.8038L3.2604 9.17536C1.99098 8.44997 1.55557 6.84738 2.28716 5.5926L2.2876 5.59216ZM12.098 7.8449L8.64888 5.87961L9.84292 5.19972C9.85489 5.19184 9.86996 5.19053 9.88326 5.19622L12.7396 6.82331C14.0112 7.54827 14.447 9.15349 13.7124 10.4083C13.4015 10.9394 12.912 11.3463 12.329 11.558V8.24128C12.3303 8.07765 12.2421 7.92628 12.0984 7.8449H12.098ZM13.2863 6.07999C13.2654 6.0673 13.2286 6.04542 13.2025 6.03055L10.3772 4.42051C10.234 4.33782 10.0566 4.33782 9.91297 4.42051L6.46386 6.38581V5.02515C6.46298 5.01115 6.46963 4.99759 6.48071 4.98884L9.33657 3.36305C10.6086 2.63897 12.235 3.06992 12.9684 4.32557C13.2783 4.85583 13.3905 5.47666 13.2854 6.07999H13.2863ZM5.81475 8.5051L4.62026 7.82477C4.6074 7.81865 4.59898 7.8064 4.59721 7.7924V4.53777C4.59809 3.08873 5.78947 1.91446 7.25797 1.91533C7.87916 1.91533 8.48039 2.13059 8.95792 2.5226C8.93619 2.53397 8.89895 2.55454 8.87412 2.56941L6.04885 4.17945C5.90431 4.26038 5.81563 4.41176 5.81652 4.57583L5.81475 8.50423V8.5051ZM6.46342 7.1252L7.99976 6.24974L9.53609 7.12476V8.87523L7.99976 9.75025L6.46342 8.87523V7.1252Z\" fill=\"black\"/>\n </svg>\n );\n}\n","// Upstage (Solar) icon — Figma node 3512:10199\nimport { cn } from '@/lib/utils';\n\nexport function UpstageIcon({ className }: { className?: string }) {\n return (\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden\n className={cn('shrink-0 size-4', className)}\n >\n <path\n d='M12.1333 1L11.9366 1.75658H13.3048L13.5 1H12.1333ZM10.2497 2.32417L10.0514 3.08133H12.963L13.1582 2.32417H10.2497ZM8.51165 3.64833L8.31332 4.4055H12.6207L12.8159 3.64833H8.51165ZM3.21209 4.9725L3.01323 5.72967H12.2784L12.4735 4.97308H3.21104L3.21209 4.9725ZM3.7575 6.29725L3.55917 7.05383H11.9366L12.1317 6.29725H3.75645H3.7575ZM3.86511 15L4.06344 14.2434H2.69306L2.5 15H3.86511ZM5.75031 13.6758L5.94864 12.9192H3.03539L2.84286 13.6758H5.75031ZM7.48835 12.3511L7.68668 11.5945H3.37719L3.18414 12.3511H7.48835ZM12.7884 11.0269L12.9868 10.2703H3.71953L3.52647 11.0269H12.7884ZM12.2409 9.70275L12.4392 8.94617H4.06186L3.8688 9.70275H12.2409ZM11.618 8.37858L11.8163 7.622H3.95584L3.76278 8.37858H11.6185H11.618Z'\n fill='url(#paint0_linear_3512_10199)'\n />\n <defs>\n <linearGradient\n id='paint0_linear_3512_10199'\n x1='8'\n y1='1'\n x2='8'\n y2='15'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='#AEBCFE' />\n <stop offset='1' stopColor='#805DFA' />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentBlogIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-blog.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentCsIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-cs.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentDataIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-data.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentHrIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-hr.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentMailIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-mail.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function AgentTrendIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/agent-trend.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","// AI 에이전트 icon — Figma lucide/aiagent (node 3101:6885)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiAgentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 19.5002 21.0003\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M8.47946 18.7503C7.56995 18.6171 6.69834 18.3505 5.88357 17.9697C5.60883 17.8365 5.16355 17.7793 4.86985 17.846C4.24457 17.9983 3.19296 18.2553 2.3024 18.4647C1.44974 18.6742 0.919194 18.1411 1.12762 17.2843L1.74343 14.7141C1.81922 14.419 1.74343 13.962 1.62027 13.6859C0.86235 12.0867 0.559182 10.2304 0.871824 8.27887C1.47816 4.52813 4.49089 1.4914 8.22366 0.872636C14.3818 -0.126913 19.6304 5.1469 18.6261 11.3346C18.4745 12.2485 18.1998 13.1148 17.8114 13.9049M13.5987 14.7668C13.7576 14.0782 14.7417 14.0782 14.9006 14.7668L14.9014 14.7683L15.0945 15.6184C15.1833 16.0091 15.4905 16.3162 15.8813 16.4052L16.7321 16.599H16.7336C17.4222 16.7579 17.4221 17.742 16.7336 17.901L16.7321 17.9017L15.882 18.0948C15.4913 18.1837 15.1834 18.4909 15.0945 18.8816L14.9014 19.7325L14.9006 19.734C14.7417 20.4224 13.7576 20.4225 13.5987 19.734V19.7325L13.4048 18.8823C13.327 18.5405 13.0823 18.2622 12.7606 18.1386L12.6181 18.0948L11.768 17.9017L11.7664 17.901C11.0779 17.7421 11.0779 16.7579 11.7664 16.599H11.768L12.6181 16.4052L12.7606 16.3622C13.0825 16.2385 13.3271 15.9604 13.4048 15.6184L13.5987 14.7683V14.7668Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","// AI 빌더 icon — Figma lucide/aibuilder (node 4043:15581)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiBuilderIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 18.6801 21.5001\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M9.34003 13.75C4.6 13.75 0.75 16.88 0.75 20.75M17.9301 20.7501C17.9301 19.8401 17.7201 18.9801 17.3301 18.1801M9.34009 10.75C12.1001 10.75 14.3401 8.51 14.3401 5.75C14.3401 2.99 12.1001 0.75 9.34009 0.75C6.58009 0.75 4.34009 2.99 4.34009 5.75C4.34009 8.51 6.58009 10.75 9.34009 10.75ZM17.0901 15.52L16.0101 15.77C15.2401 15.95 14.6301 16.55 14.4501 17.32L14.2001 18.4C14.1801 18.51 14.0101 18.51 13.9801 18.4L13.7301 17.32C13.5501 16.55 12.9501 15.94 12.1801 15.76L11.1001 15.51C10.9901 15.49 10.9901 15.32 11.1001 15.29L12.1801 15.04C12.9501 14.86 13.5601 14.26 13.7401 13.49L13.9901 12.41C14.0101 12.3 14.1801 12.3 14.2101 12.41L14.4601 13.49C14.6401 14.26 15.2401 14.87 16.0101 15.05L17.0901 15.3C17.2001 15.32 17.2001 15.49 17.0901 15.52Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","// AI 클라우드 icon — Figma lucide/aicloud (node 3101:6899)\n// Inline SVG — URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function AiCloudIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 22.5 18.5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M11.775 15.1742H18.1117C20.1214 15.1742 21.75 13.4433 21.75 11.3052C21.75 9.16817 20.1214 7.43726 18.1128 7.43726H17.0733C17.4849 5.48223 16.7772 3.46616 15.2148 2.14579C13.6524 0.826524 11.4726 0.406001 9.4986 1.04067C7.52355 1.67644 6.0525 3.27199 5.63985 5.22703C2.93925 5.22703 0.75 7.45391 0.75 10.2001C0.75 10.7477 0.836994 11.2747 0.997692 11.7674M6.15888 12.1002C5.99203 11.3908 4.95868 11.3908 4.79183 12.1002L4.79104 12.1018L4.58828 12.9777C4.49503 13.3803 4.17243 13.6966 3.76219 13.7883L2.86877 13.988H2.86719C2.14424 14.1517 2.1443 15.1656 2.86719 15.3294L2.86877 15.3302L3.7614 15.5291C4.1716 15.6207 4.49496 15.9372 4.58828 16.3397L4.79104 17.2164L4.79183 17.2179C4.95877 17.9273 5.99202 17.9273 6.15888 17.2179V17.2164L6.36244 16.3405C6.44412 15.9884 6.70108 15.7016 7.03884 15.5742L7.18853 15.5291L8.08115 15.3302L8.08274 15.3294C8.80575 15.1657 8.80575 14.1517 8.08274 13.988H8.08115L7.18853 13.7883L7.03884 13.744C6.70091 13.6166 6.44405 13.33 6.36244 12.9777L6.15888 12.1018V12.1002Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * AI Datacenter icon — SVG from public/icons/aidatacenter.svg\n * Uses stroke=\"currentColor\" for CSS color control.\n */\nexport function AiDatacenterIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.7018 17.917\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M15.625 3.125C15.625 4.50571 12.2671 5.625 8.125 5.625C3.98286 5.625 0.625 4.50571 0.625 3.125M15.625 3.125C15.625 1.74429 12.2671 0.625 8.125 0.625C3.98286 0.625 0.625 1.74429 0.625 3.125M15.625 3.125V10.2083M0.625 3.125V14.7917M0.625 14.7917C0.625 15.4547 1.41518 16.0906 2.8217 16.5594C4.22822 17.0283 6.13588 17.2917 8.125 17.2917C8.69035 17.2917 9.24912 17.2704 9.79167 17.2292M0.625 14.7917C0.624849 15.1266 0.826543 15.458 1.21811 15.7664C1.60968 16.0748 2.18313 16.3539 2.90444 16.587C3.62575 16.8201 4.4802 17.0025 5.41708 17.1234C6.35396 17.2443 7.35417 17.3013 8.35833 17.2908M0.625 8.95833C0.625 9.62137 1.41518 10.2573 2.8217 10.7261C4.22822 11.1949 6.13588 11.4583 8.125 11.4583C8.54666 11.4583 8.96466 11.4465 9.375 11.4234M12.8819 12.3222C13.021 11.731 13.8821 11.731 14.0211 12.3222L14.0218 12.3235L14.1908 13.0534C14.2685 13.3889 14.5373 13.6526 14.8792 13.7289L15.6237 13.8953H15.625C16.2275 14.0318 16.2274 14.8767 15.625 15.0132L15.6237 15.0138L14.8798 15.1796C14.538 15.2559 14.2685 15.5197 14.1908 15.8551L14.0218 16.5857L14.0211 16.587C13.882 17.1781 13.021 17.1781 12.8819 16.587V16.5857L12.7123 15.8558C12.6442 15.5623 12.4301 15.3233 12.1486 15.2172L12.0239 15.1796L11.28 15.0138L11.2787 15.0132C10.6762 14.8768 10.6762 14.0318 11.2787 13.8953H11.28L12.0239 13.7289L12.1486 13.692C12.4302 13.5858 12.6443 13.347 12.7123 13.0534L12.8819 12.3235V12.3222Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface AlignJustifyIconProps {\n className?: string;\n}\n\n/**\n * align-justify icon — SVG downloaded from Figma Lucide Icon library.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:64\n */\nexport function AlignJustifyIcon({ className }: AlignJustifyIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -5.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 0.75H18.75M0.75 6.75H18.75M0.75 12.75H18.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Align-left icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/align-left)\n */\nexport function AlignLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 9\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.5 0.5H0.5M8.5 4.5H0.5M9.833 8.5H0.5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function ArrowDownIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-5.54 -5.54 24 24\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6.45833 0.625V12.2917M6.45833 12.2917L12.2917 6.45833M6.45833 12.2917L0.625 6.45833\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Blockquote icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/quote)\n */\nexport function BlockquoteIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.8334 -2.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M7.23921 8.10008C7.23921 9.42557 8.26764 10.5001 9.53627 10.5001C10.8049 10.5001 11.8333 9.42557 11.8333 8.10008C11.8333 6.7746 10.8049 5.70008 9.53627 5.70008C8.26764 5.70008 7.23921 6.7746 7.23921 8.10008ZM7.23921 8.10008C6.85637 3.70008 8.00488 0.900082 10.302 0.500082M0.572549 8.10008C0.572549 9.42557 1.60098 10.5001 2.86961 10.5001C4.13824 10.5001 5.16667 9.42557 5.16667 8.10008C5.16667 6.7746 4.13824 5.70008 2.86961 5.70008C1.60098 5.70008 0.572549 6.7746 0.572549 8.10008ZM0.572549 8.10008C0.189707 3.70008 1.33822 0.900082 3.63535 0.500082\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Bold icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/bold)\n */\nexport function BoldIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-3.1667 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 5.83333H6.5C7.20724 5.83333 7.88552 6.11428 8.38562 6.61438C8.88571 7.11448 9.16667 7.79276 9.16667 8.5C9.16667 9.20724 8.88571 9.88552 8.38562 10.3856C7.88552 10.8857 7.20724 11.1667 6.5 11.1667H1.16667C0.989856 11.1667 0.820287 11.0964 0.695262 10.9714C0.570238 10.8464 0.5 10.6768 0.5 10.5V1.16667C0.5 0.989856 0.570238 0.820287 0.695262 0.695262C0.820287 0.570238 0.989856 0.5 1.16667 0.5H5.83333C6.54058 0.5 7.21885 0.780951 7.71895 1.28105C8.21905 1.78115 8.5 2.45942 8.5 3.16667C8.5 3.87391 8.21905 4.55219 7.71895 5.05229C7.21885 5.55238 6.54058 5.83333 5.83333 5.83333\" />\n </svg>\n );\n}\n","import { cn } from '@/lib/utils';\n\n/**\n * Book-open icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function BookOpenIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox='0 0 17.9167 16.25'\n fill='none'\n stroke='currentColor'\n strokeWidth='1.25'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n className={cn('shrink-0', className)}\n >\n <path d='M8.95833 3.95833C8.95833 3.07428 8.60714 2.22643 7.98202 1.60131C7.3569 0.976189 6.50905 0.625 5.625 0.625H0.625V13.125H6.45833C7.12137 13.125 7.75726 13.3884 8.2261 13.8572C8.69494 14.3261 8.95833 14.962 8.95833 15.625M8.95833 3.95833V15.625M8.95833 3.95833C8.95833 3.07428 9.30952 2.22643 9.93464 1.60131C10.5598 0.976189 11.4076 0.625 12.2917 0.625H17.2917V13.125H11.4583C10.7953 13.125 10.1594 13.3884 9.69057 13.8572C9.22172 14.3261 8.95833 14.962 8.95833 15.625' />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface BookUpIconProps {\n className?: string;\n}\n\n/**\n * Book-up icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:418 (lucide/book-up)\n */\nexport function BookUpIcon({ className }: BookUpIconProps) {\n return (\n <svg\n viewBox=\"-3.25 -1.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.75 18.25V3.25C0.75 2.58696 1.01339 1.95107 1.48223 1.48223C1.95107 1.01339 2.58696 0.75 3.25 0.75H16.75V20.75H3.25C2.58696 20.75 1.95107 20.4866 1.48223 20.0178C1.01339 19.5489 0.75 18.913 0.75 18.25ZM0.75 18.25C0.75 17.587 1.01339 16.9511 1.48223 16.4822C1.95107 16.0134 2.58696 15.75 3.25 15.75H16.75M8.75 11.75V5.75M8.75 5.75L5.75 8.75M8.75 5.75L11.75 8.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-check-fill icon — filled circle with white checkmark.\n * SVG downloaded from Figma design system.\n */\nexport function CircleCheckFillIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.917 17.917\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M8.958 16.458C13.1 16.458 16.458 13.1 16.458 8.958C16.458 4.817 13.1 1.458 8.958 1.458C4.817 1.458 1.458 4.817 1.458 8.958C1.458 13.1 4.817 16.458 8.958 16.458Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.458 8.958L8.125 10.625L11.458 7.292\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-help icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function CircleHelpIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M6.5332 6.4584C6.72912 5.90146 7.11583 5.43182 7.62483 5.13268C8.13383 4.83353 8.73228 4.72418 9.31418 4.82399C9.89608 4.92381 10.4239 5.22634 10.8041 5.67801C11.1843 6.12968 11.3924 6.70134 11.3915 7.29173C11.3915 8.9584 8.89154 9.79173 8.89154 9.79173M8.95833 13.125H8.96667M17.2917 8.95833C17.2917 13.5607 13.5607 17.2917 8.95833 17.2917C4.35596 17.2917 0.625 13.5607 0.625 8.95833C0.625 4.35596 4.35596 0.625 8.95833 0.625C13.5607 0.625 17.2917 4.35596 17.2917 8.95833Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Circle-outline icon — stroke-only circle.\n * SVG downloaded from Figma design system.\n */\nexport function CircleOutlineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.917 17.917\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M8.958 16.458C13.1 16.458 16.458 13.1 16.458 8.958C16.458 4.817 13.1 1.458 8.958 1.458C4.817 1.458 1.458 4.817 1.458 8.958C1.458 13.1 4.817 16.458 8.958 16.458Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Code icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/code)\n */\nexport function CodeIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-0.8334 -2.1666 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M11.1667 8.50013L13.8333 5.83347L11.1667 3.1668M3.16667 3.1668L0.5 5.83347L3.16667 8.50013M8.83333 0.500134L5.5 11.1668\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Code-square icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/square-code)\n */\nexport function CodeSquareIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.16667 4.83333L3.83333 6.5L5.16667 8.16667M7.83333 4.83333L9.16667 6.5L7.83333 8.16667M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Credit icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function CreditIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.3864 10.9375C11.9507 11.6921 11.2782 12.2819 10.4731 12.6154C9.66809 12.9488 8.77552 13.0073 7.93384 12.7818C7.09217 12.5563 6.34843 12.0593 5.81798 11.368C5.28752 10.6767 5 9.8297 5 8.95834C5 8.08697 5.28752 7.23995 5.81798 6.54865C6.34843 5.85735 7.09217 5.3604 7.93384 5.13488C8.77551 4.90935 9.66808 4.96785 10.4731 5.30131C11.2782 5.63477 11.9507 6.22454 12.3863 6.97917M17.2917 8.95833C17.2917 13.5607 13.5607 17.2917 8.95833 17.2917C4.35596 17.2917 0.625 13.5607 0.625 8.95833C0.625 4.35596 4.35596 0.625 8.95833 0.625C13.5607 0.625 17.2917 4.35596 17.2917 8.95833Z\" />\n </svg>\n );\n}\n","// download icon — Figma node 128:960 (lucide/download)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function DownloadIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.25 -2.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M18.75 12.75V16.75C18.75 17.2804 18.5393 17.7891 18.1642 18.1642C17.7891 18.5393 17.2804 18.75 16.75 18.75H2.75C2.21957 18.75 1.71086 18.5393 1.33579 18.1642C0.960714 17.7891 0.75 17.2804 0.75 16.75V12.75M4.75 7.75L9.75 12.75M9.75 12.75L14.75 7.75M9.75 12.75V0.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function DriveIcon({ className }: { className?: string }) {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src=\"/icons/drive.svg\" alt=\"\" aria-hidden className={cn(\"shrink-0\", className)} />;\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * File-code icon — SVG downloaded from Figma design system.\n * Source: public/icons/file-code.svg\n */\nexport function FileCodeIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 11.6667 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 7.5L3.16667 9.16667L4.5 10.8333M7.16667 7.5L8.5 9.16667L7.16667 10.8333M7.16667 0.5V3.16667C7.16667 3.52029 7.30714 3.85943 7.55719 4.10948C7.80724 4.35952 8.14638 4.5 8.5 4.5H11.1667M7.83333 0.5H1.83333C1.47971 0.5 1.14057 0.640476 0.890524 0.890524C0.640476 1.14057 0.5 1.47971 0.5 1.83333V12.5C0.5 12.8536 0.640476 13.1928 0.890524 13.4428C1.14057 13.6929 1.47971 13.8333 1.83333 13.8333H9.83333C10.187 13.8333 10.5261 13.6929 10.7761 13.4428C11.0262 13.1928 11.1667 12.8536 11.1667 12.5V3.83333L7.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * File-search icon — SVG downloaded from Figma design system.\n * Source: public/icons/file-search.svg\n */\nexport function FileSearchIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.5 0.5V3.16667C8.5 3.52029 8.64048 3.85943 8.89052 4.10948C9.14057 4.35952 9.47971 4.5 9.83333 4.5H12.5M2.012 13.1667C2.12874 13.3689 2.29653 13.5369 2.49858 13.6539C2.70063 13.7709 2.92986 13.8327 3.16333 13.8333H11.1667C11.5203 13.8333 11.8594 13.6929 12.1095 13.4428C12.3595 13.1928 12.5 12.8536 12.5 12.5V3.83333L9.16667 0.5H3.16667C2.81304 0.5 2.47391 0.640476 2.22386 0.890524C1.97381 1.14057 1.83333 1.47971 1.83333 1.83333V3.83333M5.16667 11.1667L4.16667 10.1667M4.5 8.5C4.5 9.60457 3.60457 10.5 2.5 10.5C1.39543 10.5 0.5 9.60457 0.5 8.5C0.5 7.39543 1.39543 6.5 2.5 6.5C3.60457 6.5 4.5 7.39543 4.5 8.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function FileTypeCornerIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6\" />\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\n <path d=\"M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16\" />\n <path d=\"M6 22h2\" />\n <path d=\"M7 14v8\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderBlueIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#AFDBFF\" />\n <stop offset=\"1\" stopColor=\"#7DC0F6\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A8D8FF\" />\n <stop offset=\"1\" stopColor=\"#6FBEFF\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Folder-closed icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.02\n */\nexport function FolderClosedIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.5833 12.5833\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.625 5.29167H13.9583M12.625 11.9583C12.9786 11.9583 13.3178 11.8179 13.5678 11.5678C13.8179 11.3178 13.9583 10.9786 13.9583 10.625V3.95833C13.9583 3.60471 13.8179 3.26557 13.5678 3.01552C13.3178 2.76548 12.9786 2.625 12.625 2.625H7.35833C7.13534 2.62719 6.91536 2.57341 6.71853 2.46859C6.5217 2.36377 6.35431 2.21125 6.23167 2.025L5.69167 1.225C5.57026 1.04065 5.40498 0.889319 5.21067 0.784598C5.01635 0.679876 4.79907 0.625036 4.57833 0.625H1.95833C1.60471 0.625 1.26557 0.765476 1.01552 1.01552C0.765476 1.26557 0.625 1.60471 0.625 1.95833V10.625C0.625 10.9786 0.765476 11.3178 1.01552 11.5678C1.26557 11.8179 1.60471 11.9583 1.95833 11.9583H12.625Z\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderGreenIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#B5F1CB\" />\n <stop offset=\"1\" stopColor=\"#5ECB86\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A3E5BB\" />\n <stop offset=\"1\" stopColor=\"#4ADE4C\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function FolderVioletIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n const f0 = `f0_${id}`;\n const f1 = `f1_${id}`;\n const f2 = `f2_${id}`;\n const p0 = `p0_${id}`;\n const p1 = `p1_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <g filter={`url(#${f0})`}>\n <g filter={`url(#${f1})`}>\n <path\n d=\"M6.9896 2C7.47943 2 7.95223 2.17976 8.31833 2.50518L9.43167 3.49482C9.79777 3.82024 10.2706 4 10.7604 4H17C18.1046 4 19 4.89543 19 6V15C19 16.6569 17.6569 18 16 18H4C2.34315 18 1 16.6569 1 15V4C1 2.89543 1.89543 2 3 2H6.9896Z\"\n fill={`url(#${p0})`}\n />\n </g>\n <path\n d=\"M3 2.25H6.98926C7.41786 2.25 7.832 2.40764 8.15234 2.69238L9.26562 3.68164C9.67749 4.04774 10.2097 4.25 10.7607 4.25H17C17.9665 4.25 18.75 5.0335 18.75 6V15C18.75 16.5188 17.5188 17.75 16 17.75H4C2.48122 17.75 1.25 16.5188 1.25 15V4C1.25 3.0335 2.0335 2.25 3 2.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6\" width=\"14\" height=\"9\" rx=\"0.75\" fill=\"white\" />\n <g filter={`url(#${f2})`}>\n <path\n d=\"M1 10C1 8.89543 1.89543 8 3 8H17C18.1046 8 19 8.89543 19 10V15.75C19 16.9927 17.9926 18 16.75 18H3.25C2.00736 18 1 16.9927 1 15.75V10Z\"\n fill={`url(#${p1})`}\n />\n </g>\n <path\n d=\"M3 8.25H17C17.9665 8.25 18.75 9.0335 18.75 10V15.75C18.75 16.8546 17.8546 17.75 16.75 17.75H3.25C2.14543 17.75 1.25 16.8546 1.25 15.75V10C1.25 9.0335 2.0335 8.25 3 8.25Z\"\n stroke=\"white\"\n strokeOpacity=\"0.6\"\n strokeWidth=\"0.5\"\n />\n </g>\n </g>\n <defs>\n <filter\n id={f0}\n x=\"-1.25\"\n y=\"0.5\"\n width=\"22.5\"\n height=\"20.5\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"0.75\" />\n <feGaussianBlur stdDeviation=\"1.125\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_dropShadow_${id}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect1_dropShadow_${id}`}\n result=\"shape\"\n />\n </filter>\n <filter\n id={f1}\n x=\"1\"\n y=\"2\"\n width=\"18\"\n height=\"16\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect1_innerShadow_${id}`}\n />\n </filter>\n <filter\n id={f2}\n x=\"1\"\n y=\"8\"\n width=\"18\"\n height=\"10\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset />\n <feGaussianBlur stdDeviation=\"0.375\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"shape\"\n result={`effect2_innerShadow_${id}`}\n />\n </filter>\n <linearGradient\n id={p0}\n x1=\"10\"\n y1=\"1.5\"\n x2=\"10\"\n y2=\"7.875\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#D9D1F5\" />\n <stop offset=\"1\" stopColor=\"#AC9CE9\" />\n </linearGradient>\n <linearGradient\n id={p1}\n x1=\"10\"\n y1=\"7.5\"\n x2=\"10\"\n y2=\"18\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#E1DAFF\" />\n <stop offset=\"1\" stopColor=\"#C4B5FD\" />\n </linearGradient>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function HangulFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const grad = `grad_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill={`url(#${grad})`}\n />\n <rect x=\"9.33325\" y=\"6.99963\" width=\"1.33333\" height=\"1.33333\" fill=\"white\" />\n <rect x=\"6\" y=\"8.33301\" width=\"8\" height=\"1.33333\" fill=\"white\" />\n <circle cx=\"10.0001\" cy=\"12.333\" r=\"2.66667\" stroke=\"white\" strokeWidth=\"1.33333\" />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#1D4ED8\"\n />\n <defs>\n <linearGradient\n id={grad}\n x1=\"10\"\n y1=\"1\"\n x2=\"10\"\n y2=\"19\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#3B82F6\" />\n <stop offset=\"1\" stopColor=\"#1F6FF0\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Heading icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/heading)\n */\nexport function HeadingIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-3.5 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 5.83333H8.5M0.5 11.1667V0.5M8.5 11.1667V0.5\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function HtmlFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill=\"#EDEEF0\"\n />\n <path\n d=\"M5.875 11.5H12.625M9.25 8.125V14.875M6.625 8.125H11.875C12.2892 8.125 12.625 8.46079 12.625 8.875V14.125C12.625 14.5392 12.2892 14.875 11.875 14.875H6.625C6.21079 14.875 5.875 14.5392 5.875 14.125V8.875C5.875 8.46079 6.21079 8.125 6.625 8.125Z\"\n stroke=\"#EDEEF0\"\n strokeWidth=\"0.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#D1D5DB\"\n />\n <g clipPath={`url(#${clip})`}>\n <path\n d=\"M11.5 13L13 11.5L11.5 10M7 10L5.5 11.5L7 13M10.1875 8.5L8.3125 14.5\"\n stroke=\"#6B7280\"\n strokeWidth=\"0.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id={clip}>\n <rect width=\"9\" height=\"9\" fill=\"white\" transform=\"translate(4.75 7)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Image icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/image)\n */\nexport function ImageIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M12.5 8.49996L10.4427 6.44263C10.1926 6.19267 9.85355 6.05225 9.5 6.05225C9.14645 6.05225 8.80737 6.19267 8.55733 6.44263L2.5 12.5M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5ZM5.83333 4.5C5.83333 5.23638 5.23638 5.83333 4.5 5.83333C3.76362 5.83333 3.16667 5.23638 3.16667 4.5C3.16667 3.76362 3.76362 3.16667 4.5 3.16667C5.23638 3.16667 5.83333 3.76362 5.83333 4.5Z\" />\n </svg>\n );\n}\n","// import icon — Figma node 128:1476 (lucide/import)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function ImportIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.25 -3.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M10.75 0.75V12.75M10.75 12.75L6.75 8.75M10.75 12.75L14.75 8.75M6.75 2.75H2.75C2.21957 2.75 1.71086 2.96071 1.33579 3.33579C0.960714 3.71086 0.75 4.21957 0.75 4.75V14.75C0.75 15.2804 0.960714 15.7891 1.33579 16.1642C1.71086 16.5393 2.21957 16.75 2.75 16.75H18.75C19.2804 16.75 19.7891 16.5393 20.1642 16.1642C20.5393 15.7891 20.75 15.2804 20.75 14.75V4.75C20.75 4.21957 20.5393 3.71086 20.1642 3.33579C19.7891 2.96071 19.2804 2.75 18.75 2.75H14.75\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Indent icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/indent)\n */\nexport function IndentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 1.83333L3.16667 4.5L0.5 7.16667M12.5 4.5H5.83333M12.5 0.5H5.83333M12.5 8.5H5.83333\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Italic icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/italic)\n */\nexport function ItalicIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.8334 -2.1666 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.83333 0.500136H3.83333M6.5 11.1668H0.5M7.16667 0.500136L3.16667 11.1668\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Key-round icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.02\n */\nexport function KeyRoundIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.6088 14.6088\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path\n d=\"M10.2917 4.65055C10.4758 4.65055 10.625 4.50132 10.625 4.31722C10.625 4.13313 10.4758 3.98389 10.2917 3.98389C10.1076 3.98389 9.95833 4.13313 9.95833 4.31722C9.95833 4.50132 10.1076 4.65055 10.2917 4.65055Z\"\n fill=\"currentColor\"\n />\n <path d=\"M0.625 11.3172V13.3172C0.625 13.7172 0.891667 13.9838 1.29167 13.9838H3.95833V11.9838H5.95833V9.98383H7.29167L8.225 9.0505C9.15156 9.37326 10.1602 9.37203 11.086 9.047C12.0118 8.72197 12.7998 8.09239 13.3212 7.26125C13.8427 6.43011 14.0666 5.44661 13.9564 4.47166C13.8462 3.4967 13.4084 2.588 12.7146 1.89421C12.0208 1.20042 11.1121 0.762621 10.1372 0.652425C9.16222 0.542228 8.17872 0.766162 7.34758 1.28759C6.51644 1.80902 5.88686 2.59708 5.56183 3.52284C5.2368 4.44861 5.23557 5.45727 5.55833 6.38383L0.625 11.3172Z\" />\n <path d=\"M10.2917 4.65055C10.4758 4.65055 10.625 4.50132 10.625 4.31722C10.625 4.13313 10.4758 3.98389 10.2917 3.98389C10.1076 3.98389 9.95833 4.13313 9.95833 4.31722C9.95833 4.50132 10.1076 4.65055 10.2917 4.65055Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function LayersIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.35 14.33\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M13.8335 10.9334L7.72012 13.7068C7.54641 13.786 7.35772 13.827 7.16679 13.827C6.97586 13.827 6.78716 13.786 6.61346 13.7068L0.500123 10.9334M13.8335 7.6001L7.72012 10.3734C7.54641 10.4527 7.35772 10.4937 7.16679 10.4937C6.97586 10.4937 6.78716 10.4527 6.61346 10.3734L0.500123 7.6001M7.7201 0.620238C7.54639 0.541004 7.35769 0.5 7.16677 0.5C6.97584 0.5 6.78714 0.541004 6.61343 0.620238L0.900099 3.22024C0.781798 3.2724 0.681218 3.35784 0.610607 3.46614C0.539996 3.57445 0.502401 3.70095 0.502401 3.83024C0.502401 3.95953 0.539996 4.08603 0.610607 4.19433C0.681218 4.30264 0.781798 4.38808 0.900099 4.44024L6.6201 7.0469C6.79381 7.12614 6.98251 7.16714 7.17343 7.16714C7.36436 7.16714 7.55306 7.12614 7.72677 7.0469L13.4468 4.4469C13.5651 4.39474 13.6656 4.30931 13.7363 4.201C13.8069 4.0927 13.8445 3.9662 13.8445 3.8369C13.8445 3.70761 13.8069 3.58111 13.7363 3.47281C13.6656 3.3645 13.5651 3.27907 13.4468 3.2269L7.7201 0.620238Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface LayoutGridIconProps {\n className?: string;\n}\n\n/**\n * layout-grid icon — SVG downloaded from Figma Lucide Icon library.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:1554\n */\nexport function LayoutGridIcon({ className }: LayoutGridIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -2.25 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M6.75 0.75H1.75C1.19772 0.75 0.75 1.19772 0.75 1.75V6.75C0.75 7.30228 1.19772 7.75 1.75 7.75H6.75C7.30228 7.75 7.75 7.30228 7.75 6.75V1.75C7.75 1.19772 7.30228 0.75 6.75 0.75Z\" />\n <path d=\"M17.75 0.75H12.75C12.1977 0.75 11.75 1.19772 11.75 1.75V6.75C11.75 7.30228 12.1977 7.75 12.75 7.75H17.75C18.3023 7.75 18.75 7.30228 18.75 6.75V1.75C18.75 1.19772 18.3023 0.75 17.75 0.75Z\" />\n <path d=\"M17.75 11.75H12.75C12.1977 11.75 11.75 12.1977 11.75 12.75V17.75C11.75 18.3023 12.1977 18.75 12.75 18.75H17.75C18.3023 18.75 18.75 18.3023 18.75 17.75V12.75C18.75 12.1977 18.3023 11.75 17.75 11.75Z\" />\n <path d=\"M6.75 11.75H1.75C1.19772 11.75 0.75 12.1977 0.75 12.75V17.75C0.75 18.3023 1.19772 18.75 1.75 18.75H6.75C7.30228 18.75 7.75 18.3023 7.75 17.75V12.75C7.75 12.1977 7.30228 11.75 6.75 11.75Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Line-chart icon — SVG downloaded from Figma design system.\n * Source: public/icons/line-chart.svg\n */\nexport function LineChartIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 0.5V12.5H12.5M11.1667 4.5L7.83333 7.83333L5.16667 5.16667L3.16667 7.16667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Link icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/link)\n */\nexport function LinkIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-0.871 -0.8776 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.79557 7.78904C6.08187 8.17179 6.44714 8.48849 6.86661 8.71767C7.28607 8.94684 7.74991 9.08312 8.22667 9.11726C8.70344 9.15141 9.18196 9.08262 9.6298 8.91556C10.0776 8.7485 10.4843 8.48709 10.8222 8.14904L12.8222 6.14904C13.4294 5.52037 13.7654 4.67836 13.7578 3.80437C13.7502 2.93038 13.3997 2.09434 12.7816 1.47631C12.1636 0.858284 11.3276 0.507721 10.4536 0.500126C9.57959 0.492531 8.73758 0.828513 8.10891 1.43571L6.96224 2.57571M8.46237 6.45572C8.17607 6.07296 7.8108 5.75626 7.39134 5.52709C6.97188 5.29792 6.50803 5.16164 6.03127 5.12749C5.55451 5.09335 5.07598 5.16214 4.62814 5.3292C4.1803 5.49625 3.77363 5.75767 3.43571 6.09572L1.43571 8.09572C0.828513 8.72439 0.492531 9.5664 0.500126 10.4404C0.507721 11.3144 0.858284 12.1504 1.47631 12.7684C2.09434 13.3865 2.93038 13.737 3.80437 13.7446C4.67836 13.7522 5.52037 13.4162 6.14904 12.809L7.28904 11.669\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * List (unordered) icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/list)\n */\nexport function ListIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3.83333 0.5H12.5M3.83333 4.5H12.5M3.83333 8.5H12.5M0.5 0.5H0.506667M0.5 4.5H0.506667M0.5 8.5H0.506667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * List-ordered icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/list-ordered)\n */\nexport function ListOrderedIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M7.20655 3.9678H14M7.20655 7.83902H14M7.20655 11.7102H14M3.24525 6.54798V3H2M2 6.54798H4.49049M4.32065 13H2.22053C2.22053 11.0054 4.32065 11.5041 4.32065 10.0081C4.32065 9.26018 3.27059 8.76153 2.22053 9.5095\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Message-circle icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function MessageCircleIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.0899 17.0899\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M5.54168 14.7982C7.13217 15.6141 8.96175 15.8351 10.7008 15.4214C12.4398 15.0076 13.9738 13.9864 15.0265 12.5417C16.0791 11.097 16.5812 9.32381 16.4422 7.54168C16.3031 5.75956 15.5322 4.08569 14.2682 2.82171C13.0042 1.55773 11.3303 0.78676 9.54822 0.647731C7.76609 0.508701 5.99291 1.01076 4.5482 2.06342C3.10349 3.11609 2.08226 4.65014 1.66854 6.38914C1.25481 8.12815 1.4758 9.95774 2.29168 11.5482L0.625017 16.4649L5.54168 14.7982Z\" />\n </svg>\n );\n}\n","import { useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function MarkdownFileIcon({ className }: { className?: string }) {\n const id = useId().replace(/:/g, \"\");\n const clip = `clip_${id}`;\n\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <g clipPath={`url(#${clip})`}>\n <path\n d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\"\n fill=\"#EDEEF0\"\n />\n <path\n d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\"\n fill=\"#D1D5DB\"\n />\n <path\n d=\"M5.12891 9.34375H6.17578L7.96484 13.7266H8.03516L9.82422 9.34375H10.8711V15H10.0508V10.9141H9.99609L8.33984 14.9922H7.66016L5.99609 10.9062H5.94922V15H5.12891V9.34375Z\"\n fill=\"#6B7280\"\n />\n <path\n d=\"M13.5 10.25V13.75M13.5 13.75L15.25 12M13.5 13.75L11.75 12\"\n stroke=\"#6B7280\"\n strokeWidth=\"0.7\"\n />\n </g>\n <defs>\n <clipPath id={clip}>\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Messages-square icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: Figma node 616-3399, stroke-width: 1.25\n */\nexport function MessagesSquareIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9167 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M13.9583 6.45833H15.625C16.067 6.45833 16.4909 6.63393 16.8035 6.94649C17.1161 7.25905 17.2917 7.68297 17.2917 8.125V17.2917L13.9583 13.9583H8.95833C8.51631 13.9583 8.09238 13.7827 7.77982 13.4702C7.46726 13.1576 7.29167 12.7337 7.29167 12.2917V11.4583M10.625 6.45833C10.625 6.90036 10.4494 7.32428 10.1368 7.63684C9.82428 7.9494 9.40036 8.125 8.95833 8.125H3.95833L0.625 11.4583V2.29167C0.625 1.375 1.375 0.625 2.29167 0.625H8.95833C9.40036 0.625 9.82428 0.800595 10.1368 1.11316C10.4494 1.42572 10.625 1.84964 10.625 2.29167V6.45833Z\" />\n </svg>\n );\n}\n","// MyPage icon — Figma lucide/mypage (node 3101:11166 / vector 3101:11161)\n// Inline SVG of stylized \"My\" lettermark — stroke=\"currentColor\", URL 만료 없음\n\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function MyPageIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 21.5002 15.5006\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"size-6 shrink-0\", className)}\n aria-hidden\n >\n <path\n d=\"M0.75 11.6468V0.750065L5.5815 8.76602L10.413 0.750065V11.6468M14.0879 2.83125L17.4458 11.1374M20.75 2.83125C20.75 2.83125 17.6826 10.9954 17.3135 11.9753C16.9444 12.9551 16.5664 14.2253 15.4739 14.6504C14.3814 15.0755 13.3953 14.0035 13.3953 14.0035\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Outdent icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/outdent)\n */\nexport function OutdentIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -3.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3.16667 1.83333L0.5 4.5L3.16667 7.16667M12.5 4.5H5.83333M12.5 0.5H5.83333M12.5 8.5H5.83333\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function PdfFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"pdf-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#EF4444\" />\n <stop offset=\"1\" stopColor=\"#E43A3A\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#pdf-bg)\" />\n <path d=\"M13.9058 12.1455C13.7086 12.2037 13.419 12.2103 13.1085 12.1652C12.7752 12.1169 12.4353 12.015 12.1012 11.8649C12.697 11.7782 13.1592 11.8049 13.5545 11.945C13.6482 11.9782 13.802 12.0669 13.9058 12.1455ZM10.5817 11.599C10.5575 11.6056 10.5336 11.6118 10.5098 11.6184C10.3495 11.662 10.1935 11.7046 10.0432 11.7425L9.84053 11.7939C9.43281 11.897 9.01595 12.0024 8.60422 12.1279C8.76069 11.7506 8.90607 11.3691 9.04841 10.9961C9.1538 10.72 9.26141 10.438 9.37271 10.1596C9.42917 10.2528 9.4881 10.3461 9.54941 10.4396C9.82875 10.8651 10.1799 11.2584 10.5817 11.599ZM9.5446 7.344C9.57102 7.8096 9.47057 8.2575 9.32321 8.6872C9.1417 8.15588 9.05711 7.56915 9.28404 7.09546C9.34224 6.97405 9.38991 6.90913 9.42083 6.87526C9.46859 6.949 9.5314 7.11396 9.5446 7.344ZM7.41607 13.2419C7.31408 13.4244 7.20998 13.5952 7.10328 13.7565C6.8458 14.1445 6.42469 14.56 6.20836 14.56C6.18707 14.56 6.16131 14.5566 6.12366 14.5168C6.09943 14.4914 6.09555 14.4732 6.09672 14.4483C6.10402 14.3057 6.29305 14.0516 6.56688 13.816C6.81543 13.6023 7.09636 13.4122 7.41607 13.2419ZM14.5947 12.1657C14.5616 11.6904 13.7616 11.3856 13.7537 11.3827C13.4445 11.2731 13.1085 11.2198 12.7267 11.2198C12.318 11.2198 11.8773 11.279 11.3114 11.4112C10.8079 11.0542 10.3729 10.6073 10.0479 10.1126C9.90435 9.894 9.77533 9.67581 9.66286 9.46268C9.93742 8.80618 10.1847 8.10031 10.1397 7.30972C10.1035 6.67581 9.81766 6.25 9.42893 6.25C9.16226 6.25 8.93266 6.4475 8.74596 6.83758C8.41291 7.53265 8.50045 8.42202 9.00603 9.48328C8.82395 9.91095 8.65477 10.3543 8.49102 10.7835C8.28729 11.3172 8.07736 11.8679 7.84076 12.3917C7.17723 12.6542 6.63213 12.9726 6.17784 13.3635C5.88024 13.6191 5.52147 14.0099 5.50099 14.4178C5.49099 14.6099 5.55687 14.7861 5.69073 14.9272C5.83294 15.0771 6.01161 15.156 6.20807 15.1563C6.85691 15.1563 7.4814 14.2648 7.59987 14.086C7.83829 13.7266 8.06145 13.3257 8.28012 12.8633C8.83087 12.6643 9.4178 12.5157 9.98667 12.3721L10.1904 12.3203C10.3436 12.2814 10.5027 12.2383 10.666 12.1937C10.8388 12.147 11.0165 12.0985 11.1972 12.0525C11.7813 12.424 12.4095 12.6663 13.0221 12.7552C13.5382 12.8303 13.9964 12.7867 14.3066 12.625C14.5858 12.4796 14.6012 12.2553 14.5947 12.1657Z\" fill=\"white\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#B91C1C\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function RefreshCwIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface PenLineIconProps {\n className?: string;\n}\n\n/**\n * Pen-line icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 4798:68154 (lucide/pen-line)\n */\nexport function PenLineIcon({ className }: PenLineIconProps) {\n return (\n <svg\n viewBox=\"-2.25 -2.75 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.74902 17.7498H18.749M14.125 1.37173C14.5231 0.973645 15.063 0.75 15.626 0.75C16.189 0.75 16.7289 0.973645 17.127 1.37173C17.5251 1.76982 17.7487 2.30975 17.7487 2.87273C17.7487 3.43572 17.5251 3.97564 17.127 4.37373L5.117 16.3847C4.8791 16.6226 4.58502 16.7967 4.262 16.8907L1.39 17.7287C1.30395 17.7538 1.21274 17.7553 1.12591 17.7331C1.03908 17.7108 0.959827 17.6657 0.896447 17.6023C0.833066 17.5389 0.787889 17.4597 0.765643 17.3728C0.743398 17.286 0.744903 17.1948 0.77 17.1087L1.608 14.2367C1.70222 13.9141 1.87625 13.6204 2.114 13.3827L14.125 1.37173Z\" />\n </svg>\n );\n}\n","// pencil-line icon — Figma node 128:1988 (lucide/pencil-line)\n// Source: Figma Lucide Icon Library, figma.com/design/bNKDIZZAm8ByouCPBnlEye\n\nimport { cn } from \"@/lib/utils\";\n\nexport function PencilLineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.25 -2.75 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M9.74902 17.7498H18.749M12.749 2.74976L15.749 5.74976M14.125 1.37173C14.5231 0.973645 15.063 0.75 15.626 0.75C16.189 0.75 16.7289 0.973645 17.127 1.37173C17.5251 1.76982 17.7487 2.30975 17.7487 2.87273C17.7487 3.43572 17.5251 3.97564 17.127 4.37373L5.117 16.3847C4.8791 16.6226 4.58502 16.7967 4.262 16.8907L1.39 17.7287C1.30395 17.7538 1.21274 17.7553 1.12591 17.7331C1.03908 17.7108 0.959827 17.6657 0.896447 17.6023C0.833066 17.5389 0.787889 17.4597 0.765643 17.3728C0.743398 17.286 0.744903 17.1948 0.77 17.1087L1.608 14.2367C1.70222 13.9141 1.87625 13.6204 2.114 13.3827L14.125 1.37173Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Presentation icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/presentation)\n */\nexport function PresentationIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.333 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.5 0.5H13.833M13.167 0.5V7.833C13.167 8.187 13.026 8.526 12.776 8.776C12.526 9.026 12.187 9.167 11.833 9.167H2.5C2.146 9.167 1.807 9.026 1.557 8.776C1.307 8.526 1.167 8.187 1.167 7.833V0.5M3.833 12.5L7.167 9.167L10.5 12.5\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SheetFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"sheet-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#16A316\" />\n <stop offset=\"1\" stopColor=\"#098838\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#sheet-bg)\" />\n <path d=\"M5.875 11.5H12.625M9.25 8.125V14.875M6.625 8.125H11.875C12.2892 8.125 12.625 8.46079 12.625 8.875V14.125C12.625 14.5392 12.2892 14.875 11.875 14.875H6.625C6.21079 14.875 5.875 14.5392 5.875 14.125V8.875C5.875 8.46079 6.21079 8.125 6.625 8.125Z\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#166516\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Shopping Bag icon — SVG from public/icons/shopping-bag.svg\n * Uses stroke=\"currentColor\" for CSS color control.\n */\nexport function ShoppingBagIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.25 17.9167\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M0.625 3.95833L3.125 0.625H13.125L15.625 3.95833M0.625 3.95833V15.625C0.625 16.067 0.800595 16.4909 1.11316 16.8035C1.42572 17.1161 1.84964 17.2917 2.29167 17.2917H13.9583C14.4004 17.2917 14.8243 17.1161 15.1368 16.8035C15.4494 16.4909 15.625 16.067 15.625 15.625V3.95833M0.625 3.95833H15.625M11.4583 7.29167C11.4583 8.17572 11.1071 9.02357 10.482 9.64869C9.8569 10.2738 9.00905 10.625 8.125 10.625C7.24094 10.625 6.3931 10.2738 5.76798 9.64869C5.14286 9.02357 4.79167 8.17572 4.79167 7.29167\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SlideFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"slide-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#F97116\" />\n <stop offset=\"1\" stopColor=\"#F16606\" />\n </linearGradient>\n <clipPath id=\"slide-clip\">\n <rect width=\"9\" height=\"9\" fill=\"white\" transform=\"translate(4.75 7)\" />\n </clipPath>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#slide-bg)\" />\n <g clipPath=\"url(#slide-clip)\">\n <path d=\"M12.7037 12.9588C12.4651 13.523 12.092 14.0201 11.6169 14.4068C11.1418 14.7934 10.5792 15.0578 9.97832 15.1768C9.37745 15.2958 8.75657 15.2658 8.16996 15.0895C7.58336 14.9131 7.04889 14.5957 6.61329 14.165C6.17769 13.7344 5.85421 13.2036 5.67115 12.619C5.48808 12.0345 5.45099 11.414 5.56313 10.8118C5.67527 10.2096 5.93322 9.64401 6.31442 9.16454C6.69563 8.68507 7.18849 8.30627 7.74991 8.06128M12.9999 11.5C12.9999 11.0075 12.9029 10.5199 12.7145 10.0649C12.526 9.60997 12.2498 9.19657 11.9016 8.84835C11.5534 8.50013 11.14 8.22391 10.685 8.03545C10.23 7.847 9.7424 7.75 9.24994 7.75V11.5H12.9999Z\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#C2550C\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Smile icon — SVG downloaded from Figma design system.\n * Source: public/icons/smile.svg\n */\nexport function SmileIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.3333 14.3333\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 8.5C4.5 8.5 5.5 9.83333 7.16667 9.83333C8.83333 9.83333 9.83333 8.5 9.83333 8.5M5.16667 5.16667H5.17333M9.16667 5.16667H9.17333M13.8333 7.16667C13.8333 10.8486 10.8486 13.8333 7.16667 13.8333C3.48477 13.8333 0.5 10.8486 0.5 7.16667C0.5 3.48477 3.48477 0.5 7.16667 0.5C10.8486 0.5 13.8333 3.48477 13.8333 7.16667Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function SparklesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 17.9171 17.9171\"\n fill=\"none\"\n className={cn(\"size-4\", className)}\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15.6238 1.45854V4.79187M17.2904 3.1252H13.9571M2.29045 13.1252V14.7919M3.12378 13.9585H1.45711M7.2379 11.8752C7.1635 11.5868 7.01318 11.3236 6.80258 11.113C6.59198 10.9024 6.32879 10.7521 6.0404 10.6777L0.927896 9.35937C0.840672 9.33462 0.763903 9.28208 0.70924 9.20975C0.654576 9.13741 0.625 9.04921 0.625 8.95854C0.625 8.86787 0.654576 8.77968 0.70924 8.70734C0.763903 8.635 0.840672 8.58247 0.927896 8.55771L6.0404 7.23854C6.32869 7.16421 6.59181 7.01402 6.8024 6.80357C7.01299 6.59313 7.16337 6.33011 7.2379 6.04187L8.55623 0.929374C8.58074 0.841806 8.63322 0.764659 8.70566 0.709703C8.77811 0.654747 8.86655 0.625 8.95748 0.625C9.04841 0.625 9.13685 0.654747 9.20929 0.709703C9.28174 0.764659 9.33422 0.841806 9.35873 0.929374L10.6762 6.04187C10.7506 6.33027 10.9009 6.59346 11.1115 6.80406C11.3221 7.01466 11.5853 7.16498 11.8737 7.23938L16.9862 8.55687C17.0741 8.58112 17.1517 8.63355 17.2069 8.70611C17.2622 8.77866 17.2921 8.86734 17.2921 8.95854C17.2921 9.04974 17.2622 9.13842 17.2069 9.21098C17.1517 9.28353 17.0741 9.33596 16.9862 9.36021L11.8737 10.6777C11.5853 10.7521 11.3221 10.9024 11.1115 11.113C10.9009 11.3236 10.7506 11.5868 10.6762 11.8752L9.3579 16.9877C9.33339 17.0753 9.28091 17.1524 9.20846 17.2074C9.13601 17.2623 9.04758 17.2921 8.95665 17.2921C8.86571 17.2921 8.77728 17.2623 8.70483 17.2074C8.63238 17.1524 8.5799 17.0753 8.5554 16.9877L7.2379 11.8752Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Square-check icon (filled) — SVG downloaded from Figma design system.\n * Uses fill=\"currentColor\" for the background rect and white stroke for checkmark.\n */\nexport function SquareCheckIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 16.5 16.5\"\n fill=\"none\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <rect x=\"0.75\" y=\"0.75\" width=\"15\" height=\"15\" rx=\"1.667\" fill=\"currentColor\" />\n <path\n d=\"M5.75 8.25L7.417 9.917L10.75 6.583\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Square-check-outline icon — outlined square with checkmark (task list).\n * SVG downloaded from Figma design system.\n */\nexport function SquareCheckOutlineIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-1.5 -1.5 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M4.5 6.5L5.83333 7.83333L8.5 5.16667M1.83333 0.5H11.1667C11.903 0.5 12.5 1.09695 12.5 1.83333V11.1667C12.5 11.903 11.903 12.5 11.1667 12.5H1.83333C1.09695 12.5 0.5 11.903 0.5 11.1667V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface StarIconProps {\n className?: string;\n filled?: boolean;\n}\n\n/**\n * Star icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:2564 (lucide/star)\n */\nexport function StarIcon({ className, filled }: StarIconProps) {\n return (\n <svg\n viewBox=\"-1.25 -1.74 24 24\"\n fill={filled ? \"currentColor\" : \"none\"}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M10.75 0.75L13.84 7.01L20.75 8.02L15.75 12.89L16.93 19.77L10.75 16.52L4.57002 19.77L5.75002 12.89L0.750022 8.02L7.66002 7.01L10.75 0.75Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Strikethrough icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/strikethrough)\n */\nexport function StrikethroughIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"-2.1667 -2.1667 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.50007 0.5H3.83341C3.51336 0.499832 3.19794 0.576476 2.91365 0.723491C2.62937 0.870506 2.38452 1.0836 2.19967 1.34487C2.01482 1.60614 1.89537 1.90796 1.85136 2.22497C1.80735 2.54198 1.84006 2.86492 1.94674 3.16667M7.16667 5.83333C7.87391 5.83333 8.55219 6.11428 9.05228 6.61438C9.55238 7.11448 9.83333 7.79276 9.83333 8.5C9.83333 9.20724 9.55238 9.88552 9.05228 10.3856C8.55219 10.8857 7.87391 11.1667 7.16667 11.1667H1.83333M0.5 5.83333H11.1667\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Table-properties icon — SVG downloaded from Figma design system.\n * Source: Figma node (lucide/table-properties)\n */\nexport function TablePropertiesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.5 0.5V12.5M12.5 4.5H0.5M12.5 8.5H0.5M1.833 0.5H11.167C11.903 0.5 12.5 1.097 12.5 1.833V11.167C12.5 11.903 11.903 12.5 11.167 12.5H1.833C1.097 12.5 0.5 11.903 0.5 11.167V1.833C0.5 1.097 1.097 0.5 1.833 0.5Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\ninterface TrashIconProps {\n className?: string;\n}\n\n/**\n * Trash-2 icon — SVG downloaded directly from Figma design system.\n * Uses stroke=\"currentColor\" for CSS color control.\n * Source: figma.com/design/bNKDIZZAm8ByouCPBnlEye node 128:2738 (lucide/trash-2)\n */\nexport function TrashIcon({ className }: TrashIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M3 6H21M19 6V20C19 21 18 22 17 22H7C6 22 5 21 5 20V6M8 6V4C8 3 9 2 10 2H14C15 2 16 3 16 4V6M10 11V17M14 11V17\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Wand-sparkles icon — SVG downloaded from Figma design system.\n * Source: public/icons/wand-sparkles.svg\n */\nexport function WandSparklesIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 14.3346 14.3354\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"shrink-0\", className)}\n >\n <path d=\"M8.49935 3.83333L10.4993 5.83333M2.49935 3.16667V5.83333M11.8327 8.5V11.1667M5.83268 0.5V1.83333M3.83268 4.5H1.16602M13.166 9.83333H10.4993M6.49935 1.16667H5.16602M13.5926 1.59336L12.7392 0.74003C12.6642 0.664241 12.5749 0.604077 12.4765 0.563016C12.3781 0.521956 12.2725 0.500814 12.1659 0.500814C12.0593 0.500814 11.9537 0.521956 11.8553 0.563016C11.7569 0.604077 11.6676 0.664241 11.5925 0.74003L0.739216 11.5934C0.663427 11.6684 0.603263 11.7577 0.562202 11.8561C0.521142 11.9545 0.5 12.0601 0.5 12.1667C0.5 12.2733 0.521142 12.3789 0.562202 12.4773C0.603263 12.5757 0.663427 12.665 0.739216 12.74L1.59255 13.5934C1.6671 13.67 1.75624 13.7309 1.85471 13.7724C1.95319 13.814 2.05899 13.8354 2.16588 13.8354C2.27277 13.8354 2.37858 13.814 2.47705 13.7724C2.57553 13.7309 2.66467 13.67 2.73922 13.5934L13.5926 2.74003C13.6692 2.66548 13.73 2.57634 13.7716 2.47787C13.8132 2.37939 13.8346 2.27359 13.8346 2.1667C13.8346 2.05981 13.8132 1.954 13.7716 1.85553C13.73 1.75705 13.6692 1.66791 13.5926 1.59336Z\" />\n </svg>\n );\n}\n","import { cn } from \"@/lib/utils\";\n\nexport function WordFileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden className={cn(\"shrink-0\", className)}>\n <defs>\n <linearGradient id=\"word-bg\" x1=\"10\" y1=\"1\" x2=\"10\" y2=\"19\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#3B82F6\" />\n <stop offset=\"1\" stopColor=\"#1F6FF0\" />\n </linearGradient>\n </defs>\n <path d=\"M12.25 1L17.5 6.25V16.75C17.5 17.9926 16.4926 19 15.25 19H4.75C3.50736 19 2.5 17.9926 2.5 16.75V3.25C2.5 2.00736 3.50736 1 4.75 1H12.25Z\" fill=\"url(#word-bg)\" />\n <path d=\"M12.625 9.25H5.875M10.375 11.5H5.875M11.125 13.75H5.875\" stroke=\"white\" strokeWidth=\"0.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12.25 1L14.875 3.625L17.5 6.25H13.75C12.9216 6.25 12.25 5.57843 12.25 4.75V1Z\" fill=\"#1D4ED8\" />\n </svg>\n );\n}\n"],"mappings":"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","names":["ChevronsUpDownIcon","React","import_jsx_runtime","AccordionPrimitive","React","import_radix_ui","import_radix_ui","import_jsx_runtime","import_jsx_runtime","AlertDialogPrimitive","React","import_class_variance_authority","import_jsx_runtime","import_radix_ui","import_jsx_runtime","AvatarPrimitive","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","DropdownMenuPrimitive","import_jsx_runtime","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","CheckboxPrimitive","import_react","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","CollapsiblePrimitive","React","import_radix_ui","import_jsx_runtime","ChevronsUpDownIcon","import_jsx_runtime","PopoverPrimitive","ChevronsUpDownIcon","React","import_radix_ui","import_jsx_runtime","PopoverPrimitive","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","_a","_b","React","import_lucide_react","import_jsx_runtime","_a","React","import_react","import_jsx_runtime","import_jsx_runtime","React","React","React","import_radix_ui","import_jsx_runtime","TooltipPrimitive","import_jsx_runtime","import_jsx_runtime","SyntaxHighlighter","javascript","typescript","jsx","tsx","python","bash","json","css","markup","sql","go","rust","java","kotlin","swift","yaml","markdown","diff","React","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","MenubarPrimitive","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","_a","_b","PopoverPrimitive","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","_a","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","_a","SliderPrimitive","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_a","_b","import_jsx_runtime","import_react","import_radix_ui","import_jsx_runtime","React","SwitchPrimitive","React","import_jsx_runtime","_a","_b","_c","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}