9dc191be4f
OpenStudio-Suite Architektur-Plugin fuer Rhino 8 (Mac): - Smart-Elemente: Wand, Decke, Dach (Pult/Sattel/Walm/Mansarde), Oeffnungen (Fenster/Tueren mit Rahmen + Sims + Glas + Fluegel), Treppen (gerade · L · Wendel mit Schrittmass-Validierung) - Live-Previews mit Step-Lines + Soll-Range-Clamping - Bidirektionale Selection-Sync zwischen Source-Linie und Volume - Geschoss-/Ebenen-Verwaltung mit OKFF-Persistenz - Layouts mit PDF-Export - Ausschnitte / Massstab / Override-Regeln - Petrol-Gruen Theme (Rapport-konform) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
42 lines
1.3 KiB
React
42 lines
1.3 KiB
React
import { useState } from 'react'
|
|
import Icon from './Icon'
|
|
|
|
export default function Section({ title, badge, action, defaultOpen = true, children }) {
|
|
const [open, setOpen] = useState(defaultOpen)
|
|
|
|
return (
|
|
<div>
|
|
<div
|
|
onClick={() => setOpen(o => !o)}
|
|
style={{
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: 6,
|
|
padding: '6px 14px 4px',
|
|
cursor: 'pointer',
|
|
userSelect: 'none',
|
|
}}
|
|
>
|
|
<span style={{
|
|
transform: open ? 'rotate(0deg)' : 'rotate(-90deg)',
|
|
transition: 'transform 0.2s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
color: 'var(--text-muted)',
|
|
display: 'inline-flex',
|
|
marginLeft: -6,
|
|
}}>
|
|
<Icon name="arrow_drop_down" size={18} />
|
|
</span>
|
|
<span style={{
|
|
fontSize: 11, fontWeight: 500,
|
|
color: 'var(--text-primary)',
|
|
letterSpacing: '0.02em',
|
|
}}>{title}</span>
|
|
{badge != null && <span className="chip" style={{ fontSize: 8 }}>{badge}</span>}
|
|
<div style={{ flex: 1, height: 1, background: 'var(--border)', marginLeft: 4 }} />
|
|
{action && <div onClick={e => e.stopPropagation()}>{action}</div>}
|
|
</div>
|
|
{open && children}
|
|
</div>
|
|
)
|
|
}
|