diff --git a/packages/acquisition-library/build.mjs b/packages/pdf-library/build.mjs
similarity index 85%
rename from packages/acquisition-library/build.mjs
rename to packages/pdf-library/build.mjs
index a00dafd..a7f3ca3 100644
--- a/packages/acquisition-library/build.mjs
+++ b/packages/pdf-library/build.mjs
@@ -6,21 +6,23 @@ import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
-const entryPoint = resolve(__dirname, 'src/index.ts');
-const outfile = resolve(__dirname, 'dist/index.js');
+const entryPoints = [
+ resolve(__dirname, 'src/index.ts'),
+ resolve(__dirname, 'src/server.ts')
+];
try {
- mkdirSync(dirname(outfile), { recursive: true });
+ mkdirSync(resolve(__dirname, 'dist'), { recursive: true });
} catch (e) { }
-console.log(`Building from ${entryPoint} to ${outfile}...`);
+console.log(`Building entry points...`);
build({
- entryPoints: [entryPoint],
+ entryPoints: entryPoints,
bundle: true,
platform: 'node',
target: 'node18',
- outfile: outfile,
+ outdir: resolve(__dirname, 'dist'),
format: 'esm',
jsx: 'automatic',
loader: {
diff --git a/packages/acquisition-library/package.json b/packages/pdf-library/package.json
similarity index 62%
rename from packages/acquisition-library/package.json
rename to packages/pdf-library/package.json
index a8eadb3..ca8b9b9 100644
--- a/packages/acquisition-library/package.json
+++ b/packages/pdf-library/package.json
@@ -1,9 +1,22 @@
{
- "name": "@mintel/acquisition",
+ "name": "@mintel/pdf",
"version": "1.7.12",
"type": "module",
"main": "dist/index.js",
"module": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js",
+ "default": "./dist/index.js"
+ },
+ "./server": {
+ "types": "./dist/server.d.ts",
+ "import": "./dist/server.js",
+ "default": "./dist/server.js"
+ }
+ },
"scripts": {
"build": "node build.mjs",
"dev": "node build.mjs --watch"
diff --git a/packages/pdf-library/src/components/AgbsPDF.tsx b/packages/pdf-library/src/components/AgbsPDF.tsx
new file mode 100644
index 0000000..f64472b
--- /dev/null
+++ b/packages/pdf-library/src/components/AgbsPDF.tsx
@@ -0,0 +1,241 @@
+"use client";
+
+import * as React from "react";
+import {
+ Page as PDFPage,
+ Text as PDFText,
+ View as PDFView,
+ StyleSheet as PDFStyleSheet,
+} from "@react-pdf/renderer";
+import {
+ pdfStyles,
+ Header,
+ Footer,
+ FoldingMarks,
+ DocumentTitle,
+} from "./pdf/SharedUI.js";
+import { SimpleLayout } from "./pdf/SimpleLayout.js";
+
+const localStyles = PDFStyleSheet.create({
+ sectionContainer: {
+ marginTop: 0,
+ },
+ agbSection: {
+ marginBottom: 20,
+ },
+ labelRow: {
+ flexDirection: "row",
+ alignItems: "baseline",
+ marginBottom: 6,
+ },
+ monoNumber: {
+ fontSize: 7,
+ fontWeight: "bold",
+ color: "#94a3b8",
+ letterSpacing: 2,
+ width: 25,
+ },
+ sectionTitle: {
+ fontSize: 9,
+ fontWeight: "bold",
+ color: "#000000",
+ textTransform: "uppercase",
+ letterSpacing: 0.5,
+ },
+ officialText: {
+ fontSize: 8,
+ lineHeight: 1.5,
+ color: "#334155",
+ textAlign: "justify",
+ paddingLeft: 25,
+ },
+});
+
+const AGBSection = ({
+ index,
+ title,
+ children,
+}: {
+ index: string;
+ title: string;
+ children: React.ReactNode;
+}) => (
+
+
+ {index}
+ {title}
+
+ {children}
+
+);
+
+interface AgbsPDFProps {
+ headerIcon?: string;
+ footerLogo?: string;
+ mode?: "estimation" | "full";
+}
+
+export const AgbsPDF = ({
+ headerIcon,
+ footerLogo,
+ mode = "full",
+}: AgbsPDFProps) => {
+ const date = new Date().toLocaleDateString("de-DE", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ });
+
+ const companyData = {
+ name: "Marc Mintel",
+ address1: "Georg-Meistermann-Straße 7",
+ address2: "54586 Schüller",
+ ustId: "DE367588065",
+ };
+
+ const bankData = {
+ name: "N26",
+ bic: "NTSBDEB1XXX",
+ iban: "DE50 1001 1001 2620 4328 65",
+ };
+
+ const content = (
+ <>
+
+
+
+ Diese Allgemeinen Geschäftsbedingungen gelten für alle Verträge
+ zwischen Marc Mintel (nachfolgend „Auftragnehmer“) und dem jeweiligen
+ Kunden (nachfolgend „Auftraggeber“). Abweichende oder ergänzende
+ Bedingungen des Auftraggebers werden nicht Vertragsbestandteil, auch
+ wenn ihrer Geltung nicht ausdrücklich widersprochen wird.
+
+
+
+ Der Auftragnehmer erbringt Dienstleistungen im Bereich:
+ Webentwicklung, technische Umsetzung digitaler Systeme, Funktionen,
+ Schnittstellen und Automatisierungen sowie Hosting, Betrieb und
+ Wartung, sofern ausdrücklich vereinbard. Der Auftragnehmer schuldet
+ ausschließlich die vereinbarte technische Leistung, nicht jedoch einen
+ wirtschaftlichen Erfolg, bestimmte Umsätze, Conversions, Reichweiten,
+ Suchmaschinen-Rankings oder rechtliche Ergebnisse.
+
+
+
+ Der Auftraggeber verpflichtet sich, alle zur Leistungserbringung
+ erforderlichen Inhalte, Informationen, Zugänge und Entscheidungen
+ rechtzeitig, vollständig und korrekt bereitzustellen. Hierzu zählen
+ insbesondere Texte, Bilder, Videos, Produktdaten, Freigaben, Feedback,
+ Zugangsdaten sowie rechtlich erforderliche Inhalte (z. B. Impressum,
+ DSGVO). Verzögerungen oder Unterlassungen führen zu Verschiebungen
+ aller Termine ohne Schadensersatzanspruch.
+
+
+
+ Angegebene Bearbeitungszeiten sind unverbindliche Schätzungen, keine
+ garantierten Fristen. Fixe Termine oder Deadlines gelten nur, wenn sie
+ ausdrücklich schriftlich als verbindlich vereinbart wurden.
+
+
+
+ Die Leistung gilt als abgenommen, wenn der Auftraggeber sie produktiv
+ nutzt oder innerhalb von 7 Tagen nach Bereitstellung keine
+ wesentlichen Mängel angezeigt werden. Optische Abweichungen,
+ Geschmacksfragen oder subjektive Einschätzungen stellen keine Mängel
+ dar.
+
+
+
+ Der Auftragnehmer haftet nur für Schäden, die auf vorsätzlicher oder
+ grob fahrlässiger Pflichtverletzung beruhen. Eine Haftung für
+ entgangenen Gewinn, Umsatzausfälle, Datenverlust,
+ Betriebsunterbrechungen, mittelbare oder Folgeschäden ist
+ ausgeschlossen, soweit gesetzlich zulässig.
+
+
+
+ Bei vereinbartem Hosting oder Betrieb schuldet der Auftragnehmer keine
+ permanente Verfügbarkeit. Wartungsarbeiten, Updates,
+ Sicherheitsmaßnahmen oder externe Störungen können zu zeitweisen
+ Einschränkungen führen und begründen keine Haftungsansprüche.
+
+
+
+ Die Betriebs- und Pflegeleistung umfasst ausschließlich die
+ Sicherstellung des technischen Betriebs, Wartung, Updates,
+ Fehlerbehebung der bestehenden Systeme sowie Pflege bestehender
+ Datensätze ohne Strukturänderung. Nicht Bestandteil sind die
+ Erstellung neuer Inhalte (Blogartikel, News, Produkte), redaktionelle
+ Tätigkeiten, strategische Planung oder der Aufbau neuer
+ Features/Datenmodelle. Leistungen darüber hinaus gelten als
+ Neuentwicklung.
+
+
+
+ Der Auftragnehmer übernimmt keine Verantwortung für Leistungen,
+ Ausfälle oder Änderungen externer Dienste, APIs, Schnittstellen oder
+ Plattformen Dritter. Eine Funktionsfähigkeit kann nur im Rahmen der
+ jeweils aktuellen externen Schnittstellen gewährleistet werden.
+
+
+
+ Der Auftraggeber ist allein verantwortlich für Inhalte, rechtliche
+ Konformität (DSGVO, Urheberrecht etc.) sowie bereitgestellte Daten.
+ Der Auftragnehmer übernimmt keine rechtliche Prüfung.
+
+
+
+ Alle Preise netto zzgl. MwSt. Rechnungen sind innerhalb von 7 Tagen
+ fällig. Bei Zahlungsverzug ist der Auftragnehmer berechtigt,
+ Leistungen auszusetzen, Systeme offline zu nehmen oder laufende
+ Arbeiten zu stoppen.
+
+
+
+ Laufende Leistungen (z. B. Hosting & Betrieb) können mit einer Frist
+ von 4 Wochen zum Monatsende gekündigt werden, sofern nichts anderes
+ vereinbart ist.
+
+
+
+ Es gilt das Recht der Bundesrepublik Deutschland. Gerichtsstand ist
+ der Sitz des Auftragnehmers. Sollte eine Bestimmung unwirksam sein,
+ bleibt die Wirksamkeit der übrigen Regelungen unberührt.
+
+
+ >
+ );
+
+ if (mode === "full") {
+ return (
+
+ {content}
+
+ );
+ }
+
+ return (
+
+
+
+ {content}
+
+
+ );
+};
diff --git a/packages/pdf-library/src/components/CombinedQuotePDF.tsx b/packages/pdf-library/src/components/CombinedQuotePDF.tsx
new file mode 100644
index 0000000..3aaaebb
--- /dev/null
+++ b/packages/pdf-library/src/components/CombinedQuotePDF.tsx
@@ -0,0 +1,79 @@
+"use client";
+
+import * as React from "react";
+import { Document as PDFDocument } from "@react-pdf/renderer";
+import { EstimationPDF } from "./EstimationPDF.js";
+import { AgbsPDF } from "./AgbsPDF.js";
+import { SimpleLayout } from "./pdf/SimpleLayout.js";
+import { ClosingModule } from "./pdf/modules/CommonModules.js";
+
+interface CombinedProps {
+ estimationProps: any;
+ showAgbs?: boolean;
+ techDetails?: any[];
+ principles?: any[];
+ maintenanceDetails?: any[];
+ standardsDetails?: any[];
+}
+
+export const CombinedQuotePDF = ({
+ estimationProps,
+ showAgbs = true,
+ techDetails,
+ principles,
+ maintenanceDetails,
+ standardsDetails,
+ mode = "full",
+}: CombinedProps & { mode?: "estimation" | "full" }) => {
+ const date = new Date().toLocaleDateString("de-DE", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ });
+
+ const companyData = {
+ name: "Marc Mintel",
+ address1: "Georg-Meistermann-Straße 7",
+ address2: "54586 Schüller",
+ ustId: "DE367588065",
+ };
+
+ const bankData = {
+ name: "N26",
+ bic: "NTSBDEB1XXX",
+ iban: "DE50 1001 1001 2620 4328 65",
+ };
+
+ const layoutProps = {
+ date,
+ icon: estimationProps.headerIcon,
+ footerLogo: estimationProps.footerLogo,
+ companyData,
+ bankData,
+ };
+
+ return (
+
+
+ {showAgbs && (
+
+ )}
+
+
+
+
+ );
+};
diff --git a/packages/acquisition-library/src/components/EstimationPDF.tsx b/packages/pdf-library/src/components/EstimationPDF.tsx
similarity index 98%
rename from packages/acquisition-library/src/components/EstimationPDF.tsx
rename to packages/pdf-library/src/components/EstimationPDF.tsx
index 9fd4d22..290d015 100644
--- a/packages/acquisition-library/src/components/EstimationPDF.tsx
+++ b/packages/pdf-library/src/components/EstimationPDF.tsx
@@ -18,6 +18,8 @@ import { calculatePositions } from "../logic/pricing/calculator.js";
interface PDFProps {
state: any;
totalPrice: number;
+ monthlyPrice?: number;
+ totalPagesCount?: number;
pricing: any;
headerIcon?: string;
footerLogo?: string;
diff --git a/packages/acquisition-library/src/components/pdf/DINLayout.tsx b/packages/pdf-library/src/components/pdf/DINLayout.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/DINLayout.tsx
rename to packages/pdf-library/src/components/pdf/DINLayout.tsx
diff --git a/packages/acquisition-library/src/components/pdf/SharedUI.tsx b/packages/pdf-library/src/components/pdf/SharedUI.tsx
similarity index 99%
rename from packages/acquisition-library/src/components/pdf/SharedUI.tsx
rename to packages/pdf-library/src/components/pdf/SharedUI.tsx
index a2b7a4f..e5df20d 100644
--- a/packages/acquisition-library/src/components/pdf/SharedUI.tsx
+++ b/packages/pdf-library/src/components/pdf/SharedUI.tsx
@@ -525,11 +525,13 @@ export const FoldingMarks = () => (
export const Footer = ({
logo,
companyData,
+ bankData,
showDetails = true,
showPageNumber = true,
}: {
logo?: string;
companyData: any;
+ bankData?: any;
showDetails?: boolean;
showPageNumber?: boolean;
}) => (
diff --git a/packages/acquisition-library/src/components/pdf/SimpleLayout.tsx b/packages/pdf-library/src/components/pdf/SimpleLayout.tsx
similarity index 96%
rename from packages/acquisition-library/src/components/pdf/SimpleLayout.tsx
rename to packages/pdf-library/src/components/pdf/SimpleLayout.tsx
index 4640196..8614bd5 100644
--- a/packages/acquisition-library/src/components/pdf/SimpleLayout.tsx
+++ b/packages/pdf-library/src/components/pdf/SimpleLayout.tsx
@@ -33,6 +33,7 @@ interface SimpleLayoutProps {
icon?: string;
footerLogo?: string;
companyData: any;
+ bankData?: any;
showPageNumber?: boolean;
}
@@ -42,6 +43,7 @@ export const SimpleLayout = ({
icon,
footerLogo,
companyData,
+ bankData,
showPageNumber = true
}: SimpleLayoutProps) => {
return (
@@ -56,6 +58,7 @@ export const SimpleLayout = ({
diff --git a/packages/acquisition-library/src/components/pdf/modules/BrandingModules.tsx b/packages/pdf-library/src/components/pdf/modules/BrandingModules.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/BrandingModules.tsx
rename to packages/pdf-library/src/components/pdf/modules/BrandingModules.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/BriefingModule.tsx b/packages/pdf-library/src/components/pdf/modules/BriefingModule.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/BriefingModule.tsx
rename to packages/pdf-library/src/components/pdf/modules/BriefingModule.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/CommonModules.tsx b/packages/pdf-library/src/components/pdf/modules/CommonModules.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/CommonModules.tsx
rename to packages/pdf-library/src/components/pdf/modules/CommonModules.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/EstimationModule.tsx b/packages/pdf-library/src/components/pdf/modules/EstimationModule.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/EstimationModule.tsx
rename to packages/pdf-library/src/components/pdf/modules/EstimationModule.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/FrontPageModule.tsx b/packages/pdf-library/src/components/pdf/modules/FrontPageModule.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/FrontPageModule.tsx
rename to packages/pdf-library/src/components/pdf/modules/FrontPageModule.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/SitemapModule.tsx b/packages/pdf-library/src/components/pdf/modules/SitemapModule.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/SitemapModule.tsx
rename to packages/pdf-library/src/components/pdf/modules/SitemapModule.tsx
diff --git a/packages/acquisition-library/src/components/pdf/modules/TransparenzModule.tsx b/packages/pdf-library/src/components/pdf/modules/TransparenzModule.tsx
similarity index 100%
rename from packages/acquisition-library/src/components/pdf/modules/TransparenzModule.tsx
rename to packages/pdf-library/src/components/pdf/modules/TransparenzModule.tsx
diff --git a/packages/acquisition-library/src/index.ts b/packages/pdf-library/src/index.ts
similarity index 88%
rename from packages/acquisition-library/src/index.ts
rename to packages/pdf-library/src/index.ts
index 44387e1..0186284 100644
--- a/packages/acquisition-library/src/index.ts
+++ b/packages/pdf-library/src/index.ts
@@ -1,8 +1,6 @@
export * from "./logic/pricing/types.js";
export * from "./logic/pricing/constants.js";
export * from "./logic/pricing/calculator.js";
-export * from "./services/AcquisitionService.js";
-export * from "./services/PdfEngine.js";
export * from "./components/EstimationPDF.js";
export * from "./components/pdf/SimpleLayout.js";
export * from "./components/pdf/SharedUI.js";
@@ -13,3 +11,5 @@ export * from "./components/pdf/modules/EstimationModule.js";
export * from "./components/pdf/modules/CommonModules.js";
export * from "./components/pdf/modules/BrandingModules.js";
export * from "./components/pdf/modules/TransparenzModule.js";
+export * from "./components/AgbsPDF.js";
+export * from "./components/CombinedQuotePDF.js";
diff --git a/packages/acquisition-library/src/logic/pricing/calculator.ts b/packages/pdf-library/src/logic/pricing/calculator.ts
similarity index 100%
rename from packages/acquisition-library/src/logic/pricing/calculator.ts
rename to packages/pdf-library/src/logic/pricing/calculator.ts
diff --git a/packages/acquisition-library/src/logic/pricing/constants.ts b/packages/pdf-library/src/logic/pricing/constants.ts
similarity index 100%
rename from packages/acquisition-library/src/logic/pricing/constants.ts
rename to packages/pdf-library/src/logic/pricing/constants.ts
diff --git a/packages/acquisition-library/src/logic/pricing/types.ts b/packages/pdf-library/src/logic/pricing/types.ts
similarity index 100%
rename from packages/acquisition-library/src/logic/pricing/types.ts
rename to packages/pdf-library/src/logic/pricing/types.ts
diff --git a/packages/pdf-library/src/server.ts b/packages/pdf-library/src/server.ts
new file mode 100644
index 0000000..1feab65
--- /dev/null
+++ b/packages/pdf-library/src/server.ts
@@ -0,0 +1,3 @@
+export * from "./index.js";
+export * from "./services/AcquisitionService.js";
+export * from "./services/PdfEngine.js";
diff --git a/packages/acquisition-library/src/services/AcquisitionService.ts b/packages/pdf-library/src/services/AcquisitionService.ts
similarity index 100%
rename from packages/acquisition-library/src/services/AcquisitionService.ts
rename to packages/pdf-library/src/services/AcquisitionService.ts
diff --git a/packages/acquisition-library/src/services/PdfEngine.ts b/packages/pdf-library/src/services/PdfEngine.ts
similarity index 100%
rename from packages/acquisition-library/src/services/PdfEngine.ts
rename to packages/pdf-library/src/services/PdfEngine.ts
diff --git a/packages/acquisition-library/src/utils/cache/FileCacheAdapter.ts b/packages/pdf-library/src/utils/cache/FileCacheAdapter.ts
similarity index 100%
rename from packages/acquisition-library/src/utils/cache/FileCacheAdapter.ts
rename to packages/pdf-library/src/utils/cache/FileCacheAdapter.ts
diff --git a/packages/pdf-library/tsconfig.json b/packages/pdf-library/tsconfig.json
new file mode 100644
index 0000000..51d4e28
--- /dev/null
+++ b/packages/pdf-library/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "jsx": "react-jsx",
+ "declaration": true,
+ "declarationDir": "dist",
+ "emitDeclarationOnly": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "outDir": "dist"
+ },
+ "include": [
+ "src/**/*"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist",
+ "build.mjs"
+ ]
+}
\ No newline at end of file