import { useCallback, useEffect, useMemo, useRef, useState, type ReactElement, } from "react"; import { Button, Input, Label, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, cn, } from "@arronqzy/ui"; import { type ExecutionTraceEntry, type PageLifecyclePhase, } from "@arronqzy/blueprint-dsl"; import { useI18n } from "@arronqzy/i18n/react"; import { getLifecyclePhaseLabel } from "../graph/document"; import type { ExecutionLogSettings } from "../library/execution-log-settings"; function IconClear({ className }: { className?: string }) { return ( ); } function IconClearDb({ className }: { className?: string }) { return ( ); } function ArrowDownIcon({ className }: { className?: string }) { return ( ); } function formatJson(value: unknown) { try { return JSON.stringify(value, null, 2); } catch { return String(value); } } function LogTooltip({ content, children, }: { content: string; children: ReactElement; }) { return ( {children} {content} ); } function LogTooltipButton({ content, disabled, className, ...props }: React.ComponentProps & { content: string }) { const button = ( ) : null}
{t("blueprint.log.saveLog")} {t("blueprint.log.exportJson")}
onUpdateSettings({ maxSavedRuns: Math.max(1, Number(e.target.value) || 1), }) } className="h-8" aria-label={t("blueprint.log.maxSavedCountAria")} />
onUpdateSettings({ retentionDays: Math.max(1, Number(e.target.value) || 1), }) } className="h-8" aria-label={t("blueprint.log.retentionDaysAria")} />
{t("blueprint.log.cleanupExpired")}
); }