import { ClockIcon, HandRaisedIcon, RectangleStackIcon, SparklesIcon, Squares2X2Icon, TableCellsIcon, TagIcon, WrenchIcon, } from "@heroicons/react/24/outline"; import { CubeSparkleIcon } from "~/assets/icons/CubeSparkleIcon"; import { InfoIcon } from "~/assets/icons/InfoIcon"; import { AnthropicIcon, AzureIcon, CerebrasIcon, DeepseekIcon, GeminiIcon, LlamaIcon, MistralIcon, OpenAIIcon, PerplexityIcon, XAIIcon, } from "~/assets/icons/AiProviderIcons"; import { AttemptIcon } from "~/assets/icons/AttemptIcon"; import { TaskCachedIcon, TaskIcon } from "~/assets/icons/TaskIcon"; import { cn } from "~/utils/cn"; import { tablerIcons } from "~/utils/tablerIcons"; import tablerSpritePath from "~/components/primitives/tabler-sprite.svg"; import { PauseIcon } from "~/assets/icons/PauseIcon"; import { RunFunctionIcon } from "~/assets/icons/RunFunctionIcon"; import { MiddlewareIcon } from "~/assets/icons/MiddlewareIcon"; import { FunctionIcon } from "~/assets/icons/FunctionIcon"; import { TriggerIcon } from "~/assets/icons/TriggerIcon"; import { PythonLogoIcon } from "~/assets/icons/PythonLogoIcon"; import { TraceIcon } from "~/assets/icons/TraceIcon"; import { WaitpointTokenIcon } from "~/assets/icons/WaitpointTokenIcon"; import { StreamsIcon } from "~/assets/icons/StreamsIcon"; type TaskIconProps = { name: string | undefined; spanName: string; className?: string; }; type SpanNameIcons = { matcher: RegExp; iconName: string; }; const spanNameIcons: SpanNameIcons[] = [{ matcher: /^prisma:/, iconName: "brand-prisma" }]; export function RunIcon({ name, className, spanName }: TaskIconProps) { const spanNameIcon = spanNameIcons.find(({ matcher }) => matcher.test(spanName)); if (spanNameIcon) { if (tablerIcons.has("tabler-" + spanNameIcon.iconName)) { return ; } else if ( spanNameIcon.iconName.startsWith("tabler-") && tablerIcons.has(spanNameIcon.iconName) ) { return ; } } if (!name) return ( ); if (tablerIcons.has(name)) { return ; } switch (name) { case "task": return ; case "task-cached": return ; case "agent": return ; case "scheduled": return ; case "attempt": return ( ); case "wait": return ; case "trace": return ( ); case "tag": return ( ); case "queue": return ; case "trigger": return ; case "python": return ; case "wait-token": return ; case "function": return ( ); case "query": return ; //log levels case "debug": case "log": case "info": return ( ); case "warn": return ; case "error": return ; case "fatal": return ; case "task-middleware": return ( ); case "task-fn-run": return ( ); case "task-hook-init": case "task-hook-onStart": case "task-hook-onStartAttempt": case "task-hook-onSuccess": case "task-hook-onWait": case "task-hook-onResume": case "task-hook-onComplete": case "task-hook-cleanup": case "task-hook-onCancel": return ( ); case "task-hook-onFailure": case "task-hook-catchError": return ; case "streams": return ( ); case "hero-sparkles": return ( ); case "hero-wrench": return ( ); case "tabler-brand-anthropic": case "ai-provider-anthropic": return ( ); case "ai-provider-openai": return ( ); case "ai-provider-gemini": return ( ); case "ai-provider-llama": return ( ); case "ai-provider-deepseek": return ( ); case "ai-provider-xai": return ( ); case "ai-provider-perplexity": return ( ); case "ai-provider-cerebras": return ( ); case "ai-provider-mistral": return ( ); case "ai-provider-azure": return ( ); } return ( ); } function TablerIcon({ name, className }: { name: string; className?: string }) { return ( ); }