task(D12): block attributes - BlockAttrDef type, attrDefs on definitions, instance attrValues rendering as text primitives, properties panel attribute form

This commit is contained in:
Agent Zero
2026-08-29 03:35:36 +02:00
parent 7b207d8e39
commit 9ca86d67dd
4 changed files with 171 additions and 2 deletions
+32 -1
View File
@@ -3,6 +3,7 @@ import { polygonArea } from '../tools/modification/geometry';
import { formatArea } from '../utils/format';
import type { PropertiesPanelProps } from '../types/ui.types';
import { formatInputValue, parseDistance, type UnitType } from '../utils/format';
import { getActiveDocument } from '../kernel/document/documentService';
const parseNum = (s: string) => parseFloat(s.replace(/[^0-9.\-]/g, '')) || 0;
@@ -77,7 +78,37 @@ const PropertiesPanel: React.FC<PropertiesPanelProps> = ({
<label className="prop-label">Fläche</label>
<span className="prop-value">{formatArea(polygonArea(el.properties.points as Array<{ x: number; y: number }>), unit, scaleFactor)}</span>
</div>
)}` : ''}</span>
)}
{/* ─── Task D12: Block-Attribute-Formular (block_instance) ─── */}
{el.type === 'block_instance' && (() => {
const blockId = el.properties.blockId as string | undefined;
if (!blockId) return null;
const block = getActiveDocument()?.getBlock(blockId);
const attrDefs = block?.attrDefs ?? [];
if (attrDefs.length === 0) return null;
const attrValues = (el.properties.attrValues as Record<string, string> | undefined) ?? {};
return (
<div className="panel-section">
<div className="panel-section-title">Block-Attribute</div>
{attrDefs.map((def) => (
<div className="prop-row" key={def.tag}>
<label className="prop-label" title={def.prompt}>{def.tag}</label>
<input
className="prop-input"
type="text"
value={attrValues[def.tag] ?? def.defaultValue ?? ''}
placeholder={def.prompt}
onChange={(ev) => {
const next = { ...attrValues, [def.tag]: ev.target.value };
onUpdateProperty('attrValues', next);
}}
/>
</div>
))}
</div>
);
})()}` : ''}</span>
<div style={{ display: 'flex', gap: '4px' }}>
{onDelete && el && (
<button