From 1c82abb707ed74def94489fdf935dbc6e49c9322 Mon Sep 17 00:00:00 2001 From: Theo Browne Date: Fri, 6 Nov 2026 02:16:27 -0800 Subject: [PATCH 1/2] fix(web): cut-off model picker labels show their full text on hover Co-Authored-By: Claude Opus 5.5 --- .../web/src/components/chat/ComposerModelEffort.tsx | 7 +++++-- apps/web/src/components/chat/ModelListRow.tsx | 13 ++++++------- .../web/src/components/chat/ProviderModelPicker.tsx | 12 ++++++++++-- apps/web/src/lib/utils.ts | 8 ++++++++ 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apps/web/src/components/chat/ComposerModelEffort.tsx b/apps/web/src/components/chat/ComposerModelEffort.tsx index 35fd11c98be7c..b506b53d890c6 100644 --- a/apps/web/src/components/chat/ComposerModelEffort.tsx +++ b/apps/web/src/components/chat/ComposerModelEffort.tsx @@ -10,7 +10,7 @@ import { getProviderOptionCurrentLabel } from "@t3tools/shared/model"; import { CheckIcon, ChevronRightIcon, ChevronUpIcon, WorkflowIcon } from "lucide-react"; import { type KeyboardEvent, type ReactNode, use, useRef, useState } from "react"; -import { cn } from "~/lib/utils"; +import { cn, titleWhenTruncated } from "~/lib/utils"; import { Menu, MenuPopup, @@ -515,7 +515,10 @@ export function ComposerEffortColumn(props: { traits: TraitsSelectionInput | nul {controls?.effort?.descriptor.label ?? (controls?.others.length ? "Options" : "Effort")} - + {picker.modelLabel} diff --git a/apps/web/src/components/chat/ModelListRow.tsx b/apps/web/src/components/chat/ModelListRow.tsx index 69da770f1f84b..d840447ea0d77 100644 --- a/apps/web/src/components/chat/ModelListRow.tsx +++ b/apps/web/src/components/chat/ModelListRow.tsx @@ -7,7 +7,7 @@ import { Button } from "../ui/button"; import { Badge } from "../ui/badge"; import { Kbd } from "../ui/kbd"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; -import { cn } from "~/lib/utils"; +import { cn, titleWhenTruncated } from "~/lib/utils"; import { modelPickerModelKey } from "./modelPickerKeys"; import { ProviderInstanceIcon } from "./ProviderInstanceIcon"; @@ -69,11 +69,7 @@ export const ModelListRow = memo(function ModelListRow(props: {
{ - const name = event.currentTarget; - name.title = name.scrollWidth > name.clientWidth ? getDisplayModelName(model) : ""; - }} + onPointerEnter={titleWhenTruncated(getDisplayModelName(model))} > {getDisplayModelName(model)} {/* The logo is decorative, so name the provider for screen readers. */} @@ -81,7 +77,10 @@ export const ModelListRow = memo(function ModelListRow(props: {
{props.isSelected ?