quality / commitlint (push) Skipped
quality / changes (push) Successful in 9s
quality / docker-check (push) Skipped
quality / openapi (push) Successful in 39s
quality / web (push) Successful in 1m29s
quality / go (push) Successful in 1m3s
quality / bird2 (push) Successful in 15s
CD / quality (push) Successful in 3m43s
CD / publish (push) Failing after 8m29s
Единый kitDataGridTableLayout и ResourcePage/FrameDataGrid на всех списках. Календарь задач переведён на EventCalendar, lookup — на cascader, у операций появился вид доски. Удалены settings-7 и самописные DataGridSection/toolbar. Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import type { ReactNode } from 'react'
|
|
import { Info } from 'lucide-react'
|
|
|
|
import { cn } from '@evobgp/ui/lib/utils'
|
|
import {
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipTrigger,
|
|
} from '@evobgp/ui/components/tooltip'
|
|
|
|
import { PanelCard } from '@/components/panel-card'
|
|
|
|
/** Chart Frame shell — chart-1 spacing, not Card.
|
|
* @see https://reui.io/preview/base/chart-1
|
|
* @see https://reui.io/docs/components/base/frame
|
|
*/
|
|
export function AnalyticsCardShell({
|
|
title,
|
|
description,
|
|
info,
|
|
actions,
|
|
footer,
|
|
className,
|
|
children,
|
|
}: {
|
|
title: string
|
|
description?: string
|
|
info?: string
|
|
actions?: ReactNode
|
|
footer?: ReactNode
|
|
className?: string
|
|
children: ReactNode
|
|
}) {
|
|
const titleNode = (
|
|
<span className="flex items-center gap-2">
|
|
{title}
|
|
{info ? (
|
|
<Tooltip>
|
|
<TooltipTrigger
|
|
className="inline-flex text-muted-foreground transition-colors hover:text-foreground"
|
|
aria-label="Подробнее"
|
|
>
|
|
<Info className="size-3.5" />
|
|
</TooltipTrigger>
|
|
<TooltipContent side="top" className="max-w-xs text-xs">
|
|
{info}
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
) : null}
|
|
</span>
|
|
)
|
|
|
|
return (
|
|
<PanelCard
|
|
title={titleNode}
|
|
description={description}
|
|
actions={actions}
|
|
footer={footer}
|
|
className={cn('overflow-hidden', className)}
|
|
contentClassName="flex flex-col gap-5 py-5"
|
|
footerClassName={footer ? 'gap-2 px-5 py-4' : undefined}
|
|
>
|
|
{children}
|
|
</PanelCard>
|
|
)
|
|
}
|