(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined, "[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "ToastProvider", ()=>ToastProvider, "useToast", ()=>useToast ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$info$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Info$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/info.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs [app-client] (ecmascript) "); ; var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(); 'use client'; ; ; const ToastContext = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createContext"])(null); function useToast() { _s(); const ctx = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useContext"])(ToastContext); if (!ctx) throw new Error('useToast must be used within ToastProvider'); return ctx; } _s(useToast, "/dMy7t63NXD4eYACoT93CePwGrg="); const icons = { success: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__["CheckCircle2"], { className: "w-5 h-5 text-emerald-500" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 37, columnNumber: 12 }, ("TURBOPACK compile-time value", void 0)), error: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertCircle$3e$__["AlertCircle"], { className: "w-5 h-5 text-red-500" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 38, columnNumber: 10 }, ("TURBOPACK compile-time value", void 0)), warning: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], { className: "w-5 h-5 text-amber-500" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 39, columnNumber: 12 }, ("TURBOPACK compile-time value", void 0)), info: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$info$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Info$3e$__["Info"], { className: "w-5 h-5 text-blue-500" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 40, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)) }; const bgColors = { success: 'bg-emerald-50 border-emerald-200', error: 'bg-red-50 border-red-200', warning: 'bg-amber-50 border-amber-200', info: 'bg-blue-50 border-blue-200' }; function ToastProvider({ children }) { _s1(); const [toasts, setToasts] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); const [confirmState, setConfirmState] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const toast = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "ToastProvider.useCallback[toast]": (message, type = 'info', duration = 4000)=>{ const id = crypto.randomUUID(); setToasts({ "ToastProvider.useCallback[toast]": (prev)=>[ ...prev, { id, message, type, duration } ] }["ToastProvider.useCallback[toast]"]); if (duration > 0) { setTimeout({ "ToastProvider.useCallback[toast]": ()=>{ setToasts({ "ToastProvider.useCallback[toast]": (prev)=>prev.filter({ "ToastProvider.useCallback[toast]": (t)=>t.id !== id }["ToastProvider.useCallback[toast]"]) }["ToastProvider.useCallback[toast]"]); } }["ToastProvider.useCallback[toast]"], duration); } } }["ToastProvider.useCallback[toast]"], []); const confirm = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "ToastProvider.useCallback[confirm]": (options)=>{ return new Promise({ "ToastProvider.useCallback[confirm]": (resolve)=>{ setConfirmState({ options, resolve }); } }["ToastProvider.useCallback[confirm]"]); } }["ToastProvider.useCallback[confirm]"], []); const handleConfirm = (result)=>{ confirmState?.resolve(result); setConfirmState(null); }; const removeToast = (id)=>{ setToasts((prev)=>prev.filter((t)=>t.id !== id)); }; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(ToastContext.Provider, { value: { toast, confirm }, children: [ children, /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "fixed top-4 right-4 z-[100] space-y-3 pointer-events-none", style: { maxWidth: '400px' }, children: toasts.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: `pointer-events-auto flex items-start gap-3 p-4 rounded-xl border shadow-lg backdrop-blur-sm ${bgColors[t.type]} animate-slide-in`, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-shrink-0 mt-0.5", children: icons[t.type] }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 93, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-sm font-medium text-slate-800 flex-1", children: t.message }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 94, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>removeToast(t.id), className: "flex-shrink-0 text-slate-400 hover:text-slate-600 transition", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], { className: "w-4 h-4" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 96, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 95, columnNumber: 13 }, this) ] }, t.id, true, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 89, columnNumber: 11 }, this)) }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 87, columnNumber: 7 }, this), confirmState && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "fixed inset-0 bg-slate-900/60 backdrop-blur-sm flex items-center justify-center z-[110] p-4 animate-fade-in", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "bg-white rounded-2xl shadow-2xl max-w-md w-full p-8 animate-scale-in", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 ${confirmState.options.danger ? 'bg-red-100' : 'bg-blue-100'}`, children: confirmState.options.danger ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], { className: "w-6 h-6 text-red-600" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 108, columnNumber: 19 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$info$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Info$3e$__["Info"], { className: "w-6 h-6 text-blue-600" }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 109, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 106, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { className: "text-lg font-bold text-slate-900 mb-2", children: confirmState.options.title }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 112, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-sm text-slate-600 mb-8", children: confirmState.options.message }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 113, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex justify-end gap-3", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>handleConfirm(false), className: "px-5 py-2.5 rounded-lg text-slate-600 font-medium hover:bg-slate-100 transition", children: confirmState.options.cancelLabel || 'Abbrechen' }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 115, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>handleConfirm(true), className: `px-5 py-2.5 rounded-lg font-medium text-white shadow-sm transition ${confirmState.options.danger ? 'bg-red-600 hover:bg-red-700' : 'bg-indigo-600 hover:bg-indigo-700'}`, children: confirmState.options.confirmLabel || 'Bestätigen' }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 121, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 114, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 105, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 104, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/app/components/ToastProvider.tsx", lineNumber: 83, columnNumber: 5 }, this); } _s1(ToastProvider, "UGDu7jitobmUxszvBWtdL1bPcpM="); _c = ToastProvider; var _c; __turbopack_context__.k.register(_c, "ToastProvider"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/app/billing/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "default", ()=>T2medBillingPage ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/file-text.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check-big.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/user.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$printer$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Printer$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/printer.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/search.mjs [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2f$dist$2f$jspdf$2e$es$2e$min$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jspdf/dist/jspdf.es.min.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2d$autotable$2f$dist$2f$jspdf$2e$plugin$2e$autotable$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(); // /opt/erp-system/app/billing/page.tsx 'use client'; ; ; ; ; ; function T2medBillingPage() { _s(); const [groups, setGroups] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); const [settings, setSettings] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true); const [searchTerm, setSearchTerm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(''); const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])(); // T2med Split-Screen States const [activeCustomer, setActiveCustomer] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [draftEntries, setDraftEntries] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "T2medBillingPage.useEffect": ()=>{ fetchData(); } }["T2medBillingPage.useEffect"], []); const fetchData = async ()=>{ setLoading(true); const [billingRes, settingsRes] = await Promise.all([ fetch('/api/billing'), fetch('/api/settings') ]); if (billingRes.ok && settingsRes.ok) { const entries = await billingRes.json(); const loadedSettings = await settingsRes.json(); setSettings(loadedSettings); // Gruppieren nach Kunde const groupedData = entries.reduce((acc, entry)=>{ const cid = entry.ticket.customerId; if (!acc[cid]) { acc[cid] = { customer: entry.ticket.customer, entries: [], totalMins: 0 }; } acc[cid].entries.push(entry); acc[cid].totalMins += entry.durationMins; return acc; }, {}); setGroups(Object.values(groupedData)); } setLoading(false); }; // Aktiviert den Kunden für die rechte Bildschirmhälfte const selectCustomer = (group)=>{ setActiveCustomer(group.customer); // Erstelle eine tiefe Kopie der Einträge für das Inline-Editing setDraftEntries(JSON.parse(JSON.stringify(group.entries))); }; // Inline-Editing im Rechnungsblatt const handleUpdateDraft = async (id, field, value)=>{ const updated = draftEntries.map((e)=>e.id === id ? { ...e, [field]: value } : e); setDraftEntries(updated); // Speichere die Änderung sofort im Hintergrund in der DB ab (T2med-Feeling) const entry = updated.find((e)=>e.id === id); await fetch(`/api/time-entries/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ description: entry.description, durationMins: entry.durationMins }) }); // Aktualisiere die linke Liste leise mit den neuen Summen fetchData(); }; const markAsBilled = async ()=>{ const entryIds = draftEntries.map((e)=>e.id); const res = await fetch('/api/billing', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ entryIds }) }); if (res.ok) { setActiveCustomer(null); setDraftEntries([]); fetchData(); } else { toast('Fehler beim Abschließen.', 'error'); } }; const generatePDF = ()=>{ if (!settings) return; const doc = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2f$dist$2f$jspdf$2e$es$2e$min$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsPDF"](); const dateStr = new Date().toLocaleDateString('de-DE'); const yyyy = new Date().getFullYear(); const mm = String(new Date().getMonth() + 1).padStart(2, '0'); const seq = String(Date.now()).slice(-5); const invNo = `RE-${yyyy}${mm}-${seq}`; doc.setFontSize(20); doc.text(settings.companyName || "ERP SYSTEM", 14, 20); doc.setFontSize(9); doc.text(settings.companyInfo || "", 14, 30); doc.setFontSize(11); doc.text("Rechnung an:", 14, 55); doc.setFont("helvetica", "bold"); doc.text(activeCustomer.companyName || `${activeCustomer.firstName} ${activeCustomer.lastName}`, 14, 62); doc.setFont("helvetica", "normal"); doc.text(`${activeCustomer.address || ''}\n${activeCustomer.zipCode || ''} ${activeCustomer.city || ''}`, 14, 68); doc.text(`Datum: ${dateStr}`, 140, 62); doc.text(`Rechnungs-Nr: ${invNo}`, 140, 68); const tableData = draftEntries.map((e)=>[ new Date(e.createdAt).toLocaleDateString('de-DE'), `${e.ticket.title}\n${e.description}`, (e.durationMins / 60).toFixed(2) + " h", settings.hourlyRate.toFixed(2) + " €", (e.durationMins / 60 * settings.hourlyRate).toFixed(2) + " €" ]); (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2d$autotable$2f$dist$2f$jspdf$2e$plugin$2e$autotable$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])(doc, { startY: 90, head: [ [ 'Datum', 'Leistung', 'Menge', 'Einzelpreis', 'Gesamt' ] ], body: tableData, theme: 'striped', headStyles: { fillColor: [ 79, 70, 229 ] }, styles: { cellPadding: 4, fontSize: 9 } }); const netTotal = draftEntries.reduce((sum, e)=>sum + e.durationMins / 60 * settings.hourlyRate, 0); const tax = netTotal * (settings.taxRate / 100); const grossTotal = netTotal + tax; const finalY = doc.lastAutoTable.finalY + 10; doc.text(`Netto Gesamt:`, 140, finalY); doc.text(`${netTotal.toFixed(2)} €`, 180, finalY, { align: 'right' }); doc.text(`USt. ${settings.taxRate}%:`, 140, finalY + 6); doc.text(`${tax.toFixed(2)} €`, 180, finalY + 6, { align: 'right' }); doc.setFont("helvetica", "bold"); doc.text(`Rechnungsbetrag:`, 140, finalY + 14); doc.text(`${grossTotal.toFixed(2)} €`, 180, finalY + 14, { align: 'right' }); doc.save(`Rechnung_${invNo}.pdf`); }; const filteredGroups = groups.filter((g)=>{ const name = g.customer.companyName || `${g.customer.firstName} ${g.customer.lastName}`; return name.toLowerCase().includes(searchTerm.toLowerCase()); }); if (loading && groups.length === 0) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-8 font-medium text-slate-500 animate-pulse", children: "Lade Abrechnungs-Modul..." }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 156, columnNumber: 46 }, this); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex h-[calc(100vh-8rem)] -m-8 bg-white border-t border-slate-200", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "w-1/3 min-w-[320px] max-w-sm border-r border-slate-200 bg-slate-50 flex flex-col h-full", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-4 border-b border-slate-200 bg-white shadow-sm z-10", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { className: "text-lg font-bold text-slate-800 flex items-center gap-2 mb-3", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__["FileText"], { className: "w-5 h-5 text-indigo-600" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 165, columnNumber: 13 }, this), " Abrechnungslauf" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 164, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "relative", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__["Search"], { className: "w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 168, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { type: "text", placeholder: "Kunde suchen...", value: searchTerm, onChange: (e)=>setSearchTerm(e.target.value), className: "w-full pl-9 pr-3 py-2 bg-slate-100 border border-transparent rounded-lg text-sm focus:bg-white focus:border-indigo-300 focus:ring-2 focus:ring-indigo-100 outline-none transition" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 169, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 167, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 163, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 overflow-y-auto divide-y divide-slate-100", children: filteredGroups.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-6 text-center text-slate-500 text-sm", children: "Keine offenen Positionen." }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 181, columnNumber: 13 }, this) : filteredGroups.map((group, idx)=>{ const name = group.customer.companyName || `${group.customer.firstName} ${group.customer.lastName}`; const isActive = activeCustomer?.id === group.customer.id; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>selectCustomer(group), className: `w-full text-left p-4 transition-all border-l-4 ${isActive ? 'bg-indigo-50 border-indigo-600' : 'bg-transparent border-transparent hover:bg-slate-100'}`, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex justify-between items-start", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: `font-semibold ${isActive ? 'text-indigo-900' : 'text-slate-800'}`, children: name }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 194, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-xs font-bold text-slate-500 bg-white px-2 py-1 rounded-md shadow-sm border border-slate-200", children: [ group.entries.length, " Pos." ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 195, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 193, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-4 mt-2 text-sm text-slate-500", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "flex items-center gap-1", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], { className: "w-3.5 h-3.5" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 200, columnNumber: 63 }, this), " ", (group.totalMins / 60).toFixed(1), " h" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 200, columnNumber: 21 }, this), settings && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "font-mono text-indigo-600 font-medium", children: [ (group.totalMins / 60 * settings.hourlyRate).toFixed(2), " €" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 202, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 199, columnNumber: 19 }, this) ] }, idx, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 188, columnNumber: 17 }, this); }) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 179, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 162, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 bg-slate-200/50 flex flex-col h-full overflow-hidden", children: !activeCustomer ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 flex flex-col items-center justify-center text-slate-400", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__["User"], { className: "w-16 h-16 mb-4 opacity-20" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 216, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "font-medium text-lg text-slate-500", children: "Bitte wähle links einen Kunden aus" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 217, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 215, columnNumber: 11 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 overflow-y-auto p-8 relative", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute top-8 right-8 flex gap-3 z-10", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: generatePDF, className: "bg-indigo-600 text-white px-4 py-2 rounded-lg font-bold shadow-md hover:bg-indigo-700 transition flex items-center gap-2 text-sm", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$printer$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Printer$3e$__["Printer"], { className: "w-4 h-4" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 225, columnNumber: 17 }, this), " PDF erstellen" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 224, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: markAsBilled, className: "bg-emerald-600 text-white px-4 py-2 rounded-lg font-bold shadow-md hover:bg-emerald-700 transition flex items-center gap-2 text-sm", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle$3e$__["CheckCircle"], { className: "w-4 h-4" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 228, columnNumber: 17 }, this), " Als erledigt markieren" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 227, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 223, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "bg-white max-w-4xl mx-auto min-h-[800px] shadow-lg border border-slate-200 rounded-sm p-12", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "border-b border-slate-200 pb-8 mb-8 flex justify-between items-start", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { className: "text-3xl font-bold text-slate-900 mb-2", children: "Rechnungsentwurf" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 236, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-lg text-slate-600 font-medium", children: activeCustomer.companyName || `${activeCustomer.firstName} ${activeCustomer.lastName}` }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 237, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-sm text-slate-500", children: activeCustomer.address || 'Keine Adresse hinterlegt' }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 238, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 235, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "text-right text-slate-500 text-sm", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { children: [ "Stundensatz: ", /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { className: "text-slate-800", children: [ settings?.hourlyRate, " €" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 241, columnNumber: 35 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 241, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { children: [ "MwSt: ", /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { className: "text-slate-800", children: [ settings?.taxRate, " %" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 242, columnNumber: 28 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 242, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 240, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 234, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "w-full", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "grid grid-cols-12 gap-4 pb-3 border-b-2 border-slate-800 font-bold text-slate-700 text-sm", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2", children: "Datum" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 249, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-6", children: "Leistung" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 250, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-right", children: "Minuten" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 251, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-right", children: "Betrag" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 252, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 248, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "divide-y divide-slate-100", children: draftEntries.map((entry)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "grid grid-cols-12 gap-4 py-3 group hover:bg-indigo-50/50 transition-colors -mx-4 px-4 rounded-lg", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-sm text-slate-500 pt-1.5", children: new Date(entry.createdAt).toLocaleDateString('de-DE') }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 258, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-6", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-xs text-indigo-500 font-bold mb-1", children: [ "Ticket #", entry.ticket.id ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 262, columnNumber: 25 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", { className: "w-full bg-transparent border border-transparent group-hover:border-slate-200 focus:bg-white focus:border-indigo-300 focus:ring-2 focus:ring-indigo-100 rounded p-1.5 text-sm text-slate-800 outline-none resize-none transition", rows: 2, value: entry.description, onChange: (e)=>handleUpdateDraft(entry.id, 'description', e.target.value) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 263, columnNumber: 25 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 261, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-right pt-1.5", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { type: "number", step: "15", className: "w-16 text-right bg-transparent border border-transparent group-hover:border-slate-200 focus:bg-white focus:border-indigo-300 focus:ring-2 focus:ring-indigo-100 rounded p-1 text-sm text-slate-800 font-mono outline-none transition inline-block", value: entry.durationMins, onChange: (e)=>handleUpdateDraft(entry.id, 'durationMins', parseInt(e.target.value)) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 271, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 270, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-right pt-2 font-mono text-slate-700 font-medium", children: [ settings ? (entry.durationMins / 60 * settings.hourlyRate).toFixed(2) : '0.00', " €" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 279, columnNumber: 23 }, this) ] }, entry.id, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 257, columnNumber: 21 }, this)) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 255, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "mt-8 pt-4 border-t-2 border-slate-800 grid grid-cols-12 gap-4", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-10 text-right font-bold text-slate-700", children: "Netto Gesamt:" }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 287, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "col-span-2 text-right font-bold text-slate-900 font-mono text-lg", children: [ settings ? draftEntries.reduce((sum, e)=>sum + e.durationMins / 60 * settings.hourlyRate, 0).toFixed(2) : '0.00', " €" ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 288, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 286, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 247, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 233, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 220, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/app/billing/page.tsx", lineNumber: 213, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/page.tsx", lineNumber: 159, columnNumber: 5 }, this); } _s(T2medBillingPage, "cIz+c3XdCkdt+cPmX8rCC1dxtsI=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"] ]; }); _c = T2medBillingPage; var _c; __turbopack_context__.k.register(_c, "T2medBillingPage"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), ]); //# sourceMappingURL=app_0ezm41l._.js.map