/* ============================================ ERP Nutzfahrzeuge - React SPA v4 ============================================ */ const { useState, useEffect, useCallback, useMemo, useRef } = React; // ============ ICON COMPONENT ============ const Icon = ({ name, size = 20, className = '' }) => { const icons = { dashboard: 'M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z', truck: 'M1 3h15v13H1V3zm15 5h4l3 3v5h-7V8zM5 18a2 2 0 100-4 2 2 0 000 4zm12 0a2 2 0 100-4 2 2 0 000 4z', car: 'M5 11l1.5-4.5h11L19 11M3 11h18v6H3v-6zm2 6a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm12 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z', forklift: 'M2 20V4h2v14h8v2H2zm2-14h6v8H4V6zm6 0h4v12h-4V6zm4 0h2v12h-2V6zM14 2h6v2h-6V2z', contacts: 'M16 7a4 4 0 11-8 0 4 4 0 018 0zM2 18c0-3 3-5 6-5s6 2 6 5v1H2v-1zm14-5c2 0 4 2 4 4v1h-4v-5z', sale: 'M2 4h20v4H2V4zm0 6h12v10H2V10zm14 0h6v6h-6v-6zm0 8h6v2h-6v-2z', ai: 'M12 2l2 7h7l-5.5 4 2 7L12 16l-5.5 4 2-7L3 9h7l2-7z', settings: 'M12 8a4 4 0 100 8 4 4 0 000-8z', users: 'M9 11a4 4 0 100-8 4 4 0 000 8zm0 2c-4 0-7 2-7 5v1h14v-1c0-3-3-5-7-5zm6-2a3 3 0 100-6 3 3 0 000 6z', search: 'M11 4a7 7 0 100 14 7 7 0 000-14zm10 17l-5-5', bell: 'M12 2a6 6 0 016 6v4l2 4H4l2-4V8a6 6 0 016-6z', menu: 'M3 6h18M3 12h18M3 18h18', close: 'M6 6l12 12M18 6L6 18', plus: 'M12 5v14M5 12h14', edit: 'M3 17v4h4l11-11-4-4L3 17z', trash: 'M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14', check: 'M5 12l5 5L20 7', alert: 'M12 2L2 20h20L12 2zm0 7v6m0 4v.01', info: 'M12 2a10 10 0 100 20 10 10 0 000-20z', chevronLeft: 'M15 6l-6 6 6 6', chevronRight: 'M9 6l6 6-6 6', chevronDown: 'M6 9l6 6 6-6', arrowUp: 'M12 5v14M5 12l7-7 7 7', arrowDown: 'M12 5v14M5 12l7 7 7-7', upload: 'M12 4v12M5 11l7-7 7 7M4 20h16', download: 'M12 4v12M5 11l7 7 7-7M4 20h16', camera: 'M3 7h4l2-3h6l2 3h4v12H3V7zm9 3a4 4 0 100 8 4 4 0 000-8z', mic: 'M12 2a3 3 0 013 3v6a3 3 0 01-6 0V5a3 3 0 013-3z', send: 'M2 12l20-9-9 20-2-9-9-2z', sync: 'M4 12a8 8 0 0114-5l2-2v6h-6l2-2a6 6 0 00-10 5H4z', image: 'M3 4h18v16H3V4zm3 12l4-4 3 3 5-5 3 6H6z', doc: 'M6 2h10l4 4v16H6V2zm10 0v4h4M9 12h6M9 16h6', filter: 'M3 6h18l-7 8v6l-4-2v-4L3 6z', sort: 'M7 4v16M4 7l3-3 3 3M17 20V4M14 17l3 3 3-3', logout: 'M9 4H5v16h4M16 8l4 4-4 4M9 12h11', sun: 'M12 8a4 4 0 100 8 4 4 0 000-8z', moon: 'M21 12a9 9 0 11-9-9 7 7 0 009 9z', tag: 'M2 12l8-8h12v12l-8 8L2 12zm12-4a2 2 0 100 4 2 2 0 000-4z', euro: 'M16 8a5 5 0 00-5-3 5 5 0 00-5 7 5 5 0 005 7 5 5 0 005-3M4 11h8M4 13h8', clock: 'M12 2a10 10 0 100 20 10 10 0 000-20zm0 6v6l4 2', eye: 'M12 5c-7 0-10 7-10 7s3 7 10 7 10-7 10-7-3-7-10-7zm0 3a4 4 0 100 8 4 4 0 000-8z', location: 'M12 2a7 7 0 00-7 7c0 5 7 13 7 13s7-8 7-13a7 7 0 00-7-7z', calendar: 'M3 6h18v15H3V6zm0-2h4V2h2v2h6V2h2v2h4', trending: 'M3 17l6-6 4 4 8-8M16 7h5v5', package: 'M12 2L2 7v10l10 5 10-5V7L12 2z', building: 'M4 4h16v16H4V4z', shield: 'M12 2L4 6v6c0 5 4 9 8 10 4-1 8-5 8-10V6l-8-4z', star: 'M12 2l3 7h7l-5.5 4 2 7L12 16l-6.5 4 2-7L2 9h7l3-7z', list: 'M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01', grid: 'M3 3h7v7H3V3zm11 0h7v7h-7V3zM3 14h7v7H3v-7zm11 0h7v7h-7v-7z', external: 'M14 3h7v7M21 3l-9 9', refresh: 'M4 12a8 8 0 0114-5l2-2v6h-6l2-2a6 6 0 00-10 5H4z', globe: 'M12 2a10 10 0 100 20 10 10 0 000-20z', briefcase: 'M3 7h18v13H3V7zM8 7V4h8v3', phone: 'M6 2h12v20H6V2z', mail: 'M3 5h18v14H3V5z', chart: 'M3 3v18h18M7 14l4-4 3 3 5-6', layers: 'M12 2L2 7l10 5 10-5-10-5z', wrench: 'M14 6a4 4 0 11-5 5L3 17l4 4 6-6a4 4 0 015-5z', pdf: 'M6 2h10l4 4v16H6V2z', sparkles: 'M12 3l1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5L12 3z', shopping: 'M3 3h2l2 14h12l2-10H6', gas: 'M3 7v10a2 2 0 002 2h8a2 2 0 002-2V7M3 7h12', road: 'M5 22V2l4 20M19 22V2l-4 20', certificate: 'M12 2L4 6v6c0 5 4 9 8 10 4-1 8-5 8-10V6l-8-4z', percentage: 'M19 5L5 19', currency: 'M3 8h18M3 16h18', truck_type: 'M1 3h15v13H1V3z', clipboard: 'M9 2h6v4H9V2zM4 6h16v16H4V6z', save: 'M5 3h12l4 4v14H5V3z', drag: 'M8 6h2v2H8V6zm6 0h2v2h-2V6zM8 11h2v2H8v-2zm6 0h2v2h-2v-2z', config: 'M12 4a8 8 0 100 16 8 8 0 000-16z' }; const path = icons[name] || icons.dashboard; return /*#__PURE__*/React.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className }, /*#__PURE__*/React.createElement("path", { d: path })); }; // ============ SHARED COMPONENTS ============ const Badge = ({ variant = 'neutral', children }) => /*#__PURE__*/React.createElement("span", { className: `badge badge-${variant}` }, children); const Button = ({ variant = 'primary', size = 'md', icon, children, onClick, disabled, type = 'button', className = '', title }) => { const cls = `btn btn-${variant} ${size === 'sm' ? 'btn-sm' : ''} ${size === 'lg' ? 'btn-lg' : ''} ${className}`; return /*#__PURE__*/React.createElement("button", { type: type, className: cls, onClick: onClick, disabled: disabled, title: title }, icon && /*#__PURE__*/React.createElement(Icon, { name: icon, size: size === 'sm' ? 14 : 16 }), children); }; const Card = ({ title, action, children, className = '' }) => /*#__PURE__*/React.createElement("div", { className: `card ${className}` }, (title || action) && /*#__PURE__*/React.createElement("div", { className: "card-header" }, title && /*#__PURE__*/React.createElement("h3", { className: "card-title" }, title), action && /*#__PURE__*/React.createElement("div", null, action)), /*#__PURE__*/React.createElement("div", { className: "card-body" }, children)); const KpiCard = ({ label, value, trend, trendDir, icon, color = 'primary' }) => /*#__PURE__*/React.createElement("div", { className: "kpi-card" }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' } }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { className: "kpi-label" }, t(label)), /*#__PURE__*/React.createElement("div", { className: "kpi-value" }, value), trend && /*#__PURE__*/React.createElement("div", { className: "kpi-trend", style: { color: trendDir === 'up' ? 'var(--color-success)' : 'var(--color-error)' } }, /*#__PURE__*/React.createElement(Icon, { name: trendDir === 'up' ? 'arrowUp' : 'arrowDown', size: 14 }), /*#__PURE__*/React.createElement("span", null, trend))), icon && /*#__PURE__*/React.createElement("div", { style: { width: 40, height: 40, borderRadius: 'var(--radius-md)', background: `var(--color-${color}-light)`, color: `var(--color-${color})`, display: 'flex', alignItems: 'center', justifyContent: 'center' } }, /*#__PURE__*/React.createElement(Icon, { name: icon, size: 20 })))); const Spinner = ({ size = 'md' }) => /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', padding: 'var(--space-12)' } }, /*#__PURE__*/React.createElement("div", { className: `spinner ${size === 'lg' ? 'spinner-lg' : ''}` })); const EmptyState = ({ icon = 'package', title, text, action }) => /*#__PURE__*/React.createElement("div", { className: "empty-state" }, /*#__PURE__*/React.createElement(Icon, { name: icon, size: 64, className: "empty-state-icon" }), /*#__PURE__*/React.createElement("h3", { className: "empty-state-title" }, title), /*#__PURE__*/React.createElement("p", { className: "empty-state-text" }, text), action); const ErrorState = ({ title, text, onRetry }) => /*#__PURE__*/React.createElement("div", { className: "error-state" }, /*#__PURE__*/React.createElement(Icon, { name: "alert", size: 48, className: "error-state-icon" }), /*#__PURE__*/React.createElement("h3", { className: "empty-state-title" }, title || t('common.fehler_aufgetreten')), /*#__PURE__*/React.createElement("p", { className: "empty-state-text" }, text || 'Fehler.'), onRetry && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "refresh", onClick: onRetry }, t('common.erneut_versuchen'))); const Avatar = ({ name, size = 'md' }) => { const i = name.split(' ').map(n => n[0]).join('').slice(0, 2).toUpperCase(); return /*#__PURE__*/React.createElement("div", { className: `avatar ${size === 'lg' ? 'avatar-lg' : ''}` }, i); }; const ViewToggle = ({ view, onChange }) => /*#__PURE__*/React.createElement("div", { className: "view-toggle" }, /*#__PURE__*/React.createElement("button", { className: `view-toggle-btn ${view === 'table' ? 'active' : ''}`, onClick: () => onChange('table') }, /*#__PURE__*/React.createElement(Icon, { name: "list", size: 16 }), " Tabelle"), /*#__PURE__*/React.createElement("button", { className: `view-toggle-btn ${view === 'grid' ? 'active' : ''}`, onClick: () => onChange('grid') }, /*#__PURE__*/React.createElement(Icon, { name: "grid", size: 16 }), " Kacheln")); const useRouter = () => { const [route, setRoute] = useState(window.location.hash.slice(1) || '/dashboard'); useEffect(() => { const h = () => setRoute(window.location.hash.slice(1) || '/dashboard'); window.addEventListener('hashchange', h); return () => window.removeEventListener('hashchange', h); }, []); const navigate = useCallback(p => { window.location.hash = p; }, []); return { route, navigate }; }; const ZBRef = ({ field }) => /*#__PURE__*/React.createElement("span", { className: "zb-field-ref" }, field); // ============ IMAGE MANAGER (v4 with file button) ============ const photoCategories = [{ id: 'aussen_front', label: 'Aussen - Front' }, { id: 'aussen_seite', label: 'Aussen - Seite' }, { id: 'aussen_heck', label: 'Aussen - Heck' }, { id: 'innen_armaturen', label: 'Innen - Armaturen' }, { id: 'innen_sitze', label: 'Innen - Sitze' }, { id: 'motorraum', label: 'Motorraum' }, { id: 'schaeden', label: 'Schaeden' }, { id: 'unterboden', label: 'Unterboden' }, { id: 'dokumente', label: 'Dokumente' }, { id: 'sonstiges', label: 'Sonstiges' }]; const ImageManager = ({ photos, setPhotos, role }) => { const [uploading, setUploading] = useState(false); const [lightbox, setLightbox] = useState(null); const [showRetusche, setShowRetusche] = useState(null); const [retuscheOption, setRetuscheOption] = useState(null); const [retuscheLoading, setRetuscheLoading] = useState(false); const [deleteConfirm, setDeleteConfirm] = useState(null); const fileInputRef = useRef(null); const handleUpload = () => { setUploading(true); setTimeout(() => { setPhotos([...photos, { id: Date.now() + Math.random(), category: 'sonstiges', isMain: photos.length === 0 }]); setUploading(false); }, 1500); }; const handleFileSelect = e => { e.stopPropagation(); handleUpload(); }; const setMainPhoto = id => setPhotos(photos.map(p => ({ ...p, isMain: p.id === id }))); const deletePhoto = id => { setPhotos(photos.filter(p => p.id !== id)); setDeleteConfirm(null); }; const setPhotoCategory = (id, category) => setPhotos(photos.map(p => p.id === id ? { ...p, category } : p)); const movePhoto = (id, dir) => { const idx = photos.findIndex(p => p.id === id); if (idx < 0) return; const ni = dir === 'left' ? idx - 1 : idx + 1; if (ni < 0 || ni >= photos.length) return; const arr = [...photos]; [arr[idx], arr[ni]] = [arr[ni], arr[idx]]; setPhotos(arr); }; const handleRetusche = () => { setRetuscheLoading(true); setTimeout(() => { setRetuscheLoading(false); setShowRetusche(null); setRetuscheOption(null); }, 2000); }; const catLabel = catId => photoCategories.find(c => c.id === catId)?.label || 'Sonstiges'; return /*#__PURE__*/React.createElement("div", { className: "image-manager" }, role !== 'buchhaltung' && /*#__PURE__*/React.createElement("div", { className: `image-upload-zone ${uploading ? 'uploading' : ''}`, onClick: handleUpload }, uploading ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: "spinner spinner-lg" }), /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)', color: 'var(--color-text-secondary)' } }, "Fotos werden hochgeladen...")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, { name: "upload", size: 48, className: "image-upload-icon" }), /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-medium)' } }, "Fotos hochladen (Drag & Drop)"), /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, "JPG, PNG, WEBP · max 50 MB · Mehrfachauswahl"), /*#__PURE__*/React.createElement("div", { style: { marginTop: 'var(--space-3)', display: 'flex', gap: 'var(--space-2)', justifyContent: 'center' } }, /*#__PURE__*/React.createElement("div", { className: "file-input-wrapper" }, /*#__PURE__*/React.createElement(Button, { variant: "primary", size: "sm", icon: "image" }, "Datei auswaehlen"), /*#__PURE__*/React.createElement("input", { type: "file", multiple: true, accept: "image/*", ref: fileInputRef, onChange: handleFileSelect }))))), photos.length === 0 ? /*#__PURE__*/React.createElement(EmptyState, { icon: "image", title: "Keine Fotos vorhanden", text: "Laden Sie Fotos hoch. Kategorisieren Sie nach Perspektiven und markieren Sie ein Hauptfoto." }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 'var(--space-2)' } }, /*#__PURE__*/React.createElement("span", { style: { fontSize: 'var(--font-size-sm)', color: 'var(--color-text-secondary)' } }, photos.length, " Foto", photos.length !== 1 ? 's' : ''), role !== 'buchhaltung' && /*#__PURE__*/React.createElement("span", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, /*#__PURE__*/React.createElement(Icon, { name: "drag", size: 12 }), " Sortieren · ", /*#__PURE__*/React.createElement(Icon, { name: "star", size: 12 }), " Hauptfoto")), /*#__PURE__*/React.createElement("div", { className: "image-gallery" }, photos.map((photo, idx) => /*#__PURE__*/React.createElement("div", { key: photo.id, className: `image-thumb ${photo.isMain ? 'main-photo' : ''}`, onClick: () => setLightbox(idx) }, /*#__PURE__*/React.createElement("div", { className: "image-thumb-placeholder" }, /*#__PURE__*/React.createElement(Icon, { name: "image", size: 32 }), /*#__PURE__*/React.createElement("span", { style: { fontSize: 'var(--font-size-xs)' } }, "Foto ", idx + 1)), /*#__PURE__*/React.createElement("div", { className: "image-thumb-category" }, catLabel(photo.category)), photo.isMain && /*#__PURE__*/React.createElement("div", { className: "image-thumb-main-badge" }, /*#__PURE__*/React.createElement(Icon, { name: "star", size: 14 })), role !== 'buchhaltung' && /*#__PURE__*/React.createElement("div", { className: "image-thumb-overlay", onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement("div", { className: "image-thumb-actions" }, /*#__PURE__*/React.createElement("button", { className: `image-thumb-action star ${photo.isMain ? 'active' : ''}`, title: "Hauptfoto", onClick: () => setMainPhoto(photo.id) }, /*#__PURE__*/React.createElement(Icon, { name: "star", size: 14 })), /*#__PURE__*/React.createElement("button", { className: "image-thumb-action", title: "Nach links", onClick: () => movePhoto(photo.id, 'left') }, /*#__PURE__*/React.createElement(Icon, { name: "chevronLeft", size: 14 })), /*#__PURE__*/React.createElement("button", { className: "image-thumb-action", title: "Nach rechts", onClick: () => movePhoto(photo.id, 'right') }, /*#__PURE__*/React.createElement(Icon, { name: "chevronRight", size: 14 })), /*#__PURE__*/React.createElement("button", { className: "image-thumb-action", title: "KI-Retusche", onClick: () => setShowRetusche(photo.id) }, /*#__PURE__*/React.createElement(Icon, { name: "sparkles", size: 14 })), /*#__PURE__*/React.createElement("button", { className: "image-thumb-action danger", title: "Loeschen", onClick: () => setDeleteConfirm(photo.id) }, /*#__PURE__*/React.createElement(Icon, { name: "trash", size: 14 })))))))), lightbox !== null && photos[lightbox] && /*#__PURE__*/React.createElement("div", { className: "lightbox", onClick: () => setLightbox(null) }, /*#__PURE__*/React.createElement("button", { className: "lightbox-close", onClick: () => setLightbox(null) }, /*#__PURE__*/React.createElement(Icon, { name: "close", size: 24 })), photos.length > 1 && /*#__PURE__*/React.createElement("button", { className: "lightbox-nav prev", onClick: e => { e.stopPropagation(); setLightbox(lightbox === 0 ? photos.length - 1 : lightbox - 1); } }, /*#__PURE__*/React.createElement(Icon, { name: "chevronLeft", size: 24 })), /*#__PURE__*/React.createElement("div", { className: "lightbox-image", style: { width: '70vw', height: '60vh', display: 'flex', alignItems: 'center', justifyContent: 'center' }, onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement(Icon, { name: "image", size: 120, style: { color: 'var(--color-text-muted)' } })), photos.length > 1 && /*#__PURE__*/React.createElement("button", { className: "lightbox-nav next", onClick: e => { e.stopPropagation(); setLightbox(lightbox === photos.length - 1 ? 0 : lightbox + 1); } }, /*#__PURE__*/React.createElement(Icon, { name: "chevronRight", size: 24 })), /*#__PURE__*/React.createElement("div", { className: "lightbox-info", onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-lg)', fontWeight: 'var(--font-weight-semibold)' } }, "Foto ", lightbox + 1, " von ", photos.length), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-sm)', opacity: 0.7 } }, catLabel(photos[lightbox].category), photos[lightbox].isMain ? ' · Hauptfoto' : ''))), showRetusche && /*#__PURE__*/React.createElement("div", { className: "modal-overlay", onClick: () => setShowRetusche(null) }, /*#__PURE__*/React.createElement("div", { className: "modal", onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement("div", { className: "modal-header" }, /*#__PURE__*/React.createElement("h3", { style: { fontSize: 'var(--font-size-lg)', fontWeight: 'var(--font-weight-semibold)' } }, /*#__PURE__*/React.createElement(Icon, { name: "sparkles", size: 20 }), " KI-Bildretusche"), /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => setShowRetusche(null) }, /*#__PURE__*/React.createElement(Icon, { name: "close", size: 20 }))), /*#__PURE__*/React.createElement("div", { className: "modal-body" }, /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)', color: 'var(--color-text-secondary)', marginBottom: 'var(--space-4)' } }, "Waehlen Sie eine Retusche-Option. Verarbeitung via OpenRouter Flux.1-Pro."), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--space-3)' } }, [{ id: 'bg', icon: 'image', label: 'Hintergrund entfernen', desc: 'Ersetzt Hintergrund durch neutrale Farbe' }, { id: 'reflections', icon: 'sparkles', label: 'Spiegelungen retuschieren', desc: 'Reduziert Reflexionen auf der Fahrzeugoberflaeche' }, { id: 'brightness', icon: 'sun', label: 'Helligkeit optimieren', desc: 'Passt Belichtung und Kontrast an' }].map(opt => /*#__PURE__*/React.createElement("div", { key: opt.id, className: `retusche-option ${retuscheOption === opt.id ? 'selected' : ''}`, onClick: () => setRetuscheOption(opt.id) }, /*#__PURE__*/React.createElement("div", { className: "retusche-option-icon" }, /*#__PURE__*/React.createElement(Icon, { name: opt.icon, size: 20 })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-medium)' } }, opt.label), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, opt.desc)))))), /*#__PURE__*/React.createElement("div", { className: "modal-footer" }, /*#__PURE__*/React.createElement(Button, { variant: "secondary", onClick: () => setShowRetusche(null) }, "Abbrechen"), /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "sparkles", disabled: !retuscheOption || retuscheLoading, onClick: handleRetusche }, retuscheLoading ? 'Verarbeite...' : 'Retusche starten')))), deleteConfirm && /*#__PURE__*/React.createElement("div", { className: "modal-overlay", onClick: () => setDeleteConfirm(null) }, /*#__PURE__*/React.createElement("div", { className: "modal", onClick: e => e.stopPropagation(), style: { maxWidth: 400 } }, /*#__PURE__*/React.createElement("div", { className: "modal-header" }, /*#__PURE__*/React.createElement("h3", { style: { fontSize: 'var(--font-size-lg)' } }, "Foto loeschen?")), /*#__PURE__*/React.createElement("div", { className: "modal-body" }, /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)' } }, "Foto wirklich loeschen? Nicht rueckgaengig machbar.")), /*#__PURE__*/React.createElement("div", { className: "modal-footer" }, /*#__PURE__*/React.createElement(Button, { variant: "secondary", onClick: () => setDeleteConfirm(null) }, "Abbrechen"), /*#__PURE__*/React.createElement(Button, { variant: "danger", icon: "trash", onClick: () => deletePhoto(deleteConfirm) }, "Loeschen"))))); }; // ============ SIDEBAR + TOPBAR ============ const Sidebar = ({ route, navigate, role }) => { const navItems = [{ section: 'nav.main', items: [{ id: '/dashboard', icon: 'dashboard', label: 'nav.dashboard', roles: ['admin', 'verkaeufer', 'buchhaltung'] }, { id: '/fahrzeuge', icon: 'truck', label: 'nav.fahrzeuge', roles: ['admin', 'verkaeufer', 'buchhaltung'] }, { id: '/kontakte', icon: 'contacts', label: 'nav.kontakte', roles: ['admin', 'verkaeufer', 'buchhaltung'] }, { id: '/verkauf', icon: 'sale', label: 'nav.verkauf', roles: ['admin', 'verkaeufer', 'buchhaltung'] }] }, { section: 'nav.ki', items: [{ id: '/ki-copilot', icon: 'ai', label: 'nav.ki-copilot', roles: ['admin', 'verkaeufer', 'buchhaltung'] }] }, { section: 'nav.verwaltung', items: [{ id: '/einstellungen', icon: 'settings', label: 'nav.einstellungen', roles: ['admin'] }] }]; const isActive = id => route === id || id !== '/dashboard' && route.startsWith(id); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: "sidebar-overlay", onClick: () => closeSidebar() }), /*#__PURE__*/React.createElement("aside", { className: "sidebar", role: "navigation" }, /*#__PURE__*/React.createElement("div", { className: "sidebar-header" }, /*#__PURE__*/React.createElement("div", { className: "sidebar-logo" }, "NF"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { className: "sidebar-title" }, "Nutzfahrzeug-ERP"), /*#__PURE__*/React.createElement("div", { className: "sidebar-subtitle" }, "Handelsverwaltung"))), /*#__PURE__*/React.createElement("nav", { className: "sidebar-nav" }, navItems.map((section, si) => /*#__PURE__*/React.createElement("div", { key: si, className: "sidebar-nav-section" }, /*#__PURE__*/React.createElement("div", { className: "sidebar-nav-label" }, t(section.section)), section.items.map(item => item.roles.includes(role) ? /*#__PURE__*/React.createElement("a", { key: item.id, href: `#${item.id}`, className: `sidebar-nav-item ${isActive(item.id) ? 'active' : ''}`, onClick: () => closeSidebar() }, /*#__PURE__*/React.createElement(Icon, { name: item.icon, size: 18 }), /*#__PURE__*/React.createElement("span", null, t(item.label))) : null)))), /*#__PURE__*/React.createElement("div", { className: "sidebar-footer" }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-3)', padding: 'var(--space-2) var(--space-3)' } }, /*#__PURE__*/React.createElement(Avatar, { name: "Max Mustermann" }), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-sm)', fontWeight: 'var(--font-weight-medium)' } }, "Max Mustermann"), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, role === 'admin' ? 'Administrator' : role === 'verkaeufer' ? 'Verkaeufer' : 'Buchhaltung')))))); }; const Topbar = ({ route, role, setRole, navigate }) => { const [showProfile, setShowProfile] = useState(false); const routeLabels = { '/dashboard': 'nav.dashboard', '/fahrzeuge': 'nav.fahrzeuge', '/fahrzeuge/neu': 'nav.fahrzeuge.neu', '/kontakte': 'nav.kontakte', '/verkauf': 'nav.verkauf', '/ki-copilot': 'nav.ki-copilot', '/einstellungen': 'nav.einstellungen' }; const currentLabel = routeLabels[route] || routeLabels[route.split('/').slice(0, 2).join('/')] || 'nav.dashboard'; return /*#__PURE__*/React.createElement("header", { className: "topbar" }, /*#__PURE__*/React.createElement("button", { className: "mobile-menu-btn", onClick: toggleSidebar }, /*#__PURE__*/React.createElement(Icon, { name: "menu", size: 24 })), /*#__PURE__*/React.createElement("div", { className: "topbar-breadcrumb" }, /*#__PURE__*/React.createElement("span", null, t('nav.main')), /*#__PURE__*/React.createElement(Icon, { name: "chevronRight", size: 14 }), /*#__PURE__*/React.createElement("span", { className: "current" }, t(currentLabel))), /*#__PURE__*/React.createElement("div", { className: "topbar-actions" }, /*#__PURE__*/React.createElement("div", { className: "lang-switcher", style: { display: 'flex', gap: 'var(--space-1)' } }, /*#__PURE__*/React.createElement("button", { className: `btn btn-ghost btn-sm ${currentLang === 'de' ? 'active' : ''}`, onClick: () => setLang('de'), style: { fontWeight: currentLang === 'de' ? 'bold' : 'normal' } }, "DE"), /*#__PURE__*/React.createElement("button", { className: `btn btn-ghost btn-sm ${currentLang === 'en' ? 'active' : ''}`, onClick: () => setLang('en'), style: { fontWeight: currentLang === 'en' ? 'bold' : 'normal' } }, "EN")), /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: toggleDarkMode }, /*#__PURE__*/React.createElement(Icon, { name: darkMode ? 'sun' : 'moon', size: 18 })), /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "bell", size: 18 })), /*#__PURE__*/React.createElement("div", { style: { position: 'relative' } }, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => setShowProfile(!showProfile), style: { gap: 'var(--space-2)' } }, /*#__PURE__*/React.createElement(Avatar, { name: "Max Mustermann" }), /*#__PURE__*/React.createElement(Icon, { name: "chevronDown", size: 14 })), showProfile && /*#__PURE__*/React.createElement("div", { style: { position: 'absolute', right: 0, top: '100%', marginTop: 'var(--space-2)', background: 'var(--color-surface)', border: '1px solid var(--color-border)', borderRadius: 'var(--radius-lg)', boxShadow: 'var(--shadow-lg)', minWidth: 200, zIndex: 'var(--z-dropdown)', overflow: 'hidden' } }, /*#__PURE__*/React.createElement("div", { style: { padding: 'var(--space-3) var(--space-4)', borderBottom: '1px solid var(--color-border)' } }, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-semibold)', fontSize: 'var(--font-size-sm)' } }, "Max Mustermann"), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, "max@nf-handel.de")), /*#__PURE__*/React.createElement("div", { style: { padding: 'var(--space-3) var(--space-4)' } }, /*#__PURE__*/React.createElement("div", { className: "label" }, "Rolle"), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-1)', marginTop: 'var(--space-2)' } }, ['admin', 'verkaeufer', 'buchhaltung'].map(r => /*#__PURE__*/React.createElement("button", { key: r, className: `btn btn-sm ${role === r ? 'btn-primary' : 'btn-secondary'}`, onClick: () => { setRole(r); setShowProfile(false); }, style: { fontSize: 'var(--font-size-xs)' } }, r === 'admin' ? 'Admin' : r === 'verkaeufer' ? 'Verkaeufer' : 'Buchhaltung')))), /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost", style: { width: '100%', justifyContent: 'flex-start', borderRadius: 0 }, onClick: () => navigate('/einstellungen') }, /*#__PURE__*/React.createElement(Icon, { name: "settings", size: 16 }), " ", t('nav.einstellungen')))))); }; // ============ MOCK DATA ============ const mockVehicles = [{ id: 1, marke: 'Mercedes-Benz', modell: 'Actros 1845 LS', fin: 'WDB9066351L123456', baujahr: 2019, erstzulassung: '2019-03-15', kmStand: 150000, betriebsstunden: null, leistungKw: 330, leistungPs: 449, kraftstoff: 'Diesel', getriebe: 'Automatik', farbe: 'Weiss', zustand: 'Gebraucht', standort: 'Muenchen', preis: 45000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'gelistet', typ: 'lkw', hsn: '0911', tsn: 'AAM', egTyp: 'e1*2007/46*0514*12', lkwTyp: 'Sattelzugmaschine', aufbau: '3-Achs Sattelzug', abgasnorm: 'Euro 6', bereifung: '315/70 R22.5', achsen: '3', laenge: 6150, breite: 2500, hoehe: 3950, leergewicht: 8500, Gesamtgewicht: 19000, hubraum: 14801, vorbesitzer: 1, unfallschaeden: false, tuev: '03.2027', serviceIntervall: 150000, letzterService: '01.2026', beschreibung: 'Top gepflegter Actros, Euro 6, 1. Hand', lkwBordgeraet: true, lkwHubwerk: false, lkwLadebordwand: false, lkwKlima: true, lkwSchlafplatz: true, lkwHydraulik: false, anhaengelast: 40000, kuppellast: 15000 }, { id: 2, marke: 'MAN', modell: 'TGL 12.180', fin: 'WMAUYYT1XPA123456', baujahr: 2018, erstzulassung: '2018-06-20', kmStand: 120000, betriebsstunden: null, leistungKw: 132, leistungPs: 180, kraftstoff: 'Diesel', getriebe: 'Manuell', farbe: 'Blau', zustand: 'Gebraucht', standort: 'Muenchen', preis: 29500, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'gelistet', typ: 'lkw', hsn: '0846', tsn: 'ABJ', lkwTyp: 'Kastenwagen', aufbau: 'Kuehlkoffer', abgasnorm: 'Euro 6', bereifung: '265/70 R19.5', achsen: '2', laenge: 7200, breite: 2100, hoehe: 2900, leergewicht: 4500, Gesamtgewicht: 12000, hubraum: 4880, vorbesitzer: 2, unfallschaeden: false, tuev: '06.2026', serviceIntervall: 100000, letzterService: '10.2025', beschreibung: 'MAN TGL mit Kuehlkoffer, tempiert bis +2°C', lkwBordgeraet: false, lkwHubwerk: false, lkwLadebordwand: true, lkwKlima: true, lkwSchlafplatz: false, lkwHydraulik: false, anhaengelast: 8000, kuppellast: 750 }, { id: 3, marke: 'BMW', modell: 'X5 xDrive30d', fin: 'WBAJA9C50K8123456', baujahr: 2023, erstzulassung: '2023-05-20', kmStand: 25000, betriebsstunden: null, leistungKw: 195, leistungPs: 265, kraftstoff: 'Diesel', getriebe: 'Automatik', farbe: 'Schwarz Metallic', zustand: 'Jahreswagen', standort: 'Muenchen', preis: 52000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'gelistet', typ: 'pkw', hsn: '0511', tsn: 'CZ1', egTyp: 'e1*2007/46*1812*18', pkwKlasse: 'Oberklasse', pkwKarosserie: 'SUV', pkwTueren: '5', pkwSitze: '5', pkwHubraum: 2993, pkwAntrieb: 'Allrad', pkwVerbrauch: '7.2', pkwCo2: 189, pkwUmwelt: 'gruen', pkwReifen: '275/45 R20', pkwAusstattung: ['Klimaautomatik', 'Navigation', 'Tempomat', 'Sitzheizung', 'LED-Matrix', 'Head-Up-Display'], abgasnorm: 'Euro 6', vorbesitzer: 1, unfallschaeden: false, tuev: '05.2025', serviceIntervall: 30000, letzterService: '03.2026', laenge: 4922, breite: 2004, hoehe: 1776, leergewicht: 2095, Gesamtgewicht: 2670, beschreibung: 'BMW X5 xDrive30d, Jahreswagen, M-Sportpaket' }, { id: 4, marke: 'Volkswagen', modell: 'Golf 8 2.0 TDI', fin: 'WVWZZZ1KZ8W123456', baujahr: 2022, erstzulassung: '2022-03-10', kmStand: 45000, betriebsstunden: null, leistungKw: 147, leistungPs: 200, kraftstoff: 'Diesel', getriebe: 'DSG', farbe: 'Grau', zustand: 'Gebraucht', standort: 'Muenchen', preis: 28000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'gelistet', typ: 'pkw', hsn: '0600', tsn: 'BMR', pkwKlasse: 'Kompaktklasse', pkwKarosserie: 'Hatchback', pkwTueren: '5', pkwSitze: '5', pkwHubraum: 1968, pkwAntrieb: 'Front', pkwVerbrauch: '5.1', pkwCo2: 134, pkwUmwelt: 'gruen', pkwReifen: '225/45 R17', pkwAusstattung: ['Klimaautomatik', 'Navigation', 'Tempomat', 'Spurhalteassistent'], abgasnorm: 'Euro 6', vorbesitzer: 1, unfallschaeden: false, tuev: '03.2024', serviceIntervall: 30000, letzterService: '01.2026', laenge: 4284, breite: 1789, hoehe: 1456, leergewicht: 1420, Gesamtgewicht: 1910, beschreibung: 'VW Golf 8 2.0 TDI DSG, Style' }, { id: 5, marke: 'Liebherr', modell: 'R 926 Crawler', fin: 'LIR92620201234567', baujahr: 2020, erstzulassung: null, kmStand: null, betriebsstunden: 3200, leistungKw: 150, leistungPs: 204, kraftstoff: 'Diesel', getriebe: 'Hydrostat', farbe: 'Gelb', zustand: 'Gebraucht', standort: 'Berlin', preis: 89000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'nicht_gelistet', typ: 'baumaschine', art: 'Bagger', aufbau: 'Hydraulikbagger 26t', bsEinheit: 'h', abgasnorm: 'Euro 5', vorbesitzer: 1, unfallschaeden: false, beschreibung: 'Liebherr R 926, 26t Raupenbagger' }, { id: 6, marke: 'Toyota', modell: '8FBE20 Elektrostapler', fin: 'TOY8FBE20220123456', baujahr: 2022, erstzulassung: null, kmStand: null, betriebsstunden: 1850, leistungKw: 4.5, leistungPs: 6, kraftstoff: 'Elektro', getriebe: 'Stufenlos', farbe: 'Orange', zustand: 'Gebraucht', standort: 'Berlin', preis: 18500, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'nicht_gelistet', typ: 'stapler', abgasnorm: 'Keine', staplerTrag: 2000, staplerHubhoehe: 4500, staplerBauhoehe: 2230, staplerMast: 'Dreisteg', staplerAntrieb: 'Elektro', staplerBatterieKwh: 12.5, staplerBatterieTyp: 'Lithium-Ion', staplerReifen: 'Superelastik', staplerLastschwerpunkt: 500, staplerFahrkomponente: 'Stapler', beschreibung: 'Toyota 8FBE20 Elektro-Gabelstapler, 2t' }, { id: 7, marke: 'Scania', modell: 'R 500 Highline', fin: 'SCNR5002019123456', baujahr: 2019, erstzulassung: '2019-08-05', kmStand: 210000, betriebsstunden: null, leistungKw: 368, leistungPs: 500, kraftstoff: 'Diesel', getriebe: 'Automatik', farbe: 'Rot', zustand: 'Gebraucht', standort: 'Muenchen', preis: 38000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'fehler', typ: 'lkw', hsn: '0856', tsn: 'CKL', lkwTyp: 'Sattelzugmaschine', aufbau: '2-Achs Sattelzug', abgasnorm: 'Euro 6', bereifung: '315/70 R22.5', achsen: '2', laenge: 5800, breite: 2500, hoehe: 3800, leergewicht: 7500, Gesamtgewicht: 18000, hubraum: 16400, vorbesitzer: 2, unfallschaeden: true, tuev: '08.2026', lkwBordgeraet: true, lkwKlima: true, lkwSchlafplatz: true, anhaengelast: 40000, kuppellast: 15000, beschreibung: 'Scania R 500 Highline, V8, G410 Retarder' }, { id: 8, marke: 'Linde', modell: 'H25D Dieselsappler', fin: 'LINH25D20211234567', baujahr: 2021, erstzulassung: null, kmStand: null, betriebsstunden: 3200, leistungKw: 36, leistungPs: 49, kraftstoff: 'Diesel', getriebe: 'Stufenlos', farbe: 'Gelb', zustand: 'Gebraucht', standort: 'Koeln', preis: 28000, verfuegbarkeit: 'verfuegbar', mobiledeStatus: 'nicht_gelistet', typ: 'stapler', abgasnorm: 'Euro 5', staplerTrag: 2500, staplerHubhoehe: 3000, staplerBauhoehe: 1990, staplerMast: 'Zweisteg', staplerAntrieb: 'Diesel', staplerBatterieKwh: null, staplerBatterieTyp: null, staplerReifen: 'Vollgummi', staplerLastschwerpunkt: 500, staplerFahrkomponente: 'Stapler', beschreibung: 'Linde H25D Dieselstapler, 2.5t' }]; const mockContactsKaeufer = [{ id: 1, firmenname: 'Mueller Transport GmbH', ansprechpartner: 'Thomas Mueller', email: 't.mueller@mueller-transport.de', telefon: '+49 89 1234567', land: 'Deutschland', ustId: 'DE123456789', ustStatus: 'geprueft', rolle: 'kaeufer', adresse: 'Ludwigstrasse 45, 80336 Muenchen' }, { id: 2, firmenname: 'Bauer Bauunternehmen GmbH', ansprechpartner: 'Klaus Bauer', email: 'k.bauer@bauer-bau.de', telefon: '+49 30 9876543', land: 'Deutschland', ustId: 'DE987654321', ustStatus: 'geprueft', rolle: 'kaeufer', adresse: 'Alexanderplatz 5, 10178 Berlin' }, { id: 4, firmenname: 'Van den Berg Logistics B.V.', ansprechpartner: 'Jan van den Berg', email: 'j.vandenberg@vdberg.nl', telefon: '+31 20 123 4567', land: 'Niederlande', ustId: 'NL123456789B01', ustStatus: 'manuell_best', rolle: 'kaeufer', adresse: 'Keizersgracht 100, 1015 Amsterdam' }]; const mockContactsVerkaeufer = [{ id: 3, firmenname: 'TransLog AG', ansprechpartner: 'Peter Schneider', email: 'p.schneider@translog.ch', telefon: '+41 44 555 1234', land: 'Schweiz', ustId: '', ustStatus: 'ungeprueft', rolle: 'verkaeufer', adresse: 'Bahnhofstrasse 12, 8001 Zuerich' }, { id: 5, firmenname: 'Schmidt Baumaschinen GmbH', ansprechpartner: 'Andrea Schmidt', email: 'a.schmidt@schmidt-baumaschinen.de', telefon: '+49 221 555 7890', land: 'Deutschland', ustId: 'DE555444333', ustStatus: 'geprueft', rolle: 'beides', adresse: 'Hohe Strasse 30, 50667 Koeln' }]; const statusBadge = s => { const m = { verfuegbar: { v: 'success', l: t('fb.verfuegbar') }, reserviert: { v: 'warning', l: t('fb.reserviert') }, verkauft: { v: 'neutral', l: t('fb.verkauft') } }; const c = m[s] || m.verfuegbar; return /*#__PURE__*/React.createElement(Badge, { variant: c.v }, c.l); }; const mobiledeBadge = s => { const m = { gelistet: { v: 'success', l: t('fb.gelistet') }, nicht_gelistet: { v: 'neutral', l: t('fb.nicht_gelistet') }, fehler: { v: 'error', l: t('fb.fehler') }, entfernt: { v: 'neutral', l: 'Entfernt' } }; const c = m[s] || m.nicht_gelistet; return /*#__PURE__*/React.createElement(Badge, { variant: c.v }, c.l); }; const typIcon = typ => typ === 'baumaschine' ? 'wrench' : typ === 'pkw' ? 'car' : typ === 'stapler' ? 'forklift' : 'truck'; const typLabel = typ => typ === 'lkw' ? 'LKW' : typ === 'baumaschine' ? 'Baumaschine' : typ === 'pkw' ? 'PKW' : typ === 'stapler' ? 'Stapler' : 'Transporter'; // ============ DASHBOARD (v4 configurable) ============ const DashboardView = ({ navigate, role }) => { const [widgets, setWidgets] = useState(() => { const saved = localStorage.getItem('erp-dashboard-widgets'); if (saved) try { return JSON.parse(saved); } catch (e) {} return { kpis: true, quickActions: true, activities: true, tasks: true, topVehicles: true }; }); const [showConfig, setShowConfig] = useState(false); const saveWidgets = w => { setWidgets(w); localStorage.setItem('erp-dashboard-widgets', JSON.stringify(w)); }; const toggleWidget = key => saveWidgets({ ...widgets, [key]: !widgets[key] }); const kpis = [{ label: 'dash.fahrzeuge_im_bestand', value: '52', trend: '+5 diesen Monat', trendDir: 'up', icon: 'truck', color: 'primary' }, { label: 'dash.verkaufe_diesen_monat', value: '14', trend: '+20% vs. Vormonat', trendDir: 'up', icon: 'sale', color: 'success' }, { label: 'dash.offene_tasks', value: '8', trend: '3 ueberfaellig', trendDir: 'down', icon: 'clock', color: 'warning' }, { label: 'dash.mobilede_sync', value: '35/52', trend: '17 nicht gelistet', trendDir: 'down', icon: 'sync', color: 'info' }]; const recentActivities = [{ type: 'sale', text: 'Mercedes Actros an Mueller GmbH verkauft', time: 'vor 2 Std' }, { type: 'add', text: 'Neues Fahrzeug: BMW X5 xDrive30d (PKW)', time: 'vor 4 Std' }, { type: 'add', text: 'Neuer Stapler: Toyota 8FBE20 Elektrostapler', time: 'vor 5 Std' }, { type: 'sync', text: 'mobile.de Sync: 5 Fahrzeuge aktualisiert', time: 'vor 6 Std' }, { type: 'edit', text: 'Preis aktualisiert: MAN TGL - 32.000 -> 29.500', time: 'vor 1 Tag' }]; const upcomingTasks = [{ task: 'USt-IdNr.-Pruefung fuer Mueller GmbH (EU-Ausland)', due: '15.07.2026', priority: 'high' }, { task: 'Kaufvertrag: Volvo FH16 an Bauer GmbH', due: '16.07.2026', priority: 'high' }, { task: 'DATEV-Export fuer Juni 2026', due: '20.07.2026', priority: 'medium' }, { task: 'Fahrzeugfotos nachretuschieren (3 Fahrzeuge)', due: '22.07.2026', priority: 'low' }]; return /*#__PURE__*/React.createElement("div", { style: { position: 'relative' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 'var(--space-6)', flexWrap: 'wrap', gap: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('dash.title')), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)', marginTop: 'var(--space-1)' } }, "Willkommen zurueck, Max!")), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)' } }, /*#__PURE__*/React.createElement(Button, { variant: "ghost", icon: "config", onClick: () => setShowConfig(true), title: "Dashboard konfigurieren" }), /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => navigate('/fahrzeuge/neu'), className: "hide-mobile" }, t('dash.neues_fahrzeug')))), widgets.kpis && /*#__PURE__*/React.createElement("div", { className: "kpi-grid", style: { marginBottom: 'var(--space-6)' } }, kpis.map((k, i) => /*#__PURE__*/React.createElement(KpiCard, { key: i, ...k }))), widgets.quickActions && /*#__PURE__*/React.createElement(Card, { title: t('dash.schnellzugriffe'), className: "hide-mobile", style: { marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-4)', flexWrap: 'wrap' } }, /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => navigate('/fahrzeuge/neu') }, t('dash.neues_fahrzeug')), /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "sale", onClick: () => navigate('/verkauf') }, t('dash.neuer_verkauf')), /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "ai", onClick: () => navigate('/ki-copilot') }, t('dash.ki_copilot')), /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "calendar", onClick: () => navigate('/verkauf') }, "Verkaufskalender"))), /*#__PURE__*/React.createElement("div", { className: "two-col", style: { marginBottom: 'var(--space-6)' } }, widgets.activities && /*#__PURE__*/React.createElement(Card, { title: t('dash.letzte_aktivitaeten') }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--space-4)' } }, recentActivities.map((act, i) => /*#__PURE__*/React.createElement("div", { key: i, style: { display: 'flex', gap: 'var(--space-3)', alignItems: 'flex-start' } }, /*#__PURE__*/React.createElement("div", { style: { width: 32, height: 32, borderRadius: 'var(--radius-md)', flexShrink: 0, background: act.type === 'sale' ? 'var(--color-success-light)' : act.type === 'add' ? 'var(--color-primary-light)' : act.type === 'sync' ? 'var(--color-info-light)' : 'var(--color-warning-light)', color: act.type === 'sale' ? 'var(--color-success)' : act.type === 'add' ? 'var(--color-primary)' : act.type === 'sync' ? 'var(--color-info)' : 'var(--color-warning)', display: 'flex', alignItems: 'center', justifyContent: 'center' } }, /*#__PURE__*/React.createElement(Icon, { name: act.type === 'sale' ? 'sale' : act.type === 'add' ? 'plus' : act.type === 'sync' ? 'sync' : 'edit', size: 16 })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-sm)', fontWeight: 'var(--font-weight-medium)' } }, act.text), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, act.time)))))), widgets.tasks && /*#__PURE__*/React.createElement(Card, { title: t('dash.bevorstehende_tasks') }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--space-3)' } }, upcomingTasks.map((task, i) => /*#__PURE__*/React.createElement("div", { key: i, style: { display: 'flex', alignItems: 'center', gap: 'var(--space-3)', padding: 'var(--space-3)', borderRadius: 'var(--radius-md)', border: '1px solid var(--color-border)' } }, /*#__PURE__*/React.createElement(Badge, { variant: task.priority === 'high' ? 'error' : task.priority === 'medium' ? 'warning' : 'neutral' }, task.priority === 'high' ? 'Hoch' : task.priority === 'medium' ? 'Mittel' : 'Niedrig'), /*#__PURE__*/React.createElement("div", { style: { flex: 1, fontSize: 'var(--font-size-sm)' } }, task.task), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)', whiteSpace: 'nowrap' } }, /*#__PURE__*/React.createElement(Icon, { name: "calendar", size: 14 }), " ", task.due)))))), widgets.topVehicles && /*#__PURE__*/React.createElement(Card, { title: t('dash.top_fahrzeuge') }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Marke"), /*#__PURE__*/React.createElement("th", null, "FIN"), /*#__PURE__*/React.createElement("th", null, "Anfragen"), /*#__PURE__*/React.createElement("th", null, "Preis"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", { onClick: () => navigate('/fahrzeug/1'), style: { cursor: 'pointer' } }, /*#__PURE__*/React.createElement("td", null, "Mercedes Actros 2019"), /*#__PURE__*/React.createElement("td", { style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, "WDB9066351L123456"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "24")), /*#__PURE__*/React.createElement("td", null, "45.000")), /*#__PURE__*/React.createElement("tr", { onClick: () => navigate('/fahrzeug/3'), style: { cursor: 'pointer' } }, /*#__PURE__*/React.createElement("td", null, "BMW X5 xDrive30d"), /*#__PURE__*/React.createElement("td", { style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, "WBAJA9C50K8123456"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "18")), /*#__PURE__*/React.createElement("td", null, "52.000")), /*#__PURE__*/React.createElement("tr", { onClick: () => navigate('/fahrzeug/5'), style: { cursor: 'pointer' } }, /*#__PURE__*/React.createElement("td", null, "Liebherr R 926"), /*#__PURE__*/React.createElement("td", { style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, "LIR92620201234567"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "12")), /*#__PURE__*/React.createElement("td", null, "89.000"))))), showConfig && /*#__PURE__*/React.createElement("div", { className: "modal-overlay", onClick: () => setShowConfig(false) }, /*#__PURE__*/React.createElement("div", { className: "modal", onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement("div", { className: "modal-header" }, /*#__PURE__*/React.createElement("h3", { style: { fontSize: 'var(--font-size-lg)', fontWeight: 'var(--font-weight-semibold)' } }, /*#__PURE__*/React.createElement(Icon, { name: "config", size: 20 }), " Dashboard konfigurieren"), /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => setShowConfig(false) }, /*#__PURE__*/React.createElement(Icon, { name: "close", size: 20 }))), /*#__PURE__*/React.createElement("div", { className: "modal-body" }, /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)', color: 'var(--color-text-secondary)', marginBottom: 'var(--space-4)' } }, "Widgets ein-/ausblenden. Konfiguration wird pro Benutzer gespeichert."), [{ key: 'kpis', label: 'KPI-Kennzahlen' }, { key: 'quickActions', label: 'Schnellzugriffe' }, { key: 'activities', label: 'Letzte Aktivitaeten' }, { key: 'tasks', label: 'Bevorstehende Tasks' }, { key: 'topVehicles', label: 'Top-Fahrzeuge' }].map(item => /*#__PURE__*/React.createElement("div", { key: item.key, className: "config-item" }, /*#__PURE__*/React.createElement("span", { className: "config-item-label" }, item.label), /*#__PURE__*/React.createElement("div", { className: `toggle ${widgets[item.key] ? 'active' : ''}`, onClick: () => toggleWidget(item.key) })))), /*#__PURE__*/React.createElement("div", { className: "modal-footer" }, /*#__PURE__*/React.createElement(Button, { variant: "primary", onClick: () => setShowConfig(false) }, "Fertig"))))); }; // ============ FAHRZEUG LISTE ============ const FahrzeugListe = ({ navigate, role }) => { const [search, setSearch] = useState(''); const [filterType, setFilterType] = useState('alle'); const [filterStatus, setFilterStatus] = useState('alle'); const [sortBy, setSortBy] = useState('marke'); const [sortDir, setSortDir] = useState('asc'); const [view, setView] = useState('table'); const [page, setPage] = useState(1); const perPage = 10; const filtered = useMemo(() => { let r = mockVehicles.filter(v => { const ms = !search || v.marke.toLowerCase().includes(search.toLowerCase()) || v.modell.toLowerCase().includes(search.toLowerCase()) || v.fin.toLowerCase().includes(search.toLowerCase()) || (v.hsn || '').includes(search); const mt = filterType === 'alle' || v.typ === filterType; const mst = filterStatus === 'alle' || v.verfuegbarkeit === filterStatus; return ms && mt && mst; }); r.sort((a, b) => { const av = a[sortBy] || '', bv = b[sortBy] || ''; if (typeof av === 'number') return sortDir === 'asc' ? av - bv : bv - av; return sortDir === 'asc' ? String(av).localeCompare(String(bv)) : String(bv).localeCompare(String(av)); }); return r; }, [search, filterType, filterStatus, sortBy, sortDir]); const totalPages = Math.ceil(filtered.length / perPage); const pageData = filtered.slice((page - 1) * perPage, page * perPage); const handleSort = col => { if (sortBy === col) setSortDir(sortDir === 'asc' ? 'desc' : 'asc');else { setSortBy(col); setSortDir('asc'); } }; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 'var(--space-6)', flexWrap: 'wrap', gap: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('fb.title')), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)' } }, filtered.length, " ", t('common.eintraege'))), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)', alignItems: 'center' } }, /*#__PURE__*/React.createElement(ViewToggle, { view: view, onChange: setView }), /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "download", className: "hide-mobile" }, "Export"), role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => navigate('/fahrzeuge/neu') }, t('fb.add_new')))), /*#__PURE__*/React.createElement(Card, { style: { marginBottom: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-4)', flexWrap: 'wrap', alignItems: 'flex-end' } }, /*#__PURE__*/React.createElement("div", { style: { flex: '1 1 300px' } }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Suche (Marke, Modell, FIN, HSN)"), /*#__PURE__*/React.createElement("div", { style: { position: 'relative' } }, /*#__PURE__*/React.createElement(Icon, { name: "search", size: 16, style: { position: 'absolute', left: 'var(--space-3)', top: '50%', transform: 'translateY(-50%)', color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("input", { className: "input", style: { paddingLeft: 'var(--space-8)' }, placeholder: t('fb.suche'), value: search, onChange: e => { setSearch(e.target.value); setPage(1); } }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", { className: "label" }, "Typ"), /*#__PURE__*/React.createElement("select", { className: "select", value: filterType, onChange: e => { setFilterType(e.target.value); setPage(1); } }, /*#__PURE__*/React.createElement("option", { value: "alle" }, "Alle"), /*#__PURE__*/React.createElement("option", { value: "lkw" }, "LKW"), /*#__PURE__*/React.createElement("option", { value: "baumaschine" }, "Baumaschine"), /*#__PURE__*/React.createElement("option", { value: "pkw" }, "PKW"), /*#__PURE__*/React.createElement("option", { value: "stapler" }, "Stapler"), /*#__PURE__*/React.createElement("option", { value: "transporter" }, "Transporter"))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", { className: "label" }, "Status"), /*#__PURE__*/React.createElement("select", { className: "select", value: filterStatus, onChange: e => { setFilterStatus(e.target.value); setPage(1); } }, /*#__PURE__*/React.createElement("option", { value: "alle" }, "Alle"), /*#__PURE__*/React.createElement("option", { value: "verfuegbar" }, "Verfuegbar"), /*#__PURE__*/React.createElement("option", { value: "reserviert" }, "Reserviert"), /*#__PURE__*/React.createElement("option", { value: "verkauft" }, "Verkauft"))), /*#__PURE__*/React.createElement(Button, { variant: "ghost", icon: "close", onClick: () => { setSearch(''); setFilterType('alle'); setFilterStatus('alle'); } }, "Reset"))), pageData.length === 0 ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement(EmptyState, { icon: "truck", title: "Keine Fahrzeuge", text: "Legen Sie Ihr erstes Fahrzeug an.", action: role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => navigate('/fahrzeuge/neu') }, "Fahrzeug hinzufuegen") })) : view === 'table' ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement("div", { style: { overflowX: 'auto' } }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", { className: sortBy === 'marke' ? 'sorted' : '', onClick: () => handleSort('marke') }, "Marke"), /*#__PURE__*/React.createElement("th", null, "Modell"), /*#__PURE__*/React.createElement("th", null, "FIN"), /*#__PURE__*/React.createElement("th", null, "Baujahr"), /*#__PURE__*/React.createElement("th", { className: "hide-mobile" }, "KM/h"), /*#__PURE__*/React.createElement("th", { className: sortBy === 'preis' ? 'sorted' : '', onClick: () => handleSort('preis') }, "Preis"), /*#__PURE__*/React.createElement("th", null, "Typ"), /*#__PURE__*/React.createElement("th", null, "Status"), /*#__PURE__*/React.createElement("th", { className: "hide-mobile" }, "mobile.de"), /*#__PURE__*/React.createElement("th", null, "Aktion"))), /*#__PURE__*/React.createElement("tbody", null, pageData.map(v => /*#__PURE__*/React.createElement("tr", { key: v.id, onClick: () => navigate('/fahrzeug/' + v.id), style: { cursor: 'pointer' } }, /*#__PURE__*/React.createElement("td", { style: { fontWeight: 'var(--font-weight-semibold)' } }, v.marke), /*#__PURE__*/React.createElement("td", null, v.modell), /*#__PURE__*/React.createElement("td", { style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, v.fin), /*#__PURE__*/React.createElement("td", null, v.baujahr), /*#__PURE__*/React.createElement("td", { className: "hide-mobile" }, v.kmStand ? formatNumber(v.kmStand) + ' km' : v.betriebsstunden ? formatNumber(v.betriebsstunden) + ' h' : '-'), /*#__PURE__*/React.createElement("td", { style: { fontWeight: 'var(--font-weight-semibold)' } }, formatPrice(v.preis)), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, typLabel(v.typ))), /*#__PURE__*/React.createElement("td", null, statusBadge(v.verfuegbarkeit)), /*#__PURE__*/React.createElement("td", { className: "hide-mobile" }, mobiledeBadge(v.mobiledeStatus)), /*#__PURE__*/React.createElement("td", { onClick: e => e.stopPropagation() }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-1)' } }, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => navigate('/fahrzeug/' + v.id) }, /*#__PURE__*/React.createElement(Icon, { name: "eye", size: 16 })), role !== 'buchhaltung' && /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => navigate('/fahrzeuge/neu?id=' + v.id) }, /*#__PURE__*/React.createElement(Icon, { name: "edit", size: 16 }))))))))), /*#__PURE__*/React.createElement("div", { className: "pagination" }, /*#__PURE__*/React.createElement("div", { className: "pagination-info" }, (page - 1) * perPage + 1, "-", Math.min(page * perPage, filtered.length), " von ", filtered.length), /*#__PURE__*/React.createElement("div", { className: "pagination-controls" }, /*#__PURE__*/React.createElement("button", { className: "pagination-btn", disabled: page === 1, onClick: () => setPage(page - 1) }, /*#__PURE__*/React.createElement(Icon, { name: "chevronLeft", size: 16 })), Array.from({ length: totalPages }, (_, i) => i + 1).map(p => /*#__PURE__*/React.createElement("button", { key: p, className: `pagination-btn ${page === p ? 'active' : ''}`, onClick: () => setPage(p) }, p)), /*#__PURE__*/React.createElement("button", { className: "pagination-btn", disabled: page === totalPages, onClick: () => setPage(page + 1) }, /*#__PURE__*/React.createElement(Icon, { name: "chevronRight", size: 16 }))))) : /*#__PURE__*/React.createElement("div", { className: "card-grid" }, filtered.map(v => /*#__PURE__*/React.createElement("div", { key: v.id, className: "vehicle-card", onClick: () => navigate('/fahrzeug/' + v.id) }, /*#__PURE__*/React.createElement("div", { className: "vehicle-card-image" }, /*#__PURE__*/React.createElement(Icon, { name: typIcon(v.typ), size: 48, style: { color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("div", { className: "card-status-badge" }, statusBadge(v.verfuegbarkeit))), /*#__PURE__*/React.createElement("div", { className: "vehicle-card-body" }, /*#__PURE__*/React.createElement("div", { className: "vehicle-card-title" }, v.marke, " ", v.modell), /*#__PURE__*/React.createElement("div", { className: "vehicle-card-subtitle" }, "FIN: ", v.fin), /*#__PURE__*/React.createElement("div", { className: "vehicle-card-info" }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Icon, { name: "calendar", size: 12 }), " ", v.baujahr), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, typLabel(v.typ)))), /*#__PURE__*/React.createElement("div", { className: "vehicle-card-meta" }, /*#__PURE__*/React.createElement("div", { className: "vehicle-card-price" }, formatPrice(v.preis)), mobiledeBadge(v.mobiledeStatus))))))); }; // ============ FAHRZEUG DETAIL ============ const FahrzeugDetail = ({ id, navigate, role }) => { const [activeTab, setActiveTab] = useState('allgemein'); const [photos, setPhotos] = useState([{ id: 1, category: 'aussen_front', isMain: true }, { id: 2, category: 'aussen_seite', isMain: false }, { id: 3, category: 'aussen_heck', isMain: false }, { id: 4, category: 'innen_armaturen', isMain: false }]); const vehicle = mockVehicles.find(v => v.id === parseInt(id)); if (!vehicle) return /*#__PURE__*/React.createElement(ErrorState, { title: "Nicht gefunden", text: "Fahrzeug existiert nicht.", onRetry: () => navigate('/fahrzeuge') }); const tabs = [{ id: 'allgemein', label: 'Allgemein' }, { id: 'technisch', label: 'Technisch' }, { id: 'abmessungen', label: 'Abmessungen' }, ...(vehicle.typ === 'baumaschine' ? [{ id: 'baumaschine', label: 'Baumaschine' }] : []), ...(vehicle.typ === 'pkw' ? [{ id: 'pkw', label: 'PKW-Daten' }] : []), ...(vehicle.typ === 'stapler' ? [{ id: 'stapler', label: 'Stapler-Daten' }] : []), ...(vehicle.typ === 'lkw' ? [{ id: 'lkw', label: 'LKW-Daten' }] : []), { id: 'verkaufsinfo', label: 'Verkaufsinfo' }, { id: 'dokumente', label: 'Dokumente' }, { id: 'fotos', label: 'Fotos' }, { id: 'mobilede', label: 'mobile.de' }]; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-4)', marginBottom: 'var(--space-6)', flexWrap: 'wrap' } }, /*#__PURE__*/React.createElement(Button, { variant: "ghost", icon: "chevronLeft", onClick: () => navigate('/fahrzeuge') }, t('fd.zurueck')), /*#__PURE__*/React.createElement("div", { style: { flex: 1 } }, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, vehicle.marke, " ", vehicle.modell), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)', fontFamily: 'var(--font-mono)' } }, "FIN: ", vehicle.fin, " · HSN: ", vehicle.hsn || '-', " · TSN: ", vehicle.tsn || '-')), role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "edit", onClick: () => navigate('/fahrzeuge/neu?id=' + vehicle.id) }, "Bearbeiten"), role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "sale", onClick: () => navigate('/verkauf?vehicle=' + vehicle.id) }, "Verkaufen")), /*#__PURE__*/React.createElement("div", { className: "tabs" }, tabs.map(tab => /*#__PURE__*/React.createElement("div", { key: tab.id, className: `tab ${activeTab === tab.id ? 'active' : ''}`, onClick: () => setActiveTab(tab.id) }, tab.label))), activeTab === 'allgemein' && /*#__PURE__*/React.createElement(Card, { title: "Allgemein" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Marke"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.marke)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Modell"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.modell)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "FIN"), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontFamily: 'var(--font-mono)' } }, vehicle.fin)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Baujahr"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.baujahr)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Erstzulassung"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.erstzulassung ? formatDate(vehicle.erstzulassung) : '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Farbe"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.farbe)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Zustand"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.zustand)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Standort"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.standort)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "HSN ", /*#__PURE__*/React.createElement(ZBRef, { field: "(2.1)" })), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontFamily: 'var(--font-mono)' } }, vehicle.hsn || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "TSN ", /*#__PURE__*/React.createElement(ZBRef, { field: "(2.2)" })), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontFamily: 'var(--font-mono)' } }, vehicle.tsn || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "EG-Typgenehmigung ", /*#__PURE__*/React.createElement(ZBRef, { field: "K" })), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, vehicle.egTyp || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Vorbesitzer"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.vorbesitzer || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Unfallschaeden"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.unfallschaeden ? /*#__PURE__*/React.createElement(Badge, { variant: "error" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "TUeV/AU"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.tuev || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Letzter Service"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.letzterService || '-'))), vehicle.beschreibung && /*#__PURE__*/React.createElement("div", { style: { marginTop: 'var(--space-4)', paddingTop: 'var(--space-4)', borderTop: '1px solid var(--color-border)' } }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Beschreibung"), /*#__PURE__*/React.createElement("p", { style: { marginTop: 'var(--space-2)', fontSize: 'var(--font-size-sm)' } }, vehicle.beschreibung))), activeTab === 'technisch' && /*#__PURE__*/React.createElement(Card, { title: "Technische Daten" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Leistung (kW) ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.2" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.leistungKw, " kW")), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Leistung (PS)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.leistungPs, " PS")), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Kraftstoff ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.3" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.kraftstoff)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Getriebe"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.getriebe)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Hubraum (ccm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.1" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.hubraum || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Abgasnorm"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.abgasnorm || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "KM-Stand"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.kmStand ? formatNumber(vehicle.kmStand) + ' km' : '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Betriebsstunden"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.betriebsstunden ? formatNumber(vehicle.betriebsstunden) + ' h' : '-')))), activeTab === 'abmessungen' && /*#__PURE__*/React.createElement(Card, { title: "Abmessungen & Gewichte" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Laenge (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(18)" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.laenge || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Breite (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(19)" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.breite || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Hoehe (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(20)" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.hoehe || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Leergewicht (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "G" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.leergewicht || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Gesamtgewicht (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "F.1" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.Gesamtgewicht || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Achsen ", /*#__PURE__*/React.createElement(ZBRef, { field: "L" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.achsen || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Bereifung ", /*#__PURE__*/React.createElement(ZBRef, { field: "(15)" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.bereifung || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Anhaengelast ", /*#__PURE__*/React.createElement(ZBRef, { field: "O.1" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.anhaengelast ? formatNumber(vehicle.anhaengelast) + ' kg' : '-')))), activeTab === 'pkw' && vehicle.typ === 'pkw' && /*#__PURE__*/React.createElement(Card, { title: "PKW-Daten" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Fahrzeugklasse"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwKlasse)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Karosserie"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwKarosserie)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Tueren"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwTueren)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Sitzplaetze ", /*#__PURE__*/React.createElement(ZBRef, { field: "S.1" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwSitze)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Antriebsart"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwAntrieb)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Verbrauch (l/100km)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwVerbrauch)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "CO2 (g/km) ", /*#__PURE__*/React.createElement(ZBRef, { field: "V.7" })), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.pkwCo2)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Umweltplakette"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, /*#__PURE__*/React.createElement(Badge, { variant: vehicle.pkwUmwelt === 'gruen' ? 'success' : 'warning' }, vehicle.pkwUmwelt)))), vehicle.pkwAusstattung && /*#__PURE__*/React.createElement("div", { style: { marginTop: 'var(--space-4)', paddingTop: 'var(--space-4)', borderTop: '1px solid var(--color-border)' } }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Ausstattung"), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexWrap: 'wrap', gap: 'var(--space-2)', marginTop: 'var(--space-2)' } }, vehicle.pkwAusstattung.map((a, i) => /*#__PURE__*/React.createElement(Badge, { key: i, variant: "primary" }, a))))), activeTab === 'lkw' && vehicle.typ === 'lkw' && /*#__PURE__*/React.createElement(Card, { title: "LKW-Daten" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "LKW-Typ"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwTyp)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Aufbau"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.aufbau || '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Bordgeraet"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwBordgeraet ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Hubwerk"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwHubwerk ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Ladebordwand"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwLadebordwand ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Klimaanlage"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwKlima ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Schlafplatz"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwSchlafplatz ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Hydraulik"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.lkwHydraulik ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Ja") : /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Nein"))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Anhaengelast (kg)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.anhaengelast ? formatNumber(vehicle.anhaengelast) : '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Kuppelast (kg)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.kuppellast ? formatNumber(vehicle.kuppellast) : '-')))), activeTab === 'baumaschine' && vehicle.typ === 'baumaschine' && /*#__PURE__*/React.createElement(Card, { title: "Baumaschinen-Daten" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Art"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.art)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Betriebsstunden"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.betriebsstunden ? formatNumber(vehicle.betriebsstunden) + ' h' : '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Aufbau"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.aufbau || '-')))), activeTab === 'stapler' && vehicle.typ === 'stapler' && /*#__PURE__*/React.createElement(Card, { title: "Stapler-Daten" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Tragfaehigkeit (kg)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerTrag)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Hubhoehe (mm)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerHubhoehe)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Bauhoehe (mm)"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerBauhoehe)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Masttyp"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerMast)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Antrieb"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerAntrieb)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Batterie"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerBatterieKwh ? vehicle.staplerBatterieKwh + ' kWh' : '-')), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Reifenart"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.staplerReifen)))), activeTab === 'verkaufsinfo' && /*#__PURE__*/React.createElement(Card, { title: "Verkaufsinfo" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Preis"), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontSize: 'var(--font-size-xl)', color: 'var(--color-primary)' } }, formatPrice(vehicle.preis))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Status"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, statusBadge(vehicle.verfuegbarkeit))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Standort"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, vehicle.standort)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Typ"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, typLabel(vehicle.typ))))), activeTab === 'dokumente' && /*#__PURE__*/React.createElement(Card, { title: "Dokumente" }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Dateiname"), /*#__PURE__*/React.createElement("th", null, "Kategorie"), /*#__PURE__*/React.createElement("th", null, "Aktion"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "ZB_I_Fahrzeugschein.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "ZB I")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 })))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "ZB_II_Fahrzeugbrief.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "ZB II")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 })))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Kaufvertrag.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "Vertrag")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 }))))))), activeTab === 'fotos' && /*#__PURE__*/React.createElement(Card, { title: "Fotos" }, /*#__PURE__*/React.createElement(ImageManager, { photos: photos, setPhotos: setPhotos, role: role })), activeTab === 'mobilede' && /*#__PURE__*/React.createElement(Card, { title: "mobile.de Status" }, /*#__PURE__*/React.createElement("div", { style: { marginBottom: 'var(--space-4)' } }, mobiledeBadge(vehicle.mobiledeStatus)), vehicle.mobiledeStatus === 'fehler' && /*#__PURE__*/React.createElement("div", { className: "warning-banner" }, /*#__PURE__*/React.createElement(Icon, { name: "alert", size: 20, className: "warning-banner-icon" }), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "API Fehler:"), " Pflichtfeld fehlt.")), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)', flexWrap: 'wrap' } }, role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "sync" }, "Sync"), /*#__PURE__*/React.createElement(Button, { variant: "secondary", icon: "chart" }, "Preisvergleich")))); }; // ============ FAHRZEUG FORM (v4 tabbed) ============ const FahrzeugForm = ({ navigate, editId }) => { const [typ, setTyp] = useState('lkw'); const [errors, setErrors] = useState({}); const [ocrLoading, setOcrLoading] = useState(false); const [saving, setSaving] = useState(false); const [photos, setPhotos] = useState([]); const [activeFormTab, setActiveFormTab] = useState('allgemein'); const editVehicle = editId ? mockVehicles.find(v => v.id === parseInt(editId)) : null; const [form, setForm] = useState(editVehicle || { marke: '', modell: '', fin: '', baujahr: '', erstzulassung: '', kmStand: '', betriebsstunden: '', leistungKw: '', leistungPs: '', kraftstoff: 'Diesel', getriebe: 'Manuell', farbe: '', zustand: 'Gebraucht', standort: 'Muenchen', preis: '', hsn: '', tsn: '', egTyp: '', hubraum: '', abgasnorm: 'Euro 6', vorbesitzer: '', unfallschaeden: false, tuev: '', letzterService: '', serviceIntervall: '', laenge: '', breite: '', hoehe: '', leergewicht: '', Gesamtgewicht: '', achsen: '', bereifung: '', anhaengelast: '', kuppellast: '', antriebsart: '', verbrauch: '', co2: '', umweltplakette: 'gruen', lkwTyp: '', aufbau: '', lkwBordgeraet: false, lkwHubwerk: false, lkwLadebordwand: false, lkwKlima: false, lkwSchlafplatz: false, lkwHydraulik: false, art: '', bsEinheit: 'h', pkwKlasse: '', pkwKarosserie: '', pkwTueren: '', pkwSitze: '', pkwHubraum: '', pkwAntrieb: '', pkwVerbrauch: '', pkwCo2: '', pkwUmwelt: 'gruen', pkwReifen: '', pkwAusstattung: [], staplerTrag: '', staplerHubhoehe: '', staplerBauhoehe: '', staplerMast: '', staplerAntrieb: 'Elektro', staplerBatterieKwh: '', staplerBatterieTyp: '', staplerReifen: 'Superelastik', staplerLastschwerpunkt: '500', staplerFahrkomponente: 'Stapler', kaufpreis: '', mwst: '19', provision: '', lagerkosten: '', transportkosten: '', beschreibung: '' }); const update = (f, v) => setForm({ ...form, [f]: v }); const validate = () => { const e = {}; if (!form.marke) e.marke = 'Pflicht'; if (!form.modell) e.modell = 'Pflicht'; if (!form.fin) e.fin = 'Pflicht';else if (form.fin.length !== 17) e.fin = '17 Zeichen'; if (!form.baujahr) e.baujahr = 'Pflicht'; if (!form.preis) e.preis = 'Pflicht'; setErrors(e); return Object.keys(e).length === 0; }; const handleSubmit = e => { e.preventDefault(); if (!validate()) return; setSaving(true); setTimeout(() => { setSaving(false); navigate('/fahrzeuge'); }, 1000); }; const handleOcr = () => { setOcrLoading(true); setTimeout(() => { setOcrLoading(false); setForm({ ...form, marke: 'Mercedes-Benz', modell: 'Actros 1845 LS', fin: 'WDB9066351L123456', baujahr: '2019', erstzulassung: '2019-03-15', leistungKw: '330', kraftstoff: 'Diesel', farbe: 'Weiss', abgasnorm: 'Euro 6', hsn: '0911', tsn: 'AAM' }); }, 2000); }; const formTabs = [{ id: 'allgemein', label: 'Allgemein', icon: 'tag' }, { id: 'technisch', label: 'Technische Daten', icon: 'wrench' }, { id: 'abmessungen', label: 'Abmessungen', icon: 'package' }, ...(typ === 'pkw' ? [{ id: 'pkw', label: 'PKW', icon: 'car' }] : []), ...(typ === 'lkw' ? [{ id: 'lkw', label: 'LKW', icon: 'truck' }] : []), ...(typ === 'baumaschine' ? [{ id: 'baumaschine', label: 'Baumaschine', icon: 'wrench' }] : []), ...(typ === 'stapler' ? [{ id: 'stapler', label: 'Stapler', icon: 'forklift' }] : []), { id: 'preise', label: 'Preise & Kosten', icon: 'euro' }, { id: 'bilder', label: 'Bilder', icon: 'image' }, { id: 'dokumente', label: 'Dokumente', icon: 'doc' }, { id: 'mobilede', label: 'mobile.de', icon: 'external' }]; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-4)', marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement(Button, { variant: "ghost", icon: "chevronLeft", onClick: () => navigate('/fahrzeuge') }, t('fd.zurueck')), /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t(editId ? 'ff.titel_bearbeiten' : 'ff.titel_neu'))), /*#__PURE__*/React.createElement(Card, { title: "Fahrzeugtyp", style: { marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)', flexWrap: 'wrap' } }, ['lkw', 'baumaschine', 'pkw', 'stapler', 'transporter'].map(o => /*#__PURE__*/React.createElement("button", { key: o, type: "button", className: `btn ${typ === o ? 'btn-primary' : 'btn-secondary'}`, onClick: () => setTyp(o) }, /*#__PURE__*/React.createElement(Icon, { name: typIcon(o), size: 16 }), " ", typLabel(o))))), /*#__PURE__*/React.createElement(Card, { title: t('ff.ocr_upload'), style: { marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)', color: 'var(--color-text-secondary)', marginBottom: 'var(--space-4)' } }, t('ff.ocr_text')), /*#__PURE__*/React.createElement("div", { className: "dropzone", onClick: handleOcr }, ocrLoading ? /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 'var(--space-3)' } }, /*#__PURE__*/React.createElement("div", { className: "spinner spinner-lg" }), /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-sm)' } }, "OCR laeuft... Qwen2.5-VL")) : /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 'var(--space-2)' } }, /*#__PURE__*/React.createElement(Icon, { name: "camera", size: 48, style: { color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("p", { style: { fontWeight: 'var(--font-weight-medium)' } }, "ZB I / ZB II hier klicken"), /*#__PURE__*/React.createElement(Button, { variant: "primary", size: "sm", icon: "sparkles", style: { marginTop: 'var(--space-2)' } }, t('ff.ocr_ausloesen'))))), /*#__PURE__*/React.createElement("form", { onSubmit: handleSubmit }, /*#__PURE__*/React.createElement("div", { className: "form-tabs" }, formTabs.map(tab => /*#__PURE__*/React.createElement("div", { key: tab.id, className: `form-tab ${activeFormTab === tab.id ? 'active' : ''}`, onClick: () => setActiveFormTab(tab.id) }, /*#__PURE__*/React.createElement(Icon, { name: tab.icon, size: 16 }), " ", tab.label))), activeFormTab === 'allgemein' && /*#__PURE__*/React.createElement(Card, { title: "Allgemein" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Marke * ", /*#__PURE__*/React.createElement(ZBRef, { field: "D.1" })), /*#__PURE__*/React.createElement("input", { className: `input ${errors.marke ? 'input-error' : ''}`, value: form.marke, onChange: e => update('marke', e.target.value) }), errors.marke && /*#__PURE__*/React.createElement("div", { className: "form-error" }, errors.marke)), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Modell * ", /*#__PURE__*/React.createElement(ZBRef, { field: "D.3" })), /*#__PURE__*/React.createElement("input", { className: `input ${errors.modell ? 'input-error' : ''}`, value: form.modell, onChange: e => update('modell', e.target.value) }), errors.modell && /*#__PURE__*/React.createElement("div", { className: "form-error" }, errors.modell)), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "FIN * ", /*#__PURE__*/React.createElement(ZBRef, { field: "E" })), /*#__PURE__*/React.createElement("input", { className: `input ${errors.fin ? 'input-error' : ''}`, value: form.fin, onChange: e => update('fin', e.target.value), maxLength: 17, style: { fontFamily: 'var(--font-mono)' } }), errors.fin && /*#__PURE__*/React.createElement("div", { className: "form-error" }, errors.fin)), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Baujahr *"), /*#__PURE__*/React.createElement("input", { className: `input ${errors.baujahr ? 'input-error' : ''}`, type: "number", value: form.baujahr, onChange: e => update('baujahr', e.target.value) }), errors.baujahr && /*#__PURE__*/React.createElement("div", { className: "form-error" }, errors.baujahr)), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Erstzulassung ", /*#__PURE__*/React.createElement(ZBRef, { field: "B" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "date", value: form.erstzulassung, onChange: e => update('erstzulassung', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Farbe ", /*#__PURE__*/React.createElement(ZBRef, { field: "R" })), /*#__PURE__*/React.createElement("input", { className: "input", value: form.farbe, onChange: e => update('farbe', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Zustand"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.zustand, onChange: e => update('zustand', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Neu"), /*#__PURE__*/React.createElement("option", null, "Gebraucht"), /*#__PURE__*/React.createElement("option", null, "Jahreswagen"), /*#__PURE__*/React.createElement("option", null, "Unfallfahrzeug"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Standort"), /*#__PURE__*/React.createElement("input", { className: "input", value: form.standort, onChange: e => update('standort', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "HSN ", /*#__PURE__*/React.createElement(ZBRef, { field: "(2.1)" })), /*#__PURE__*/React.createElement("input", { className: "input", value: form.hsn, onChange: e => update('hsn', e.target.value), placeholder: "0911", style: { fontFamily: 'var(--font-mono)' } })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "TSN ", /*#__PURE__*/React.createElement(ZBRef, { field: "(2.2)" })), /*#__PURE__*/React.createElement("input", { className: "input", value: form.tsn, onChange: e => update('tsn', e.target.value), placeholder: "AAM", style: { fontFamily: 'var(--font-mono)' } })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "EG-Typgenehmigung ", /*#__PURE__*/React.createElement(ZBRef, { field: "K" })), /*#__PURE__*/React.createElement("input", { className: "input", value: form.egTyp, onChange: e => update('egTyp', e.target.value), style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Vorbesitzer"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.vorbesitzer, onChange: e => update('vorbesitzer', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Unfallschaeden"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.unfallschaeden, onChange: e => update('unfallschaeden', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "TUeV/AU gueltig bis"), /*#__PURE__*/React.createElement("input", { className: "input", value: form.tuev, onChange: e => update('tuev', e.target.value), placeholder: "03.2027" })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Letzter Service"), /*#__PURE__*/React.createElement("input", { className: "input", value: form.letzterService, onChange: e => update('letzterService', e.target.value), placeholder: "01.2026" })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Service-Intervall (km)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.serviceIntervall, onChange: e => update('serviceIntervall', e.target.value), placeholder: "150000" })))), activeFormTab === 'technisch' && /*#__PURE__*/React.createElement(Card, { title: "Technische Daten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Leistung (kW) ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.2" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.leistungKw, onChange: e => update('leistungKw', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Leistung (PS)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.leistungPs, onChange: e => update('leistungPs', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hubraum (ccm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.1" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.hubraum, onChange: e => update('hubraum', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Kraftstoff ", /*#__PURE__*/React.createElement(ZBRef, { field: "P.3" })), /*#__PURE__*/React.createElement("select", { className: "select", value: form.kraftstoff, onChange: e => update('kraftstoff', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Diesel"), /*#__PURE__*/React.createElement("option", null, "Benzin"), /*#__PURE__*/React.createElement("option", null, "Elektro"), /*#__PURE__*/React.createElement("option", null, "Hybrid"), /*#__PURE__*/React.createElement("option", null, "Gas (CNG/LPG)"), /*#__PURE__*/React.createElement("option", null, "Wasserstoff"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Getriebe"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.getriebe, onChange: e => update('getriebe', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Manuell"), /*#__PURE__*/React.createElement("option", null, "Automatik"), /*#__PURE__*/React.createElement("option", null, "DSG"), /*#__PURE__*/React.createElement("option", null, "Hydrostat"), /*#__PURE__*/React.createElement("option", null, "Stufenlos"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Antriebsart"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.antriebsart, onChange: e => update('antriebsart', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Frontantrieb"), /*#__PURE__*/React.createElement("option", null, "Heckantrieb"), /*#__PURE__*/React.createElement("option", null, "Allrad"), /*#__PURE__*/React.createElement("option", null, "4x4"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Abgasnorm"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.abgasnorm, onChange: e => update('abgasnorm', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Euro 6"), /*#__PURE__*/React.createElement("option", null, "Euro 5"), /*#__PURE__*/React.createElement("option", null, "Euro 4"), /*#__PURE__*/React.createElement("option", null, "Euro 3"), /*#__PURE__*/React.createElement("option", null, "Euro 2"), /*#__PURE__*/React.createElement("option", null, "Euro 1"), /*#__PURE__*/React.createElement("option", null, "Keine"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Verbrauch (l/100km)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", step: "0.1", value: form.verbrauch, onChange: e => update('verbrauch', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "CO2 (g/km) ", /*#__PURE__*/React.createElement(ZBRef, { field: "V.7" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.co2, onChange: e => update('co2', e.target.value) })), (typ === 'lkw' || typ === 'transporter' || typ === 'pkw') && /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "KM-Stand"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.kmStand, onChange: e => update('kmStand', e.target.value) })), (typ === 'baumaschine' || typ === 'stapler') && /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Betriebsstunden"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.betriebsstunden, onChange: e => update('betriebsstunden', e.target.value) })))), activeFormTab === 'abmessungen' && /*#__PURE__*/React.createElement(Card, { title: "Abmessungen & Gewichte" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Laenge (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(18)" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.laenge, onChange: e => update('laenge', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Breite (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(19)" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.breite, onChange: e => update('breite', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hoehe (mm) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(20)" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.hoehe, onChange: e => update('hoehe', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Leergewicht (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "G" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.leergewicht, onChange: e => update('leergewicht', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Gesamtgewicht (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "F.1" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.Gesamtgewicht, onChange: e => update('Gesamtgewicht', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Achsen ", /*#__PURE__*/React.createElement(ZBRef, { field: "L" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.achsen, onChange: e => update('achsen', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Bereifung ", /*#__PURE__*/React.createElement(ZBRef, { field: "(15)" })), /*#__PURE__*/React.createElement("input", { className: "input", value: form.bereifung, onChange: e => update('bereifung', e.target.value), placeholder: "315/70 R22.5" })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Anhaengelast (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "O.1" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.anhaengelast, onChange: e => update('anhaengelast', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Kuppelast (kg) ", /*#__PURE__*/React.createElement(ZBRef, { field: "(13)" })), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.kuppellast, onChange: e => update('kuppellast', e.target.value) })))), activeFormTab === 'pkw' && typ === 'pkw' && /*#__PURE__*/React.createElement(Card, { title: "PKW-spezifische Daten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Fahrzeugklasse ", /*#__PURE__*/React.createElement(ZBRef, { field: "J" })), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwKlasse, onChange: e => update('pkwKlasse', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Kleinwagen"), /*#__PURE__*/React.createElement("option", null, "Kompaktklasse"), /*#__PURE__*/React.createElement("option", null, "Mittelklasse"), /*#__PURE__*/React.createElement("option", null, "Oberklasse"), /*#__PURE__*/React.createElement("option", null, "Luxusklasse"), /*#__PURE__*/React.createElement("option", null, "Gelaendewagen"), /*#__PURE__*/React.createElement("option", null, "Van"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Karosserieform"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwKarosserie, onChange: e => update('pkwKarosserie', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Limousine"), /*#__PURE__*/React.createElement("option", null, "Kombi"), /*#__PURE__*/React.createElement("option", null, "Hatchback"), /*#__PURE__*/React.createElement("option", null, "Coupé"), /*#__PURE__*/React.createElement("option", null, "Cabrio"), /*#__PURE__*/React.createElement("option", null, "SUV"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Tueren"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwTueren, onChange: e => update('pkwTueren', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "2"), /*#__PURE__*/React.createElement("option", null, "3"), /*#__PURE__*/React.createElement("option", null, "4"), /*#__PURE__*/React.createElement("option", null, "5"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Sitzplaetze ", /*#__PURE__*/React.createElement(ZBRef, { field: "S.1" })), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwSitze, onChange: e => update('pkwSitze', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "2"), /*#__PURE__*/React.createElement("option", null, "4"), /*#__PURE__*/React.createElement("option", null, "5"), /*#__PURE__*/React.createElement("option", null, "7"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hubraum (ccm)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.pkwHubraum, onChange: e => update('pkwHubraum', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Antriebsart"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwAntrieb, onChange: e => update('pkwAntrieb', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Frontantrieb"), /*#__PURE__*/React.createElement("option", null, "Heckantrieb"), /*#__PURE__*/React.createElement("option", null, "Allrad"), /*#__PURE__*/React.createElement("option", null, "4x4"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Verbrauch (l/100km)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", step: "0.1", value: form.pkwVerbrauch, onChange: e => update('pkwVerbrauch', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "CO2 (g/km)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.pkwCo2, onChange: e => update('pkwCo2', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Umweltplakette"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.pkwUmwelt, onChange: e => update('pkwUmwelt', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "gruen" }, "Gruen"), /*#__PURE__*/React.createElement("option", { value: "gelb" }, "Gelb"), /*#__PURE__*/React.createElement("option", { value: "rot" }, "Rot"), /*#__PURE__*/React.createElement("option", { value: "keine" }, "Keine"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Reifengroesse"), /*#__PURE__*/React.createElement("input", { className: "input", value: form.pkwReifen, onChange: e => update('pkwReifen', e.target.value), placeholder: "275/45 R20" })))), activeFormTab === 'lkw' && typ === 'lkw' && /*#__PURE__*/React.createElement(Card, { title: "LKW-spezifische Daten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "LKW-Typ"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwTyp, onChange: e => update('lkwTyp', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Sattelzugmaschine"), /*#__PURE__*/React.createElement("option", null, "Solo-LKW"), /*#__PURE__*/React.createElement("option", null, "Kastenwagen"), /*#__PURE__*/React.createElement("option", null, "Pritsche"), /*#__PURE__*/React.createElement("option", null, "Tieflader"), /*#__PURE__*/React.createElement("option", null, "Kipper"), /*#__PURE__*/React.createElement("option", null, "Silo"), /*#__PURE__*/React.createElement("option", null, "Kuehlwagen"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Aufbau"), /*#__PURE__*/React.createElement("input", { className: "input", value: form.aufbau, onChange: e => update('aufbau', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Bordgeraet"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwBordgeraet, onChange: e => update('lkwBordgeraet', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hubwerk"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwHubwerk, onChange: e => update('lkwHubwerk', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Ladebordwand"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwLadebordwand, onChange: e => update('lkwLadebordwand', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Klimaanlage"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwKlima, onChange: e => update('lkwKlima', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Schlafplatz"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwSchlafplatz, onChange: e => update('lkwSchlafplatz', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hydraulische Anlage"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.lkwHydraulik, onChange: e => update('lkwHydraulik', e.target.value === 'true') }, /*#__PURE__*/React.createElement("option", { value: "false" }, "Nein"), /*#__PURE__*/React.createElement("option", { value: "true" }, "Ja"))))), activeFormTab === 'baumaschine' && typ === 'baumaschine' && /*#__PURE__*/React.createElement(Card, { title: "Baumaschinen-spezifische Daten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Art"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.art, onChange: e => update('art', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Bagger"), /*#__PURE__*/React.createElement("option", null, "Radlader"), /*#__PURE__*/React.createElement("option", null, "Kran"), /*#__PURE__*/React.createElement("option", null, "Walze"), /*#__PURE__*/React.createElement("option", null, "Bulldozer"), /*#__PURE__*/React.createElement("option", null, "Teleskoplader"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Einheit"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.bsEinheit, onChange: e => update('bsEinheit', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "h" }, "Stunden (h)"), /*#__PURE__*/React.createElement("option", { value: "min" }, "Minuten (min)"))))), activeFormTab === 'stapler' && typ === 'stapler' && /*#__PURE__*/React.createElement(Card, { title: "Stapler-spezifische Daten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Tragfaehigkeit (kg)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.staplerTrag, onChange: e => update('staplerTrag', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Hubhoehe (mm)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.staplerHubhoehe, onChange: e => update('staplerHubhoehe', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Bauhoehe (mm)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.staplerBauhoehe, onChange: e => update('staplerBauhoehe', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Masttyp"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.staplerMast, onChange: e => update('staplerMast', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Dreisteg"), /*#__PURE__*/React.createElement("option", null, "Zweisteg"), /*#__PURE__*/React.createElement("option", null, "Scherenmast"), /*#__PURE__*/React.createElement("option", null, "Teleskopmast"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Antriebsart"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.staplerAntrieb, onChange: e => update('staplerAntrieb', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Elektro"), /*#__PURE__*/React.createElement("option", null, "Diesel"), /*#__PURE__*/React.createElement("option", null, "Gas"), /*#__PURE__*/React.createElement("option", null, "Benzin"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Batteriekapazitaet (kWh)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", step: "0.1", value: form.staplerBatterieKwh, onChange: e => update('staplerBatterieKwh', e.target.value), disabled: form.staplerAntrieb !== 'Elektro' })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Batterietyp"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.staplerBatterieTyp, onChange: e => update('staplerBatterieTyp', e.target.value), disabled: form.staplerAntrieb !== 'Elektro' }, /*#__PURE__*/React.createElement("option", { value: "" }, "--"), /*#__PURE__*/React.createElement("option", null, "Blei-Saeure"), /*#__PURE__*/React.createElement("option", null, "Lithium-Ion"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Reifenart"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.staplerReifen, onChange: e => update('staplerReifen', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Superelastik"), /*#__PURE__*/React.createElement("option", null, "Vollgummi"), /*#__PURE__*/React.createElement("option", null, "Luftreifen"), /*#__PURE__*/React.createElement("option", null, "Polyurethan"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Lastschwerpunkt (mm)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.staplerLastschwerpunkt, onChange: e => update('staplerLastschwerpunkt', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Fahrkomponente"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.staplerFahrkomponente, onChange: e => update('staplerFahrkomponente', e.target.value) }, /*#__PURE__*/React.createElement("option", null, "Stapler"), /*#__PURE__*/React.createElement("option", null, "Radlader"), /*#__PURE__*/React.createElement("option", null, "Teleskoplader"), /*#__PURE__*/React.createElement("option", null, "Hubwagen"), /*#__PURE__*/React.createElement("option", null, "Kommissionierer"))))), activeFormTab === 'preise' && /*#__PURE__*/React.createElement(Card, { title: "Preise & Kosten" }, /*#__PURE__*/React.createElement("div", { className: "three-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Verkaufspreis (€) *"), /*#__PURE__*/React.createElement("input", { className: `input ${errors.preis ? 'input-error' : ''}`, type: "number", value: form.preis, onChange: e => update('preis', e.target.value) }), errors.preis && /*#__PURE__*/React.createElement("div", { className: "form-error" }, errors.preis)), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Kaufpreis (€)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.kaufpreis, onChange: e => update('kaufpreis', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "MwSt-Satz"), /*#__PURE__*/React.createElement("select", { className: "select", value: form.mwst, onChange: e => update('mwst', e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "19" }, "19%"), /*#__PURE__*/React.createElement("option", { value: "7" }, "7%"), /*#__PURE__*/React.createElement("option", { value: "0" }, "0% (steuerfrei)"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Provision (€)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.provision, onChange: e => update('provision', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Lagerkosten (€/Monat)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.lagerkosten, onChange: e => update('lagerkosten', e.target.value) })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Transportkosten (€)"), /*#__PURE__*/React.createElement("input", { className: "input", type: "number", value: form.transportkosten, onChange: e => update('transportkosten', e.target.value) })))), activeFormTab === 'bilder' && /*#__PURE__*/React.createElement(Card, { title: "Fotos" }, /*#__PURE__*/React.createElement(ImageManager, { photos: photos, setPhotos: setPhotos, role: "admin" })), activeFormTab === 'dokumente' && /*#__PURE__*/React.createElement(Card, { title: "Dokumente" }, /*#__PURE__*/React.createElement("div", { className: "dropzone", style: { marginBottom: 'var(--space-4)' } }, /*#__PURE__*/React.createElement(Icon, { name: "upload", size: 48, style: { color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("p", { style: { fontWeight: 'var(--font-weight-medium)' } }, "Dokumente hochladen"), /*#__PURE__*/React.createElement("p", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, "ZB I, ZB II, TUeV, Vertrag, Rechnung · PDF/JPG · max 50 MB"), /*#__PURE__*/React.createElement("div", { style: { marginTop: 'var(--space-3)' } }, /*#__PURE__*/React.createElement("div", { className: "file-input-wrapper" }, /*#__PURE__*/React.createElement(Button, { variant: "primary", size: "sm", icon: "doc" }, "Datei auswaehlen"), /*#__PURE__*/React.createElement("input", { type: "file", multiple: true, accept: ".pdf,image/*" }))))), activeFormTab === 'mobilede' && /*#__PURE__*/React.createElement(Card, { title: "mobile.de Listing" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Listing-Status"), /*#__PURE__*/React.createElement("select", { className: "select" }, /*#__PURE__*/React.createElement("option", null, "Entwurf"), /*#__PURE__*/React.createElement("option", null, "Gelistet"), /*#__PURE__*/React.createElement("option", null, "Nicht gelistet"))), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Beschreibung (fuer mobile.de)"), /*#__PURE__*/React.createElement("textarea", { className: "textarea", rows: 4, value: form.beschreibung, onChange: e => update('beschreibung', e.target.value), placeholder: "Top gepflegter LKW, 1. Hand..." }))), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-3)', justifyContent: 'flex-end', marginTop: 'var(--space-6)' } }, /*#__PURE__*/React.createElement(Button, { variant: "secondary", onClick: () => navigate('/fahrzeuge') }, t('ff.abbrechen')), /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: saving ? undefined : 'check', type: "submit", disabled: saving }, saving ? t('common.laden') : t('ff.speichern'))))); }; // ============ KONTAKTE ============ const KontakteListe = ({ navigate, role }) => { const [tab, setTab] = useState('kunden'); const [search, setSearch] = useState(''); const [view, setView] = useState('table'); const data = tab === 'kunden' ? mockContactsKaeufer : mockContactsVerkaeufer; const filtered = data.filter(c => !search || c.firmenname.toLowerCase().includes(search.toLowerCase()) || c.ansprechpartner.toLowerCase().includes(search.toLowerCase())); const ustBadge = s => { const m = { geprueft: { v: 'success', l: t('kt.geprueft') }, ungeprueft: { v: 'warning', l: t('kt.ungeprueft') }, manuell_best: { v: 'info', l: t('kt.manuell_best') } }; const c = m[s] || m.ungeprueft; return /*#__PURE__*/React.createElement(Badge, { variant: c.v }, c.l); }; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 'var(--space-6)', flexWrap: 'wrap', gap: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('kt.title')), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)' } }, filtered.length, " ", t('common.eintraege'))), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)', alignItems: 'center' } }, /*#__PURE__*/React.createElement(ViewToggle, { view: view, onChange: setView }), role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus" }, t('kt.add_new')))), /*#__PURE__*/React.createElement("div", { className: "subtabs" }, /*#__PURE__*/React.createElement("div", { className: `subtab ${tab === 'kunden' ? 'active' : ''}`, onClick: () => { setTab('kunden'); setSearch(''); } }, /*#__PURE__*/React.createElement(Icon, { name: "shopping", size: 16 }), " Kunden"), /*#__PURE__*/React.createElement("div", { className: `subtab ${tab === 'lieferanten' ? 'active' : ''}`, onClick: () => { setTab('lieferanten'); setSearch(''); } }, /*#__PURE__*/React.createElement(Icon, { name: "briefcase", size: 16 }), " Lieferanten")), /*#__PURE__*/React.createElement(Card, { style: { marginBottom: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-4)', flexWrap: 'wrap', alignItems: 'flex-end' } }, /*#__PURE__*/React.createElement("div", { style: { flex: '1 1 300px' } }, /*#__PURE__*/React.createElement("label", { className: "label" }, t('common.suchen')), /*#__PURE__*/React.createElement("div", { style: { position: 'relative' } }, /*#__PURE__*/React.createElement(Icon, { name: "search", size: 16, style: { position: 'absolute', left: 'var(--space-3)', top: '50%', transform: 'translateY(-50%)', color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("input", { className: "input", style: { paddingLeft: 'var(--space-8)' }, placeholder: t('kt.suche'), value: search, onChange: e => setSearch(e.target.value) }))))), filtered.length === 0 ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement(EmptyState, { icon: "contacts", title: "Keine Kontakte", text: "Noch keine Kontakte angelegt." })) : view === 'table' ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement("div", { style: { overflowX: 'auto' } }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Firma"), /*#__PURE__*/React.createElement("th", null, "Ansprechpartner"), /*#__PURE__*/React.createElement("th", { className: "hide-mobile" }, "Land"), /*#__PURE__*/React.createElement("th", { className: "hide-mobile" }, "USt-IdNr."), /*#__PURE__*/React.createElement("th", { className: "hide-mobile" }, "Status"), /*#__PURE__*/React.createElement("th", null, "Aktion"))), /*#__PURE__*/React.createElement("tbody", null, filtered.map(c => /*#__PURE__*/React.createElement("tr", { key: c.id }, /*#__PURE__*/React.createElement("td", { style: { fontWeight: 'var(--font-weight-semibold)' } }, c.firmenname), /*#__PURE__*/React.createElement("td", null, c.ansprechpartner), /*#__PURE__*/React.createElement("td", { className: "hide-mobile" }, c.land), /*#__PURE__*/React.createElement("td", { className: "hide-mobile", style: { fontFamily: 'var(--font-mono)', fontSize: 'var(--font-size-xs)' } }, c.ustId || '-'), /*#__PURE__*/React.createElement("td", { className: "hide-mobile" }, ustBadge(c.ustStatus)), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-1)' } }, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "eye", size: 16 })), role !== 'buchhaltung' && /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "edit", size: 16 })))))))))) : /*#__PURE__*/React.createElement("div", { className: "card-grid" }, filtered.map(c => /*#__PURE__*/React.createElement("div", { key: c.id, className: "contact-card" }, /*#__PURE__*/React.createElement("div", { className: "contact-card-header" }, /*#__PURE__*/React.createElement("div", { style: { width: 40, height: 40, borderRadius: 'var(--radius-md)', background: tab === 'kunden' ? 'var(--color-primary-light)' : 'var(--color-info-light)', color: tab === 'kunden' ? 'var(--color-primary)' : 'var(--color-info)', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 } }, /*#__PURE__*/React.createElement(Icon, { name: tab === 'kunden' ? 'shopping' : 'briefcase', size: 20 })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { className: "contact-card-name" }, c.firmenname), /*#__PURE__*/React.createElement("div", { className: "contact-card-person" }, c.ansprechpartner))), /*#__PURE__*/React.createElement("div", { className: "contact-card-info" }, /*#__PURE__*/React.createElement("div", { className: "contact-card-info-item" }, /*#__PURE__*/React.createElement(Icon, { name: "location", size: 14 }), " ", c.land), /*#__PURE__*/React.createElement("div", { className: "contact-card-info-item" }, /*#__PURE__*/React.createElement(Icon, { name: "mail", size: 14 }), " ", c.email), /*#__PURE__*/React.createElement("div", { className: "contact-card-info-item" }, /*#__PURE__*/React.createElement(Icon, { name: "phone", size: 14 }), " ", c.telefon)))))); }; // ============ VERKAUFSMODUL (v7 list first) ============ const mockVerkaeufe = [{ id: 1, fahrzeug: 'Mercedes Actros 1845 LS', fin: 'WDB9066351L123456', kunde: 'Mueller Transport GmbH', datum: '2026-07-05', betrag: 45000, status: 'abgeschlossen', mwstTyp: 'inland', steuer: 8550, gesamt: 53550 }, { id: 2, fahrzeug: 'MAN TGL 12.180', fin: 'WMAUYYT1XPA123456', kunde: 'Bauer Bauunternehmen GmbH', datum: '2026-07-10', betrag: 29500, status: 'pruefung', mwstTyp: 'inland', steuer: 5605, gesamt: 35105 }, { id: 3, fahrzeug: 'BMW X5 xDrive30d', fin: 'WBAJA9C50K8123456', kunde: 'Van den Berg Logistics B.V.', datum: '2026-07-08', betrag: 52000, status: 'entwurf', mwstTyp: 'eu_ausland', steuer: 0, gesamt: 52000 }, { id: 4, fahrzeug: 'Volvo FH16 750', fin: 'YV2XK0DG5LA123456', kunde: 'Spedition Hartmann KG', datum: '2026-06-28', betrag: 55000, status: 'abgeschlossen', mwstTyp: 'inland', steuer: 10450, gesamt: 65450 }, { id: 5, fahrzeug: 'Scania R 500 Highline', fin: 'SCNR5002019123456', kunde: 'Mueller Transport GmbH', datum: '2026-07-12', betrag: 38000, status: 'entwurf', mwstTyp: 'inland', steuer: 7220, gesamt: 45220 }, { id: 6, fahrzeug: 'Liebherr R 926', fin: 'LIR92620201234567', kunde: 'Bauer Bauunternehmen GmbH', datum: '2026-06-20', betrag: 89000, status: 'storniert', mwstTyp: 'inland', steuer: 16910, gesamt: 105910 }, { id: 7, fahrzeug: 'Toyota 8FBE20', fin: 'TOY8FBE20220123456', kunde: 'Schmidt Baumaschinen GmbH', datum: '2026-07-01', betrag: 18500, status: 'abgeschlossen', mwstTyp: 'inland', steuer: 3515, gesamt: 22015 }]; const verkaufStatusBadge = s => { const m = { entwurf: { cls: 'verkauf-status-entwurf', l: 'Entwurf' }, pruefung: { cls: 'verkauf-status-pruefung', l: 'Pruefung' }, abgeschlossen: { cls: 'verkauf-status-abgeschlossen', l: 'Abgeschlossen' }, storniert: { cls: 'verkauf-status-storniert', l: 'Storniert' } }; const c = m[s] || m.entwurf; return /*#__PURE__*/React.createElement("span", { className: `verkauf-status-badge ${c.cls}` }, c.l); }; const mwstTypLabel = t => t === 'inland' ? 'Inland' : t === 'eu_ausland' ? 'EU-Ausland' : 'Drittland'; const VerkaufsModul = ({ navigate, role, preselectVehicle }) => { const [viewMode, setViewMode] = useState('list'); const [view, setView] = useState('table'); const [search, setSearch] = useState(''); const [filterStatus, setFilterStatus] = useState('alle'); const [sortBy, setSortBy] = useState('datum'); const [sortDir, setSortDir] = useState('desc'); const [showWizard, setShowWizard] = useState(false); const [detailId, setDetailId] = useState(null); const filtered = useMemo(() => { let r = mockVerkaeufe.filter(v => { const ms = !search || v.fahrzeug.toLowerCase().includes(search.toLowerCase()) || v.kunde.toLowerCase().includes(search.toLowerCase()) || v.fin.toLowerCase().includes(search.toLowerCase()); const mst = filterStatus === 'alle' || v.status === filterStatus; return ms && mst; }); r.sort((a, b) => { const av = a[sortBy], bv = b[sortBy]; if (typeof av === 'number') return sortDir === 'asc' ? av - bv : bv - av; return sortDir === 'asc' ? String(av).localeCompare(String(bv)) : String(bv).localeCompare(String(av)); }); return r; }, [search, filterStatus, sortBy, sortDir]); const handleSort = col => { if (sortBy === col) setSortDir(sortDir === 'asc' ? 'desc' : 'asc');else { setSortBy(col); setSortDir('asc'); } }; if (showWizard) return /*#__PURE__*/React.createElement(VerkaufWizard, { navigate: navigate, role: role, preselectVehicle: preselectVehicle, onClose: () => setShowWizard(false) }); if (detailId) return /*#__PURE__*/React.createElement(VerkaufDetail, { verkauf: mockVerkaeufe.find(v => v.id === detailId), onBack: () => setDetailId(null), navigate: navigate }); return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 'var(--space-6)', flexWrap: 'wrap', gap: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('vk.title')), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)' } }, filtered.length, " Verkaeufe")), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-2)', alignItems: 'center' } }, /*#__PURE__*/React.createElement("div", { className: "view-toggle" }, /*#__PURE__*/React.createElement("button", { className: `view-toggle-btn ${viewMode === 'list' ? 'active' : ''}`, onClick: () => setViewMode('list') }, /*#__PURE__*/React.createElement(Icon, { name: "list", size: 16 }), " Liste"), /*#__PURE__*/React.createElement("button", { className: `view-toggle-btn ${viewMode === 'calendar' ? 'active' : ''}`, onClick: () => setViewMode('calendar') }, /*#__PURE__*/React.createElement(Icon, { name: "calendar", size: 16 }), " Kalender")), viewMode === 'list' && /*#__PURE__*/React.createElement(ViewToggle, { view: view, onChange: setView }), role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => setShowWizard(true) }, t('vk.neuer_verkauf')))), viewMode === 'calendar' ? /*#__PURE__*/React.createElement(VerkaufKalender, { navigate: navigate }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card, { style: { marginBottom: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', gap: 'var(--space-4)', flexWrap: 'wrap', alignItems: 'flex-end' } }, /*#__PURE__*/React.createElement("div", { style: { flex: '1 1 300px' } }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Suche (Fahrzeug, Kunde, FIN)"), /*#__PURE__*/React.createElement("div", { style: { position: 'relative' } }, /*#__PURE__*/React.createElement(Icon, { name: "search", size: 16, style: { position: 'absolute', left: 'var(--space-3)', top: '50%', transform: 'translateY(-50%)', color: 'var(--color-text-muted)' } }), /*#__PURE__*/React.createElement("input", { className: "input", style: { paddingLeft: 'var(--space-8)' }, placeholder: "Verkauf suchen...", value: search, onChange: e => setSearch(e.target.value) }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", { className: "label" }, "Status"), /*#__PURE__*/React.createElement("select", { className: "select", value: filterStatus, onChange: e => setFilterStatus(e.target.value) }, /*#__PURE__*/React.createElement("option", { value: "alle" }, "Alle"), /*#__PURE__*/React.createElement("option", { value: "entwurf" }, "Entwurf"), /*#__PURE__*/React.createElement("option", { value: "pruefung" }, "Pruefung"), /*#__PURE__*/React.createElement("option", { value: "abgeschlossen" }, "Abgeschlossen"), /*#__PURE__*/React.createElement("option", { value: "storniert" }, "Storniert"))))), filtered.length === 0 ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement(EmptyState, { icon: "sale", title: "Keine Verkaeufe", text: "Noch keine Verkaeufe angelegt.", action: role !== 'buchhaltung' && /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "plus", onClick: () => setShowWizard(true) }, t('vk.neuer_verkauf')) })) : view === 'table' ? /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement("div", { style: { overflowX: 'auto' } }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", { className: sortBy === 'fahrzeug' ? 'sorted' : '', onClick: () => handleSort('fahrzeug') }, "Fahrzeug"), /*#__PURE__*/React.createElement("th", null, "Kunde"), /*#__PURE__*/React.createElement("th", { className: sortBy === 'datum' ? 'sorted' : '', onClick: () => handleSort('datum') }, "Datum"), /*#__PURE__*/React.createElement("th", { className: sortBy === 'betrag' ? 'sorted' : '', onClick: () => handleSort('betrag') }, "Betrag"), /*#__PURE__*/React.createElement("th", null, "Status"), /*#__PURE__*/React.createElement("th", null, "MwSt-Typ"))), /*#__PURE__*/React.createElement("tbody", null, filtered.map(v => /*#__PURE__*/React.createElement("tr", { key: v.id, onClick: () => setDetailId(v.id), style: { cursor: 'pointer' } }, /*#__PURE__*/React.createElement("td", { style: { fontWeight: 'var(--font-weight-semibold)' } }, v.fahrzeug), /*#__PURE__*/React.createElement("td", null, v.kunde), /*#__PURE__*/React.createElement("td", null, formatDate(v.datum)), /*#__PURE__*/React.createElement("td", { style: { fontWeight: 'var(--font-weight-semibold)' } }, formatPrice(v.betrag)), /*#__PURE__*/React.createElement("td", null, verkaufStatusBadge(v.status)), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, mwstTypLabel(v.mwstTyp))))))))) : /*#__PURE__*/React.createElement("div", { className: "card-grid" }, filtered.map(v => /*#__PURE__*/React.createElement("div", { key: v.id, className: "verkauf-card", onClick: () => setDetailId(v.id) }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: 'var(--space-2)' } }, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-semibold)', fontSize: 'var(--font-size-sm)' } }, v.fahrzeug), verkaufStatusBadge(v.status)), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-secondary)', marginBottom: 'var(--space-2)' } }, v.kunde), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' } }, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-bold)', color: 'var(--color-primary)' } }, formatPrice(v.betrag)), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, formatDate(v.datum), " · ", mwstTypLabel(v.mwstTyp)))))))); }; const VerkaufDetail = ({ verkauf, onBack, navigate }) => { const [activeTab, setActiveTab] = useState('uebersicht'); if (!verkauf) return null; const tabs = [{ id: 'uebersicht', label: 'Uebersicht' }, { id: 'dokumente', label: 'Dokumente' }, { id: 'zahlung', label: 'Zahlungsverlauf' }, { id: 'termine', label: 'Termine' }]; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-4)', marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement(Button, { variant: "ghost", icon: "chevronLeft", onClick: onBack }, "Zurueck"), /*#__PURE__*/React.createElement("div", { style: { flex: 1 } }, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, verkauf.fahrzeug), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)' } }, "FIN: ", verkauf.fin, " · ", formatDate(verkauf.datum))), verkaufStatusBadge(verkauf.status)), /*#__PURE__*/React.createElement("div", { className: "tabs" }, tabs.map(tab => /*#__PURE__*/React.createElement("div", { key: tab.id, className: `tab ${activeTab === tab.id ? 'active' : ''}`, onClick: () => setActiveTab(tab.id) }, tab.label))), activeTab === 'uebersicht' && /*#__PURE__*/React.createElement(Card, { title: "Verkaufsuebersicht" }, /*#__PURE__*/React.createElement("div", { className: "info-grid" }, /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Fahrzeug"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, verkauf.fahrzeug)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "FIN"), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontFamily: 'var(--font-mono)' } }, verkauf.fin)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Kunde"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, verkauf.kunde)), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Datum"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, formatDate(verkauf.datum))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Netto-Betrag"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, formatPrice(verkauf.betrag))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "MwSt-Typ"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, mwstTypLabel(verkauf.mwstTyp)))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Steuerbetrag"), /*#__PURE__*/React.createElement("div", { className: "info-value" }, formatPrice(verkauf.steuer))), /*#__PURE__*/React.createElement("div", { className: "info-item" }, /*#__PURE__*/React.createElement("div", { className: "info-label" }, "Gesamt (brutto)"), /*#__PURE__*/React.createElement("div", { className: "info-value", style: { fontSize: 'var(--font-size-lg)', color: 'var(--color-primary)' } }, formatPrice(verkauf.gesamt))))), activeTab === 'dokumente' && /*#__PURE__*/React.createElement(Card, { title: "Dokumente" }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Dokument"), /*#__PURE__*/React.createElement("th", null, "Typ"), /*#__PURE__*/React.createElement("th", null, "Aktion"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Kaufvertrag.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "Vertrag")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 })))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Rechnung.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "Rechnung")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 })))), verkauf.mwstTyp === 'eu_ausland' && /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Lieferbescheinigung.pdf"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "warning" }, "Zertifikat")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("button", { className: "btn btn-ghost btn-sm" }, /*#__PURE__*/React.createElement(Icon, { name: "download", size: 16 }))))))), activeTab === 'zahlung' && /*#__PURE__*/React.createElement(Card, { title: "Zahlungsverlauf" }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Datum"), /*#__PURE__*/React.createElement("th", null, "Betrag"), /*#__PURE__*/React.createElement("th", null, "Methode"), /*#__PURE__*/React.createElement("th", null, "Status"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, formatDate(verkauf.datum)), /*#__PURE__*/React.createElement("td", null, formatPrice(verkauf.gesamt)), /*#__PURE__*/React.createElement("td", null, "Ueberweisung"), /*#__PURE__*/React.createElement("td", null, verkauf.status === 'abgeschlossen' ? /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Bezahlt") : /*#__PURE__*/React.createElement(Badge, { variant: "warning" }, "Offen")))))), activeTab === 'termine' && /*#__PURE__*/React.createElement(Card, { title: "Termine" }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--space-3)' } }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-3)', padding: 'var(--space-3)', border: '1px solid var(--color-border)', borderRadius: 'var(--radius-md)' } }, /*#__PURE__*/React.createElement(Icon, { name: "calendar", size: 20, style: { color: 'var(--color-info)' } }), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-medium)' } }, "Ueberfuehrung"), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, "Geplant: ", formatDate(verkauf.datum))), /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "Geplant")), /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 'var(--space-3)', padding: 'var(--space-3)', border: '1px solid var(--color-border)', borderRadius: 'var(--radius-md)' } }, /*#__PURE__*/React.createElement(Icon, { name: "package", size: 20, style: { color: 'var(--color-warning)' } }), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { fontWeight: 'var(--font-weight-medium)' } }, "Lieferung"), /*#__PURE__*/React.createElement("div", { style: { fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)' } }, "Geplant: ", formatDate(verkauf.datum))), /*#__PURE__*/React.createElement(Badge, { variant: "warning" }, "Geplant"))))); }; // ============ KI COPILOT (v7 ChatGPT-like) ============ const KiCopilot = ({ navigate, role }) => { const [messages, setMessages] = useState([{ type: 'ai', text: 'Hallo Max! Ich bin Ihr KI-Assistent. Ich kann Fahrzeuge anlegen, suchen, verkaufen und Dokumente erstellen. Was kann ich fuer Sie tun?' }]); const [input, setInput] = useState(''); const [loading, setLoading] = useState(false); const [listening, setListening] = useState(false); const [speechSupported, setSpeechSupported] = useState(true); const textareaRef = useRef(null); const messagesEnd = useRef(null); const recognitionRef = useRef(null); useEffect(() => { messagesEnd.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); useEffect(() => { document.body.classList.add('copilot-active'); return () => document.body.classList.remove('copilot-active'); }, []); useEffect(() => { const SR = window.SpeechRecognition || window.webkitSpeechRecognition; if (!SR) { setSpeechSupported(false); return; } const rec = new SR(); rec.lang = 'de-DE'; rec.continuous = false; rec.interimResults = true; rec.onresult = e => { let text = ''; for (let i = 0; i < e.results.length; i++) text += e.results[i][0].transcript; setInput(text); autoGrow(); }; rec.onerror = e => { setListening(false); }; rec.onend = () => { setListening(false); }; recognitionRef.current = rec; }, []); const autoGrow = () => { const ta = textareaRef.current; if (ta) { ta.style.height = '48px'; ta.style.height = Math.min(ta.scrollHeight, 200) + 'px'; } }; const toggleMic = () => { if (!speechSupported || !recognitionRef.current) return; if (listening) { recognitionRef.current.stop(); setListening(false); } else { try { recognitionRef.current.start(); setListening(true); } catch (e) {} } }; const sendMessage = text => { const msg = text || input; if (!msg.trim() || loading) return; setMessages(prev => [...prev, { type: 'user', text: msg }]); setInput(''); if (textareaRef.current) textareaRef.current.style.height = '48px'; setLoading(true); setTimeout(() => { let r = 'Ich verstehe Ihren Befehl. Bitte spezifizieren Sie genauer.'; const ml = msg.toLowerCase(); if (ml.includes('lege') && ml.includes('fahrzeug')) r = 'Ich habe die Daten extrahiert und das Fahrzeugformular vorausgefuellt. Bitte ueberpruefen Sie die Daten und bestaetigen Sie zum Speichern. Das Formular ist jetzt geoeffnet.';else if (ml.includes('finde') || ml.includes('suche')) r = 'Ich habe 3 Fahrzeuge gefunden, die Ihren Kriterien entsprechen. Die Ergebnisse werden in der Bestandsliste angezeigt.';else if (ml.includes('verkaufe') || ml.includes('kaufvertrag')) r = 'Verkaufsprozess gestartet. Ich habe Kaeufer und Fahrzeug identifiziert. Der Verkaufs-Assistent ist jetzt geoeffnet.';else if (ml.includes('rechnung')) r = 'Rechnung RE-2026-047 wurde aus dem letzten Verkauf generiert. Die PDF steht zum Download bereit.';else if (ml.includes('kontakt') || ml.includes('kunde')) r = 'Ich habe die Kontaktverwaltung geoeffnet. Sie koennen zwischen Kunden und Lieferanten wechseln.';else if (ml.includes('preis') || ml.includes('vergleich')) r = 'Ich vergleiche Preise aehnlicher Fahrzeuge auf mobile.de. Bitte waehlen Sie ein Fahrzeug aus der Bestandsliste.'; setMessages(prev => [...prev, { type: 'ai', text: r }]); setLoading(false); }, 1500); }; const handleKeyDown = e => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendMessage(); } }; const chips = ['Fahrzeug suchen', 'Neuer Verkauf', 'Kontakte', 'Preisvergleich', 'Dokument erstellen', 'Letzte Verkaeufe']; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { marginBottom: 'var(--space-4)' } }, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('ki.title')), /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)', marginTop: 'var(--space-1)' } }, "KI-Assistent via OpenRouter - Text & Spracheingabe")), /*#__PURE__*/React.createElement("div", { className: "copilot-container" }, /*#__PURE__*/React.createElement("div", { className: "copilot-chat" }, messages.map((msg, i) => /*#__PURE__*/React.createElement("div", { key: i, className: msg.type === 'user' ? 'chat-msg-user' : 'chat-msg-ai' }, msg.type === 'ai' && /*#__PURE__*/React.createElement("div", { className: "chat-ai-avatar" }, /*#__PURE__*/React.createElement(Icon, { name: "ai", size: 20 })), /*#__PURE__*/React.createElement("div", { className: "chat-bubble-full" }, msg.text))), loading && /*#__PURE__*/React.createElement("div", { className: "chat-msg-ai" }, /*#__PURE__*/React.createElement("div", { className: "chat-ai-avatar" }, /*#__PURE__*/React.createElement(Icon, { name: "ai", size: 20 })), /*#__PURE__*/React.createElement("div", { className: "chat-bubble-full" }, /*#__PURE__*/React.createElement("div", { className: "typing-indicator" }, /*#__PURE__*/React.createElement("div", { className: "typing-dot" }), /*#__PURE__*/React.createElement("div", { className: "typing-dot" }), /*#__PURE__*/React.createElement("div", { className: "typing-dot" })))), /*#__PURE__*/React.createElement("div", { ref: messagesEnd })), /*#__PURE__*/React.createElement("div", { className: "copilot-input-container" }, /*#__PURE__*/React.createElement("div", { className: "copilot-chips" }, chips.map((chip, i) => /*#__PURE__*/React.createElement("div", { key: i, className: "chat-chip", onClick: () => sendMessage(chip) }, chip))), /*#__PURE__*/React.createElement("div", { className: "copilot-input-row" }, /*#__PURE__*/React.createElement("button", { className: `chat-mic-btn ${listening ? 'recording' : ''}`, onClick: toggleMic, title: speechSupported ? 'Spracheingabe' : 'Spracheingabe nicht unterstuetzt', disabled: !speechSupported }, /*#__PURE__*/React.createElement(Icon, { name: "mic", size: 20 })), /*#__PURE__*/React.createElement("textarea", { ref: textareaRef, className: "copilot-textarea", placeholder: t('ki.placeholder'), value: input, onChange: e => { setInput(e.target.value); autoGrow(); }, onKeyDown: handleKeyDown, rows: 1 }), /*#__PURE__*/React.createElement("button", { className: "chat-send-btn", onClick: () => sendMessage(), disabled: !input.trim() || loading, title: "Senden" }, /*#__PURE__*/React.createElement(Icon, { name: "send", size: 20 })))), !speechSupported && /*#__PURE__*/React.createElement("div", { style: { textAlign: 'center', fontSize: 'var(--font-size-xs)', color: 'var(--color-text-muted)', padding: 'var(--space-2)' } }, "Spracheingabe nicht unterstuetzt - bitte Text eingeben"), " ")); }; // ============ EINSTELLUNGEN ============ const Einstellungen = ({ navigate }) => { const [activeTab, setActiveTab] = useState('stammdaten'); const [stammdatenSub, setStammdatenSub] = useState('steuer'); const tabs = [{ id: 'stammdaten', label: 'Stammdaten' }, { id: 'vorlagen', label: 'Vertragsvorlagen' }, { id: 'benutzer', label: 'Benutzerverwaltung' }, { id: 'firma', label: 'Firmenprofil' }]; const stammdatenSubs = [{ id: 'steuer', label: 'Steuer & MwSt', icon: 'percentage' }, { id: 'waehrungen', label: 'Waehrungen', icon: 'currency' }, { id: 'lieferbedingungen', label: 'Incoterms', icon: 'truck' }, { id: 'zahlungsbedingungen', label: 'Zahlungsbedingungen', icon: 'euro' }, { id: 'versicherungen', label: 'Versicherungen', icon: 'shield' }, { id: 'gewaehrleistung', label: 'Gewaehrleistung', icon: 'certificate' }, { id: 'lkw_typen', label: 'LKW-Typen', icon: 'truck_type' }, { id: 'baumaschinen_typen', label: 'Baumaschinen', icon: 'wrench' }, { id: 'fahrzeugzustaende', label: 'Zustaende', icon: 'tag' }, { id: 'kraftstoffarten', label: 'Kraftstoffe', icon: 'gas' }, { id: 'abgasnormen', label: 'Abgasnormen', icon: 'layers' }, { id: 'bereifung', label: 'Bereifung', icon: 'road' }, { id: 'zulassungsstatus', label: 'Zulassung', icon: 'certificate' }]; return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { style: { marginBottom: 'var(--space-6)' } }, /*#__PURE__*/React.createElement("h1", { style: { fontSize: 'var(--font-size-2xl)', fontWeight: 'var(--font-weight-bold)' } }, t('set.title'))), /*#__PURE__*/React.createElement("div", { className: "tabs" }, tabs.map(tab => /*#__PURE__*/React.createElement("div", { key: tab.id, className: `tab ${activeTab === tab.id ? 'active' : ''}`, onClick: () => setActiveTab(tab.id) }, tab.label))), activeTab === 'stammdaten' && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { className: "subtabs" }, stammdatenSubs.map(s => /*#__PURE__*/React.createElement("div", { key: s.id, className: `subtab ${stammdatenSub === s.id ? 'active' : ''}`, onClick: () => setStammdatenSub(s.id) }, /*#__PURE__*/React.createElement(Icon, { name: s.icon, size: 14 }), " ", s.label))), stammdatenSub === 'steuer' && /*#__PURE__*/React.createElement(Card, { title: "Steuerklassen" }, /*#__PURE__*/React.createElement("table", { className: "stammdaten-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Bezeichnung"), /*#__PURE__*/React.createElement("th", null, "Satz"), /*#__PURE__*/React.createElement("th", null, "Status"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "EU-Inland"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "19%")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv"))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "EU-Ausland"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "warning" }, "0%")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv"))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Drittland"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "warning" }, "0%")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv")))))), stammdatenSub === 'waehrungen' && /*#__PURE__*/React.createElement(Card, { title: "Waehrungen" }, /*#__PURE__*/React.createElement("table", { className: "stammdaten-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Waehrung"), /*#__PURE__*/React.createElement("th", null, "Code"), /*#__PURE__*/React.createElement("th", null, "Kurs"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Euro"), /*#__PURE__*/React.createElement("td", null, "EUR"), /*#__PURE__*/React.createElement("td", null, "1.0000")), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "USD"), /*#__PURE__*/React.createElement("td", null, "USD"), /*#__PURE__*/React.createElement("td", null, "0.9234")), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "CHF"), /*#__PURE__*/React.createElement("td", null, "CHF"), /*#__PURE__*/React.createElement("td", null, "1.0523"))))), stammdatenSub === 'lieferbedingungen' && /*#__PURE__*/React.createElement(Card, { title: "Incoterms" }, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', flexWrap: 'wrap', gap: 'var(--space-2)' } }, ['EXW', 'FOB', 'CIF', 'DAP', 'DDP', 'FCA'].map(c => /*#__PURE__*/React.createElement(Badge, { key: c, variant: "primary" }, c)))), stammdatenSub === 'zahlungsbedingungen' && /*#__PURE__*/React.createElement(Card, { title: "Zahlungsbedingungen" }, /*#__PURE__*/React.createElement("table", { className: "stammdaten-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Bezeichnung"), /*#__PURE__*/React.createElement("th", null, "Frist"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Vorkasse"), /*#__PURE__*/React.createElement("td", null, "Sofort")), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "30 Tage netto"), /*#__PURE__*/React.createElement("td", null, "30T")), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Ratenzahlung"), /*#__PURE__*/React.createElement("td", null, "3 Raten"))))), (stammdatenSub === 'versicherungen' || stammdatenSub === 'gewaehrleistung' || stammdatenSub === 'lkw_typen' || stammdatenSub === 'baumaschinen_typen' || stammdatenSub === 'fahrzeugzustaende' || stammdatenSub === 'kraftstoffarten' || stammdatenSub === 'abgasnormen' || stammdatenSub === 'bereifung' || stammdatenSub === 'zulassungsstatus') && /*#__PURE__*/React.createElement(Card, { title: stammdatenSubs.find(s => s.id === stammdatenSub)?.label }, /*#__PURE__*/React.createElement("p", { style: { color: 'var(--color-text-secondary)', fontSize: 'var(--font-size-sm)' } }, "Stammdaten verwaltet unter: ", stammdatenSubs.find(s => s.id === stammdatenSub)?.label))), activeTab === 'vorlagen' && /*#__PURE__*/React.createElement(Card, { title: "Vertragsvorlagen" }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Vorlage"), /*#__PURE__*/React.createElement("th", null, "Typ"), /*#__PURE__*/React.createElement("th", null, "Status"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Kaufvertrag Inland"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "Inland")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv"))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Kaufvertrag EU-Ausland"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "EU")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv"))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Rechnung"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "neutral" }, "Rechnung")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv")))))), activeTab === 'benutzer' && /*#__PURE__*/React.createElement(Card, { title: "Benutzerverwaltung" }, /*#__PURE__*/React.createElement("table", { className: "data-table" }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Name"), /*#__PURE__*/React.createElement("th", null, "Rolle"), /*#__PURE__*/React.createElement("th", null, "Status"))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Max Mustermann"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "primary" }, "Admin")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv"))), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Sarah Klein"), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "info" }, "Verkaeufer")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Badge, { variant: "success" }, "Aktiv")))))), activeTab === 'firma' && /*#__PURE__*/React.createElement(Card, { title: "Firmenprofil" }, /*#__PURE__*/React.createElement("div", { className: "two-col" }, /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "Firmenname"), /*#__PURE__*/React.createElement("input", { className: "input", defaultValue: "Nutzfahrzeug Handel GmbH" })), /*#__PURE__*/React.createElement("div", { className: "form-group" }, /*#__PURE__*/React.createElement("label", { className: "label" }, "USt-IdNr."), /*#__PURE__*/React.createElement("input", { className: "input", defaultValue: "DE123456789", style: { fontFamily: 'var(--font-mono)' } }))), /*#__PURE__*/React.createElement(Button, { variant: "primary", icon: "check", style: { marginTop: 'var(--space-4)' } }, "Speichern"))); }; // ============ MAIN APP ============ const App = () => { const { route, navigate } = useRouter(); const [role, setRole] = useState(localStorage.getItem('erp-role') || 'admin'); const [toasts, setToasts] = useState([]); const removeToast = id => setToasts(prev => prev.filter(t => t.id !== id)); const routeParts = route.split('/').filter(Boolean); const view = routeParts[0] || 'dashboard'; const param = routeParts[1]; const queryStr = route.split('?')[1]; const query = {}; if (queryStr) { queryStr.split('&').forEach(p => { const [k, v] = p.split('='); query[k] = v; }); } let content; switch (view) { case 'dashboard': content = /*#__PURE__*/React.createElement(DashboardView, { navigate: navigate, role: role }); break; case 'fahrzeuge': if (param === 'neu') content = /*#__PURE__*/React.createElement(FahrzeugForm, { navigate: navigate, editId: query.id });else content = /*#__PURE__*/React.createElement(FahrzeugListe, { navigate: navigate, role: role }); break; case 'fahrzeug': content = /*#__PURE__*/React.createElement(FahrzeugDetail, { id: param, navigate: navigate, role: role }); break; case 'kontakte': content = /*#__PURE__*/React.createElement(KontakteListe, { navigate: navigate, role: role }); break; case 'verkauf': content = /*#__PURE__*/React.createElement(VerkaufsModul, { navigate: navigate, role: role, preselectVehicle: query.vehicle }); break; case 'ki-copilot': content = /*#__PURE__*/React.createElement(KiCopilot, { navigate: navigate, role: role }); break; case 'einstellungen': content = /*#__PURE__*/React.createElement(Einstellungen, { navigate: navigate }); break; default: content = /*#__PURE__*/React.createElement(DashboardView, { navigate: navigate, role: role }); } return /*#__PURE__*/React.createElement("div", { className: "app-layout" }, /*#__PURE__*/React.createElement(Sidebar, { route: '/' + view, navigate: navigate, role: role }), /*#__PURE__*/React.createElement("div", { className: "main-content" }, /*#__PURE__*/React.createElement(Topbar, { route: route, role: role, setRole: setRole, navigate: navigate }), /*#__PURE__*/React.createElement("main", { id: "main-content", className: "content-area" }, content))); }; ReactDOM.createRoot(document.getElementById('root')).render(/*#__PURE__*/React.createElement(App, null));