authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-22 21:33:02-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-22 21:33:02-07:00
log21079391c72d1eeaa3c40f1cc5eb3e78abf0a846
tree9357229f586b780c41e9de0ed7922b2d2533ac89
parent866fc907592c9746b407484087d66c409e8034fa
signature Signed by PGP key B5690EEEBB952194

refactor(web): field controls stop restyling Input, Select, Combobox and Command (#13206)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

24 files changed, 72 insertions(+), 90 deletions(-)

apps/web/src/browser/BrowserDeviceToolbar.tsx+9-10
......@@ -189,10 +189,7 @@ export function BrowserDeviceToolbar({
189189 <SelectTrigger
190190 variant="ghost"
191191 size="xs"
192 className={cn(
193 "shrink-0 justify-between px-1.5 font-medium",
194 width >= 440 ? "w-36" : "w-24",
195 )}
192 className={cn("shrink-0 justify-between", width >= 440 ? "w-36" : "w-24")}
196193 aria-label="Browser device preset"
197194 >
198195 <SelectValue />
......@@ -227,7 +224,8 @@ export function BrowserDeviceToolbar({
227224 nativeInput
228225 type="number"
229226 inputMode="numeric"
230 size="sm"
227 size="compact"
228 font="mono"
231229 min={PREVIEW_VIEWPORT_MIN_DIMENSION}
232230 max={PREVIEW_VIEWPORT_MAX_DIMENSION}
233231 value={presentedSize.width}
......@@ -245,8 +243,8 @@ export function BrowserDeviceToolbar({
245243 aria-label="Viewport width"
246244 aria-invalid={!customValid}
247245 className={cn(
248 "h-6 rounded-md text-center tabular-nums [&_[data-slot=input]]:h-full [&_[data-slot=input]]:px-1 [&_[data-slot=input]]:text-xs [&_[data-slot=input]]:leading-none [&_[data-slot=input]::-webkit-inner-spin-button]:appearance-none [&_[data-slot=input]]:[appearance:textfield]",
249 width >= 360 ? "w-14" : "w-11",
246 "text-center [&_[data-slot=input]::-webkit-inner-spin-button]:appearance-none [&_[data-slot=input]]:[appearance:textfield]",
247 width >= 360 ? "w-14" : "w-13",
250248 )}
251249 />
252250 <span className="text-xs text-muted-foreground">×</span>
......@@ -254,7 +252,8 @@ export function BrowserDeviceToolbar({
254252 nativeInput
255253 type="number"
256254 inputMode="numeric"
257 size="sm"
255 size="compact"
256 font="mono"
258257 min={PREVIEW_VIEWPORT_MIN_DIMENSION}
259258 max={PREVIEW_VIEWPORT_MAX_DIMENSION}
260259 value={presentedSize.height}
......@@ -272,8 +271,8 @@ export function BrowserDeviceToolbar({
272271 aria-label="Viewport height"
273272 aria-invalid={!customValid}
274273 className={cn(
275 "h-6 rounded-md text-center tabular-nums [&_[data-slot=input]]:h-full [&_[data-slot=input]]:px-1 [&_[data-slot=input]]:text-xs [&_[data-slot=input]]:leading-none [&_[data-slot=input]::-webkit-inner-spin-button]:appearance-none [&_[data-slot=input]]:[appearance:textfield]",
276 width >= 360 ? "w-14" : "w-11",
274 "text-center [&_[data-slot=input]::-webkit-inner-spin-button]:appearance-none [&_[data-slot=input]]:[appearance:textfield]",
275 width >= 360 ? "w-14" : "w-13",
277276 )}
278277 />
279278 </form>
apps/web/src/components/BranchToolbarBranchSelector.tsx+2-5
......@@ -704,7 +704,6 @@ export function BranchToolbarBranchSelector({
704704 key={itemValue}
705705 index={index}
706706 value={itemValue}
707 className="pe-2"
708707 onClick={() => selectPickerItem(itemValue)}
709708 >
710709 <div className="flex min-w-0 items-center gap-2 py-1">
......@@ -726,7 +725,6 @@ export function BranchToolbarBranchSelector({
726725 key={itemValue}
727726 index={index}
728727 value={itemValue}
729 className="pe-1.5"
730728 onClick={() => selectPickerItem(itemValue)}
731729 >
732730 <span className="truncate">Create new ref &quot;{newRefName}&quot;</span>
......@@ -754,7 +752,6 @@ export function BranchToolbarBranchSelector({
754752 key={itemValue}
755753 index={index}
756754 value={itemValue}
757 className="pe-1.5"
758755 onClick={() => selectPickerItem(itemValue)}
759756 onContextMenu={(event) => handleBranchContextMenu(event, itemValue)}
760757 >
......@@ -809,10 +806,10 @@ export function BranchToolbarBranchSelector({
809806 onContextMenu={(event) => handleBranchContextMenu(event, resolvedActiveBranch)}
810807 >
811808 <ComboboxTrigger
812 render={<Button variant="ghost" size="xs" />}
809 render={<ComposerControl size="xs" />}
813810 // No press-scale: the popup aligns live to this trigger, so a
814811 // momentary 0.97 shrink would drag the open popup ~3px sideways.
815 className="min-w-0 max-w-full font-normal text-muted-foreground/70 text-xs! hover:text-foreground/80 active:scale-100"
812 className="min-w-0 max-w-full active:scale-100"
816813 disabled={isInitialBranchesLoadPending || isBranchActionPending}
817814 >
818815 <GitBranchIcon className="size-3 shrink-0 opacity-70" />
apps/web/src/components/BranchToolbarEnvModeSelector.tsx+1-1
......@@ -110,7 +110,7 @@ export const BranchToolbarEnvModeSelector = memo(function BranchToolbarEnvModeSe
110110 <SelectTrigger
111111 variant="ghost"
112112 size="xs"
113 className="min-w-0 shrink font-normal text-xs!"
113 className="min-w-0 shrink"
114114 aria-label="Workspace"
115115 data-composer-shortcut="composer.workspace"
116116 data-composer-context-control
apps/web/src/components/BranchToolbarEnvironmentSelector.tsx+1-1
......@@ -102,7 +102,7 @@ export const BranchToolbarEnvironmentSelector = memo(function BranchToolbarEnvir
102102 <SelectTrigger
103103 variant="ghost"
104104 size="xs"
105 className="min-w-0 max-w-full font-normal text-xs!"
105 className="min-w-0 max-w-full"
106106 aria-label="Run on"
107107 data-composer-shortcut="composer.host"
108108 data-composer-context-control
apps/web/src/components/CommandPalette.tsx+1-1
......@@ -650,7 +650,7 @@ function CommandPaletteDialog(props: {
650650 ? "Search project contents"
651651 : "Command palette"
652652 }
653 className={cn("overflow-hidden p-0", props.mode === "content" && "h-105")}
653 className={cn("overflow-hidden", props.mode === "content" && "h-105")}
654654 data-command-palette="true"
655655 data-palette-mode={props.mode}
656656 data-testid="command-palette"
apps/web/src/components/CommandPaletteContent.tsx+1-1
......@@ -50,7 +50,7 @@ export function CommandPaletteContent({
5050 {inputAccessory}
5151 </div>
5252 <CommandPanel className={panelClassName}>{children}</CommandPanel>
53 <CommandFooter className="gap-3 max-sm:flex-col max-sm:items-start">
53 <CommandFooter className="max-sm:flex-col max-sm:items-start">
5454 <div className="flex items-center gap-3">
5555 <KbdGroup>
5656 <Kbd>
apps/web/src/components/CommandPaletteResults.tsx+1-2
......@@ -41,7 +41,7 @@ export function CommandPaletteResults(props: CommandPaletteResultsProps) {
4141 <CommandList>
4242 {props.groups.map((group) => (
4343 <CommandGroup items={group.items} key={group.value}>
44 <CommandGroupLabel className="ps-[9px]">{group.label}</CommandGroupLabel>
44 <CommandGroupLabel>{group.label}</CommandGroupLabel>
4545 <CommandCollection>
4646 {(item) =>
4747 item.disabled ? (
......@@ -109,7 +109,6 @@ function CommandPaletteResultRow(props: {
109109 <CommandItem
110110 value={props.item.value}
111111 active={props.isActive}
112 className="gap-2"
113112 onMouseDown={(event) => {
114113 event.preventDefault();
115114 }}
apps/web/src/components/CustomSnoozeDialog.tsx-1
......@@ -169,7 +169,6 @@ function CustomSnoozeDialog() {
169169 ) : (
170170 <div className="grid grid-cols-1 gap-3 sm:grid-cols-2">
171171 <NumberField
172 className="gap-1.5"
173172 id={`${id}-amount`}
174173 min={0}
175174 step="any"
apps/web/src/components/DiffPanel.tsx+2-1
......@@ -749,7 +749,8 @@ export default function DiffPanel({
749749 }}
750750 >
751751 <ComboboxTrigger
752 className="inline-flex min-w-0 max-w-48 items-center gap-1 overflow-hidden rounded-md px-1.5 py-1 outline-none transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring"
752 render={<Button variant="ghost-muted" size="xs" />}
753 className="min-w-0 max-w-48"
753754 aria-label={`Change comparison target. Currently ${selectedGitSource.baseRef}`}
754755 >
755756 <span className="min-w-0 truncate">{selectedGitSource.baseRef}</span>
apps/web/src/components/LegacySidebar.tsx+4-5
......@@ -2784,7 +2784,7 @@ function ProjectSortMenu({
27842784 <div className="px-2 py-1">
27852785 <NumberField
27862786 aria-label="Visible thread count"
2787 className="w-28 gap-0"
2787 className="w-28"
27882788 max={MAX_SIDEBAR_THREAD_PREVIEW_COUNT}
27892789 min={MIN_SIDEBAR_THREAD_PREVIEW_COUNT}
27902790 onValueChange={handleThreadPreviewCountChange}
......@@ -2792,14 +2792,13 @@ function ProjectSortMenu({
27922792 step={1}
27932793 value={threadPreviewCount}
27942794 >
2795 <NumberFieldGroup className="h-7 rounded-md sm:h-6.5">
2795 <NumberFieldGroup>
27962796 <NumberFieldDecrement
27972797 aria-label="Decrease visible thread count"
2798 className="px-2 sm:px-2 [&_svg]:size-3.5"
2798 className="[&_svg]:size-3.5"
27992799 />
28002800 <NumberFieldInput
28012801 aria-label="Visible thread count"
2802 className="h-7 w-9 grow-0 px-0 text-xs leading-7 sm:h-6.5 sm:leading-6.5"
28032802 inputMode="numeric"
28042803 onKeyDownCapture={(event) => {
28052804 event.stopPropagation();
......@@ -2807,7 +2806,7 @@ function ProjectSortMenu({
28072806 />
28082807 <NumberFieldIncrement
28092808 aria-label="Increase visible thread count"
2810 className="px-2 sm:px-2 [&_svg]:size-3.5"
2809 className="[&_svg]:size-3.5"
28112810 />
28122811 </NumberFieldGroup>
28132812 </NumberField>
apps/web/src/components/Sidebar.tsx-1
......@@ -4483,7 +4483,6 @@ export default function Sidebar() {
44834483 key={item.value}
44844484 hideIndicator
44854485 value={item}
4486 className="font-medium"
44874486 onContextMenu={(event) => {
44884487 if (project) handleProjectSettings(event, project);
44894488 }}
apps/web/src/components/chat/ComposerCommandMenu.tsx-1
......@@ -162,7 +162,6 @@ const ComposerCommandMenuItem = memo(function ComposerCommandMenuItem(props: {
162162 value={props.item.id}
163163 data-composer-item-id={props.item.id}
164164 active={props.isActive}
165 className="gap-3 rounded-lg px-3 py-2!"
166165 onMouseMove={() => {
167166 if (!props.isActive) props.onHighlight(props.item.id);
168167 }}
apps/web/src/components/preview/PreviewChromeRow.tsx+20-25
......@@ -181,11 +181,6 @@ export function PreviewChromeRow({
181181 <InputGroupInput
182182 ref={inputRef}
183183 value={inputFocused ? draft : url}
184 className={cn(
185 onOpenInBrowser &&
186 !inputFocused &&
187 "group-hover/address:pe-7 transition-[padding]",
188 )}
189184 onChange={(event) => setDraft(event.target.value)}
190185 onFocus={() => {
191186 setDraft(url);
......@@ -213,26 +208,26 @@ export function PreviewChromeRow({
213208 />
214209 </Tooltip>
215210 {onOpenInBrowser && !inputFocused ? (
216 <InputGroupAddon
217 align="inline-end"
218 className="pointer-events-none absolute inset-y-0 right-0 opacity-0 transition-opacity group-hover/address:pointer-events-auto group-hover/address:opacity-100"
219 >
220 <Tooltip>
221 <TooltipTrigger
222 render={
223 <Button
224 variant="ghost"
225 size="icon-xs"
226 onClick={onOpenInBrowser}
227 aria-label="Open in system browser"
228 type="button"
229 />
230 }
231 >
232 <ExternalLink />
233 </TooltipTrigger>
234 <TooltipPopup>Open in system browser</TooltipPopup>
235 </Tooltip>
211 <InputGroupAddon align="inline-end">
212 {/* Revealed on hover so a resting address bar reads as plain text. */}
213 <span className="pointer-events-none flex opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100 group-hover/address:pointer-events-auto group-hover/address:opacity-100">
214 <Tooltip>
215 <TooltipTrigger
216 render={
217 <Button
218 variant="ghost"
219 size="icon-xs"
220 onClick={onOpenInBrowser}
221 aria-label="Open in system browser"
222 type="button"
223 />
224 }
225 >
226 <ExternalLink />
227 </TooltipTrigger>
228 <TooltipPopup>Open in system browser</TooltipPopup>
229 </Tooltip>
230 </span>
236231 </InputGroupAddon>
237232 ) : null}
238233 </InputGroup>
apps/web/src/components/search/ProjectContentSearchDialog.tsx+4-2
......@@ -89,11 +89,13 @@ function EmptyContentSearchDialog() {
8989 footerActionLabel="Open file"
9090 inputProps={{ disabled: true, placeholder: "Search project contents…" }}
9191 mode="none"
92 panelClassName="flex min-h-0 flex-1 items-center justify-center px-6 text-center text-sm text-muted-foreground"
92 panelClassName="flex min-h-0 flex-1 items-center justify-center"
9393 testId="project-content-search"
9494 value=""
9595 >
96 Open a project to search its files.
96 <p className="px-6 text-center text-muted-foreground text-sm">
97 Open a project to search its files.
98 </p>
9799 </CommandPaletteContent>
98100 );
99101}
apps/web/src/components/settings/AddProviderInstanceDialog.tsx-2
......@@ -306,7 +306,6 @@ export function AddProviderInstanceDialog({
306306 <label className={cn("grid gap-2", wizardStep !== 1 && "hidden")}>
307307 <span className="text-xs font-medium text-foreground">Label</span>
308308 <Input
309 className="bg-background"
310309 placeholder="e.g. Work"
311310 value={label}
312311 onChange={(event) => setLabel(event.target.value)}
......@@ -319,7 +318,6 @@ export function AddProviderInstanceDialog({
319318 <label className={cn("grid gap-2", wizardStep !== 1 && "hidden")}>
320319 <span className="text-xs font-medium text-foreground">Instance ID</span>
321320 <Input
322 className="bg-background"
323321 placeholder={`${driver}_work`}
324322 value={instanceId}
325323 onChange={(event) => {
apps/web/src/components/settings/ConnectionsSettings.tsx+2-3
......@@ -833,7 +833,6 @@ const PairingLinkListRow = memo(function PairingLinkListRow({
833833 readOnly
834834 value={revealValue}
835835 rows={isRevealValueUrl ? 4 : 3}
836 className="text-xs leading-relaxed"
837836 onFocus={(event) => event.currentTarget.select()}
838837 onClick={(event) => event.currentTarget.select()}
839838 />
......@@ -2734,7 +2733,7 @@ export function ConnectionsSettings() {
27342733 <AutocompleteItem
27352734 key={`${target.alias}:${target.hostname}:${target.port ?? ""}`}
27362735 value={target}
2737 className="h-8 min-h-8 gap-2 whitespace-nowrap"
2736 className="h-8 min-h-8 whitespace-nowrap"
27382737 >
27392738 <span className="min-w-0 truncate text-sm font-medium">
27402739 {target.alias}
......@@ -2754,7 +2753,7 @@ export function ConnectionsSettings() {
27542753 })}
27552754 </AutocompleteList>
27562755 ) : (
2757 <AutocompleteEmpty className="break-all px-3 py-2 text-xs">
2756 <AutocompleteEmpty className="break-all">
27582757 No hosts match "{savedBackendSshHost.trim()}".
27592758 </AutocompleteEmpty>
27602759 )}
apps/web/src/components/settings/KeybindingsSettings.tsx+17-18
......@@ -42,6 +42,7 @@ import { useSettingsScope } from "./SettingsScopeContext";
4242import { Badge } from "../ui/badge";
4343import { Button } from "../ui/button";
4444import { Input } from "../ui/input";
45import { InputGroup, InputGroupAddon, InputGroupInput } from "../ui/input-group";
4546import { Kbd, KbdGroup } from "../ui/kbd";
4647import { Menu, MenuItem, MenuPopup, MenuTrigger } from "../ui/menu";
4748import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
......@@ -143,9 +144,11 @@ function ExpandableHeaderSearch({
143144 }
144145
145146 return (
146 <div className="relative">
147 <SearchIcon className="pointer-events-none absolute top-1/2 left-2 size-3 -translate-y-1/2 text-muted-foreground" />
148 <Input
147 <InputGroup className="w-44">
148 <InputGroupAddon>
149 <SearchIcon aria-hidden className="size-3" />
150 </InputGroupAddon>
151 <InputGroupInput
149152 ref={inputRef}
150153 autoFocus
151154 type="search"
......@@ -163,10 +166,9 @@ function ExpandableHeaderSearch({
163166 }}
164167 placeholder="Search keybindings"
165168 aria-label="Search keybindings"
166 className="w-44 [&_[data-slot=input]]:pl-7"
167169 size="sm"
168170 />
169 </div>
171 </InputGroup>
170172 );
171173}
172174
......@@ -319,7 +321,7 @@ function WhenVariableSelect({
319321 return (
320322 <Select value={value} onValueChange={(nextValue) => nextValue && onChange(nextValue)}>
321323 <SelectTrigger size="compact" className="min-w-0 flex-1">
322 <SelectValue placeholder="Condition" className="leading-7" />
324 <SelectValue placeholder="Condition" />
323325 {unknownIdentifiers && unknownIdentifiers.length > 0 ? (
324326 <UnknownWhenVariableWarning identifiers={unknownIdentifiers} focusable={false} />
325327 ) : null}
......@@ -649,25 +651,22 @@ function WhenExpressionBuilder({
649651 </div>
650652
651653 <div className="space-y-1.5">
652 <div className="relative">
653 <Input
654 <InputGroup>
655 <InputGroupInput
654656 value={expressionDraft}
655657 onChange={(event) => updateExpressionDraft(event.currentTarget.value)}
656658 placeholder="Always"
657659 aria-invalid={Boolean(parseError)}
658660 aria-label="When expression"
659 className={cn(
660 "h-7 rounded-md font-mono text-[12px] leading-7 sm:h-7 sm:leading-7",
661 unknownIdentifiers.length > 0 && "pr-9",
662 parseError && "border-destructive/70 focus-visible:border-destructive",
663 )}
661 size="compact"
662 font="mono"
664663 />
665664 {unknownIdentifiers.length > 0 ? (
666 <span className="absolute inset-y-0 right-2 flex items-center">
665 <InputGroupAddon align="inline-end">
667666 <UnknownWhenVariableWarning identifiers={unknownIdentifiers} />
668 </span>
667 </InputGroupAddon>
669668 ) : null}
670 </div>
669 </InputGroup>
671670 {parseError ? (
672671 <div className="flex items-center gap-1.5 text-[11px] text-destructive">
673672 <CircleXIcon className="size-3.5" />
......@@ -858,7 +857,7 @@ function KeybindingKeyControl({
858857 placeholder={isRecording ? "Press shortcut" : "Unassigned"}
859858 size="sm"
860859 font="mono"
861 className={cn("w-44", isRecording && "border-primary/70 bg-primary/5")}
860 className="w-44"
862861 onFocus={() => setDraft({ isRecording: true })}
863862 onBlur={() => setDraft({ isRecording: false })}
864863 onChange={(event) => setDraft({ keyDraft: event.currentTarget.value })}
......@@ -1168,7 +1167,7 @@ function NewKeybindingKeyInput({
11681167 placeholder={draft.isRecording ? "Press shortcut" : "Unassigned"}
11691168 size="sm"
11701169 font="mono"
1171 className={cn(draft.isRecording && "border-primary/70 bg-primary/5", className)}
1170 className={className}
11721171 onFocus={() => draft.setDraft({ isRecording: true })}
11731172 onBlur={() => draft.setDraft({ isRecording: false })}
11741173 onChange={(event) => draft.setDraft({ keyDraft: event.currentTarget.value })}
apps/web/src/components/settings/ProjectFaviconPickerDialog.tsx+1-1
......@@ -71,7 +71,7 @@ export function ProjectFaviconPickerDialog(props: {
7171 {props.open ? (
7272 <CommandDialogPopup
7373 aria-label="Choose project icon"
74 className="overflow-hidden p-0"
74 className="overflow-hidden"
7575 onBackdropPointerDown={() => props.onOpenChange(false)}
7676 >
7777 <CommandPaletteContent
apps/web/src/components/settings/ProviderAccentColorPicker.tsx+1-2
......@@ -46,7 +46,7 @@ function ProviderCustomColorPanel(props: {
4646 />
4747 <Input
4848 nativeInput
49 size="sm"
49 size="compact"
5050 value={hexDraft ?? currentColor}
5151 onChange={(event) => {
5252 const nextColor = event.currentTarget.value;
......@@ -57,7 +57,6 @@ function ProviderCustomColorPanel(props: {
5757 }}
5858 onBlur={() => setHexDraft(null)}
5959 font="mono"
60 className="text-xs"
6160 aria-label="Custom hex accent color"
6261 spellCheck={false}
6362 />
apps/web/src/components/settings/ProviderSettingsForm.tsx-1
......@@ -388,7 +388,6 @@ function ProviderSettingsFieldRow({
388388 ) : (
389389 <Input
390390 id={inputId}
391 className="bg-background"
392391 type={type}
393392 autoComplete={field.control === "password" ? "off" : undefined}
394393 value={readProviderConfigString(value, field.key)}
apps/web/src/components/settings/StorageSettings.tsx+1-1
......@@ -62,7 +62,7 @@ function RetentionControl({
6262 <NumberFieldInput
6363 aria-label={`${label} in days`}
6464 size={new Intl.NumberFormat().format(draft ?? value).length}
65 className="field-sizing-content w-auto min-w-[1ch] grow-0 text-right in-data-[size=sm]:px-1"
65 className="field-sizing-content w-auto min-w-[1ch] grow-0 text-right"
6666 />
6767 <span aria-hidden="true" className="self-center pr-2 text-xs">
6868 days
apps/web/src/components/settings/ThemeColorPicker.tsx+2-3
......@@ -353,15 +353,14 @@ export const ThemeColorField = memo(function ThemeColorField({
353353 <Input
354354 aria-invalid={!isColorValue}
355355 aria-label={`${label} hex value`}
356 className="w-28 shrink-0 rounded-md border-0 bg-black/10 text-xs text-foreground shadow-none focus-within:bg-black/15 focus-within:ring-0 dark:bg-black/20 dark:focus-within:bg-black/25 [&_[data-slot=input]]:text-right"
356 className="w-28 shrink-0 [&_[data-slot=input]]:text-right"
357357 font="mono"
358358 id={`${role}-hex`}
359359 nativeInput
360360 onChange={(event) => onChange(role, event.currentTarget.value)}
361361 onFocus={() => onSelect?.(role)}
362362 onPointerDown={() => onSelect?.(role)}
363 size="sm"
364 unstyled
363 size="compact"
365364 value={editorValue}
366365 />
367366 </div>
apps/web/src/components/ui/autocomplete.tsx+1-1
......@@ -125,7 +125,7 @@ function AutocompleteItem({ className, children, ...props }: AutocompletePrimiti
125125 return (
126126 <AutocompletePrimitive.Item
127127 className={cn(
128 "flex min-h-8 cursor-default select-none items-center rounded-sm px-2 py-1 text-base outline-none hover:bg-accent data-disabled:pointer-events-none data-selected:bg-accent/50 data-selected:text-foreground data-highlighted:bg-accent data-highlighted:text-accent-foreground [&[data-highlighted][data-selected]]:bg-accent [&[data-highlighted][data-selected]]:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='text-'])]:text-muted-foreground",
128 "flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base outline-none hover:bg-accent data-disabled:pointer-events-none data-selected:bg-accent/50 data-selected:text-foreground data-highlighted:bg-accent data-highlighted:text-accent-foreground [&[data-highlighted][data-selected]]:bg-accent [&[data-highlighted][data-selected]]:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='text-'])]:text-muted-foreground",
129129 className,
130130 )}
131131 data-slot="autocomplete-item"
scripts/lint-restyle-ceiling.ts+1-1
......@@ -8,7 +8,7 @@ import * as NodeURL from "node:url";
88// components/ui exports are migrated to variants (see vite.config.ts). This gate keeps the
99// count from growing: CI fails when findings exceed the ceiling. Lower the ceiling when you
1010// migrate a file, and delete this script when the rule becomes an error.
11export const RESTYLE_CEILING = 499;
11export const RESTYLE_CEILING = 402;
1212
1313const RULE = "shadcn(no-restyle)";
1414