From c3ad676e75f63ab650df5059bfc59993da430301 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Fri, 17 Jul 2026 13:47:31 +0700 Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=20bindings=20=D0=B8=20login=20=D0=BD?= =?UTF-8?q?=D0=B0=20Frame=20/=20auth-13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заменить AppCard на Frame в domain/service bindings и login-form; TableSkeleton — Frame + Skeleton. Co-authored-by: Cursor --- .../src/components/domain-bindings-card.tsx | 80 ++++++++--------- apps/web/src/components/login-form.tsx | 62 +++++++------ .../src/components/service-binding-card.tsx | 88 +++++++++---------- apps/web/src/components/skeletons.tsx | 12 +-- 4 files changed, 123 insertions(+), 119 deletions(-) diff --git a/apps/web/src/components/domain-bindings-card.tsx b/apps/web/src/components/domain-bindings-card.tsx index da835e0..de21207 100644 --- a/apps/web/src/components/domain-bindings-card.tsx +++ b/apps/web/src/components/domain-bindings-card.tsx @@ -5,24 +5,24 @@ import { HealthCheckBadge } from '@/components/health-check-badge' import { groupBindingsByHostname } from '@/lib/domain-ips' import { useHealthRows } from '@/lib/use-aggregated-health' import type { ServiceBinding } from '@/lib/schemas' -import { AppBadge } from '@/components/app-badge' -import { AppButton } from '@/components/app-button' +import { Badge } from '@/components/reui/badge' import { - AppCard, - AppCardContent, - AppCardDescription, - AppCardFooter, - AppCardHeader, - AppCardTitle, -} from '@/components/app-card' + Frame, + FrameDescription, + FrameFooter, + FrameHeader, + FramePanel, + FrameTitle, +} from '@/components/reui/frame' +import { Button } from '@cfdm/ui/components/button' import { - AppItem, - AppItemActions, - AppItemContent, - AppItemGroup, - AppItemSeparator, - AppItemTitle, -} from '@/components/app-item' + Item, + ItemActions, + ItemContent, + ItemGroup, + ItemSeparator, + ItemTitle, +} from '@cfdm/ui/components/item' interface DomainBindingsCardProps { bindings: ServiceBinding[] @@ -76,12 +76,12 @@ export function DomainBindingsCard({ bindings }: DomainBindingsCardProps) { const entries = [...byHostname.entries()] return ( - - - Привязки сервисов - Сервисы, назначенные hostname в этой зоне - - + + + Привязки сервисов + Сервисы, назначенные hostname в этой зоне + + {entries.length === 0 ? ( ) : ( - + {entries.map(([hostname, groupBindings], index) => { const ips = [ ...new Set( @@ -104,9 +104,9 @@ export function DomainBindingsCard({ bindings }: DomainBindingsCardProps) { ] return (
- - - {hostname} + + + {hostname}
{uniqueServices(groupBindings).join(', ')}
@@ -114,30 +114,30 @@ export function DomainBindingsCard({ bindings }: DomainBindingsCardProps) { bindings={groupBindings} ips={ips} /> -
- - + + + {ips.length} IP - - -
- {index < entries.length - 1 ? : null} + + + + {index < entries.length - 1 ? : null}
) })} -
+ )} -
- - + + + + ) } diff --git a/apps/web/src/components/login-form.tsx b/apps/web/src/components/login-form.tsx index c598ac3..da67358 100644 --- a/apps/web/src/components/login-form.tsx +++ b/apps/web/src/components/login-form.tsx @@ -9,15 +9,19 @@ import { loginSchema, type LoginInput } from '@/lib/schemas' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' import { - AppCard, - AppCardContent, - AppCardDescription, - AppCardHeader, - AppCardTitle, -} from '@/components/app-card' -import { AppFieldGroup } from '@/components/app-field' -import { AppInput } from '@/components/app-input' -import { AppAlert, AppAlertDescription, AppAlertTitle } from '@/components/app-alert' + Frame, + FrameDescription, + FrameHeader, + FramePanel, + FrameTitle, +} from '@/components/reui/frame' +import { + Alert, + AlertDescription, + AlertTitle, +} from '@/components/reui/alert' +import { FieldGroup } from '@cfdm/ui/components/field' +import { Input } from '@cfdm/ui/components/input' type LoginFormProps = React.ComponentProps<'div'> @@ -45,25 +49,26 @@ export function LoginForm({ className, ...props }: LoginFormProps) { return (
- - - Вход в систему - + + + Вход в систему + Введите учётные данные для доступа к панели управления - - - + + +
- + - @@ -73,21 +78,22 @@ export function LoginForm({ className, ...props }: LoginFormProps) { htmlFor="password" error={form.formState.errors.password} > - - {rootError && ( - + {rootError ? ( + - Ошибка входа - {rootError} - - )} + Ошибка входа + {rootError} + + ) : null} Войти - +
-
-
+ +
) } diff --git a/apps/web/src/components/service-binding-card.tsx b/apps/web/src/components/service-binding-card.tsx index 01b586f..67fceee 100644 --- a/apps/web/src/components/service-binding-card.tsx +++ b/apps/web/src/components/service-binding-card.tsx @@ -3,22 +3,21 @@ import { CSS } from '@dnd-kit/utilities' import { useEffect, useState } from 'react' import { Link } from '@tanstack/react-router' import { StatusBadge } from '@/components/status-badge' -import { AppBadge } from '@/components/app-badge' -import { AppButton } from '@/components/app-button' +import { Badge } from '@/components/reui/badge' import { - AppCard, - AppCardAction, - AppCardContent, - AppCardFooter, - AppCardHeader, - AppCardTitle, -} from '@/components/app-card' + Frame, + FrameFooter, + FrameHeader, + FramePanel, + FrameTitle, +} from '@/components/reui/frame' +import { Button } from '@cfdm/ui/components/button' import { - AppField, - AppFieldGroup, - AppFieldLabel, -} from '@/components/app-field' -import { AppInput } from '@/components/app-input' + Field, + FieldGroup, + FieldLabel, +} from '@cfdm/ui/components/field' +import { Input } from '@cfdm/ui/components/input' import { cn } from '@cfdm/ui/lib/utils' import type { ServiceBinding } from '@/lib/schemas' @@ -49,32 +48,31 @@ export function ServiceBindingCard({ : undefined return ( - - - {binding.zone_name} - - {binding.group_name ? ( - {binding.group_name} - ) : ( - Без группы - )} - - - - - - Hostname - + {binding.zone_name} + {binding.group_name ? ( + {binding.group_name} + ) : ( + Без группы + )} + + + + + Hostname + - - - IPv4 - + + IPv4 + - - + +
- {binding.service_name} + {binding.service_name} {binding.sync_status && }
-
- - + + + + ) } diff --git a/apps/web/src/components/skeletons.tsx b/apps/web/src/components/skeletons.tsx index e18dbd8..42f79ba 100644 --- a/apps/web/src/components/skeletons.tsx +++ b/apps/web/src/components/skeletons.tsx @@ -1,10 +1,10 @@ import { Skeleton } from '@cfdm/ui/components/skeleton' -import { Card, CardContent } from '@cfdm/ui/components/card' +import { Frame, FramePanel } from '@/components/reui/frame' export function TableSkeleton({ rows = 6, cols = 4 }: { rows?: number; cols?: number }) { return ( - - + +
{Array.from({ length: cols }).map((_, i) => ( @@ -12,14 +12,14 @@ export function TableSkeleton({ rows = 6, cols = 4 }: { rows?: number; cols?: nu ))}
{Array.from({ length: rows }).map((_, r) => ( -
+
{Array.from({ length: cols }).map((_, c) => ( ))}
))}
- - + + ) }