SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
14 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
1.5 KB · 36 lines tsx
Raw Blame History
1"use client";2import * as React from "react";3import { ModelSelector } from "./model-selector";4import { Button, type ButtonProps } from "@/components/ui/button";5import { cn } from "@/lib/utils";67/**8 * Opens the shared `ModelSelector` picker from any control (menu item, error card, router card…)9 * while only relying on its public props: the real trigger is rendered visually hidden and clicked.10 *11 */12export interface ModelPickerLauncherHandle {13  open(): void;14}1516export const ModelPickerLauncher = React.forwardRef<ModelPickerLauncherHandle, { value?: string | null; onChange: (key: string) => void; label?: React.ReactNode; className?: string; variant?: ButtonProps["variant"]; size?: ButtonProps["size"]; icon?: React.ReactNode; hiddenTrigger?: boolean }>(function ModelPickerLauncher({ value = null, onChange, label, className, variant = "outline", size = "md", icon, hiddenTrigger }, ref) {17  const holder = React.useRef<HTMLSpanElement>(null);18  const open = React.useCallback(() => {19    holder.current?.querySelector("button")?.click();20  }, []);21  React.useImperativeHandle(ref, () => ({ open }), [open]);22  return (23    <>24      <span ref={holder} className="hidden" aria-hidden>25        <ModelSelector value={value} onChange={onChange} size="sm" hotkey={false} />26      </span>27      {hiddenTrigger ? null : (28        <Button type="button" variant={variant} size={size} className={cn(className)} onClick={open}>29          {icon}30          {label ?? "Choose a model"}31        </Button>32      )}33    </>34  );35});36