code formatting with prettier

This commit is contained in:
coolcoala
2025-07-14 05:23:32 +03:00
parent eb1e4fe0c3
commit 5cdc5075f8
58 changed files with 5163 additions and 1846 deletions

View File

@@ -8,7 +8,10 @@ function ErrorFallback({ error }: FallbackProps) {
const { t } = useTranslation();
return (
<div role="alert" className="m-4 rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-destructive">
<div
role="alert"
className="m-4 rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-destructive"
>
<div className="flex items-center gap-2">
<AlertTriangle className="h-5 w-5" />
<h3 className="font-semibold">{t("Something went wrong")}</h3>

View File

@@ -15,7 +15,7 @@ export const BaseFieldset: React.FC<Props> = (props) => {
<fieldset
className={cn(
"relative rounded-md border border-border p-4", // Базовые стили
className // Дополнительные классы от пользователя
className, // Дополнительные классы от пользователя
)}
>
{/* 2. Используем legend. Он абсолютно спозиционирован относительно fieldset. */}

View File

@@ -18,7 +18,7 @@ export const BaseLoadingOverlay: React.FC<BaseLoadingOverlayProps> = ({
<div
className={cn(
"absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-sm",
className
className,
)}
>
{/* 3. Используем наш BaseLoading и делаем его немного больше */}

View File

@@ -3,10 +3,10 @@ import { BaseErrorBoundary } from "./base-error-boundary";
import { cn } from "@root/lib/utils";
interface Props {
title?: ReactNode; // Заголовок страницы
header?: ReactNode; // Элементы в правой части шапки (кнопки и т.д.)
children?: ReactNode; // Основное содержимое страницы
className?: string; // Дополнительные классы для основной области контента
title?: ReactNode; // Заголовок страницы
header?: ReactNode; // Элементы в правой части шапки (кнопки и т.д.)
children?: ReactNode; // Основное содержимое страницы
className?: string; // Дополнительные классы для основной области контента
}
export const BasePage: React.FC<Props> = (props) => {
@@ -16,7 +16,6 @@ export const BasePage: React.FC<Props> = (props) => {
<BaseErrorBoundary>
{/* 1. Корневой контейнер: flex-колонка на всю высоту */}
<div className="h-full flex flex-col bg-background text-foreground">
{/* 2. Шапка: не растягивается, имеет фиксированную высоту и нижнюю границу */}
<header
data-tauri-drag-region="true"
@@ -25,16 +24,13 @@ export const BasePage: React.FC<Props> = (props) => {
<h2 className="text-xl font-bold" data-tauri-drag-region="true">
{title}
</h2>
<div data-tauri-drag-region="true">
{header}
</div>
<div data-tauri-drag-region="true">{header}</div>
</header>
{/* 3. Основная область: занимает все оставшееся место и прокручивается */}
<main className={cn("flex-1 overflow-y-auto min-h-0", className)}>
{children}
</main>
</div>
</BaseErrorBoundary>
);

View File

@@ -5,7 +5,12 @@ import { cn } from "@root/lib/utils";
// Новые импорты
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { CaseSensitive, WholeWord, Regex } from "lucide-react"; // Иконки из lucide-react
export type SearchState = {
@@ -40,7 +45,7 @@ export const BaseSearchBox = (props: SearchProps) => {
return new RegExp(searchText, flags).test(content);
}
let pattern = searchText.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); // Экранируем спецсимволы
let pattern = searchText.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); // Экранируем спецсимволы
if (matchWholeWord) {
pattern = `\\b${pattern}\\b`;
}
@@ -55,16 +60,27 @@ export const BaseSearchBox = (props: SearchProps) => {
}, [matchCase, matchWholeWord, useRegularExpression]);
useEffect(() => {
props.onSearch(createMatcher(text), { text, matchCase, matchWholeWord, useRegularExpression });
props.onSearch(createMatcher(text), {
text,
matchCase,
matchWholeWord,
useRegularExpression,
});
}, [matchCase, matchWholeWord, useRegularExpression, createMatcher]); // Убрали text из зависимостей
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
const value = e.target.value;
setText(value);
props.onSearch(createMatcher(value), { text: value, matchCase, matchWholeWord, useRegularExpression });
props.onSearch(createMatcher(value), {
text: value,
matchCase,
matchWholeWord,
useRegularExpression,
});
};
const getToggleVariant = (isActive: boolean) => (isActive ? "secondary" : "ghost");
const getToggleVariant = (isActive: boolean) =>
isActive ? "secondary" : "ghost";
return (
<div className="w-full">
@@ -81,33 +97,56 @@ export const BaseSearchBox = (props: SearchProps) => {
<TooltipProvider delayDuration={100}>
<Tooltip>
<TooltipTrigger asChild>
<Button variant={getToggleVariant(matchCase)} size="icon" className="h-7 w-7" onClick={() => setMatchCase(!matchCase)}>
<Button
variant={getToggleVariant(matchCase)}
size="icon"
className="h-7 w-7"
onClick={() => setMatchCase(!matchCase)}
>
<CaseSensitive className="h-4 w-4" />
</Button>
</TooltipTrigger>
<TooltipContent><p>{t("Match Case")}</p></TooltipContent>
<TooltipContent>
<p>{t("Match Case")}</p>
</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button variant={getToggleVariant(matchWholeWord)} size="icon" className="h-7 w-7" onClick={() => setMatchWholeWord(!matchWholeWord)}>
<Button
variant={getToggleVariant(matchWholeWord)}
size="icon"
className="h-7 w-7"
onClick={() => setMatchWholeWord(!matchWholeWord)}
>
<WholeWord className="h-4 w-4" />
</Button>
</TooltipTrigger>
<TooltipContent><p>{t("Match Whole Word")}</p></TooltipContent>
<TooltipContent>
<p>{t("Match Whole Word")}</p>
</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button variant={getToggleVariant(useRegularExpression)} size="icon" className="h-7 w-7" onClick={() => setUseRegularExpression(!useRegularExpression)}>
<Button
variant={getToggleVariant(useRegularExpression)}
size="icon"
className="h-7 w-7"
onClick={() => setUseRegularExpression(!useRegularExpression)}
>
<Regex className="h-4 w-4" />
</Button>
</TooltipTrigger>
<TooltipContent><p>{t("Use Regular Expression")}</p></TooltipContent>
<TooltipContent>
<p>{t("Use Regular Expression")}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
</div>
{/* Отображение ошибки под полем ввода */}
{errorMessage && <p className="mt-1 text-xs text-destructive">{errorMessage}</p>}
{errorMessage && (
<p className="mt-1 text-xs text-destructive">{errorMessage}</p>
)}
</div>
);
};

View File

@@ -26,7 +26,7 @@ export const BaseStyledSelect: React.FC<BaseStyledSelectProps> = (props) => {
<SelectTrigger
className={cn(
"h-9 w-[180px]", // Задаем стандартные размеры, как у других селектов
className
className,
)}
>
<SelectValue placeholder={placeholder} />

View File

@@ -19,7 +19,7 @@ export const BaseStyledTextField = React.forwardRef<
ref={ref}
className={cn(
"h-9", // Задаем стандартную компактную высоту
className
className,
)}
placeholder={props.placeholder ?? t("Filter conditions")}
autoComplete="off"

View File

@@ -5,18 +5,11 @@ import { cn } from "@root/lib/utils";
// Тип пропсов остается без изменений
export type SwitchProps = React.ComponentPropsWithoutRef<typeof ShadcnSwitch>;
const Switch = React.forwardRef<
HTMLButtonElement,
SwitchProps
>(({ className, ...props }, ref) => {
return (
<ShadcnSwitch
className={cn(className)}
ref={ref}
{...props}
/>
);
});
const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
({ className, ...props }, ref) => {
return <ShadcnSwitch className={cn(className)} ref={ref} {...props} />;
},
);
Switch.displayName = "Switch";