Spaces:
No application file
No application file
| import { | |
| Command, | |
| CommandDialog, | |
| CommandEmpty, | |
| CommandGroup, | |
| CommandInput, | |
| CommandItem, | |
| CommandList, | |
| CommandSeparator, | |
| CommandShortcut, | |
| } from '@/components/ui/command'; | |
| import { Dialog, DialogContent, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; | |
| import { cn } from '@/lib/utils'; | |
| import type { ComponentProps, ReactNode } from 'react'; | |
| export type ModelSelectorProps = ComponentProps<typeof Dialog>; | |
| export const ModelSelector = (props: ModelSelectorProps) => <Dialog {...props} />; | |
| export type ModelSelectorTriggerProps = ComponentProps<typeof DialogTrigger>; | |
| export const ModelSelectorTrigger = (props: ModelSelectorTriggerProps) => ( | |
| <DialogTrigger {...props} /> | |
| ); | |
| export type ModelSelectorContentProps = ComponentProps<typeof DialogContent> & { | |
| title?: ReactNode; | |
| }; | |
| export const ModelSelectorContent = ({ | |
| className, | |
| children, | |
| title = 'Model Selector', | |
| ...props | |
| }: ModelSelectorContentProps) => ( | |
| <DialogContent className={cn('p-0', className)} {...props}> | |
| <DialogTitle className="sr-only">{title}</DialogTitle> | |
| <Command className="**:data-[slot=command-input-wrapper]:h-auto">{children}</Command> | |
| </DialogContent> | |
| ); | |
| export type ModelSelectorDialogProps = ComponentProps<typeof CommandDialog>; | |
| export const ModelSelectorDialog = (props: ModelSelectorDialogProps) => ( | |
| <CommandDialog {...props} /> | |
| ); | |
| export type ModelSelectorInputProps = ComponentProps<typeof CommandInput>; | |
| export const ModelSelectorInput = ({ className, ...props }: ModelSelectorInputProps) => ( | |
| <CommandInput className={cn('h-auto py-3.5', className)} {...props} /> | |
| ); | |
| export type ModelSelectorListProps = ComponentProps<typeof CommandList>; | |
| export const ModelSelectorList = (props: ModelSelectorListProps) => <CommandList {...props} />; | |
| export type ModelSelectorEmptyProps = ComponentProps<typeof CommandEmpty>; | |
| export const ModelSelectorEmpty = (props: ModelSelectorEmptyProps) => <CommandEmpty {...props} />; | |
| export type ModelSelectorGroupProps = ComponentProps<typeof CommandGroup>; | |
| export const ModelSelectorGroup = (props: ModelSelectorGroupProps) => <CommandGroup {...props} />; | |
| export type ModelSelectorItemProps = ComponentProps<typeof CommandItem>; | |
| export const ModelSelectorItem = (props: ModelSelectorItemProps) => <CommandItem {...props} />; | |
| export type ModelSelectorShortcutProps = ComponentProps<typeof CommandShortcut>; | |
| export const ModelSelectorShortcut = (props: ModelSelectorShortcutProps) => ( | |
| <CommandShortcut {...props} /> | |
| ); | |
| export type ModelSelectorSeparatorProps = ComponentProps<typeof CommandSeparator>; | |
| export const ModelSelectorSeparator = (props: ModelSelectorSeparatorProps) => ( | |
| <CommandSeparator {...props} /> | |
| ); | |
| export type ModelSelectorLogoProps = Omit<ComponentProps<'img'>, 'src' | 'alt'> & { | |
| provider: | |
| | 'moonshotai-cn' | |
| | 'lucidquery' | |
| | 'moonshotai' | |
| | 'zai-coding-plan' | |
| | 'alibaba' | |
| | 'xai' | |
| | 'vultr' | |
| | 'nvidia' | |
| | 'upstage' | |
| | 'groq' | |
| | 'github-copilot' | |
| | 'mistral' | |
| | 'vercel' | |
| | 'nebius' | |
| | 'deepseek' | |
| | 'alibaba-cn' | |
| | 'google-vertex-anthropic' | |
| | 'venice' | |
| | 'chutes' | |
| | 'cortecs' | |
| | 'github-models' | |
| | 'togetherai' | |
| | 'azure' | |
| | 'baseten' | |
| | 'huggingface' | |
| | 'opencode' | |
| | 'fastrouter' | |
| | 'google' | |
| | 'google-vertex' | |
| | 'cloudflare-workers-ai' | |
| | 'inception' | |
| | 'wandb' | |
| | 'openai' | |
| | 'zhipuai-coding-plan' | |
| | 'perplexity' | |
| | 'openrouter' | |
| | 'zenmux' | |
| | 'v0' | |
| | 'iflowcn' | |
| | 'synthetic' | |
| | 'deepinfra' | |
| | 'zhipuai' | |
| | 'submodel' | |
| | 'zai' | |
| | 'inference' | |
| | 'requesty' | |
| | 'morph' | |
| | 'lmstudio' | |
| | 'anthropic' | |
| | 'aihubmix' | |
| | 'fireworks-ai' | |
| | 'modelscope' | |
| | 'llama' | |
| | 'scaleway' | |
| | 'amazon-bedrock' | |
| | 'cerebras' | |
| | (string & {}); | |
| }; | |
| export const ModelSelectorLogo = ({ provider, className, ...props }: ModelSelectorLogoProps) => ( | |
| <img | |
| {...props} | |
| alt={`${provider} logo`} | |
| className={cn('size-3 dark:invert', className)} | |
| height={12} | |
| src={`https://models.dev/logos/${provider}.svg`} | |
| width={12} | |
| /> | |
| ); | |
| export type ModelSelectorLogoGroupProps = ComponentProps<'div'>; | |
| export const ModelSelectorLogoGroup = ({ className, ...props }: ModelSelectorLogoGroupProps) => ( | |
| <div | |
| className={cn( | |
| '-space-x-1 flex shrink-0 items-center [&>img]:rounded-full [&>img]:bg-background [&>img]:p-px [&>img]:ring-1 dark:[&>img]:bg-foreground', | |
| className, | |
| )} | |
| {...props} | |
| /> | |
| ); | |
| export type ModelSelectorNameProps = ComponentProps<'span'>; | |
| export const ModelSelectorName = ({ className, ...props }: ModelSelectorNameProps) => ( | |
| <span className={cn('flex-1 truncate text-left', className)} {...props} /> | |
| ); | |