@tangle-network/blueprint-ui 0.1.2 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/dialog.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/separator.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/toggle.tsx","../src/components/motion/AnimatedPage.tsx","../src/components/shared/Identicon.tsx","../src/components/shared/TangleLogo.tsx","../src/components/layout/AppDocument.tsx","../src/components/layout/AppFooter.tsx","../src/components/layout/AppToaster.tsx","../src/components/layout/Web3Shell.tsx","../src/components/layout/ChainSwitcher.tsx","../src/components/layout/ThemeToggle.tsx","../src/components/web3/ConnectWalletCta.tsx","../src/components/forms/FormField.tsx","../src/components/forms/BlueprintJobForm.tsx","../src/components/forms/FormSummary.tsx","../src/components/forms/JobExecutionDialog.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { cn } from '../../utils';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return <DialogPrimitive.Overlay data-slot=\"dialog-overlay\" className={cn('fixed inset-0 z-50 bg-black/50', className)} {...props} />;\n}\n\nfunction DialogContent({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Content>) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-xl border border-border p-6 shadow-2xl duration-200 outline-none sm:max-w-lg',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none\">\n <div className=\"i-ph:x size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"dialog-header\" className={cn('flex flex-col gap-2 text-center sm:text-left', className)} {...props} />;\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"dialog-footer\" className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return <DialogPrimitive.Title data-slot=\"dialog-title\" className={cn('text-lg leading-none font-semibold', className)} {...props} />;\n}\n\nfunction DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return <DialogPrimitive.Description data-slot=\"dialog-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />;\n}\n\nexport { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription };\n","import * as React from 'react';\nimport { cn } from '../../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-11 w-full min-w-0 rounded-lg px-3.5 py-2.5 text-base font-body',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'placeholder:text-bp-elements-textTertiary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { cn } from '../../utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n value?: string;\n onValueChange?: (value: string) => void;\n options: SelectOption[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\nfunction Select({ value, onValueChange, options, placeholder, className, disabled }: SelectProps) {\n return (\n <SelectPrimitive.Root value={value} onValueChange={onValueChange} disabled={disabled}>\n <SelectPrimitive.Trigger\n className={cn(\n 'group flex h-11 w-full items-center justify-between rounded-lg px-3.5 py-2.5 text-base font-body',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'data-[placeholder]:text-bp-elements-textTertiary',\n className,\n )}\n >\n <SelectPrimitive.Value placeholder={placeholder ?? 'Select...'} />\n <SelectPrimitive.Icon className=\"ml-2 shrink-0 text-bp-elements-textTertiary transition-transform duration-200 group-data-[state=open]:rotate-180\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={4}\n className={cn(\n 'relative z-50 max-h-[min(var(--radix-select-content-available-height),280px)] min-w-[var(--radix-select-trigger-width)] overflow-hidden',\n 'rounded-xl border border-white/[0.06] bg-neutral-900/95 backdrop-blur-xl shadow-2xl shadow-black/40',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-[0.98] data-[state=open]:slide-in-from-top-1',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-[0.98] data-[state=closed]:slide-out-to-top-1',\n )}\n >\n <SelectPrimitive.Viewport className=\"p-1.5\">\n {options.map((opt) => (\n <SelectPrimitive.Item\n key={opt.value}\n value={opt.value}\n className={cn(\n 'relative flex w-full cursor-pointer items-center rounded-lg px-3 py-2.5 text-sm font-body outline-none select-none',\n 'text-neutral-300 transition-colors duration-100',\n 'data-[highlighted]:bg-white/[0.06] data-[highlighted]:text-white',\n 'data-[state=checked]:text-violet-300',\n )}\n >\n <SelectPrimitive.ItemText>{opt.label}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"ml-auto pl-3\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M3 7.5L5.5 10L11 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n}\n\nexport { Select };\n","import * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '../../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 { cn } from '../../utils';\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn('bg-accent animate-pulse rounded-md', className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"glass-card rounded-xl overflow-hidden\">\n <div className=\"relative w-full overflow-auto\">\n <table data-slot=\"table\" className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return <thead data-slot=\"table-header\" className={cn('border-b border-bp-elements-borderColor', className)} {...props} />;\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" className={cn('[&_tr:last-child]:border-0', className)} {...props} />;\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'border-b border-bp-elements-dividerColor transition-colors duration-150 hover:bg-bp-elements-item-backgroundHover data-[state=selected]:bg-bp-elements-item-backgroundActive',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn('h-11 px-4 text-left align-middle font-data text-xs font-semibold uppercase tracking-wider text-bp-elements-textSecondary', className)}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return <td data-slot=\"table-cell\" className={cn('px-4 py-3 align-middle', className)} {...props} />;\n}\n\nexport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell };\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '../../utils';\n\nfunction Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn('glass-card inline-flex h-10 w-fit items-center justify-center rounded-xl p-1 gap-0.5', className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex items-center justify-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-medium font-display whitespace-nowrap transition-all duration-200',\n 'text-bp-elements-textTertiary hover:text-bp-elements-textSecondary',\n 'data-[state=active]:text-violet-700 dark:data-[state=active]:text-violet-400 data-[state=active]:bg-violet-500/10 data-[state=active]:shadow-[0_0_12px_rgba(142,89,255,0.1)]',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('flex-1 outline-none', className)} {...props} />;\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'min-h-[80px] w-full rounded-lg px-3.5 py-2.5 text-base font-body resize-y',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'placeholder:text-bp-elements-textTertiary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { cn } from '../../utils';\n\ninterface ToggleProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction Toggle({ checked, onChange, disabled, className }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => onChange(!checked)}\n className={cn(\n 'relative w-11 h-6 rounded-full transition-colors',\n checked ? 'bg-violet-600' : 'bg-bp-elements-background-depth-4',\n disabled && 'opacity-40 pointer-events-none',\n className,\n )}\n >\n <span\n className={cn(\n 'absolute top-0.5 left-0.5 w-5 h-5 rounded-full bg-white transition-transform',\n checked && 'translate-x-5',\n )}\n />\n </button>\n );\n}\n\nexport { Toggle };\n","import { motion } from 'framer-motion';\n\nconst pageVariants = {\n initial: { opacity: 0, y: 12 },\n animate: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] as const },\n },\n exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },\n} as const;\n\nexport function AnimatedPage({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <motion.div variants={pageVariants} initial=\"initial\" animate=\"animate\" exit=\"exit\" className={className}>\n {children}\n </motion.div>\n );\n}\n\nconst staggerContainer = {\n animate: { transition: { staggerChildren: 0.06, delayChildren: 0.1 } },\n};\n\nconst staggerItem = {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0, transition: { duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] as const } },\n} as const;\n\nexport function StaggerContainer({ children, className }: { children: React.ReactNode; className?: string }) {\n return <motion.div variants={staggerContainer} initial=\"initial\" animate=\"animate\" className={className}>{children}</motion.div>;\n}\n\nexport function StaggerItem({ children, className }: { children: React.ReactNode; className?: string }) {\n return <motion.div variants={staggerItem} className={className}>{children}</motion.div>;\n}\n","import { blo } from 'blo';\nimport type { Address } from 'viem';\n\ninterface IdenticonProps {\n address: Address;\n size?: number;\n className?: string;\n}\n\nexport function Identicon({ address, size = 20, className }: IdenticonProps) {\n const dataUri = blo(address, size);\n return (\n <img\n src={dataUri}\n alt={`${address.slice(0, 6)}...${address.slice(-4)}`}\n width={size}\n height={size}\n className={`rounded-full ${className ?? ''}`}\n style={{ imageRendering: 'pixelated' }}\n />\n );\n}\n","import { useId } from 'react';\n\ninterface TangleLogoProps {\n label?: string;\n}\n\nexport function TangleLogo({ label }: TangleLogoProps) {\n const paintId = useId();\n\n return (\n <div className=\"flex items-center gap-2\">\n <svg\n width={114}\n height={28}\n viewBox=\"0 0 114 28\"\n className=\"fill-bp-elements-textPrimary stroke-none\"\n >\n <g clipPath=\"url(#clip0_828_2896)\">\n <path\n d=\"M32 21.9598C32.0014 20.3605 31.2756 18.8261 29.9818 17.6934C28.6881 16.5606 26.9321 15.9221 25.0994 15.918L17.4484 15.918C17.4003 15.2958 17.3699 14.6596 17.3699 14C17.3699 13.3404 17.3396 12.7073 17.2969 12.082L25.0994 12.082C26.9162 12.0566 28.6488 11.4089 29.9233 10.2788C31.1978 9.14863 31.9121 7.62659 31.9121 6.041C31.9121 4.45541 31.1978 2.93337 29.9233 1.80323C28.6488 0.67309 26.9162 0.0254409 25.0994 -3.01633e-07L6.81321 -1.10095e-06C4.9964 0.02544 3.26386 0.673089 1.98936 1.80323C0.714863 2.93337 0.000568195 4.45541 0.000568126 6.041C0.000568057 7.62659 0.714862 9.14863 1.98936 10.2788C3.26386 11.4089 4.9964 12.0566 6.81321 12.082L14 12.25C14.5 12.25 14.5427 13.3404 14.5427 14C14.5427 14.6596 14.573 15.2927 14.6158 15.918L6.81321 15.918C4.9964 15.9434 3.26386 16.5911 1.98936 17.7212C0.714862 18.8514 0.000567499 20.3734 0.00056743 21.959C0.000567361 23.5446 0.714862 25.0666 1.98936 26.1968C3.26386 27.3269 4.9964 27.9746 6.81321 28L25.0994 28C26.9318 27.9959 28.6875 27.3576 29.9812 26.2252C31.2749 25.0928 32.0009 23.5588 32 21.9598ZM29.1727 6.04022C29.1732 6.98405 28.7446 7.8895 27.981 8.5579C27.2173 9.22631 26.181 9.60308 25.0994 9.60556L16.9974 9.60555C16.7039 7.83811 16.1447 6.11213 15.3342 4.47222C14.9768 3.7617 14.5193 3.09283 13.9723 2.48111L25.0994 2.48111C26.1798 2.48358 27.215 2.8595 27.9785 3.52656C28.7419 4.19362 29.1713 5.09747 29.1727 6.04022ZM6.81321 9.60555C5.72959 9.60555 4.69036 9.22992 3.92412 8.56129C3.15789 7.89266 2.72742 6.98581 2.72742 6.04022C2.72742 5.09464 3.15789 4.18778 3.92412 3.51915C4.69036 2.85052 5.7296 2.47489 6.81321 2.47489L8.64754 2.47489C10.2679 2.47489 11.8028 3.59489 12.7583 5.47244C13.4124 6.7954 13.8776 8.18352 14.1434 9.60555L6.81321 9.60555ZM2.7399 21.9598C2.73943 21.0159 3.16802 20.1105 3.93166 19.4421C4.6953 18.7737 5.73161 18.3969 6.81321 18.3944L14.9153 18.3944C15.2088 20.1619 15.768 21.8879 16.5785 23.5278C16.9358 24.2383 17.3933 24.9072 17.9404 25.5189L6.81321 25.5189C5.73285 25.5164 4.69762 25.1405 3.93418 24.4734C3.17074 23.8064 2.74131 22.9025 2.7399 21.9598ZM19.1651 22.5276C18.511 21.2046 18.0458 19.8165 17.78 18.3944L25.0994 18.3944C26.1831 18.3944 27.2223 18.7701 27.9885 19.4387C28.7548 20.1073 29.1852 21.0142 29.1852 21.9598C29.1852 22.9054 28.7548 23.8122 27.9885 24.4809C27.2223 25.1495 26.1831 25.5251 25.0994 25.5251L23.2651 25.5251C21.6518 25.5251 20.117 24.4051 19.1651 22.5276Z\"\n fill={`url(#paint0_linear_${paintId})`}\n />\n <path\n opacity=\"0.8\"\n d=\"M32 6.04022C32.0014 7.63948 31.2756 9.17389 29.9818 10.3066C28.688 11.4394 26.9321 12.0779 25.0993 12.082L17.4481 12.082C17.4 12.7042 17.3697 13.3404 17.3697 14C17.3697 14.6596 17.3394 15.2927 17.2966 15.918L25.0993 15.918C26.9162 15.9434 28.6487 16.5911 29.9232 17.7212C31.1978 18.8514 31.9121 20.3734 31.9121 21.959C31.9121 23.5446 31.1978 25.0666 29.9232 26.1968C28.6487 27.3269 26.9162 27.9746 25.0993 28L6.81277 28C4.99592 27.9746 3.26335 27.3269 1.98883 26.1968C0.714308 25.0666 5.31303e-08 23.5446 7.20382e-08 21.959C9.09462e-08 20.3734 0.714308 18.8514 1.98883 17.7212C3.26335 16.5911 4.99592 15.9434 6.81277 15.918L13.9997 15.75C14.4997 15.75 14.5424 14.6596 14.5424 14C14.5424 13.3404 14.5727 12.7073 14.6155 12.082L6.81277 12.082C4.99592 12.0566 3.26335 11.4089 1.98883 10.2788C0.714308 9.14863 2.42951e-07 7.62659 2.61858e-07 6.041C2.80766e-07 4.45541 0.714308 2.93337 1.98883 1.80323C3.26335 0.673093 4.99592 0.0254399 6.81277 -3.00355e-07L25.0993 -8.22899e-08C26.9317 0.00411981 28.6875 0.642418 29.9812 1.77482C31.2749 2.90723 32.0009 4.44123 32 6.04022ZM29.1727 21.9598C29.1732 21.016 28.7446 20.1105 27.9809 19.4421C27.2173 18.7737 26.1809 18.3969 25.0993 18.3944L16.9971 18.3944C16.7036 20.1619 16.1444 21.8879 15.3339 23.5278C14.9765 24.2383 14.519 24.9072 13.9719 25.5189L25.0993 25.5189C26.1797 25.5164 27.2149 25.1405 27.9784 24.4734C28.7418 23.8064 29.1713 22.9025 29.1727 21.9598ZM6.81277 18.3944C5.72913 18.3944 4.68987 18.7701 3.92363 19.4387C3.15738 20.1073 2.7269 21.0142 2.7269 21.9598C2.7269 22.9054 3.15738 23.8122 3.92363 24.4808C4.68987 25.1495 5.72913 25.5251 6.81277 25.5251L8.64713 25.5251C10.2676 25.5251 11.8024 24.4051 12.7579 22.5276C13.412 21.2046 13.8772 19.8165 14.1431 18.3944L6.81277 18.3944ZM2.73939 6.04022C2.73891 6.98405 3.16751 7.8895 3.93117 8.55791C4.69482 9.22631 5.73115 9.60308 6.81277 9.60555L14.915 9.60555C15.2085 7.8381 15.7677 6.11213 16.5782 4.47222C16.9356 3.7617 17.3931 3.09283 17.9401 2.48111L6.81277 2.48111C5.73238 2.48358 4.69713 2.8595 3.93368 3.52656C3.17023 4.19362 2.7408 5.09747 2.73939 6.04022ZM19.1648 5.47244C18.5107 6.79541 18.0455 8.18352 17.7797 9.60555L25.0993 9.60555C26.183 9.60555 27.2222 9.22992 27.9885 8.56129C28.7547 7.89266 29.1852 6.98581 29.1852 6.04022C29.1852 5.09464 28.7547 4.18778 27.9885 3.51915C27.2222 2.85052 26.183 2.47489 25.0993 2.47489L23.265 2.47489C21.6516 2.47489 20.1168 3.59489 19.1648 5.47244Z\"\n fill={`url(#paint1_linear_${paintId})`}\n />\n </g>\n <path d=\"M48.685 8.598V22.5H45.283V8.598H48.685ZM40.873 10.11V6.96H53.095V10.11H40.873ZM57.2788 22.773C56.1728 22.773 55.2908 22.472 54.6328 21.87C53.9888 21.254 53.6668 20.435 53.6668 19.413C53.6668 18.447 53.9958 17.677 54.6538 17.103C55.3258 16.529 56.2918 16.193 57.5518 16.095L60.4918 15.864V15.696C60.4918 15.346 60.4218 15.059 60.2818 14.835C60.1418 14.597 59.9388 14.422 59.6728 14.31C59.4208 14.184 59.0988 14.121 58.7068 14.121C58.0208 14.121 57.4958 14.247 57.1318 14.499C56.7818 14.751 56.6068 15.115 56.6068 15.591H53.9188C53.9188 14.793 54.1218 14.1 54.5278 13.512C54.9338 12.924 55.5078 12.469 56.2498 12.147C57.0058 11.825 57.8808 11.664 58.8748 11.664C59.8968 11.664 60.7578 11.846 61.4578 12.21C62.1718 12.574 62.7108 13.106 63.0748 13.806C63.4528 14.506 63.6418 15.36 63.6418 16.368V22.5H60.7858L60.5758 21.114C60.4078 21.59 60.0088 21.989 59.3788 22.311C58.7628 22.619 58.0628 22.773 57.2788 22.773ZM58.4128 20.379C59.0288 20.379 59.5328 20.232 59.9248 19.938C60.3168 19.63 60.5128 19.175 60.5128 18.573V18.006L58.8748 18.153C58.1748 18.209 57.6778 18.328 57.3838 18.51C57.1038 18.678 56.9638 18.93 56.9638 19.266C56.9638 19.644 57.0828 19.924 57.3208 20.106C57.5588 20.288 57.9228 20.379 58.4128 20.379ZM70.4553 22.5H67.2213V12H70.2663L70.4763 13.092C70.7983 12.644 71.2393 12.294 71.7993 12.042C72.3733 11.79 73.0033 11.664 73.6893 11.664C74.9353 11.664 75.9013 12.049 76.5873 12.819C77.2873 13.575 77.6373 14.639 77.6373 16.011V22.5H74.4033V16.788C74.4033 16.13 74.2353 15.605 73.8993 15.213C73.5633 14.807 73.1153 14.604 72.5553 14.604C71.9113 14.604 71.4003 14.8 71.0223 15.192C70.6443 15.57 70.4553 16.088 70.4553 16.746V22.5ZM80.6916 17.061C80.6916 15.997 80.9016 15.059 81.3216 14.247C81.7556 13.435 82.3506 12.798 83.1066 12.336C83.8766 11.874 84.7516 11.643 85.7316 11.643C86.5576 11.643 87.2646 11.811 87.8526 12.147C88.4547 12.483 88.8677 12.924 89.0917 13.47L88.7766 13.68L89.0286 12H92.0737V21.828C92.0737 23.074 91.8427 24.145 91.3807 25.041C90.9187 25.951 90.2606 26.644 89.4066 27.12C88.5527 27.61 87.5237 27.855 86.3197 27.855C84.7096 27.855 83.4006 27.421 82.3926 26.553C81.3846 25.699 80.8036 24.53 80.6496 23.046H83.9256C83.9536 23.634 84.1776 24.089 84.5976 24.411C85.0176 24.747 85.5846 24.915 86.2986 24.915C87.0826 24.915 87.6986 24.698 88.1466 24.264C88.6087 23.83 88.8397 23.242 88.8397 22.5V20.274L89.1967 20.547C88.9727 21.093 88.5387 21.534 87.8946 21.87C87.2506 22.206 86.5086 22.374 85.6686 22.374C84.6886 22.374 83.8206 22.15 83.0646 21.702C82.3226 21.254 81.7416 20.631 81.3216 19.833C80.9016 19.035 80.6916 18.111 80.6916 17.061ZM83.9466 16.977C83.9466 17.481 84.0516 17.929 84.2616 18.321C84.4716 18.699 84.7586 19 85.1226 19.224C85.4866 19.448 85.9066 19.56 86.3827 19.56C86.8726 19.56 87.2996 19.455 87.6636 19.245C88.0416 19.021 88.3286 18.72 88.5246 18.342C88.7347 17.95 88.8397 17.495 88.8397 16.977C88.8397 16.459 88.7347 16.018 88.5246 15.654C88.3286 15.276 88.0416 14.982 87.6636 14.772C87.2996 14.562 86.8656 14.457 86.3616 14.457C85.8856 14.457 85.4657 14.562 85.1016 14.772C84.7376 14.982 84.4506 15.276 84.2406 15.654C84.0446 16.032 83.9466 16.473 83.9466 16.977ZM98.9997 22.5H95.7657V6.666H98.9997V22.5ZM107.558 22.773C106.508 22.773 105.57 22.535 104.744 22.059C103.932 21.583 103.288 20.932 102.812 20.106C102.35 19.266 102.119 18.307 102.119 17.229C102.119 16.137 102.343 15.178 102.791 14.352C103.253 13.512 103.89 12.854 104.702 12.378C105.514 11.902 106.445 11.664 107.495 11.664C108.601 11.664 109.553 11.895 110.351 12.357C111.149 12.805 111.765 13.449 112.199 14.289C112.633 15.115 112.85 16.102 112.85 17.25V18.069L103.82 18.111L103.862 16.116H109.637C109.637 15.556 109.448 15.115 109.07 14.793C108.692 14.457 108.174 14.289 107.516 14.289C106.97 14.289 106.522 14.394 106.172 14.604C105.836 14.814 105.584 15.143 105.416 15.591C105.248 16.025 105.164 16.585 105.164 17.271C105.164 18.251 105.36 18.979 105.752 19.455C106.158 19.917 106.781 20.148 107.621 20.148C108.237 20.148 108.748 20.043 109.154 19.833C109.56 19.623 109.819 19.329 109.931 18.951H112.892C112.71 20.113 112.136 21.044 111.17 21.744C110.204 22.43 109 22.773 107.558 22.773Z\" />\n <defs>\n <linearGradient id={`paint0_linear_${paintId}`} x1=\"2.38462\" y1=\"1.77333\" x2=\"26.529\" y2=\"29.367\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#8E59FF\" />\n <stop offset=\"1\" stopColor=\"#6888F9\" />\n </linearGradient>\n <linearGradient id={`paint1_linear_${paintId}`} x1=\"2.3841\" y1=\"26.2267\" x2=\"26.5285\" y2=\"-1.36739\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#8E59FF\" />\n <stop offset=\"1\" stopColor=\"#6888F9\" />\n </linearGradient>\n <clipPath id=\"clip0_828_2896\">\n <rect width=\"28\" height=\"32\" fill=\"white\" transform=\"translate(32) rotate(90)\" />\n </clipPath>\n </defs>\n </svg>\n <span className=\"hidden sm:inline-flex px-2.5 py-1 rounded-full border border-bp-elements-borderColor text-sm font-display font-medium text-bp-elements-textSecondary\">\n {label ?? 'Tangle'}\n </span>\n </div>\n );\n}\n","import { Links, Meta, Scripts, ScrollRestoration } from 'react-router';\nimport type { ReactNode } from 'react';\n\ninterface AppDocumentProps {\n children: ReactNode;\n description: string;\n themeStorageKeys: [string, string];\n}\n\nfunction buildInlineThemeCode(themeStorageKeys: [string, string]): string {\n const [primaryKey, secondaryKey] = themeStorageKeys;\n return `\n (function() {\n var theme = localStorage.getItem('${primaryKey}') || localStorage.getItem('${secondaryKey}');\n if (!theme) {\n theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n document.querySelector('html').setAttribute('data-theme', theme);\n })();\n `;\n}\n\nexport function AppDocument({ children, description, themeStorageKeys }: AppDocumentProps) {\n return (\n <html lang=\"en\" data-theme=\"dark\" suppressHydrationWarning>\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content={description} />\n <Meta />\n <Links />\n <link rel=\"icon\" href=\"/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossOrigin=\"anonymous\" />\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&display=swap\"\n />\n <script dangerouslySetInnerHTML={{ __html: buildInlineThemeCode(themeStorageKeys) }} />\n </head>\n <body>\n {children}\n <ScrollRestoration />\n <Scripts />\n </body>\n </html>\n );\n}\n","interface AppFooterProps {\n brandText: string;\n tone: 'cloud' | 'arena';\n githubUrl?: string;\n docsUrl?: string;\n}\n\nconst TONE_STYLES: Record<AppFooterProps['tone'], { border: string; text: string }> = {\n cloud: {\n border: 'border-cloud-elements-dividerColor',\n text: 'text-cloud-elements-textTertiary',\n },\n arena: {\n border: 'border-arena-elements-dividerColor',\n text: 'text-arena-elements-textTertiary',\n },\n};\n\nexport function AppFooter({\n brandText,\n tone,\n githubUrl = 'https://github.com/tangle-network',\n docsUrl = 'https://docs.tangle.tools',\n}: AppFooterProps) {\n const styles = TONE_STYLES[tone];\n\n return (\n <footer className={`border-t py-5 mt-12 ${styles.border}`}>\n <div className={`mx-auto max-w-7xl px-4 sm:px-6 flex items-center justify-between text-xs ${styles.text}`}>\n <span className=\"font-data\">{brandText}</span>\n <div className=\"flex items-center gap-5\">\n <a href={githubUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"hover:text-violet-700 dark:hover:text-violet-400 transition-colors\">GitHub</a>\n <a href={docsUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"hover:text-violet-700 dark:hover:text-violet-400 transition-colors\">Docs</a>\n </div>\n </div>\n </footer>\n );\n}\n","import { Toaster } from 'sonner';\nimport { useThemeValue } from '../../hooks/useThemeValue';\n\ninterface AppToasterProps {\n tone: 'cloud' | 'arena';\n}\n\nconst TONE_TEXT_COLOR: Record<AppToasterProps['tone'], string> = {\n cloud: 'var(--cloud-elements-textPrimary)',\n arena: 'var(--arena-elements-textPrimary)',\n};\n\nexport function AppToaster({ tone }: AppToasterProps) {\n const theme = useThemeValue();\n\n return (\n <Toaster\n position=\"bottom-right\"\n theme={theme as 'light' | 'dark' | 'system'}\n richColors\n closeButton\n duration={3000}\n toastOptions={{\n style: {\n background: 'var(--glass-bg-strong)',\n backdropFilter: 'blur(16px)',\n border: '1px solid var(--glass-border)',\n color: TONE_TEXT_COLOR[tone],\n },\n }}\n />\n );\n}\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { type ReactNode, useEffect, useRef, useState } from 'react';\nimport { type Config, WagmiContext, useReconnect } from 'wagmi';\n\ninterface Web3ShellProps {\n config: Config;\n reconnectOnMount?: boolean;\n children: ReactNode;\n}\n\ntype RecentConnectorStorage = Pick<NonNullable<Config['storage']>, 'getItem' | 'removeItem'>;\n\n// We prefer the last successful connector so silent restoration is fast and\n// doesn't probe every available connector on startup.\nasync function findRecentConnector(currentConfig: Pick<Config, 'connectors' | 'storage'>) {\n const storage = currentConfig.storage as RecentConnectorStorage | null | undefined;\n const recentConnectorId = await storage?.getItem('recentConnectorId');\n if (!recentConnectorId) return null;\n\n const connector = currentConfig.connectors.find((candidate) => candidate.id === recentConnectorId) ?? null;\n if (!connector) {\n await storage?.removeItem('recentConnectorId');\n }\n\n return connector;\n}\n\nfunction ReconnectOnMount({\n config,\n reconnectOnMount,\n}: Pick<Web3ShellProps, 'config' | 'reconnectOnMount'>) {\n const { reconnectAsync } = useReconnect();\n const attemptedRef = useRef(false);\n\n useEffect(() => {\n if (!reconnectOnMount || attemptedRef.current) return;\n attemptedRef.current = true;\n\n let cancelled = false;\n\n // Why this exists:\n // - In this app stack, wagmi's built-in provider hydrate path can kick off\n // reconnect work during provider rerenders.\n // - Route navigation rerenders the app shell, so wallet restore was being\n // retriggered on page changes, which made the header look like it was\n // reconnecting and added several seconds of delay.\n //\n // Our fix is to keep wagmi context/query wiring here, but move restore to a\n // single effect guarded by a ref. A rerender keeps the same ref value, so\n // reconnect only runs once per real mount and still runs again after a full\n // page refresh.\n void (async () => {\n try {\n const connector = await findRecentConnector(config);\n if (cancelled) return;\n\n if (connector) {\n await reconnectAsync({ connectors: [connector] });\n return;\n }\n\n await reconnectAsync();\n } catch {\n // A failed silent reconnect should leave the app disconnected.\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [config, reconnectAsync, reconnectOnMount]);\n\n return null;\n}\n\nexport function Web3Shell({\n config,\n reconnectOnMount = true,\n children,\n}: Web3ShellProps) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n staleTime: 30_000,\n },\n },\n }),\n );\n\n return (\n // We provide wagmi context directly instead of using WagmiProvider so we can\n // control exactly when silent reconnect runs.\n <WagmiContext.Provider value={config}>\n <QueryClientProvider client={queryClient}>\n <ReconnectOnMount config={config} reconnectOnMount={reconnectOnMount} />\n {children}\n </QueryClientProvider>\n </WagmiContext.Provider>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { useStore } from '@nanostores/react';\nimport { selectedChainIdStore } from '../../contracts/publicClient';\nimport { getNetworks } from '../../contracts/chains';\n\nfunction chainIcon(label: string | undefined, chainName: string | undefined): string {\n if (label === 'Tangle Local' || chainName === 'Tangle Local') return 'i-ph:desktop';\n if (label === 'Tangle Testnet' || chainName === 'Tangle Testnet') return 'i-ph:flask';\n if (label === 'Tangle Mainnet' || chainName === 'Tangle') return 'i-ph:globe-hemisphere-west';\n return 'i-ph:globe';\n}\n\nfunction orderedChainIds(): number[] {\n const priority: Record<string, number> = {\n 'Tangle Local': 0,\n 'Tangle Testnet': 1,\n 'Tangle Mainnet': 2,\n Tangle: 2,\n };\n\n return Object.entries(getNetworks())\n .sort(([, a], [, b]) => {\n const aPriority = priority[a?.label ?? a?.chain?.name ?? ''] ?? 99;\n const bPriority = priority[b?.label ?? b?.chain?.name ?? ''] ?? 99;\n if (aPriority !== bPriority) return aPriority - bPriority;\n return a.chain.id - b.chain.id;\n })\n .map(([chainId]) => Number(chainId));\n}\n\nexport function ChainSwitcher() {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const selectedChainId = useStore(selectedChainIdStore);\n const current = getNetworks()[selectedChainId];\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n }\n if (open) document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n function selectChain(chainId: number) {\n selectedChainIdStore.set(chainId);\n setOpen(false);\n window.location.reload();\n }\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n onClick={() => setOpen(!open)}\n className=\"flex items-center gap-1.5 px-2.5 py-2 rounded-lg text-xs font-data font-medium bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor hover:border-bp-elements-borderColorActive/40 transition-all\"\n title={current?.label ?? 'Select network'}\n >\n <div className={`${chainIcon(current?.label, current?.chain?.name)} text-sm text-bp-elements-icon-success`} />\n <span className=\"hidden sm:inline text-bp-elements-textSecondary\">{current?.shortLabel ?? 'Unknown'}</span>\n <div className={`i-ph:caret-down text-[10px] text-bp-elements-textTertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"absolute right-0 top-full mt-2 w-48 glass-card-strong rounded-xl border border-bp-elements-dividerColor/50 py-1.5 z-50 shadow-lg\">\n <div className=\"px-3 py-1.5 text-[10px] font-data uppercase tracking-wider text-bp-elements-textTertiary\">Network</div>\n {orderedChainIds().map((chainId) => {\n const net = getNetworks()[chainId];\n if (!net) return null;\n const isSelected = chainId === selectedChainId;\n return (\n <button\n key={chainId}\n onClick={() => selectChain(chainId)}\n className={`flex items-center gap-2.5 w-full px-3 py-2 text-left transition-colors ${\n isSelected ? 'bg-violet-500/10 text-violet-700 dark:text-violet-400' : 'hover:bg-bp-elements-item-backgroundHover text-bp-elements-textSecondary'\n }`}\n >\n <div className={`${chainIcon(net.label, net.chain.name)} text-sm ${isSelected ? 'text-violet-700 dark:text-violet-400' : 'text-bp-elements-textTertiary'}`} />\n <span className=\"text-sm font-display font-medium\">{net.label}</span>\n {isSelected && <div className=\"i-ph:check-bold text-xs ml-auto text-violet-700 dark:text-violet-400\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { useThemeValue } from '../../hooks/useThemeValue';\nimport { toggleTheme } from '../../stores/theme';\nimport { Button } from '../ui/button';\n\nexport function ThemeToggle() {\n const theme = useThemeValue();\n return (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={toggleTheme} aria-label=\"Toggle theme\" className=\"relative overflow-hidden\">\n <div className=\"transition-transform duration-300 ease-out\">\n {theme === 'dark' ? (\n <div className=\"i-ph:sun size-4 text-amber-400\" />\n ) : (\n <div className=\"i-ph:moon size-4 text-violet-400\" />\n )}\n </div>\n </Button>\n );\n}\n","interface ConnectWalletCtaProps {\n onClick?: () => void;\n isReconnecting?: boolean;\n}\n\nexport function ConnectWalletCta({ onClick, isReconnecting = false }: ConnectWalletCtaProps) {\n return (\n <button\n onClick={() => onClick?.()}\n disabled={!onClick}\n className=\"px-4 py-2.5 rounded-lg bg-violet-500/10 border border-violet-500/20 text-violet-700 dark:text-violet-400 text-sm font-display font-medium hover:bg-violet-500/20 transition-colors\"\n >\n {isReconnecting ? (\n <span className=\"flex items-center gap-2\">\n <span className=\"w-3 h-3 rounded-full border-2 border-violet-500/40 border-t-violet-600 dark:border-t-violet-400 animate-spin\" />\n Reconnecting...\n </span>\n ) : 'Connect'}\n </button>\n );\n}\n","import { useState } from 'react';\nimport type { JobFieldDef } from '../../blueprints/registry';\nimport { Input } from '../ui/input';\nimport { Select } from '../ui/select';\nimport { Textarea } from '../ui/textarea';\nimport { Toggle } from '../ui/toggle';\nimport { cn } from '../../utils';\n\ninterface FormFieldProps {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n error?: string;\n}\n\nexport function FormField({ field, value, onChange, error }: FormFieldProps) {\n if (field.internal) return null;\n\n const isBool = field.type === 'boolean';\n\n return (\n <div className={cn(isBool && 'flex items-center gap-3')}>\n {!isBool && (\n <label className=\"block text-sm font-display font-medium text-bp-elements-textSecondary mb-2\">\n {field.label}\n {field.required && ' *'}\n </label>\n )}\n <FieldInput field={field} value={value} onChange={onChange} />\n {isBool && (\n <span className=\"text-sm font-display text-bp-elements-textSecondary\">{field.label}</span>\n )}\n {field.helperText && !error && (\n <p className=\"text-xs text-bp-elements-textTertiary mt-1\">{field.helperText}</p>\n )}\n {error && <p className=\"text-xs text-crimson-400 mt-1\">{error}</p>}\n </div>\n );\n}\n\nfunction FieldInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n switch (field.type) {\n case 'text':\n return (\n <Input\n value={String(value ?? '')}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n />\n );\n case 'number':\n return <NumberInput field={field} value={value} onChange={onChange} />;\n case 'textarea':\n case 'json':\n return (\n <Textarea\n value={String(value ?? '')}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n rows={field.type === 'json' ? 3 : 4}\n className={field.type === 'json' ? 'font-data text-sm' : undefined}\n />\n );\n case 'boolean':\n return <Toggle checked={Boolean(value)} onChange={(v) => onChange(field.name, v)} />;\n case 'select':\n return (\n <Select\n value={String(value ?? '')}\n onValueChange={(v) => onChange(field.name, v)}\n options={field.options ?? []}\n />\n );\n case 'combobox':\n return <ComboboxInput field={field} value={value} onChange={onChange} />;\n default:\n return null;\n }\n}\n\n/** Number input with inline stepper buttons */\nfunction NumberInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n const numVal = Number(value ?? field.min ?? 0);\n const step = field.step ?? 1;\n\n const clamp = (raw: number) => {\n if (field.min != null && raw < field.min) return field.min;\n if (field.max != null && raw > field.max) return field.max;\n return raw;\n };\n\n const canDecrement = field.min == null || numVal > field.min;\n const canIncrement = field.max == null || numVal < field.max;\n\n return (\n <div className=\"flex items-stretch h-11 rounded-lg border border-bp-elements-borderColor bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 transition-all duration-200 hover:border-bp-elements-borderColorActive/40 focus-within:border-violet-500/40 focus-within:ring-2 focus-within:ring-violet-500/10\">\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={!canDecrement}\n onClick={() => onChange(field.name, clamp(numVal - step))}\n className=\"flex items-center justify-center w-10 shrink-0 text-bp-elements-textTertiary transition-colors hover:text-bp-elements-textPrimary hover:bg-white/[0.04] rounded-l-lg disabled:opacity-30 disabled:pointer-events-none\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" /></svg>\n </button>\n <input\n type=\"number\"\n value={numVal}\n min={field.min}\n max={field.max}\n step={step}\n onChange={(e) => {\n if (e.target.value === '') {\n onChange(field.name, field.min ?? 0);\n return;\n }\n onChange(field.name, clamp(Number(e.target.value)));\n }}\n placeholder={field.placeholder}\n className=\"flex-1 min-w-0 bg-transparent text-center text-base font-data text-bp-elements-textPrimary outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={!canIncrement}\n onClick={() => onChange(field.name, clamp(numVal + step))}\n className=\"flex items-center justify-center w-10 shrink-0 text-bp-elements-textTertiary transition-colors hover:text-bp-elements-textPrimary hover:bg-white/[0.04] rounded-r-lg disabled:opacity-30 disabled:pointer-events-none\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M7 3v8M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" /></svg>\n </button>\n </div>\n );\n}\n\n/** Dropdown with preset options + free-text custom input */\nfunction ComboboxInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n const strVal = String(value ?? '');\n const options = field.options ?? [];\n const isPreset = options.some((o) => o.value === strVal);\n const [isCustom, setIsCustom] = useState(!isPreset && strVal !== '');\n\n if (isCustom) {\n return (\n <div className=\"flex gap-2\">\n <Input\n value={strVal}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n className=\"flex-1\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setIsCustom(false);\n onChange(field.name, options[0]?.value ?? '');\n }}\n className=\"shrink-0 rounded-lg border border-bp-elements-borderColor bg-bp-elements-background-depth-3 px-3 py-2 text-xs font-display text-bp-elements-textTertiary transition-colors hover:border-bp-elements-borderColorActive/40 hover:text-bp-elements-textSecondary\"\n >\n Presets\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-2 w-full\">\n <Select\n value={strVal}\n onValueChange={(v) => {\n if (v === '__custom__') {\n setIsCustom(true);\n onChange(field.name, '');\n } else {\n onChange(field.name, v);\n }\n }}\n options={[...options, { label: 'Custom...', value: '__custom__' }]}\n className=\"flex-1\"\n />\n </div>\n );\n}\n","import type { JobDefinition } from '../../blueprints/registry';\nimport { FormField } from './FormField';\n\nexport interface FormSection {\n label: string;\n fields: string[];\n collapsed?: boolean;\n}\n\ninterface BlueprintJobFormProps {\n job: JobDefinition;\n values: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n errors?: Record<string, string>;\n sections?: FormSection[];\n}\n\nexport function BlueprintJobForm({ job, values, onChange, errors, sections }: BlueprintJobFormProps) {\n const visibleFields = job.fields.filter((f) => !f.internal);\n\n if (sections) {\n return (\n <div className=\"space-y-6\">\n {sections.map((section) => {\n const sectionFields = section.fields\n .map((name) => visibleFields.find((f) => f.name === name))\n .filter(Boolean);\n\n if (sectionFields.length === 0) return null;\n\n if (section.collapsed) {\n return (\n <details key={section.label} className=\"group\">\n <summary className=\"cursor-pointer text-sm font-display font-medium text-bp-elements-textTertiary hover:text-bp-elements-textSecondary transition-colors\">\n {section.label}\n </summary>\n <div className=\"mt-4 space-y-4\">\n {sectionFields.map((field) => (\n <FormField\n key={field!.name}\n field={field!}\n value={values[field!.name]}\n onChange={onChange}\n error={errors?.[field!.name]}\n />\n ))}\n </div>\n </details>\n );\n }\n\n return (\n <div key={section.label}>\n <label className=\"block text-sm font-display font-medium text-bp-elements-textSecondary mb-3\">\n {section.label}\n </label>\n <div className=\"space-y-4\">\n {sectionFields.map((field) => (\n <FormField\n key={field!.name}\n field={field!}\n value={values[field!.name]}\n onChange={onChange}\n error={errors?.[field!.name]}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {visibleFields.map((field) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n onChange={onChange}\n error={errors?.[field.name]}\n />\n ))}\n </div>\n );\n}\n","import type { JobDefinition } from '../../blueprints/registry';\nimport { cn } from '../../utils';\n\ninterface FormSummaryProps {\n job: JobDefinition;\n values: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport function FormSummary({ job, values, context }: FormSummaryProps) {\n return (\n <div className=\"glass-card rounded-lg p-4 space-y-2.5\">\n {context &&\n Object.entries(context).map(([key, val]) => (\n <SummaryRow key={key} label={key} value={String(val)} mono />\n ))}\n {context && job.fields.length > 0 && (\n <div className=\"border-t border-bp-elements-dividerColor my-2\" />\n )}\n {job.fields\n .filter((f) => !f.internal)\n .map((field) => {\n const v = values[field.name];\n let display: string;\n if (field.type === 'boolean') {\n display = v ? 'Enabled' : 'Disabled';\n } else if (field.type === 'select' && field.options) {\n display = field.options.find((o) => o.value === String(v))?.label ?? String(v ?? '');\n } else {\n display = String(v ?? '--');\n }\n return <SummaryRow key={field.name} label={field.label} value={display} mono={field.type === 'json'} />;\n })}\n </div>\n );\n}\n\nfunction SummaryRow({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-bp-elements-textSecondary\">{label}</span>\n <span className={cn('text-bp-elements-textPrimary', mono ? 'font-data text-xs' : 'font-display')}>\n {value || '--'}\n </span>\n </div>\n );\n}\n","import { useStore } from '@nanostores/react';\nimport type { JobDefinition } from '../../blueprints/registry';\nimport { useJobForm } from '../../hooks/useJobForm';\nimport { useSubmitJob } from '../../hooks/useSubmitJob';\nimport { useJobPrice } from '../../hooks/useJobPrice';\nimport { formatCost } from '../../hooks/useQuotes';\nimport { encodeJobArgs } from '../../contracts/generic-encoder';\nimport { infraStore } from '../../stores/infra';\nimport { BlueprintJobForm } from './BlueprintJobForm';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../ui/dialog';\nimport { Button } from '../ui/button';\nimport { cn } from '../../utils';\n\ninterface JobExecutionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n job: JobDefinition;\n serviceId: bigint;\n context?: Record<string, unknown>;\n onSuccess?: () => void;\n}\n\nexport function JobExecutionDialog({\n open,\n onOpenChange,\n job,\n serviceId,\n context,\n onSuccess,\n}: JobExecutionDialogProps) {\n const infra = useStore(infraStore);\n const { values, errors, onChange, validate, reset } = useJobForm(job);\n const { submitJob, status, error: txError, txHash, reset: resetTx } = useSubmitJob();\n\n // Per-job RFQ: fetch price from operator before submission\n const operatorRpcUrl = infra.serviceInfo?.operators?.[0]?.rpcAddress;\n const blueprintId = BigInt(infra.blueprintId || '0');\n const { quote, isLoading: priceLoading, isSolvingPow, formattedPrice, error: priceError } = useJobPrice(\n operatorRpcUrl,\n serviceId,\n job.id,\n blueprintId,\n open && !!operatorRpcUrl && serviceId > 0n,\n );\n\n // Fallback price from multiplier (base rate = 0.001 TNT = 1e15 wei)\n const estimatedPrice = BigInt(job.pricingMultiplier) * 1_000_000_000_000_000n;\n const jobValue = quote?.price ?? estimatedPrice;\n const hasRfqPrice = !!quote && !priceError;\n\n const hasFields = job.fields.filter((f) => !f.internal).length > 0;\n\n const handleSubmit = async () => {\n if (hasFields && !validate()) return;\n const args = encodeJobArgs(job, values, context);\n const hash = await submitJob({\n serviceId,\n jobId: job.id,\n args,\n label: job.label,\n value: jobValue,\n });\n if (hash) {\n onSuccess?.();\n }\n };\n\n const handleClose = (nextOpen: boolean) => {\n if (!nextOpen) {\n reset();\n resetTx();\n }\n onOpenChange(nextOpen);\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-lg max-h-[85vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle className=\"font-display flex items-center gap-2\">\n <div className={`${job.icon} text-lg`} />\n {job.label}\n </DialogTitle>\n <DialogDescription>{job.description}</DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 mt-2\">\n {job.warning && (\n <div className=\"glass-card rounded-lg p-3 border-amber-500/30\">\n <div className=\"flex items-center gap-2\">\n <div className=\"i-ph:warning text-sm text-amber-400\" />\n <p className=\"text-xs text-amber-400\">{job.warning}</p>\n </div>\n </div>\n )}\n\n {hasFields && (\n <BlueprintJobForm job={job} values={values} onChange={onChange} errors={errors} />\n )}\n\n {/* Job Price -- from RFQ or fallback estimate */}\n <div className=\"glass-card rounded-lg p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div className=\"i-ph:tag text-sm text-bp-elements-textTertiary\" />\n <span className=\"text-sm font-display text-bp-elements-textSecondary\">\n Job Price\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n {priceLoading || isSolvingPow ? (\n <span className=\"text-xs font-data text-bp-elements-textTertiary animate-pulse\">\n {isSolvingPow ? 'Solving PoW...' : 'Fetching quote...'}\n </span>\n ) : (\n <span className={cn(\n 'text-sm font-data font-semibold',\n hasRfqPrice ? 'text-teal-400' : 'text-bp-elements-textSecondary',\n )}>\n {hasRfqPrice ? formattedPrice : `~${formatCost(estimatedPrice)}`}\n </span>\n )}\n </div>\n </div>\n {hasRfqPrice && (\n <p className=\"text-[10px] text-bp-elements-textTertiary mt-1.5\">\n Signed quote from operator — expires in {Math.max(0, Number(quote!.expiry) - Math.floor(Date.now() / 1000))}s\n </p>\n )}\n {!hasRfqPrice && !priceLoading && (\n <p className=\"text-[10px] text-bp-elements-textTertiary mt-1.5\">\n Estimate ({job.pricingMultiplier}x base rate) — no operator RFQ available\n </p>\n )}\n </div>\n\n {/* TX Status */}\n {status !== 'idle' && (\n <div\n className={cn(\n 'glass-card rounded-lg p-3',\n status === 'confirmed' && 'border-teal-500/30',\n status === 'failed' && 'border-crimson-500/30',\n )}\n >\n <div className=\"flex items-center gap-3\">\n {(status === 'signing' || status === 'pending') && (\n <div className=\"i-ph:circle-fill text-sm text-blue-400 animate-pulse\" />\n )}\n {status === 'confirmed' && <div className=\"i-ph:check-circle-fill text-sm text-teal-400\" />}\n {status === 'failed' && <div className=\"i-ph:x-circle-fill text-sm text-crimson-400\" />}\n <div>\n <p className=\"text-sm font-display font-medium text-bp-elements-textPrimary\">\n {status === 'signing' && 'Waiting for wallet signature...'}\n {status === 'pending' && 'Transaction submitted...'}\n {status === 'confirmed' && 'Transaction confirmed!'}\n {status === 'failed' && 'Transaction failed'}\n </p>\n {txHash && (\n <p className=\"text-xs font-data text-bp-elements-textTertiary mt-0.5 truncate max-w-xs\">\n TX: {txHash}\n </p>\n )}\n {txError && <p className=\"text-xs text-crimson-400 mt-0.5\">{txError}</p>}\n </div>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"secondary\" onClick={() => handleClose(false)}>\n {status === 'confirmed' ? 'Close' : 'Cancel'}\n </Button>\n {status !== 'confirmed' && (\n <Button\n onClick={handleSubmit}\n disabled={status === 'signing' || status === 'pending' || priceLoading}\n >\n {status === 'signing' || status === 'pending' ? (\n <>\n <div className=\"i-ph:circle-fill text-sm animate-pulse\" />\n Submitting...\n </>\n ) : priceLoading ? (\n 'Loading price...'\n ) : (\n <>Submit ({hasRfqPrice ? formattedPrice : `~${formatCost(estimatedPrice)}`})</>\n )}\n </Button>\n )}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","jsx","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useStore","jsx","jsxs","useStore"]}
1
+ {"version":3,"sources":["../src/components/ui/dialog.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/separator.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/toggle.tsx","../src/components/motion/AnimatedPage.tsx","../src/components/shared/Identicon.tsx","../src/components/shared/TangleLogo.tsx","../src/components/layout/AppDocument.tsx","../src/components/layout/AppFooter.tsx","../src/components/layout/AppToaster.tsx","../src/components/layout/Web3Shell.tsx","../src/components/layout/ChainSwitcher.tsx","../src/components/layout/ThemeToggle.tsx","../src/components/web3/ConnectWalletCta.tsx","../src/components/forms/FormField.tsx","../src/components/forms/BlueprintJobForm.tsx","../src/components/forms/FormSummary.tsx","../src/components/forms/JobExecutionDialog.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { cn } from '../../utils';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return <DialogPrimitive.Overlay data-slot=\"dialog-overlay\" className={cn('fixed inset-0 z-50 bg-black/50', className)} {...props} />;\n}\n\nfunction DialogContent({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Content>) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-xl border border-border p-6 shadow-2xl duration-200 outline-none sm:max-w-lg',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none\">\n <div className=\"i-ph:x size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"dialog-header\" className={cn('flex flex-col gap-2 text-center sm:text-left', className)} {...props} />;\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"dialog-footer\" className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return <DialogPrimitive.Title data-slot=\"dialog-title\" className={cn('text-lg leading-none font-semibold', className)} {...props} />;\n}\n\nfunction DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return <DialogPrimitive.Description data-slot=\"dialog-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />;\n}\n\nexport { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription };\n","import * as React from 'react';\nimport { cn } from '../../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-11 w-full min-w-0 rounded-lg px-3.5 py-2.5 text-base font-body',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'placeholder:text-bp-elements-textTertiary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { cn } from '../../utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n value?: string;\n onValueChange?: (value: string) => void;\n options: SelectOption[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\nfunction Select({ value, onValueChange, options, placeholder, className, disabled }: SelectProps) {\n return (\n <SelectPrimitive.Root value={value} onValueChange={onValueChange} disabled={disabled}>\n <SelectPrimitive.Trigger\n className={cn(\n 'group flex h-11 w-full items-center justify-between rounded-lg px-3.5 py-2.5 text-base font-body',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'data-[placeholder]:text-bp-elements-textTertiary',\n className,\n )}\n >\n <SelectPrimitive.Value placeholder={placeholder ?? 'Select...'} />\n <SelectPrimitive.Icon className=\"ml-2 shrink-0 text-bp-elements-textTertiary transition-transform duration-200 group-data-[state=open]:rotate-180\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={4}\n className={cn(\n 'relative z-50 max-h-[min(var(--radix-select-content-available-height),280px)] min-w-[var(--radix-select-trigger-width)] overflow-hidden',\n 'rounded-xl border border-white/[0.06] bg-neutral-900/95 backdrop-blur-xl shadow-2xl shadow-black/40',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-[0.98] data-[state=open]:slide-in-from-top-1',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-[0.98] data-[state=closed]:slide-out-to-top-1',\n )}\n >\n <SelectPrimitive.Viewport className=\"p-1.5\">\n {options.map((opt) => (\n <SelectPrimitive.Item\n key={opt.value}\n value={opt.value}\n className={cn(\n 'relative flex w-full cursor-pointer items-center rounded-lg px-3 py-2.5 text-sm font-body outline-none select-none',\n 'text-neutral-300 transition-colors duration-100',\n 'data-[highlighted]:bg-white/[0.06] data-[highlighted]:text-white',\n 'data-[state=checked]:text-violet-300',\n )}\n >\n <SelectPrimitive.ItemText>{opt.label}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"ml-auto pl-3\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M3 7.5L5.5 10L11 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n}\n\nexport { Select };\n","import * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '../../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 { cn } from '../../utils';\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn('bg-accent animate-pulse rounded-md', className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"glass-card rounded-xl overflow-hidden\">\n <div className=\"relative w-full overflow-auto\">\n <table data-slot=\"table\" className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return <thead data-slot=\"table-header\" className={cn('border-b border-bp-elements-borderColor', className)} {...props} />;\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" className={cn('[&_tr:last-child]:border-0', className)} {...props} />;\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'border-b border-bp-elements-dividerColor transition-colors duration-150 hover:bg-bp-elements-item-backgroundHover data-[state=selected]:bg-bp-elements-item-backgroundActive',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn('h-11 px-4 text-left align-middle font-data text-xs font-semibold uppercase tracking-wider text-bp-elements-textSecondary', className)}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return <td data-slot=\"table-cell\" className={cn('px-4 py-3 align-middle', className)} {...props} />;\n}\n\nexport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell };\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '../../utils';\n\nfunction Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn('glass-card inline-flex h-10 w-fit items-center justify-center rounded-xl p-1 gap-0.5', className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex items-center justify-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-medium font-display whitespace-nowrap transition-all duration-200',\n 'text-bp-elements-textTertiary hover:text-bp-elements-textSecondary',\n 'data-[state=active]:text-violet-700 dark:data-[state=active]:text-violet-400 data-[state=active]:bg-violet-500/10 data-[state=active]:shadow-[0_0_12px_rgba(142,89,255,0.1)]',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('flex-1 outline-none', className)} {...props} />;\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'min-h-[80px] w-full rounded-lg px-3.5 py-2.5 text-base font-body resize-y',\n 'bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor text-bp-elements-textPrimary',\n 'placeholder:text-bp-elements-textTertiary',\n 'transition-all duration-200 outline-none',\n 'hover:border-bp-elements-borderColorActive/40',\n 'focus-visible:border-violet-500/40 focus-visible:ring-2 focus-visible:ring-violet-500/10',\n 'disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { cn } from '../../utils';\n\ninterface ToggleProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction Toggle({ checked, onChange, disabled, className }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => onChange(!checked)}\n className={cn(\n 'relative w-11 h-6 rounded-full transition-colors',\n checked ? 'bg-violet-600' : 'bg-bp-elements-background-depth-4',\n disabled && 'opacity-40 pointer-events-none',\n className,\n )}\n >\n <span\n className={cn(\n 'absolute top-0.5 left-0.5 w-5 h-5 rounded-full bg-white transition-transform',\n checked && 'translate-x-5',\n )}\n />\n </button>\n );\n}\n\nexport { Toggle };\n","import { motion } from 'framer-motion';\n\nconst pageVariants = {\n initial: { opacity: 0, y: 12 },\n animate: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] as const },\n },\n exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },\n} as const;\n\nexport function AnimatedPage({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <motion.div variants={pageVariants} initial=\"initial\" animate=\"animate\" exit=\"exit\" className={className}>\n {children}\n </motion.div>\n );\n}\n\nconst staggerContainer = {\n animate: { transition: { staggerChildren: 0.06, delayChildren: 0.1 } },\n};\n\nconst staggerItem = {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0, transition: { duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] as const } },\n} as const;\n\nexport function StaggerContainer({ children, className }: { children: React.ReactNode; className?: string }) {\n return <motion.div variants={staggerContainer} initial=\"initial\" animate=\"animate\" className={className}>{children}</motion.div>;\n}\n\nexport function StaggerItem({ children, className }: { children: React.ReactNode; className?: string }) {\n return <motion.div variants={staggerItem} className={className}>{children}</motion.div>;\n}\n","import { blo } from 'blo';\nimport type { Address } from 'viem';\n\ninterface IdenticonProps {\n address: Address;\n size?: number;\n className?: string;\n}\n\nexport function Identicon({ address, size = 20, className }: IdenticonProps) {\n const dataUri = blo(address, size);\n return (\n <img\n src={dataUri}\n alt={`${address.slice(0, 6)}...${address.slice(-4)}`}\n width={size}\n height={size}\n className={`rounded-full ${className ?? ''}`}\n style={{ imageRendering: 'pixelated' }}\n />\n );\n}\n","import { useId } from 'react';\n\ninterface TangleLogoProps {\n label?: string;\n}\n\nexport function TangleLogo({ label }: TangleLogoProps) {\n const paintId = useId();\n\n return (\n <div className=\"flex items-center gap-2\">\n <svg\n width={114}\n height={28}\n viewBox=\"0 0 114 28\"\n className=\"fill-bp-elements-textPrimary stroke-none\"\n >\n <g clipPath=\"url(#clip0_828_2896)\">\n <path\n d=\"M32 21.9598C32.0014 20.3605 31.2756 18.8261 29.9818 17.6934C28.6881 16.5606 26.9321 15.9221 25.0994 15.918L17.4484 15.918C17.4003 15.2958 17.3699 14.6596 17.3699 14C17.3699 13.3404 17.3396 12.7073 17.2969 12.082L25.0994 12.082C26.9162 12.0566 28.6488 11.4089 29.9233 10.2788C31.1978 9.14863 31.9121 7.62659 31.9121 6.041C31.9121 4.45541 31.1978 2.93337 29.9233 1.80323C28.6488 0.67309 26.9162 0.0254409 25.0994 -3.01633e-07L6.81321 -1.10095e-06C4.9964 0.02544 3.26386 0.673089 1.98936 1.80323C0.714863 2.93337 0.000568195 4.45541 0.000568126 6.041C0.000568057 7.62659 0.714862 9.14863 1.98936 10.2788C3.26386 11.4089 4.9964 12.0566 6.81321 12.082L14 12.25C14.5 12.25 14.5427 13.3404 14.5427 14C14.5427 14.6596 14.573 15.2927 14.6158 15.918L6.81321 15.918C4.9964 15.9434 3.26386 16.5911 1.98936 17.7212C0.714862 18.8514 0.000567499 20.3734 0.00056743 21.959C0.000567361 23.5446 0.714862 25.0666 1.98936 26.1968C3.26386 27.3269 4.9964 27.9746 6.81321 28L25.0994 28C26.9318 27.9959 28.6875 27.3576 29.9812 26.2252C31.2749 25.0928 32.0009 23.5588 32 21.9598ZM29.1727 6.04022C29.1732 6.98405 28.7446 7.8895 27.981 8.5579C27.2173 9.22631 26.181 9.60308 25.0994 9.60556L16.9974 9.60555C16.7039 7.83811 16.1447 6.11213 15.3342 4.47222C14.9768 3.7617 14.5193 3.09283 13.9723 2.48111L25.0994 2.48111C26.1798 2.48358 27.215 2.8595 27.9785 3.52656C28.7419 4.19362 29.1713 5.09747 29.1727 6.04022ZM6.81321 9.60555C5.72959 9.60555 4.69036 9.22992 3.92412 8.56129C3.15789 7.89266 2.72742 6.98581 2.72742 6.04022C2.72742 5.09464 3.15789 4.18778 3.92412 3.51915C4.69036 2.85052 5.7296 2.47489 6.81321 2.47489L8.64754 2.47489C10.2679 2.47489 11.8028 3.59489 12.7583 5.47244C13.4124 6.7954 13.8776 8.18352 14.1434 9.60555L6.81321 9.60555ZM2.7399 21.9598C2.73943 21.0159 3.16802 20.1105 3.93166 19.4421C4.6953 18.7737 5.73161 18.3969 6.81321 18.3944L14.9153 18.3944C15.2088 20.1619 15.768 21.8879 16.5785 23.5278C16.9358 24.2383 17.3933 24.9072 17.9404 25.5189L6.81321 25.5189C5.73285 25.5164 4.69762 25.1405 3.93418 24.4734C3.17074 23.8064 2.74131 22.9025 2.7399 21.9598ZM19.1651 22.5276C18.511 21.2046 18.0458 19.8165 17.78 18.3944L25.0994 18.3944C26.1831 18.3944 27.2223 18.7701 27.9885 19.4387C28.7548 20.1073 29.1852 21.0142 29.1852 21.9598C29.1852 22.9054 28.7548 23.8122 27.9885 24.4809C27.2223 25.1495 26.1831 25.5251 25.0994 25.5251L23.2651 25.5251C21.6518 25.5251 20.117 24.4051 19.1651 22.5276Z\"\n fill={`url(#paint0_linear_${paintId})`}\n />\n <path\n opacity=\"0.8\"\n d=\"M32 6.04022C32.0014 7.63948 31.2756 9.17389 29.9818 10.3066C28.688 11.4394 26.9321 12.0779 25.0993 12.082L17.4481 12.082C17.4 12.7042 17.3697 13.3404 17.3697 14C17.3697 14.6596 17.3394 15.2927 17.2966 15.918L25.0993 15.918C26.9162 15.9434 28.6487 16.5911 29.9232 17.7212C31.1978 18.8514 31.9121 20.3734 31.9121 21.959C31.9121 23.5446 31.1978 25.0666 29.9232 26.1968C28.6487 27.3269 26.9162 27.9746 25.0993 28L6.81277 28C4.99592 27.9746 3.26335 27.3269 1.98883 26.1968C0.714308 25.0666 5.31303e-08 23.5446 7.20382e-08 21.959C9.09462e-08 20.3734 0.714308 18.8514 1.98883 17.7212C3.26335 16.5911 4.99592 15.9434 6.81277 15.918L13.9997 15.75C14.4997 15.75 14.5424 14.6596 14.5424 14C14.5424 13.3404 14.5727 12.7073 14.6155 12.082L6.81277 12.082C4.99592 12.0566 3.26335 11.4089 1.98883 10.2788C0.714308 9.14863 2.42951e-07 7.62659 2.61858e-07 6.041C2.80766e-07 4.45541 0.714308 2.93337 1.98883 1.80323C3.26335 0.673093 4.99592 0.0254399 6.81277 -3.00355e-07L25.0993 -8.22899e-08C26.9317 0.00411981 28.6875 0.642418 29.9812 1.77482C31.2749 2.90723 32.0009 4.44123 32 6.04022ZM29.1727 21.9598C29.1732 21.016 28.7446 20.1105 27.9809 19.4421C27.2173 18.7737 26.1809 18.3969 25.0993 18.3944L16.9971 18.3944C16.7036 20.1619 16.1444 21.8879 15.3339 23.5278C14.9765 24.2383 14.519 24.9072 13.9719 25.5189L25.0993 25.5189C26.1797 25.5164 27.2149 25.1405 27.9784 24.4734C28.7418 23.8064 29.1713 22.9025 29.1727 21.9598ZM6.81277 18.3944C5.72913 18.3944 4.68987 18.7701 3.92363 19.4387C3.15738 20.1073 2.7269 21.0142 2.7269 21.9598C2.7269 22.9054 3.15738 23.8122 3.92363 24.4808C4.68987 25.1495 5.72913 25.5251 6.81277 25.5251L8.64713 25.5251C10.2676 25.5251 11.8024 24.4051 12.7579 22.5276C13.412 21.2046 13.8772 19.8165 14.1431 18.3944L6.81277 18.3944ZM2.73939 6.04022C2.73891 6.98405 3.16751 7.8895 3.93117 8.55791C4.69482 9.22631 5.73115 9.60308 6.81277 9.60555L14.915 9.60555C15.2085 7.8381 15.7677 6.11213 16.5782 4.47222C16.9356 3.7617 17.3931 3.09283 17.9401 2.48111L6.81277 2.48111C5.73238 2.48358 4.69713 2.8595 3.93368 3.52656C3.17023 4.19362 2.7408 5.09747 2.73939 6.04022ZM19.1648 5.47244C18.5107 6.79541 18.0455 8.18352 17.7797 9.60555L25.0993 9.60555C26.183 9.60555 27.2222 9.22992 27.9885 8.56129C28.7547 7.89266 29.1852 6.98581 29.1852 6.04022C29.1852 5.09464 28.7547 4.18778 27.9885 3.51915C27.2222 2.85052 26.183 2.47489 25.0993 2.47489L23.265 2.47489C21.6516 2.47489 20.1168 3.59489 19.1648 5.47244Z\"\n fill={`url(#paint1_linear_${paintId})`}\n />\n </g>\n <path d=\"M48.685 8.598V22.5H45.283V8.598H48.685ZM40.873 10.11V6.96H53.095V10.11H40.873ZM57.2788 22.773C56.1728 22.773 55.2908 22.472 54.6328 21.87C53.9888 21.254 53.6668 20.435 53.6668 19.413C53.6668 18.447 53.9958 17.677 54.6538 17.103C55.3258 16.529 56.2918 16.193 57.5518 16.095L60.4918 15.864V15.696C60.4918 15.346 60.4218 15.059 60.2818 14.835C60.1418 14.597 59.9388 14.422 59.6728 14.31C59.4208 14.184 59.0988 14.121 58.7068 14.121C58.0208 14.121 57.4958 14.247 57.1318 14.499C56.7818 14.751 56.6068 15.115 56.6068 15.591H53.9188C53.9188 14.793 54.1218 14.1 54.5278 13.512C54.9338 12.924 55.5078 12.469 56.2498 12.147C57.0058 11.825 57.8808 11.664 58.8748 11.664C59.8968 11.664 60.7578 11.846 61.4578 12.21C62.1718 12.574 62.7108 13.106 63.0748 13.806C63.4528 14.506 63.6418 15.36 63.6418 16.368V22.5H60.7858L60.5758 21.114C60.4078 21.59 60.0088 21.989 59.3788 22.311C58.7628 22.619 58.0628 22.773 57.2788 22.773ZM58.4128 20.379C59.0288 20.379 59.5328 20.232 59.9248 19.938C60.3168 19.63 60.5128 19.175 60.5128 18.573V18.006L58.8748 18.153C58.1748 18.209 57.6778 18.328 57.3838 18.51C57.1038 18.678 56.9638 18.93 56.9638 19.266C56.9638 19.644 57.0828 19.924 57.3208 20.106C57.5588 20.288 57.9228 20.379 58.4128 20.379ZM70.4553 22.5H67.2213V12H70.2663L70.4763 13.092C70.7983 12.644 71.2393 12.294 71.7993 12.042C72.3733 11.79 73.0033 11.664 73.6893 11.664C74.9353 11.664 75.9013 12.049 76.5873 12.819C77.2873 13.575 77.6373 14.639 77.6373 16.011V22.5H74.4033V16.788C74.4033 16.13 74.2353 15.605 73.8993 15.213C73.5633 14.807 73.1153 14.604 72.5553 14.604C71.9113 14.604 71.4003 14.8 71.0223 15.192C70.6443 15.57 70.4553 16.088 70.4553 16.746V22.5ZM80.6916 17.061C80.6916 15.997 80.9016 15.059 81.3216 14.247C81.7556 13.435 82.3506 12.798 83.1066 12.336C83.8766 11.874 84.7516 11.643 85.7316 11.643C86.5576 11.643 87.2646 11.811 87.8526 12.147C88.4547 12.483 88.8677 12.924 89.0917 13.47L88.7766 13.68L89.0286 12H92.0737V21.828C92.0737 23.074 91.8427 24.145 91.3807 25.041C90.9187 25.951 90.2606 26.644 89.4066 27.12C88.5527 27.61 87.5237 27.855 86.3197 27.855C84.7096 27.855 83.4006 27.421 82.3926 26.553C81.3846 25.699 80.8036 24.53 80.6496 23.046H83.9256C83.9536 23.634 84.1776 24.089 84.5976 24.411C85.0176 24.747 85.5846 24.915 86.2986 24.915C87.0826 24.915 87.6986 24.698 88.1466 24.264C88.6087 23.83 88.8397 23.242 88.8397 22.5V20.274L89.1967 20.547C88.9727 21.093 88.5387 21.534 87.8946 21.87C87.2506 22.206 86.5086 22.374 85.6686 22.374C84.6886 22.374 83.8206 22.15 83.0646 21.702C82.3226 21.254 81.7416 20.631 81.3216 19.833C80.9016 19.035 80.6916 18.111 80.6916 17.061ZM83.9466 16.977C83.9466 17.481 84.0516 17.929 84.2616 18.321C84.4716 18.699 84.7586 19 85.1226 19.224C85.4866 19.448 85.9066 19.56 86.3827 19.56C86.8726 19.56 87.2996 19.455 87.6636 19.245C88.0416 19.021 88.3286 18.72 88.5246 18.342C88.7347 17.95 88.8397 17.495 88.8397 16.977C88.8397 16.459 88.7347 16.018 88.5246 15.654C88.3286 15.276 88.0416 14.982 87.6636 14.772C87.2996 14.562 86.8656 14.457 86.3616 14.457C85.8856 14.457 85.4657 14.562 85.1016 14.772C84.7376 14.982 84.4506 15.276 84.2406 15.654C84.0446 16.032 83.9466 16.473 83.9466 16.977ZM98.9997 22.5H95.7657V6.666H98.9997V22.5ZM107.558 22.773C106.508 22.773 105.57 22.535 104.744 22.059C103.932 21.583 103.288 20.932 102.812 20.106C102.35 19.266 102.119 18.307 102.119 17.229C102.119 16.137 102.343 15.178 102.791 14.352C103.253 13.512 103.89 12.854 104.702 12.378C105.514 11.902 106.445 11.664 107.495 11.664C108.601 11.664 109.553 11.895 110.351 12.357C111.149 12.805 111.765 13.449 112.199 14.289C112.633 15.115 112.85 16.102 112.85 17.25V18.069L103.82 18.111L103.862 16.116H109.637C109.637 15.556 109.448 15.115 109.07 14.793C108.692 14.457 108.174 14.289 107.516 14.289C106.97 14.289 106.522 14.394 106.172 14.604C105.836 14.814 105.584 15.143 105.416 15.591C105.248 16.025 105.164 16.585 105.164 17.271C105.164 18.251 105.36 18.979 105.752 19.455C106.158 19.917 106.781 20.148 107.621 20.148C108.237 20.148 108.748 20.043 109.154 19.833C109.56 19.623 109.819 19.329 109.931 18.951H112.892C112.71 20.113 112.136 21.044 111.17 21.744C110.204 22.43 109 22.773 107.558 22.773Z\" />\n <defs>\n <linearGradient id={`paint0_linear_${paintId}`} x1=\"2.38462\" y1=\"1.77333\" x2=\"26.529\" y2=\"29.367\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#8E59FF\" />\n <stop offset=\"1\" stopColor=\"#6888F9\" />\n </linearGradient>\n <linearGradient id={`paint1_linear_${paintId}`} x1=\"2.3841\" y1=\"26.2267\" x2=\"26.5285\" y2=\"-1.36739\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#8E59FF\" />\n <stop offset=\"1\" stopColor=\"#6888F9\" />\n </linearGradient>\n <clipPath id=\"clip0_828_2896\">\n <rect width=\"28\" height=\"32\" fill=\"white\" transform=\"translate(32) rotate(90)\" />\n </clipPath>\n </defs>\n </svg>\n <span className=\"hidden sm:inline-flex px-2.5 py-1 rounded-full border border-bp-elements-borderColor text-sm font-display font-medium text-bp-elements-textSecondary\">\n {label ?? 'Tangle'}\n </span>\n </div>\n );\n}\n","import { Links, Meta, Scripts, ScrollRestoration } from 'react-router';\nimport type { ReactNode } from 'react';\n\ninterface AppDocumentProps {\n children: ReactNode;\n description: string;\n themeStorageKeys: [string, string];\n}\n\nfunction buildInlineThemeCode(themeStorageKeys: [string, string]): string {\n const [primaryKey, secondaryKey] = themeStorageKeys;\n return `\n (function() {\n var theme = localStorage.getItem('${primaryKey}') || localStorage.getItem('${secondaryKey}');\n if (!theme) {\n theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n document.querySelector('html').setAttribute('data-theme', theme);\n })();\n `;\n}\n\nexport function AppDocument({ children, description, themeStorageKeys }: AppDocumentProps) {\n return (\n <html lang=\"en\" data-theme=\"dark\" suppressHydrationWarning>\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content={description} />\n <Meta />\n <Links />\n <link rel=\"icon\" href=\"/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossOrigin=\"anonymous\" />\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&display=swap\"\n />\n <script dangerouslySetInnerHTML={{ __html: buildInlineThemeCode(themeStorageKeys) }} />\n </head>\n <body>\n {children}\n <ScrollRestoration />\n <Scripts />\n </body>\n </html>\n );\n}\n","interface AppFooterProps {\n brandText: string;\n tone: 'cloud' | 'arena';\n githubUrl?: string;\n docsUrl?: string;\n}\n\nconst TONE_STYLES: Record<AppFooterProps['tone'], { border: string; text: string }> = {\n cloud: {\n border: 'border-cloud-elements-dividerColor',\n text: 'text-cloud-elements-textTertiary',\n },\n arena: {\n border: 'border-arena-elements-dividerColor',\n text: 'text-arena-elements-textTertiary',\n },\n};\n\nexport function AppFooter({\n brandText,\n tone,\n githubUrl = 'https://github.com/tangle-network',\n docsUrl = 'https://docs.tangle.tools',\n}: AppFooterProps) {\n const styles = TONE_STYLES[tone];\n\n return (\n <footer className={`border-t py-5 mt-12 ${styles.border}`}>\n <div className={`mx-auto max-w-7xl px-4 sm:px-6 flex items-center justify-between text-xs ${styles.text}`}>\n <span className=\"font-data\">{brandText}</span>\n <div className=\"flex items-center gap-5\">\n <a href={githubUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"hover:text-violet-700 dark:hover:text-violet-400 transition-colors\">GitHub</a>\n <a href={docsUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"hover:text-violet-700 dark:hover:text-violet-400 transition-colors\">Docs</a>\n </div>\n </div>\n </footer>\n );\n}\n","import { Toaster } from 'sonner';\nimport { useThemeValue } from '../../hooks/useThemeValue';\n\ninterface AppToasterProps {\n tone: 'cloud' | 'arena';\n}\n\nconst TONE_TEXT_COLOR: Record<AppToasterProps['tone'], string> = {\n cloud: 'var(--cloud-elements-textPrimary)',\n arena: 'var(--arena-elements-textPrimary)',\n};\n\nexport function AppToaster({ tone }: AppToasterProps) {\n const theme = useThemeValue();\n\n return (\n <Toaster\n position=\"bottom-right\"\n theme={theme as 'light' | 'dark' | 'system'}\n richColors\n closeButton\n duration={3000}\n toastOptions={{\n style: {\n background: 'var(--glass-bg-strong)',\n backdropFilter: 'blur(16px)',\n border: '1px solid var(--glass-border)',\n color: TONE_TEXT_COLOR[tone],\n },\n }}\n />\n );\n}\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { type ReactNode, useEffect, useRef, useState } from 'react';\nimport { type Config, WagmiContext, useReconnect } from 'wagmi';\n\ninterface Web3ShellProps {\n config: Config;\n reconnectOnMount?: boolean;\n children: ReactNode;\n}\n\ntype RecentConnectorStorage = Pick<NonNullable<Config['storage']>, 'getItem' | 'removeItem'>;\n\n// We prefer the last successful connector so silent restoration is fast and\n// doesn't probe every available connector on startup.\nasync function findRecentConnector(currentConfig: Pick<Config, 'connectors' | 'storage'>) {\n const storage = currentConfig.storage as RecentConnectorStorage | null | undefined;\n const recentConnectorId = await storage?.getItem('recentConnectorId');\n if (!recentConnectorId) return null;\n\n const connector = currentConfig.connectors.find((candidate) => candidate.id === recentConnectorId) ?? null;\n if (!connector) {\n await storage?.removeItem('recentConnectorId');\n }\n\n return connector;\n}\n\nfunction ReconnectOnMount({\n config,\n reconnectOnMount,\n}: Pick<Web3ShellProps, 'config' | 'reconnectOnMount'>) {\n const { reconnectAsync } = useReconnect();\n const attemptedRef = useRef(false);\n\n useEffect(() => {\n if (!reconnectOnMount || attemptedRef.current) return;\n attemptedRef.current = true;\n\n let cancelled = false;\n\n // Why this exists:\n // - In this app stack, wagmi's built-in provider hydrate path can kick off\n // reconnect work during provider rerenders.\n // - Route navigation rerenders the app shell, so wallet restore was being\n // retriggered on page changes, which made the header look like it was\n // reconnecting and added several seconds of delay.\n //\n // Our fix is to keep wagmi context/query wiring here, but move restore to a\n // single effect guarded by a ref. A rerender keeps the same ref value, so\n // reconnect only runs once per real mount and still runs again after a full\n // page refresh.\n void (async () => {\n try {\n const connector = await findRecentConnector(config);\n if (cancelled) return;\n\n if (connector) {\n await reconnectAsync({ connectors: [connector] });\n return;\n }\n\n await reconnectAsync();\n } catch {\n // A failed silent reconnect should leave the app disconnected.\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [config, reconnectAsync, reconnectOnMount]);\n\n return null;\n}\n\nexport function Web3Shell({\n config,\n reconnectOnMount = true,\n children,\n}: Web3ShellProps) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n staleTime: 30_000,\n },\n },\n }),\n );\n\n return (\n // We provide wagmi context directly instead of using WagmiProvider so we can\n // control exactly when silent reconnect runs.\n <WagmiContext.Provider value={config}>\n <QueryClientProvider client={queryClient}>\n <ReconnectOnMount config={config} reconnectOnMount={reconnectOnMount} />\n {children}\n </QueryClientProvider>\n </WagmiContext.Provider>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { useStore } from '@nanostores/react';\nimport { selectedChainIdStore } from '../../contracts/publicClient';\nimport { getNetworks } from '../../contracts/chains';\n\nfunction chainIcon(label: string | undefined, chainName: string | undefined): string {\n if (label === 'Tangle Local' || chainName === 'Tangle Local') return 'i-ph:desktop';\n if (label === 'Tangle Testnet' || chainName === 'Tangle Testnet') return 'i-ph:flask';\n if (label === 'Tangle Mainnet' || chainName === 'Tangle') return 'i-ph:globe-hemisphere-west';\n return 'i-ph:globe';\n}\n\nfunction orderedChainIds(): number[] {\n const priority: Record<string, number> = {\n 'Tangle Local': 0,\n 'Tangle Testnet': 1,\n 'Tangle Mainnet': 2,\n Tangle: 2,\n };\n\n return Object.entries(getNetworks())\n .sort(([, a], [, b]) => {\n const aPriority = priority[a?.label ?? a?.chain?.name ?? ''] ?? 99;\n const bPriority = priority[b?.label ?? b?.chain?.name ?? ''] ?? 99;\n if (aPriority !== bPriority) return aPriority - bPriority;\n return a.chain.id - b.chain.id;\n })\n .map(([chainId]) => Number(chainId));\n}\n\nexport function ChainSwitcher() {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const selectedChainId = useStore(selectedChainIdStore);\n const current = getNetworks()[selectedChainId];\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n }\n if (open) document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n function selectChain(chainId: number) {\n selectedChainIdStore.set(chainId);\n setOpen(false);\n window.location.reload();\n }\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n onClick={() => setOpen(!open)}\n className=\"flex items-center gap-1.5 px-2.5 py-2 rounded-lg text-xs font-data font-medium bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 border border-bp-elements-borderColor hover:border-bp-elements-borderColorActive/40 transition-all\"\n title={current?.label ?? 'Select network'}\n >\n <div className={`${chainIcon(current?.label, current?.chain?.name)} text-sm text-bp-elements-icon-success`} />\n <span className=\"hidden sm:inline text-bp-elements-textSecondary\">{current?.shortLabel ?? 'Unknown'}</span>\n <div className={`i-ph:caret-down text-[10px] text-bp-elements-textTertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"absolute right-0 top-full mt-2 w-48 glass-card-strong rounded-xl border border-bp-elements-dividerColor/50 py-1.5 z-50 shadow-lg\">\n <div className=\"px-3 py-1.5 text-[10px] font-data uppercase tracking-wider text-bp-elements-textTertiary\">Network</div>\n {orderedChainIds().map((chainId) => {\n const net = getNetworks()[chainId];\n if (!net) return null;\n const isSelected = chainId === selectedChainId;\n return (\n <button\n key={chainId}\n onClick={() => selectChain(chainId)}\n className={`flex items-center gap-2.5 w-full px-3 py-2 text-left transition-colors ${\n isSelected ? 'bg-violet-500/10 text-violet-700 dark:text-violet-400' : 'hover:bg-bp-elements-item-backgroundHover text-bp-elements-textSecondary'\n }`}\n >\n <div className={`${chainIcon(net.label, net.chain.name)} text-sm ${isSelected ? 'text-violet-700 dark:text-violet-400' : 'text-bp-elements-textTertiary'}`} />\n <span className=\"text-sm font-display font-medium\">{net.label}</span>\n {isSelected && <div className=\"i-ph:check-bold text-xs ml-auto text-violet-700 dark:text-violet-400\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { useThemeValue } from '../../hooks/useThemeValue';\nimport { toggleTheme } from '../../stores/theme';\nimport { Button } from '../ui/button';\n\nexport function ThemeToggle() {\n const theme = useThemeValue();\n return (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={toggleTheme} aria-label=\"Toggle theme\" className=\"relative overflow-hidden\">\n <div className=\"transition-transform duration-300 ease-out\">\n {theme === 'dark' ? (\n <div className=\"i-ph:sun size-4 text-amber-400\" />\n ) : (\n <div className=\"i-ph:moon size-4 text-violet-400\" />\n )}\n </div>\n </Button>\n );\n}\n","interface ConnectWalletCtaProps {\n onClick?: () => void;\n isReconnecting?: boolean;\n}\n\nexport function ConnectWalletCta({ onClick, isReconnecting = false }: ConnectWalletCtaProps) {\n return (\n <button\n onClick={() => onClick?.()}\n disabled={!onClick}\n className=\"px-4 py-2.5 rounded-lg bg-violet-500/10 border border-violet-500/20 text-violet-700 dark:text-violet-400 text-sm font-display font-medium hover:bg-violet-500/20 transition-colors\"\n >\n {isReconnecting ? (\n <span className=\"flex items-center gap-2\">\n <span className=\"w-3 h-3 rounded-full border-2 border-violet-500/40 border-t-violet-600 dark:border-t-violet-400 animate-spin\" />\n Reconnecting...\n </span>\n ) : 'Connect'}\n </button>\n );\n}\n","import { useState } from 'react';\nimport type { JobFieldDef } from '../../blueprints/registry';\nimport { Input } from '../ui/input';\nimport { Select } from '../ui/select';\nimport { Textarea } from '../ui/textarea';\nimport { Toggle } from '../ui/toggle';\nimport { cn } from '../../utils';\n\ninterface FormFieldProps {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n error?: string;\n}\n\nexport function FormField({ field, value, onChange, error }: FormFieldProps) {\n if (field.internal) return null;\n\n const isBool = field.type === 'boolean';\n\n return (\n <div className={cn(isBool && 'flex items-center gap-3')}>\n {!isBool && (\n <label className=\"block text-sm font-display font-medium text-bp-elements-textSecondary mb-2\">\n {field.label}\n {field.required && ' *'}\n </label>\n )}\n <FieldInput field={field} value={value} onChange={onChange} />\n {isBool && (\n <span className=\"text-sm font-display text-bp-elements-textSecondary\">{field.label}</span>\n )}\n {field.helperText && !error && (\n <p className=\"text-xs text-bp-elements-textTertiary mt-1\">{field.helperText}</p>\n )}\n {error && <p className=\"text-xs text-crimson-400 mt-1\">{error}</p>}\n </div>\n );\n}\n\nfunction FieldInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n switch (field.type) {\n case 'text':\n return (\n <Input\n value={String(value ?? '')}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n />\n );\n case 'number':\n return <NumberInput field={field} value={value} onChange={onChange} />;\n case 'textarea':\n case 'json':\n return (\n <Textarea\n value={String(value ?? '')}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n rows={field.type === 'json' ? 3 : 4}\n className={field.type === 'json' ? 'font-data text-sm' : undefined}\n />\n );\n case 'boolean':\n return <Toggle checked={Boolean(value)} onChange={(v) => onChange(field.name, v)} />;\n case 'select':\n return (\n <Select\n value={String(value ?? '')}\n onValueChange={(v) => onChange(field.name, v)}\n options={field.options ?? []}\n />\n );\n case 'combobox':\n return <ComboboxInput field={field} value={value} onChange={onChange} />;\n default:\n return null;\n }\n}\n\n/** Number input with inline stepper buttons */\nfunction NumberInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n const numVal = Number(value ?? field.min ?? 0);\n const step = field.step ?? 1;\n\n const clamp = (raw: number) => {\n if (field.min != null && raw < field.min) return field.min;\n if (field.max != null && raw > field.max) return field.max;\n return raw;\n };\n\n const canDecrement = field.min == null || numVal > field.min;\n const canIncrement = field.max == null || numVal < field.max;\n\n return (\n <div className=\"flex items-stretch h-11 rounded-lg border border-bp-elements-borderColor bg-bp-elements-background-depth-3 dark:bg-bp-elements-background-depth-4 transition-all duration-200 hover:border-bp-elements-borderColorActive/40 focus-within:border-violet-500/40 focus-within:ring-2 focus-within:ring-violet-500/10\">\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={!canDecrement}\n onClick={() => onChange(field.name, clamp(numVal - step))}\n className=\"flex items-center justify-center w-10 shrink-0 text-bp-elements-textTertiary transition-colors hover:text-bp-elements-textPrimary hover:bg-white/[0.04] rounded-l-lg disabled:opacity-30 disabled:pointer-events-none\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" /></svg>\n </button>\n <input\n type=\"number\"\n value={numVal}\n min={field.min}\n max={field.max}\n step={step}\n onChange={(e) => {\n if (e.target.value === '') {\n onChange(field.name, field.min ?? 0);\n return;\n }\n onChange(field.name, clamp(Number(e.target.value)));\n }}\n placeholder={field.placeholder}\n className=\"flex-1 min-w-0 bg-transparent text-center text-base font-data text-bp-elements-textPrimary outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={!canIncrement}\n onClick={() => onChange(field.name, clamp(numVal + step))}\n className=\"flex items-center justify-center w-10 shrink-0 text-bp-elements-textTertiary transition-colors hover:text-bp-elements-textPrimary hover:bg-white/[0.04] rounded-r-lg disabled:opacity-30 disabled:pointer-events-none\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M7 3v8M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" /></svg>\n </button>\n </div>\n );\n}\n\n/** Dropdown with preset options + free-text custom input */\nfunction ComboboxInput({\n field,\n value,\n onChange,\n}: {\n field: JobFieldDef;\n value: unknown;\n onChange: (name: string, value: unknown) => void;\n}) {\n const strVal = String(value ?? '');\n const options = field.options ?? [];\n const isPreset = options.some((o) => o.value === strVal);\n const [isCustom, setIsCustom] = useState(!isPreset && strVal !== '');\n\n if (isCustom) {\n return (\n <div className=\"flex gap-2\">\n <Input\n value={strVal}\n onChange={(e) => onChange(field.name, e.target.value)}\n placeholder={field.placeholder}\n className=\"flex-1\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setIsCustom(false);\n onChange(field.name, options[0]?.value ?? '');\n }}\n className=\"shrink-0 rounded-lg border border-bp-elements-borderColor bg-bp-elements-background-depth-3 px-3 py-2 text-xs font-display text-bp-elements-textTertiary transition-colors hover:border-bp-elements-borderColorActive/40 hover:text-bp-elements-textSecondary\"\n >\n Presets\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-2 w-full\">\n <Select\n value={strVal}\n onValueChange={(v) => {\n if (v === '__custom__') {\n setIsCustom(true);\n onChange(field.name, '');\n } else {\n onChange(field.name, v);\n }\n }}\n options={[...options, { label: 'Custom...', value: '__custom__' }]}\n className=\"flex-1\"\n />\n </div>\n );\n}\n","import type { JobDefinition } from '../../blueprints/registry';\nimport { FormField } from './FormField';\n\nexport interface FormSection {\n label: string;\n fields: string[];\n collapsed?: boolean;\n}\n\ninterface BlueprintJobFormProps {\n job: JobDefinition;\n values: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n errors?: Record<string, string>;\n sections?: FormSection[];\n}\n\nexport function BlueprintJobForm({ job, values, onChange, errors, sections }: BlueprintJobFormProps) {\n const visibleFields = job.fields.filter((f) => !f.internal);\n\n if (sections) {\n return (\n <div className=\"space-y-6\">\n {sections.map((section) => {\n const sectionFields = section.fields\n .map((name) => visibleFields.find((f) => f.name === name))\n .filter(Boolean);\n\n if (sectionFields.length === 0) return null;\n\n if (section.collapsed) {\n return (\n <details key={section.label} className=\"group\">\n <summary className=\"cursor-pointer text-sm font-display font-medium text-bp-elements-textTertiary hover:text-bp-elements-textSecondary transition-colors\">\n {section.label}\n </summary>\n <div className=\"mt-4 space-y-4\">\n {sectionFields.map((field) => (\n <FormField\n key={field!.name}\n field={field!}\n value={values[field!.name]}\n onChange={onChange}\n error={errors?.[field!.name]}\n />\n ))}\n </div>\n </details>\n );\n }\n\n return (\n <div key={section.label}>\n <label className=\"block text-sm font-display font-medium text-bp-elements-textSecondary mb-3\">\n {section.label}\n </label>\n <div className=\"space-y-4\">\n {sectionFields.map((field) => (\n <FormField\n key={field!.name}\n field={field!}\n value={values[field!.name]}\n onChange={onChange}\n error={errors?.[field!.name]}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {visibleFields.map((field) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n onChange={onChange}\n error={errors?.[field.name]}\n />\n ))}\n </div>\n );\n}\n","import type { JobDefinition } from '../../blueprints/registry';\nimport { cn } from '../../utils';\n\ninterface FormSummaryProps {\n job: JobDefinition;\n values: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport function FormSummary({ job, values, context }: FormSummaryProps) {\n return (\n <div className=\"glass-card rounded-lg p-4 space-y-2.5\">\n {context &&\n Object.entries(context).map(([key, val]) => (\n <SummaryRow key={key} label={key} value={String(val)} mono />\n ))}\n {context && job.fields.length > 0 && (\n <div className=\"border-t border-bp-elements-dividerColor my-2\" />\n )}\n {job.fields\n .filter((f) => !f.internal)\n .map((field) => {\n const v = values[field.name];\n let display: string;\n if (field.type === 'boolean') {\n display = v ? 'Enabled' : 'Disabled';\n } else if (field.type === 'select' && field.options) {\n display = field.options.find((o) => o.value === String(v))?.label ?? String(v ?? '');\n } else {\n display = String(v ?? '--');\n }\n return <SummaryRow key={field.name} label={field.label} value={display} mono={field.type === 'json'} />;\n })}\n </div>\n );\n}\n\nfunction SummaryRow({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-bp-elements-textSecondary\">{label}</span>\n <span className={cn('text-bp-elements-textPrimary', mono ? 'font-data text-xs' : 'font-display')}>\n {value || '--'}\n </span>\n </div>\n );\n}\n","import { useStore } from '@nanostores/react';\nimport { useAccount } from 'wagmi';\nimport type { Address } from 'viem';\nimport type { JobDefinition } from '../../blueprints/registry';\nimport { useJobForm } from '../../hooks/useJobForm';\nimport { useSubmitJob } from '../../hooks/useSubmitJob';\nimport { useJobPrice } from '../../hooks/useJobPrice';\nimport { formatCost } from '../../hooks/useQuotes';\nimport { encodeJobArgs } from '../../contracts/generic-encoder';\nimport { infraStore } from '../../stores/infra';\nimport { BlueprintJobForm } from './BlueprintJobForm';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../ui/dialog';\nimport { Button } from '../ui/button';\nimport { cn } from '../../utils';\n\ninterface JobExecutionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n job: JobDefinition;\n serviceId: bigint;\n context?: Record<string, unknown>;\n onSuccess?: () => void;\n}\n\nexport function JobExecutionDialog({\n open,\n onOpenChange,\n job,\n serviceId,\n context,\n onSuccess,\n}: JobExecutionDialogProps) {\n const infra = useStore(infraStore);\n const { address } = useAccount();\n const { values, errors, onChange, validate, reset } = useJobForm(job);\n const { submitJob, status, error: txError, txHash, reset: resetTx } = useSubmitJob();\n\n // Per-job RFQ: fetch price from operator before submission.\n // tnt-core v0.13.0 binds quotes to the future caller — only run the hook\n // once a wallet address is available.\n const operatorRpcUrl = infra.serviceInfo?.operators?.[0]?.rpcAddress;\n const blueprintId = BigInt(infra.blueprintId || '0');\n const ZERO: Address = '0x0000000000000000000000000000000000000000';\n const requester: Address = (address ?? ZERO) as Address;\n const { quote, isLoading: priceLoading, isSolvingPow, formattedPrice, error: priceError } = useJobPrice(\n operatorRpcUrl,\n serviceId,\n job.id,\n blueprintId,\n open && !!operatorRpcUrl && serviceId > 0n && !!address,\n requester,\n );\n\n // Fallback price from multiplier (base rate = 0.001 TNT = 1e15 wei)\n const estimatedPrice = BigInt(job.pricingMultiplier) * 1_000_000_000_000_000n;\n const jobValue = quote?.price ?? estimatedPrice;\n const hasRfqPrice = !!quote && !priceError;\n\n const hasFields = job.fields.filter((f) => !f.internal).length > 0;\n\n const handleSubmit = async () => {\n if (hasFields && !validate()) return;\n const args = encodeJobArgs(job, values, context);\n const hash = await submitJob({\n serviceId,\n jobId: job.id,\n args,\n label: job.label,\n value: jobValue,\n });\n if (hash) {\n onSuccess?.();\n }\n };\n\n const handleClose = (nextOpen: boolean) => {\n if (!nextOpen) {\n reset();\n resetTx();\n }\n onOpenChange(nextOpen);\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-lg max-h-[85vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle className=\"font-display flex items-center gap-2\">\n <div className={`${job.icon} text-lg`} />\n {job.label}\n </DialogTitle>\n <DialogDescription>{job.description}</DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 mt-2\">\n {job.warning && (\n <div className=\"glass-card rounded-lg p-3 border-amber-500/30\">\n <div className=\"flex items-center gap-2\">\n <div className=\"i-ph:warning text-sm text-amber-400\" />\n <p className=\"text-xs text-amber-400\">{job.warning}</p>\n </div>\n </div>\n )}\n\n {hasFields && (\n <BlueprintJobForm job={job} values={values} onChange={onChange} errors={errors} />\n )}\n\n {/* Job Price -- from RFQ or fallback estimate */}\n <div className=\"glass-card rounded-lg p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div className=\"i-ph:tag text-sm text-bp-elements-textTertiary\" />\n <span className=\"text-sm font-display text-bp-elements-textSecondary\">\n Job Price\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n {priceLoading || isSolvingPow ? (\n <span className=\"text-xs font-data text-bp-elements-textTertiary animate-pulse\">\n {isSolvingPow ? 'Solving PoW...' : 'Fetching quote...'}\n </span>\n ) : (\n <span className={cn(\n 'text-sm font-data font-semibold',\n hasRfqPrice ? 'text-teal-400' : 'text-bp-elements-textSecondary',\n )}>\n {hasRfqPrice ? formattedPrice : `~${formatCost(estimatedPrice)}`}\n </span>\n )}\n </div>\n </div>\n {hasRfqPrice && (\n <p className=\"text-[10px] text-bp-elements-textTertiary mt-1.5\">\n Signed quote from operator — expires in {Math.max(0, Number(quote!.expiry) - Math.floor(Date.now() / 1000))}s\n </p>\n )}\n {!hasRfqPrice && !priceLoading && (\n <p className=\"text-[10px] text-bp-elements-textTertiary mt-1.5\">\n Estimate ({job.pricingMultiplier}x base rate) — no operator RFQ available\n </p>\n )}\n </div>\n\n {/* TX Status */}\n {status !== 'idle' && (\n <div\n className={cn(\n 'glass-card rounded-lg p-3',\n status === 'confirmed' && 'border-teal-500/30',\n status === 'failed' && 'border-crimson-500/30',\n )}\n >\n <div className=\"flex items-center gap-3\">\n {(status === 'signing' || status === 'pending') && (\n <div className=\"i-ph:circle-fill text-sm text-blue-400 animate-pulse\" />\n )}\n {status === 'confirmed' && <div className=\"i-ph:check-circle-fill text-sm text-teal-400\" />}\n {status === 'failed' && <div className=\"i-ph:x-circle-fill text-sm text-crimson-400\" />}\n <div>\n <p className=\"text-sm font-display font-medium text-bp-elements-textPrimary\">\n {status === 'signing' && 'Waiting for wallet signature...'}\n {status === 'pending' && 'Transaction submitted...'}\n {status === 'confirmed' && 'Transaction confirmed!'}\n {status === 'failed' && 'Transaction failed'}\n </p>\n {txHash && (\n <p className=\"text-xs font-data text-bp-elements-textTertiary mt-0.5 truncate max-w-xs\">\n TX: {txHash}\n </p>\n )}\n {txError && <p className=\"text-xs text-crimson-400 mt-0.5\">{txError}</p>}\n </div>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"secondary\" onClick={() => handleClose(false)}>\n {status === 'confirmed' ? 'Close' : 'Cancel'}\n </Button>\n {status !== 'confirmed' && (\n <Button\n onClick={handleSubmit}\n disabled={status === 'signing' || status === 'pending' || priceLoading}\n >\n {status === 'signing' || status === 'pending' ? (\n <>\n <div className=\"i-ph:circle-fill text-sm animate-pulse\" />\n Submitting...\n </>\n ) : priceLoading ? (\n 'Loading price...'\n ) : (\n <>Submit ({hasRfqPrice ? formattedPrice : `~${formatCost(estimatedPrice)}`})</>\n )}\n </Button>\n )}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","jsx","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useStore","jsx","jsxs","useStore"]}