@flowselections/layout-maker 1.3.2
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.
- package/README.md +24 -0
- package/dist-lib/_core-safelist.d.ts +2 -0
- package/dist-lib/_core-safelist.d.ts.map +1 -0
- package/dist-lib/_core-safelist.js +18 -0
- package/dist-lib/components/AfdrukKnop.d.ts +13 -0
- package/dist-lib/components/AfdrukKnop.d.ts.map +1 -0
- package/dist-lib/components/AfdrukKnop.js +38 -0
- package/dist-lib/components/AiLayoutImportDialog.d.ts +6 -0
- package/dist-lib/components/AiLayoutImportDialog.d.ts.map +1 -0
- package/dist-lib/components/AiLayoutImportDialog.js +133 -0
- package/dist-lib/components/BlokOntwerperPage.d.ts +5 -0
- package/dist-lib/components/BlokOntwerperPage.d.ts.map +1 -0
- package/dist-lib/components/BlokOntwerperPage.js +67 -0
- package/dist-lib/components/DocumentSettingsPanel.d.ts +13 -0
- package/dist-lib/components/DocumentSettingsPanel.d.ts.map +1 -0
- package/dist-lib/components/DocumentSettingsPanel.js +65 -0
- package/dist-lib/components/FormaatOrientatieBar.d.ts +10 -0
- package/dist-lib/components/FormaatOrientatieBar.d.ts.map +1 -0
- package/dist-lib/components/FormaatOrientatieBar.js +51 -0
- package/dist-lib/components/LayoutsPage.d.ts +2 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -0
- package/dist-lib/components/LayoutsPage.js +196 -0
- package/dist-lib/components/LogoBibliotheekDialog.d.ts +7 -0
- package/dist-lib/components/LogoBibliotheekDialog.d.ts.map +1 -0
- package/dist-lib/components/LogoBibliotheekDialog.js +27 -0
- package/dist-lib/components/LogosPage.d.ts +7 -0
- package/dist-lib/components/LogosPage.d.ts.map +1 -0
- package/dist-lib/components/LogosPage.js +131 -0
- package/dist-lib/components/PaginaDocument.d.ts +22 -0
- package/dist-lib/components/PaginaDocument.d.ts.map +1 -0
- package/dist-lib/components/PaginaDocument.js +80 -0
- package/dist-lib/components/PakbonBuilderPage.d.ts +5 -0
- package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -0
- package/dist-lib/components/PakbonBuilderPage.js +69 -0
- package/dist-lib/components/PakbonPreview.d.ts +13 -0
- package/dist-lib/components/PakbonPreview.d.ts.map +1 -0
- package/dist-lib/components/PakbonPreview.js +423 -0
- package/dist-lib/components/PakbonSectiesPanel.d.ts +18 -0
- package/dist-lib/components/PakbonSectiesPanel.d.ts.map +1 -0
- package/dist-lib/components/PakbonSectiesPanel.js +156 -0
- package/dist-lib/components/PreviewFit.d.ts +9 -0
- package/dist-lib/components/PreviewFit.d.ts.map +1 -0
- package/dist-lib/components/PreviewFit.js +38 -0
- package/dist-lib/components/PrintQueuePage.d.ts +2 -0
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -0
- package/dist-lib/components/PrintQueuePage.js +59 -0
- package/dist-lib/components/PrinterSetupWizard.d.ts +6 -0
- package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -0
- package/dist-lib/components/PrinterSetupWizard.js +119 -0
- package/dist-lib/components/PrintersPage.d.ts +2 -0
- package/dist-lib/components/PrintersPage.d.ts.map +1 -0
- package/dist-lib/components/PrintersPage.js +60 -0
- package/dist-lib/components/ProductiebonBlokkenPanel.d.ts +7 -0
- package/dist-lib/components/ProductiebonBlokkenPanel.d.ts.map +1 -0
- package/dist-lib/components/ProductiebonBlokkenPanel.js +85 -0
- package/dist-lib/components/ProductiebonBuilderPage.d.ts +5 -0
- package/dist-lib/components/ProductiebonBuilderPage.d.ts.map +1 -0
- package/dist-lib/components/ProductiebonBuilderPage.js +48 -0
- package/dist-lib/components/ProductiebonPreview.d.ts +12 -0
- package/dist-lib/components/ProductiebonPreview.d.ts.map +1 -0
- package/dist-lib/components/ProductiebonPreview.js +237 -0
- package/dist-lib/components/TemplateModuleLogo.d.ts +6 -0
- package/dist-lib/components/TemplateModuleLogo.d.ts.map +1 -0
- package/dist-lib/components/TemplateModuleLogo.js +4 -0
- package/dist-lib/components/settings/MijnModuleSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/MijnModuleSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/MijnModuleSettingsCard.js +42 -0
- package/dist-lib/hooks/useMijnModuleData.d.ts +13 -0
- package/dist-lib/hooks/useMijnModuleData.d.ts.map +1 -0
- package/dist-lib/hooks/useMijnModuleData.js +49 -0
- package/dist-lib/index.d.ts +38 -0
- package/dist-lib/index.d.ts.map +1 -0
- package/dist-lib/index.js +56 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts +2 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-attacher.js +12 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +19847 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.js +52 -0
- package/dist-lib/integrations/supabase/client.d.ts +2 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.js +3 -0
- package/dist-lib/integrations/supabase/client.server.d.ts +19843 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.server.js +30 -0
- package/dist-lib/integrations/supabase/types.d.ts +20423 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/types.js +78 -0
- package/dist-lib/lib/aiLayout.functions.d.ts +19864 -0
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -0
- package/dist-lib/lib/aiLayout.functions.js +28 -0
- package/dist-lib/lib/aiLayout.server.d.ts +14 -0
- package/dist-lib/lib/aiLayout.server.d.ts.map +1 -0
- package/dist-lib/lib/aiLayout.server.js +197 -0
- package/dist-lib/lib/browserPrint.d.ts +38 -0
- package/dist-lib/lib/browserPrint.d.ts.map +1 -0
- package/dist-lib/lib/browserPrint.js +104 -0
- package/dist-lib/lib/documentProfiles.d.ts +50 -0
- package/dist-lib/lib/documentProfiles.d.ts.map +1 -0
- package/dist-lib/lib/documentProfiles.js +458 -0
- package/dist-lib/lib/documentTypes.d.ts +123 -0
- package/dist-lib/lib/documentTypes.d.ts.map +1 -0
- package/dist-lib/lib/documentTypes.js +74 -0
- package/dist-lib/lib/fieldRegistry.d.ts +20 -0
- package/dist-lib/lib/fieldRegistry.d.ts.map +1 -0
- package/dist-lib/lib/fieldRegistry.js +123 -0
- package/dist-lib/lib/formaatPrinters.d.ts +14 -0
- package/dist-lib/lib/formaatPrinters.d.ts.map +1 -0
- package/dist-lib/lib/formaatPrinters.js +39 -0
- package/dist-lib/lib/layoutPreview.d.ts +18 -0
- package/dist-lib/lib/layoutPreview.d.ts.map +1 -0
- package/dist-lib/lib/layoutPreview.js +134 -0
- package/dist-lib/lib/logoLibrary.d.ts +80 -0
- package/dist-lib/lib/logoLibrary.d.ts.map +1 -0
- package/dist-lib/lib/logoLibrary.js +264 -0
- package/dist-lib/lib/pakbonBuilder.d.ts +210 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -0
- package/dist-lib/lib/pakbonBuilder.js +910 -0
- package/dist-lib/lib/pakbonHtml.d.ts +48 -0
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -0
- package/dist-lib/lib/pakbonHtml.js +754 -0
- package/dist-lib/lib/printApi.d.ts +45 -0
- package/dist-lib/lib/printApi.d.ts.map +1 -0
- package/dist-lib/lib/printApi.js +98 -0
- package/dist-lib/lib/productiebonBuilder.d.ts +137 -0
- package/dist-lib/lib/productiebonBuilder.d.ts.map +1 -0
- package/dist-lib/lib/productiebonBuilder.js +661 -0
- package/dist-lib/lib/supabaseClient.d.ts +4 -0
- package/dist-lib/lib/supabaseClient.d.ts.map +1 -0
- package/dist-lib/lib/supabaseClient.js +10 -0
- package/dist-lib/lib/useDocumentData.d.ts +97 -0
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -0
- package/dist-lib/lib/useDocumentData.js +286 -0
- package/dist-lib/lib/useLayoutIdParam.d.ts +7 -0
- package/dist-lib/lib/useLayoutIdParam.d.ts.map +1 -0
- package/dist-lib/lib/useLayoutIdParam.js +10 -0
- package/dist-lib/lib/utils.d.ts +3 -0
- package/dist-lib/lib/utils.d.ts.map +1 -0
- package/dist-lib/lib/utils.js +5 -0
- package/dist-lib/lib/validationSchemas.d.ts +15 -0
- package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
- package/dist-lib/lib/validationSchemas.js +25 -0
- package/dist-lib/styles.css +1 -0
- package/package.json +117 -0
- package/public/logo.png +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/documentTypes.ts — types & constanten voor Document Layouts
|
|
3
|
+
// ============================================================================
|
|
4
|
+
export const DOCUMENT_TYPES = [
|
|
5
|
+
{ value: "pakbon", label: "Pakbon" },
|
|
6
|
+
{ value: "sticker", label: "Sticker" },
|
|
7
|
+
{ value: "productiebon", label: "Productiebon" },
|
|
8
|
+
{ value: "factuur", label: "Factuur" },
|
|
9
|
+
{ value: "offerte", label: "Offerte" },
|
|
10
|
+
{ value: "orderbevestiging", label: "Orderbevestiging" },
|
|
11
|
+
{ value: "etiket", label: "Etiket" },
|
|
12
|
+
{ value: "verzendlabel", label: "Verzendlabel" },
|
|
13
|
+
{ value: "productlabel", label: "Productlabel" },
|
|
14
|
+
{ value: "barcode_label", label: "Barcode label" },
|
|
15
|
+
{ value: "magazijnlijst", label: "Magazijnlijst" },
|
|
16
|
+
{ value: "controlelijst", label: "Controlelijst" },
|
|
17
|
+
{ value: "transportdocument", label: "Transportdocument" },
|
|
18
|
+
{ value: "vrij", label: "Vrij document" },
|
|
19
|
+
];
|
|
20
|
+
export function documentTypeLabel(value) {
|
|
21
|
+
return DOCUMENT_TYPES.find((d) => d.value === value)?.label ?? value;
|
|
22
|
+
}
|
|
23
|
+
export const PAPIERFORMATEN = [
|
|
24
|
+
{ code: "A4", label: "A4 (210 × 297 mm)", breedte: 210, hoogte: 297 },
|
|
25
|
+
{ code: "A5", label: "A5 (148 × 210 mm)", breedte: 148, hoogte: 210 },
|
|
26
|
+
{ code: "A6", label: "A6 (105 × 148 mm)", breedte: 105, hoogte: 148 },
|
|
27
|
+
{ code: "LETTER", label: "Letter (216 × 279 mm)", breedte: 216, hoogte: 279 },
|
|
28
|
+
{ code: "BON80", label: "Bon 80 mm", breedte: 80, hoogte: 200 },
|
|
29
|
+
{ code: "LABEL_100x150", label: "Label 100 × 150 mm", breedte: 100, hoogte: 150 },
|
|
30
|
+
{ code: "LABEL_100x62", label: "Label 100 × 62 mm", breedte: 100, hoogte: 62 },
|
|
31
|
+
{ code: "LABEL_57x32", label: "Label 57 × 32 mm", breedte: 57, hoogte: 32 },
|
|
32
|
+
{ code: "VRIJ", label: "Vrij formaat", breedte: 210, hoogte: 297 },
|
|
33
|
+
];
|
|
34
|
+
export const ELEMENT_STANDAARD = {
|
|
35
|
+
tekst: { label: "Tekst", breedte: 60, hoogte: 8, content: "Nieuwe tekst" },
|
|
36
|
+
veld: { label: "Databaseveld", breedte: 60, hoogte: 8, content: "{{order.nummer}}" },
|
|
37
|
+
afbeelding: { label: "Afbeelding", breedte: 40, hoogte: 30, content: "" },
|
|
38
|
+
logo: { label: "Logo", breedte: 45, hoogte: 18, content: "Bedrijfslogo" },
|
|
39
|
+
lijn: { label: "Lijn", breedte: 80, hoogte: 0.5, content: "" },
|
|
40
|
+
rechthoek: { label: "Rechthoek", breedte: 50, hoogte: 25, content: "" },
|
|
41
|
+
cirkel: { label: "Cirkel", breedte: 25, hoogte: 25, content: "" },
|
|
42
|
+
barcode: { label: "Barcode", breedte: 60, hoogte: 18, content: "{{order.nummer}}" },
|
|
43
|
+
qrcode: { label: "QR-code", breedte: 30, hoogte: 30, content: "{{order.track_trace}}" },
|
|
44
|
+
tabel: { label: "Tabel", breedte: 180, hoogte: 100, content: "" },
|
|
45
|
+
lijst: { label: "Lijst", breedte: 90, hoogte: 40, content: "" },
|
|
46
|
+
paginanummer: { label: "Paginanummer", breedte: 40, hoogte: 8, content: "Pagina {p} van {n}" },
|
|
47
|
+
datum: { label: "Datum", breedte: 40, hoogte: 8, content: "{{systeem.datum}}" },
|
|
48
|
+
tijd: { label: "Tijd", breedte: 30, hoogte: 8, content: "{{systeem.tijd}}" },
|
|
49
|
+
handtekening: { label: "Handtekeningvak", breedte: 70, hoogte: 30, content: "Handtekening" },
|
|
50
|
+
svg: { label: "SVG / icoon", breedte: 20, hoogte: 20, content: "" },
|
|
51
|
+
html: { label: "HTML blok", breedte: 90, hoogte: 30, content: "<b>HTML</b>" },
|
|
52
|
+
};
|
|
53
|
+
export const STANDAARD_STIJL = {
|
|
54
|
+
fontfamilie: "Helvetica",
|
|
55
|
+
fontgrootte: 10,
|
|
56
|
+
vet: false,
|
|
57
|
+
cursief: false,
|
|
58
|
+
onderstreept: false,
|
|
59
|
+
kleur: "#111827",
|
|
60
|
+
achtergrond: "transparent",
|
|
61
|
+
randbreedte: 0,
|
|
62
|
+
randkleur: "#111827",
|
|
63
|
+
padding: 0,
|
|
64
|
+
uitlijning: "left",
|
|
65
|
+
transparantie: 100,
|
|
66
|
+
regelhoogte: 1.2,
|
|
67
|
+
};
|
|
68
|
+
export const STANDAARD_KOLOMMEN = [
|
|
69
|
+
{ key: "code", kop: "Artikelcode", veldpad: "regel.artikelcode", breedte: 20 },
|
|
70
|
+
{ key: "naam", kop: "Omschrijving", veldpad: "regel.artikelnaam", breedte: 40 },
|
|
71
|
+
{ key: "aantal", kop: "Aantal", veldpad: "regel.aantal", breedte: 12, uitlijning: "right" },
|
|
72
|
+
{ key: "prijs", kop: "Prijs", veldpad: "regel.prijs", breedte: 14, uitlijning: "right" },
|
|
73
|
+
{ key: "totaal", kop: "Totaal", veldpad: "regel.totaal", breedte: 14, uitlijning: "right", totaal: true },
|
|
74
|
+
];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type VeldSoort = "tekst" | "getal" | "bedrag" | "datum" | "boolean" | "lijst";
|
|
2
|
+
export interface VeldDefinitie {
|
|
3
|
+
pad: string;
|
|
4
|
+
label: string;
|
|
5
|
+
soort: VeldSoort;
|
|
6
|
+
voorbeeld?: string | number;
|
|
7
|
+
}
|
|
8
|
+
export interface EntiteitDefinitie {
|
|
9
|
+
key: string;
|
|
10
|
+
label: string;
|
|
11
|
+
moduleId: string;
|
|
12
|
+
isLijst?: boolean;
|
|
13
|
+
velden: VeldDefinitie[];
|
|
14
|
+
}
|
|
15
|
+
export declare function registreerEntiteit(def: EntiteitDefinitie): void;
|
|
16
|
+
export declare function veldRegisterSubscribe(l: () => void): () => void;
|
|
17
|
+
export declare function alleEntiteiten(): EntiteitDefinitie[];
|
|
18
|
+
export declare function alleVelden(): VeldDefinitie[];
|
|
19
|
+
export declare function zoekVeld(pad: string): VeldDefinitie | undefined;
|
|
20
|
+
//# sourceMappingURL=fieldRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/fieldRegistry.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAKD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,QAGxD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,IAAI,cAKlD;AAED,wBAAgB,cAAc,IAAI,iBAAiB,EAAE,CAEpD;AAED,wBAAgB,UAAU,IAAI,aAAa,EAAE,CAE5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE/D"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/fieldRegistry.ts — dynamisch veldregister
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Iedere ERP-module registreert hier zijn entiteiten en velden. De editor
|
|
5
|
+
// leest uitsluitend dit register, waardoor nieuwe modules automatisch
|
|
6
|
+
// beschikbaar komen zonder dat de editor aangepast hoeft te worden.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
const registry = new Map();
|
|
9
|
+
const listeners = new Set();
|
|
10
|
+
export function registreerEntiteit(def) {
|
|
11
|
+
registry.set(def.key, def);
|
|
12
|
+
listeners.forEach((l) => l());
|
|
13
|
+
}
|
|
14
|
+
export function veldRegisterSubscribe(l) {
|
|
15
|
+
listeners.add(l);
|
|
16
|
+
return () => {
|
|
17
|
+
listeners.delete(l);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function alleEntiteiten() {
|
|
21
|
+
return Array.from(registry.values());
|
|
22
|
+
}
|
|
23
|
+
export function alleVelden() {
|
|
24
|
+
return alleEntiteiten().flatMap((e) => e.velden);
|
|
25
|
+
}
|
|
26
|
+
export function zoekVeld(pad) {
|
|
27
|
+
return alleVelden().find((v) => v.pad === pad);
|
|
28
|
+
}
|
|
29
|
+
// --- Basisregistratie: kernentiteiten van het ERP -------------------------
|
|
30
|
+
registreerEntiteit({
|
|
31
|
+
key: "order",
|
|
32
|
+
label: "Order",
|
|
33
|
+
moduleId: "core",
|
|
34
|
+
velden: [
|
|
35
|
+
{ pad: "order.nummer", label: "Ordernummer", soort: "tekst", voorbeeld: "ORD-10231" },
|
|
36
|
+
{ pad: "order.datum", label: "Orderdatum", soort: "datum", voorbeeld: "12-03-2026" },
|
|
37
|
+
{ pad: "order.leverdatum", label: "Leverdatum", soort: "datum", voorbeeld: "15-03-2026" },
|
|
38
|
+
{ pad: "order.referentie", label: "Referentie", soort: "tekst", voorbeeld: "Inkoop 8891" },
|
|
39
|
+
{ pad: "order.verkoper", label: "Verkoper", soort: "tekst", voorbeeld: "Jan de Vries" },
|
|
40
|
+
{ pad: "order.opmerking", label: "Opmerking", soort: "tekst", voorbeeld: "Voor 10:00 leveren" },
|
|
41
|
+
{ pad: "order.transporteur", label: "Transporteur", soort: "tekst", voorbeeld: "DHL" },
|
|
42
|
+
{ pad: "order.track_trace", label: "Track & Trace", soort: "tekst", voorbeeld: "3SDHL0099213" },
|
|
43
|
+
{ pad: "order.locatie", label: "Locatie", soort: "tekst", voorbeeld: "Magazijn 2" },
|
|
44
|
+
{ pad: "order.aantal_karren", label: "Aantal karren", soort: "getal", voorbeeld: 3 },
|
|
45
|
+
{ pad: "order.totaal", label: "Ordertotaal", soort: "bedrag", voorbeeld: "€ 1.284,50" },
|
|
46
|
+
{ pad: "order.btw", label: "BTW-bedrag", soort: "bedrag", voorbeeld: "€ 269,75" },
|
|
47
|
+
{ pad: "order.korting", label: "Korting", soort: "bedrag", voorbeeld: "€ 45,00" },
|
|
48
|
+
{ pad: "order.gewicht", label: "Gewicht", soort: "getal", voorbeeld: 128 },
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
registreerEntiteit({
|
|
52
|
+
key: "klant",
|
|
53
|
+
label: "Klant",
|
|
54
|
+
moduleId: "core",
|
|
55
|
+
velden: [
|
|
56
|
+
{ pad: "klant.naam", label: "Klantnaam", soort: "tekst", voorbeeld: "Bloemenhuis De Roos" },
|
|
57
|
+
{ pad: "klant.bedrijfsnaam", label: "Bedrijfsnaam", soort: "tekst", voorbeeld: "De Roos B.V." },
|
|
58
|
+
{ pad: "klant.adres", label: "Adres", soort: "tekst", voorbeeld: "Kerkstraat 12" },
|
|
59
|
+
{ pad: "klant.postcode", label: "Postcode", soort: "tekst", voorbeeld: "1234 AB" },
|
|
60
|
+
{ pad: "klant.plaats", label: "Plaats", soort: "tekst", voorbeeld: "Aalsmeer" },
|
|
61
|
+
{ pad: "klant.land", label: "Land", soort: "tekst", voorbeeld: "Nederland" },
|
|
62
|
+
{ pad: "klant.btw_nummer", label: "BTW-nummer", soort: "tekst", voorbeeld: "NL001234567B01" },
|
|
63
|
+
{ pad: "klant.kvk_nummer", label: "KvK-nummer", soort: "tekst", voorbeeld: "34567890" },
|
|
64
|
+
{ pad: "klant.email", label: "E-mail", soort: "tekst", voorbeeld: "info@deroos.nl" },
|
|
65
|
+
{ pad: "klant.telefoon", label: "Telefoon", soort: "tekst", voorbeeld: "0297-123456" },
|
|
66
|
+
{ pad: "klant.taal", label: "Taal", soort: "tekst", voorbeeld: "NL" },
|
|
67
|
+
],
|
|
68
|
+
});
|
|
69
|
+
registreerEntiteit({
|
|
70
|
+
key: "regel",
|
|
71
|
+
label: "Orderregels",
|
|
72
|
+
moduleId: "core",
|
|
73
|
+
isLijst: true,
|
|
74
|
+
velden: [
|
|
75
|
+
{ pad: "regel.artikelcode", label: "Artikelcode", soort: "tekst", voorbeeld: "ART-001" },
|
|
76
|
+
{ pad: "regel.artikelnaam", label: "Artikelnaam", soort: "tekst", voorbeeld: "Rosa Avalanche 60cm" },
|
|
77
|
+
{ pad: "regel.aantal", label: "Aantal", soort: "getal", voorbeeld: 24 },
|
|
78
|
+
{ pad: "regel.prijs", label: "Prijs", soort: "bedrag", voorbeeld: "€ 0,45" },
|
|
79
|
+
{ pad: "regel.korting_pct", label: "Kortingspercentage", soort: "getal", voorbeeld: 5 },
|
|
80
|
+
{ pad: "regel.totaal", label: "Regeltotaal", soort: "bedrag", voorbeeld: "€ 10,80" },
|
|
81
|
+
{ pad: "regel.belading", label: "Belading", soort: "tekst", voorbeeld: "5 × 12" },
|
|
82
|
+
{ pad: "regel.potmaat", label: "Potmaat", soort: "tekst", voorbeeld: "12 cm" },
|
|
83
|
+
{ pad: "regel.barcode", label: "Barcode", soort: "tekst", voorbeeld: "8712345678904" },
|
|
84
|
+
{ pad: "regel.locatie", label: "Locatie", soort: "tekst", voorbeeld: "A-12-3" },
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
registreerEntiteit({
|
|
88
|
+
key: "factuur",
|
|
89
|
+
label: "Factuur",
|
|
90
|
+
moduleId: "core",
|
|
91
|
+
velden: [
|
|
92
|
+
{ pad: "factuur.nummer", label: "Factuurnummer", soort: "tekst", voorbeeld: "F-2026-0042" },
|
|
93
|
+
{ pad: "factuur.datum", label: "Factuurdatum", soort: "datum", voorbeeld: "12-03-2026" },
|
|
94
|
+
{ pad: "factuur.vervaldatum", label: "Vervaldatum", soort: "datum", voorbeeld: "26-03-2026" },
|
|
95
|
+
{ pad: "factuur.subtotaal", label: "Subtotaal", soort: "bedrag", voorbeeld: "€ 1.014,75" },
|
|
96
|
+
{ pad: "factuur.btw_pct", label: "BTW-percentage", soort: "getal", voorbeeld: 21 },
|
|
97
|
+
{ pad: "factuur.totaal", label: "Totaal", soort: "bedrag", voorbeeld: "€ 1.284,50" },
|
|
98
|
+
{ pad: "factuur.betaalwijze", label: "Betaalwijze", soort: "tekst", voorbeeld: "Automatische incasso" },
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
registreerEntiteit({
|
|
102
|
+
key: "bedrijf",
|
|
103
|
+
label: "Eigen bedrijf",
|
|
104
|
+
moduleId: "core",
|
|
105
|
+
velden: [
|
|
106
|
+
{ pad: "bedrijf.naam", label: "Bedrijfsnaam", soort: "tekst", voorbeeld: "FlowSelections B.V." },
|
|
107
|
+
{ pad: "bedrijf.adres", label: "Adres", soort: "tekst", voorbeeld: "Handelsweg 5" },
|
|
108
|
+
{ pad: "bedrijf.postcode", label: "Postcode", soort: "tekst", voorbeeld: "1431 GX" },
|
|
109
|
+
{ pad: "bedrijf.plaats", label: "Plaats", soort: "tekst", voorbeeld: "Aalsmeer" },
|
|
110
|
+
{ pad: "bedrijf.btw_nummer", label: "BTW-nummer", soort: "tekst", voorbeeld: "NL009876543B01" },
|
|
111
|
+
{ pad: "bedrijf.iban", label: "IBAN", soort: "tekst", voorbeeld: "NL00 RABO 0123 4567 89" },
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
registreerEntiteit({
|
|
115
|
+
key: "systeem",
|
|
116
|
+
label: "Systeem",
|
|
117
|
+
moduleId: "core",
|
|
118
|
+
velden: [
|
|
119
|
+
{ pad: "systeem.datum", label: "Huidige datum", soort: "datum", voorbeeld: "29-07-2026" },
|
|
120
|
+
{ pad: "systeem.tijd", label: "Huidige tijd", soort: "tekst", voorbeeld: "09:14" },
|
|
121
|
+
{ pad: "systeem.gebruiker", label: "Ingelogde gebruiker", soort: "tekst", voorbeeld: "Anna Bakker" },
|
|
122
|
+
],
|
|
123
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FormaatPrinter {
|
|
2
|
+
id: string;
|
|
3
|
+
documenttype: string;
|
|
4
|
+
formaat_code: string;
|
|
5
|
+
printer_id: string | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function useFormaatPrinters(documenttype: string): {
|
|
8
|
+
koppelingen: FormaatPrinter[];
|
|
9
|
+
reload: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
export declare function zetFormaatPrinter(documenttype: string, formaat_code: string, printer_id: string | null): Promise<void>;
|
|
12
|
+
/** Bepaalt welke printer bij een formaat hoort (voor automatisch afdrukken). */
|
|
13
|
+
export declare function printerVoorFormaat(documenttype: string, formaat_code: string): Promise<string | null>;
|
|
14
|
+
//# sourceMappingURL=formaatPrinters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formaatPrinters.d.ts","sourceRoot":"","sources":["../../src/lib/formaatPrinters.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;EAgBtD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,iBAQ1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/formaatPrinters.ts — standaardprinter per documentsoort en formaat
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { useCallback, useEffect, useState } from "react";
|
|
5
|
+
import { supabase } from "./supabaseClient";
|
|
6
|
+
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
7
|
+
export function useFormaatPrinters(documenttype) {
|
|
8
|
+
const [koppelingen, setKoppelingen] = useState([]);
|
|
9
|
+
const load = useCallback(async () => {
|
|
10
|
+
const { data } = await supabase
|
|
11
|
+
.from("document_formaat_printers")
|
|
12
|
+
.select("*")
|
|
13
|
+
.eq("documenttype", documenttype);
|
|
14
|
+
setKoppelingen(arr(data));
|
|
15
|
+
}, [documenttype]);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
void load();
|
|
18
|
+
}, [load]);
|
|
19
|
+
return { koppelingen, reload: load };
|
|
20
|
+
}
|
|
21
|
+
export async function zetFormaatPrinter(documenttype, formaat_code, printer_id) {
|
|
22
|
+
const { error } = await supabase
|
|
23
|
+
.from("document_formaat_printers")
|
|
24
|
+
.upsert({ documenttype, formaat_code, printer_id }, {
|
|
25
|
+
onConflict: "documenttype,formaat_code",
|
|
26
|
+
});
|
|
27
|
+
if (error)
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
/** Bepaalt welke printer bij een formaat hoort (voor automatisch afdrukken). */
|
|
31
|
+
export async function printerVoorFormaat(documenttype, formaat_code) {
|
|
32
|
+
const { data } = await supabase
|
|
33
|
+
.from("document_formaat_printers")
|
|
34
|
+
.select("printer_id")
|
|
35
|
+
.eq("documenttype", documenttype)
|
|
36
|
+
.eq("formaat_code", formaat_code)
|
|
37
|
+
.maybeSingle();
|
|
38
|
+
return data?.printer_id ?? null;
|
|
39
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LayoutElementModel, LayoutModel } from "./documentTypes";
|
|
2
|
+
export declare function voorbeeldContext(): Record<string, string>;
|
|
3
|
+
export declare function vulVelden(tekst: string, ctx: Record<string, string>): string;
|
|
4
|
+
export declare function conditieVoldoet(el: LayoutElementModel, ctx: Record<string, string>): boolean;
|
|
5
|
+
export declare const VOORBEELD_REGELS: {
|
|
6
|
+
artikelcode: string;
|
|
7
|
+
artikelnaam: string;
|
|
8
|
+
aantal: string;
|
|
9
|
+
prijs: string;
|
|
10
|
+
totaal: string;
|
|
11
|
+
barcode: string;
|
|
12
|
+
locatie: string;
|
|
13
|
+
potmaat: string;
|
|
14
|
+
belading: string;
|
|
15
|
+
korting_pct: string;
|
|
16
|
+
}[];
|
|
17
|
+
export declare function bouwDocumentHtml(layout: LayoutModel, elementen: LayoutElementModel[]): string;
|
|
18
|
+
//# sourceMappingURL=layoutPreview.d.ts.map
|
|
@@ -0,0 +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,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAY7F"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/layoutPreview.ts — voorbeeldgegevens, veldvervanging en print-HTML
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { alleVelden } from "./fieldRegistry";
|
|
5
|
+
export function voorbeeldContext() {
|
|
6
|
+
const ctx = {};
|
|
7
|
+
for (const v of alleVelden())
|
|
8
|
+
ctx[v.pad] = String(v.voorbeeld ?? v.label);
|
|
9
|
+
return ctx;
|
|
10
|
+
}
|
|
11
|
+
export function vulVelden(tekst, ctx) {
|
|
12
|
+
return (tekst ?? "").replace(/\{\{\s*([\w.]+)\s*\}\}/g, (_m, pad) => ctx[pad] ?? `⟨${pad}⟩`);
|
|
13
|
+
}
|
|
14
|
+
export function conditieVoldoet(el, ctx) {
|
|
15
|
+
const cond = Array.isArray(el.condities) ? el.condities : [];
|
|
16
|
+
return cond.every((c) => {
|
|
17
|
+
const w = ctx[c.veld] ?? "";
|
|
18
|
+
switch (c.operator) {
|
|
19
|
+
case "=":
|
|
20
|
+
return w === c.waarde;
|
|
21
|
+
case "!=":
|
|
22
|
+
return w !== c.waarde;
|
|
23
|
+
case ">":
|
|
24
|
+
return Number(w) > Number(c.waarde);
|
|
25
|
+
case "<":
|
|
26
|
+
return Number(w) < Number(c.waarde);
|
|
27
|
+
case "bevat":
|
|
28
|
+
return w.toLowerCase().includes(c.waarde.toLowerCase());
|
|
29
|
+
case "leeg":
|
|
30
|
+
return w === "";
|
|
31
|
+
case "niet_leeg":
|
|
32
|
+
return w !== "";
|
|
33
|
+
default:
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export const VOORBEELD_REGELS = [
|
|
39
|
+
{ artikelcode: "ART-001", artikelnaam: "Rosa Avalanche 60cm", aantal: "24", prijs: "€ 0,45", totaal: "€ 10,80", barcode: "8712345678904", locatie: "A-12-3", potmaat: "-", belading: "5 × 12", korting_pct: "0" },
|
|
40
|
+
{ artikelcode: "ART-014", artikelnaam: "Gerbera mini mix", aantal: "60", prijs: "€ 0,32", totaal: "€ 19,20", barcode: "8712345671142", locatie: "B-04-1", potmaat: "-", belading: "6 × 10", korting_pct: "5" },
|
|
41
|
+
{ artikelcode: "ART-221", artikelnaam: "Phalaenopsis 2-tak", aantal: "12", prijs: "€ 4,95", totaal: "€ 59,40", barcode: "8712345629911", locatie: "C-01-2", potmaat: "12 cm", belading: "4 × 8", korting_pct: "0" },
|
|
42
|
+
];
|
|
43
|
+
function esc(s) {
|
|
44
|
+
return s.replace(/[&<>]/g, (c) => ({ "&": "&", "<": "<", ">": ">" })[c]);
|
|
45
|
+
}
|
|
46
|
+
function elementHtml(el, ctx) {
|
|
47
|
+
const s = el.stijl ?? {};
|
|
48
|
+
const base = [
|
|
49
|
+
"position:absolute",
|
|
50
|
+
`left:${el.x}mm`,
|
|
51
|
+
`top:${el.y}mm`,
|
|
52
|
+
`width:${el.breedte}mm`,
|
|
53
|
+
`height:${el.hoogte}mm`,
|
|
54
|
+
`transform:rotate(${el.rotatie || 0}deg)`,
|
|
55
|
+
`z-index:${el.zIndex ?? 0}`,
|
|
56
|
+
`font-family:${s.fontfamilie ?? "Helvetica"},sans-serif`,
|
|
57
|
+
`font-size:${s.fontgrootte ?? 10}pt`,
|
|
58
|
+
`font-weight:${s.vet ? 700 : 400}`,
|
|
59
|
+
`font-style:${s.cursief ? "italic" : "normal"}`,
|
|
60
|
+
`text-decoration:${s.onderstreept ? "underline" : "none"}`,
|
|
61
|
+
`color:${s.kleur ?? "#111827"}`,
|
|
62
|
+
`background:${s.achtergrond && s.achtergrond !== "transparent" ? s.achtergrond : "transparent"}`,
|
|
63
|
+
`text-align:${s.uitlijning ?? "left"}`,
|
|
64
|
+
`padding:${s.padding ?? 0}mm`,
|
|
65
|
+
`opacity:${(s.transparantie ?? 100) / 100}`,
|
|
66
|
+
`line-height:${s.regelhoogte ?? 1.2}`,
|
|
67
|
+
s.randbreedte ? `border:${s.randbreedte}mm solid ${s.randkleur ?? "#111827"}` : "",
|
|
68
|
+
"box-sizing:border-box",
|
|
69
|
+
"overflow:hidden",
|
|
70
|
+
]
|
|
71
|
+
.filter(Boolean)
|
|
72
|
+
.join(";");
|
|
73
|
+
const inhoud = vulVelden(el.content ?? "", ctx);
|
|
74
|
+
switch (el.type) {
|
|
75
|
+
case "lijn":
|
|
76
|
+
return `<div style="${base};background:${s.kleur ?? "#111827"}"></div>`;
|
|
77
|
+
case "rechthoek":
|
|
78
|
+
return `<div style="${base};border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
|
|
79
|
+
case "cirkel":
|
|
80
|
+
return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
|
|
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>
|
|
84
|
+
<div style="font-size:7pt">${esc(inhoud)}</div></div>`;
|
|
85
|
+
case "qrcode":
|
|
86
|
+
return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
|
|
87
|
+
case "logo":
|
|
88
|
+
case "afbeelding":
|
|
89
|
+
return el.config?.bronUrl
|
|
90
|
+
? `<div style="${base};display:flex;align-items:center;justify-content:center"><img src="${esc(el.config.bronUrl)}" alt="${esc(inhoud)}" style="max-width:100%;max-height:100%;object-fit:contain" /></div>`
|
|
91
|
+
: `<div style="${base};display:flex;align-items:center;justify-content:center;border:0.2mm dashed #9ca3af;font-size:8pt">${esc(inhoud || "Afbeelding")}</div>`;
|
|
92
|
+
case "handtekening":
|
|
93
|
+
return `<div style="${base};display:flex;align-items:flex-end;border-bottom:0.3mm solid #111827;font-size:8pt">${esc(inhoud)}</div>`;
|
|
94
|
+
case "html":
|
|
95
|
+
return `<div style="${base}">${el.config?.html ?? inhoud}</div>`;
|
|
96
|
+
case "svg":
|
|
97
|
+
return `<div style="${base}">${el.config?.svg ?? ""}</div>`;
|
|
98
|
+
case "tabel": {
|
|
99
|
+
const kolommen = Array.isArray(el.config?.kolommen) ? el.config.kolommen : [];
|
|
100
|
+
const kop = el.config?.toonKoppen === false ? "" :
|
|
101
|
+
`<tr>${kolommen.map((k) => `<th style="text-align:${k.uitlijning ?? "left"};border-bottom:0.3mm solid #111;padding:1mm 0.5mm">${esc(k.kop)}</th>`).join("")}</tr>`;
|
|
102
|
+
const rijen = VOORBEELD_REGELS.map((r) => `<tr>${kolommen
|
|
103
|
+
.map((k) => {
|
|
104
|
+
const veld = k.veldpad.split(".").pop() ?? "";
|
|
105
|
+
const w = r[veld] ?? "";
|
|
106
|
+
return `<th style="font-weight:400;text-align:${k.uitlijning ?? "left"};padding:0.8mm 0.5mm;border-bottom:0.1mm solid #d1d5db">${esc(w)}</th>`;
|
|
107
|
+
})
|
|
108
|
+
.join("")}</tr>`).join("");
|
|
109
|
+
const totaal = el.config?.toonTotalen
|
|
110
|
+
? `<tr>${kolommen
|
|
111
|
+
.map((k) => k.totaal
|
|
112
|
+
? `<th style="text-align:right;padding:1mm 0.5mm;border-top:0.3mm solid #111">€ 89,40</th>`
|
|
113
|
+
: `<th></th>`)
|
|
114
|
+
.join("")}</tr>`
|
|
115
|
+
: "";
|
|
116
|
+
return `<div style="${base}"><table style="width:100%;border-collapse:collapse;font-size:inherit">${kop}${rijen}${totaal}</table></div>`;
|
|
117
|
+
}
|
|
118
|
+
default:
|
|
119
|
+
return `<div style="${base}">${esc(inhoud)}</div>`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function bouwDocumentHtml(layout, elementen) {
|
|
123
|
+
const ctx = voorbeeldContext();
|
|
124
|
+
const zichtbaar = elementen.filter((e) => !e.verborgen && conditieVoldoet(e, ctx));
|
|
125
|
+
const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
|
|
126
|
+
const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
|
|
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>
|
|
133
|
+
<body><div class="pagina">${body}</div></body></html>`;
|
|
134
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export declare const LOGO_BUCKET = "layout-logos";
|
|
2
|
+
export declare const LOGO_CATEGORIEEN: readonly [{
|
|
3
|
+
readonly value: "hoofdlogo";
|
|
4
|
+
readonly label: "Hoofdlogo";
|
|
5
|
+
}, {
|
|
6
|
+
readonly value: "facturen";
|
|
7
|
+
readonly label: "Facturen";
|
|
8
|
+
}, {
|
|
9
|
+
readonly value: "merken";
|
|
10
|
+
readonly label: "Merken";
|
|
11
|
+
}, {
|
|
12
|
+
readonly value: "labels";
|
|
13
|
+
readonly label: "Labels";
|
|
14
|
+
}, {
|
|
15
|
+
readonly value: "klanten";
|
|
16
|
+
readonly label: "Klanten";
|
|
17
|
+
}, {
|
|
18
|
+
readonly value: "overig";
|
|
19
|
+
readonly label: "Overig";
|
|
20
|
+
}];
|
|
21
|
+
export declare function logoCategorieLabel(v: string): string;
|
|
22
|
+
export interface LogoModel {
|
|
23
|
+
id: string;
|
|
24
|
+
naam: string;
|
|
25
|
+
omschrijving: string;
|
|
26
|
+
categorie: string;
|
|
27
|
+
bestand_url: string;
|
|
28
|
+
bestandspad: string | null;
|
|
29
|
+
bestandstype: string;
|
|
30
|
+
breedte: number;
|
|
31
|
+
hoogte: number;
|
|
32
|
+
bestandsgrootte: number;
|
|
33
|
+
transparant: boolean;
|
|
34
|
+
is_standaard: boolean;
|
|
35
|
+
hash: string | null;
|
|
36
|
+
created_at: string;
|
|
37
|
+
updated_at: string;
|
|
38
|
+
/** tijdelijke, ondertekende weergave-URL */
|
|
39
|
+
viewUrl?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const TOEGESTANE_LOGO_TYPES: string[];
|
|
42
|
+
export declare function bestandstypeVan(file: File): string;
|
|
43
|
+
export declare function bestandHash(file: File): Promise<string>;
|
|
44
|
+
export declare function leesAfmetingen(file: File): Promise<{
|
|
45
|
+
breedte: number;
|
|
46
|
+
hoogte: number;
|
|
47
|
+
transparant: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
export declare function haalLogos(): Promise<LogoModel[]>;
|
|
50
|
+
export declare function useLogos(): {
|
|
51
|
+
logos: LogoModel[];
|
|
52
|
+
loading: boolean;
|
|
53
|
+
reload: () => Promise<void>;
|
|
54
|
+
};
|
|
55
|
+
export interface UploadInput {
|
|
56
|
+
file: File;
|
|
57
|
+
naam: string;
|
|
58
|
+
omschrijving: string;
|
|
59
|
+
categorie: string;
|
|
60
|
+
is_standaard: boolean;
|
|
61
|
+
}
|
|
62
|
+
export declare function bestaatHash(hash: string): Promise<LogoModel | null>;
|
|
63
|
+
export declare function maakLogo(input: UploadInput): Promise<LogoModel>;
|
|
64
|
+
export declare function werkLogoBij(id: string, patch: Partial<LogoModel>): Promise<void>;
|
|
65
|
+
/** Vervangt het bestand van een bestaand logo — alle layouts volgen automatisch. */
|
|
66
|
+
export declare function vervangLogoBestand(logo: LogoModel, file: File): Promise<void>;
|
|
67
|
+
export declare function verwijderLogo(logo: LogoModel): Promise<void>;
|
|
68
|
+
export declare function downloadLogo(logo: LogoModel): Promise<void>;
|
|
69
|
+
export declare function formatteerBytes(n: number): string;
|
|
70
|
+
/**
|
|
71
|
+
* Logo's als ingebedde data-URL. Nodig bij afdrukken: een printvenster kan
|
|
72
|
+
* tijdelijke (ondertekende) URL's soms niet op tijd laden, waardoor het logo
|
|
73
|
+
* als kapotte afbeelding op papier komt.
|
|
74
|
+
*/
|
|
75
|
+
export declare function haalPrintLogos(): Promise<{
|
|
76
|
+
id: string;
|
|
77
|
+
naam: string;
|
|
78
|
+
viewUrl: string | null;
|
|
79
|
+
}[]>;
|
|
80
|
+
//# sourceMappingURL=logoLibrary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logoLibrary.d.ts","sourceRoot":"","sources":["../../src/lib/logoLibrary.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEX,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,UAE3C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,eAAO,MAAM,qBAAqB,UAA6D,CAAC;AAEhG,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQlD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CA2CpE;AAaD,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAOtD;AAED,wBAAgB,QAAQ;;;;EAmBvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAGzE;AAaD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CA8BrE;AAUD,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,iBAOtE;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,iBAwBnE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,iBAKlD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,SAAS,iBAUjD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,UAKxC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAC7C;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,CACvD,CAoBA"}
|