- Install @biomejs/biome@2.3.5 as unified linter and formatter - Remove ESLint, Prettier and all related plugins (221 packages removed) - Migrate linting rules from ESLint to Biome configuration - Migrate formatting rules from Prettier to Biome configuration - Exclude auto-generated proto files from linting (src/types/proto/**) - Exclude CSS files from Biome (Tailwind syntax not yet supported) - Update package.json scripts: - lint: tsc + biome check - lint:fix: biome check --write - format: biome format --write - Auto-fix import organization across 60+ files - Fix duplicate key in Russian locale (ru.json) - Update CLAUDE.md documentation to reflect Biome usage Benefits: - 10-100x faster linting performance - Simplified toolchain with single configuration file - 221 fewer npm dependencies - Unified linting, formatting, and import organization
40 lines
1 KiB
TypeScript
40 lines
1 KiB
TypeScript
import { useEffect, useRef, useState } from "react";
|
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
|
|
import { cn } from "@/lib/utils";
|
|
|
|
interface Props {
|
|
children: React.ReactNode;
|
|
className?: string;
|
|
}
|
|
|
|
const OverflowTip = ({ children, className }: Props) => {
|
|
const [isOverflowed, setIsOverflow] = useState(false);
|
|
const textElementRef = useRef<HTMLDivElement>(null);
|
|
|
|
useEffect(() => {
|
|
if (!textElementRef.current) {
|
|
return;
|
|
}
|
|
|
|
setIsOverflow(textElementRef.current.scrollWidth > textElementRef.current.clientWidth);
|
|
}, []);
|
|
|
|
return (
|
|
<TooltipProvider>
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<div ref={textElementRef} className={cn("truncate", className)}>
|
|
{children}
|
|
</div>
|
|
</TooltipTrigger>
|
|
{isOverflowed && (
|
|
<TooltipContent>
|
|
<p>{children}</p>
|
|
</TooltipContent>
|
|
)}
|
|
</Tooltip>
|
|
</TooltipProvider>
|
|
);
|
|
};
|
|
|
|
export default OverflowTip;
|