About-Dialog als eigenes Fenster (Eto-Form + WebView) statt Inline-Modal
User-Feedback: About sollte nicht als overlay im Panel erscheinen sondern ein echtes OS-Fenster sein wie Kamera/Masse-Settings. Neu: - rhino/about.py: open_as_window() via panel_base.open_satellite_window (read-only, kein Bridge-Save/Cancel-Callback noetig) - src/AboutApp.jsx: gleiche Inhalte wie der vorige Modal — Versionen, Autor, Website, Lizenz — in einer 440x380 Eto-Form - src/main.jsx: mode 'about' → AboutApp - openAbout() in rhinoBridge.js sendet OPEN_ABOUT an Oberleiste - OberleisteBridge handler OPEN_ABOUT → about.open_as_window() OberleisteApp: - Logo-onClick aufgeräumt: openAbout() statt setAboutOpen(true) - aboutOpen-State und die AboutModal-Komponente entfernt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+2
-81
@@ -11,6 +11,7 @@ import {
|
||||
deleteLayerCombination, openLayerCombinationsDialog,
|
||||
openDossierSettings, openKameraPanel,
|
||||
setMasseActive, openMasseSettings,
|
||||
openAbout,
|
||||
} from './lib/rhinoBridge'
|
||||
|
||||
const PRESETS = [
|
||||
@@ -208,7 +209,6 @@ export default function OberleisteApp() {
|
||||
const [draft, setDraft] = useState('')
|
||||
const [customMode, setCustomMode] = useState(false) // Dropdown -> Custom-Input switch
|
||||
const customInputRef = useRef(null)
|
||||
const [aboutOpen, setAboutOpen] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
onMessage('STATE', (s) => {
|
||||
@@ -298,7 +298,7 @@ export default function OberleisteApp() {
|
||||
}}>
|
||||
{/* Logo: DOSSIER. (Petrol-Punkt) — Klick = About-Fenster */}
|
||||
<button
|
||||
onClick={() => setAboutOpen(true)}
|
||||
onClick={() => openAbout()}
|
||||
title="Über Dossier"
|
||||
style={{
|
||||
display: 'flex', alignItems: 'baseline', gap: 8,
|
||||
@@ -558,85 +558,6 @@ export default function OberleisteApp() {
|
||||
{/* Spacer am rechten Rand */}
|
||||
<div style={{ flex: 1 }} />
|
||||
</div>
|
||||
{aboutOpen && (
|
||||
<AboutModal onClose={() => setAboutOpen(false)} />
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
function AboutModal({ onClose }) {
|
||||
return (
|
||||
<div
|
||||
onClick={onClose}
|
||||
style={{
|
||||
position: 'fixed', inset: 0, zIndex: 1000,
|
||||
background: 'rgba(0, 0, 0, 0.6)',
|
||||
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
style={{
|
||||
minWidth: 360, maxWidth: 420,
|
||||
background: 'var(--bg-panel)',
|
||||
border: '1px solid var(--border)',
|
||||
borderRadius: 8,
|
||||
padding: '24px 28px',
|
||||
boxShadow: '0 12px 48px rgba(0, 0, 0, 0.5)',
|
||||
color: 'var(--text-primary)',
|
||||
fontFamily: 'var(--font)',
|
||||
}}
|
||||
>
|
||||
<div style={{ display: 'flex', alignItems: 'baseline', gap: 8,
|
||||
marginBottom: 4 }}>
|
||||
<span style={{
|
||||
fontFamily: "Krungthep, 'Archivo Black', sans-serif",
|
||||
fontSize: 28, letterSpacing: '-0.02em', lineHeight: 1,
|
||||
}}>
|
||||
DOSSIER<span style={{ color: 'var(--accent)' }}>.</span>
|
||||
</span>
|
||||
</div>
|
||||
<div style={{ fontSize: 11, color: 'var(--text-muted)',
|
||||
letterSpacing: '0.06em', textTransform: 'uppercase',
|
||||
marginBottom: 18 }}>
|
||||
Teil von OpenStudio
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'auto 1fr',
|
||||
gap: '6px 14px', fontSize: 11, marginBottom: 18 }}>
|
||||
<span style={{ color: 'var(--text-muted)' }}>Launcher</span>
|
||||
<span style={{ fontFamily: 'DM Mono, monospace' }}>v{__LAUNCHER_VERSION__}</span>
|
||||
<span style={{ color: 'var(--text-muted)' }}>Plugin</span>
|
||||
<span style={{ fontFamily: 'DM Mono, monospace' }}>v{__APP_VERSION__}</span>
|
||||
<span style={{ color: 'var(--text-muted)' }}>Autor</span>
|
||||
<span>Karim Gabriele Varano</span>
|
||||
<span style={{ color: 'var(--text-muted)' }}>Website</span>
|
||||
<a href="https://gabrielevarano.ch" target="_blank" rel="noreferrer"
|
||||
style={{ color: 'var(--accent)', textDecoration: 'none' }}>
|
||||
gabrielevarano.ch
|
||||
</a>
|
||||
<span style={{ color: 'var(--text-muted)' }}>Lizenz</span>
|
||||
<span>Proprietär — © 2026 Karim Gabriele Varano</span>
|
||||
</div>
|
||||
|
||||
<div style={{ fontSize: 10, color: 'var(--text-muted)',
|
||||
lineHeight: 1.5, marginBottom: 18,
|
||||
paddingTop: 12,
|
||||
borderTop: '1px solid var(--border-light)' }}>
|
||||
Rhino 8 Plugin für architektonische Workflows — Wände, Decken,
|
||||
Öffnungen, Räume, SIA 416, Plan-Layouts. Schwester-App: Rapport.
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex', justifyContent: 'flex-end' }}>
|
||||
<button
|
||||
onClick={onClose}
|
||||
className="btn-contained"
|
||||
style={{ padding: '6px 18px', fontSize: 11 }}
|
||||
>Schliessen</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user