@flowselections/layout-maker 1.7.2 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +69 -54
  2. package/dist-lib/components/AfdrukKnop.d.ts +1 -1
  3. package/dist-lib/components/AfdrukKnop.js +2 -2
  4. package/dist-lib/components/AiLayoutImportDialog.js +4 -4
  5. package/dist-lib/components/BlokOntwerperPage.js +5 -5
  6. package/dist-lib/components/ComputersLijst.js +2 -2
  7. package/dist-lib/components/DocumentSettingsPanel.d.ts +2 -2
  8. package/dist-lib/components/DocumentSettingsPanel.js +3 -3
  9. package/dist-lib/components/FormaatOrientatieBar.d.ts +1 -1
  10. package/dist-lib/components/FormaatOrientatieBar.js +2 -2
  11. package/dist-lib/components/LayoutsPage.js +4 -4
  12. package/dist-lib/components/LogoBibliotheekDialog.d.ts +1 -1
  13. package/dist-lib/components/LogoBibliotheekDialog.js +2 -2
  14. package/dist-lib/components/LogosPage.d.ts +1 -1
  15. package/dist-lib/components/LogosPage.js +2 -2
  16. package/dist-lib/components/NetwerkPrintersDialog.js +2 -2
  17. package/dist-lib/components/PakbonBuilderPage.js +8 -8
  18. package/dist-lib/components/PakbonPreview.d.ts +1 -1
  19. package/dist-lib/components/PakbonPreview.js +3 -3
  20. package/dist-lib/components/PakbonSectiesPanel.d.ts +1 -1
  21. package/dist-lib/components/PakbonSectiesPanel.js +4 -4
  22. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  23. package/dist-lib/components/PrintQueuePage.js +7 -6
  24. package/dist-lib/components/PrinterSetupWizard.js +6 -6
  25. package/dist-lib/components/PrintersPage.js +7 -7
  26. package/dist-lib/components/ProductiebonBlokkenPanel.d.ts +1 -1
  27. package/dist-lib/components/ProductiebonBlokkenPanel.js +1 -1
  28. package/dist-lib/components/ProductiebonBuilderPage.js +6 -6
  29. package/dist-lib/components/ProductiebonPreview.d.ts +1 -1
  30. package/dist-lib/components/ProductiebonPreview.js +2 -2
  31. package/dist-lib/components/WerkplekConfiguratiePage.js +7 -7
  32. package/dist-lib/index.d.ts +62 -46
  33. package/dist-lib/index.d.ts.map +1 -1
  34. package/dist-lib/index.js +46 -46
  35. package/dist-lib/integrations/supabase/auth-attacher.js +1 -1
  36. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1302 -749
  37. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  38. package/dist-lib/integrations/supabase/client.d.ts +1 -1
  39. package/dist-lib/integrations/supabase/client.js +1 -1
  40. package/dist-lib/integrations/supabase/client.server.d.ts +1302 -749
  41. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  42. package/dist-lib/integrations/supabase/client.server.js +1 -1
  43. package/dist-lib/integrations/supabase/types.d.ts +685 -127
  44. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  45. package/dist-lib/lib/aiLayout.functions.d.ts +1385 -832
  46. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  47. package/dist-lib/lib/aiLayout.functions.js +2 -2
  48. package/dist-lib/lib/aiLayout.server.d.ts +1 -1
  49. package/dist-lib/lib/aiLayout.server.js +9 -9
  50. package/dist-lib/lib/browserPrint.d.ts +1 -1
  51. package/dist-lib/lib/browserPrint.js +8 -8
  52. package/dist-lib/lib/directPrint.d.ts +1 -1
  53. package/dist-lib/lib/directPrint.js +4 -4
  54. package/dist-lib/lib/documentPdf.d.ts +1 -1
  55. package/dist-lib/lib/documentProfiles.d.ts +1 -1
  56. package/dist-lib/lib/formaatPrinters.js +1 -1
  57. package/dist-lib/lib/htmlNaarPdf.server.js +1 -1
  58. package/dist-lib/lib/layoutPreview.d.ts +1 -1
  59. package/dist-lib/lib/layoutPreview.js +8 -8
  60. package/dist-lib/lib/logoLibrary.js +1 -1
  61. package/dist-lib/lib/orderData.server.d.ts +2 -1
  62. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  63. package/dist-lib/lib/orderData.server.js +7 -8
  64. package/dist-lib/lib/pakbonBuilder.d.ts +1 -1
  65. package/dist-lib/lib/pakbonHtml.d.ts +1 -1
  66. package/dist-lib/lib/pakbonHtml.js +52 -52
  67. package/dist-lib/lib/printApi.d.ts +1 -1
  68. package/dist-lib/lib/printApi.js +3 -3
  69. package/dist-lib/lib/printQueue.server.d.ts +12 -3
  70. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  71. package/dist-lib/lib/printQueue.server.js +66 -48
  72. package/dist-lib/lib/printService.functions.d.ts +5539 -24425
  73. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  74. package/dist-lib/lib/printService.functions.js +5 -31
  75. package/dist-lib/lib/printService.server.js +1 -1
  76. package/dist-lib/lib/productiebonBuilder.d.ts +1 -1
  77. package/dist-lib/lib/productiebonHtml.js +17 -17
  78. package/dist-lib/lib/profielHtml.js +20 -20
  79. package/dist-lib/lib/queueTick.d.ts +11 -3
  80. package/dist-lib/lib/queueTick.d.ts.map +1 -1
  81. package/dist-lib/lib/queueTick.js +68 -21
  82. package/dist-lib/lib/queueTickClient.d.ts +8 -0
  83. package/dist-lib/lib/queueTickClient.d.ts.map +1 -0
  84. package/dist-lib/lib/queueTickClient.js +37 -0
  85. package/dist-lib/lib/runnerRegistry.server.d.ts +3 -2
  86. package/dist-lib/lib/runnerRegistry.server.d.ts.map +1 -1
  87. package/dist-lib/lib/runnerRegistry.server.js +6 -8
  88. package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
  89. package/dist-lib/lib/supabaseAdmin.server.js +43 -43
  90. package/dist-lib/lib/supabaseClient.d.ts +1 -1
  91. package/dist-lib/lib/testpagina.js +3 -3
  92. package/dist-lib/lib/useDocumentData.d.ts +1 -1
  93. package/dist-lib/lib/useDocumentData.js +1 -1
  94. package/dist-lib/lib/useNetwerkPrinters.js +1 -1
  95. package/package.json +2 -2
@@ -6,9 +6,9 @@
6
6
  // oriëntatie vooraf goed, zodat de gebruiker in het printvenster niets meer
7
7
  // hoeft aan te passen behalve — indien nodig — de printernaam.
8
8
  // ============================================================================
9
- import { supabase } from "./supabaseClient";
10
- import { documentProfiel } from "./documentProfiles";
11
- import { PAPIERFORMATEN } from "./documentTypes";
9
+ import { supabase } from "./supabaseClient.js";
10
+ import { documentProfiel } from "./documentProfiles.js";
11
+ import { PAPIERFORMATEN } from "./documentTypes.js";
12
12
  const arr = (v) => (Array.isArray(v) ? v : []);
13
13
  /** Zoekt de afmetingen die bij een formaatcode horen. */
14
14
  export function formaatDef(documenttype, code) {
@@ -29,7 +29,7 @@ export function paginaCss(formaat, orientatie, margeMm = 0) {
29
29
  const gedraaid = formaat && orientatie === "landscape"
30
30
  ? `${formaat.hoogte}mm ${formaat.breedte}mm`
31
31
  : size;
32
- return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
32
+ return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
33
33
  @media print { html, body { margin: 0; padding: 0; } }`;
34
34
  }
35
35
  /**
@@ -90,10 +90,10 @@ export async function drukAf(opdracht) {
90
90
  return { printer };
91
91
  }
92
92
  doc.open();
93
- doc.write(`<!doctype html><html><head><meta charset="utf-8" />
94
- <title>${opdracht.documentnaam ?? "Document"}</title>
95
- <style>${paginaCss(formaat, opdracht.orientatie, opdracht.margeMm ?? 0)}
96
- body { font-family: system-ui, -apple-system, "Segoe UI", sans-serif; }
93
+ doc.write(`<!doctype html><html><head><meta charset="utf-8" />
94
+ <title>${opdracht.documentnaam ?? "Document"}</title>
95
+ <style>${paginaCss(formaat, opdracht.orientatie, opdracht.margeMm ?? 0)}
96
+ body { font-family: system-ui, -apple-system, "Segoe UI", sans-serif; }
97
97
  ${opdracht.css ?? ""}</style></head><body>${opdracht.html}</body></html>`);
98
98
  doc.close();
99
99
  await new Promise((r) => setTimeout(r, 250));
@@ -1,4 +1,4 @@
1
- import { type Orientatie } from "./browserPrint";
1
+ import { type Orientatie } from "./browserPrint.js";
2
2
  export interface DirectPrintOpdracht {
3
3
  documenttype: string;
4
4
  formaatCode: string | null;
@@ -2,10 +2,10 @@
2
2
  // src/lib/directPrint.ts — documenten stil afdrukken op de achtergrond.
3
3
  // Lukt dat niet, dan valt de aanroeper terug op het printvenster.
4
4
  // ============================================================================
5
- import { supabase } from "./supabaseClient";
6
- import { bedoeldePrinter, formaatDef } from "./browserPrint";
7
- import { htmlNaarPdfBase64 } from "./documentPdf";
8
- import { verstuurPrintOpdracht } from "./printService.functions";
5
+ import { supabase } from "./supabaseClient.js";
6
+ import { bedoeldePrinter, formaatDef } from "./browserPrint.js";
7
+ import { htmlNaarPdfBase64 } from "./documentPdf.js";
8
+ import { verstuurPrintOpdracht } from "./printService.functions.js";
9
9
  /**
10
10
  * Probeert het document rechtstreeks naar de ingestelde printer te sturen.
11
11
  * Geeft `gelukt: false` terug wanneer er geen geschikte printer is; de
@@ -1,4 +1,4 @@
1
- import type { Orientatie } from "./browserPrint";
1
+ import type { Orientatie } from "./browserPrint.js";
2
2
  export interface PdfOpdracht {
3
3
  html: string;
4
4
  css?: string;
@@ -1,4 +1,4 @@
1
- import type { PapierFormaatDef } from "./documentTypes";
1
+ import type { PapierFormaatDef } from "./documentTypes.js";
2
2
  export type InstellingType = "schakelaar" | "keuze" | "meerkeuze" | "tekst" | "getal" | "kleur";
3
3
  export interface InstellingDef {
4
4
  key: string;
@@ -2,7 +2,7 @@
2
2
  // src/lib/formaatPrinters.ts — standaardprinter per documentsoort en formaat
3
3
  // ============================================================================
4
4
  import { useCallback, useEffect, useState } from "react";
5
- import { supabase } from "./supabaseClient";
5
+ import { supabase } from "./supabaseClient.js";
6
6
  const arr = (v) => (Array.isArray(v) ? v : []);
7
7
  export function useFormaatPrinters(documenttype) {
8
8
  const [koppelingen, setKoppelingen] = useState([]);
@@ -3,7 +3,7 @@
3
3
  // Gebruikt de eigen documentmaker (src/lib/htmlPdf.server.ts). Geen externe
4
4
  // dienst, geen browser en geen instellingen per shell nodig.
5
5
  // ============================================================================
6
- import { bytesNaarBase64, htmlNaarPdfBytes } from "./htmlPdf.server";
6
+ import { bytesNaarBase64, htmlNaarPdfBytes } from "./htmlPdf.server.js";
7
7
  export class PdfRenderFout extends Error {
8
8
  constructor(code, boodschap) {
9
9
  super(boodschap);
@@ -1,4 +1,4 @@
1
- import type { LayoutElementModel, LayoutModel } from "./documentTypes";
1
+ import type { LayoutElementModel, LayoutModel } from "./documentTypes.js";
2
2
  export declare function voorbeeldContext(): Record<string, string>;
3
3
  export declare function vulVelden(tekst: string, ctx: Record<string, string>): string;
4
4
  export declare function conditieVoldoet(el: LayoutElementModel, ctx: Record<string, string>): boolean;
@@ -1,7 +1,7 @@
1
1
  // ============================================================================
2
2
  // src/lib/layoutPreview.ts — voorbeeldgegevens, veldvervanging en print-HTML
3
3
  // ============================================================================
4
- import { alleVelden } from "./fieldRegistry";
4
+ import { alleVelden } from "./fieldRegistry.js";
5
5
  export function voorbeeldContext() {
6
6
  const ctx = {};
7
7
  for (const v of alleVelden())
@@ -79,8 +79,8 @@ function elementHtml(el, ctx) {
79
79
  case "cirkel":
80
80
  return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
81
81
  case "barcode":
82
- return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
- <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
82
+ return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
+ <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
84
84
  <div style="font-size:7pt">${esc(inhoud)}</div></div>`;
85
85
  case "qrcode":
86
86
  return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
@@ -125,10 +125,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
125
125
  const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
126
126
  const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
127
127
  const h = layout.orientatie === "landscape" ? layout.breedte_mm : layout.hoogte_mm;
128
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
- <style>@page{size:${b}mm ${h}mm;margin:0}
130
- body{margin:0;background:#e5e7eb}
131
- .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
- @media print{body{background:#fff}}</style></head>
128
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
+ <style>@page{size:${b}mm ${h}mm;margin:0}
130
+ body{margin:0;background:#e5e7eb}
131
+ .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
+ @media print{body{background:#fff}}</style></head>
133
133
  <body><div class="pagina">${body}</div></body></html>`;
134
134
  }
@@ -2,7 +2,7 @@
2
2
  // src/lib/logoLibrary.ts — centrale Logo Bibliotheek
3
3
  // ============================================================================
4
4
  import { useCallback, useEffect, useState } from "react";
5
- import { supabase } from "./supabaseClient";
5
+ import { supabase } from "./supabaseClient.js";
6
6
  export const LOGO_BUCKET = "layout-logos";
7
7
  export const LOGO_CATEGORIEEN = [
8
8
  { value: "hoofdlogo", label: "Hoofdlogo" },
@@ -1,3 +1,4 @@
1
+ import type { PrintDb } from "./printQueue.server.js";
1
2
  type Rij = Record<string, any>;
2
3
  /** Bevat de meegestuurde payload zelf al orderregels of karren? */
3
4
  export declare function heeftOrderInhoud(bron: unknown): boolean;
@@ -10,6 +11,6 @@ export declare function zoekOrderVerwijzing(payload: unknown): {
10
11
  * Bouwt de ruwe ordergegevens (vorm die `maakPakbonOrder` verwacht) op basis
11
12
  * van het order-id of ordernummer. Geeft `null` als de order niet te vinden is.
12
13
  */
13
- export declare function laadOrderVanuitDatabase(payload: unknown): Promise<Rij | null>;
14
+ export declare function laadOrderVanuitDatabase(db: PrintDb, payload: unknown): Promise<Rij | null>;
14
15
  export {};
15
16
  //# sourceMappingURL=orderData.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAYA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAuB/B,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAyBA;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAiKnF"}
1
+ {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAuB/B,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAyBA;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAiKhG"}
@@ -7,7 +7,6 @@
7
7
  // `order_items`, `order_carts` en `order_cart_items`.
8
8
  // Draait alleen op de server (printwachtrij).
9
9
  // ============================================================================
10
- import { adminDb as supabaseAdmin } from "./supabaseAdmin.server";
11
10
  const arr = (v) => (Array.isArray(v) ? v : []);
12
11
  const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : 0);
13
12
  /**
@@ -66,16 +65,16 @@ export function zoekOrderVerwijzing(payload) {
66
65
  * Bouwt de ruwe ordergegevens (vorm die `maakPakbonOrder` verwacht) op basis
67
66
  * van het order-id of ordernummer. Geeft `null` als de order niet te vinden is.
68
67
  */
69
- export async function laadOrderVanuitDatabase(payload) {
68
+ export async function laadOrderVanuitDatabase(db, payload) {
70
69
  const { orderId, ordernummer } = zoekOrderVerwijzing(payload);
71
70
  if (!orderId && !ordernummer)
72
71
  return null;
73
72
  let order = null;
74
73
  if (orderId) {
75
- order = await veilig(() => supabaseAdmin.from("orders").select("*").eq("id", orderId).maybeSingle());
74
+ order = await veilig(() => db.from("orders").select("*").eq("id", orderId).maybeSingle());
76
75
  }
77
76
  if (!order && ordernummer) {
78
- const rijen = await veilig(() => supabaseAdmin
77
+ const rijen = await veilig(() => db
79
78
  .from("orders")
80
79
  .select("*")
81
80
  .eq("order_number", ordernummer)
@@ -86,8 +85,8 @@ export async function laadOrderVanuitDatabase(payload) {
86
85
  if (!order)
87
86
  return null;
88
87
  const [regelsRuw, karrenRuw] = await Promise.all([
89
- veilig(() => supabaseAdmin.from("order_items").select("*").eq("order_id", order["id"])),
90
- veilig(() => supabaseAdmin
88
+ veilig(() => db.from("order_items").select("*").eq("order_id", order["id"])),
89
+ veilig(() => db
91
90
  .from("order_carts")
92
91
  .select("*")
93
92
  .eq("order_id", order["id"])
@@ -97,7 +96,7 @@ export async function laadOrderVanuitDatabase(payload) {
97
96
  const karrenRijen = arr(karrenRuw);
98
97
  let karItems = [];
99
98
  if (karrenRijen.length) {
100
- karItems = arr(await veilig(() => supabaseAdmin
99
+ karItems = arr(await veilig(() => db
101
100
  .from("order_cart_items")
102
101
  .select("*")
103
102
  .in("cart_id", karrenRijen.map((k) => k["id"]))));
@@ -107,7 +106,7 @@ export async function laadOrderVanuitDatabase(payload) {
107
106
  .filter((v) => typeof v === "string")));
108
107
  const producten = new Map();
109
108
  if (productIds.length) {
110
- const data = await veilig(() => supabaseAdmin
109
+ const data = await veilig(() => db
111
110
  .from("products")
112
111
  .select("id, product, article_number, barcode, location, unit, weight, custom_fields")
113
112
  .in("id", productIds));
@@ -1,4 +1,4 @@
1
- import type { InstellingDef } from "./documentProfiles";
1
+ import type { InstellingDef } from "./documentProfiles.js";
2
2
  export type PakbonSectieType = "logo" | "bedrijfsgegevens" | "klantgegevens" | "afleveradres" | "factuuradres" | "orderinformatie" | "transportinformatie" | "opmerkingen" | "orderregels" | "pickmethode" | "karren" | "lagen" | "producten" | "fusten" | "totalen" | "handtekening" | "tekstblok" | "qrcode" | "barcode" | "afbeelding";
3
3
  export interface PakbonKolom {
4
4
  key: string;
@@ -1,4 +1,4 @@
1
- import { type DemoOrder, type PakbonConfig } from "./pakbonBuilder";
1
+ import { type DemoOrder, type PakbonConfig } from "./pakbonBuilder.js";
2
2
  /** Gegevensvorm van een pakbon. Gelijk aan de vorm van het live voorbeeld. */
3
3
  export type PakbonOrder = DemoOrder;
4
4
  export interface PakbonLogo {
@@ -7,8 +7,8 @@
7
7
  // layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
8
8
  // de afdruk altijd exact dezelfde secties — inclusief de orderregels.
9
9
  // ============================================================================
10
- import { DEMO_ORDER, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, pickMethode, productVeldBreedtes, sectieOnderdrukt, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder";
11
- import { haalPrintLogos } from "./logoLibrary";
10
+ import { DEMO_ORDER, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, pickMethode, productVeldBreedtes, sectieOnderdrukt, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
11
+ import { haalPrintLogos } from "./logoLibrary.js";
12
12
  // --- kleine hulpjes ---------------------------------------------------------
13
13
  const arr = (v) => (Array.isArray(v) ? v : []);
14
14
  const opt = (s, key, fallback) => s.opties?.[key] ?? fallback;
@@ -640,56 +640,56 @@ export function renderPakbonDocument(config, order, opties = {}) {
640
640
  const font = opties.lettertype ?? 'Arial, Helvetica, "Segoe UI", sans-serif';
641
641
  const grootte = opties.lettergrootte ?? 8.5;
642
642
  const body = renderPakbonBody(config, order, opties);
643
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
644
- <title>${esc(opties.titel ?? "Pakbon")}</title>
645
- <style>
646
- @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
647
- * { box-sizing: border-box; }
648
- html, body { margin: 0; padding: 0; }
649
- body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
650
- .blok { margin-bottom: 2mm; }
651
- .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
652
- .vet { font-weight: 600; }
653
- .kv { display: flex; justify-content: space-between; gap: 3mm; }
654
- .kv .k { color: #6b7280; }
655
- .kv .v { font-weight: 500; }
656
- .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
657
- .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
658
- table.regels { width: 100%; border-collapse: collapse; }
659
- table.regels.vast { table-layout: fixed; }
660
- table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
661
- table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
662
- table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
663
- .rand { border: 0.2mm solid #d1d5db; }
664
- .onder { border-bottom: 0.2mm solid #d1d5db; }
665
- table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
666
- tr.zebra td { background: #f3f4f6; }
667
- .plijst { margin: 0; padding-left: 4mm; }
668
- .groep { margin-bottom: 1.5mm; }
669
- .regelrij { display: flex; gap: 2mm; }
670
- .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
671
- .karblok { margin-bottom: 2mm; }
672
- .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
673
- .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
674
- .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
675
- .laag { margin-bottom: 1.5mm; }
676
- .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
677
- .laagkop.compact { border-bottom: none; }
678
- .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
679
- .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
680
- .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
681
- .handtekening { margin-top: 3mm; }
682
- .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
683
- .lijnveld.hoog { padding-bottom: 10mm; }
684
- .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
685
- .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
686
- .qr { border: 0.25mm dashed #9ca3af; }
687
- .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
688
- .klein { font-size: 85%; color: #6b7280; }
689
- .breekvoor { break-before: page; page-break-before: always; }
690
- .heelhouden { break-inside: avoid; page-break-inside: avoid; }
691
- img { max-width: 100%; }
692
- </style></head>
643
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
644
+ <title>${esc(opties.titel ?? "Pakbon")}</title>
645
+ <style>
646
+ @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
647
+ * { box-sizing: border-box; }
648
+ html, body { margin: 0; padding: 0; }
649
+ body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
650
+ .blok { margin-bottom: 2mm; }
651
+ .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
652
+ .vet { font-weight: 600; }
653
+ .kv { display: flex; justify-content: space-between; gap: 3mm; }
654
+ .kv .k { color: #6b7280; }
655
+ .kv .v { font-weight: 500; }
656
+ .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
657
+ .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
658
+ table.regels { width: 100%; border-collapse: collapse; }
659
+ table.regels.vast { table-layout: fixed; }
660
+ table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
661
+ table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
662
+ table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
663
+ .rand { border: 0.2mm solid #d1d5db; }
664
+ .onder { border-bottom: 0.2mm solid #d1d5db; }
665
+ table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
666
+ tr.zebra td { background: #f3f4f6; }
667
+ .plijst { margin: 0; padding-left: 4mm; }
668
+ .groep { margin-bottom: 1.5mm; }
669
+ .regelrij { display: flex; gap: 2mm; }
670
+ .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
671
+ .karblok { margin-bottom: 2mm; }
672
+ .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
673
+ .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
674
+ .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
675
+ .laag { margin-bottom: 1.5mm; }
676
+ .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
677
+ .laagkop.compact { border-bottom: none; }
678
+ .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
679
+ .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
680
+ .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
681
+ .handtekening { margin-top: 3mm; }
682
+ .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
683
+ .lijnveld.hoog { padding-bottom: 10mm; }
684
+ .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
685
+ .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
686
+ .qr { border: 0.25mm dashed #9ca3af; }
687
+ .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
688
+ .klein { font-size: 85%; color: #6b7280; }
689
+ .breekvoor { break-before: page; page-break-before: always; }
690
+ .heelhouden { break-inside: avoid; page-break-inside: avoid; }
691
+ img { max-width: 100%; }
692
+ </style></head>
693
693
  <body>${body}</body></html>`;
694
694
  }
695
695
  /** Handig voor testen: het document met de voorbeeldgegevens. */
@@ -1,4 +1,4 @@
1
- import type { DocumentType } from "./documentTypes";
1
+ import type { DocumentType } from "./documentTypes.js";
2
2
  export interface PrintDocumentInput {
3
3
  /** Documentsoort, bijv. "pakbon" of "productiebon". */
4
4
  documenttype: DocumentType | string;
@@ -3,7 +3,7 @@
3
3
  // ============================================================================
4
4
  // Andere modules gebruiken uitsluitend deze functies; zij hoeven de tabellen
5
5
  // van deze module niet te kennen.
6
- import { supabase } from "./supabaseClient";
6
+ import { supabase } from "./supabaseClient.js";
7
7
  const arr = (v) => (Array.isArray(v) ? v : []);
8
8
  /** Zoekt de te gebruiken layout: expliciet, anders standaard, anders de nieuwste. */
9
9
  async function bepaalLayout(documenttype, layoutId) {
@@ -82,8 +82,8 @@ export async function printDocument(input) {
82
82
  /** Zet de wachtrijverwerking op de achtergrond in gang (best effort). */
83
83
  async function startWachtrijVerwerking() {
84
84
  try {
85
- const { wachtrijTick } = await import("./printService.functions");
86
- await wachtrijTick();
85
+ const { vraagWachtrijRonde } = await import("./queueTickClient.js");
86
+ await vraagWachtrijRonde();
87
87
  }
88
88
  catch {
89
89
  // Geen probleem: de cron of de printwachtrij-pagina pakt het op.
@@ -1,4 +1,13 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
1
2
  type Job = Record<string, any>;
3
+ /** De databaseclient die de shell aanlevert. De module maakt er zelf nooit een. */
4
+ export type PrintDb = SupabaseClient<any, any, any>;
5
+ /**
6
+ * Goedkope controle of de aangeleverde client de printtabellen kan lezen.
7
+ * Vervangt de oude controle op omgevingsvariabelen: die kende de module niet
8
+ * meer nu de shell de client levert.
9
+ */
10
+ export declare function controleerClient(db: PrintDb): Promise<string | null>;
2
11
  type LayoutKeuze = {
3
12
  layout: Job | null;
4
13
  expliciet: boolean;
@@ -7,13 +16,13 @@ type LayoutKeuze = {
7
16
  * Haalt een kant-en-klare PDF van de opdracht op (klantstickers, standaard
8
17
  * Floriday-documenten). Die gaat ongewijzigd naar de printer.
9
18
  */
10
- export declare function kantEnKlarePdf(job: Job): Promise<string | null>;
19
+ export declare function kantEnKlarePdf(_db: PrintDb, job: Job): Promise<string | null>;
11
20
  /**
12
21
  * Bouwt de HTML van de opdracht.
13
22
  * Volgorde: gekoppelde layout wint > meegestuurde HTML > actieve layout van
14
23
  * het documenttype. Zo werkt een bijgewerkte layout meteen door.
15
24
  */
16
- export declare function bouwHtml(job: Job, keuze: LayoutKeuze): Promise<string>;
25
+ export declare function bouwHtml(db: PrintDb, job: Job, keuze: LayoutKeuze): Promise<string>;
17
26
  /**
18
27
  * Controleert of het document echt iets afdrukt. Zonder deze controle kan een
19
28
  * lege layout of een opdracht zonder gegevens een blanco vel opleveren.
@@ -26,6 +35,6 @@ export interface WachtrijResultaat {
26
35
  bijgewerkt: number;
27
36
  }
28
37
  /** Eén ronde: wachtende opdrachten afdrukken en statussen bijwerken. */
29
- export declare function verwerkWachtrij(max?: number): Promise<WachtrijResultaat>;
38
+ export declare function verwerkWachtrij(db: PrintDb, max?: number): Promise<WachtrijResultaat>;
30
39
  export {};
31
40
  //# sourceMappingURL=printQueue.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAoBA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAe/B,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAqC9D;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BrE;AAqED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoH5E;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AA6ID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAsB,eAAe,CAAC,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBzE"}
1
+ {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAc5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAeD,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAqC9D;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BnF;AAqED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoHzF;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AA6ID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBtF"}