/ src / components / shared / advanced-settings-section.tsx
advanced-settings-section.tsx
 1  'use client'
 2  
 3  import type { ReactNode } from 'react'
 4  import { ChevronDown } from 'lucide-react'
 5  
 6  interface Props {
 7    open: boolean
 8    onToggle: () => void
 9    summary?: string | null
10    badges?: string[]
11    children: ReactNode
12  }
13  
14  export function AdvancedSettingsSection({ open, onToggle, summary, badges = [], children }: Props) {
15    return (
16      <section className="mb-8 rounded-[20px] border border-white/[0.06] bg-surface/70">
17        <button
18          type="button"
19          onClick={onToggle}
20          className="flex w-full items-start justify-between gap-4 rounded-[20px] bg-transparent px-5 py-5 text-left transition-all hover:bg-white/[0.02] sm:px-6"
21          style={{ fontFamily: 'inherit' }}
22        >
23          <div className="min-w-0">
24            <div className="flex flex-wrap items-center gap-2">
25              <h3 className="font-display text-[17px] font-700 tracking-[-0.02em] text-text">Advanced Settings</h3>
26              {summary && (
27                <span className="rounded-full border border-white/[0.08] bg-white/[0.03] px-2.5 py-1 text-[10px] font-700 uppercase tracking-[0.08em] text-text-3">
28                  {summary}
29                </span>
30              )}
31            </div>
32            <p className="mt-1 text-[13px] leading-[1.6] text-text-3/75">
33              Power-user controls for routing, runtime behavior, and expert overrides.
34            </p>
35            {badges.length > 0 && (
36              <div className="mt-3 flex flex-wrap gap-2">
37                {badges.slice(0, 5).map((badge) => (
38                  <span
39                    key={badge}
40                    className="rounded-[9px] border border-white/[0.08] bg-white/[0.03] px-2.5 py-1 text-[11px] font-600 text-text-3"
41                  >
42                    {badge}
43                  </span>
44                ))}
45              </div>
46            )}
47          </div>
48          <span className="mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[12px] border border-white/[0.06] bg-white/[0.03] text-text-3">
49            <ChevronDown className={`size-4 transition-transform duration-200 ${open ? 'rotate-180' : ''}`} />
50          </span>
51        </button>
52        {open && (
53          <div className="border-t border-white/[0.04] px-5 pb-5 pt-4 sm:px-6 sm:pb-6">
54            {children}
55          </div>
56        )}
57      </section>
58    )
59  }