diff --git a/apps/web/src/components/app-accordion.tsx b/apps/web/src/components/app-accordion.tsx new file mode 100644 index 0000000..fcd3b47 --- /dev/null +++ b/apps/web/src/components/app-accordion.tsx @@ -0,0 +1,38 @@ +import type { ComponentProps } from 'react' +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from '@cfdm/ui/components/accordion' +import { cn } from '@cfdm/ui/lib/utils' + +export type AppAccordionProps = ComponentProps +export type AppAccordionItemProps = ComponentProps +export type AppAccordionTriggerProps = ComponentProps +export type AppAccordionContentProps = ComponentProps + +export function AppAccordion({ className, ...props }: AppAccordionProps) { + return +} + +export function AppAccordionItem({ + className, + ...props +}: AppAccordionItemProps) { + return +} + +export function AppAccordionTrigger({ + className, + ...props +}: AppAccordionTriggerProps) { + return +} + +export function AppAccordionContent({ + className, + ...props +}: AppAccordionContentProps) { + return +} diff --git a/apps/web/src/components/app-alert.tsx b/apps/web/src/components/app-alert.tsx new file mode 100644 index 0000000..3980798 --- /dev/null +++ b/apps/web/src/components/app-alert.tsx @@ -0,0 +1,27 @@ +import type { ComponentProps } from 'react' +import { Alert, AlertAction, AlertDescription, AlertTitle } from '@cfdm/ui/components/alert' +import { cn } from '@cfdm/ui/lib/utils' + +export type AppAlertProps = ComponentProps +export type AppAlertTitleProps = ComponentProps +export type AppAlertDescriptionProps = ComponentProps +export type AppAlertActionProps = ComponentProps + +export function AppAlert({ className, ...props }: AppAlertProps) { + return +} + +export function AppAlertTitle({ className, ...props }: AppAlertTitleProps) { + return +} + +export function AppAlertDescription({ + className, + ...props +}: AppAlertDescriptionProps) { + return +} + +export function AppAlertAction({ className, ...props }: AppAlertActionProps) { + return +} diff --git a/apps/web/src/components/app-avatar.tsx b/apps/web/src/components/app-avatar.tsx new file mode 100644 index 0000000..b1cab25 --- /dev/null +++ b/apps/web/src/components/app-avatar.tsx @@ -0,0 +1,47 @@ +import type { ComponentProps } from 'react' +import { + Avatar, + AvatarBadge, + AvatarFallback, + AvatarGroup, + AvatarGroupCount, + AvatarImage, +} from '@cfdm/ui/components/avatar' +import { cn } from '@cfdm/ui/lib/utils' + +export type AppAvatarProps = ComponentProps +export type AppAvatarImageProps = ComponentProps +export type AppAvatarFallbackProps = ComponentProps +export type AppAvatarBadgeProps = ComponentProps +export type AppAvatarGroupProps = ComponentProps +export type AppAvatarGroupCountProps = ComponentProps + +export function AppAvatar({ className, ...props }: AppAvatarProps) { + return +} + +export function AppAvatarImage({ className, ...props }: AppAvatarImageProps) { + return +} + +export function AppAvatarFallback({ + className, + ...props +}: AppAvatarFallbackProps) { + return +} + +export function AppAvatarBadge({ className, ...props }: AppAvatarBadgeProps) { + return +} + +export function AppAvatarGroup({ className, ...props }: AppAvatarGroupProps) { + return +} + +export function AppAvatarGroupCount({ + className, + ...props +}: AppAvatarGroupCountProps) { + return +} diff --git a/apps/web/src/components/app-badge.tsx b/apps/web/src/components/app-badge.tsx new file mode 100644 index 0000000..87afd45 --- /dev/null +++ b/apps/web/src/components/app-badge.tsx @@ -0,0 +1,9 @@ +import type { ComponentProps } from 'react' +import { Badge } from '@cfdm/ui/components/badge' +import { cn } from '@cfdm/ui/lib/utils' + +export type AppBadgeProps = ComponentProps + +export function AppBadge({ className, ...props }: AppBadgeProps) { + return +} diff --git a/apps/web/src/components/app-button.tsx b/apps/web/src/components/app-button.tsx new file mode 100644 index 0000000..572741a --- /dev/null +++ b/apps/web/src/components/app-button.tsx @@ -0,0 +1,9 @@ +import type { ComponentProps } from 'react' +import { Button } from '@cfdm/ui/components/button' +import { cn } from '@cfdm/ui/lib/utils' + +export type AppButtonProps = ComponentProps + +export function AppButton({ className, ...props }: AppButtonProps) { + return + } title="Удалить DNS-запись?" description={`Запись ${record.name} (${record.record_type}) будет удалена из зоны.`} @@ -95,14 +95,14 @@ function MultiValueGroupRows({ )} > - {group.recordType} + {group.recordType}
{group.name} - + {group.records.length} адресов - +
diff --git a/apps/web/src/components/domain-actions-bar.tsx b/apps/web/src/components/domain-actions-bar.tsx index 8c29f1d..8911901 100644 --- a/apps/web/src/components/domain-actions-bar.tsx +++ b/apps/web/src/components/domain-actions-bar.tsx @@ -1,5 +1,5 @@ import { PlusIcon } from 'lucide-react' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' interface DomainActionsBarProps { onCreateSubdomain: () => void @@ -8,10 +8,10 @@ interface DomainActionsBarProps { export function DomainActionsBar({ onCreateSubdomain }: DomainActionsBarProps) { return (
- +
) } diff --git a/apps/web/src/components/domain-bindings-card.tsx b/apps/web/src/components/domain-bindings-card.tsx index a62e0de..431ce03 100644 --- a/apps/web/src/components/domain-bindings-card.tsx +++ b/apps/web/src/components/domain-bindings-card.tsx @@ -4,24 +4,24 @@ import { EmptyState } from '@/components/empty-state' import { StatusBadge } from '@/components/status-badge' import { groupBindingsByHostname } from '@/lib/domain-ips' import type { ServiceBinding } from '@/lib/schemas' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from '@cfdm/ui/components/card' + AppCard, + AppCardContent, + AppCardDescription, + AppCardFooter, + AppCardHeader, + AppCardTitle, +} from '@/components/app-card' import { - Item, - ItemActions, - ItemContent, - ItemGroup, - ItemSeparator, - ItemTitle, -} from '@cfdm/ui/components/item' + AppItem, + AppItemActions, + AppItemContent, + AppItemGroup, + AppItemSeparator, + AppItemTitle, +} from '@/components/app-item' interface DomainBindingsCardProps { bindings: ServiceBinding[] @@ -36,12 +36,12 @@ export function DomainBindingsCard({ bindings }: DomainBindingsCardProps) { const entries = [...byHostname.entries()] return ( - - - Привязки сервисов - Сервисы, назначенные hostname в этой зоне - - + + + Привязки сервисов + Сервисы, назначенные hostname в этой зоне + + {entries.length === 0 ? ( ) : ( - + {entries.map(([hostname, hostnameBindings], index) => { const services = uniqueServices(hostnameBindings) return (
- - - {hostname} + + + {hostname}
{services.map((name) => ( - {name} + {name} ))} {[ ...new Set( @@ -73,32 +73,32 @@ export function DomainBindingsCard({ bindings }: DomainBindingsCardProps) { ))}
-
- - - -
- {index < entries.length - 1 && } + + + + {index < entries.length - 1 && }
) })} -
+ )} -
+ {entries.length > 0 && ( - - - + + )} -
+ ) } diff --git a/apps/web/src/components/domain-group-edit-sheet.tsx b/apps/web/src/components/domain-group-edit-sheet.tsx index f7de785..7afb4dc 100644 --- a/apps/web/src/components/domain-group-edit-sheet.tsx +++ b/apps/web/src/components/domain-group-edit-sheet.tsx @@ -5,8 +5,8 @@ import { createGroupSchema, type CreateGroupInput, type Group } from '@/lib/sche import { FormSheet } from '@/components/form-sheet' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' -import { FieldGroup } from '@cfdm/ui/components/field' -import { Input } from '@cfdm/ui/components/input' +import { AppFieldGroup } from '@/components/app-field' +import { AppInput } from '@/components/app-input' interface DomainGroupEditSheetProps { mode: 'create' | 'edit' @@ -69,13 +69,13 @@ export function DomainGroupEditSheet({ } > - + - - - + ) } diff --git a/apps/web/src/components/domain-ip-badges.tsx b/apps/web/src/components/domain-ip-badges.tsx index c4ddf36..1048a05 100644 --- a/apps/web/src/components/domain-ip-badges.tsx +++ b/apps/web/src/components/domain-ip-badges.tsx @@ -1,11 +1,11 @@ -import { Badge } from '@cfdm/ui/components/badge' +import { AppBadge } from '@/components/app-badge' import { - Item, - ItemContent, - ItemGroup, - ItemSeparator, - ItemTitle, -} from '@cfdm/ui/components/item' + AppItem, + AppItemContent, + AppItemGroup, + AppItemSeparator, + AppItemTitle, +} from '@/components/app-item' import { Tooltip, TooltipContent, @@ -19,9 +19,9 @@ interface DomainIpBadgesProps { function IpBadge({ ip }: { ip: string }) { return ( - + {ip} - + ) } @@ -43,24 +43,24 @@ export function DomainIpBadges({ ips }: DomainIpBadgesProps) { + } > +{rest.length} - + {ips.map((ip, index) => (
- - - {ip} - - - {index < ips.length - 1 && } + + + {ip} + + + {index < ips.length - 1 && }
))} -
+
diff --git a/apps/web/src/components/domains-data-table.tsx b/apps/web/src/components/domains-data-table.tsx index 4de2fe3..75733dc 100644 --- a/apps/web/src/components/domains-data-table.tsx +++ b/apps/web/src/components/domains-data-table.tsx @@ -20,8 +20,8 @@ import { import { ConfirmDialog } from '@/components/confirm-dialog' import { StatusBadge } from '@/components/status-badge' import type { DomainListItem } from '@/lib/schemas' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' import { DropdownMenu, DropdownMenuContent, @@ -88,17 +88,17 @@ export function DomainsDataTable({ { accessorKey: 'zone_name', header: ({ column }) => ( - + ), cell: ({ row }) => ( - + ), }, { @@ -121,7 +121,7 @@ export function DomainsDataTable({ const domain = row.original if (domain.group_id && domain.group_name) { return ( - + ) } - return Без группы + return Без группы }, }, { accessorKey: 'service_count', header: 'Сервисы', cell: ({ row }) => ( - + ), }, { @@ -179,11 +179,11 @@ export function DomainsDataTable({ cell: ({ row }) => (
- - } - > + + } + > Действия @@ -341,22 +341,22 @@ export function DomainsDataTable({ Стр. {table.getState().pagination.pageIndex + 1} из {table.getPageCount()} - - +
)} diff --git a/apps/web/src/components/groups-board/domain-group-header.tsx b/apps/web/src/components/groups-board/domain-group-header.tsx index dbf0a83..f393924 100644 --- a/apps/web/src/components/groups-board/domain-group-header.tsx +++ b/apps/web/src/components/groups-board/domain-group-header.tsx @@ -1,9 +1,9 @@ import { FolderTreeIcon, MoreHorizontalIcon, PencilIcon, Trash2Icon } from 'lucide-react' import type { BoardColumn } from '@/components/groups-board/types' import type { Group } from '@/lib/schemas' -import { AccordionTrigger } from '@cfdm/ui/components/accordion' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' +import { AppAccordionTrigger } from '@/components/app-accordion' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' import { DropdownMenu, DropdownMenuContent, @@ -31,7 +31,7 @@ export function DomainGroupHeader({ }: DomainGroupHeaderProps) { return (
- +
{column.groupId !== null ? ( @@ -39,19 +39,19 @@ export function DomainGroupHeader({ ) : null} {column.title} - {column.items.length} + {column.items.length} {column.slug ? ( - + {column.slug} - + ) : null} {!isOpen && isDragging && !dragDisabled ? ( - + Отпустите для переноса - + ) : null}
-
+ {column.groupId !== null && column.group ? (
- +
{column.items.length > 0 ? ( - + {column.items.map((domain, index) => (
- {index > 0 ? : null} + {index > 0 ? : null}
))} -
+ ) : ( )}
-
- + + ) } diff --git a/apps/web/src/components/groups-board/domain-row.tsx b/apps/web/src/components/groups-board/domain-row.tsx index 6c8a9e4..04b6851 100644 --- a/apps/web/src/components/groups-board/domain-row.tsx +++ b/apps/web/src/components/groups-board/domain-row.tsx @@ -10,9 +10,9 @@ import { } from 'lucide-react' import { StatusBadge } from '@/components/status-badge' import type { DomainListItem } from '@/lib/schemas' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' -import { Card, CardContent } from '@cfdm/ui/components/card' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' +import { AppCard, AppCardContent } from '@/components/app-card' import { DropdownMenu, DropdownMenuContent, @@ -45,15 +45,15 @@ function DomainServiceList({ if (labels.length === 1) { return ( - + {labels[0]} - + ) } return ( - - + + {labels.map((label) => (
{label}
))} -
-
+ + ) } @@ -97,7 +97,7 @@ export const DomainRow = memo(function DomainRow({ )} > {!dragDisabled && !overlay ? ( - + ) : null}
event.stopPropagation()} - /> - } + render={ + event.stopPropagation()} + /> + } > diff --git a/apps/web/src/components/groups-board/groups-board.tsx b/apps/web/src/components/groups-board/groups-board.tsx index b291d77..b2516e7 100644 --- a/apps/web/src/components/groups-board/groups-board.tsx +++ b/apps/web/src/components/groups-board/groups-board.tsx @@ -4,7 +4,7 @@ import { DomainGroupItem } from '@/components/groups-board/domain-group-item' import { DomainRow } from '@/components/groups-board/domain-row' import type { BoardState } from '@/components/groups-board/types' import type { DomainListItem, Group } from '@/lib/schemas' -import { Accordion } from '@cfdm/ui/components/accordion' +import { AppAccordion } from '@/components/app-accordion' interface GroupsBoardProps { board: BoardState @@ -70,7 +70,7 @@ export function GroupsBoard({ ) : null } > - ))} - + ) } diff --git a/apps/web/src/components/layout/site-header.tsx b/apps/web/src/components/layout/site-header.tsx index da985e8..29f84a3 100644 --- a/apps/web/src/components/layout/site-header.tsx +++ b/apps/web/src/components/layout/site-header.tsx @@ -8,7 +8,7 @@ import { BreadcrumbPage, BreadcrumbSeparator, } from '@cfdm/ui/components/breadcrumb' -import { Separator } from '@cfdm/ui/components/separator' +import { AppSeparator } from '@/components/app-separator' import { SidebarTrigger } from '@cfdm/ui/components/sidebar' export interface RouteBreadcrumbLoaderData { @@ -86,7 +86,7 @@ export function SiteHeader() {
- diff --git a/apps/web/src/components/login-form.tsx b/apps/web/src/components/login-form.tsx index a26f476..c598ac3 100644 --- a/apps/web/src/components/login-form.tsx +++ b/apps/web/src/components/login-form.tsx @@ -9,15 +9,15 @@ import { loginSchema, type LoginInput } from '@/lib/schemas' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from '@cfdm/ui/components/card' -import { FieldGroup } from '@cfdm/ui/components/field' -import { Input } from '@cfdm/ui/components/input' -import { Alert, AlertDescription, AlertTitle } from '@cfdm/ui/components/alert' + 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' type LoginFormProps = React.ComponentProps<'div'> @@ -45,22 +45,22 @@ export function LoginForm({ className, ...props }: LoginFormProps) { return (
- - - Вход в систему - + + + Вход в систему + Введите учётные данные для доступа к панели управления - - - + + +
- + - - {rootError && ( - + - Ошибка входа - {rootError} - + Ошибка входа + {rootError} + )} Войти - +
-
-
+ +
) } diff --git a/apps/web/src/components/nav-user.tsx b/apps/web/src/components/nav-user.tsx index 977691a..72cca56 100644 --- a/apps/web/src/components/nav-user.tsx +++ b/apps/web/src/components/nav-user.tsx @@ -1,5 +1,5 @@ import { useNavigate } from '@tanstack/react-router' -import { Avatar, AvatarFallback } from '@cfdm/ui/components/avatar' +import { AppAvatar, AppAvatarFallback } from '@/components/app-avatar' import { DropdownMenu, DropdownMenuContent, @@ -36,9 +36,9 @@ export function NavUser() { } > - - АД - + + АД +
Администратор admin @@ -54,9 +54,9 @@ export function NavUser() {
- - АД - + + АД +
Администратор admin diff --git a/apps/web/src/components/section-cards.tsx b/apps/web/src/components/section-cards.tsx index 0e3f0a8..0cce32e 100644 --- a/apps/web/src/components/section-cards.tsx +++ b/apps/web/src/components/section-cards.tsx @@ -6,22 +6,22 @@ import { ShieldCheckIcon, } from 'lucide-react' import { StatusBadge } from '@/components/status-badge' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' import { - Card, - CardAction, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from '@cfdm/ui/components/card' + AppCard, + AppCardAction, + AppCardContent, + AppCardDescription, + AppCardFooter, + AppCardHeader, + AppCardTitle, +} from '@/components/app-card' import { - Item, - ItemContent, - ItemGroup, - ItemTitle, -} from '@cfdm/ui/components/item' + AppItem, + AppItemContent, + AppItemGroup, + AppItemTitle, +} from '@/components/app-item' interface SectionCardsProps { domainCount: number @@ -41,106 +41,106 @@ export function SectionCards({ return (
- - - Домены - + + + Домены + {domainCount} - - + + - - - - - - - - - Группы доменов - + + + + + + Группы доменов + {groupCount} - - + + - - - - - - - - - Сервисы - + + + + + + Сервисы + {serviceCount} - - + + - - - - - - - - - Сертификаты - + + + + + + Сертификаты + {certCount} - - + + - - - - - - + + +
{certSummary && certSummary.length > 0 ? ( - - - Статусы сертификатов - Сводка по последней проверке - - - + + + Статусы сертификатов + Сводка по последней проверке + + + {certSummary.map(([status, count]) => ( - - + + - {count} - - + {count} + + ))} - - - + + + ) : null}
) diff --git a/apps/web/src/components/service-binding-card.tsx b/apps/web/src/components/service-binding-card.tsx index a4fe716..b8e5eb6 100644 --- a/apps/web/src/components/service-binding-card.tsx +++ b/apps/web/src/components/service-binding-card.tsx @@ -3,22 +3,22 @@ import { CSS } from '@dnd-kit/utilities' import { useEffect, useState } from 'react' import { Link } from '@tanstack/react-router' import { StatusBadge } from '@/components/status-badge' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' import { - Card, - CardAction, - CardContent, - CardFooter, - CardHeader, - CardTitle, -} from '@cfdm/ui/components/card' + AppCard, + AppCardAction, + AppCardContent, + AppCardFooter, + AppCardHeader, + AppCardTitle, +} from '@/components/app-card' import { - Field, - FieldGroup, - FieldLabel, -} from '@cfdm/ui/components/field' -import { Input } from '@cfdm/ui/components/input' + AppField, + AppFieldGroup, + AppFieldLabel, +} from '@/components/app-field' +import { AppInput } from '@/components/app-input' import { cn } from '@cfdm/ui/lib/utils' import type { ServiceBinding } from '@/lib/schemas' @@ -49,7 +49,7 @@ export function ServiceBindingCard({ : undefined return ( - - - {binding.zone_name} - + + {binding.zone_name} + {binding.group_name ? ( - {binding.group_name} + {binding.group_name} ) : ( - Без группы + Без группы )} - - - - - - Hostname - + + + + + Hostname + - - - IPv4 - + + IPv4 + - - + +
- {binding.service_name} + {binding.service_name} {binding.sync_status && }
-
- - - -
+ + + ) } diff --git a/apps/web/src/components/service-binding-ip-input.tsx b/apps/web/src/components/service-binding-ip-input.tsx index e600ef3..1de2b39 100644 --- a/apps/web/src/components/service-binding-ip-input.tsx +++ b/apps/web/src/components/service-binding-ip-input.tsx @@ -1,5 +1,5 @@ import { TaggedInput, isValidIpv4 } from '@/components/tagged-input' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' interface ServiceBindingIpInputProps { id?: string @@ -34,7 +34,7 @@ export function ServiceBindingIpInput({ {available.length > 0 ? (
{available.map((ip) => ( - + ))}
) : null} diff --git a/apps/web/src/components/service-edit-sheet.tsx b/apps/web/src/components/service-edit-sheet.tsx index 74aeeed..6eb361f 100644 --- a/apps/web/src/components/service-edit-sheet.tsx +++ b/apps/web/src/components/service-edit-sheet.tsx @@ -12,20 +12,20 @@ import type { UpdateServiceConfigInput, } from '@/lib/schemas' import { bindingToFqdn } from '@/lib/parse-fqdn' -import { Button } from '@cfdm/ui/components/button' -import { Input } from '@cfdm/ui/components/input' +import { AppButton } from '@/components/app-button' +import { AppInput } from '@/components/app-input' import { - Field, - FieldGroup, - FieldLabel, -} from '@cfdm/ui/components/field' + AppField, + AppFieldGroup, + AppFieldLabel, +} from '@/components/app-field' import { - Item, - ItemActions, - ItemContent, - ItemGroup, -} from '@cfdm/ui/components/item' -import { Separator } from '@cfdm/ui/components/separator' + AppItem, + AppItemActions, + AppItemContent, + AppItemGroup, +} from '@/components/app-item' +import { AppSeparator } from '@/components/app-separator' import { Sheet, SheetContent, @@ -271,27 +271,27 @@ export function ServiceEditSheet({ - - - Название - + + Название + setName(e.target.value)} /> - - - Slug - + + Slug + setSlug(e.target.value)} /> - - - Группа сервисов + + + Группа сервисов - - - IP-адреса сервиса + + + IP-адреса сервиса - - + + @@ -327,10 +327,10 @@ export function ServiceEditSheet({

FQDN → IP или CNAME для DNS-записей Cloudflare

- +
{bindings.length === 0 ? ( @@ -339,19 +339,19 @@ export function ServiceEditSheet({ title="Нет привязок" description="Необязательно. Пример: newdom.ivx.su — зона ivx.su определится автоматически." action={ - + } /> ) : ( - + {bindings.map((binding, index) => ( - - - - FQDN + + + + FQDN - - - Тип записи + + + Тип записи - + {binding.record_type === 'CNAME' ? ( - - + + CNAME-цель - - + handleCnameChange(index, event.target.value)} /> - + ) : ( - - IP + + IP handleIpsChange(index, targetIps)} /> - + )} - - - - - + + + ))} - + )}
- + {!isCreate ? ( diff --git a/apps/web/src/components/service-group-edit-sheet.tsx b/apps/web/src/components/service-group-edit-sheet.tsx index 38f02fa..5b5f2b1 100644 --- a/apps/web/src/components/service-group-edit-sheet.tsx +++ b/apps/web/src/components/service-group-edit-sheet.tsx @@ -10,8 +10,8 @@ import type { z } from 'zod' import { FormSheet } from '@/components/form-sheet' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' -import { FieldGroup } from '@cfdm/ui/components/field' -import { Input } from '@cfdm/ui/components/input' +import { AppFieldGroup } from '@/components/app-field' +import { AppInput } from '@/components/app-input' import { Select, SelectContent, @@ -101,13 +101,13 @@ export function ServiceGroupEditSheet({ } > - + - - - + ) } diff --git a/apps/web/src/components/services-board/service-group-header.tsx b/apps/web/src/components/services-board/service-group-header.tsx index 7099436..ad4f145 100644 --- a/apps/web/src/components/services-board/service-group-header.tsx +++ b/apps/web/src/components/services-board/service-group-header.tsx @@ -2,10 +2,10 @@ import { MoreHorizontalIcon, PencilIcon, Trash2Icon } from 'lucide-react' import { ServiceGroupIcon } from '@/components/service-group-icon' import type { BoardColumn } from '@/components/services-board/types' import type { ServiceGroupView } from '@/lib/schemas' -import { AccordionTrigger } from '@cfdm/ui/components/accordion' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' -import { Checkbox } from '@cfdm/ui/components/checkbox' +import { AppAccordionTrigger } from '@/components/app-accordion' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' +import { AppCheckbox } from '@/components/app-checkbox' import { DropdownMenu, DropdownMenuContent, @@ -13,8 +13,8 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@cfdm/ui/components/dropdown-menu' -import { Spinner } from '@cfdm/ui/components/spinner' -import { Switch } from '@cfdm/ui/components/switch' +import { AppSpinner } from '@/components/app-spinner' +import { AppSwitch } from '@/components/app-switch' import { cn } from '@cfdm/ui/lib/utils' interface ServiceGroupHeaderProps { @@ -53,7 +53,7 @@ export function ServiceGroupHeader({ return (
{showCheckbox && !dragDisabled && column.items.length > 0 ? ( - { if (groupAllSelected || groupSomeSelected) { @@ -71,7 +71,7 @@ export function ServiceGroupHeader({ /> ) : null} - +
{column.groupId !== null ? ( @@ -79,17 +79,17 @@ export function ServiceGroupHeader({ ) : null} {column.title} - {column.items.length} + {column.items.length} {column.domain ? ( - {column.domain} + {column.domain} ) : null} {!isOpen && isDragging && !dragDisabled ? ( - + Отпустите для переноса - + ) : null}
-
+ {column.groupId !== null ? (
{column.domain && onGroupToggle ? ( isGroupToggling ? ( - + ) : ( - diff --git a/apps/web/src/components/services-board/service-group-item.tsx b/apps/web/src/components/services-board/service-group-item.tsx index 15aaff2..d0392d4 100644 --- a/apps/web/src/components/services-board/service-group-item.tsx +++ b/apps/web/src/components/services-board/service-group-item.tsx @@ -10,10 +10,10 @@ import { ServiceRow } from '@/components/services-board/service-row' import type { BoardColumn } from '@/components/services-board/types' import type { ServiceGroupView, ServiceView } from '@/lib/schemas' import { - AccordionContent, - AccordionItem, -} from '@cfdm/ui/components/accordion' -import { Button } from '@cfdm/ui/components/button' + AppAccordionContent, + AppAccordionItem, +} from '@/components/app-accordion' +import { AppButton } from '@/components/app-button' import { Empty, EmptyContent, @@ -21,7 +21,7 @@ import { EmptyHeader, EmptyTitle, } from '@cfdm/ui/components/empty' -import { ItemGroup, ItemSeparator } from '@cfdm/ui/components/item' +import { AppItemGroup, AppItemSeparator } from '@/components/app-item' import { cn } from '@cfdm/ui/lib/utils' interface ServiceGroupItemProps { @@ -88,7 +88,7 @@ export function ServiceGroupItem({ }, [isOver, isDragging, dragDisabled, column.id, onExpandColumn]) return ( - - +
String(service.id))} strategy={verticalListSortingStrategy} > {column.items.length > 0 ? ( - + {column.items.map((service, index) => (
- {index > 0 ? : null} + {index > 0 ? : null}
))} -
+ ) : ( {onAddService ? ( - + ) : null} @@ -175,7 +175,7 @@ export function ServiceGroupItem({
{column.items.length > 0 && onAddService ? ( - + ) : null}
-
-
+ + ) } diff --git a/apps/web/src/components/services-board/service-row.tsx b/apps/web/src/components/services-board/service-row.tsx index bd0c787..c076f19 100644 --- a/apps/web/src/components/services-board/service-row.tsx +++ b/apps/web/src/components/services-board/service-row.tsx @@ -9,9 +9,9 @@ import { serviceDisplayFqdn, } from '@/lib/service-utils' import type { ServiceView } from '@/lib/schemas' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' -import { Checkbox } from '@cfdm/ui/components/checkbox' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' +import { AppCheckbox } from '@/components/app-checkbox' import { DropdownMenu, DropdownMenuContent, @@ -19,8 +19,8 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@cfdm/ui/components/dropdown-menu' -import { Spinner } from '@cfdm/ui/components/spinner' -import { Switch } from '@cfdm/ui/components/switch' +import { AppSpinner } from '@/components/app-spinner' +import { AppSwitch } from '@/components/app-switch' import { Tooltip, TooltipContent, @@ -112,7 +112,7 @@ export const ServiceRow = memo(function ServiceRow({ )} > {showCheckbox && !dragDisabled && !overlay ? ( - onSelectedChange?.(checked === true)} onPointerDown={(event) => event.stopPropagation()} @@ -121,7 +121,7 @@ export const ServiceRow = memo(function ServiceRow({ ) : null} {!dragDisabled && !overlay ? ( - + ) : null}
@@ -143,9 +143,9 @@ export const ServiceRow = memo(function ServiceRow({ > {service.name} - + {service.slug} - +
@@ -155,9 +155,9 @@ export const ServiceRow = memo(function ServiceRow({
{syncStatus ? : null} {isToggling ? ( - + ) : ( - event.stopPropagation()} @@ -167,15 +167,15 @@ export const ServiceRow = memo(function ServiceRow({ )} event.stopPropagation()} - /> - } + render={ + event.stopPropagation()} + /> + } > diff --git a/apps/web/src/components/services-board/services-board.tsx b/apps/web/src/components/services-board/services-board.tsx index eed3457..e75b700 100644 --- a/apps/web/src/components/services-board/services-board.tsx +++ b/apps/web/src/components/services-board/services-board.tsx @@ -4,7 +4,7 @@ import { ServiceGroupItem } from '@/components/services-board/service-group-item import { ServiceRow } from '@/components/services-board/service-row' import type { BoardState } from '@/components/services-board/types' import type { ServiceGroupView, ServiceView } from '@/lib/schemas' -import { Accordion } from '@cfdm/ui/components/accordion' +import { AppAccordion } from '@/components/app-accordion' interface ServicesBoardProps { board: BoardState @@ -98,7 +98,7 @@ export function ServicesBoard({ ) : null } > - ))} - + ) } diff --git a/apps/web/src/components/services-board/services-bulk-toolbar.tsx b/apps/web/src/components/services-board/services-bulk-toolbar.tsx index 816670f..77950c7 100644 --- a/apps/web/src/components/services-board/services-bulk-toolbar.tsx +++ b/apps/web/src/components/services-board/services-bulk-toolbar.tsx @@ -1,4 +1,4 @@ -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' interface ServicesBulkToolbarProps { count: number @@ -22,7 +22,7 @@ export function ServicesBulkToolbar({ Выбрано: {count} - - - +
) } diff --git a/apps/web/src/components/subdomain-edit-sheet.tsx b/apps/web/src/components/subdomain-edit-sheet.tsx index 05cde3f..a00507a 100644 --- a/apps/web/src/components/subdomain-edit-sheet.tsx +++ b/apps/web/src/components/subdomain-edit-sheet.tsx @@ -5,8 +5,8 @@ import { certMonitoringOptions } from '@/lib/cert-monitoring' import { formatServiceGroupLabel } from '@/lib/service-utils' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' -import { Input } from '@cfdm/ui/components/input' -import { FieldDescription, FieldGroup } from '@cfdm/ui/components/field' +import { AppInput } from '@/components/app-input' +import { AppFieldDescription, AppFieldGroup } from '@/components/app-field' import { Select, SelectContent, @@ -115,9 +115,9 @@ export function SubdomainEditSheet({
- + - - + { certMonitoringOptions.find((o) => o.value === certMonitoring) ?.description } - + )} - + {row.subdomain.fqdn} - + {row.subdomain.enabled ? 'Активен' : 'Неактивен'} - + {formatSubdomainServiceLinks(row.serviceLinks)} {formatDate(row.subdomain.created_at)} @@ -75,7 +75,7 @@ export function SubdomainsTable({ + } > diff --git a/apps/web/src/components/tagged-input.tsx b/apps/web/src/components/tagged-input.tsx index dfe9deb..a0d6468 100644 --- a/apps/web/src/components/tagged-input.tsx +++ b/apps/web/src/components/tagged-input.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { XIcon } from 'lucide-react' -import { Badge } from '@cfdm/ui/components/badge' +import { AppBadge } from '@/components/app-badge' import { InputGroup, InputGroupButton, @@ -78,7 +78,7 @@ export function TaggedInput({ )} > {value.map((tag) => ( - + {tag} - + ))} } > - - - Обзор статусов - Распределение сертификатов по статусам - - + + + Обзор статусов + Распределение сертификатов по статусам + + {chartData.length > 0 ? ( @@ -143,8 +143,8 @@ function CertificatesPage() { description="Запустите проверку сертификатов" /> )} - - + + setSearchQuery('')}> + setSearchQuery('')}> Сбросить фильтр - + ) : ( checkMutation.mutate()} diff --git a/apps/web/src/routes/_auth/domains/$domainId/dns.tsx b/apps/web/src/routes/_auth/domains/$domainId/dns.tsx index 9c659d8..66f4a7e 100644 --- a/apps/web/src/routes/_auth/domains/$domainId/dns.tsx +++ b/apps/web/src/routes/_auth/domains/$domainId/dns.tsx @@ -18,9 +18,9 @@ import { LoadingButton } from '@/components/loading-button' import { TableSkeleton } from '@/components/table-skeleton' import { TableToolbar } from '@/components/table-toolbar' import { DnsRecordsTable } from '@/components/dns-records-table' -import { Button } from '@cfdm/ui/components/button' -import { Input } from '@cfdm/ui/components/input' -import { Field, FieldGroup, FieldLabel } from '@cfdm/ui/components/field' +import { AppButton } from '@/components/app-button' +import { AppInput } from '@/components/app-input' +import { AppField, AppFieldGroup, AppFieldLabel } from '@/components/app-field' import { Select, SelectContent, @@ -28,7 +28,7 @@ import { SelectTrigger, SelectValue, } from '@cfdm/ui/components/select' -import { Switch } from '@cfdm/ui/components/switch' +import { AppSwitch } from '@/components/app-switch' const DNS_TYPES = ['A', 'AAAA', 'CNAME', 'TXT', 'MX'] as const @@ -158,9 +158,9 @@ function DnsPage() { } actions={ <> - + syncMutation.mutate()} isLoading={syncMutation.isPending} @@ -197,11 +197,11 @@ function DnsPage() { isEmpty={!hasRecords} emptyAction={ isFilteredEmpty ? ( - + ) : ( - + setSheetOpen(true)}>Новая запись ) } toolbar={ @@ -244,7 +244,7 @@ function DnsPage() { } > - + - - - - - Прокси Cloudflare + + Прокси Cloudflare ( - )} /> - - + + ) diff --git a/apps/web/src/routes/_auth/domains/$domainId/index.tsx b/apps/web/src/routes/_auth/domains/$domainId/index.tsx index c87e8a6..ce0abad 100644 --- a/apps/web/src/routes/_auth/domains/$domainId/index.tsx +++ b/apps/web/src/routes/_auth/domains/$domainId/index.tsx @@ -24,15 +24,15 @@ import { } from '@/components/subdomain-edit-sheet' import { StatusBadge } from '@/components/status-badge' import { formatDate } from '@/lib/format' -import { Badge } from '@cfdm/ui/components/badge' -import { Button } from '@cfdm/ui/components/button' +import { AppBadge } from '@/components/app-badge' +import { AppButton } from '@/components/app-button' import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from '@cfdm/ui/components/card' + AppCard, + AppCardContent, + AppCardDescription, + AppCardHeader, + AppCardTitle, +} from '@/components/app-card' import { LoadingButton } from '@/components/loading-button' import { TableSkeleton } from '@/components/table-skeleton' @@ -174,7 +174,7 @@ function DomainOverviewPage() { > Синхронизировать - + } /> @@ -209,12 +209,12 @@ function DomainOverviewPage() { />
- - - Сводка - Основные параметры зоны - - + + + Сводка + Основные параметры зоны + +
Статус @@ -222,7 +222,7 @@ function DomainOverviewPage() {
Группа {domain.group_id ? ( - + ) : ( - Без группы + Без группы )}
@@ -247,8 +247,8 @@ function DomainOverviewPage() { {formatDate(domain.last_synced_at)}
- - + +
@@ -261,14 +261,14 @@ function DomainOverviewPage() { emptyIcon={GlobeIcon} emptyAction={
- - +
} toolbar={} diff --git a/apps/web/src/routes/_auth/domains/index.tsx b/apps/web/src/routes/_auth/domains/index.tsx index 99b607c..508a502 100644 --- a/apps/web/src/routes/_auth/domains/index.tsx +++ b/apps/web/src/routes/_auth/domains/index.tsx @@ -22,9 +22,9 @@ import { FormSheet } from '@/components/form-sheet' import { FormFieldSimple } from '@/components/form-field' import { LoadingButton } from '@/components/loading-button' import { TableSkeleton } from '@/components/table-skeleton' -import { Button } from '@cfdm/ui/components/button' -import { Input } from '@cfdm/ui/components/input' -import { FieldGroup } from '@cfdm/ui/components/field' +import { AppButton } from '@/components/app-button' +import { AppInput } from '@/components/app-input' +import { AppFieldGroup } from '@/components/app-field' import { Select, SelectContent, @@ -145,10 +145,10 @@ function DomainsPage() { description={`${tableData.length} зон · ${tableData.reduce((sum, d) => sum + d.service_count, 0)} привязок сервисов`} actions={ <> - - + + setSheetOpen(true)}>Импортировать домен } /> @@ -175,11 +175,11 @@ function DomainsPage() { emptyIcon={GlobeIcon} emptyAction={ isZeroResults ? ( - + ) : ( - + setSheetOpen(true)}>Импортировать домен ) } > @@ -214,13 +214,13 @@ function DomainsPage() { } > - + - - + ) diff --git a/apps/web/src/routes/_auth/groups.tsx b/apps/web/src/routes/_auth/groups.tsx index 6258222..fe0a375 100644 --- a/apps/web/src/routes/_auth/groups.tsx +++ b/apps/web/src/routes/_auth/groups.tsx @@ -22,7 +22,7 @@ import { DomainGroupEditSheet } from '@/components/domain-group-edit-sheet' import { GroupsBoard } from '@/components/groups-board/groups-board' import { GroupsBoardSkeleton } from '@/components/groups-board/groups-board-skeleton' import { useGroupsBoard } from '@/hooks/use-groups-board' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' export const Route = createFileRoute('/_auth/groups')({ loader: ({ context: { queryClient } }) => @@ -128,9 +128,9 @@ function GroupsPage() { title="Группы доменов" description="Перетащите домен в группу или создайте новую группу для организации зон" actions={ - + } /> @@ -147,9 +147,9 @@ function GroupsPage() { title="Группы не найдены" description="Создайте группу и назначьте домены при импорте или перетаскиванием на доске." action={ - + } /> ) : ( diff --git a/apps/web/src/routes/_auth/groups/$groupId.tsx b/apps/web/src/routes/_auth/groups/$groupId.tsx index f915dcc..db57de7 100644 --- a/apps/web/src/routes/_auth/groups/$groupId.tsx +++ b/apps/web/src/routes/_auth/groups/$groupId.tsx @@ -13,7 +13,7 @@ import { StatusBadge } from '@/components/status-badge' import { DataTableCard } from '@/components/data-table-card' import { TableSkeleton } from '@/components/table-skeleton' import { TableToolbar } from '@/components/table-toolbar' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' import { Table, TableBody, @@ -76,13 +76,13 @@ function GroupDetailPage() { : 'Домены в группе' } actions={ - + } /> setSearchQuery('')}> + setSearchQuery('')}> Сбросить фильтр - + ) : ( - + ) } toolbar={ @@ -149,7 +149,7 @@ function GroupDetailPage() { - + - + ))} diff --git a/apps/web/src/routes/_auth/services.tsx b/apps/web/src/routes/_auth/services.tsx index 79bdd5f..a622ac5 100644 --- a/apps/web/src/routes/_auth/services.tsx +++ b/apps/web/src/routes/_auth/services.tsx @@ -32,7 +32,7 @@ import { ServicesBoardSkeleton } from '@/components/services-board/services-boar import { ServicesBulkToolbar } from '@/components/services-board/services-bulk-toolbar' import { useServicesBoard } from '@/hooks/use-services-board' import { useServicesSelection } from '@/hooks/use-services-selection' -import { Button } from '@cfdm/ui/components/button' +import { AppButton } from '@/components/app-button' export const Route = createFileRoute('/_auth/services')({ validateSearch: (search: Record) => ({ @@ -416,10 +416,10 @@ function ServicesPage() { } actions={
- - + + handleOpenCreateService()}>Добавить сервис
} /> @@ -450,10 +450,10 @@ function ServicesPage() { } action={
- - + + handleOpenCreateService()}>Добавить сервис
} />