@flowselections/logistiek-engine 1.0.1

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 (175) hide show
  1. package/README.md +24 -0
  2. package/dist-lib/_core-safelist.d.ts +2 -0
  3. package/dist-lib/_core-safelist.d.ts.map +1 -0
  4. package/dist-lib/_core-safelist.js +15 -0
  5. package/dist-lib/components/BeladingIndelingCard.d.ts +2 -0
  6. package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -0
  7. package/dist-lib/components/BeladingIndelingCard.js +77 -0
  8. package/dist-lib/components/BufferDebugCard.d.ts +19 -0
  9. package/dist-lib/components/BufferDebugCard.d.ts.map +1 -0
  10. package/dist-lib/components/BufferDebugCard.js +69 -0
  11. package/dist-lib/components/CapaciteitMeldingenCard.d.ts +2 -0
  12. package/dist-lib/components/CapaciteitMeldingenCard.d.ts.map +1 -0
  13. package/dist-lib/components/CapaciteitMeldingenCard.js +40 -0
  14. package/dist-lib/components/LadingdragersPage.d.ts +2 -0
  15. package/dist-lib/components/LadingdragersPage.d.ts.map +1 -0
  16. package/dist-lib/components/LadingdragersPage.js +102 -0
  17. package/dist-lib/components/LogistiekEngineLogo.d.ts +6 -0
  18. package/dist-lib/components/LogistiekEngineLogo.d.ts.map +1 -0
  19. package/dist-lib/components/LogistiekEngineLogo.js +4 -0
  20. package/dist-lib/components/LogistiekEnginePage.d.ts +2 -0
  21. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -0
  22. package/dist-lib/components/LogistiekEnginePage.js +53 -0
  23. package/dist-lib/components/ModulePromptsPage.d.ts +2 -0
  24. package/dist-lib/components/ModulePromptsPage.d.ts.map +1 -0
  25. package/dist-lib/components/ModulePromptsPage.js +58 -0
  26. package/dist-lib/components/RegiePage.d.ts +2 -0
  27. package/dist-lib/components/RegiePage.d.ts.map +1 -0
  28. package/dist-lib/components/RegiePage.js +82 -0
  29. package/dist-lib/components/RuleEnginePage.d.ts +7 -0
  30. package/dist-lib/components/RuleEnginePage.d.ts.map +1 -0
  31. package/dist-lib/components/RuleEnginePage.js +114 -0
  32. package/dist-lib/components/StrategieDialog.d.ts +11 -0
  33. package/dist-lib/components/StrategieDialog.d.ts.map +1 -0
  34. package/dist-lib/components/StrategieDialog.js +38 -0
  35. package/dist-lib/components/VertragingMeldingenCard.d.ts +2 -0
  36. package/dist-lib/components/VertragingMeldingenCard.d.ts.map +1 -0
  37. package/dist-lib/components/VertragingMeldingenCard.js +32 -0
  38. package/dist-lib/components/VoorraadMeldingenCard.d.ts +2 -0
  39. package/dist-lib/components/VoorraadMeldingenCard.d.ts.map +1 -0
  40. package/dist-lib/components/VoorraadMeldingenCard.js +26 -0
  41. package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts +12 -0
  42. package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts.map +1 -0
  43. package/dist-lib/components/rule-engine/CollapsibleGroup.js +11 -0
  44. package/dist-lib/components/rule-engine/ConditionsEditor.d.ts +8 -0
  45. package/dist-lib/components/rule-engine/ConditionsEditor.d.ts.map +1 -0
  46. package/dist-lib/components/rule-engine/ConditionsEditor.js +31 -0
  47. package/dist-lib/components/rule-engine/FieldHelp.d.ts +14 -0
  48. package/dist-lib/components/rule-engine/FieldHelp.d.ts.map +1 -0
  49. package/dist-lib/components/rule-engine/FieldHelp.js +18 -0
  50. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +2 -0
  51. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +1 -0
  52. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +41 -0
  53. package/dist-lib/components/rule-engine/ImpactPanel.d.ts +5 -0
  54. package/dist-lib/components/rule-engine/ImpactPanel.d.ts.map +1 -0
  55. package/dist-lib/components/rule-engine/ImpactPanel.js +25 -0
  56. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts +9 -0
  57. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts.map +1 -0
  58. package/dist-lib/components/rule-engine/RuleFieldInput.js +80 -0
  59. package/dist-lib/components/rule-engine/VersionsPanel.d.ts +10 -0
  60. package/dist-lib/components/rule-engine/VersionsPanel.d.ts.map +1 -0
  61. package/dist-lib/components/rule-engine/VersionsPanel.js +16 -0
  62. package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts +2 -0
  63. package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts.map +1 -0
  64. package/dist-lib/components/settings/LogistiekEngineSettingsCard.js +22 -0
  65. package/dist-lib/hooks/useCapaciteitMeldingen.d.ts +20 -0
  66. package/dist-lib/hooks/useCapaciteitMeldingen.d.ts.map +1 -0
  67. package/dist-lib/hooks/useCapaciteitMeldingen.js +46 -0
  68. package/dist-lib/hooks/useDocumentLayouts.d.ts +13 -0
  69. package/dist-lib/hooks/useDocumentLayouts.d.ts.map +1 -0
  70. package/dist-lib/hooks/useDocumentLayouts.js +54 -0
  71. package/dist-lib/hooks/useLadingdragers.d.ts +16 -0
  72. package/dist-lib/hooks/useLadingdragers.d.ts.map +1 -0
  73. package/dist-lib/hooks/useLadingdragers.js +86 -0
  74. package/dist-lib/hooks/useLogistiekStrategieen.d.ts +29 -0
  75. package/dist-lib/hooks/useLogistiekStrategieen.d.ts.map +1 -0
  76. package/dist-lib/hooks/useLogistiekStrategieen.js +111 -0
  77. package/dist-lib/hooks/useLogistiekTaken.d.ts +89 -0
  78. package/dist-lib/hooks/useLogistiekTaken.d.ts.map +1 -0
  79. package/dist-lib/hooks/useLogistiekTaken.js +314 -0
  80. package/dist-lib/hooks/usePickstations.d.ts +10 -0
  81. package/dist-lib/hooks/usePickstations.d.ts.map +1 -0
  82. package/dist-lib/hooks/usePickstations.js +51 -0
  83. package/dist-lib/hooks/useRecalcJob.d.ts +24 -0
  84. package/dist-lib/hooks/useRecalcJob.d.ts.map +1 -0
  85. package/dist-lib/hooks/useRecalcJob.js +83 -0
  86. package/dist-lib/hooks/useRuleEngine.d.ts +48 -0
  87. package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -0
  88. package/dist-lib/hooks/useRuleEngine.js +222 -0
  89. package/dist-lib/hooks/useVertragingMeldingen.d.ts +29 -0
  90. package/dist-lib/hooks/useVertragingMeldingen.d.ts.map +1 -0
  91. package/dist-lib/hooks/useVertragingMeldingen.js +68 -0
  92. package/dist-lib/hooks/useVoorraadMeldingen.d.ts +30 -0
  93. package/dist-lib/hooks/useVoorraadMeldingen.d.ts.map +1 -0
  94. package/dist-lib/hooks/useVoorraadMeldingen.js +70 -0
  95. package/dist-lib/index.d.ts +36 -0
  96. package/dist-lib/index.d.ts.map +1 -0
  97. package/dist-lib/index.js +52 -0
  98. package/dist-lib/integrations/supabase/auth-attacher.d.ts +2 -0
  99. package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -0
  100. package/dist-lib/integrations/supabase/auth-attacher.js +12 -0
  101. package/dist-lib/integrations/supabase/auth-middleware.d.ts +19781 -0
  102. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -0
  103. package/dist-lib/integrations/supabase/auth-middleware.js +52 -0
  104. package/dist-lib/integrations/supabase/client.d.ts +19777 -0
  105. package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
  106. package/dist-lib/integrations/supabase/client.js +13 -0
  107. package/dist-lib/integrations/supabase/client.server.d.ts +19777 -0
  108. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -0
  109. package/dist-lib/integrations/supabase/client.server.js +30 -0
  110. package/dist-lib/integrations/supabase/types.d.ts +20355 -0
  111. package/dist-lib/integrations/supabase/types.d.ts.map +1 -0
  112. package/dist-lib/integrations/supabase/types.js +78 -0
  113. package/dist-lib/lib/bufferMatching.d.ts +26 -0
  114. package/dist-lib/lib/bufferMatching.d.ts.map +1 -0
  115. package/dist-lib/lib/bufferMatching.js +73 -0
  116. package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts +23 -0
  117. package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts.map +1 -0
  118. package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +126 -0
  119. package/dist-lib/lib/floridayDocuments.functions.d.ts +59415 -0
  120. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -0
  121. package/dist-lib/lib/floridayDocuments.functions.js +68 -0
  122. package/dist-lib/lib/floridayDocuments.server.d.ts +51 -0
  123. package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -0
  124. package/dist-lib/lib/floridayDocuments.server.js +109 -0
  125. package/dist-lib/lib/loadCarrierPlanner.d.ts +71 -0
  126. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -0
  127. package/dist-lib/lib/loadCarrierPlanner.js +374 -0
  128. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +98984 -0
  129. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -0
  130. package/dist-lib/lib/loadCarrierPlanning.functions.js +106 -0
  131. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +46 -0
  132. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -0
  133. package/dist-lib/lib/loadCarrierPlanning.server.js +515 -0
  134. package/dist-lib/lib/loadCarrierTaskSync.server.d.ts +3 -0
  135. package/dist-lib/lib/loadCarrierTaskSync.server.d.ts.map +1 -0
  136. package/dist-lib/lib/loadCarrierTaskSync.server.js +56 -0
  137. package/dist-lib/lib/loadCarrierTypes.d.ts +19 -0
  138. package/dist-lib/lib/loadCarrierTypes.d.ts.map +1 -0
  139. package/dist-lib/lib/loadCarrierTypes.js +41 -0
  140. package/dist-lib/lib/logisticsPlanner.d.ts +56 -0
  141. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -0
  142. package/dist-lib/lib/logisticsPlanner.js +273 -0
  143. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +39575 -0
  144. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -0
  145. package/dist-lib/lib/logisticsRecalcJob.functions.js +30 -0
  146. package/dist-lib/lib/logisticsRecalcJob.server.d.ts +32 -0
  147. package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -0
  148. package/dist-lib/lib/logisticsRecalcJob.server.js +116 -0
  149. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +19792 -0
  150. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -0
  151. package/dist-lib/lib/logisticsRecalculate.functions.js +35 -0
  152. package/dist-lib/lib/logisticsTasks.d.ts +23 -0
  153. package/dist-lib/lib/logisticsTasks.d.ts.map +1 -0
  154. package/dist-lib/lib/logisticsTasks.js +92 -0
  155. package/dist-lib/lib/modulePrompts.d.ts +31 -0
  156. package/dist-lib/lib/modulePrompts.d.ts.map +1 -0
  157. package/dist-lib/lib/modulePrompts.js +1195 -0
  158. package/dist-lib/lib/ruleEngineImpact.d.ts +27 -0
  159. package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -0
  160. package/dist-lib/lib/ruleEngineImpact.js +257 -0
  161. package/dist-lib/lib/ruleEngineSchema.d.ts +69 -0
  162. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -0
  163. package/dist-lib/lib/ruleEngineSchema.js +899 -0
  164. package/dist-lib/lib/ruleEngineWizard.d.ts +17 -0
  165. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -0
  166. package/dist-lib/lib/ruleEngineWizard.js +204 -0
  167. package/dist-lib/lib/utils.d.ts +3 -0
  168. package/dist-lib/lib/utils.d.ts.map +1 -0
  169. package/dist-lib/lib/utils.js +5 -0
  170. package/dist-lib/lib/validationSchemas.d.ts +15 -0
  171. package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
  172. package/dist-lib/lib/validationSchemas.js +25 -0
  173. package/dist-lib/styles.css +1 -0
  174. package/package.json +113 -0
  175. package/public/logo.png +0 -0
@@ -0,0 +1,17 @@
1
+ import { type RuleField, type RuleGroup } from "./ruleEngineSchema";
2
+ export interface WizardStep {
3
+ id: string;
4
+ label: string;
5
+ description: string;
6
+ /** Naar welke stap uit RULE_STEPS de waarden worden weggeschreven. */
7
+ storeId: string;
8
+ groups: RuleGroup[];
9
+ /** Alleen de eerste wizardstap van een opslagstap toont de voorwaarden. */
10
+ showConditions: boolean;
11
+ }
12
+ export declare const WIZARD_STEPS: WizardStep[];
13
+ export declare function isAdvancedField(field: RuleField): boolean;
14
+ export declare function fieldHelp(field: RuleField): string | undefined;
15
+ /** Korte samenvatting van de belangrijkste keuzes binnen een blok. */
16
+ export declare function groupSummary(group: RuleGroup, values: Record<string, unknown>): string;
17
+ //# sourceMappingURL=ruleEngineWizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAgDD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
@@ -0,0 +1,204 @@
1
+ // ============================================================================
2
+ // src/lib/ruleEngineWizard.ts — indeling van het instelscherm
3
+ // ============================================================================
4
+ // Bepaalt UITSLUITEND hoe de instellingen op het scherm verdeeld worden over
5
+ // stappen en blokken. De opslag blijft ongewijzigd: elke wizardstap schrijft
6
+ // naar de bestaande stap-id uit RULE_STEPS (`storeId`).
7
+ // ============================================================================
8
+ import { RULE_STEPS, optionLabel, } from "./ruleEngineSchema";
9
+ function step(id) {
10
+ const found = RULE_STEPS.find((s) => s.id === id);
11
+ if (!found)
12
+ throw new Error(`Onbekende stap: ${id}`);
13
+ return found;
14
+ }
15
+ function groups(stepId, ids) {
16
+ const all = step(stepId).groups;
17
+ return ids
18
+ .map((id) => all.find((g) => g.id === id))
19
+ .filter((g) => Boolean(g));
20
+ }
21
+ export const WIZARD_STEPS = [
22
+ {
23
+ id: "orders_combineren",
24
+ label: "Orders combineren",
25
+ description: "Bepaal wanneer losse orders samen één gecombineerde order worden.",
26
+ storeId: "order_verwerking",
27
+ groups: step("order_verwerking").groups,
28
+ showConditions: true,
29
+ },
30
+ {
31
+ id: "beladingindeling",
32
+ label: "Beladingindeling",
33
+ description: "Bepaal hoe een kar, pallet of container gevuld wordt.",
34
+ storeId: "karrenindeling",
35
+ groups: step("karrenindeling").groups,
36
+ showConditions: true,
37
+ },
38
+ {
39
+ id: "picken",
40
+ label: "Picken",
41
+ description: "Bepaal hoe en wanneer er gepickt wordt.",
42
+ storeId: "order_picken",
43
+ groups: groups("order_picken", ["methode", "werkdagen", "start_picken"]),
44
+ showConditions: true,
45
+ },
46
+ {
47
+ id: "drukte_vertraging",
48
+ label: "Drukte & vertraging",
49
+ description: "Wat er gebeurt als het te druk wordt of een order niet op tijd komt.",
50
+ storeId: "order_picken",
51
+ groups: groups("order_picken", [
52
+ "capaciteit_ophaalmomenten",
53
+ "herplannen",
54
+ "klant_informeren",
55
+ "interne_melding",
56
+ ]),
57
+ showConditions: false,
58
+ },
59
+ {
60
+ id: "pickstations",
61
+ label: "Pickstations",
62
+ description: "Werktijden, picktijden en wanneer documenten worden vrijgegeven.",
63
+ storeId: "pickstations",
64
+ groups: step("pickstations").groups,
65
+ showConditions: true,
66
+ },
67
+ {
68
+ id: "controle",
69
+ label: "Controle",
70
+ description: "Bepaal of en hoe er gecontroleerd wordt.",
71
+ storeId: "controle",
72
+ groups: step("controle").groups,
73
+ showConditions: true,
74
+ },
75
+ ];
76
+ // ── Geavanceerde velden ─────────────────────────────────────────────────────
77
+ // Deze instellingen worden zelden gewijzigd en staan achter "Geavanceerd".
78
+ const ADVANCED_FIELD_KEYS = new Set([
79
+ "shortage_priority",
80
+ "shortage_email_enabled",
81
+ "shortage_emails",
82
+ "capacity_alert_email",
83
+ "capacity_alert_emails",
84
+ "capacity_shift_priority",
85
+ "pick_partial_carriers",
86
+ "pick_reserve_type",
87
+ "pick_reserve_minutes",
88
+ "pick_reserve_percentage",
89
+ "pick_window_unit",
90
+ "delayed_order_status",
91
+ "delay_email_enabled",
92
+ "delay_emails",
93
+ "delay_priority",
94
+ "sample_percentage",
95
+ "packing_slip_carts_per_print",
96
+ "packing_slip_station",
97
+ "sticker_station",
98
+ "shipping_note_station",
99
+ "production_note_station",
100
+ "optimal_fill",
101
+ "buffer_include_reservations",
102
+ ]);
103
+ export function isAdvancedField(field) {
104
+ return ADVANCED_FIELD_KEYS.has(field.key);
105
+ }
106
+ // ── Extra uitleg ────────────────────────────────────────────────────────────
107
+ // Aanvullende tooltipteksten voor velden die nog geen uitleg hadden.
108
+ const EXTRA_HELP = {
109
+ load_carrier_types: "Zet alleen de ladingdragers aan die je in de praktijk gebruikt.",
110
+ mix_carrier_types: "Aan: één order mag over verschillende soorten dragers verdeeld worden.",
111
+ mode: "Automatisch: het systeem maakt de indeling. Scannen: een medewerker bepaalt het zelf.",
112
+ multi_order: "Aan: orders van meerdere bestellingen mogen op dezelfde drager staan.",
113
+ max_orders: "Meer orders op één drager betekent minder karren, maar wel meer sorteerwerk.",
114
+ max_customers: "Handig als klanten hun eigen kar willen ontvangen.",
115
+ max_layers: "Het aantal lagen dat je fysiek op een kar of container kwijt kunt.",
116
+ max_boxes_per_pallet: "Het aantal dozen dat je fysiek op één pallet kwijt kunt.",
117
+ optimal_fill: "Aan: het systeem zoekt de indeling waarbij de minste dragers nodig zijn.",
118
+ pick_mode: "Bepaalt waar een pickopdracht over gaat: één order, één kar of een hele buffer.",
119
+ scanner: "Met scanner werk je foutlozer; zonder scanner werk je op papier.",
120
+ capacity_alert_email: "Stuurt naast de melding ook een e-mail naar de opgegeven adressen.",
121
+ internal_alert_enabled: "Je eigen team krijgt bericht zodra een levering vertraagd raakt.",
122
+ delayed_order_status: "De status die de order krijgt zolang de vertraging loopt.",
123
+ start_time: "Het tijdstip waarop de eerste medewerker begint met picken.",
124
+ end_time: "Het tijdstip waarop het picken stopt.",
125
+ avg_staff: "Met hoeveel mensen je gemiddeld tegelijk pickt. Bepaalt de dagcapaciteit.",
126
+ pick_time_trolley: "Gemiddelde tijd die één medewerker nodig heeft voor één volle drager.",
127
+ pick_time_danish_container: "Gemiddelde tijd die één medewerker nodig heeft voor één volle drager.",
128
+ pick_time_euro_rolcontainer: "Gemiddelde tijd die één medewerker nodig heeft voor één volle drager.",
129
+ pick_time_pallet: "Gemiddelde tijd die één medewerker nodig heeft voor één volle pallet.",
130
+ pick_time_euro_pallet: "Gemiddelde tijd die één medewerker nodig heeft voor één volle pallet.",
131
+ pick_time_loose: "Gemiddelde tijd voor een order zonder ladingdrager.",
132
+ packing_slip_release: "Bepaalt op welk moment de pakbon bij het pickstation verschijnt.",
133
+ packing_slip_hours_before: "Zoveel uur vóór het picken staat de pakbon klaar.",
134
+ packing_slip_station: "Het pickstation waar de pakbon uitgeprint wordt.",
135
+ sticker_release: "Bepaalt op welk moment de stickers bij het pickstation verschijnen.",
136
+ sticker_hours_before: "Zoveel uur vóór het picken staan de stickers klaar.",
137
+ sticker_station: "Het pickstation waar de stickers uitgeprint worden.",
138
+ shipping_note_release: "Bepaalt op welk moment de verzendbrief beschikbaar komt.",
139
+ shipping_note_station: "Het pickstation waar de verzendbrief uitgeprint wordt.",
140
+ production_note_release: "Bepaalt op welk moment de productiebon beschikbaar komt.",
141
+ production_note_station: "Het pickstation waar de productiebon uitgeprint wordt.",
142
+ control_mode: "Hoe je controleert of de kar klopt voordat hij weggaat.",
143
+ control_print_items: "Welke papieren de medewerker bij de controle krijgt.",
144
+ sample_percentage: "100% betekent alles controleren; lager betekent steekproefsgewijs.",
145
+ pick_reserve_minutes: "Extra tijd die je altijd vrijhoudt vóór de vervoerder komt.",
146
+ pick_reserve_percentage: "Extra tijd als percentage van de totale picktijd.",
147
+ delay_priority: "Hoe zwaar de melding weegt in het meldingenoverzicht.",
148
+ shortage_priority: "Hoe zwaar de melding weegt in het meldingenoverzicht.",
149
+ };
150
+ export function fieldHelp(field) {
151
+ return field.description ?? EXTRA_HELP[field.key];
152
+ }
153
+ // ── Samenvatting per blok ───────────────────────────────────────────────────
154
+ const DAY_SHORT = {
155
+ mon: "ma",
156
+ tue: "di",
157
+ wed: "wo",
158
+ thu: "do",
159
+ fri: "vr",
160
+ sat: "za",
161
+ sun: "zo",
162
+ };
163
+ function describeValue(field, value) {
164
+ if (value === undefined || value === null || value === "")
165
+ return null;
166
+ switch (field.type) {
167
+ case "toggle":
168
+ return value === true ? `${field.label}: aan` : null;
169
+ case "days": {
170
+ const days = Array.isArray(value) ? value : [];
171
+ if (days.length === 0)
172
+ return null;
173
+ return `${field.label}: ${days.map((d) => DAY_SHORT[d] ?? d).join(", ")}`;
174
+ }
175
+ case "priority": {
176
+ const entries = Array.isArray(value) ? value : [];
177
+ const count = entries.filter((e) => e?.enabled).length;
178
+ return count > 0 ? `${field.label}: ${count} actief` : null;
179
+ }
180
+ case "select":
181
+ case "radio":
182
+ return `${field.label}: ${optionLabel(field, value)}`;
183
+ case "number":
184
+ return `${field.label}: ${value}${field.unit ? ` ${field.unit}` : ""}`;
185
+ case "time":
186
+ return `${field.label}: ${value}`;
187
+ default:
188
+ return null;
189
+ }
190
+ }
191
+ /** Korte samenvatting van de belangrijkste keuzes binnen een blok. */
192
+ export function groupSummary(group, values) {
193
+ const parts = [];
194
+ for (const field of group.fields) {
195
+ if (isAdvancedField(field))
196
+ continue;
197
+ const text = describeValue(field, values[field.key]);
198
+ if (text)
199
+ parts.push(text);
200
+ if (parts.length === 2)
201
+ break;
202
+ }
203
+ return parts.join(" · ");
204
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,5 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export declare const loginSchema: z.ZodObject<{
3
+ email: z.ZodString;
4
+ password: z.ZodString;
5
+ }, z.core.$strip>;
6
+ export declare const bugReportSchema: z.ZodObject<{
7
+ title: z.ZodString;
8
+ description: z.ZodString;
9
+ }, z.core.$strip>;
10
+ export declare const ALLOWED_FILE_TYPES: string[];
11
+ export declare function validateFileUpload(file: File): {
12
+ valid: boolean;
13
+ error?: string;
14
+ };
15
+ //# sourceMappingURL=validationSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationSchemas.d.ts","sourceRoot":"","sources":["../../src/lib/validationSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW;;;iBAGtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQjF"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ export const loginSchema = z.object({
3
+ email: z.string().email("Ongeldig e-mailadres"),
4
+ password: z.string().min(6, "Wachtwoord moet minimaal 6 tekens bevatten"),
5
+ });
6
+ export const bugReportSchema = z.object({
7
+ title: z.string().min(1, "Titel is verplicht").max(200),
8
+ description: z.string().min(1, "Beschrijving is verplicht").max(5000),
9
+ });
10
+ export const ALLOWED_FILE_TYPES = [
11
+ "image/png",
12
+ "image/jpeg",
13
+ "image/gif",
14
+ "application/pdf",
15
+ ];
16
+ const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
17
+ export function validateFileUpload(file) {
18
+ if (!ALLOWED_FILE_TYPES.includes(file.type)) {
19
+ return { valid: false, error: "Bestandstype niet toegestaan" };
20
+ }
21
+ if (file.size > MAX_FILE_SIZE) {
22
+ return { valid: false, error: "Bestand is te groot (max 10MB)" };
23
+ }
24
+ return { valid: true };
25
+ }
@@ -0,0 +1 @@
1
+ @source "./";
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@flowselections/logistiek-engine",
3
+ "version": "1.0.1",
4
+ "flowselections": {
5
+ "moduleId": "logistiek-engine",
6
+ "pages": [
7
+ {
8
+ "export": "LogistiekEnginePage",
9
+ "route": "logistiek-engine",
10
+ "title": "Logistiek Engine"
11
+ },
12
+ {
13
+ "export": "RuleEnginePage",
14
+ "route": "logistiek-engine/rule-engine",
15
+ "title": "Rule Engine",
16
+ "nav": false
17
+ },
18
+ {
19
+ "export": "RegiePage",
20
+ "route": "logistiek-engine/regie",
21
+ "title": "Regieoverzicht",
22
+ "nav": false
23
+ },
24
+ {
25
+ "export": "ModulePromptsPage",
26
+ "route": "logistiek-engine/modules",
27
+ "title": "Modules",
28
+ "nav": false
29
+ },
30
+ {
31
+ "export": "LadingdragersPage",
32
+ "route": "logistiek-engine/ladingdragers",
33
+ "title": "Ladingdragers",
34
+ "nav": false
35
+ }
36
+ ]
37
+ },
38
+ "private": false,
39
+ "sideEffects": false,
40
+ "type": "module",
41
+ "main": "./dist-lib/index.js",
42
+ "types": "./dist-lib/index.d.ts",
43
+ "exports": {
44
+ ".": {
45
+ "types": "./dist-lib/index.d.ts",
46
+ "default": "./dist-lib/index.js"
47
+ },
48
+ "./styles": "./dist-lib/styles.css"
49
+ },
50
+ "files": [
51
+ "dist-lib",
52
+ "public"
53
+ ],
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
57
+ "scripts": {
58
+ "dev": "vite dev",
59
+ "build": "vite build",
60
+ "build:lib": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node -e \"require('fs').writeFileSync('dist-lib/styles.css', '@source \\\"./\\\";\\n')\"",
61
+ "build:lib:watch": "tsc -p tsconfig.build.json --watch",
62
+ "build:dev": "vite build --mode development",
63
+ "preview": "vite preview",
64
+ "lint": "eslint ."
65
+ },
66
+ "peerDependencies": {
67
+ "@flowselections/core": "*",
68
+ "@tanstack/react-query": "^5.0.0",
69
+ "@tanstack/react-router": "^1.0.0",
70
+ "@tanstack/react-start": "^1.0.0",
71
+ "lucide-react": "^0.400.0",
72
+ "react": "^18 || ^19",
73
+ "react-dom": "^18 || ^19",
74
+ "sonner": "^2.0.0",
75
+ "@flowselections/floriday-authenticatie-module": "^1.0.30"
76
+ },
77
+ "dependencies": {
78
+ "@supabase/supabase-js": "^2.111.0",
79
+ "@flowselections/floriday-authenticatie-module": "^1.0.30"
80
+ },
81
+ "devDependencies": {
82
+ "@cloudflare/vite-plugin": "^1.25.5",
83
+ "@eslint/js": "^9.32.0",
84
+ "@flowselections/core": "1.0.12",
85
+ "@lovable.dev/vite-tanstack-config": "2.8.5",
86
+ "@rsbuild/core": "^1.0.0",
87
+ "@tailwindcss/vite": "^4.2.1",
88
+ "@tanstack/react-query": "^5.83.0",
89
+ "@tanstack/react-router": "^1.168.0",
90
+ "@tanstack/react-start": "^1.167.14",
91
+ "@tanstack/router-plugin": "^1.167.10",
92
+ "@types/node": "^22.16.5",
93
+ "@types/react": "^19.2.0",
94
+ "@types/react-dom": "^19.2.0",
95
+ "@vitejs/plugin-react": "^5.0.4",
96
+ "eslint": "^9.32.0",
97
+ "eslint-plugin-react-hooks": "^5.2.0",
98
+ "eslint-plugin-react-refresh": "^0.4.20",
99
+ "globals": "^15.15.0",
100
+ "lucide-react": "^0.575.0",
101
+ "react": "^19.2.0",
102
+ "react-dom": "^19.2.0",
103
+ "sonner": "^2.0.7",
104
+ "tailwindcss": "^4.2.1",
105
+ "tw-animate-css": "^1.3.4",
106
+ "typescript": "^5.8.3",
107
+ "tsc-alias": "^1.8.10",
108
+ "typescript-eslint": "^8.56.1",
109
+ "vite": "^7.3.1",
110
+ "vite-tsconfig-paths": "^6.0.2",
111
+ "nitro": "3.0.260603-beta"
112
+ }
113
+ }
Binary file