mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-02-13 01:43:16 +08:00
- 新增logger模块,提供基于zap的日志管理 - agent主程序及内部模块改为使用zap日志记录信息和错误 - agent内部关键事件增加详细日志输出 - 配置日志级别和环境变量控制日志格式和输出 - websocket和task客户端启用TLS跳过验证并记录连接日志 - 任务接收、取消和配置更新过程中增加结构化日志记录 - 更新过程中添加panic捕获日志及状态更新 - 移除.vscode/settings.json配置文件 - 更新Dockerfile基础镜像版本和环境变量 - .gitignore添加SSL证书相关忽略规则 - 调整Go模块依赖,新增多个日志和相关库依赖
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
import type { ComponentProps } from "react"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
|
|
export function BaseNode({ className, ...props }: ComponentProps<"div">) {
|
|
return (
|
|
<div
|
|
className={cn(
|
|
"bg-card text-card-foreground relative rounded-md border",
|
|
"hover:ring-1",
|
|
// React Flow displays node elements inside of a `NodeWrapper` component,
|
|
// which compiles down to a div with the class `react-flow__node`.
|
|
// When a node is selected, the class `selected` is added to the
|
|
// `react-flow__node` element. This allows us to style the node when it
|
|
// is selected, using Tailwind's `&` selector.
|
|
"[.react-flow\\_\\_node.selected_&]:border-muted-foreground",
|
|
"[.react-flow\\_\\_node.selected_&]:shadow-lg",
|
|
className
|
|
)}
|
|
tabIndex={0}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* A container for a consistent header layout intended to be used inside the
|
|
* `<BaseNode />` component.
|
|
*/
|
|
export function BaseNodeHeader({
|
|
className,
|
|
...props
|
|
}: ComponentProps<"header">) {
|
|
return (
|
|
<header
|
|
{...props}
|
|
className={cn(
|
|
"mx-0 my-0 -mb-1 flex flex-row items-center justify-between gap-2 px-3 py-2",
|
|
// Remove or modify these classes if you modify the padding in the
|
|
// `<BaseNode />` component.
|
|
className
|
|
)}
|
|
/>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* The title text for the node. To maintain a native application feel, the title
|
|
* text is not selectable.
|
|
*/
|
|
export function BaseNodeHeaderTitle({
|
|
className,
|
|
...props
|
|
}: ComponentProps<"h3">) {
|
|
return (
|
|
<h3
|
|
data-slot="base-node-title"
|
|
className={cn("user-select-none flex-1 font-semibold", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
export function BaseNodeContent({
|
|
className,
|
|
...props
|
|
}: ComponentProps<"div">) {
|
|
return (
|
|
<div
|
|
data-slot="base-node-content"
|
|
className={cn("flex flex-col gap-y-2 p-3", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
export function BaseNodeFooter({ className, ...props }: ComponentProps<"div">) {
|
|
return (
|
|
<div
|
|
data-slot="base-node-footer"
|
|
className={cn(
|
|
"flex flex-col items-center gap-y-2 border-t px-3 pt-2 pb-3",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|