@flowselections/logistiek-engine 1.0.155 → 1.0.159

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 (118) hide show
  1. package/dist-lib/components/AfrondWachtrijCard.js +1 -1
  2. package/dist-lib/components/BeheerPage.js +5 -5
  3. package/dist-lib/components/BeladingIndelingCard.js +3 -3
  4. package/dist-lib/components/BeladingsafwijkingenCard.js +1 -1
  5. package/dist-lib/components/BufferDebugCard.d.ts +1 -1
  6. package/dist-lib/components/BufferDebugCard.js +1 -1
  7. package/dist-lib/components/CapaciteitMeldingenCard.js +1 -1
  8. package/dist-lib/components/FloridayPoortCard.js +1 -1
  9. package/dist-lib/components/FloridayPushCard.js +1 -1
  10. package/dist-lib/components/FlowCanvas.d.ts +5 -5
  11. package/dist-lib/components/FlowCanvas.js +4 -4
  12. package/dist-lib/components/FlowOrders.d.ts +1 -1
  13. package/dist-lib/components/FlowOrders.js +3 -3
  14. package/dist-lib/components/FlowPage.js +21 -21
  15. package/dist-lib/components/GearchiveerdeOrdersCard.js +1 -1
  16. package/dist-lib/components/GeblokkeerdeOrdersCard.js +1 -1
  17. package/dist-lib/components/KardekkingCard.js +1 -1
  18. package/dist-lib/components/LadingdragersPage.js +2 -2
  19. package/dist-lib/components/LogistiekEnginePage.js +5 -5
  20. package/dist-lib/components/LogistiekEngineQueuePage.js +3 -3
  21. package/dist-lib/components/MinuutrondeCard.js +3 -3
  22. package/dist-lib/components/ModulePromptsPage.js +3 -3
  23. package/dist-lib/components/NodeTracePanel.d.ts +2 -2
  24. package/dist-lib/components/NodeTracePanel.js +4 -4
  25. package/dist-lib/components/OpruimlijstKarrenCard.d.ts.map +1 -1
  26. package/dist-lib/components/OpruimlijstKarrenCard.js +80 -17
  27. package/dist-lib/components/OrderJourneyBar.d.ts +1 -1
  28. package/dist-lib/components/OrderJourneyBar.js +2 -2
  29. package/dist-lib/components/OrderLogboek.d.ts +1 -1
  30. package/dist-lib/components/OrderLogboek.js +1 -1
  31. package/dist-lib/components/OrderStopBanner.d.ts +1 -1
  32. package/dist-lib/components/OrderStopBanner.js +4 -4
  33. package/dist-lib/components/OrderTraceDetails.d.ts +1 -1
  34. package/dist-lib/components/OrderTraceDetails.js +2 -2
  35. package/dist-lib/components/PlanWachtrijPage.js +3 -3
  36. package/dist-lib/components/PlannerDiffCard.js +1 -1
  37. package/dist-lib/components/PrintjobsCard.js +1 -1
  38. package/dist-lib/components/RegiePage.js +11 -11
  39. package/dist-lib/components/RolPoort.d.ts +1 -1
  40. package/dist-lib/components/RolPoort.js +1 -1
  41. package/dist-lib/components/RuleEnginePage.js +11 -11
  42. package/dist-lib/components/StrategieDialog.d.ts +1 -1
  43. package/dist-lib/components/TaakGezondheidCard.js +1 -1
  44. package/dist-lib/components/VertragingMeldingenCard.js +1 -1
  45. package/dist-lib/components/VoorraadMeldingenCard.js +1 -1
  46. package/dist-lib/components/WerktijdenCard.js +1 -1
  47. package/dist-lib/components/WerkwijzeHerindelingCard.js +1 -1
  48. package/dist-lib/components/rule-engine/CollapsibleGroup.js +1 -1
  49. package/dist-lib/components/rule-engine/ConditionsEditor.d.ts +1 -1
  50. package/dist-lib/components/rule-engine/ConditionsEditor.js +1 -1
  51. package/dist-lib/components/rule-engine/ImpactPanel.d.ts +1 -1
  52. package/dist-lib/components/rule-engine/ImpactPanel.js +1 -1
  53. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts +1 -1
  54. package/dist-lib/components/rule-engine/RuleFieldInput.js +5 -5
  55. package/dist-lib/components/rule-engine/VersionsPanel.d.ts +2 -2
  56. package/dist-lib/components/rule-engine/VersionsPanel.js +1 -1
  57. package/dist-lib/hooks/useFloridayPushes.js +1 -1
  58. package/dist-lib/hooks/useLadingdragers.d.ts +1 -1
  59. package/dist-lib/hooks/useLogistiekTaken.d.ts +1 -1
  60. package/dist-lib/hooks/useLogistiekTaken.js +1 -1
  61. package/dist-lib/hooks/useOrderNodeTrace.d.ts +3 -3
  62. package/dist-lib/hooks/useOrderNodeTrace.js +3 -3
  63. package/dist-lib/hooks/useOrderVersies.d.ts +2 -2
  64. package/dist-lib/hooks/useOrderVersies.js +1 -1
  65. package/dist-lib/hooks/useRecalcJob.js +1 -1
  66. package/dist-lib/hooks/useRuleEngine.d.ts +1 -1
  67. package/dist-lib/hooks/useRuleEngine.js +1 -1
  68. package/dist-lib/hooks/useShellAdres.d.ts +1 -1
  69. package/dist-lib/hooks/useShellAdres.js +2 -2
  70. package/dist-lib/hooks/useWerkwijzeStatus.js +1 -1
  71. package/dist-lib/index.d.ts +74 -74
  72. package/dist-lib/index.js +75 -75
  73. package/dist-lib/integrations/supabase/auth-attacher.js +1 -1
  74. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1 -1
  75. package/dist-lib/integrations/supabase/client.server.d.ts +1 -1
  76. package/dist-lib/integrations/supabase/moduleClient.d.ts +1 -1
  77. package/dist-lib/integrations/supabase/types.d.ts +93 -0
  78. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  79. package/dist-lib/lib/dimensionData.server.d.ts +3 -3
  80. package/dist-lib/lib/floridayDocuments.functions.d.ts +1 -1
  81. package/dist-lib/lib/floridayDocuments.functions.js +3 -3
  82. package/dist-lib/lib/floridayPush.functions.js +1 -1
  83. package/dist-lib/lib/floridayPush.server.d.ts.map +1 -1
  84. package/dist-lib/lib/floridayPush.server.js +2 -1
  85. package/dist-lib/lib/flowGraph.d.ts +2 -2
  86. package/dist-lib/lib/flowGraph.js +2 -2
  87. package/dist-lib/lib/flowJourney.d.ts +2 -2
  88. package/dist-lib/lib/flowJourney.js +1 -1
  89. package/dist-lib/lib/flowRoute.d.ts +4 -4
  90. package/dist-lib/lib/flowRoute.js +4 -4
  91. package/dist-lib/lib/flowTree.d.ts +1 -1
  92. package/dist-lib/lib/flowTree.js +2 -2
  93. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +4 -4
  94. package/dist-lib/lib/loadCarrierPlanning.functions.js +7 -7
  95. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +3 -3
  96. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  97. package/dist-lib/lib/loadCarrierPlanning.server.js +12 -6
  98. package/dist-lib/lib/loadCarrierTaskSync.server.d.ts +1 -1
  99. package/dist-lib/lib/loadCarrierTypes.d.ts +1 -1
  100. package/dist-lib/lib/logisticsPlanner.d.ts +2 -2
  101. package/dist-lib/lib/logisticsPlanner.js +2 -2
  102. package/dist-lib/lib/logisticsRecalcJob.functions.js +2 -2
  103. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  104. package/dist-lib/lib/modulePrompts.js +136 -1
  105. package/dist-lib/lib/moduleVersion.d.ts +1 -1
  106. package/dist-lib/lib/moduleVersion.js +1 -1
  107. package/dist-lib/lib/nodeTrace.d.ts +1 -1
  108. package/dist-lib/lib/nodeTrace.js +1 -1
  109. package/dist-lib/lib/plannerDiff.functions.js +1 -1
  110. package/dist-lib/lib/ruleEngineImpact.d.ts +1 -1
  111. package/dist-lib/lib/ruleEngineImpact.js +1 -1
  112. package/dist-lib/lib/ruleEngineWizard.d.ts +1 -1
  113. package/dist-lib/lib/ruleEngineWizard.js +1 -1
  114. package/dist-lib/lib/stopReden.d.ts +3 -3
  115. package/dist-lib/lib/stopReden.js +3 -3
  116. package/dist-lib/lib/vakUitleg.d.ts +1 -1
  117. package/dist-lib/lib/vakUitleg.js +3 -3
  118. package/package.json +2 -2
@@ -6,7 +6,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  // wanneer iets te lang wacht. Alleen lezen, behalve de knoppen.
7
7
  // ============================================================================
8
8
  import { AlertTriangle, CheckCircle2, RefreshCw } from "lucide-react";
9
- import { useAfrondWachtrij } from "../hooks/useAfrondWachtrij";
9
+ import { useAfrondWachtrij } from "../hooks/useAfrondWachtrij.js";
10
10
  function duur(seconden) {
11
11
  if (seconden < 60)
12
12
  return `${seconden} sec`;
@@ -10,11 +10,11 @@ import { useState } from "react";
10
10
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, } from "@flowselections/core";
11
11
  import { RotateCcw } from "lucide-react";
12
12
  import { supabase } from "../integrations/supabase/moduleClient.js";
13
- import { RolPoort } from "./RolPoort";
14
- import { OudeOrderregelsCard } from "./OudeOrderregelsCard";
15
- import { AutomatischVersturenCard } from "./AutomatischVersturenCard";
16
- import { OpruimlijstKarrenCard } from "./OpruimlijstKarrenCard";
17
- import { ENGINE_TOEGANG } from "../hooks/useEngineRollen";
13
+ import { RolPoort } from "./RolPoort.js";
14
+ import { OudeOrderregelsCard } from "./OudeOrderregelsCard.js";
15
+ import { AutomatischVersturenCard } from "./AutomatischVersturenCard.js";
16
+ import { OpruimlijstKarrenCard } from "./OpruimlijstKarrenCard.js";
17
+ import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
18
18
  function HerindelenBeheer() {
19
19
  const [datum, setDatum] = useState("");
20
20
  const [ookBevroren, setOokBevroren] = useState(false);
@@ -9,9 +9,9 @@ import { useState } from "react";
9
9
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, supabase, toast, } from "@flowselections/core";
10
10
  import { useServerFn } from "@tanstack/react-start";
11
11
  import { Boxes, Search } from "lucide-react";
12
- import { previewLoadCarrierPlan, replanOrderLoadCarriers } from "../lib/loadCarrierPlanning.functions";
13
- import { carrierLabel } from "../lib/loadCarrierTypes";
14
- import { layerUtilizationPct } from "../lib/layerUtilization";
12
+ import { previewLoadCarrierPlan, replanOrderLoadCarriers } from "../lib/loadCarrierPlanning.functions.js";
13
+ import { carrierLabel } from "../lib/loadCarrierTypes.js";
14
+ import { layerUtilizationPct } from "../lib/layerUtilization.js";
15
15
  const db = () => supabase;
16
16
  export function BeladingIndelingCard() {
17
17
  const preview = useServerFn(previewLoadCarrierPlan);
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  // ============================================================================
11
11
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
12
12
  import { Boxes, Check, RefreshCw } from "lucide-react";
13
- import { useBeladingsafwijkingen, } from "../hooks/useBeladingsafwijkingen";
13
+ import { useBeladingsafwijkingen, } from "../hooks/useBeladingsafwijkingen.js";
14
14
  function beladingTekst(b) {
15
15
  const deel = [
16
16
  b.piecesPerPackage == null ? "?" : String(b.piecesPerPackage),
@@ -1,4 +1,4 @@
1
- import type { BulkIndelingTotaal, LogistiekTaak } from "../hooks/useLogistiekTaken";
1
+ import type { BulkIndelingTotaal, LogistiekTaak } from "../hooks/useLogistiekTaken.js";
2
2
  interface Props {
3
3
  taken: LogistiekTaak[];
4
4
  strategyId?: string | null;
@@ -8,7 +8,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  import { useMemo, useState } from "react";
9
9
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@flowselections/core";
10
10
  import { Boxes, Layers, RefreshCw, Wand2, Zap } from "lucide-react";
11
- import { bufferCriterionLabel, bufferReasonLabel } from "../lib/bufferMatching";
11
+ import { bufferCriterionLabel, bufferReasonLabel } from "../lib/bufferMatching.js";
12
12
  export function BufferDebugCard({ taken, strategyId, simuleerBuffers, herindelenBuffers, herindelenOrders, deelAllesIn, }) {
13
13
  const [voortgang, setVoortgang] = useState(null);
14
14
  const [indelingTotaal, setIndelingTotaal] = useState(null);
@@ -4,7 +4,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  // ============================================================================
5
5
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
6
6
  import { AlertTriangle, CheckCircle2, RefreshCw } from "lucide-react";
7
- import { useCapaciteitMeldingen } from "../hooks/useCapaciteitMeldingen";
7
+ import { useCapaciteitMeldingen } from "../hooks/useCapaciteitMeldingen.js";
8
8
  function datum(value) {
9
9
  if (!value)
10
10
  return "onbekend";
@@ -7,7 +7,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
7
7
  // ============================================================================
8
8
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
9
9
  import { RefreshCw, ShieldCheck, ShieldOff } from "lucide-react";
10
- import { useFloridayGate } from "../hooks/useFloridayGate";
10
+ import { useFloridayGate } from "../hooks/useFloridayGate.js";
11
11
  function tijd(value) {
12
12
  if (!value)
13
13
  return "-";
@@ -4,7 +4,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  // ============================================================================
5
5
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
6
6
  import { CheckCircle2, RefreshCw, Send } from "lucide-react";
7
- import { PUSH_STATUS_LABELS, isEindstatus, useFloridayPushes } from "../hooks/useFloridayPushes";
7
+ import { PUSH_STATUS_LABELS, isEindstatus, useFloridayPushes } from "../hooks/useFloridayPushes.js";
8
8
  function tijd(value) {
9
9
  if (!value)
10
10
  return "-";
@@ -1,9 +1,9 @@
1
1
  import "@xyflow/react/dist/style.css";
2
- import { type FlowTree } from "../lib/flowTree";
3
- import type { RouteMarker } from "../lib/flowRoute";
4
- import type { StopReden } from "../lib/stopReden";
5
- import type { NodeTraceGroep } from "../lib/nodeTrace";
6
- import type { RuleEngineSettings } from "../lib/ruleEngineSchema";
2
+ import { type FlowTree } from "../lib/flowTree.js";
3
+ import type { RouteMarker } from "../lib/flowRoute.js";
4
+ import type { StopReden } from "../lib/stopReden.js";
5
+ import type { NodeTraceGroep } from "../lib/nodeTrace.js";
6
+ import type { RuleEngineSettings } from "../lib/ruleEngineSchema.js";
7
7
  export type { RouteMarker };
8
8
  interface Props {
9
9
  tree: FlowTree;
@@ -13,10 +13,10 @@ import dagre from "@dagrejs/dagre";
13
13
  import { Button } from "@flowselections/core";
14
14
  import { AlertTriangle, ArrowDownUp, ArrowLeftRight, CheckCircle2, ChevronDown, ChevronRight, ChevronUp, Clock, Maximize2, Minimize2, Expand, ListChecks, Pencil, Settings2, Minus, Plus, X, } from "lucide-react";
15
15
  import "@xyflow/react/dist/style.css";
16
- import { fieldsFor } from "../lib/flowTree";
17
- import { RuleFieldInput } from "./rule-engine/RuleFieldInput";
18
- import { NodeTracePanel } from "./NodeTracePanel";
19
- import { duur as duurTekst, klok } from "./OrderTraceDetails";
16
+ import { fieldsFor } from "../lib/flowTree.js";
17
+ import { RuleFieldInput } from "./rule-engine/RuleFieldInput.js";
18
+ import { NodeTracePanel } from "./NodeTracePanel.js";
19
+ import { duur as duurTekst, klok } from "./OrderTraceDetails.js";
20
20
  // ── Toestand → uiterlijk ────────────────────────────────────────────────────
21
21
  /** Extra opmaak voor vakjes op (of juist buiten) de gelopen orderroute. */
22
22
  function routeClass(node) {
@@ -1,4 +1,4 @@
1
- import { type OrderRoute, type OrderVersie } from "../lib/flowRoute";
1
+ import { type OrderRoute, type OrderVersie } from "../lib/flowRoute.js";
2
2
  interface Props {
3
3
  /** Wordt aangeroepen zodra een versie gekozen/losgelaten wordt. */
4
4
  onRoute: (route: OrderRoute | null, label: string | null, orderRef: string | null, versie: OrderVersie | null) => void;
@@ -12,9 +12,9 @@ import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitl
12
12
  import { AlertTriangle, CheckCircle2, ChevronDown, ChevronRight, Clock, RefreshCw, RotateCcw, Search, X } from "lucide-react";
13
13
  import { toast } from "sonner";
14
14
  import { supabase } from "../integrations/supabase/moduleClient.js";
15
- import { useAlleOrders, useOrderVersies, useVersieEvents } from "../hooks/useOrderVersies";
16
- import { bepaalRoute, redenTekst } from "../lib/flowRoute";
17
- import { Gebeurtenis } from "./OrderLogboek";
15
+ import { useAlleOrders, useOrderVersies, useVersieEvents } from "../hooks/useOrderVersies.js";
16
+ import { bepaalRoute, redenTekst } from "../lib/flowRoute.js";
17
+ import { Gebeurtenis } from "./OrderLogboek.js";
18
18
  function tijd(v) {
19
19
  if (!v)
20
20
  return "—";
@@ -10,27 +10,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
11
11
  import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toast, } from "@flowselections/core";
12
12
  import { CheckCircle2, RefreshCw, Save, X } from "lucide-react";
13
- import { fieldVisible, } from "../lib/ruleEngineSchema";
14
- import { WIZARD_STEPS, groupSummary, isAdvancedField } from "../lib/ruleEngineWizard";
15
- import { buildFlowTree, pasMergeOverridesToe, verbergEindnodeLijnen, verduidelijkVerzendbrief, mergeVoorwaarde, MERGE_MAX_WACHT_MINUTEN, } from "../lib/flowTree";
16
- import { applyRoute } from "../lib/flowRoute";
17
- import { ontbrekendeJourneyEvents } from "../lib/flowJourney";
18
- import { FlowCanvas } from "./FlowCanvas";
19
- import { FlowOrders } from "./FlowOrders";
20
- import { OrderJourneyBar } from "./OrderJourneyBar";
21
- import { OrderStopBanner } from "./OrderStopBanner";
22
- import { useOrderNodeTrace } from "../hooks/useOrderNodeTrace";
23
- import { useShippingNoteDiagnose } from "../hooks/useShippingNoteDiagnose";
24
- import { stopReden, verzendbriefStop } from "../lib/stopReden";
25
- import { useOrderTraceStand } from "../hooks/useOrderTrace";
26
- import { useRuleEngine } from "../hooks/useRuleEngine";
27
- import { useLogistiekStrategieen } from "../hooks/useLogistiekStrategieen";
28
- import { useRecalcJob, phaseLabel } from "../hooks/useRecalcJob";
29
- import { RuleFieldInput } from "./rule-engine/RuleFieldInput";
30
- import { CollapsibleGroup } from "./rule-engine/CollapsibleGroup";
31
- import { ConditionsEditor } from "./rule-engine/ConditionsEditor";
32
- import { RolPoort } from "./RolPoort";
33
- import { ENGINE_TOEGANG } from "../hooks/useEngineRollen";
13
+ import { fieldVisible, } from "../lib/ruleEngineSchema.js";
14
+ import { WIZARD_STEPS, groupSummary, isAdvancedField } from "../lib/ruleEngineWizard.js";
15
+ import { buildFlowTree, pasMergeOverridesToe, verbergEindnodeLijnen, verduidelijkVerzendbrief, mergeVoorwaarde, MERGE_MAX_WACHT_MINUTEN, } from "../lib/flowTree.js";
16
+ import { applyRoute } from "../lib/flowRoute.js";
17
+ import { ontbrekendeJourneyEvents } from "../lib/flowJourney.js";
18
+ import { FlowCanvas } from "./FlowCanvas.js";
19
+ import { FlowOrders } from "./FlowOrders.js";
20
+ import { OrderJourneyBar } from "./OrderJourneyBar.js";
21
+ import { OrderStopBanner } from "./OrderStopBanner.js";
22
+ import { useOrderNodeTrace } from "../hooks/useOrderNodeTrace.js";
23
+ import { useShippingNoteDiagnose } from "../hooks/useShippingNoteDiagnose.js";
24
+ import { stopReden, verzendbriefStop } from "../lib/stopReden.js";
25
+ import { useOrderTraceStand } from "../hooks/useOrderTrace.js";
26
+ import { useRuleEngine } from "../hooks/useRuleEngine.js";
27
+ import { useLogistiekStrategieen } from "../hooks/useLogistiekStrategieen.js";
28
+ import { useRecalcJob, phaseLabel } from "../hooks/useRecalcJob.js";
29
+ import { RuleFieldInput } from "./rule-engine/RuleFieldInput.js";
30
+ import { CollapsibleGroup } from "./rule-engine/CollapsibleGroup.js";
31
+ import { ConditionsEditor } from "./rule-engine/ConditionsEditor.js";
32
+ import { RolPoort } from "./RolPoort.js";
33
+ import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
34
34
  const WIDE_TYPES = ["priority", "toggle", "days", "radio", "textarea", "guidance"];
35
35
  function fieldClass(field) {
36
36
  return WIDE_TYPES.includes(field.type) ? "md:col-span-2" : "";
@@ -8,7 +8,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  import { useState } from "react";
9
9
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
10
10
  import { Archive, RefreshCw, RotateCcw } from "lucide-react";
11
- import { redenLabel, useGearchiveerdeOrders } from "../hooks/useGeblokkeerdeOrders";
11
+ import { redenLabel, useGearchiveerdeOrders } from "../hooks/useGeblokkeerdeOrders.js";
12
12
  function datum(waarde) {
13
13
  if (!waarde)
14
14
  return "—";
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  import { useMemo, useState } from "react";
11
11
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
12
12
  import { AlertTriangle, RefreshCw, RotateCcw } from "lucide-react";
13
- import { useGeblokkeerdeOrders, redenLabel } from "../hooks/useGeblokkeerdeOrders";
13
+ import { useGeblokkeerdeOrders, redenLabel } from "../hooks/useGeblokkeerdeOrders.js";
14
14
  function datum(waarde) {
15
15
  if (!waarde)
16
16
  return "—";
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useQuery } from "@tanstack/react-query";
3
3
  import { useServerFn } from "@tanstack/react-start";
4
4
  import { Badge, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@flowselections/core";
5
- import { getCartCoverage } from "../lib/cartCoverage.functions";
5
+ import { getCartCoverage } from "../lib/cartCoverage.functions.js";
6
6
  const LABEL = {
7
7
  gelijk: "Gelijk",
8
8
  gelijk_afgerond: "Gelijk (afgerond op fust)",
@@ -10,8 +10,8 @@ import { useState } from "react";
10
10
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, Switch, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@flowselections/core";
11
11
  import { Container, Pencil, Plus, RefreshCw, Trash2 } from "lucide-react";
12
12
  import { Link } from "@tanstack/react-router";
13
- import { useLadingdragers } from "../hooks/useLadingdragers";
14
- import { CAPACITY_MODEL_LABELS } from "../lib/loadCarrierTypes";
13
+ import { useLadingdragers } from "../hooks/useLadingdragers.js";
14
+ import { CAPACITY_MODEL_LABELS } from "../lib/loadCarrierTypes.js";
15
15
  const LEEG = {
16
16
  code: "",
17
17
  name: "",
@@ -9,11 +9,11 @@ import { useState } from "react";
9
9
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Badge, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Skeleton, } from "@flowselections/core";
10
10
  import { Container, GitBranch, ListChecks, Pencil, Plus, Puzzle, ShieldCheck, SlidersHorizontal, Trash2, Workflow } from "lucide-react";
11
11
  import { Link } from "@tanstack/react-router";
12
- import { StrategieDialog } from "./StrategieDialog";
13
- import { WerkwijzeHerindelingCard } from "./WerkwijzeHerindelingCard";
14
- import { WerktijdenCard } from "./WerktijdenCard";
15
- import { ENGINE_TOEGANG, heeftToegang, useEngineRollen } from "../hooks/useEngineRollen";
16
- import { useLogistiekStrategieen, } from "../hooks/useLogistiekStrategieen";
12
+ import { StrategieDialog } from "./StrategieDialog.js";
13
+ import { WerkwijzeHerindelingCard } from "./WerkwijzeHerindelingCard.js";
14
+ import { WerktijdenCard } from "./WerktijdenCard.js";
15
+ import { ENGINE_TOEGANG, heeftToegang, useEngineRollen } from "../hooks/useEngineRollen.js";
16
+ import { useLogistiekStrategieen, } from "../hooks/useLogistiekStrategieen.js";
17
17
  const SNELKOPPELINGEN = [
18
18
  {
19
19
  to: "/logistiek-engine/rule-engine",
@@ -5,9 +5,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  // Gebruikt hetzelfde orderlogboek als het overzicht, zodat er één weergave is.
6
6
  // GEEN <Header /> hier — die levert de shell.
7
7
  // ============================================================================
8
- import { OrderLogboek } from "./OrderLogboek";
9
- import { AfrondWachtrijCard } from "./AfrondWachtrijCard";
10
- import { TaakGezondheidCard } from "./TaakGezondheidCard";
8
+ import { OrderLogboek } from "./OrderLogboek.js";
9
+ import { AfrondWachtrijCard } from "./AfrondWachtrijCard.js";
10
+ import { TaakGezondheidCard } from "./TaakGezondheidCard.js";
11
11
  export function LogistiekEngineQueuePage() {
12
12
  return (_jsxs("div", { className: "space-y-4 p-4", children: [_jsx(AfrondWachtrijCard, {}), _jsx(TaakGezondheidCard, {}), _jsx(OrderLogboek, { titel: "Queue \u2014 volledige orderflow", omschrijving: "Per order precies wat de Logistiek Engine heeft gedaan, waarom, en wat er is gewijzigd. Alleen echt vastgelegde stappen; er wordt niets aangevuld." })] }));
13
13
  }
@@ -6,9 +6,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
6
6
  // laatste rondes echt door de Engine zijn ontvangen. Alleen lezen.
7
7
  // ============================================================================
8
8
  import { AlertTriangle, CheckCircle2, Info, RefreshCw } from "lucide-react";
9
- import { useMinuutronde } from "../hooks/useMinuutronde";
10
- import { useShellAdres } from "../hooks/useShellAdres";
11
- import { SHELL_ADRES_TEKST } from "../lib/shellAdres";
9
+ import { useMinuutronde } from "../hooks/useMinuutronde.js";
10
+ import { useShellAdres } from "../hooks/useShellAdres.js";
11
+ import { SHELL_ADRES_TEKST } from "../lib/shellAdres.js";
12
12
  function tijd(t) {
13
13
  if (!t)
14
14
  return "nooit";
@@ -9,9 +9,9 @@ import { useState } from "react";
9
9
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, toast, } from "@flowselections/core";
10
10
  import { Check, ChevronDown, ChevronUp, Copy, Download, Puzzle } from "lucide-react";
11
11
  import { Link } from "@tanstack/react-router";
12
- import { MODULE_PROMPTS, buildAllModulePrompts, buildRevisionPrompt, modulePromptFilename, } from "../lib/modulePrompts";
13
- import { RolPoort } from "./RolPoort";
14
- import { ENGINE_TOEGANG } from "../hooks/useEngineRollen";
12
+ import { MODULE_PROMPTS, buildAllModulePrompts, buildRevisionPrompt, modulePromptFilename, } from "../lib/modulePrompts.js";
13
+ import { RolPoort } from "./RolPoort.js";
14
+ import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
15
15
  function downloadMarkdown(filename, content) {
16
16
  const blob = new Blob([content], { type: "text/markdown;charset=utf-8" });
17
17
  const url = URL.createObjectURL(blob);
@@ -1,5 +1,5 @@
1
- import { type NodeTraceGroep } from "../lib/nodeTrace";
2
- import type { StopReden } from "../lib/stopReden";
1
+ import { type NodeTraceGroep } from "../lib/nodeTrace.js";
2
+ import type { StopReden } from "../lib/stopReden.js";
3
3
  interface Props {
4
4
  groep: NodeTraceGroep;
5
5
  /** Gevuld als de reis van de order bij dit vakje ophoudt. */
@@ -10,10 +10,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  import { useMemo, useState } from "react";
11
11
  import { Badge, Button } from "@flowselections/core";
12
12
  import { ChevronDown, ChevronRight, X } from "lucide-react";
13
- import { flowNodeLabel } from "../lib/flowNodes";
14
- import { bundelGebeurtenissen, samenvatVak, } from "../lib/nodeTrace";
15
- import { vakUitleg } from "../lib/vakUitleg";
16
- import { FOUTSOORT_LABEL, FOUTSOORT_UITLEG, STATUS_KLEUR, Stap, Veld, duur, tijd, } from "./OrderTraceDetails";
13
+ import { flowNodeLabel } from "../lib/flowNodes.js";
14
+ import { bundelGebeurtenissen, samenvatVak, } from "../lib/nodeTrace.js";
15
+ import { vakUitleg } from "../lib/vakUitleg.js";
16
+ import { FOUTSOORT_LABEL, FOUTSOORT_UITLEG, STATUS_KLEUR, Stap, Veld, duur, tijd, } from "./OrderTraceDetails.js";
17
17
  const EERSTE_AANTAL = 20;
18
18
  function Bundel({ item, debug }) {
19
19
  const [open, setOpen] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"OpruimlijstKarrenCard.d.ts","sourceRoot":"","sources":["../../src/components/OpruimlijstKarrenCard.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,qBAAqB,gCAkFpC"}
1
+ {"version":3,"file":"OpruimlijstKarrenCard.d.ts","sourceRoot":"","sources":["../../src/components/OpruimlijstKarrenCard.tsx"],"names":[],"mappings":"AAwCA,wBAAgB,qBAAqB,gCAqLpC"}
@@ -1,42 +1,105 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Alleen-lezen opruimlijst van losse karren. Niets verwijderen.
2
+ // Opruimlijst losse karren: Voorstel / Twijfel / Nooit, archiveren met exacte
3
+ // aantalcontrole en terugzetten met controle. Nooit verwijderen.
3
4
  import { useState } from "react";
4
- import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle } from "@flowselections/core";
5
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, } from "@flowselections/core";
5
6
  import { supabase } from "../integrations/supabase/moduleClient.js";
6
- const GROEPEN = [
7
- { key: "buffer_bestaat", titel: "Buffer bestaat nog" },
8
- { key: "buffer_weg", titel: "Buffer weg / geen koppeling" },
9
- { key: "order_verwijderd", titel: "Order verwijderd" },
7
+ const DELEN = [
8
+ { key: "voorstel", titel: "Voorstel archiveren" },
9
+ { key: "twijfel", titel: "Twijfel (niet automatisch)" },
10
+ { key: "nooit", titel: "Nooit archiveren" },
10
11
  ];
11
12
  export function OpruimlijstKarrenCard() {
12
13
  const [karren, setKarren] = useState(null);
13
- const [tellers, setTellers] = useState({});
14
+ const [gearchiveerd, setGearchiveerd] = useState(0);
14
15
  const [bezig, setBezig] = useState(false);
15
- const [fout, setFout] = useState(null);
16
+ const [melding, setMelding] = useState(null);
16
17
  const [open, setOpen] = useState(null);
18
+ const [bevestig, setBevestig] = useState(false);
19
+ const [reden, setReden] = useState("");
20
+ const [terugIds, setTerugIds] = useState("");
17
21
  const laad = async () => {
18
22
  setBezig(true);
19
- setFout(null);
23
+ setMelding(null);
20
24
  try {
21
- const { data, error } = await supabase.rpc("logistics_orphan_carts_list");
25
+ const { data, error } = await supabase.rpc("logistics_cart_archive_preview");
22
26
  if (error)
23
27
  throw error;
24
28
  const d = (data ?? {});
25
29
  setKarren(Array.isArray(d["karren"]) ? d["karren"] : []);
26
- setTellers((d["tellers"] ?? {}));
30
+ setGearchiveerd(Number(d["gearchiveerd"] ?? 0));
27
31
  }
28
32
  catch (e) {
29
- setFout(e?.message ? String(e.message) : "De opruimlijst kon niet worden opgehaald.");
33
+ setMelding(e?.message ? String(e.message) : "De lijst kon niet worden opgehaald.");
30
34
  }
31
35
  finally {
32
36
  setBezig(false);
33
37
  }
34
38
  };
35
39
  const lijst = Array.isArray(karren) ? karren : [];
36
- return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Opruimlijst losse karren" }), _jsx(CardDescription, { children: "Alleen bekijken. Er wordt niets verwijderd." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx(Button, { onClick: () => void laad(), disabled: bezig, children: karren ? "Verversen" : "Lijst ophalen" }), fout ? _jsx("p", { className: "text-sm text-destructive", children: fout }) : null, karren
37
- ? GROEPEN.map((g) => {
38
- const rijen = lijst.filter((k) => k.groep === g.key);
39
- return (_jsxs("div", { className: "rounded border border-border", children: [_jsxs("button", { type: "button", className: "flex w-full justify-between p-3 text-left text-sm font-medium", onClick: () => setOpen(open === g.key ? null : g.key), children: [_jsx("span", { children: g.titel }), _jsxs("span", { children: [Number(tellers[g.key] ?? rijen.length), " karren"] })] }), open === g.key ? (_jsx("div", { className: "max-h-96 overflow-auto border-t border-border", children: _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-left text-muted-foreground", children: [_jsx("th", { className: "p-2", children: "Karnummer" }), _jsx("th", { className: "p-2", children: "Order" }), _jsx("th", { className: "p-2", children: "Buffer" }), _jsx("th", { className: "p-2", children: "Aangemaakt" })] }) }), _jsx("tbody", { children: rijen.map((k) => (_jsxs("tr", { className: "border-t border-border", children: [_jsx("td", { className: "p-2", children: k.cartNumber ?? "—" }), _jsx("td", { className: "p-2", children: k.orderNumber ?? "—" }), _jsx("td", { className: "p-2 font-mono", children: k.bufferId ? k.bufferId.slice(0, 8) : "—" }), _jsx("td", { className: "p-2", children: k.createdAt ? new Date(k.createdAt).toLocaleString("nl-NL") : "—" })] }, k.id))) })] }) })) : null] }, g.key));
40
+ const voorstel = lijst.filter((k) => k.deel === "voorstel");
41
+ const archiveer = async () => {
42
+ setBevestig(false);
43
+ setBezig(true);
44
+ const ids = voorstel.map((k) => k.id);
45
+ let totaal = 0;
46
+ try {
47
+ // Per deel van max. 250 met exacte aantalcontrole; elk deel is los atomair.
48
+ for (let i = 0; i < ids.length; i += 250) {
49
+ const deel = ids.slice(i, i + 250);
50
+ const { data, error } = await supabase.rpc("logistics_cart_archive", {
51
+ p_ids: deel,
52
+ p_confirm_count: deel.length,
53
+ p_reason: reden.trim(),
54
+ });
55
+ if (error)
56
+ throw error;
57
+ const n = Number(data?.gearchiveerd ?? 0);
58
+ if (n !== deel.length)
59
+ throw new Error(`Aantal klopt niet: ${n} van ${deel.length} in dit deel.`);
60
+ totaal += n;
61
+ }
62
+ if (totaal !== ids.length)
63
+ throw new Error(`Aantal klopt niet: ${totaal} van ${ids.length}.`);
64
+ setMelding(`${totaal} kar(ren) gearchiveerd (controle ${totaal} = ${ids.length}).`);
65
+ await laad();
66
+ }
67
+ catch (e) {
68
+ setMelding(`${e?.message ? String(e.message) : "Archiveren is niet gelukt."} Al gearchiveerd in eerdere delen: ${totaal}.`);
69
+ }
70
+ finally {
71
+ setBezig(false);
72
+ }
73
+ };
74
+ const zetTerug = async () => {
75
+ const ids = terugIds.split(/[\s,;]+/).map((s) => s.trim()).filter(Boolean);
76
+ if (ids.length === 0)
77
+ return;
78
+ setBezig(true);
79
+ try {
80
+ const { data, error } = await supabase.rpc("logistics_cart_unarchive", {
81
+ p_ids: ids,
82
+ p_reason: "Teruggezet via Beheer",
83
+ });
84
+ if (error)
85
+ throw error;
86
+ const res = Array.isArray(data?.resultaten) ? data.resultaten : [];
87
+ const ok = res.filter((r) => r?.teruggezet).length;
88
+ const fout = res.filter((r) => !r?.teruggezet).map((r) => `${r?.id}: ${r?.reden}`);
89
+ setMelding([`${ok} kar(ren) teruggezet.`, ...fout].join("\n"));
90
+ await laad();
91
+ }
92
+ catch (e) {
93
+ setMelding(e?.message ? String(e.message) : "Terugzetten is niet gelukt.");
94
+ }
95
+ finally {
96
+ setBezig(false);
97
+ }
98
+ };
99
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Opruimlijst losse karren" }), _jsx(CardDescription, { children: "Archiveren is omkeerbaar; er wordt nooit iets verwijderd. Gearchiveerde karren tellen nergens meer mee." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx(Button, { onClick: () => void laad(), disabled: bezig, children: karren ? "Verversen" : "Lijst ophalen" }), melding ? _jsx("p", { className: "whitespace-pre-line text-sm", children: melding }) : null, karren ? _jsxs("p", { className: "text-sm text-muted-foreground", children: ["Al gearchiveerd: ", gearchiveerd] }) : null, karren
100
+ ? DELEN.map((g) => {
101
+ const rijen = lijst.filter((k) => k.deel === g.key);
102
+ return (_jsxs("div", { className: "rounded border border-border", children: [_jsxs("button", { type: "button", className: "flex w-full justify-between p-3 text-left text-sm font-medium", onClick: () => setOpen(open === g.key ? null : g.key), children: [_jsx("span", { children: g.titel }), _jsxs("span", { children: [rijen.length, " karren"] })] }), open === g.key ? (_jsx("div", { className: "max-h-96 overflow-auto border-t border-border", children: _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-left text-muted-foreground", children: [_jsx("th", { className: "p-2", children: "Kar-id" }), _jsx("th", { className: "p-2", children: "Kar" }), _jsx("th", { className: "p-2", children: "Buffer / order" }), _jsx("th", { className: "p-2", children: "Aangemaakt" }), _jsx("th", { className: "p-2", children: "Reden" })] }) }), _jsx("tbody", { children: rijen.map((k) => (_jsxs("tr", { className: "border-t border-border", children: [_jsx("td", { className: "p-2 font-mono", children: k.id }), _jsx("td", { className: "p-2", children: k.cartNumber ? `K${k.cartNumber}` : "—" }), _jsx("td", { className: "p-2", children: k.orderNumber ?? (k.bufferId ? `buffer ${k.bufferId.slice(0, 8)}` : "geen") }), _jsx("td", { className: "p-2", children: k.createdAt ? new Date(k.createdAt).toLocaleString("nl-NL") : "—" }), _jsx("td", { className: "p-2", children: k.reden })] }, k.id))) })] }) })) : null] }, g.key));
40
103
  })
41
- : null] })] }));
104
+ : null, karren && voorstel.length > 0 ? (_jsxs("div", { className: "grid gap-2 sm:max-w-md", children: [_jsx(Label, { htmlFor: "archief-reden", children: "Reden voor archiveren" }), _jsx(Input, { id: "archief-reden", value: reden, onChange: (e) => setReden(e.target.value) }), _jsxs(Button, { disabled: bezig || reden.trim() === "", onClick: () => setBevestig(true), children: [voorstel.length, " kar(ren) archiveren"] })] })) : null, _jsxs("div", { className: "grid gap-2 sm:max-w-md", children: [_jsx(Label, { htmlFor: "terug-ids", children: "Terugzetten (kar-id's)" }), _jsx(Input, { id: "terug-ids", value: terugIds, onChange: (e) => setTerugIds(e.target.value) }), _jsx(Button, { variant: "outline", disabled: bezig || terugIds.trim() === "", onClick: () => void zetTerug(), children: "Terugzetten" })] }), _jsx(AlertDialog, { open: bevestig, onOpenChange: setBevestig, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsxs(AlertDialogTitle, { children: ["Je archiveert ", voorstel.length, " kar(ren)"] }), _jsx(AlertDialogDescription, { children: "Alleen de karren op Voorstel. De database controleert alles opnieuw; klopt het aantal niet precies, dan gebeurt er niets." })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsxs(AlertDialogAction, { onClick: () => void archiveer(), children: ["Ja, ", voorstel.length, " archiveren"] })] })] }) })] })] }));
42
105
  }
@@ -1,4 +1,4 @@
1
- import type { NodeTraceGroep } from "../lib/nodeTrace";
1
+ import type { NodeTraceGroep } from "../lib/nodeTrace.js";
2
2
  interface Props {
3
3
  reis: NodeTraceGroep[];
4
4
  actiefNodeId: string | null;
@@ -6,8 +6,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  // opent datzelfde vakje op de kaart. Alleen lezen.
7
7
  // ============================================================================
8
8
  import { AlertTriangle, CheckCircle2, ChevronRight, Clock } from "lucide-react";
9
- import { flowNodeLabel } from "../lib/flowNodes";
10
- import { duur, klok } from "./OrderTraceDetails";
9
+ import { flowNodeLabel } from "../lib/flowNodes.js";
10
+ import { duur, klok } from "./OrderTraceDetails.js";
11
11
  export function OrderJourneyBar({ reis, actiefNodeId, onKies }) {
12
12
  const veilig = Array.isArray(reis) ? reis : [];
13
13
  if (veilig.length === 0)
@@ -1,4 +1,4 @@
1
- import { type TraceEventRow } from "../hooks/useLogisticsTrace";
1
+ import { type TraceEventRow } from "../hooks/useLogisticsTrace.js";
2
2
  export declare function Gebeurtenis({ event }: {
3
3
  event: TraceEventRow;
4
4
  }): import("react").JSX.Element;
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  import { useMemo, useState } from "react";
11
11
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Skeleton, } from "@flowselections/core";
12
12
  import { AlertTriangle, ChevronDown, ChevronRight, Clock, Database, ExternalLink, FileText, RefreshCw, Search, } from "lucide-react";
13
- import { useLogisticsTrace, useLogisticsTraceTimeline, } from "../hooks/useLogisticsTrace";
13
+ import { useLogisticsTrace, useLogisticsTraceTimeline, } from "../hooks/useLogisticsTrace.js";
14
14
  const STATUS_FILTERS = [
15
15
  { waarde: "", label: "Alles" },
16
16
  { waarde: "bezig", label: "Bezig" },
@@ -1,4 +1,4 @@
1
- import { type StopReden } from "../lib/stopReden";
1
+ import { type StopReden } from "../lib/stopReden.js";
2
2
  interface Props {
3
3
  orderRef: string;
4
4
  /** De reden bij het laatste vakje van de route (uit de flowkaart). */
@@ -6,10 +6,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  // zo is, wat de bepalende gegevens zijn en wat er moet gebeuren. Alleen lezen.
7
7
  // ============================================================================
8
8
  import { AlertTriangle, CheckCircle2, Clock } from "lucide-react";
9
- import { useOrderTraceStand } from "../hooks/useOrderTrace";
10
- import { flowNodeLabel } from "../lib/flowNodes";
11
- import { stopReden } from "../lib/stopReden";
12
- import { Veld, sinds, tijd } from "./OrderTraceDetails";
9
+ import { useOrderTraceStand } from "../hooks/useOrderTrace.js";
10
+ import { flowNodeLabel } from "../lib/flowNodes.js";
11
+ import { stopReden } from "../lib/stopReden.js";
12
+ import { Veld, sinds, tijd } from "./OrderTraceDetails.js";
13
13
  const KLEUR = {
14
14
  mislukt: "border-destructive/50 bg-destructive/5",
15
15
  wachtrij: "border-amber-500/40 bg-amber-500/5",
@@ -1,4 +1,4 @@
1
- import type { TraceEventRow } from "../hooks/useLogisticsTrace";
1
+ import type { TraceEventRow } from "../hooks/useLogisticsTrace.js";
2
2
  export declare const FOUTSOORT_LABEL: Record<string, string>;
3
3
  export declare const FOUTSOORT_UITLEG: Record<string, string>;
4
4
  export declare const STATUS_KLEUR: Record<string, string>;
@@ -9,8 +9,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
9
9
  import { useState } from "react";
10
10
  import { Badge } from "@flowselections/core";
11
11
  import { AlertTriangle, ChevronDown, ChevronRight, Database, ExternalLink } from "lucide-react";
12
- import { flowNodeLabel } from "../lib/flowNodes";
13
- import { foutTekst } from "../lib/foutTekst";
12
+ import { flowNodeLabel } from "../lib/flowNodes.js";
13
+ import { foutTekst } from "../lib/foutTekst.js";
14
14
  export const FOUTSOORT_LABEL = {
15
15
  technisch: "Technische fout",
16
16
  ontbrekende_gegevens: "Ontbrekende gegevens",
@@ -10,9 +10,9 @@ import { useMemo, useState } from "react";
10
10
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@flowselections/core";
11
11
  import { AlertTriangle, RefreshCw, RotateCcw } from "lucide-react";
12
12
  import { toast } from "sonner";
13
- import { usePlanWachtrij } from "../hooks/usePlanWachtrij";
14
- import { foutTekst } from "../lib/foutTekst";
15
- import { GearchiveerdeOrdersCard } from "./GearchiveerdeOrdersCard";
13
+ import { usePlanWachtrij } from "../hooks/usePlanWachtrij.js";
14
+ import { foutTekst } from "../lib/foutTekst.js";
15
+ import { GearchiveerdeOrdersCard } from "./GearchiveerdeOrdersCard.js";
16
16
  const STAND_KLEUR = {
17
17
  wacht: "bg-amber-500/15 text-amber-700 dark:text-amber-300",
18
18
  bezig: "bg-sky-500/15 text-sky-700 dark:text-sky-300",
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useQuery } from "@tanstack/react-query";
3
3
  import { useServerFn } from "@tanstack/react-start";
4
4
  import { Badge, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@flowselections/core";
5
- import { getPlannerDiffOverview } from "../lib/plannerDiff.functions";
5
+ import { getPlannerDiffOverview } from "../lib/plannerDiff.functions.js";
6
6
  const MODUS = {
7
7
  off: "Uit (wissen en opnieuw opbouwen)",
8
8
  dry_run: "Proef (oude aanpak leidend, vergelijking ernaast)",
@@ -5,7 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  // ============================================================================
6
6
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
7
7
  import { AlertTriangle, Printer, RefreshCw } from "lucide-react";
8
- import { PRINTJOB_STATUS_LABEL, PRINTJOB_STUCK_MINUTES, formatAge, usePrintjobs, } from "../hooks/usePrintjobs";
8
+ import { PRINTJOB_STATUS_LABEL, PRINTJOB_STUCK_MINUTES, formatAge, usePrintjobs, } from "../hooks/usePrintjobs.js";
9
9
  function tijd(value) {
10
10
  try {
11
11
  return new Date(value).toLocaleString("nl-NL", { dateStyle: "short", timeStyle: "short" });