@flowselections/pick-schermen-kwekers 1.0.80 → 1.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist-lib/components/PickstationsPage.d.ts.map +1 -1
  2. package/dist-lib/components/PickstationsPage.js +147 -18
  3. package/dist-lib/components/fs-ui/DataTable.d.ts +22 -0
  4. package/dist-lib/components/fs-ui/DataTable.d.ts.map +1 -0
  5. package/dist-lib/components/fs-ui/DataTable.js +13 -0
  6. package/dist-lib/components/fs-ui/EmptyState.d.ts +9 -0
  7. package/dist-lib/components/fs-ui/EmptyState.d.ts.map +1 -0
  8. package/dist-lib/components/fs-ui/EmptyState.js +5 -0
  9. package/dist-lib/components/fs-ui/FilterChips.d.ts +15 -0
  10. package/dist-lib/components/fs-ui/FilterChips.d.ts.map +1 -0
  11. package/dist-lib/components/fs-ui/FilterChips.js +10 -0
  12. package/dist-lib/components/fs-ui/FiltersSheet.d.ts +16 -0
  13. package/dist-lib/components/fs-ui/FiltersSheet.d.ts.map +1 -0
  14. package/dist-lib/components/fs-ui/FiltersSheet.js +9 -0
  15. package/dist-lib/components/fs-ui/HoverTip.d.ts +11 -0
  16. package/dist-lib/components/fs-ui/HoverTip.d.ts.map +1 -0
  17. package/dist-lib/components/fs-ui/HoverTip.js +19 -0
  18. package/dist-lib/components/fs-ui/KpiTile.d.ts +2 -0
  19. package/dist-lib/components/fs-ui/KpiTile.d.ts.map +1 -0
  20. package/dist-lib/components/fs-ui/KpiTile.js +1 -0
  21. package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts +8 -0
  22. package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts.map +1 -0
  23. package/dist-lib/components/fs-ui/MobilePrimaryAction.js +6 -0
  24. package/dist-lib/components/fs-ui/NoticeBar.d.ts +6 -0
  25. package/dist-lib/components/fs-ui/NoticeBar.d.ts.map +1 -0
  26. package/dist-lib/components/fs-ui/NoticeBar.js +12 -0
  27. package/dist-lib/components/fs-ui/PageHeader.d.ts +12 -0
  28. package/dist-lib/components/fs-ui/PageHeader.d.ts.map +1 -0
  29. package/dist-lib/components/fs-ui/PageHeader.js +9 -0
  30. package/dist-lib/components/fs-ui/Pagination.d.ts +8 -0
  31. package/dist-lib/components/fs-ui/Pagination.d.ts.map +1 -0
  32. package/dist-lib/components/fs-ui/Pagination.js +7 -0
  33. package/dist-lib/components/fs-ui/PillTabs.d.ts +17 -0
  34. package/dist-lib/components/fs-ui/PillTabs.d.ts.map +1 -0
  35. package/dist-lib/components/fs-ui/PillTabs.js +23 -0
  36. package/dist-lib/components/fs-ui/RowMenu.d.ts +12 -0
  37. package/dist-lib/components/fs-ui/RowMenu.d.ts.map +1 -0
  38. package/dist-lib/components/fs-ui/RowMenu.js +7 -0
  39. package/dist-lib/components/fs-ui/SearchInput.d.ts +7 -0
  40. package/dist-lib/components/fs-ui/SearchInput.d.ts.map +1 -0
  41. package/dist-lib/components/fs-ui/SearchInput.js +12 -0
  42. package/dist-lib/components/fs-ui/ShortcutHelp.d.ts +8 -0
  43. package/dist-lib/components/fs-ui/ShortcutHelp.d.ts.map +1 -0
  44. package/dist-lib/components/fs-ui/ShortcutHelp.js +13 -0
  45. package/dist-lib/components/fs-ui/StatusIcon.d.ts +8 -0
  46. package/dist-lib/components/fs-ui/StatusIcon.d.ts.map +1 -0
  47. package/dist-lib/components/fs-ui/StatusIcon.js +10 -0
  48. package/dist-lib/components/fs-ui/TableSkeleton.d.ts +6 -0
  49. package/dist-lib/components/fs-ui/TableSkeleton.d.ts.map +1 -0
  50. package/dist-lib/components/fs-ui/TableSkeleton.js +6 -0
  51. package/dist-lib/components/fs-ui/Toolbar.d.ts +10 -0
  52. package/dist-lib/components/fs-ui/Toolbar.d.ts.map +1 -0
  53. package/dist-lib/components/fs-ui/Toolbar.js +7 -0
  54. package/dist-lib/components/fs-ui/UpdatedAt.d.ts +7 -0
  55. package/dist-lib/components/fs-ui/UpdatedAt.d.ts.map +1 -0
  56. package/dist-lib/components/fs-ui/UpdatedAt.js +13 -0
  57. package/dist-lib/components/pick/DocumentChoiceMelding.d.ts +1 -1
  58. package/dist-lib/components/pick/DocumentChoiceMelding.d.ts.map +1 -1
  59. package/dist-lib/components/pick/PickScherm.js +9 -6
  60. package/dist-lib/components/pick/QueueTable.js +1 -1
  61. package/dist-lib/components/pick/ReferentiedataBanner.d.ts +2 -2
  62. package/dist-lib/components/pick/ReferentiedataBanner.d.ts.map +1 -1
  63. package/dist-lib/components/pick/ReferentiedataBanner.js +3 -4
  64. package/dist-lib/components/settings/ReferentiedataPickdocumentenCard.d.ts.map +1 -1
  65. package/dist-lib/components/settings/ReferentiedataPickdocumentenCard.js +10 -3
  66. package/dist-lib/hooks/useCartStickerStates.d.ts +1 -1
  67. package/dist-lib/hooks/useCartStickerStates.d.ts.map +1 -1
  68. package/dist-lib/hooks/usePickConfig.d.ts +11 -11
  69. package/dist-lib/hooks/usePickConfig.d.ts.map +1 -1
  70. package/dist-lib/hooks/usePickPrintStatus.d.ts +2 -2
  71. package/dist-lib/hooks/usePickQueue.d.ts +3 -3
  72. package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
  73. package/dist-lib/hooks/usePickReferenceData.d.ts +1 -1
  74. package/dist-lib/hooks/usePickReferenceData.d.ts.map +1 -1
  75. package/dist-lib/integrations/supabase/client.js +1 -1
  76. package/dist-lib/integrations/supabase/client.server.js +1 -1
  77. package/dist-lib/integrations/supabase/types.d.ts +909 -1
  78. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  79. package/dist-lib/lib/__tests__/labels.test.d.ts +2 -0
  80. package/dist-lib/lib/__tests__/labels.test.d.ts.map +1 -0
  81. package/dist-lib/lib/__tests__/labels.test.js +24 -0
  82. package/dist-lib/lib/labels.d.ts +9 -0
  83. package/dist-lib/lib/labels.d.ts.map +1 -0
  84. package/dist-lib/lib/labels.js +65 -0
  85. package/dist-lib/lib/layoutApi.d.ts +23 -0
  86. package/dist-lib/lib/layoutApi.d.ts.map +1 -0
  87. package/dist-lib/lib/layoutApi.js +94 -0
  88. package/dist-lib/lib/layoutMaker/documentProfiles.d.ts +50 -0
  89. package/dist-lib/lib/layoutMaker/documentProfiles.d.ts.map +1 -0
  90. package/dist-lib/lib/layoutMaker/documentProfiles.js +458 -0
  91. package/dist-lib/lib/layoutMaker/documentTypes.d.ts +123 -0
  92. package/dist-lib/lib/layoutMaker/documentTypes.d.ts.map +1 -0
  93. package/dist-lib/lib/layoutMaker/documentTypes.js +74 -0
  94. package/dist-lib/lib/layoutMaker/logoLibrary.d.ts +13 -0
  95. package/dist-lib/lib/layoutMaker/logoLibrary.d.ts.map +1 -0
  96. package/dist-lib/lib/layoutMaker/logoLibrary.js +54 -0
  97. package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts +196 -0
  98. package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts.map +1 -0
  99. package/dist-lib/lib/layoutMaker/pakbonBuilder.js +813 -0
  100. package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts +48 -0
  101. package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts.map +1 -0
  102. package/dist-lib/lib/layoutMaker/pakbonHtml.js +703 -0
  103. package/dist-lib/lib/layoutRenderer.d.ts +7 -0
  104. package/dist-lib/lib/layoutRenderer.d.ts.map +1 -0
  105. package/dist-lib/lib/layoutRenderer.js +233 -0
  106. package/dist-lib/lib/layoutTypes.d.ts +84 -0
  107. package/dist-lib/lib/layoutTypes.d.ts.map +1 -0
  108. package/dist-lib/lib/layoutTypes.js +25 -0
  109. package/dist-lib/lib/orderContext.d.ts +50 -0
  110. package/dist-lib/lib/orderContext.d.ts.map +1 -0
  111. package/dist-lib/lib/orderContext.js +162 -0
  112. package/dist-lib/lib/pakbonOrderInput.d.ts +8 -0
  113. package/dist-lib/lib/pakbonOrderInput.d.ts.map +1 -0
  114. package/dist-lib/lib/pakbonOrderInput.js +150 -0
  115. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MoreVertical } from "lucide-react";
3
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "@flowselections/core";
4
+ /** Rijmenu exact als Verkooporders (drie puntjes, 32 px). */
5
+ export function RowMenu({ label, items }) {
6
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { "aria-label": label, onClick: (e) => e.stopPropagation(), className: "inline-flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring sm:h-8 sm:w-8", children: _jsx(MoreVertical, { className: "h-4 w-4" }) }), _jsx(DropdownMenuContent, { align: "end", onClick: (e) => e.stopPropagation(), children: items.map((it) => (_jsxs("span", { children: [it.separatorBefore && _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuItem, { className: it.destructive ? "text-destructive focus:text-destructive" : undefined, onClick: it.onSelect, children: it.label })] }, it.label))) })] }));
7
+ }
@@ -0,0 +1,7 @@
1
+ /** Zoekveld exact als Verkooporders: h-9, sm:w-80, breder bij focus, "/"-hint. */
2
+ export declare const SearchInput: import("react").ForwardRefExoticComponent<{
3
+ value: string;
4
+ onChange: (v: string) => void;
5
+ placeholder: string;
6
+ } & import("react").RefAttributes<HTMLInputElement>>;
7
+ //# sourceMappingURL=SearchInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/SearchInput.tsx"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,eAAO,MAAM,WAAW;WAAyC,MAAM;cAAY,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI;iBAAe,MAAM;oDAgC1H,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { Search, X } from "lucide-react";
4
+ /** Zoekveld exact als Verkooporders: h-9, sm:w-80, breder bij focus, "/"-hint. */
5
+ export const SearchInput = forwardRef(function SearchInput({ value, onChange, placeholder }, ref) {
6
+ return (_jsxs("div", { className: "group relative flex h-10 w-full items-center overflow-hidden rounded-md border border-border bg-card transition-[box-shadow,border-color,width] duration-[180ms] ease-out focus-within:border-primary focus-within:ring-[3px] focus-within:ring-ring/20 motion-reduce:transition-none sm:h-9 sm:w-80 sm:focus-within:w-[400px]", children: [_jsx(Search, { className: "ml-3 h-4 w-4 shrink-0 text-muted-foreground group-focus-within:text-primary", "aria-hidden": true }), _jsx("input", { ref: ref, type: "search", placeholder: placeholder, "aria-label": "Zoeken", value: value, maxLength: 100, autoComplete: "off", spellCheck: false, onChange: (e) => onChange(e.target.value), onKeyDown: (e) => {
7
+ if (e.key === "Escape" && value) {
8
+ e.preventDefault();
9
+ onChange("");
10
+ }
11
+ }, className: "h-full min-w-0 flex-1 appearance-none border-0 bg-transparent px-2 text-base text-foreground shadow-none outline-none ring-0 placeholder:text-muted-foreground focus:outline-none focus:ring-0 sm:text-sm [&::-webkit-search-cancel-button]:hidden" }), _jsxs("span", { className: "relative mr-1.5 flex h-7 w-7 shrink-0 items-center justify-center", children: [_jsx("kbd", { "aria-hidden": true, className: "pointer-events-none absolute hidden rounded border border-border px-1.5 font-mono text-[11px] leading-5 text-muted-foreground sm:inline-block " + (value ? "opacity-0" : "opacity-100 group-focus-within:opacity-0"), children: "/" }), _jsx("button", { type: "button", onClick: () => onChange(""), tabIndex: value ? 0 : -1, "aria-label": "Zoeken wissen", className: "absolute inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground " + (value ? "opacity-100" : "pointer-events-none opacity-0"), children: _jsx(X, { className: "h-4 w-4" }) })] })] }));
12
+ });
@@ -0,0 +1,8 @@
1
+ export declare function ShortcutHelp({ open, onOpenChange, shortcuts }: {
2
+ open: boolean;
3
+ onOpenChange: (o: boolean) => void;
4
+ shortcuts: [string[], string][];
5
+ }): import("react").JSX.Element;
6
+ /** Sneltoetsen; nooit tijdens typen in een invoerveld. */
7
+ export declare function isTypingTarget(t: EventTarget | null): boolean;
8
+ //# sourceMappingURL=ShortcutHelp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutHelp.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/ShortcutHelp.tsx"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,CAAA;CAAE,+BAsBrJ;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,WAKnD"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@flowselections/core";
3
+ export function ShortcutHelp({ open, onOpenChange, shortcuts }) {
4
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-sm", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Sneltoetsen" }) }), _jsx("ul", { className: "divide-y divide-border text-sm", children: shortcuts.map(([keys, label]) => (_jsxs("li", { className: "flex items-center justify-between py-2", children: [_jsx("span", { className: "text-foreground", children: label }), _jsx("span", { className: "flex gap-1", children: keys.map((k) => (_jsx("kbd", { className: "inline-flex h-6 min-w-6 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[11px] text-muted-foreground", children: k }, k))) })] }, label))) })] }) }));
5
+ }
6
+ /** Sneltoetsen; nooit tijdens typen in een invoerveld. */
7
+ export function isTypingTarget(t) {
8
+ const el = t;
9
+ if (!el)
10
+ return false;
11
+ const tag = el.tagName;
12
+ return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || el.isContentEditable;
13
+ }
@@ -0,0 +1,8 @@
1
+ export type StatusTone = "ok" | "off" | "warn";
2
+ /** Klein statusicoon met infoballon; woord erbij alleen als showLabel. */
3
+ export declare function StatusIcon({ tone, label, showLabel }: {
4
+ tone: StatusTone;
5
+ label: string;
6
+ showLabel?: boolean;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=StatusIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusIcon.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/StatusIcon.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAI/C,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,+BAUtH"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CheckCircle2, CircleSlash, AlertTriangle } from "lucide-react";
3
+ import { HoverTip } from "./HoverTip.js";
4
+ const ICON = { ok: CheckCircle2, off: CircleSlash, warn: AlertTriangle };
5
+ const COLOR = { ok: "text-success", off: "text-muted-foreground", warn: "text-warning" };
6
+ /** Klein statusicoon met infoballon; woord erbij alleen als showLabel. */
7
+ export function StatusIcon({ tone, label, showLabel = false }) {
8
+ const Icon = ICON[tone];
9
+ return (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [_jsx(HoverTip, { label: label, content: label, children: _jsx(Icon, { className: "h-4 w-4 " + COLOR[tone], "aria-hidden": true }) }), showLabel && _jsx("span", { className: "text-sm text-foreground", children: label })] }));
10
+ }
@@ -0,0 +1,6 @@
1
+ /** Skeletten in de echte vorm: 40 px kop, 60 px rijen; mobiel kaarten. */
2
+ export declare function TableSkeleton({ cols, rows }: {
3
+ cols: readonly number[];
4
+ rows?: number;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=TableSkeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSkeleton.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/TableSkeleton.tsx"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,IAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAqB3F"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Skeleton } from "@flowselections/core";
3
+ /** Skeletten in de echte vorm: 40 px kop, 60 px rijen; mobiel kaarten. */
4
+ export function TableSkeleton({ cols, rows = 6 }) {
5
+ return (_jsxs("div", { "aria-busy": "true", "aria-label": "Laden", children: [_jsx("div", { className: "hidden md:block", children: _jsxs("table", { className: "w-full min-w-[900px] table-fixed", children: [_jsx("colgroup", { children: cols.map((w, i) => _jsx("col", { style: { width: `${w}px` } }, i)) }), _jsx("thead", { children: _jsx("tr", { className: "h-10 border-b border-border", children: cols.map((_, i) => _jsx("th", { className: "px-2", children: _jsx(Skeleton, { className: "h-3 w-16" }) }, i)) }) }), _jsx("tbody", { children: Array.from({ length: rows }).map((_, r) => (_jsx("tr", { className: "h-[60px] border-b border-border last:border-0", children: cols.map((_, i) => _jsx("td", { className: "px-2 py-0", children: _jsx(Skeleton, { className: "h-4 w-3/4" }) }, i)) }, r))) })] }) }), _jsx("div", { className: "space-y-2 p-3 md:hidden", children: Array.from({ length: 4 }).map((_, r) => _jsx(Skeleton, { className: "h-20 w-full rounded-lg" }, r)) })] }));
6
+ }
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ /** Werkbalk: zoeken, Filters-knop, chips; rechts alleen "Kolommen". */
3
+ export declare function Toolbar({ search, filterCount, onOpenFilters, chips, right }: {
4
+ search: ReactNode;
5
+ filterCount: number;
6
+ onOpenFilters: () => void;
7
+ chips?: ReactNode;
8
+ right?: ReactNode;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=Toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,+BAexL"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from "@flowselections/core";
3
+ import { SlidersHorizontal } from "lucide-react";
4
+ /** Werkbalk: zoeken, Filters-knop, chips; rechts alleen "Kolommen". */
5
+ export function Toolbar({ search, filterCount, onOpenFilters, chips, right }) {
6
+ return (_jsxs("div", { className: "shrink-0 flex flex-wrap items-center gap-2", children: [_jsx("div", { className: "min-w-0 flex-1 sm:flex-none", children: search }), _jsxs(Button, { variant: "outline", size: "sm", onClick: onOpenFilters, "aria-label": "Filters", className: "relative h-10 px-3 sm:h-9", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4 sm:mr-2" }), _jsx("span", { className: "hidden sm:inline", children: "Filters" }), filterCount > 0 && (_jsx("span", { className: "ml-2 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-[11px] font-semibold text-primary-foreground", children: filterCount }))] }), chips, right && _jsx("div", { className: "ml-auto", children: right })] }));
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ /** "Bijgewerkt hh:mm" met klokicoon (12 px); extra uitleg in de infoballon. */
3
+ export declare function UpdatedAt({ at, info }: {
4
+ at: number | null | undefined;
5
+ info?: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=UpdatedAt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdatedAt.d.ts","sourceRoot":"","sources":["../../../src/components/fs-ui/UpdatedAt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,+BAa1F"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Clock } from "lucide-react";
3
+ import { HoverTip } from "./HoverTip.js";
4
+ function hhmm(ts) {
5
+ return new Date(ts).toLocaleTimeString("nl-NL", { hour: "2-digit", minute: "2-digit" });
6
+ }
7
+ /** "Bijgewerkt hh:mm" met klokicoon (12 px); extra uitleg in de infoballon. */
8
+ export function UpdatedAt({ at, info }) {
9
+ if (!at)
10
+ return _jsx("p", { className: "h-4 text-xs text-muted-foreground", "aria-live": "polite" });
11
+ const text = (_jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Clock, { className: "h-3 w-3", "aria-hidden": true }), "Bijgewerkt ", hhmm(at)] }));
12
+ return (_jsx("p", { className: "flex items-center text-xs text-muted-foreground", "aria-live": "polite", children: info ? _jsx(HoverTip, { label: "Meer informatie", content: info, className: "rounded-sm", children: text }) : text }));
13
+ }
@@ -4,7 +4,7 @@ export declare function useDocumentChoice(params: {
4
4
  payload: unknown;
5
5
  documentType: string;
6
6
  slug: string | null;
7
- }): import("@tanstack/react-query").UseQueryResult<DocumentChoice, Error>;
7
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<DocumentChoice>, Error>;
8
8
  export declare function DocumentChoiceMelding({ choice, isError }: {
9
9
  choice: DocumentChoice | undefined;
10
10
  isError: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentChoiceMelding.d.ts","sourceRoot":"","sources":["../../../src/components/pick/DocumentChoiceMelding.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,yEAeA;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,sCAclH"}
1
+ {"version":3,"file":"DocumentChoiceMelding.d.ts","sourceRoot":"","sources":["../../../src/components/pick/DocumentChoiceMelding.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,kFAeA;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,sCAclH"}
@@ -1404,7 +1404,7 @@ export function PickScherm({ station, onBack }) {
1404
1404
  ? "Pickwachtrij laden…"
1405
1405
  : checkDone > 0
1406
1406
  ? `Pakbonnen controleren (${checkDone} van ${checkTotal})…`
1407
- : `Pakbonnen controleren (${checkTotal})…` }), _jsxs("span", { className: "tabular-nums", children: [loadPercent, "%"] })] }), _jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-muted", children: _jsx("div", { className: "h-full rounded-full bg-primary transition-all duration-300", style: { width: `${Math.max(5, loadPercent)}%` } }) })] })), _jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:flex-wrap md:items-center md:justify-between", children: [_jsxs("div", { className: "grid grid-cols-[auto_minmax(0,1fr)] items-center gap-3", children: [_jsxs(Button, { variant: "outline", size: "lg", className: "h-12 shrink-0 px-3 sm:px-4", onClick: () => setLang(null), "aria-label": t("changeLanguage"), children: [_jsx(Globe, { className: "h-5 w-5 sm:mr-2" }), _jsx("span", { className: "hidden sm:inline", children: t("changeLanguage") })] }), _jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "truncate text-lg font-bold text-foreground sm:text-xl", children: station.name }), _jsxs("p", { className: "truncate text-sm text-muted-foreground", children: [countsLoading ? "…" : pendingCount, " ", t("statusToPrint"), " \u00B7 ", countsLoading ? "…" : printedCount, " ", t("statusPrinted"), openJobIds.length > 0 ? ` · ${openJobIds.length} wacht op printer` : ""] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { variant: "outline", size: "lg", className: "h-12 px-3", onClick: () => void shiftDay(-1), disabled: loadingDay || !(chosenDay ?? pickDay), "aria-label": ui.pickDayPrev, children: [_jsx(ChevronLeft, { className: "h-5 w-5 sm:mr-1" }), _jsx("span", { className: "hidden sm:inline", children: ui.pickDayPrev })] }), _jsx("div", { className: "flex h-12 items-center rounded-md border bg-muted px-4 text-sm font-semibold text-foreground", children: chosenDay ? dayLabel(chosenDay) : ui.pickDayToday }), _jsxs(Button, { variant: "outline", size: "lg", className: "h-12 px-3", onClick: () => void shiftDay(1), disabled: loadingDay || !(chosenDay ?? pickDay), "aria-label": ui.pickDayNext, children: [_jsx("span", { className: "hidden sm:inline", children: ui.pickDayNext }), _jsx(ChevronRight, { className: "h-5 w-5 sm:ml-1" })] }), chosenDay && (_jsx(Button, { variant: "secondary", size: "lg", className: "h-12 px-4", onClick: () => void chooseDay("current"), disabled: loadingDay, children: ui.pickDayBackToToday }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!online && (_jsxs(Badge, { className: "bg-destructive text-destructive-foreground", children: [_jsx(WifiOff, { className: "mr-1 h-3.5 w-3.5" }), " ", t("offline")] })), _jsx(Button, { variant: "outline", size: "icon", className: "h-12 w-12 shrink-0", onClick: refresh, "aria-label": t("refresh"), children: _jsx(RefreshCw, { className: "h-4 w-4" }) }), _jsxs(Button, { variant: "outline", size: "lg", className: "hidden h-14 px-5 md:inline-flex", disabled: fetchingNotes, onClick: () => void fetchShippingNotes(), children: [fetchingNotes ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : (_jsx(FileDown, { className: "mr-2 h-5 w-5" })), fetchingNotes ? "Ophalen…" : "Verzendbrieven ophalen"] }), cartsPerPrint != null && (_jsxs(Button, { size: "lg", className: "hidden h-14 px-6 text-lg md:inline-flex", disabled: loading || printStatusLoading || batchPrinting || (busyId != null || actionBusy), onClick: () => void printNextCarts(), children: [batchPrinting ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), "Volgende printen (", cartsPerPrint, " karren)"] })), _jsxs(Button, { size: "lg", className: "hidden h-14 px-8 text-lg md:inline-flex", onClick: () => (pending ? confirmPending() : fetchNextLocked()), disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), children: [(busyId !== null || actionBusy) || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : pending && !readiness.ready ? (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), pending && !readiness.ready ? "Pakbon ophalen" : t("printNext")] })] })] }), showSyncingNotice({ syncing, syncError }) && (_jsx("div", { role: "status", "aria-live": "polite", className: "px-4 py-1 text-xs text-muted-foreground", children: "Wachtrij wordt bijgewerkt\u2026" })), syncError && (_jsxs("div", { role: "alert", className: "flex items-start gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("span", { children: [SYNC_ERROR_MESSAGE, _jsxs("details", { className: "mt-1 text-xs text-muted-foreground", children: [_jsx("summary", { children: "Details voor beheer" }), syncError] })] })] })), !plekLoading && !printPlek && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("span", { children: "Nog geen printplek gekoppeld \u2014 de opdracht blijft in de wachtrij staan." })] })), (cartMissing || rowGone) && (_jsxs("div", { role: "alert", className: "flex flex-col gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("span", { className: "flex items-start gap-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), rowGone ? ROW_GONE_MESSAGE : CART_MISSING_MESSAGE] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => {
1407
+ : `Pakbonnen controleren (${checkTotal})…` }), _jsxs("span", { className: "tabular-nums", children: [loadPercent, "%"] })] }), _jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-muted", children: _jsx("div", { className: "h-full rounded-full bg-primary transition-all duration-300", style: { width: `${Math.max(5, loadPercent)}%` } }) })] })), _jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:flex-wrap md:items-center md:justify-between", children: [_jsxs("div", { className: "grid grid-cols-[auto_minmax(0,1fr)] items-center gap-3", children: [_jsxs(Button, { variant: "outline", size: "lg", className: "h-14 shrink-0 px-3 sm:px-4", onClick: () => setLang(null), "aria-label": t("changeLanguage"), children: [_jsx(Globe, { className: "h-5 w-5 sm:mr-2" }), _jsx("span", { className: "hidden sm:inline", children: t("changeLanguage") })] }), _jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "truncate text-lg font-bold text-foreground sm:text-xl", children: station.name }), _jsxs("p", { className: "truncate text-sm text-muted-foreground", children: [countsLoading ? "…" : pendingCount, " ", t("statusToPrint"), " \u00B7 ", countsLoading ? "…" : printedCount, " ", t("statusPrinted"), openJobIds.length > 0 ? ` · ${openJobIds.length} wacht op printer` : ""] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { variant: "outline", size: "lg", className: "h-14 px-3", onClick: () => void shiftDay(-1), disabled: loadingDay || !(chosenDay ?? pickDay), "aria-label": ui.pickDayPrev, children: [_jsx(ChevronLeft, { className: "h-5 w-5 sm:mr-1" }), _jsx("span", { className: "hidden sm:inline", children: ui.pickDayPrev })] }), _jsx("div", { className: "flex h-14 items-center rounded-md border bg-muted px-4 text-sm font-semibold text-foreground", children: chosenDay ? dayLabel(chosenDay) : ui.pickDayToday }), _jsxs(Button, { variant: "outline", size: "lg", className: "h-14 px-3", onClick: () => void shiftDay(1), disabled: loadingDay || !(chosenDay ?? pickDay), "aria-label": ui.pickDayNext, children: [_jsx("span", { className: "hidden sm:inline", children: ui.pickDayNext }), _jsx(ChevronRight, { className: "h-5 w-5 sm:ml-1" })] }), chosenDay && (_jsx(Button, { variant: "secondary", size: "lg", className: "h-14 px-4", onClick: () => void chooseDay("current"), disabled: loadingDay, children: ui.pickDayBackToToday }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!online && (_jsxs(Badge, { className: "bg-destructive text-destructive-foreground", children: [_jsx(WifiOff, { className: "mr-1 h-3.5 w-3.5" }), " ", t("offline")] })), _jsx(Button, { variant: "outline", size: "icon", className: "h-14 w-12 shrink-0", onClick: refresh, "aria-label": t("refresh"), children: _jsx(RefreshCw, { className: "h-4 w-4" }) }), _jsxs(Button, { variant: "outline", size: "lg", className: "hidden h-14 px-5 md:inline-flex", disabled: fetchingNotes, onClick: () => void fetchShippingNotes(), children: [fetchingNotes ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : (_jsx(FileDown, { className: "mr-2 h-5 w-5" })), fetchingNotes ? "Ophalen…" : "Verzendbrieven ophalen"] }), cartsPerPrint != null && (_jsxs(Button, { size: "lg", className: "hidden h-14 px-6 text-lg md:inline-flex", disabled: loading || printStatusLoading || batchPrinting || (busyId != null || actionBusy), onClick: () => void printNextCarts(), children: [batchPrinting ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), "Volgende printen (", cartsPerPrint, " karren)"] })), _jsxs(Button, { size: "lg", className: "hidden h-14 px-8 text-lg md:inline-flex", onClick: () => (pending ? confirmPending() : fetchNextLocked()), disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), children: [(busyId !== null || actionBusy) || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : pending && !readiness.ready ? (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), pending && !readiness.ready ? "Pakbon ophalen" : t("printNext")] })] })] }), showSyncingNotice({ syncing, syncError }) && (_jsx("div", { role: "status", "aria-live": "polite", className: "px-4 py-1 text-xs text-muted-foreground", children: "Wachtrij wordt bijgewerkt\u2026" })), syncError && (_jsxs("div", { role: "alert", className: "flex items-start gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("span", { children: [SYNC_ERROR_MESSAGE, _jsxs("details", { className: "mt-1 text-xs text-muted-foreground", children: [_jsx("summary", { children: "Details voor beheer" }), syncError] })] })] })), !plekLoading && !printPlek && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("span", { children: "Nog geen printplek gekoppeld \u2014 de opdracht blijft in de wachtrij staan." })] })), (cartMissing || rowGone) && (_jsxs("div", { role: "alert", className: "flex flex-col gap-2 rounded-md border-2 border-destructive/50 bg-destructive/5 p-3 text-sm text-destructive sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("span", { className: "flex items-start gap-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), rowGone ? ROW_GONE_MESSAGE : CART_MISSING_MESSAGE] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => {
1408
1408
  setCartMissing(false);
1409
1409
  setRowGone(false);
1410
1410
  setPending(null);
@@ -1416,7 +1416,7 @@ export function PickScherm({ station, onBack }) {
1416
1416
  const cart = plannedCart ?? { cartId: r.cartId, cartLabel: r.cartLabel ?? r.cartId };
1417
1417
  setLastCartResults((prev) => prev.filter((x) => x.cartId !== r.cartId));
1418
1418
  void reprintCart(lastPrinted, cart);
1419
- }, children: "Opnieuw printen" })] }, r.cartId))) }) })), lastCartResults.length > 1 && (_jsxs("div", { className: "rounded-md border p-3 text-sm", "aria-label": "Resultaat per kar", children: [_jsx("p", { className: "mb-1 font-semibold text-foreground", children: "Resultaat per kar" }), _jsx("ul", { className: "space-y-0.5 text-muted-foreground", children: lastCartResults.map((r) => (_jsx("li", { className: r.outcome === "created" ? "text-foreground" : r.outcome === "error" ? "text-destructive" : "", children: cartResultLine(r) }, r.cartId))) })] })), _jsx(VroegeStickerWaarschuwing, { stationId: station.id }), _jsx(ShippingNoteScan, { stationId: station.id }), !pending && emptyNotice && (_jsx("p", { className: "text-sm text-muted-foreground", children: emptyNotice })), pending && (_jsxs(Card, { className: "border-2 border-primary", children: [_jsxs(CardContent, { className: "flex flex-col gap-4 p-4 sm:flex-row sm:flex-wrap sm:items-center sm:justify-between sm:p-5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: t("confirmPrintTitle") }), _jsx("p", { className: "truncate text-xl font-bold text-foreground sm:text-2xl", children: pending.document_number ?? t("document") }), _jsx("p", { className: "truncate text-sm text-muted-foreground", children: [pending.order_number, pending.customer_name].filter(Boolean).join(" · ") })] }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [_jsx(Button, { variant: "outline", size: "lg", className: "h-12 w-full sm:w-auto", onClick: cancelPending, disabled: (busyId !== null || actionBusy), children: t("cancel") }), _jsxs(Button, { size: "lg", className: "h-14 w-full px-8 text-lg sm:w-auto", onClick: confirmPending, disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), variant: readiness.ready ? "default" : "secondary", children: [busyId === "confirm" || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : readiness.ready ? (_jsx(Printer, { className: "mr-2 h-5 w-5" })) : (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })), readiness.ready ? t("print") : "Pakbon ophalen"] })] })] }), !readiness.ready && (_jsx(CardContent, { className: "border-t p-4 sm:p-5", children: _jsxs("div", { className: "flex items-start gap-2 rounded-md border bg-muted/30 p-3 text-sm text-muted-foreground", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("span", { children: fetchingData
1419
+ }, children: "Opnieuw printen" })] }, r.cartId))) }) })), lastCartResults.length > 1 && (_jsxs("div", { className: "rounded-md border p-3 text-sm", "aria-label": "Resultaat per kar", children: [_jsx("p", { className: "mb-1 font-semibold text-foreground", children: "Resultaat per kar" }), _jsx("ul", { className: "space-y-0.5 text-muted-foreground", children: lastCartResults.map((r) => (_jsx("li", { className: r.outcome === "created" ? "text-foreground" : r.outcome === "error" ? "text-destructive" : "", children: cartResultLine(r) }, r.cartId))) })] })), _jsx(VroegeStickerWaarschuwing, { stationId: station.id }), _jsx(ShippingNoteScan, { stationId: station.id }), !pending && emptyNotice && (_jsx("p", { className: "text-sm text-muted-foreground", children: emptyNotice })), pending && (_jsxs(Card, { className: "border-2 border-primary", children: [_jsxs(CardContent, { className: "flex flex-col gap-4 p-4 sm:flex-row sm:flex-wrap sm:items-center sm:justify-between sm:p-5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: t("confirmPrintTitle") }), _jsx("p", { className: "truncate text-xl font-bold text-foreground sm:text-2xl", children: pending.document_number ?? t("document") }), _jsx("p", { className: "truncate text-sm text-muted-foreground", children: [pending.order_number, pending.customer_name].filter(Boolean).join(" · ") })] }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [_jsx(Button, { variant: "outline", size: "lg", className: "h-14 w-full sm:w-auto", onClick: cancelPending, disabled: (busyId !== null || actionBusy), children: t("cancel") }), _jsxs(Button, { size: "lg", className: "h-14 w-full px-8 text-lg sm:w-auto", onClick: confirmPending, disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), variant: readiness.ready ? "default" : "secondary", children: [busyId === "confirm" || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : readiness.ready ? (_jsx(Printer, { className: "mr-2 h-5 w-5" })) : (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })), readiness.ready ? t("print") : "Pakbon ophalen"] })] })] }), !readiness.ready && (_jsx(CardContent, { className: "border-t p-4 sm:p-5", children: _jsxs("div", { className: "flex items-start gap-2 rounded-md border bg-muted/30 p-3 text-sm text-muted-foreground", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("span", { children: fetchingData
1420
1420
  ? "De pakbon wordt opgevraagd. Zodra alles compleet is, verschijnt de printknop weer."
1421
1421
  : planReason
1422
1422
  ? `${planReason} Klik op "Pakbon ophalen" om hem op te vragen.`
@@ -1453,10 +1453,10 @@ export function PickScherm({ station, onBack }) {
1453
1453
  const cart = cartPlan?.carts.find((c) => c.cartId === tracked.cartId) ?? null;
1454
1454
  const item = lastPrinted ?? pending;
1455
1455
  return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm font-medium text-destructive", children: [_jsxs("span", { children: [stuckMessage(minutes), tracked.job?.printer_naam ? ` (${tracked.job.printer_naam})` : ""] }), cart && item && (_jsx(Button, { size: "sm", variant: "outline", disabled: busyId !== null || actionBusy, onClick: () => void reprintCart(item, cart), children: "Opnieuw proberen" }))] }));
1456
- })(), jobFailed && (_jsxs("p", { className: "text-sm text-destructive", children: [tracked.job?.foutmelding ?? jobTexts.unknown, " \u00B7 ", jobTexts.requeued] })), !jobFailed && pdfSaveWarning(tracked.job) && (_jsx("p", { className: "text-sm font-medium text-destructive", children: pdfSaveWarning(tracked.job) }))] })] }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [jobFailed && lastPrinted && (_jsxs(Button, { size: "lg", className: "h-12 w-full sm:w-auto", onClick: () => {
1456
+ })(), jobFailed && (_jsxs("p", { className: "text-sm text-destructive", children: [tracked.job?.foutmelding ?? jobTexts.unknown, " \u00B7 ", jobTexts.requeued] })), !jobFailed && pdfSaveWarning(tracked.job) && (_jsx("p", { className: "text-sm font-medium text-destructive", children: pdfSaveWarning(tracked.job) }))] })] }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [jobFailed && lastPrinted && (_jsxs(Button, { size: "lg", className: "h-14 w-full sm:w-auto", onClick: () => {
1457
1457
  clearJob();
1458
1458
  void confirmPending();
1459
- }, disabled: (busyId !== null || actionBusy) || !pending, children: [_jsx(Printer, { className: "mr-2 h-5 w-5" }), " ", jobTexts.retry] })), _jsx(Button, { variant: "outline", size: "lg", className: "h-12 w-full sm:w-auto", onClick: () => {
1459
+ }, disabled: (busyId !== null || actionBusy) || !pending, children: [_jsx(Printer, { className: "mr-2 h-5 w-5" }), " ", jobTexts.retry] })), _jsx(Button, { variant: "outline", size: "lg", className: "h-14 w-full sm:w-auto", onClick: () => {
1460
1460
  clearJob();
1461
1461
  clearShippingNotes();
1462
1462
  setAutoSendOrderId(null);
@@ -1472,8 +1472,11 @@ export function PickScherm({ station, onBack }) {
1472
1472
  (message ?? "Verzendbriefstatus wordt opgehaald.") }), waiting && (note.state.attempts !== null || note.state.nextAttemptAt) && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [note.state.attempts !== null ? `Pogingen: ${note.state.attempts}` : "", note.state.attempts !== null && note.state.nextAttemptAt ? " · " : "", note.state.nextAttemptAt
1473
1473
  ? `Volgende poging: ${formatSiteTime(note.state.nextAttemptAt, siteTz)}`
1474
1474
  : ""] }))] })] }, note.jobId));
1475
- })] }) })), _jsxs(Button, { variant: "outline", size: "lg", className: "h-12 w-full sm:hidden", "aria-expanded": filtersOpen, onClick: () => setFiltersOpen((v) => !v), children: [_jsx(Search, { className: "mr-2 h-4 w-4" }), " ", ui.filters] }), _jsx(Card, { className: filtersOpen ? "" : "hidden sm:block", children: _jsxs(CardContent, { className: "flex flex-wrap items-center gap-3 p-3 sm:p-4", children: [_jsxs("div", { className: "relative w-full min-w-0 flex-1 sm:min-w-64", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "h-12 pl-9 text-base", placeholder: t("search"), value: searchInput, onChange: (e) => setSearchInput(e.target.value) })] }), _jsxs(Select, { value: chosenDay ?? "current", onValueChange: (v) => void chooseDay(v), children: [_jsx(SelectTrigger, { className: "h-12 w-full sm:w-56", disabled: loadingDay, children: _jsx(SelectValue, { placeholder: ui.pickDay }) }), _jsxs(SelectContent, { className: "z-[100] bg-popover opacity-100", children: [_jsx(SelectItem, { value: "current", children: ui.pickDayToday }), safePickDays.map((d) => (_jsxs(SelectItem, { value: d.day, children: [dayLabel(d.day), d.orders > 0 ? ` (${d.orders})` : ""] }, d.day)))] })] }), _jsxs(Select, { value: filters.documentTypeId ?? "all", onValueChange: (v) => setFilters((f) => ({ ...f, documentTypeId: v === "all" ? null : v, page: 0 })), children: [_jsx(SelectTrigger, { className: "h-12 w-full sm:w-52", children: _jsx(SelectValue, { placeholder: ui.allDocumentTypes }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: ui.allDocumentTypes }), (Array.isArray(documentTypes) ? documentTypes : []).map((dt) => (_jsx(SelectItem, { value: dt.id, children: dt.name }, dt.id)))] })] }), _jsx(Button, { variant: filters.onlyPending ? "default" : "outline", className: "h-12", onClick: () => setFilters((f) => ({ ...f, onlyPending: !f.onlyPending, page: 0 })), children: ui.onlyPending }), _jsxs(Button, { variant: filters.urgentOnly ? "default" : "outline", className: "h-12", onClick: () => setFilters((f) => ({ ...f, urgentOnly: !f.urgentOnly, page: 0 })), children: [_jsx(Zap, { className: "mr-2 h-4 w-4" }), ui.onlyUrgent, urgentCount > 0 ? ` (${urgentCount})` : ""] })] }) }), !realtimeOk && (_jsx("p", { className: "text-sm text-muted-foreground", children: ui.connectionLost })), cartsPerPrint != null && (_jsx("div", { className: "flex justify-end md:hidden", children: _jsxs(Button, { className: "h-12", disabled: loading || printStatusLoading || batchPrinting || (busyId != null || actionBusy), onClick: () => void printNextCarts(), children: [batchPrinting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Printer, { className: "mr-2 h-4 w-4" })), "Volgende printen (", cartsPerPrint, " karren)"] }) })), _jsx("div", { className: "md:hidden", children: _jsxs(Button, { variant: "outline", className: "h-12 w-full", disabled: fetchingNotes, onClick: () => void fetchShippingNotes(), children: [fetchingNotes ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(FileDown, { className: "mr-2 h-4 w-4" })), fetchingNotes ? "Ophalen…" : "Verzendbrieven ophalen"] }) }), loading ? (_jsxs("div", { className: "flex items-center justify-center py-16 text-muted-foreground", children: [_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" }), " ", t("loadingQueue")] })) : (_jsxs(_Fragment, { children: [earlierRows.length > 0 && (_jsxs("section", { className: "mb-4 rounded-lg border border-primary/40 bg-muted/40 p-3", "aria-label": "Nog niet gescand van eerdere dagen", children: [_jsxs("h3", { className: "mb-2 text-sm font-semibold text-foreground", children: ["Nog niet gescand van eerdere dagen (", earlierRows.length, ")"] }), _jsx("ul", { className: "divide-y divide-border", children: earlierRows.map((row) => (_jsxs("li", { className: "flex flex-wrap items-center justify-between gap-2 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate font-medium", children: row.document_number ?? row.order_number ?? "Pakbon" }), _jsxs("div", { className: "text-xs text-muted-foreground", children: [pickDayShortLabel(pickDayOf(row)), row.customer_name ? ` · ${row.customer_name}` : ""] })] }), _jsx(Button, { size: "sm", variant: "outline", disabled: busyId !== null || actionBusy, onClick: async () => {
1475
+ })] }) })), _jsxs(Button, { variant: "outline", size: "lg", className: "h-14 w-full sm:hidden", "aria-expanded": filtersOpen, onClick: () => setFiltersOpen((v) => !v), children: [_jsx(Search, { className: "mr-2 h-4 w-4" }), " ", ui.filters] }), _jsx(Card, { className: filtersOpen ? "" : "hidden sm:block", children: _jsxs(CardContent, { className: "flex flex-wrap items-center gap-3 p-3 sm:p-4", children: [_jsxs("div", { className: "relative w-full min-w-0 flex-1 sm:min-w-64", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "h-14 pl-9 text-lg", placeholder: t("search"), value: searchInput, onChange: (e) => setSearchInput(e.target.value) })] }), _jsxs(Select, { value: chosenDay ?? "current", onValueChange: (v) => void chooseDay(v), children: [_jsx(SelectTrigger, { className: "h-14 w-full text-lg sm:w-56", disabled: loadingDay, children: _jsx(SelectValue, { placeholder: ui.pickDay }) }), _jsxs(SelectContent, { className: "z-[100] bg-popover opacity-100", children: [_jsx(SelectItem, { value: "current", children: ui.pickDayToday }), safePickDays.map((d) => (_jsxs(SelectItem, { value: d.day, children: [dayLabel(d.day), d.orders > 0 ? ` (${d.orders})` : ""] }, d.day)))] })] }), _jsx("div", { role: "group", "aria-label": ui.allDocumentTypes, className: "flex w-full flex-wrap gap-2 sm:w-auto", children: [{ id: null, name: ui.allDocumentTypes }, ...(Array.isArray(documentTypes) ? documentTypes : []).map((dt) => ({ id: dt.id, name: dt.name }))].map((dt) => {
1476
+ const active = (filters.documentTypeId ?? null) === dt.id;
1477
+ return (_jsx(Button, { type: "button", "aria-pressed": active, variant: active ? "default" : "outline", className: "h-14 px-4 text-lg", onClick: () => setFilters((f) => ({ ...f, documentTypeId: dt.id, page: 0 })), children: dt.name }, dt.id ?? "all"));
1478
+ }) }), _jsx(Button, { variant: filters.onlyPending ? "default" : "outline", className: "h-14 text-lg", onClick: () => setFilters((f) => ({ ...f, onlyPending: !f.onlyPending, page: 0 })), children: ui.onlyPending }), _jsxs(Button, { variant: filters.urgentOnly ? "default" : "outline", className: "h-14 text-lg", onClick: () => setFilters((f) => ({ ...f, urgentOnly: !f.urgentOnly, page: 0 })), children: [_jsx(Zap, { className: "mr-2 h-4 w-4" }), ui.onlyUrgent, urgentCount > 0 ? ` (${urgentCount})` : ""] })] }) }), !realtimeOk && (_jsx("p", { className: "text-sm text-muted-foreground", children: ui.connectionLost })), cartsPerPrint != null && (_jsx("div", { className: "flex justify-end md:hidden", children: _jsxs(Button, { className: "h-14 text-lg", disabled: loading || printStatusLoading || batchPrinting || (busyId != null || actionBusy), onClick: () => void printNextCarts(), children: [batchPrinting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Printer, { className: "mr-2 h-4 w-4" })), "Volgende printen (", cartsPerPrint, " karren)"] }) })), _jsx("div", { className: "md:hidden", children: _jsxs(Button, { variant: "outline", className: "h-14 w-full", disabled: fetchingNotes, onClick: () => void fetchShippingNotes(), children: [fetchingNotes ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(FileDown, { className: "mr-2 h-4 w-4" })), fetchingNotes ? "Ophalen…" : "Verzendbrieven ophalen"] }) }), loading ? (_jsxs("div", { className: "flex items-center justify-center py-16 text-muted-foreground", children: [_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" }), " ", t("loadingQueue")] })) : (_jsxs(_Fragment, { children: [earlierRows.length > 0 && (_jsxs("section", { className: "mb-4 rounded-lg border border-primary/40 bg-muted/40 p-3", "aria-label": "Nog niet gescand van eerdere dagen", children: [_jsxs("h3", { className: "mb-2 text-sm font-semibold text-foreground", children: ["Nog niet gescand van eerdere dagen (", earlierRows.length, ")"] }), _jsx("ul", { className: "divide-y divide-border", children: earlierRows.map((row) => (_jsxs("li", { className: "flex flex-wrap items-center justify-between gap-2 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate font-medium", children: row.document_number ?? row.order_number ?? "Pakbon" }), _jsxs("div", { className: "text-xs text-muted-foreground", children: [pickDayShortLabel(pickDayOf(row)), row.customer_name ? ` · ${row.customer_name}` : ""] })] }), _jsx(Button, { size: "sm", variant: "outline", disabled: busyId !== null || actionBusy, onClick: async () => {
1476
1479
  await printAllForItem(row);
1477
1480
  void refetchEarlier();
1478
- }, children: "Opnieuw printen" })] }, row.id))) })] })), _jsx(QueueTable, { items: items.filter((item) => readinessById[item.id]?.replaced !== true), lockedIds: lockedIds, statuses: Array.isArray(statuses) ? statuses : [], documentTypes: Array.isArray(documentTypes) ? documentTypes : [], busyId: busyId, readinessById: readinessById, siteTimeZone: siteTz, pickDay: chosenDay ?? pickDay ?? null, waitingIds: waitingQueueIds, printStatus: printStatus, printStatusLoading: printStatusLoading, onPick: handlePick, onReprint: handleReprintLocked, onPrintAll: printAllForItem, onSelectPrinted: selectPrintedForReprint, onMarkPrinted: markPrinted, onPreview: setPreviewItem, t: t })] })), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("span", { className: "text-center text-sm text-muted-foreground sm:text-left", children: [t("page"), " ", filters.page + 1, " ", t("of"), " ", totalPages] }), _jsxs("div", { className: "grid grid-cols-2 gap-2 sm:flex", children: [_jsx(Button, { variant: "outline", className: "h-12 w-full sm:w-auto", disabled: filters.page === 0, onClick: () => setFilters((f) => ({ ...f, page: Math.max(0, f.page - 1) })), children: t("previous") }), _jsx(Button, { variant: "outline", className: "h-12 w-full sm:w-auto", disabled: filters.page + 1 >= totalPages, onClick: () => setFilters((f) => ({ ...f, page: f.page + 1 })), children: t("next") })] })] }), _jsx("div", { className: "fixed inset-x-0 bottom-0 z-40 border-t bg-background/95 p-3 pb-[max(0.75rem,env(safe-area-inset-bottom))] backdrop-blur md:hidden", children: _jsxs(Button, { size: "lg", className: "h-14 w-full text-lg", onClick: () => (pending ? confirmPending() : fetchNextLocked()), disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), children: [(busyId !== null || actionBusy) || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : pending && !readiness.ready ? (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), _jsxs("span", { className: "truncate", children: [pending && !readiness.ready ? "Pakbon ophalen" : t("printNext"), pending?.document_number ? ` · ${pending.document_number}` : ""] })] }) }), _jsx(PreviewDialog, { item: previewItem, stationSlug: station.slug, onClose: () => setPreviewItem(null) })] }));
1481
+ }, children: "Opnieuw printen" })] }, row.id))) })] })), _jsx(QueueTable, { items: items.filter((item) => readinessById[item.id]?.replaced !== true), lockedIds: lockedIds, statuses: Array.isArray(statuses) ? statuses : [], documentTypes: Array.isArray(documentTypes) ? documentTypes : [], busyId: busyId, readinessById: readinessById, siteTimeZone: siteTz, pickDay: chosenDay ?? pickDay ?? null, waitingIds: waitingQueueIds, printStatus: printStatus, printStatusLoading: printStatusLoading, onPick: handlePick, onReprint: handleReprintLocked, onPrintAll: printAllForItem, onSelectPrinted: selectPrintedForReprint, onMarkPrinted: markPrinted, onPreview: setPreviewItem, t: t })] })), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("span", { className: "text-center text-sm text-muted-foreground sm:text-left", children: [t("page"), " ", filters.page + 1, " ", t("of"), " ", totalPages] }), _jsxs("div", { className: "grid grid-cols-2 gap-2 sm:flex", children: [_jsx(Button, { variant: "outline", className: "h-14 w-full sm:w-auto", disabled: filters.page === 0, onClick: () => setFilters((f) => ({ ...f, page: Math.max(0, f.page - 1) })), children: t("previous") }), _jsx(Button, { variant: "outline", className: "h-14 w-full sm:w-auto", disabled: filters.page + 1 >= totalPages, onClick: () => setFilters((f) => ({ ...f, page: f.page + 1 })), children: t("next") })] })] }), _jsx("div", { className: "fixed inset-x-0 bottom-0 z-40 border-t bg-background/95 p-3 pb-[max(0.75rem,env(safe-area-inset-bottom))] backdrop-blur md:hidden", children: _jsxs(Button, { size: "lg", className: "h-14 w-full text-lg", onClick: () => (pending ? confirmPending() : fetchNextLocked()), disabled: (busyId !== null || actionBusy) || fetchingData || (!pending && printStatusLoading), children: [(busyId !== null || actionBusy) || fetchingData ? (_jsx(Loader2, { className: "mr-2 h-5 w-5 animate-spin" })) : pending && !readiness.ready ? (_jsx(RefreshCw, { className: "mr-2 h-5 w-5" })) : (_jsx(Printer, { className: "mr-2 h-5 w-5" })), _jsxs("span", { className: "truncate", children: [pending && !readiness.ready ? "Pakbon ophalen" : t("printNext"), pending?.document_number ? ` · ${pending.document_number}` : ""] })] }) }), _jsx(PreviewDialog, { item: previewItem, stationSlug: station.slug, onClose: () => setPreviewItem(null) })] }));
1479
1482
  }
@@ -55,7 +55,7 @@ function CartSteps({ printed, waiting }) {
55
55
  { label: "Printen", done: printed },
56
56
  { label: "Bij printer", done: printed && !waiting },
57
57
  { label: "Gescand", done: false },
58
- { label: "Gemeld bij Floriday", done: false },
58
+ { label: "Gemeld", done: false },
59
59
  ];
60
60
  return (_jsx("ol", { className: "mt-3 flex flex-wrap items-center gap-1 text-xs", children: steps.map((step, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx("span", { className: "rounded-full px-2 py-0.5 font-medium " +
61
61
  (step.done ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"), children: step.label }), i < steps.length - 1 && _jsx("span", { className: "text-muted-foreground", children: "\u2192" })] }, step.label))) }));
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Waarschuwing als verplichte referentiedata ontbreekt of uitgezet is.
3
- * Rendert niets zodra alles aanwezig en actief is — geen groene bevestiging.
2
+ * Melding als verplichte standaardgegevens ontbreken (één regel, NoticeBar-stijl).
3
+ * Rendert niets zodra alles aanwezig en actief is.
4
4
  */
5
5
  export declare function ReferentiedataBanner(): import("react").JSX.Element | null;
6
6
  //# sourceMappingURL=ReferentiedataBanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReferentiedataBanner.d.ts","sourceRoot":"","sources":["../../../src/components/pick/ReferentiedataBanner.tsx"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,oBAAoB,uCA6BnC"}
1
+ {"version":3,"file":"ReferentiedataBanner.d.ts","sourceRoot":"","sources":["../../../src/components/pick/ReferentiedataBanner.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,oBAAoB,uCA2BnC"}
@@ -1,12 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from "@flowselections/core";
3
2
  import { Link } from "@tanstack/react-router";
4
3
  import { AlertTriangle } from "lucide-react";
5
4
  import { usePickReferenceData } from "../../hooks/usePickReferenceData.js";
6
5
  import { referentieProblemen, standaardgegevensMelding } from "../../lib/pickReferenceApi.js";
7
6
  /**
8
- * Waarschuwing als verplichte referentiedata ontbreekt of uitgezet is.
9
- * Rendert niets zodra alles aanwezig en actief is — geen groene bevestiging.
7
+ * Melding als verplichte standaardgegevens ontbreken (één regel, NoticeBar-stijl).
8
+ * Rendert niets zodra alles aanwezig en actief is.
10
9
  */
11
10
  export function ReferentiedataBanner() {
12
11
  const { data } = usePickReferenceData();
@@ -14,5 +13,5 @@ export function ReferentiedataBanner() {
14
13
  const melding = standaardgegevensMelding(data);
15
14
  if (!melding)
16
15
  return null;
17
- return (_jsxs("div", { className: "space-y-3 rounded-lg border border-destructive/50 bg-destructive/5 p-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-5 w-5 shrink-0 text-destructive" }), _jsxs("div", { className: "space-y-1", children: [_jsx("h2", { className: "font-semibold text-destructive", children: melding }), problemen.length > 0 && (_jsxs("details", { className: "text-sm text-muted-foreground", children: [_jsx("summary", { children: "Details voor beheer" }), _jsx("ul", { className: "list-inside list-disc", children: problemen.map((p) => (_jsx("li", { children: p }, p))) })] }))] })] }), _jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: "/instellingen", children: "Naar instellingen" }) })] }));
16
+ return (_jsxs("div", { role: "status", className: "shrink-0 rounded-lg border border-border bg-warning-soft px-3 py-2 text-sm text-warning-soft-foreground", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(AlertTriangle, { className: "h-4 w-4 shrink-0", "aria-hidden": true }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", title: melding, children: melding }), _jsx(Link, { to: "/instellingen", className: "shrink-0 text-xs font-semibold underline underline-offset-2", children: "Naar instellingen" })] }), problemen.length > 0 && (_jsxs("details", { className: "mt-1 pl-6 text-xs opacity-80", children: [_jsx("summary", { className: "cursor-pointer", children: "Details" }), _jsx("ul", { className: "list-inside list-disc", children: problemen.map((p) => (_jsx("li", { children: p }, p))) })] }))] }));
18
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReferentiedataPickdocumentenCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/ReferentiedataPickdocumentenCard.tsx"],"names":[],"mappings":"AAwEA,wBAAgB,gCAAgC,gCAyT/C"}
1
+ {"version":3,"file":"ReferentiedataPickdocumentenCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/ReferentiedataPickdocumentenCard.tsx"],"names":[],"mappings":"AA+EA,wBAAgB,gCAAgC,gCAqU/C"}
@@ -4,7 +4,10 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
4
4
  import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, Switch, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, toast, } from "@flowselections/core";
5
5
  import { FileText, Loader2, Plus, RotateCcw } from "lucide-react";
6
6
  import { pickReferenceApi } from "../../lib/pickReferenceApi.js";
7
+ import { PillTabs } from "../fs-ui/PillTabs.js";
7
8
  import { usePickReferenceData, PICK_REFERENCE_QUERY_KEY } from "../../hooks/usePickReferenceData.js";
9
+ /** Tabelopmaak volgens Verkooporders: kop 40 px/11 px hoofdletters, rij 60 px, cellen 8 px links. */
10
+ const REF_TABLE = "w-full min-w-[900px] text-sm [&_thead_th]:h-10 [&_thead_th]:bg-card [&_thead_th]:px-2 [&_thead_th]:text-[11px] [&_thead_th]:font-semibold [&_thead_th]:uppercase [&_thead_th]:tracking-wide [&_thead_th]:text-muted-foreground [&_tbody_tr]:h-[60px] [&_tbody_td]:px-2 [&_tbody_td]:py-0 [&_tbody_td]:align-middle";
8
11
  function NumberCell({ value, onSave, }) {
9
12
  const [local, setLocal] = useState(String(value ?? 0));
10
13
  return (_jsx(Input, { className: "h-8 w-20", inputMode: "numeric", value: local, onChange: (e) => setLocal(e.target.value), onBlur: () => {
@@ -29,6 +32,7 @@ export function ReferentiedataPickdocumentenCard() {
29
32
  const { data, isLoading } = usePickReferenceData();
30
33
  const queryClient = useQueryClient();
31
34
  const [nieuw, setNieuw] = useState(null);
35
+ const [tab, setTab] = useState("types");
32
36
  const types = Array.isArray(data?.types) ? data.types : [];
33
37
  const statussen = Array.isArray(data?.statussen) ? data.statussen : [];
34
38
  const verplichteTypes = Array.isArray(data?.verplichte_types) ? data.verplichte_types : [];
@@ -74,11 +78,14 @@ export function ReferentiedataPickdocumentenCard() {
74
78
  },
75
79
  onError: (e) => toast.error(e instanceof Error ? e.message : "Herstellen mislukt."),
76
80
  });
77
- return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FileText, { className: "h-5 w-5 text-primary" }), _jsx(CardTitle, { children: "Referentiedata pickdocumenten" })] }), _jsx(CardDescription, { children: "De synchronisatie zoekt hardcoded op deze codes: zonder documenttype 'pakbon' komt er niets in de pickwachtrij. De kolom code is daarom niet te wijzigen." })] }), _jsxs(CardContent, { className: "space-y-8", children: [_jsx("div", { className: "flex flex-wrap gap-2", children: _jsxs(Button, { variant: "outline", onClick: () => seed.mutate(), disabled: seed.isPending, children: [seed.isPending ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(RotateCcw, { className: "mr-2 h-4 w-4" })), "Standaardwaarden herstellen"] }) }), isLoading ? (_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), " Laden..."] })) : (_jsxs(_Fragment, { children: [_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("h3", { className: "font-semibold text-foreground", children: ["Documenttypes (", types.length, ")"] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setNieuw({ tabel: "types", code: "", naam: "" }), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Type toevoegen"] })] }), _jsx("div", { className: "overflow-x-auto", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Code" }), _jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Kleur" }), _jsx(TableHead, { children: "Icoon" }), _jsx(TableHead, { children: "Prioriteit" }), _jsx(TableHead, { children: "Sortering" }), _jsx(TableHead, { children: "Actief" })] }) }), _jsx(TableBody, { children: types.map((t) => {
81
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FileText, { className: "h-5 w-5 text-primary" }), _jsx(CardTitle, { children: "Referentiedata pickdocumenten" })] }), _jsx(CardDescription, { children: "De synchronisatie zoekt hardcoded op deze codes: zonder documenttype 'pakbon' komt er niets in de pickwachtrij. De kolom code is daarom niet te wijzigen." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx("div", { className: "flex flex-wrap gap-2", children: _jsxs(Button, { variant: "outline", onClick: () => seed.mutate(), disabled: seed.isPending, children: [seed.isPending ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(RotateCcw, { className: "mr-2 h-4 w-4" })), "Standaardwaarden herstellen"] }) }), isLoading ? (_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), " Laden..."] })) : (_jsxs(_Fragment, { children: [_jsx(PillTabs, { label: "Referentiedata", value: tab, onChange: setTab, tabs: [
82
+ { id: "types", label: "Documentsoorten", count: types.length },
83
+ { id: "statussen", label: "Statussen", count: statussen.length },
84
+ ] }), tab === "types" && (_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("h3", { className: "font-semibold text-foreground", children: ["Documenttypes (", types.length, ")"] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setNieuw({ tabel: "types", code: "", naam: "" }), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Type toevoegen"] })] }), _jsx("div", { className: "overflow-x-auto", children: _jsxs(Table, { className: REF_TABLE, children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Code" }), _jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Kleur" }), _jsx(TableHead, { children: "Icoon" }), _jsx(TableHead, { children: "Prioriteit" }), _jsx(TableHead, { children: "Sortering" }), _jsx(TableHead, { children: "Actief" })] }) }), _jsx(TableBody, { children: types.map((t) => {
78
85
  const verplicht = verplichteTypes.includes(t.code);
79
86
  return (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-mono text-xs", children: t.code }), _jsx(TableCell, { children: _jsx(TextCell, { value: t.name, className: "w-40", onSave: (name) => saveType.mutate({ id: t.id, patch: { name } }) }) }), _jsx(TableCell, { children: _jsx(TextCell, { value: t.color ?? "", className: "w-28 font-mono text-xs", onSave: (color) => saveType.mutate({ id: t.id, patch: { color } }) }) }), _jsx(TableCell, { children: _jsx(TextCell, { value: t.icon ?? "", className: "w-32", onSave: (icon) => saveType.mutate({ id: t.id, patch: { icon } }) }) }), _jsx(TableCell, { children: _jsx(NumberCell, { value: t.priority, onSave: (priority) => saveType.mutate({ id: t.id, patch: { priority } }) }) }), _jsx(TableCell, { children: _jsx(NumberCell, { value: t.sort_order, onSave: (sort_order) => saveType.mutate({ id: t.id, patch: { sort_order } }) }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Switch, { checked: t.active, disabled: verplicht && t.active, onCheckedChange: (active) => saveType.mutate({ id: t.id, patch: { active } }) }), verplicht && (_jsx("span", { className: "text-xs text-muted-foreground", children: "Verplicht \u2014 kan niet uit" }))] }) })] }, t.id));
80
- }) })] }) })] }), _jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("h3", { className: "font-semibold text-foreground", children: ["Documentstatussen (", statussen.length, ")"] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setNieuw({ tabel: "statussen", code: "", naam: "" }), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Status toevoegen"] })] }), _jsx("div", { className: "overflow-x-auto", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Code" }), _jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Kleur" }), _jsx(TableHead, { children: "Sortering" }), _jsx(TableHead, { children: "Open" }), _jsx(TableHead, { children: "Eindstatus" }), _jsx(TableHead, { children: "Actief" })] }) }), _jsx(TableBody, { children: statussen.map((s) => {
87
+ }) })] }) })] })), tab === "statussen" && (_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("h3", { className: "font-semibold text-foreground", children: ["Documentstatussen (", statussen.length, ")"] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setNieuw({ tabel: "statussen", code: "", naam: "" }), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Status toevoegen"] })] }), _jsx("div", { className: "overflow-x-auto", children: _jsxs(Table, { className: REF_TABLE, children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Code" }), _jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Kleur" }), _jsx(TableHead, { children: "Sortering" }), _jsx(TableHead, { children: "Open" }), _jsx(TableHead, { children: "Eindstatus" }), _jsx(TableHead, { children: "Actief" })] }) }), _jsx(TableBody, { children: statussen.map((s) => {
81
88
  const verplicht = verplichteStatussen.includes(s.code);
82
89
  return (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-mono text-xs", children: s.code }), _jsx(TableCell, { children: _jsx(TextCell, { value: s.name, className: "w-40", onSave: (name) => saveStatus.mutate({ id: s.id, patch: { name } }) }) }), _jsx(TableCell, { children: _jsx(TextCell, { value: s.color ?? "", className: "w-28 font-mono text-xs", onSave: (color) => saveStatus.mutate({ id: s.id, patch: { color } }) }) }), _jsx(TableCell, { children: _jsx(NumberCell, { value: s.sort_order, onSave: (sort_order) => saveStatus.mutate({ id: s.id, patch: { sort_order } }) }) }), _jsx(TableCell, { children: _jsx(Switch, { checked: s.is_open, onCheckedChange: (is_open) => saveStatus.mutate({ id: s.id, patch: { is_open } }) }) }), _jsx(TableCell, { children: _jsx(Switch, { checked: s.is_terminal, onCheckedChange: (is_terminal) => saveStatus.mutate({ id: s.id, patch: { is_terminal } }) }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Switch, { checked: s.active, disabled: verplicht && s.active, onCheckedChange: (active) => saveStatus.mutate({ id: s.id, patch: { active } }) }), verplicht && (_jsx("span", { className: "text-xs text-muted-foreground", children: "Verplicht \u2014 kan niet uit" }))] }) })] }, s.id));
83
- }) })] }) })] })] })), nieuw && (_jsxs("div", { className: "space-y-3 rounded-md border p-4", children: [_jsxs("p", { className: "text-sm font-medium text-foreground", children: ["Nieuwe ", nieuw.tabel === "types" ? "documenttype" : "documentstatus"] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ref-code", children: "Code" }), _jsx(Input, { id: "ref-code", value: nieuw.code, onChange: (e) => setNieuw({ ...nieuw, code: e.target.value }), placeholder: "bijv. wagenlijst" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ref-naam", children: "Naam" }), _jsx(Input, { id: "ref-naam", value: nieuw.naam, onChange: (e) => setNieuw({ ...nieuw, naam: e.target.value }) })] })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { variant: "outline", onClick: () => setNieuw(null), children: "Annuleren" }), _jsxs(Button, { disabled: !nieuw.code.trim() || !nieuw.naam.trim() || addRow.isPending, onClick: () => addRow.mutate(nieuw), children: [addRow.isPending && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), " Toevoegen"] })] })] }))] })] }));
90
+ }) })] }) })] }))] })), nieuw && (_jsxs("div", { className: "space-y-3 rounded-md border p-4", children: [_jsxs("p", { className: "text-sm font-medium text-foreground", children: ["Nieuwe ", nieuw.tabel === "types" ? "documenttype" : "documentstatus"] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ref-code", children: "Code" }), _jsx(Input, { id: "ref-code", value: nieuw.code, onChange: (e) => setNieuw({ ...nieuw, code: e.target.value }), placeholder: "bijv. wagenlijst" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ref-naam", children: "Naam" }), _jsx(Input, { id: "ref-naam", value: nieuw.naam, onChange: (e) => setNieuw({ ...nieuw, naam: e.target.value }) })] })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { variant: "outline", onClick: () => setNieuw(null), children: "Annuleren" }), _jsxs(Button, { disabled: !nieuw.code.trim() || !nieuw.naam.trim() || addRow.isPending, onClick: () => addRow.mutate(nieuw), children: [addRow.isPending && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), " Toevoegen"] })] })] }))] })] }));
84
91
  }
@@ -4,5 +4,5 @@ export declare const STICKER_POLL = 15000;
4
4
  * karren van de order in één aanroep. Vult de cache van de losse onderdelen,
5
5
  * die met een slug zelf niet meer opvragen.
6
6
  */
7
- export declare function useCartStickerStates(cartIds: string[], slug: string | null): import("@tanstack/react-query").UseQueryResult<import("../lib/pickStickerBundle.js").CartStickerBundleItem[], Error>;
7
+ export declare function useCartStickerStates(cartIds: string[], slug: string | null): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../lib/pickStickerBundle.js").CartStickerBundleItem[]>, Error>;
8
8
  //# sourceMappingURL=useCartStickerStates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCartStickerStates.d.ts","sourceRoot":"","sources":["../../src/hooks/useCartStickerStates.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,qHA2B1E"}
1
+ {"version":3,"file":"useCartStickerStates.d.ts","sourceRoot":"","sources":["../../src/hooks/useCartStickerStates.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,8HA2B1E"}
@@ -1,15 +1,15 @@
1
- export declare function usePickCountries(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickCountry[], Error>;
2
- export declare function usePickStatuses(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickStatus[], Error>;
3
- export declare function usePickPrinters(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickPrinter[], Error>;
4
- export declare function usePickDocumentTypes(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickDocumentType[], Error>;
5
- export declare function usePickStationTypes(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickStationType[], Error>;
6
- export declare function usePickTasks(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickTask[], Error>;
7
- export declare function usePickStations(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickStation[], Error>;
1
+ export declare function usePickCountries(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickCountry[]>, Error>;
2
+ export declare function usePickStatuses(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickStatus[]>, Error>;
3
+ export declare function usePickPrinters(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickPrinter[]>, Error>;
4
+ export declare function usePickDocumentTypes(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickDocumentType[]>, Error>;
5
+ export declare function usePickStationTypes(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickStationType[]>, Error>;
6
+ export declare function usePickTasks(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickTask[]>, Error>;
7
+ export declare function usePickStations(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickStation[]>, Error>;
8
8
  /** Actieve printplekken uit de Layout maker. */
9
- export declare function usePickPrintPlekken(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickPrintPlek[], Error>;
9
+ export declare function usePickPrintPlekken(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickPrintPlek[]>, Error>;
10
10
  /** Koppelingen pickstation → printplek (beheerpagina). */
11
- export declare function useStationPrintPlekken(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickStationPrintPlekRow[], Error>;
11
+ export declare function useStationPrintPlekken(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickStationPrintPlekRow[]>, Error>;
12
12
  /** De printplek van één pickstation (ook in openbare pickschermen). */
13
- export declare function useStationPrintPlek(stationId?: string): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickStationPrintPlek | null, Error>;
14
- export declare function usePickScreens(stationId?: string): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickScreen[], Error>;
13
+ export declare function useStationPrintPlek(stationId?: string): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickStationPrintPlek | null>, Error>;
14
+ export declare function usePickScreens(stationId?: string): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickScreen[]>, Error>;
15
15
  //# sourceMappingURL=usePickConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePickConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,sFAE/B;AACD,wBAAgB,eAAe,qFAE9B;AACD,wBAAgB,eAAe,sFAE9B;AACD,wBAAgB,oBAAoB,2FAEnC;AACD,wBAAgB,mBAAmB,0FAElC;AACD,wBAAgB,YAAY,mFAE3B;AACD,wBAAgB,eAAe,sFAE9B;AACD,gDAAgD;AAChD,wBAAgB,mBAAmB,wFAElC;AACD,0DAA0D;AAC1D,wBAAgB,sBAAsB,kGAKrC;AACD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,mGAMrD;AAED,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,oFAKhD"}
1
+ {"version":3,"file":"usePickConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,+FAE/B;AACD,wBAAgB,eAAe,8FAE9B;AACD,wBAAgB,eAAe,+FAE9B;AACD,wBAAgB,oBAAoB,oGAEnC;AACD,wBAAgB,mBAAmB,mGAElC;AACD,wBAAgB,YAAY,4FAE3B;AACD,wBAAgB,eAAe,+FAE9B;AACD,gDAAgD;AAChD,wBAAgB,mBAAmB,iGAElC;AACD,0DAA0D;AAC1D,wBAAgB,sBAAsB,2GAKrC;AACD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,4GAMrD;AAED,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,6FAKhD"}
@@ -6,9 +6,9 @@ import { type PrintStatusResult } from "../lib/pickPrintStatus.js";
6
6
  */
7
7
  export declare function fetchPrintStatus(ids: string[], slug: string | null): Promise<PrintStatusResult>;
8
8
  export declare function usePickPrintStatus(ids: string[], slug: string | null, enabled?: boolean): {
9
- result: PrintStatusResult | null;
9
+ result: NoInfer<PrintStatusResult> | null;
10
10
  loading: boolean;
11
11
  inPrint: Set<string>;
12
- refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<PrintStatusResult, Error>>;
12
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<NoInfer<PrintStatusResult>, Error>>;
13
13
  };
14
14
  //# sourceMappingURL=usePickPrintStatus.d.ts.map
@@ -50,12 +50,12 @@ export declare function usePickHeartbeat(stationId?: string, screenId?: string |
50
50
  export declare function usePickCountryCounts(args: {
51
51
  stationId?: string;
52
52
  screenId?: string;
53
- }): import("@tanstack/react-query").UseQueryResult<Record<string, number>, Error>;
53
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<Record<string, number>>, Error>;
54
54
  /** Pickdagen waarop nog orders klaarstaan (vandaag en later). */
55
- export declare function usePickDays(enabled?: boolean): import("@tanstack/react-query").UseQueryResult<{
55
+ export declare function usePickDays(enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<{
56
56
  day: string;
57
57
  orders: number;
58
- }[], Error>;
58
+ }[]>, Error>;
59
59
  /** Zelfde station, scherm en pickdag (positie 2-4 van de wachtrij-sleutel). */
60
60
  export declare function sameQueueScope(a: readonly unknown[], b: readonly unknown[]): boolean;
61
61
  //# sourceMappingURL=usePickQueue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePickQueue.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAM9E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,YAS5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;;;;;;;IAuNG,sDAAsD;;;;;;IAMtD,gEAAgE;;IAEhE,4EAA4E;;IAE5E,6EAA6E;;;EAIhF;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;;EAuBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iFAOnF;AACD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,UAAO;;;YAQzC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAEpF"}
1
+ {"version":3,"file":"usePickQueue.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAM9E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,YAS5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;;;;;;;IAuNG,sDAAsD;;;;;;IAMtD,gEAAgE;;IAEhE,4EAA4E;;IAE5E,6EAA6E;;;EAIhF;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;;EAuBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,0FAOnF;AACD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,UAAO;;;aAQzC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAEpF"}
@@ -1,4 +1,4 @@
1
1
  export declare const PICK_REFERENCE_QUERY_KEY: readonly ["pick", "referenceData"];
2
2
  /** Eén bron voor de instellingenkaart en de waarschuwingsbanner. */
3
- export declare function usePickReferenceData(): import("@tanstack/react-query").UseQueryResult<import("../index.js").PickReferenceStatus, Error>;
3
+ export declare function usePickReferenceData(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../index.js").PickReferenceStatus>, Error>;
4
4
  //# sourceMappingURL=usePickReferenceData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePickReferenceData.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickReferenceData.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,oCAAqC,CAAC;AAE3E,oEAAoE;AACpE,wBAAgB,oBAAoB,4FAKnC"}
1
+ {"version":3,"file":"usePickReferenceData.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickReferenceData.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,oCAAqC,CAAC;AAE3E,oEAAoE;AACpE,wBAAgB,oBAAoB,qGAKnC"}
@@ -1,5 +1,5 @@
1
1
  // Geen project-URL of sleutel in module-code: de client komt van @flowselections/core (env-gebaseerd, dezelfde sessie als de shell).
2
2
  import { supabase as coreSupabase } from "@flowselections/core";
3
3
  // Import the supabase client like this:
4
- // import { supabase } from "./client.js";
4
+ // import { supabase } from "../../integrations/supabase/client.js";
5
5
  export const supabase = coreSupabase;
@@ -20,7 +20,7 @@ function createSupabaseAdminClient() {
20
20
  let _supabaseAdmin;
21
21
  // Server-side Supabase client with service role - bypasses RLS
22
22
  // SECURITY: Only use this for trusted server-side operations, never expose to client code
23
- // Import like: import { supabaseAdmin } from "./client.server.js";
23
+ // Import like: import { supabaseAdmin } from "../../integrations/supabase/client.server.js";
24
24
  export const supabaseAdmin = new Proxy({}, {
25
25
  get(_, prop, receiver) {
26
26
  if (!_supabaseAdmin)