Panel-Konsistenz: Gestaltung context-aware + Tabellen-Cleanup
Gestaltung: - Backend detektiert geometryKind (curve / curveOpen / 3d / mixed), ignoriert DOSSIER-Source-Curves (wand_axis etc.) damit die Klassifikation einer Wand-Selektion (Axis + Volume) als reines 3D durchgeht. - UI zeigt sektion-spezifische Section-Heads: 2D-Curve → Fill+Pen, 3D-Solid → Section Style+Boundary. Section Style + Fill nutzen jetzt einen gemeinsamen HatchEditor (gleiche Controls). - _set_section_style schreibt per-Object SectionHatchIndex/Scale/ Rotation/Color via _try_set_attr-Multifallback. - Selection-Summary liest dieselben Properties zurueck. - ColorBar als Pill (borderRadius 999) statt eckig. - "Attribute"-Header oben raus (war alt + redundant). Ebenen / Zeichnungsebenen: - Aktive Zeile wieder als Pill (borderRadius 999) — aber ohne Margin/Shift, Inhalt springt nicht. Kein bold-text-change mehr. - Linker borderLeft komplett raus — vorher leere graue Spalte am Panel-Rand sichtbar. - Inhalt mehr nach links (Padding 8/6 statt 12). - Zeilen-minHeight 24, kompaktere Icons. - EbenenSettings: Ebene-Picker auf BarCombo. - GeschossManager: Gebaeudehoehe-Zeile raus, Stift→Settings-Icon. ElementeApp: - Alle btn-contained/btn-outlined → BarToggle (Wand-Aufbau, Raum- Align, Treppe-Lage/Modus, Oeffnung-Ref/Rahmen/Fluegel/Glas, AutoOverride). - ReferenzSelector → BarToggle. - "Neues Element"-Container ohne Box-Border, Header-Slot beherbergt Projektuebersicht-Pill statt label. - Property-Labels (UK/OK/Dicke/...) von text-muted auf text-secondary (war zu blass). - Gruener Accent-Border um Properties-Containern → normaler border. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -245,16 +245,16 @@ function EbeneRow({ e, depth, hasChildren, expanded, onToggleExpand, active, mod
|
||||
onContextMenu={onContextMenu}
|
||||
style={{
|
||||
display: 'flex', alignItems: 'center', gap: 4,
|
||||
padding: '1px 12px',
|
||||
paddingLeft: 12 + (depth || 0) * 12,
|
||||
padding: '1px 8px',
|
||||
paddingLeft: 6 + (depth || 0) * 10,
|
||||
margin: 0,
|
||||
background: active ? 'var(--active-dim)'
|
||||
: (e.visible !== false) ? 'var(--bg-item)'
|
||||
: 'var(--bg-panel)',
|
||||
// Eckige Tabellen-Zeile mit Accent-Strip links fuer aktive Ebene
|
||||
borderRadius: 0,
|
||||
borderLeft: '3px solid ' + (active ? 'var(--accent)' : 'transparent'),
|
||||
borderBottom: '1px solid var(--border-light)',
|
||||
// Aktive Zeile als Pill — kein Margin/Shift damit Inhalt nicht
|
||||
// springt, nur Bg-Form aendert sich.
|
||||
borderRadius: active ? 999 : 0,
|
||||
borderBottom: active ? '1px solid transparent' : '1px solid var(--border-light)',
|
||||
opacity: (!active && e.visible === false && mode !== 'all') ? 0.45 : 1,
|
||||
cursor: 'pointer',
|
||||
userSelect: 'none',
|
||||
@@ -293,7 +293,7 @@ function EbeneRow({ e, depth, hasChildren, expanded, onToggleExpand, active, mod
|
||||
value={e.name}
|
||||
onCommit={onNameChange}
|
||||
autoEditTrigger={autoEditName}
|
||||
fontWeight={active ? 700 : 400}
|
||||
fontWeight={500}
|
||||
fontSize={11}
|
||||
style={{
|
||||
color: active ? 'var(--active-light)'
|
||||
@@ -565,8 +565,8 @@ export default function EbenenManager({
|
||||
</div>
|
||||
|
||||
<div style={{
|
||||
display: 'flex', alignItems: 'center', gap: 5,
|
||||
padding: '2px 14px',
|
||||
display: 'flex', alignItems: 'center', gap: 4,
|
||||
padding: '2px 8px 2px 9px',
|
||||
background: 'var(--bg-section)',
|
||||
borderBottom: '1px solid var(--border)',
|
||||
}}>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { useState } from 'react'
|
||||
import Icon from './Icon'
|
||||
import { BarCombo } from './BarControls'
|
||||
|
||||
function Field({ label, hint, children }) {
|
||||
return (
|
||||
@@ -123,19 +124,19 @@ export default function EbenenSettingsDialog({
|
||||
textTransform: 'uppercase', letterSpacing: 0.5 }}>
|
||||
Ebene
|
||||
</span>
|
||||
<select
|
||||
value={pickerSelected || draft.code}
|
||||
onChange={(ev) => onPickEbene && onPickEbene(ev.target.value, draft)}
|
||||
style={{ flex: 1, fontSize: 11, minWidth: 0,
|
||||
fontFamily: 'var(--font-mono)' }}
|
||||
title="Zwischen Ebenen wechseln — aktuelle Änderungen werden mit übernommen"
|
||||
>
|
||||
{pickerEbenen.map(e => (
|
||||
<option key={e.code} value={e.code}>
|
||||
{e.code} — {e.name}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
<div style={{ flex: 1, display: 'flex', minWidth: 0 }}>
|
||||
<BarCombo
|
||||
value={pickerSelected || draft.code}
|
||||
onChange={(v) => onPickEbene && onPickEbene(v, draft)}
|
||||
title="Zwischen Ebenen wechseln — aktuelle Änderungen werden mit übernommen"
|
||||
>
|
||||
{pickerEbenen.map(e => (
|
||||
<option key={e.code} value={e.code}>
|
||||
{e.code} — {e.name}
|
||||
</option>
|
||||
))}
|
||||
</BarCombo>
|
||||
</div>
|
||||
</div>
|
||||
) : !embedded && (
|
||||
<div style={{
|
||||
|
||||
@@ -51,9 +51,8 @@ function ZeichnungsebeneRow({
|
||||
padding: '1px 12px',
|
||||
margin: 0,
|
||||
background: active ? 'var(--active-dim)' : 'var(--bg-item)',
|
||||
borderRadius: 0,
|
||||
borderLeft: '3px solid ' + (active ? 'var(--accent)' : 'transparent'),
|
||||
borderBottom: '1px solid var(--border-light)',
|
||||
borderRadius: active ? 999 : 0,
|
||||
borderBottom: active ? '1px solid transparent' : '1px solid var(--border-light)',
|
||||
cursor: 'pointer',
|
||||
userSelect: 'none',
|
||||
minHeight: 24,
|
||||
@@ -67,7 +66,7 @@ function ZeichnungsebeneRow({
|
||||
><Icon name={eyeIcon} size={12} /></button>
|
||||
|
||||
<span style={{
|
||||
fontWeight: active ? 700 : 500,
|
||||
fontWeight: 500,
|
||||
fontSize: 11,
|
||||
color: active ? 'var(--active-light)' : 'var(--text-label)',
|
||||
flex: 1, minWidth: 0,
|
||||
@@ -128,9 +127,6 @@ export default function GeschossManager({
|
||||
const [ctxMenu, setCtxMenu] = useState(null) // { x, y, id }
|
||||
|
||||
const sorted = [...zeichnungsebenen].reverse()
|
||||
const gesamthoehe = zeichnungsebenen
|
||||
.filter(z => z.isGeschoss)
|
||||
.reduce((s, z) => s + (z.hoehe ?? 0), 0)
|
||||
|
||||
const addQuick = () => {
|
||||
// Standard: NICHT-Geschoss-Zeichnungsebene (z.B. Möblierung, Bemassung,
|
||||
@@ -235,19 +231,6 @@ export default function GeschossManager({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{
|
||||
display: 'flex', justifyContent: 'space-between', alignItems: 'center',
|
||||
padding: '3px 14px',
|
||||
background: 'var(--bg-section)',
|
||||
borderBottom: '1px solid var(--border-light)',
|
||||
}}>
|
||||
<span className="label-xs">Gebäudehöhe</span>
|
||||
<span style={{ fontSize: 11, fontFamily: 'var(--font-mono)', color: 'var(--text-secondary)' }}>
|
||||
{gesamthoehe.toFixed(2)} m
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
{/* Master-Row: Master-Eye links + Master-Lock rechts (analog
|
||||
EbenenManager). */}
|
||||
<div style={{
|
||||
|
||||
Reference in New Issue
Block a user