@turtleclub/ui 0.0.1

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.
Files changed (50) hide show
  1. package/.turbo/turbo-build.log +15 -0
  2. package/.turbo/turbo-type-check.log +360 -0
  3. package/README.md +3 -0
  4. package/components.json +21 -0
  5. package/dist/index.cjs +2 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.js +1672 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/styles.css +1 -0
  10. package/package.json +66 -0
  11. package/src/components/molecules/index.ts +7 -0
  12. package/src/components/molecules/opportunity-details.tsx +145 -0
  13. package/src/components/molecules/opportunity-item.tsx +63 -0
  14. package/src/components/molecules/route-details.tsx +87 -0
  15. package/src/components/molecules/swap-details.tsx +95 -0
  16. package/src/components/molecules/swap-input.tsx +115 -0
  17. package/src/components/molecules/token-selector.tsx +72 -0
  18. package/src/components/molecules/tx-status.tsx +254 -0
  19. package/src/components/ui/button.tsx +65 -0
  20. package/src/components/ui/card.tsx +101 -0
  21. package/src/components/ui/chip.tsx +48 -0
  22. package/src/components/ui/icon-animation.tsx +82 -0
  23. package/src/components/ui/index.ts +18 -0
  24. package/src/components/ui/info-card.tsx +128 -0
  25. package/src/components/ui/input.tsx +78 -0
  26. package/src/components/ui/label-with-icon.tsx +112 -0
  27. package/src/components/ui/label.tsx +22 -0
  28. package/src/components/ui/navigation-bar.tsx +135 -0
  29. package/src/components/ui/opportunity-details-v1.tsx +90 -0
  30. package/src/components/ui/scroll-area.tsx +56 -0
  31. package/src/components/ui/select.tsx +180 -0
  32. package/src/components/ui/separator.tsx +26 -0
  33. package/src/components/ui/sonner.tsx +23 -0
  34. package/src/components/ui/switch.tsx +29 -0
  35. package/src/components/ui/toggle-group.tsx +71 -0
  36. package/src/components/ui/toggle.tsx +47 -0
  37. package/src/components/ui/tooltip.tsx +59 -0
  38. package/src/index.ts +9 -0
  39. package/src/lib/utils.ts +6 -0
  40. package/src/styles/globals.css +75 -0
  41. package/src/styles/themes/index.css +9 -0
  42. package/src/styles/themes/semantic.css +107 -0
  43. package/src/styles/tokens/colors.css +77 -0
  44. package/src/styles/tokens/index.css +15 -0
  45. package/src/styles/tokens/radius.css +46 -0
  46. package/src/styles/tokens/spacing.css +52 -0
  47. package/src/styles/tokens/typography.css +86 -0
  48. package/src/tokens/index.ts +108 -0
  49. package/tsconfig.json +21 -0
  50. package/vite.config.js +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/lib/utils.ts","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/separator.tsx","../src/components/ui/sonner.tsx","../src/components/ui/switch.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/chip.tsx","../src/components/ui/icon-animation.tsx","../src/components/ui/label-with-icon.tsx","../src/components/ui/navigation-bar.tsx","../src/components/ui/info-card.tsx","../src/components/ui/opportunity-details-v1.tsx","../src/components/molecules/opportunity-item.tsx","../src/components/molecules/opportunity-details.tsx","../src/components/molecules/tx-status.tsx","../src/components/molecules/token-selector.tsx","../src/components/molecules/swap-input.tsx","../src/components/molecules/swap-details.tsx","../src/components/molecules/route-details.tsx","../src/tokens/index.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst inputVariants = cva(\n \"flex w-full bg-transparent text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground transition-colors outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n // Turtle Design System - transparent input with no borders\n default: \"border-none focus:ring-0 focus:border-none caret-primary\",\n // Optional bordered version for other use cases\n bordered: \"border border-border rounded-md focus:border-primary focus:ring-2 focus:ring-primary/20 caret-primary\",\n // No focus variant - cursor color only, no focus styles\n nofocus: \"border-none focus:ring-0 focus:border-none focus:outline-none caret-primary\",\n },\n size: {\n default: \"h-10 px-3 py-2 text-sm\",\n sm: \"h-8 px-2 py-1 text-xs\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n cursor: {\n primary: \"caret-primary\",\n foreground: \"caret-foreground\", \n white: \"caret-white\",\n green: \"caret-green-500\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n cursor: \"primary\",\n },\n }\n);\n\nexport interface InputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof inputVariants> {\n // Optional prompt text that appears before the input\n prompt?: string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant, size, cursor, type, prompt, ...props }, ref) => {\n if (prompt) {\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-primary text-sm font-medium shrink-0\">\n {prompt}\n </span>\n <input\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant, size, cursor, className }))}\n ref={ref}\n {...props}\n />\n </div>\n );\n }\n\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant, size, cursor, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n // Turtle Design System - transparent trigger with wise white text\n \"flex w-fit items-center justify-between gap-2 bg-transparent px-3 py-2 text-sm text-foreground whitespace-nowrap transition-colors outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 border-none focus:ring-0\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg]:text-muted-foreground\",\n \"*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n // Turtle Design System - ninja black background for content\n \"bg-background text-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n // Turtle Design System - items with wise white alpha (2%) background and ninja black text\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm text-foreground outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"bg-muted hover:bg-muted/80 focus:bg-muted/80\", // wise white alpha (2%) background\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n {/* Single dot that changes color based on selection */}\n <div className=\"w-2 h-2 rounded-full bg-muted-foreground/30 transition-colors\" />\n {/* Use Radix's ItemIndicator to show selected state */}\n <SelectPrimitive.ItemIndicator className=\"absolute\">\n <div className=\"w-2 h-2 rounded-full bg-primary\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","import * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { toggleVariants } from \"@/components/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none border\",\n {\n variants: {\n variant: {\n // Turtle Design System variants using semantic classes\n default:\n \"bg-background text-primary border-primary shadow-[0_0_4px_0_hsl(var(--primary))] hover:bg-background/90 hover:shadow-[0_0_6px_0_hsl(var(--primary))]\",\n green:\n \"bg-primary text-primary-foreground border-primary shadow-[0_0_4px_0_hsl(var(--primary))] hover:bg-primary/90 hover:shadow-[0_0_6px_0_hsl(var(--primary))]\",\n transparentWhite: \"bg-secondary text-secondary-foreground border-secondary hover:bg-secondary/80\",\n transparentGreen: \"bg-secondary text-primary border-secondary hover:bg-secondary/80\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n rounded: {\n default: \"rounded-full\",\n none: \"rounded-none\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n rounded: \"default\",\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n rounded,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, rounded, className }))}\n {...props}\n />\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\nconst cardVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n // Turtle Design System variants\n container:\n \"relative bg-card shadow-[0_0_20px_0_rgba(0,0,0,0.25)] before:absolute before:inset-0 before:rounded-[inherit] before:p-px before:bg-gradient-to-b before:from-[#F9F9F9] before:from-40% before:via-white before:via-40.01% before:to-white before:to-50% before:content-[''] before:pointer-events-none before:-z-10\",\n simple: \"bg-muted\",\n item: \"bg-muted shadow-[0_4px_4px_0_rgba(0,0,0,0.25)]\",\n },\n padding: {\n none: \"p-0\",\n sm: \"p-3\",\n default: \"p-4\",\n md: \"p-6\",\n lg: \"p-8\",\n },\n rounded: {\n default: \"rounded-lg\",\n none: \"rounded-none\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"container\",\n padding: \"default\",\n rounded: \"default\",\n },\n});\n\nfunction Card({\n className,\n variant,\n padding,\n rounded,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof cardVariants>) {\n return (\n <div\n data-slot=\"card\"\n className={cn(cardVariants({ variant, padding, rounded, className }))}\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(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, children, ...props }: React.ComponentProps<\"h3\">) {\n return (\n <h3\n data-slot=\"card-title\"\n className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)}\n {...props}\n >\n {children}\n </h3>\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"p-6 pt-0\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n );\n}\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst chipVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 cursor-pointer border-none rounded-full\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n xs: \"h-6 px-2 py-1 text-xs\",\n default: \"h-8 px-4 py-1\",\n sm: \"h-7 px-3 py-1 text-xs\",\n lg: \"h-9 px-6 py-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ChipProps extends React.ComponentProps<\"div\">, VariantProps<typeof chipVariants> {\n asChild?: boolean;\n}\n\nconst Chip = React.forwardRef<HTMLDivElement, ChipProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n return (\n <div\n data-slot=\"chip\"\n className={cn(chipVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nChip.displayName = \"Chip\";\n\nexport { Chip, chipVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst iconAnimationVariants = cva(\n \"relative inline-flex items-center justify-center rounded-full\",\n {\n variants: {\n size: {\n default: \"w-12 h-12\",\n sm: \"w-8 h-8\",\n lg: \"w-16 h-16\",\n xl: \"w-20 h-20\",\n },\n variant: {\n default: \"bg-background\",\n transparent: \"bg-transparent\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n }\n);\n\nexport interface IconAnimationProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof iconAnimationVariants> {\n children: React.ReactNode;\n spinning?: boolean;\n}\n\nconst IconAnimation = React.forwardRef<HTMLDivElement, IconAnimationProps>(\n ({ className, size, variant, children, spinning = true, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(iconAnimationVariants({ size, variant }), className)}\n {...props}\n >\n {/* Animated border */}\n <div\n className={cn(\n \"absolute inset-0 rounded-full\",\n \"bg-gradient-to-r from-transparent via-primary to-transparent\",\n \"animate-spin\",\n {\n \"animate-spin\": spinning,\n \"animate-none\": !spinning,\n }\n )}\n style={{\n background: spinning\n ? \"conic-gradient(from 0deg, transparent 0deg, var(--primary) 180deg, transparent 360deg)\"\n : \"conic-gradient(from 0deg, var(--primary) 0deg, var(--primary) 360deg)\",\n padding: \"1px\",\n borderRadius: \"9999px\",\n }}\n >\n {/* Inner circle to create the border effect */}\n <div\n className={cn(\n \"w-full h-full rounded-full\",\n variant === \"transparent\" ? \"bg-transparent\" : \"bg-background\"\n )}\n />\n </div>\n \n {/* Icon container - stays fixed */}\n <div className=\"relative z-10 flex items-center justify-center\">\n {children}\n </div>\n </div>\n );\n }\n);\n\nIconAnimation.displayName = \"IconAnimation\";\n\nexport { IconAnimation, iconAnimationVariants };","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelWithIconVariants = cva(\"inline-flex items-center gap-2 font-medium\", {\n variants: {\n variant: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n secondary: \"text-secondary-foreground\",\n },\n textSize: {\n xs: \"text-xs\",\n sm: \"text-sm\",\n base: \"text-base\",\n lg: \"text-lg\",\n xl: \"text-xl\",\n \"2xl\": \"text-2xl\",\n \"3xl\": \"text-3xl\",\n \"4xl\": \"text-4xl\",\n \"5xl\": \"text-5xl\",\n \"6xl\": \"text-6xl\",\n \"7xl\": \"text-7xl\",\n \"8xl\": \"text-8xl\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n textSize: \"sm\",\n },\n});\n\nconst iconSizeClasses = {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n base: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n xl: \"w-8 h-8\",\n};\n\nexport interface LabelWithIconProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof labelWithIconVariants> {\n icon: React.ReactNode | string; // Can be a component or URL string\n children: React.ReactNode;\n iconPosition?: \"left\" | \"right\";\n iconSize?: keyof typeof iconSizeClasses;\n iconClassName?: string; // Additional classes for the icon\n}\n\nconst LabelWithIcon = React.forwardRef<HTMLDivElement, LabelWithIconProps>(\n (\n {\n className,\n variant,\n textSize,\n icon,\n children,\n iconPosition = \"left\",\n iconSize = \"sm\",\n iconClassName,\n ...props\n },\n ref\n ) => {\n const renderIcon = () => {\n // If icon is a string (URL), render as img\n if (typeof icon === \"string\") {\n return (\n <img\n src={icon}\n alt=\"\"\n className={cn(iconSizeClasses[iconSize], \"object-contain\", iconClassName)}\n />\n );\n }\n\n // If icon is a React component, render it directly\n // If it's a Lucide icon or any other component, it will be rendered as-is\n return (\n <span className={cn(\"shrink-0\", iconClassName)}>\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n className: cn(iconSizeClasses[iconSize], (icon as any).props?.className),\n })\n : icon}\n </span>\n );\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n labelWithIconVariants({ variant, textSize }),\n iconPosition === \"right\" && \"flex-row-reverse\",\n className\n )}\n {...props}\n >\n {renderIcon()}\n <span>{children}</span>\n </div>\n );\n }\n);\n\nLabelWithIcon.displayName = \"LabelWithIcon\";\n\nexport { LabelWithIcon, labelWithIconVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst navigationBarVariants = cva(\"flex w-full\", {\n variants: {\n variant: {\n default: \"justify-between border border-border shadow-sm bg-background\",\n transparent: \"justify-between border border-border shadow-sm bg-transparent\",\n menuBar: \"relative h-12 gap-3 rounded-full border border-border bg-background font-medium shadow-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst navigationItemVariants = cva(\n \"flex items-center justify-center whitespace-nowrap font-medium transition-all disabled:pointer-events-none disabled:opacity-50 cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"text-sm text-muted-foreground hover:text-foreground\",\n active: \"text-sm text-primary bg-muted\",\n menuBarDefault: \"relative z-[1] w-full text-base text-foreground rounded-full px-3 py-2 hover:text-primary\",\n menuBarActive: \"relative z-[1] w-full text-base text-primary rounded-full px-3 py-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface NavigationBarProps\n extends React.ComponentProps<\"nav\">,\n VariantProps<typeof navigationBarVariants> {\n activeValue?: string;\n}\n\nexport interface NavigationItemProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof navigationItemVariants> {\n active?: boolean;\n value?: string;\n}\n\nconst NavigationBar = React.forwardRef<HTMLElement, NavigationBarProps>(\n ({ className, variant, activeValue, children, ...props }, ref) => {\n const containerRef = React.useRef<HTMLElement>(null);\n const indicatorRef = React.useRef<HTMLDivElement>(null);\n\n // Function to update the indicator position and size based on the active button\n const updateIndicatorPosition = React.useCallback(() => {\n if (variant !== \"menuBar\" || !containerRef.current || !indicatorRef.current) return;\n\n const activeButton = containerRef.current.querySelector(`[data-active=\"true\"]`) as HTMLElement;\n if (activeButton) {\n indicatorRef.current.style.width = `${activeButton.offsetWidth}px`;\n indicatorRef.current.style.left = `${activeButton.offsetLeft}px`;\n }\n }, [variant]);\n\n // Create ResizeObserver to handle indicator container size changes\n React.useEffect(() => {\n if (variant !== \"menuBar\") return;\n \n updateIndicatorPosition();\n\n const resizeObserver = new ResizeObserver(updateIndicatorPosition);\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [activeValue, updateIndicatorPosition, variant]);\n\n return (\n <nav \n ref={ref || containerRef} \n className={cn(navigationBarVariants({ variant, className }))} \n {...props}\n >\n {variant === \"menuBar\" && (\n <div\n ref={indicatorRef}\n className=\"absolute bottom-0 h-full origin-left rounded-full bg-secondary transition-all duration-300\"\n />\n )}\n {children}\n </nav>\n );\n }\n);\n\nNavigationBar.displayName = \"NavigationBar\";\n\nconst NavigationItem = React.forwardRef<HTMLButtonElement, NavigationItemProps>(\n ({ className, variant, active, value, ...props }, ref) => {\n // Determine the correct variant based on parent and state\n const getItemVariant = () => {\n if (variant === \"menuBarDefault\" || variant === \"menuBarActive\") {\n return active ? \"menuBarActive\" : \"menuBarDefault\";\n }\n return active ? \"active\" : variant || \"default\";\n };\n\n const appliedVariant = getItemVariant();\n const isMenuBar = appliedVariant === \"menuBarDefault\" || appliedVariant === \"menuBarActive\";\n\n return (\n <button\n ref={ref}\n data-active={active}\n data-value={value}\n className={cn(\n navigationItemVariants({\n variant: appliedVariant,\n className,\n }),\n !isMenuBar && \"px-4 py-2 rounded-md\"\n )}\n {...props}\n />\n );\n }\n);\n\nNavigationItem.displayName = \"NavigationItem\";\n\nexport { NavigationBar, NavigationItem, navigationBarVariants, navigationItemVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"./card\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport { cva } from \"class-variance-authority\";\n\nconst infoCardVariants = cva(\"space-y-1\", {\n variants: {\n size: {\n sm: \"p-2\",\n default: \"p-3\",\n lg: \"p-4\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n },\n defaultVariants: {\n size: \"default\",\n align: \"center\",\n },\n});\n\nconst valueVariants = cva(\"font-bold\", {\n variants: {\n color: {\n primary: \"text-foreground\",\n secondary: \"text-muted-foreground\",\n accent: \"text-primary\",\n success: \"text-green-600\",\n warning: \"text-yellow-600\",\n error: \"text-red-600\",\n },\n size: {\n sm: \"text-sm\",\n default: \"text-lg\",\n lg: \"text-xl\",\n xl: \"text-2xl\",\n },\n },\n defaultVariants: {\n color: \"primary\",\n size: \"default\",\n },\n});\n\nconst titleVariants = cva(\"font-medium text-muted-foreground\", {\n variants: {\n size: {\n sm: \"text-xs\",\n default: \"text-xs\",\n lg: \"text-sm\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\ninterface InfoCardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n VariantProps<typeof infoCardVariants> {\n title: string;\n value: string;\n color?: VariantProps<typeof valueVariants>[\"color\"];\n valueSize?: VariantProps<typeof valueVariants>[\"size\"];\n titleSize?: VariantProps<typeof titleVariants>[\"size\"];\n align?: VariantProps<typeof infoCardVariants>[\"align\"];\n icon?: React.ReactNode;\n subtitle?: string;\n}\n\nconst InfoCard = React.forwardRef<HTMLDivElement, InfoCardProps>(\n (\n {\n title,\n value,\n color = \"primary\",\n valueSize = \"default\",\n titleSize = \"default\",\n size = \"default\",\n align = \"center\",\n icon,\n subtitle,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <Card\n ref={ref}\n variant=\"item\"\n className={cn(infoCardVariants({ size, align }), className)}\n {...props}\n >\n {/* Icon */}\n {icon && (\n <div\n className={cn(\n \"flex mb-2\",\n align === \"left\" && \"justify-start\",\n align === \"center\" && \"justify-center\",\n align === \"right\" && \"justify-end\"\n )}\n >\n {icon}\n </div>\n )}\n\n {/* Title */}\n <p className={titleVariants({ size: titleSize })}>{title}</p>\n\n {/* Value */}\n <p className={valueVariants({ color, size: valueSize })}>{value}</p>\n\n {/* Subtitle */}\n {subtitle && <p className=\"text-xs text-muted-foreground/70\">{subtitle}</p>}\n </Card>\n );\n }\n);\n\nInfoCard.displayName = \"InfoCard\";\n\nexport { InfoCard };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"./card\";\nimport { InfoCard } from \"./info-card\";\nimport { LabelWithIcon } from \"./label-with-icon\";\n\ninterface InfoCardData {\n title: string;\n value: string;\n color?: \"primary\" | \"secondary\" | \"accent\" | \"success\" | \"warning\" | \"error\";\n icon?: React.ReactNode;\n}\n\ninterface OpportunityDetailsV1Props {\n title?: string;\n titleIcon?: React.ReactNode;\n topCards: readonly InfoCardData[]; // Flexible array for top row\n bottomCards: readonly InfoCardData[]; // Flexible array for bottom\n className?: string;\n}\n\nfunction OpportunityDetailsV1({\n className,\n title,\n titleIcon,\n topCards,\n bottomCards,\n}: OpportunityDetailsV1Props) {\n const defaultTitleIcon = (\n <div className=\"w-8 h-8 rounded-full bg-primary/20 flex items-center justify-center\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2L13.09 8.26L20 7L18.74 13.09L22 14L16.74 19.26L17 21L10.91 19.74L10 22L8.09 15.74L2 17L3.26 10.91L0 10L5.26 4.74L5 3L11.09 4.26L12 2Z\" />\n </svg>\n </div>\n );\n\n return (\n <Card className={cn(\"space-y-4\", className)}>\n {/* TODO: Add scroll area */}\n <div className=\"h-full overflow-y-auto\">\n <div className=\"space-y-4\">\n {/* Header with LabelWithIcon */}\n {(title || titleIcon) && (\n <div className=\"flex items-center\">\n <LabelWithIcon icon={titleIcon || defaultTitleIcon} textSize=\"lg\" iconSize=\"lg\">\n {title}\n </LabelWithIcon>\n </div>\n )}\n\n {/* Top row: 3 InfoCards side by side */}\n <div className=\"grid grid-cols-3 gap-3\">\n {topCards.map((card, index) => (\n <InfoCard\n key={index}\n title={card.title}\n value={card.value}\n color={card.color || \"primary\"}\n icon={card.icon}\n size=\"sm\"\n valueSize=\"sm\"\n titleSize=\"sm\"\n align=\"left\"\n />\n ))}\n </div>\n\n {/* Bottom section: 4 InfoCards full width, one below another */}\n <div className=\"space-y-2\">\n {bottomCards.map((card, index) => (\n <InfoCard\n key={index}\n title={card.title}\n value={card.value}\n color={card.color || \"primary\"}\n size=\"sm\"\n valueSize=\"sm\"\n titleSize=\"sm\"\n align=\"left\"\n className=\"w-full\"\n />\n ))}\n </div>\n </div>\n </div>\n </Card>\n );\n}\n\nexport { OpportunityDetailsV1, type InfoCardData };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { LabelWithIcon } from \"@/components/ui/label-with-icon\";\n\ninterface OpportunityItemProps extends React.ComponentProps<\"div\"> {\n icon?: React.ReactNode | string;\n name: string;\n tvl?: string;\n yield?: string;\n onSelect?: () => void;\n selected?: boolean;\n}\n\nconst OpportunityItem = React.forwardRef<HTMLDivElement, OpportunityItemProps>(\n (\n { className, icon, name, tvl, yield: yieldValue, onSelect, selected = false, ...props },\n ref\n ) => {\n const defaultIcon = (\n <div className=\"w-6 h-6 rounded-full bg-primary/20 flex items-center justify-center\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2L13.09 8.26L20 7L18.74 13.09L22 14L16.74 19.26L17 21L10.91 19.74L10 22L8.09 15.74L2 17L3.26 10.91L0 10L5.26 4.74L5 3L11.09 4.26L12 2Z\" />\n </svg>\n </div>\n );\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"cursor-pointer transition-all duration-200 hover:shadow-md w-full\",\n selected && \"ring-2 ring-primary ring-offset-2\",\n className\n )}\n onClick={onSelect}\n {...props}\n >\n <div className=\"flex gap-12 items-start justify-between\">\n {/* Left side: Name and TVL */}\n <div className=\"flex flex-col min-w-0 flex-1 items-start justify-start\">\n <span className=\"text-sm font-medium text-foreground truncate\">\n <LabelWithIcon icon={icon || defaultIcon} textSize=\"2xl\">\n {name}\n </LabelWithIcon>\n </span>\n {tvl && <span className=\"text-xs text-muted-foreground\">TVL: {tvl}</span>}\n </div>\n\n {/* Right side: Yield */}\n <div className=\"flex-shrink-0\">\n {yieldValue && <span className=\"text-lg font-bold text-primary\">{yieldValue}</span>}\n </div>\n </div>\n </Card>\n );\n }\n);\n\nOpportunityItem.displayName = \"OpportunityItem\";\n\nexport { OpportunityItem };\nexport type { OpportunityItemProps };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { LabelWithIcon } from \"@/components/ui/label-with-icon\";\n\ninterface DetailRow {\n label: string;\n value: string;\n highlight?: boolean;\n icon?: React.ReactNode;\n}\n\ninterface OpportunityDetailsProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n titleIcon?: React.ReactNode;\n yield?: string;\n details?: DetailRow[];\n badges?: Array<{\n text: string;\n icon?: React.ReactNode;\n variant?: \"default\" | \"secondary\" | \"outline\";\n }>;\n externalLink?: {\n text: string;\n href: string;\n icon?: React.ReactNode;\n };\n}\n\nconst OpportunityDetails = React.forwardRef<HTMLDivElement, OpportunityDetailsProps>(\n (\n {\n className,\n title,\n titleIcon,\n yield: yieldValue,\n details = [],\n badges = [],\n externalLink,\n ...props\n },\n ref\n ) => {\n const defaultTitleIcon = (\n <div className=\"w-8 h-8 rounded-full bg-primary/20 flex items-center justify-center\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2L13.09 8.26L20 7L18.74 13.09L22 14L16.74 19.26L17 21L10.91 19.74L10 22L8.09 15.74L2 17L3.26 10.91L0 10L5.26 4.74L5 3L11.09 4.26L12 2Z\" />\n </svg>\n </div>\n );\n\n const ExternalLinkIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n );\n\n return (\n <Card ref={ref} className={cn(\"p-4 space-y-4\", className)} {...props}>\n {/* Header with title and yield */}\n {(title || titleIcon) && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <LabelWithIcon icon={titleIcon || defaultTitleIcon} textSize=\"lg\" iconSize=\"lg\">\n {title}\n </LabelWithIcon>\n </div>\n {yieldValue && (\n <div className=\"text-right\">\n <div className=\"text-2xl font-bold text-primary\">{yieldValue}</div>\n <div className=\"text-xs text-muted-foreground\">APY</div>\n </div>\n )}\n </div>\n )}\n\n {/* Detail rows */}\n {details.length > 0 && (\n <div className=\"space-y-3\">\n {details.map((detail, index) => (\n <div key={index} className=\"space-y-2\">\n <Card className=\"p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {detail.icon}\n <span className=\"text-sm text-muted-foreground\">{detail.label}</span>\n </div>\n <span className={cn(\"text-sm font-medium\", detail.highlight && \"text-primary\")}>\n {detail.value}\n </span>\n </div>\n </Card>\n </div>\n ))}\n </div>\n )}\n\n {/* Badges section */}\n {badges.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {badges.map((badge, index) => (\n <div\n key={index}\n className={cn(\n \"inline-flex items-center gap-2 px-3 py-1.5 rounded-full text-xs font-medium\",\n badge.variant === \"secondary\" && \"bg-secondary text-secondary-foreground\",\n badge.variant === \"outline\" && \"border border-border bg-background\",\n (!badge.variant || badge.variant === \"default\") && \"bg-primary/10 text-primary\"\n )}\n >\n {badge.icon}\n {badge.text}\n </div>\n ))}\n </div>\n )}\n\n {/* External link */}\n {externalLink && (\n <div className=\"pt-2 border-t border-border\">\n <a\n href={externalLink.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-2 text-sm text-primary hover:text-primary/80 transition-colors\"\n >\n {externalLink.icon}\n {externalLink.text}\n <ExternalLinkIcon />\n </a>\n </div>\n )}\n </Card>\n );\n }\n);\n\nOpportunityDetails.displayName = \"OpportunityDetails\";\n\nexport { OpportunityDetails, type DetailRow };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { IconAnimation } from \"@/components/ui/icon-animation\";\nimport { Button } from \"@/components/ui/button\";\nimport { CheckIcon, TurtleIcon, XIcon } from \"lucide-react\";\n\ninterface TxStatusProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n description?: string;\n txHash?: string;\n explorerUrl?: string;\n estimatedTime?: string;\n amount?: string;\n token?: string;\n protocol?: string;\n steps?: Array<{\n label: string;\n completed: boolean;\n current?: boolean;\n txHash?: string;\n }>;\n variant?: \"default\" | \"compact\";\n completed?: boolean;\n cancelled?: boolean;\n onViewDetails?: () => void;\n onClose?: () => void;\n showActions?: boolean;\n}\n\nconst TxStatus = React.forwardRef<HTMLDivElement, TxStatusProps>(\n (\n {\n className,\n title,\n description,\n txHash,\n explorerUrl,\n estimatedTime,\n amount,\n token,\n protocol,\n steps = [],\n variant = \"default\",\n completed = false,\n cancelled = false,\n onViewDetails,\n onClose,\n showActions = true,\n ...props\n },\n ref\n ) => {\n const defaultTitle = cancelled \n ? \"Transaction Cancelled\" \n : completed \n ? \"Transaction Completed\" \n : \"Processing Transaction\";\n const defaultDescription = cancelled\n ? \"Transaction was cancelled by user\"\n : completed\n ? \"Your transaction has been successfully processed!\"\n : \"Please wait while your transaction is being processed...\";\n\n const ExternalLinkIcon = ({ size = \"w-4 h-4\" }) => (\n <svg className={size} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n );\n\n const StepCheckIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n\n const formatTxHash = (hash: string) => {\n if (hash.length <= 12) return hash;\n return `${hash.slice(0, 6)}...${hash.slice(-6)}`;\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"p-6 text-center space-y-4\",\n variant === \"compact\" && \"p-4 space-y-3\",\n className\n )}\n {...props}\n >\n {/* Animation */}\n <div className=\"flex justify-center\">\n <IconAnimation spinning={!completed && !cancelled} size={variant === \"compact\" ? \"default\" : \"lg\"}>\n {cancelled ? (\n <XIcon className=\"w-8 h-8 text-destructive\" />\n ) : completed ? (\n <CheckIcon className=\"w-8 h-8 text-primary\" />\n ) : (\n <TurtleIcon className=\"w-8 h-8 text-primary\" />\n )}\n </IconAnimation>\n </div>\n\n {/* Title and description */}\n <div className=\"space-y-2\">\n <h3\n className={cn(\n \"font-medium text-foreground\",\n variant === \"compact\" ? \"text-sm\" : \"text-base\"\n )}\n >\n {title || defaultTitle}\n </h3>\n <p className={cn(\"text-muted-foreground\", variant === \"compact\" ? \"text-xs\" : \"text-sm\")}>\n {description || defaultDescription}\n </p>\n </div>\n\n {/* Transaction summary (completed state) */}\n {completed && !cancelled && (amount || token || protocol) && (\n <div className=\"p-3 bg-muted/50 rounded-lg space-y-1\">\n {amount && token && (\n <div className=\"text-sm font-medium\">\n {amount} {token}\n </div>\n )}\n {protocol && <div className=\"text-xs text-muted-foreground\">via {protocol}</div>}\n </div>\n )}\n\n {/* Transaction hash link */}\n {txHash && !cancelled && (\n <div className=\"space-y-1\">\n <div className=\"text-xs text-muted-foreground\">Transaction Hash</div>\n {explorerUrl ? (\n <a\n href={`${explorerUrl}/tx/${txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-2 text-sm text-primary hover:text-primary/80 transition-colors\"\n >\n {formatTxHash(txHash)}\n <ExternalLinkIcon />\n </a>\n ) : (\n <div className=\"text-sm font-mono text-foreground\">{formatTxHash(txHash)}</div>\n )}\n </div>\n )}\n\n {/* Estimated time (pending state) */}\n {!completed && !cancelled && estimatedTime && (\n <div className=\"text-xs text-muted-foreground\">Estimated time: {estimatedTime}</div>\n )}\n\n {/* Progress steps (pending state) */}\n {!completed && !cancelled && steps.length > 0 && (\n <div className=\"space-y-2 pt-2 border-t border-border\">\n <div className=\"text-xs font-medium text-muted-foreground text-left\">Progress</div>\n <div className=\"space-y-2\">\n {steps.map((step, index) => (\n <div key={index} className=\"flex items-center gap-3 text-left\">\n <div\n className={cn(\n \"flex items-center justify-center w-5 h-5 rounded-full border-2 flex-shrink-0\",\n step.completed && \"bg-primary border-primary text-primary-foreground\",\n step.current &&\n !step.completed &&\n \"border-primary text-primary animate-pulse\",\n !step.completed &&\n !step.current &&\n \"border-muted-foreground/30 text-muted-foreground\"\n )}\n >\n {step.completed ? (\n <StepCheckIcon />\n ) : step.current ? (\n <div className=\"w-2 h-2 rounded-full bg-primary animate-pulse\" />\n ) : (\n <div className=\"w-2 h-2 rounded-full bg-muted-foreground/30\" />\n )}\n </div>\n <div className=\"flex-1 flex items-center justify-between\">\n <span\n className={cn(\n \"text-sm\",\n step.completed && \"text-foreground\",\n step.current && !step.completed && \"text-foreground font-medium\",\n !step.completed && !step.current && \"text-muted-foreground\"\n )}\n >\n {step.label}\n </span>\n {step.txHash && explorerUrl && (\n <a\n href={`${explorerUrl}/tx/${step.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-primary hover:text-primary/80 transition-colors ml-2\"\n title={`View transaction: ${step.txHash}`}\n >\n <span className=\"font-mono\">{step.txHash.slice(0, 6)}...{step.txHash.slice(-4)}</span>\n <ExternalLinkIcon size=\"w-3 h-3\" />\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Action buttons (completed or cancelled state) */}\n {(completed || cancelled) && showActions && (onViewDetails || onClose) && (\n <div\n className={cn(\n \"flex gap-2 pt-2\",\n variant === \"compact\" ? \"flex-col\" : \"flex-row justify-center\"\n )}\n >\n {!cancelled && onViewDetails && (\n <Button\n variant=\"transparentWhite\"\n size={variant === \"compact\" ? \"sm\" : \"default\"}\n onClick={onViewDetails}\n >\n View Details\n </Button>\n )}\n {onClose && (\n <Button\n variant=\"default\"\n size={variant === \"compact\" ? \"sm\" : \"default\"}\n onClick={onClose}\n >\n {cancelled ? \"Try Again\" : \"Done\"}\n </Button>\n )}\n </div>\n )}\n </Card>\n );\n }\n);\n\nTxStatus.displayName = \"TxStatus\";\n\nexport { TxStatus };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Select, SelectContent, SelectItem, SelectTrigger } from \"@/components/ui/select\";\nimport { useEffect } from \"react\";\n\ninterface Token {\n icon: React.ReactNode;\n symbol: string;\n address: string;\n}\n\ninterface TokenSelectorProps {\n tokens: Token[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nconst TokenSelector = React.forwardRef<HTMLButtonElement, TokenSelectorProps>(\n ({ tokens, value, onValueChange, placeholder = \"Select token\", disabled, className }, ref) => {\n // Auto-select first token if no value is provided and tokens exist\n const effectiveValue = value || (tokens.length > 0 ? tokens[0].address : undefined);\n\n // Find the selected token to display in the trigger\n const selectedToken = tokens.find((token) => token.address === effectiveValue);\n\n // Handle value change and auto-select first token on mount\n useEffect(() => {\n if (!value && tokens.length > 0 && onValueChange) {\n onValueChange(tokens[0].address);\n }\n }, [value, tokens, onValueChange]);\n\n return (\n <Select value={effectiveValue} onValueChange={onValueChange} disabled={disabled}>\n <SelectTrigger\n ref={ref}\n className={cn(\n \"w-auto min-w-[80px] h-8 px-2 py-1 bg-muted hover:bg-muted/80 border-none rounded-md text-sm font-medium\",\n \"focus:ring-2 focus:ring-primary/20 focus:outline-none\",\n className\n )}\n >\n {selectedToken ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-4 h-4 flex items-center justify-center\">{selectedToken.icon}</span>\n <span className=\"text-sm font-medium\">{selectedToken.symbol}</span>\n </div>\n ) : (\n <span className=\"text-sm text-muted-foreground\">{placeholder}</span>\n )}\n </SelectTrigger>\n <SelectContent>\n {tokens.map((token) => (\n <SelectItem key={token.address} value={token.address} className=\"cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <span className=\"w-4 h-4 flex items-center justify-center\">{token.icon}</span>\n <span className=\"text-sm font-medium\">{token.symbol}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n);\n\nTokenSelector.displayName = \"TokenSelector\";\n\nexport { TokenSelector, type Token };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { Input } from \"@/components/ui/input\";\nimport { Chip } from \"@/components/ui/chip\";\nimport { TokenSelector, type Token } from \"./token-selector\";\n\ninterface SwapInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n value?: string;\n onChange?: (value: string) => void;\n tokens: Token[];\n selectedToken?: string;\n onTokenChange?: (tokenAddress: string) => void;\n usdValue?: string;\n balance?: string;\n onMaxClick?: () => void;\n placeholder?: string;\n disabled?: boolean;\n hideTokenSelector?: boolean;\n}\n\nconst SwapInput = React.forwardRef<HTMLDivElement, SwapInputProps>(\n (\n {\n className,\n value = \"\",\n onChange,\n tokens,\n selectedToken,\n onTokenChange,\n usdValue,\n balance,\n onMaxClick,\n placeholder = \"0\",\n disabled = false,\n hideTokenSelector = false,\n ...props\n },\n ref\n ) => {\n // Find the selected token for balance display\n const currentToken = tokens.find((token) => token.address === selectedToken);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n // Allow only numbers and decimal point\n if (/^\\d*\\.?\\d*$/.test(newValue)) {\n onChange?.(newValue);\n }\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\"space-y-3\", disabled && \"opacity-50\", className)}\n {...props}\n >\n {/* Main input row */}\n <div className=\"flex items-center gap-3\">\n {/* Amount input */}\n <div className=\"flex-1\">\n <Input\n variant=\"nofocus\"\n value={value}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={disabled}\n className=\"text-2xl font-medium border-none bg-transparent p-0 h-auto focus:ring-0\"\n />\n </div>\n\n {/* Token selector - conditionally rendered */}\n {!hideTokenSelector && (\n <TokenSelector\n tokens={tokens}\n value={selectedToken}\n onValueChange={onTokenChange}\n disabled={disabled}\n placeholder=\"Select token\"\n />\n )}\n </div>\n\n {/* Bottom row: USD value and balance with MAX */}\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div>{usdValue && <span>≈ ${usdValue}</span>}</div>\n <div className=\"flex items-center gap-2\">\n {balance && (\n <span>\n Balance: {balance} {currentToken?.symbol || \"\"}\n </span>\n )}\n {onMaxClick && (\n <Chip\n variant=\"default\"\n size=\"xs\"\n onClick={onMaxClick}\n className={cn(\n \"cursor-pointer hover:bg-primary hover:text-primary-foreground transition-colors text-xs\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n MAX\n </Chip>\n )}\n </div>\n </div>\n </Card>\n );\n }\n);\n\nSwapInput.displayName = \"SwapInput\";\n\nexport { SwapInput, type Token };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\ninterface SwapDetailsProps extends React.HTMLAttributes<HTMLDivElement> {\n deposit?: string;\n receive?: string;\n equivalentInUsd?: string;\n slippageInUsd?: string;\n networkFee?: string;\n networkFeeInUsd?: string;\n swapFee?: string;\n showFree?: boolean;\n defaultOpen?: boolean;\n}\n\nconst SwapDetails = React.forwardRef<HTMLDivElement, SwapDetailsProps>(\n (\n {\n className,\n swapFee,\n slippageInUsd,\n deposit,\n receive,\n equivalentInUsd,\n networkFee,\n networkFeeInUsd,\n showFree = false,\n defaultOpen = false,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n\n return (\n <Card ref={ref} className={cn(\"overflow-hidden\", className)} {...props}>\n {/* Collapsible header */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between p-1 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">\n {deposit} = {receive}\n </span>\n <span className=\"text-xs text-muted-foreground\">(≈ ${equivalentInUsd})</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-muted-foreground\">≈ ${slippageInUsd}</span>\n <ChevronDownIcon className=\"w-4 h-4\" />\n </div>\n </button>\n\n {/* Collapsible content */}\n {isOpen && (\n <div className=\"transition-all animate-in fade-in-0 duration-300\">\n {/* Swap Fee */}\n\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-muted-foreground text-xs\">Swap Fee</span>\n {swapFee ? (\n <span className=\"font-medium\">{swapFee}%</span>\n ) : (\n <span className=\"text-xs px-2 py-1 bg-primary/10 text-primary rounded-full font-medium\">\n FREE\n </span>\n )}\n </div>\n\n {/* Network Fee */}\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-muted-foreground text-xs\">Network Fee</span>\n <span className=\"font-medium\">\n <span className=\"text-xs text-foreground\">{networkFee}</span>\n {networkFeeInUsd ? (\n <span className=\"text-xs text-muted-foreground\">(≈ ${networkFeeInUsd})</span>\n ) : (\n <span className=\"text-xs px-2 py-1 bg-primary/10 text-primary rounded-full font-medium\">\n FREE\n </span>\n )}\n </span>\n </div>\n </div>\n )}\n </Card>\n );\n }\n);\n\nSwapDetails.displayName = \"SwapDetails\";\n\nexport { SwapDetails };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Card } from \"@/components/ui/card\";\nimport { ChevronDownIcon, ChevronsRightIcon } from \"lucide-react\";\nimport { LabelWithIcon, ScrollArea, ScrollBar } from \"../ui\";\n\ninterface TokenStep {\n icon?: React.ReactNode | string;\n symbol: string;\n amount?: string;\n}\n\ninterface RouteDetailsProps extends React.HTMLAttributes<HTMLDivElement> {\n tokens: TokenStep[];\n variant?: \"default\" | \"compact\";\n defaultOpen?: boolean;\n}\n\nconst RouteDetails = React.forwardRef<HTMLDivElement, RouteDetailsProps>(\n ({ className, tokens = [], variant = \"default\", defaultOpen = false, ...props }, ref) => {\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n\n const defaultIcon = (symbol: string) => (\n <div className=\"w-8 h-8 rounded-full bg-primary/20 flex items-center justify-center\">\n <span className=\"text-xs font-bold text-primary\">{symbol.charAt(0)}</span>\n </div>\n );\n\n if (tokens.length === 0) return null;\n\n return (\n <Card ref={ref} className={cn(\"overflow-hidden\", className)} {...props}>\n {/* Collapsible header */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between p-2 hover:bg-muted/50 transition-colors\"\n >\n <span className=\"text-sm font-medium\">Swap Route</span>\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {tokens.length} token{tokens.length > 1 ? \"s\" : \"\"}\n </span>\n <ChevronDownIcon className=\"w-4 h-4 text-primary\" />\n </div>\n </button>\n\n {/* Collapsible content */}\n {isOpen && (\n <div className=\"px-4 pb-4 border-t border-border\">\n {/* Route visualization */}\n <ScrollArea className=\"rounded-md whitespace-nowrap\">\n <div className=\"flex items-center justify-between gap-2 overflow-x-auto py-3\">\n {tokens.map((token, index) => (\n <>\n <Card variant=\"item\" className=\"p-2 rounded-full\" key={index}>\n <LabelWithIcon\n icon={token.icon || defaultIcon(token.symbol)}\n textSize=\"xs\"\n iconSize=\"sm\"\n >\n <span className=\"gap-2\">\n {token.amount} {token.symbol}\n </span>\n </LabelWithIcon>\n\n {/* Arrow between tokens */}\n </Card>\n {index < tokens.length - 1 && (\n <div className=\"flex-shrink-0 mx-1\">\n <ChevronsRightIcon className=\"w-4 h-4 text-primary\" />\n </div>\n )}\n </>\n ))}\n </div>\n <ScrollBar orientation=\"horizontal\" className=\"h-2\" />\n </ScrollArea>\n </div>\n )}\n </Card>\n );\n }\n);\n\nRouteDetails.displayName = \"RouteDetails\";\n\nexport { RouteDetails, type TokenStep };\n","export const tokens = {\n colors: {\n // Turtle brand colors\n neonGreen: 'oklch(0.86 0.16 142.5)',\n darkGreen: 'oklch(0.24 0.16 142.5)', \n ninjaBlack: 'oklch(0.1 0.005 120)',\n wiseWhite: 'oklch(0.98 0 0)',\n wiseGray: 'oklch(0.17 0.003 120)',\n mintCream: 'oklch(0.95 0.046 109)',\n turtleYellow: 'oklch(0.97 0.21 98.2)',\n turtleRed: 'oklch(0.6 0.28 29)',\n whiteTransparent: 'oklch(0.98 0 0 / 0.02)',\n\n // Semantic colors - light theme\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.141 0.005 285.823)',\n card: 'oklch(1 0 0)',\n cardForeground: 'oklch(0.141 0.005 285.823)',\n popover: 'oklch(1 0 0)',\n popoverForeground: 'oklch(0.141 0.005 285.823)',\n primary: 'oklch(0.21 0.006 285.885)',\n primaryForeground: 'oklch(0.985 0 0)',\n secondary: 'oklch(0.967 0.001 286.375)',\n secondaryForeground: 'oklch(0.21 0.006 285.885)',\n muted: 'oklch(0.967 0.001 286.375)',\n mutedForeground: 'oklch(0.552 0.016 285.938)',\n accent: 'oklch(0.967 0.001 286.375)',\n accentForeground: 'oklch(0.21 0.006 285.885)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.92 0.004 286.32)',\n input: 'oklch(0.92 0.004 286.32)',\n ring: 'oklch(0.705 0.015 286.067)',\n },\n\n // Semantic colors - dark theme\n dark: {\n background: 'oklch(0.141 0.005 285.823)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.21 0.006 285.885)',\n cardForeground: 'oklch(0.985 0 0)',\n popover: 'oklch(0.21 0.006 285.885)',\n popoverForeground: 'oklch(0.985 0 0)',\n primary: 'oklch(0.92 0.004 286.32)',\n primaryForeground: 'oklch(0.21 0.006 285.885)',\n secondary: 'oklch(0.274 0.006 286.033)',\n secondaryForeground: 'oklch(0.985 0 0)',\n muted: 'oklch(0.274 0.006 286.033)',\n mutedForeground: 'oklch(0.705 0.015 286.067)',\n accent: 'oklch(0.274 0.006 286.033)',\n accentForeground: 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.552 0.016 285.938)',\n }\n },\n\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '0.75rem', // 12px\n lg: '1rem', // 16px\n xl: '1.5rem', // 24px\n '2xl': '2rem', // 32px\n '3xl': '3rem', // 48px\n '4xl': '4rem', // 64px\n },\n\n radius: {\n none: '0',\n sm: 'calc(0.625rem - 4px)',\n md: 'calc(0.625rem - 2px)', \n lg: '0.625rem',\n xl: 'calc(0.625rem + 4px)',\n full: '9999px',\n },\n\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n '2xl': ['1.5rem', { lineHeight: '2rem' }],\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n },\n\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n\n shadow: {\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }\n} as const\n\nexport type Tokens = typeof tokens\nexport type ColorTokens = typeof tokens.colors\nexport type SpacingTokens = typeof tokens.spacing\nexport type RadiusTokens = typeof tokens.radius"],"names":["cn","inputs","twMerge","clsx","inputVariants","cva","Input","React","className","variant","size","cursor","type","prompt","props","ref","jsxs","jsx","Label","LabelPrimitive","ScrollArea","children","ScrollAreaPrimitive","ScrollBar","orientation","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","ChevronUpIcon","Separator","decorative","SeparatorPrimitive","Toaster","theme","useTheme","Sonner","Switch","SwitchPrimitive","toggleVariants","Toggle","TogglePrimitive","ToggleGroupContext","ToggleGroup","ToggleGroupPrimitive","ToggleGroupItem","context","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","sideOffset","buttonVariants","Button","rounded","asChild","Comp","Slot","cardVariants","Card","padding","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","chipVariants","Chip","iconAnimationVariants","IconAnimation","spinning","labelWithIconVariants","iconSizeClasses","LabelWithIcon","textSize","icon","iconPosition","iconSize","iconClassName","renderIcon","_a","navigationBarVariants","navigationItemVariants","NavigationBar","activeValue","containerRef","indicatorRef","updateIndicatorPosition","activeButton","resizeObserver","NavigationItem","active","value","appliedVariant","isMenuBar","infoCardVariants","valueVariants","titleVariants","InfoCard","title","color","valueSize","titleSize","align","subtitle","OpportunityDetailsV1","titleIcon","topCards","bottomCards","defaultTitleIcon","card","index","OpportunityItem","name","tvl","yieldValue","onSelect","selected","defaultIcon","OpportunityDetails","details","badges","externalLink","ExternalLinkIcon","detail","badge","TxStatus","description","txHash","explorerUrl","estimatedTime","amount","token","protocol","steps","completed","cancelled","onViewDetails","onClose","showActions","defaultTitle","defaultDescription","StepCheckIcon","formatTxHash","hash","XIcon","CheckIcon","TurtleIcon","step","TokenSelector","tokens","onValueChange","placeholder","disabled","effectiveValue","selectedToken","useEffect","SwapInput","onChange","onTokenChange","usdValue","balance","onMaxClick","hideTokenSelector","currentToken","handleInputChange","e","newValue","SwapDetails","swapFee","slippageInUsd","deposit","receive","equivalentInUsd","networkFee","networkFeeInUsd","showFree","defaultOpen","isOpen","setIsOpen","RouteDetails","symbol","Fragment","ChevronsRightIcon"],"mappings":"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"}