@flowselections/layout-maker 1.32.0 → 1.38.4

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 (115) hide show
  1. package/README.md +139 -139
  2. package/dist-lib/components/AfdrukKnop.d.ts +19 -19
  3. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  4. package/dist-lib/components/ComputersLijst.js +5 -5
  5. package/dist-lib/components/DocumentenPage.d.ts.map +1 -1
  6. package/dist-lib/components/DocumentenPage.js +3 -2
  7. package/dist-lib/components/LayoutPrinterSelect.d.ts +8 -0
  8. package/dist-lib/components/LayoutPrinterSelect.d.ts.map +1 -0
  9. package/dist-lib/components/LayoutPrinterSelect.js +23 -0
  10. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  11. package/dist-lib/components/LayoutsPage.js +16 -3
  12. package/dist-lib/components/NetwerkPrintersDialog.d.ts +7 -7
  13. package/dist-lib/components/PaginaDocument.d.ts +4 -1
  14. package/dist-lib/components/PaginaDocument.d.ts.map +1 -1
  15. package/dist-lib/components/PaginaDocument.js +10 -5
  16. package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -1
  17. package/dist-lib/components/PakbonBuilderPage.js +6 -2
  18. package/dist-lib/components/PakbonPreview.d.ts +4 -2
  19. package/dist-lib/components/PakbonPreview.d.ts.map +1 -1
  20. package/dist-lib/components/PakbonPreview.js +55 -12
  21. package/dist-lib/components/PakbonSectiesPanel.d.ts +2 -2
  22. package/dist-lib/components/PakbonSectiesPanel.d.ts.map +1 -1
  23. package/dist-lib/components/PakbonSectiesPanel.js +7 -2
  24. package/dist-lib/components/PdfMapAutoSaver.d.ts +6 -0
  25. package/dist-lib/components/PdfMapAutoSaver.d.ts.map +1 -0
  26. package/dist-lib/components/PdfMapAutoSaver.js +12 -0
  27. package/dist-lib/components/PdfMapGlobaleBanner.d.ts +12 -0
  28. package/dist-lib/components/PdfMapGlobaleBanner.d.ts.map +1 -0
  29. package/dist-lib/components/PdfMapGlobaleBanner.js +30 -0
  30. package/dist-lib/components/PdfMapToestemmingBanner.d.ts +7 -0
  31. package/dist-lib/components/PdfMapToestemmingBanner.d.ts.map +1 -0
  32. package/dist-lib/components/PdfMapToestemmingBanner.js +139 -0
  33. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  34. package/dist-lib/components/PrintQueuePage.js +42 -3
  35. package/dist-lib/components/PrintenPage.d.ts.map +1 -1
  36. package/dist-lib/components/PrintenPage.js +3 -2
  37. package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
  38. package/dist-lib/components/PrinterSetupWizard.js +28 -5
  39. package/dist-lib/components/PrintersRedirectPage.d.ts +1 -1
  40. package/dist-lib/components/PrintersRedirectPage.js +14 -14
  41. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  42. package/dist-lib/components/PrintplekDetailPage.js +30 -4
  43. package/dist-lib/components/PrintplekWizard.d.ts.map +1 -1
  44. package/dist-lib/components/PrintplekWizard.js +81 -3
  45. package/dist-lib/components/ProductiebonBuilderPage.d.ts.map +1 -1
  46. package/dist-lib/components/ProductiebonBuilderPage.js +3 -1
  47. package/dist-lib/index.d.ts +10 -2
  48. package/dist-lib/index.d.ts.map +1 -1
  49. package/dist-lib/index.js +13 -2
  50. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1396 -727
  51. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  52. package/dist-lib/integrations/supabase/client.server.d.ts +1396 -727
  53. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  54. package/dist-lib/integrations/supabase/client.server.js +1 -1
  55. package/dist-lib/integrations/supabase/moduleClient.d.ts +24008 -0
  56. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -0
  57. package/dist-lib/integrations/supabase/moduleClient.js +29 -0
  58. package/dist-lib/integrations/supabase/types.d.ts +1403 -750
  59. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  60. package/dist-lib/lib/aiLayout.functions.d.ts +1396 -727
  61. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  62. package/dist-lib/lib/aiLayout.server.js +9 -9
  63. package/dist-lib/lib/browserPrint.js +1 -1
  64. package/dist-lib/lib/code128.d.ts +5 -0
  65. package/dist-lib/lib/code128.d.ts.map +1 -0
  66. package/dist-lib/lib/code128.js +51 -0
  67. package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -1
  68. package/dist-lib/lib/htmlPdf.server.js +101 -6
  69. package/dist-lib/lib/layoutPreview.d.ts.map +1 -1
  70. package/dist-lib/lib/layoutPreview.js +11 -8
  71. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  72. package/dist-lib/lib/orderData.server.js +123 -10
  73. package/dist-lib/lib/pakbonBuilder.d.ts +28 -2
  74. package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
  75. package/dist-lib/lib/pakbonBuilder.js +69 -8
  76. package/dist-lib/lib/pakbonHtml.d.ts +14 -2
  77. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  78. package/dist-lib/lib/pakbonHtml.js +155 -63
  79. package/dist-lib/lib/pakbonScan.d.ts +44 -0
  80. package/dist-lib/lib/pakbonScan.d.ts.map +1 -0
  81. package/dist-lib/lib/pakbonScan.js +105 -0
  82. package/dist-lib/lib/pdfJobSaver.d.ts +20 -0
  83. package/dist-lib/lib/pdfJobSaver.d.ts.map +1 -0
  84. package/dist-lib/lib/pdfJobSaver.js +173 -0
  85. package/dist-lib/lib/pdfMap.d.ts +48 -0
  86. package/dist-lib/lib/pdfMap.d.ts.map +1 -0
  87. package/dist-lib/lib/pdfMap.js +219 -0
  88. package/dist-lib/lib/pdfPrinter.d.ts +9 -0
  89. package/dist-lib/lib/pdfPrinter.d.ts.map +1 -0
  90. package/dist-lib/lib/pdfPrinter.js +34 -0
  91. package/dist-lib/lib/previewPdf.d.ts.map +1 -1
  92. package/dist-lib/lib/previewPdf.js +41 -9
  93. package/dist-lib/lib/printApi.d.ts.map +1 -1
  94. package/dist-lib/lib/printApi.js +9 -1
  95. package/dist-lib/lib/printQueue.server.d.ts +7 -0
  96. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  97. package/dist-lib/lib/printQueue.server.js +346 -52
  98. package/dist-lib/lib/printService.functions.d.ts +5365 -2689
  99. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  100. package/dist-lib/lib/productiebonHtml.js +15 -15
  101. package/dist-lib/lib/profielHtml.js +18 -18
  102. package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
  103. package/dist-lib/lib/supabaseAdmin.server.js +43 -43
  104. package/dist-lib/lib/supabaseClient.d.ts +1 -3
  105. package/dist-lib/lib/supabaseClient.d.ts.map +1 -1
  106. package/dist-lib/lib/supabaseClient.js +4 -8
  107. package/dist-lib/lib/testpagina.js +3 -3
  108. package/dist-lib/lib/testprint.js +4 -4
  109. package/dist-lib/lib/useDocumentData.d.ts +10 -0
  110. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  111. package/dist-lib/lib/useDocumentData.js +19 -0
  112. package/dist-lib/lib/voorbeeldPrint.d.ts +4 -0
  113. package/dist-lib/lib/voorbeeldPrint.d.ts.map +1 -1
  114. package/dist-lib/lib/voorbeeldPrint.js +13 -2
  115. package/package.json +151 -151
@@ -26,7 +26,7 @@ export function paginaCss(formaat, orientatie, margeMm = 0) {
26
26
  const gedraaid = formaat && orientatie === "landscape"
27
27
  ? `${formaat.hoogte}mm ${formaat.breedte}mm`
28
28
  : size;
29
- return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
29
+ return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
30
30
  @media print { html, body { margin: 0; padding: 0; } }`;
31
31
  }
32
32
  /**
@@ -0,0 +1,5 @@
1
+ /** Geeft de zwart/wit modules van Code 128 subset B terug. */
2
+ export declare function code128Bars(value: string): string;
3
+ /** Browserweergave van de barcode zonder externe barcodebibliotheek. */
4
+ export declare function code128BarsHtml(value: string): string;
5
+ //# sourceMappingURL=code128.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code128.d.ts","sourceRoot":"","sources":["../../src/lib/code128.ts"],"names":[],"mappings":"AAkBA,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBjD;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD"}
@@ -0,0 +1,51 @@
1
+ // ============================================================================
2
+ // Code 128 subset B — compacte, scanbare barcode voor printdocumenten.
3
+ // ============================================================================
4
+ const PATRONEN = [
5
+ "212222", "222122", "222221", "121223", "121322", "131222", "122213", "122312", "132212", "221213",
6
+ "221312", "231212", "112232", "122132", "122231", "113222", "123122", "123221", "223211", "221132",
7
+ "221231", "213212", "223112", "312131", "311222", "321122", "321221", "312212", "322112", "322211",
8
+ "212123", "212321", "232121", "111323", "131123", "131321", "112313", "132113", "132311", "211313",
9
+ "231113", "231311", "112133", "112331", "132131", "113123", "113321", "133121", "313121", "211331",
10
+ "231131", "213113", "213311", "213131", "311123", "311321", "331121", "312113", "312311", "332111",
11
+ "314111", "221411", "431111", "111224", "111422", "121124", "121421", "141122", "141221", "112214",
12
+ "112412", "122114", "122411", "142112", "142211", "241211", "221114", "413111", "241112", "134111",
13
+ "111242", "121142", "121241", "114212", "124112", "124211", "411212", "421112", "421211", "212141",
14
+ "214121", "412121", "111143", "111341", "131141", "114113", "114311", "411113", "411311", "113141",
15
+ "114131", "311141", "411131", "211412", "211214", "211232", "2331112",
16
+ ];
17
+ /** Geeft de zwart/wit modules van Code 128 subset B terug. */
18
+ export function code128Bars(value) {
19
+ const tekst = String(value ?? "");
20
+ if (!tekst)
21
+ return "";
22
+ const codes = Array.from(tekst, (teken) => {
23
+ const code = teken.charCodeAt(0);
24
+ return code >= 32 && code <= 126 ? code - 32 : "?".charCodeAt(0) - 32;
25
+ });
26
+ const checksum = codes.reduce((som, code, index) => som + code * (index + 1), 104) % 103;
27
+ const symbolen = [104, ...codes, checksum, 106];
28
+ return symbolen
29
+ .map((symbool) => {
30
+ const patroon = PATRONEN[symbool] ?? PATRONEN[0];
31
+ let zwart = true;
32
+ return Array.from(patroon, (breedte) => {
33
+ const modules = Number(breedte);
34
+ const resultaat = (zwart ? "1" : "0").repeat(modules);
35
+ zwart = !zwart;
36
+ return resultaat;
37
+ }).join("");
38
+ })
39
+ .join("");
40
+ }
41
+ /** Browserweergave van de barcode zonder externe barcodebibliotheek. */
42
+ export function code128BarsHtml(value) {
43
+ const bars = code128Bars(value);
44
+ if (!bars)
45
+ return "";
46
+ const modules = bars.length;
47
+ return bars
48
+ .split("")
49
+ .map((bar) => `<span style="display:block;flex:0 0 ${100 / modules}%;height:100%;background:${bar === "1" ? "#111827" : "transparent"}"></span>`)
50
+ .join("");
51
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAWA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAUD,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AA2BD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgClD;AAqBD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAiBlE;AAKD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4gCD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+DrF;AA0BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD"}
1
+ {"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAYA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAUD,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AA2BD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgClD;AAqBD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAiBlE;AAKD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4mCD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+DrF;AA0BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD"}
@@ -8,6 +8,7 @@
8
8
  // rijen naast elkaar, tabellen met vaste kolombreedtes, kaders, lijnen,
9
9
  // afbeeldingen, barcodes en QR-vlakken.
10
10
  // ============================================================================
11
+ import { code128Bars } from "./code128.js";
11
12
  import { PDFDocument, StandardFonts, rgb, } from "pdf-lib";
12
13
  export const MM = 2.834645669291339; // punten per millimeter
13
14
  const LEEG = new Set(["img", "br", "hr", "col", "meta", "link", "input"]);
@@ -428,14 +429,34 @@ class Tekenaar {
428
429
  function regelHoogte(s) {
429
430
  return s.grootte * 1.35;
430
431
  }
431
- /** Breekt tekst af op de beschikbare breedte. */
432
+ /** Breekt tekst af op de beschikbare breedte; te lange woorden worden hard gesplitst. */
432
433
  function breekAf(tk, tekst, s, breedte) {
433
434
  const woorden = veiligeTekst(tekst).split(/\s+/).filter((w) => w.length);
434
435
  if (!woorden.length)
435
436
  return [];
436
437
  const regels = [];
437
438
  let huidig = "";
439
+ const duw = () => {
440
+ if (huidig)
441
+ regels.push(huidig);
442
+ huidig = "";
443
+ };
438
444
  for (const w of woorden) {
445
+ // Woord past sowieso niet: hak het op zodat het nooit de kolom uitloopt.
446
+ if (tk.breedteVan(w, s) > breedte) {
447
+ duw();
448
+ let deel = "";
449
+ for (const teken of w) {
450
+ if (deel && tk.breedteVan(deel + teken, s) > breedte) {
451
+ regels.push(deel);
452
+ deel = teken;
453
+ }
454
+ else
455
+ deel += teken;
456
+ }
457
+ huidig = deel;
458
+ continue;
459
+ }
439
460
  const kandidaat = huidig ? `${huidig} ${w}` : w;
440
461
  if (tk.breedteVan(kandidaat, s) <= breedte || !huidig)
441
462
  huidig = kandidaat;
@@ -444,10 +465,25 @@ function breekAf(tk, tekst, s, breedte) {
444
465
  huidig = w;
445
466
  }
446
467
  }
447
- if (huidig)
448
- regels.push(huidig);
468
+ duw();
449
469
  return regels;
450
470
  }
471
+ /**
472
+ * Verkleint de letter zo min mogelijk tot het langste woord binnen de breedte
473
+ * past. Zo blijft tekst maximaal leesbaar zonder ooit over te lopen.
474
+ */
475
+ function passendeStijl(tk, tekst, s, breedte) {
476
+ const woorden = veiligeTekst(tekst).split(/\s+/).filter((w) => w.length);
477
+ if (!woorden.length || breedte <= 0)
478
+ return s;
479
+ const langste = woorden.reduce((a, b) => (tk.breedteVan(b, s) > tk.breedteVan(a, s) ? b : a));
480
+ const nodig = tk.breedteVan(langste, s);
481
+ if (nodig <= breedte)
482
+ return s;
483
+ const min = Math.max(4.5, s.grootte * 0.6);
484
+ const geschaald = Math.max(min, Math.floor((s.grootte * breedte) / nodig * 10) / 10);
485
+ return geschaald < s.grootte ? { ...s, grootte: geschaald } : s;
486
+ }
451
487
  function tekenRegel(tk, regel, x, breedte, y, s) {
452
488
  const t = metTransform(veiligeTekst(regel), s);
453
489
  const w = tk.breedteVan(t, s);
@@ -526,6 +562,14 @@ async function tekenBlok(ctx, n, vak, ouderStijl) {
526
562
  const s = stijlVan(n, ouderStijl);
527
563
  const st = eig(n);
528
564
  const cl = klassen(n);
565
+ const barcode = zoekBarcodeWaarde(n);
566
+ if (barcode) {
567
+ const h = lengte(st["height"]) ?? 15 * MM;
568
+ tk.zorgVoor(h + 1 * MM);
569
+ tekenBarcode(tk, barcode, vak.x, vak.breedte, h);
570
+ tk.y -= h + 1 * MM;
571
+ return;
572
+ }
529
573
  if (n.tag === "#tekst") {
530
574
  const regels = breekAf(tk, n.tekst ?? "", s, vak.breedte);
531
575
  for (const r of regels) {
@@ -770,9 +814,11 @@ async function tekenTabel(ctx, tabel, vak, s) {
770
814
  const eigenCelRanden = rijen.some((r) => r.kinderen.some((c) => (c.tag === "td" || c.tag === "th") && !!celRandOnder(c)));
771
815
  const tekenRij = (rij, herhaald = false) => {
772
816
  const cellen = rij.kinderen.filter((c) => c.tag === "td" || c.tag === "th");
773
- const cellenStijl = cellen.map((c) => stijlVan(c, s));
774
- const teksten = cellen.map((c, i) => breekAf(tk, plattTekst(c), cellenStijl[i], Math.max(4, (breedtes[i] ?? 20) - padX * 2)));
775
- const hoogte = Math.max(1, ...teksten.map((t) => t.length)) * regelHoogte(cellenStijl[0] ?? s) + padY * 2;
817
+ const celBreedte = (i) => Math.max(4, (breedtes[i] ?? 20) - padX * 2);
818
+ const celTekst = cellen.map((c) => plattTekst(c));
819
+ const cellenStijl = cellen.map((c, i) => passendeStijl(tk, celTekst[i], stijlVan(c, s), celBreedte(i)));
820
+ const teksten = cellen.map((_, i) => breekAf(tk, celTekst[i], cellenStijl[i], celBreedte(i)));
821
+ const hoogte = Math.max(regelHoogte(s), ...teksten.map((t, i) => Math.max(1, t.length) * regelHoogte(cellenStijl[i] ?? s))) + padY * 2;
776
822
  if (hoogte > tk.ruimte) {
777
823
  tk.nieuwePagina();
778
824
  if (kopRij && !herhaald && rij !== kopRij)
@@ -849,6 +895,17 @@ async function tekenAbsoluut(ctx, n, s) {
849
895
  const hoogte = lengte(st["height"]) ?? regelHoogte(eigen);
850
896
  const yBoven = tk.hoogte - top;
851
897
  const yOnder = yBoven - hoogte;
898
+ const barcode = zoekBarcodeWaarde(n);
899
+ if (barcode) {
900
+ const barcodeHoogte = Math.max(5 * MM, hoogte * 0.72);
901
+ tekenBarcode(tk, barcode, x, breedte, barcodeHoogte, yBoven);
902
+ const onderschrift = plattTekst(n).trim();
903
+ if (onderschrift) {
904
+ const kleinStijl = { ...eigen, grootte: Math.min(eigen.grootte, 7), uitlijning: "center" };
905
+ tekenRegel(tk, onderschrift, x, breedte, yOnder + 1, kleinStijl);
906
+ }
907
+ return;
908
+ }
852
909
  const gradientKind = zoekGradient(n);
853
910
  if (gradientKind) {
854
911
  const gebied = gradientKind === "streepjes" ? hoogte * 0.72 : Math.min(breedte, hoogte);
@@ -968,6 +1025,44 @@ async function tekenAbsoluut(ctx, n, s) {
968
1025
  tekenRegel(tk, r, x + padding, breedte - padding * 2, y + eigen.grootte * 0.25, eigen);
969
1026
  }
970
1027
  }
1028
+ /** Tekent de waarde-encoded Code 128 subset B barcode. */
1029
+ function tekenBarcode(tk, waarde, x, breedte, hoogte, yBoven) {
1030
+ const patroon = code128Bars(waarde);
1031
+ if (!patroon)
1032
+ return;
1033
+ const boven = yBoven ?? tk.y;
1034
+ const y = boven - hoogte;
1035
+ let start = 0;
1036
+ let zwart = patroon[0] === "1";
1037
+ for (let i = 1; i <= patroon.length; i += 1) {
1038
+ const huidig = patroon[i] === "1";
1039
+ if (i === patroon.length || huidig !== zwart) {
1040
+ if (zwart) {
1041
+ tk.pagina.drawRectangle({
1042
+ x: x + (start / patroon.length) * breedte,
1043
+ y,
1044
+ width: ((i - start) / patroon.length) * breedte,
1045
+ height: hoogte,
1046
+ color: DONKER,
1047
+ });
1048
+ }
1049
+ start = i;
1050
+ zwart = huidig;
1051
+ }
1052
+ }
1053
+ }
1054
+ /** Leest alleen expliciet door de renderer aangeleverde barcodewaarden. */
1055
+ function zoekBarcodeWaarde(n) {
1056
+ const waarde = String(n.attrs["data-barcode"] ?? "").trim();
1057
+ if (waarde)
1058
+ return waarde;
1059
+ for (const k of n.kinderen) {
1060
+ const diep = zoekBarcodeWaarde(k);
1061
+ if (diep)
1062
+ return diep;
1063
+ }
1064
+ return null;
1065
+ }
971
1066
  /** Zoekt een streepjes- of blokjespatroon (barcode/QR) in de knoop of kinderen. */
972
1067
  function zoekGradient(n) {
973
1068
  const css = `${eig(n)["background"] ?? ""} ${eig(n)["background-image"] ?? ""}`;
@@ -1 +1 @@
1
- {"version":3,"file":"layoutPreview.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPreview.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAE5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAuB5F;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;GAI5B,CAAC;AA0FF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAaR"}
1
+ {"version":3,"file":"layoutPreview.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPreview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAE5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAuB5F;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;GAI5B,CAAC;AA4FF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAaR"}
@@ -2,6 +2,7 @@
2
2
  // src/lib/layoutPreview.ts — voorbeeldgegevens, veldvervanging en print-HTML
3
3
  // ============================================================================
4
4
  import { alleVelden } from "./fieldRegistry.js";
5
+ import { code128BarsHtml } from "./code128.js";
5
6
  export function voorbeeldContext() {
6
7
  const ctx = {};
7
8
  for (const v of alleVelden())
@@ -79,9 +80,11 @@ function elementHtml(el, ctx) {
79
80
  case "cirkel":
80
81
  return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
81
82
  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>
84
- <div style="font-size:7pt">${esc(inhoud)}</div></div>`;
83
+ return inhoud
84
+ ? `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
85
+ <div class="barcode-bars" data-barcode="${esc(inhoud)}" style="width:100%;height:70%;display:flex;background:#fff">${code128BarsHtml(inhoud)}</div>
86
+ <div style="font-size:7pt">${esc(inhoud)}</div></div>`
87
+ : "";
85
88
  case "qrcode":
86
89
  return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
87
90
  case "logo":
@@ -125,10 +128,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
125
128
  const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
126
129
  const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
127
130
  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>
131
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
132
+ <style>@page{size:${b}mm ${h}mm;margin:0}
133
+ body{margin:0;background:#e5e7eb}
134
+ .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
135
+ @media print{body{background:#fff}}</style></head>
133
136
  <body><div class="pagina">${body}</div></body></html>`;
134
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CA2OrB;AA+DD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
1
+ {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CA8XrB;AA+DD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
@@ -205,24 +205,127 @@ export async function laadPakbonData(db, opties) {
205
205
  if (productIds.length) {
206
206
  const data = await veilig(() => db
207
207
  .from("products")
208
- .select("id, product, article_number, barcode, location, unit, weight, custom_fields")
208
+ .select("id, product, article_number, barcode, location, unit, weight, custom_fields, floriday_trade_item_id, trade_item_key")
209
209
  .in("id", productIds));
210
210
  for (const p of arr(data))
211
211
  producten.set(String(p["id"]), p);
212
212
  }
213
+ // --- verrijking vanuit Floriday-artikelcache ------------------------------
214
+ // `products.unit` is vrijwel altijd "stuks" en zegt niets over het fust.
215
+ // De echte fustsoort, potmaat en kleur staan in de Floriday-cache:
216
+ // - fustsoort: primaire verpakkingsconfiguratie → vbnPackageCode, met de
217
+ // gebruikersnaam uit `fust_types`.
218
+ // - potmaat: kenmerk S01 (Potmaat).
219
+ // - kleur: kenmerk B01 (Hoofdkleur 1).
220
+ const floridayIds = uniek(Array.from(producten.values()).map((p) => {
221
+ const extra = (p["custom_fields"] ?? {});
222
+ return String(p["floriday_trade_item_id"] ?? p["trade_item_key"] ?? extra["floriday_id"] ?? "");
223
+ }));
224
+ const floridayInfo = new Map();
225
+ if (floridayIds.length) {
226
+ const items = arr(await veilig(() => db
227
+ .from("floriday_trade_items_cache")
228
+ .select("floriday_id, data")
229
+ .in("floriday_id", floridayIds)));
230
+ for (const it of items) {
231
+ const d = (it["data"] ?? {});
232
+ const configs = arr(d["packingConfigurations"]);
233
+ const primair = configs.find((c) => c["primary"]) ?? configs[0] ?? {};
234
+ const fustCode = String((primair["package"] ?? {})["vbnPackageCode"] ?? "");
235
+ const kenmerken = arr(d["characteristics"]);
236
+ const b01 = kenmerken.find((k) => String(k["vbnCode"]) === "B01");
237
+ const s01 = kenmerken.find((k) => String(k["vbnCode"]).toUpperCase() === "S01");
238
+ const kleurCode = b01 ? String(b01["vbnValueCode"] ?? "") : "";
239
+ const potmaatCode = s01 ? String(s01["vbnValueCode"] ?? "") : "";
240
+ floridayInfo.set(String(it["floriday_id"]), { fustCode, kleurCode, potmaatCode });
241
+ }
242
+ // VBN-verpakkincode → de ingestelde fustnaam. `fust_types` is hiervoor de
243
+ // bron van waarheid; `crate_types` bevat niet alle VBN-codes.
244
+ const fustCodes = uniek(Array.from(floridayInfo.values()).map((i) => i.fustCode));
245
+ const fustNamen = new Map();
246
+ if (fustCodes.length) {
247
+ const fusten = arr(await veilig(() => db.from("fust_types").select("vbn_code, name").in("vbn_code", fustCodes)));
248
+ for (const fust of fusten) {
249
+ const code = String(fust["vbn_code"] ?? "");
250
+ const naam = String(fust["name"] ?? "").trim();
251
+ if (code && naam && !fustNamen.has(code))
252
+ fustNamen.set(code, naam);
253
+ }
254
+ }
255
+ // Floriday-kenmerkcodes → leesbare labels uit de VBN-codelijst.
256
+ const kenmerkSleutels = uniek(Array.from(floridayInfo.values()).flatMap((i) => [
257
+ i.kleurCode ? `B01:${i.kleurCode}` : "",
258
+ i.potmaatCode ? `S01:${i.potmaatCode}` : "",
259
+ ]));
260
+ const kenmerkNamen = new Map();
261
+ if (kenmerkSleutels.length) {
262
+ const waarden = arr(await veilig(() => db
263
+ .from("floriday_code_lists_cache")
264
+ .select("code, label")
265
+ .eq("list_name", "vbn-characteristic-value")
266
+ .in("code", kenmerkSleutels)));
267
+ for (const w of waarden) {
268
+ const code = String(w["code"] ?? "");
269
+ const label = String(w["label"] ?? "").trim();
270
+ if (code && label && !kenmerkNamen.has(code))
271
+ kenmerkNamen.set(code, label);
272
+ }
273
+ }
274
+ // Schrijf de verrijking terug in de custom_fields van het product.
275
+ for (const p of producten.values()) {
276
+ const extra = (p["custom_fields"] ?? {});
277
+ const floridayId = String(p["floriday_trade_item_id"] ?? p["trade_item_key"] ?? extra["floriday_id"] ?? "");
278
+ const info = floridayInfo.get(floridayId);
279
+ if (!info)
280
+ continue;
281
+ if (info.fustCode) {
282
+ const naam = fustNamen.get(info.fustCode);
283
+ extra["__fustsoort"] = naam ?? `VBN ${info.fustCode}`;
284
+ }
285
+ if (info.kleurCode) {
286
+ extra["__kleur"] = kenmerkNamen.get(`B01:${info.kleurCode}`) ?? info.kleurCode;
287
+ }
288
+ if (info.potmaatCode) {
289
+ extra["__potmaat"] = kenmerkNamen.get(`S01:${info.potmaatCode}`) ?? info.potmaatCode;
290
+ }
291
+ p["custom_fields"] = extra;
292
+ }
293
+ }
213
294
  const maakProduct = (bron, aantalPlanten, fusten, perFust) => {
214
295
  const p = producten.get(String(bron["product_id"] ?? "")) ?? {};
215
296
  const extra = (p["custom_fields"] ?? {});
297
+ const unit = String(p["unit"] ?? "").trim();
216
298
  return {
217
299
  artikelnummer: String(p["article_number"] ?? ""),
218
300
  artikelnaam: taalTekst(bron["product_name"]) || taalTekst(p["product"]),
219
- potmaat: String(extra["potmaat"] ?? extra["Potmaat"] ?? ""),
301
+ potmaat: String(extra["potmaat"] ??
302
+ extra["Potmaat"] ??
303
+ extra["pot_size"] ??
304
+ extra["potSize"] ??
305
+ extra["potmaat_cm"] ??
306
+ extra["maat"] ??
307
+ extra["__potmaat"] ??
308
+ "Niet ingesteld"),
309
+ kleur: String(extra["kleur"] ??
310
+ extra["Kleur"] ??
311
+ extra["colour"] ??
312
+ extra["color"] ??
313
+ extra["__kleur"] ??
314
+ "Niet ingesteld"),
220
315
  aantal: aantalPlanten,
221
316
  barcode: String(p["barcode"] ?? ""),
222
- locatie: String(p["location"] ?? ""),
317
+ locatie: String(p["location"] ||
318
+ extra["locatie"] ||
319
+ extra["location"] ||
320
+ extra["warehouse_location"] ||
321
+ "Niet ingesteld"),
223
322
  gewicht: bron["weight_kg"] ? `${num(bron["weight_kg"]).toFixed(1)} kg` : "",
224
323
  fust_aantal: fusten,
225
- fustsoort: String(extra["fustsoort"] ?? p["unit"] ?? ""),
324
+ // "stuks" is een aantalseenheid, geen fustsoort — die slaan we over.
325
+ fustsoort: String(extra["fustsoort"] ??
326
+ extra["Fustsoort"] ??
327
+ extra["__fustsoort"] ??
328
+ (unit && unit.toLowerCase() !== "stuks" ? unit : "Niet ingesteld")),
226
329
  planten_per_fust: perFust,
227
330
  };
228
331
  };
@@ -251,17 +354,27 @@ export async function laadPakbonData(db, opties) {
251
354
  if (!lagen.length)
252
355
  lagen.push({ producten: [], ruimte: 0 });
253
356
  return {
357
+ // Nodig om een Engine-opdracht voor precies één kar te kunnen filteren.
358
+ // De waarde komt uit de gedeelde database en wordt nooit lokaal bedacht.
359
+ cart_id: String(kar["id"] ?? "") || undefined,
360
+ cart_label: String(kar["cart_label"] ?? kar["label"] ?? "") || undefined,
361
+ cart_index: index + 1,
362
+ cart_total: karrenRijen.length,
254
363
  karnummer: num(kar["cart_number"]) || index + 1,
255
364
  route: String(kar["carrier_type"] ?? ""),
256
365
  gewicht: kar["weight_kg"] ? `${num(kar["weight_kg"]).toFixed(1)} kg` : "",
257
366
  gedeeld: kar["__gedeeld"] === true,
258
367
  opmerking: String(kar["notes"] ?? ""),
259
- lagen: lagen.slice(0, Math.max(maxLagen, lagen.length)).map((laag, j) => ({
260
- laagnummer: j + 1,
261
- belading: `${Math.round(Math.min(laag.ruimte, 1) * 100)}%`,
262
- producten: laag.producten,
263
- fusten: vatFustenSamen(laag.producten),
264
- })),
368
+ lagen: lagen.slice(0, Math.max(maxLagen, lagen.length)).map((laag, j) => {
369
+ const potmaten = uniek(laag.producten.map((product) => product["potmaat"]));
370
+ return {
371
+ laagnummer: j + 1,
372
+ belading: `${Math.round(Math.min(laag.ruimte, 1) * 100)}%`,
373
+ potmaat: potmaten.length === 1 ? potmaten[0] : "",
374
+ producten: laag.producten,
375
+ fusten: vatFustenSamen(laag.producten),
376
+ };
377
+ }),
265
378
  };
266
379
  });
267
380
  // --- losse orderregels (zonder karindeling) -------------------------------
@@ -67,10 +67,22 @@ export declare function sectieDef(type: PakbonSectieType): SectieDef;
67
67
  export declare function nieuweSectie(type: PakbonSectieType): PakbonSectie;
68
68
  export declare function standaardPakbonConfig(): PakbonConfig;
69
69
  export declare function leesPakbonConfig(config: unknown): PakbonConfig;
70
+ /** Manier waarop de order gepickt wordt. */
71
+ export type PickMethode = "kar" | "fusten" | "beide";
72
+ /** Variant die de Logistics Engine voor een gecombineerde pakbon kiest. */
73
+ export type PakbonLayoutVariant = "full_cart" | "partial_order";
74
+ /** Normaliseert alleen de twee varianten uit het gedeelde Engine-contract. */
75
+ export declare function pakbonLayoutVariant(value: unknown): PakbonLayoutVariant | null;
70
76
  /** Actieve pickmethode van een pakbonconfiguratie. */
71
- export declare function pickMethode(secties: PakbonSectie[] | undefined): "kar" | "fusten";
77
+ export declare function pickMethode(secties: PakbonSectie[] | undefined): PickMethode;
72
78
  /** Blokken die bij de gekozen pickmethode niet van toepassing zijn. */
73
- export declare function sectieOnderdrukt(type: PakbonSectieType, methode: "kar" | "fusten"): boolean;
79
+ export declare function sectieOnderdrukt(type: PakbonSectieType, methode: PickMethode): boolean;
80
+ /**
81
+ * Blokken die de Engine-variant weglaat. Zonder variant blijft de editor/het
82
+ * losse voorbeeld compleet; een echte Engine-opdracht wordt in de wachtrij
83
+ * geblokkeerd totdat de variant aanwezig is.
84
+ */
85
+ export declare function sectieOnderdruktVoorVariant(type: PakbonSectieType, methode: PickMethode, variant?: PakbonLayoutVariant | null): boolean;
74
86
  export interface DemoProduct {
75
87
  artikelnummer: string;
76
88
  artikelnaam: string;
@@ -107,6 +119,14 @@ export interface DemoKar {
107
119
  route: string;
108
120
  chauffeur: string;
109
121
  gewicht: string;
122
+ /** Gegevens die de Engine voor één volle of gedeeltelijke kar aanlevert. */
123
+ cart_label?: string;
124
+ cart_index?: number;
125
+ cart_total?: number;
126
+ cart_id?: string;
127
+ cart_items?: unknown[];
128
+ /** Bestaande Engine-barcode van deze kar; de Layout maker genereert deze nooit. */
129
+ barcode?: string;
110
130
  /** Kar bevat ook regels van een andere order (buffer-/gedeelde kar). */
111
131
  gedeeld?: boolean;
112
132
  lagen: DemoLaag[];
@@ -209,4 +229,10 @@ export interface FustVerzamelGroep {
209
229
  * karindeling maakt.
210
230
  */
211
231
  export declare function fustVerzamellijst(karren: unknown): FustVerzamelGroep[];
232
+ /**
233
+ * Voorbeeld van een deelkar (niet-volle kar): alleen een deel van de fusten,
234
+ * zonder karindeling. Uitsluitend bedoeld voor het voorbeeld in de builder —
235
+ * echte opdrachten krijgen hun gegevens van de Logistics Engine.
236
+ */
237
+ export declare function deelkarVoorbeeldOrder(order?: DemoOrder): DemoOrder;
212
238
  //# sourceMappingURL=pakbonBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}