Files
Sanaei f727d04f65
CI / go-test (push) Canceled after 0s
CI / postgres-durable-first (push) Canceled after 0s
CI / codegen (push) Canceled after 0s
CI / govulncheck (push) Canceled after 0s
CI / race (push) Canceled after 0s
CI / fuzz-smoke (push) Canceled after 0s
CI / golangci (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CodeQL Advanced / Analyze (go) (push) Canceled after 0s
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
Docs CI / build (push) Canceled after 0s
Docs Deploy (GitHub Pages) / build (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-latest) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-latest) (push) Canceled after 0s
Docs Deploy (GitHub Pages) / deploy (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s
v3.7.0
2026-08-24 15:07:15 +02:00

45 lines
1.2 KiB
TypeScript

'use client';
import { RotateCcw } from 'lucide-react';
import type { ReactNode } from 'react';
export function ToolFrame({
title,
description,
onReset,
children,
}: {
title: string;
description?: string;
onReset?: () => void;
children: ReactNode;
}) {
return (
<section
role="group"
aria-label={title}
className="not-prose my-6 overflow-hidden rounded-2xl border bg-fd-card text-fd-foreground"
>
<header className="flex items-start justify-between gap-3 border-b px-4 py-3">
<div>
<h3 className="font-semibold">{title}</h3>
{description ? (
<p className="mt-0.5 text-sm text-fd-muted-foreground">{description}</p>
) : null}
</div>
{onReset ? (
<button
type="button"
onClick={onReset}
className="inline-flex shrink-0 items-center gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs font-medium transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground"
>
<RotateCcw className="size-3.5" aria-hidden />
Reset
</button>
) : null}
</header>
<div className="p-4">{children}</div>
</section>
);
}