import { useState, useEffect } from 'react' import Icon from './Icon' import { BarToggle, BarButton, BAR_H } from './BarControls' import { openLibrary, pickTextureFile, onMessage, renameLinetype, deleteLinetype, loadLinetypeDefaults, importLinetypeFile, renameHatch, deleteHatch, importHatchFile, } from '../lib/rhinoBridge' /* Field — Stack-Layout fuer komplexe Inputs (mehrere Felder nebeneinander) */ function Field({ label, hint, children, style }) { return (
{label}
{children}
{hint && ( {hint} )}
) } /* InlineTextField — Label links, Text-Input rechts (kompakt) */ function InlineTextField({ label, value, onChange, placeholder, width = 240 }) { return (
{label} onChange(ev.target.value)} style={{ width, height: BAR_H, padding: '0 12px', fontSize: 11 }} />
) } /* TextareaField — Label oben, mehrzeiliges Input darunter (full-width) */ function TextareaField({ label, value, onChange, rows = 3, placeholder }) { return (
{label}