| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- 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} />
- );
|