@flowselections/floriday-voorraad 1.0.27 → 1.0.29

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 (127) hide show
  1. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +2 -1
  2. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  3. package/dist-lib/components/voorraad/ArtikelWizard.js +576 -324
  4. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +2 -1
  5. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  6. package/dist-lib/components/voorraad/EditArtikelPage.js +5 -4
  7. package/dist-lib/components/voorraad/FustenPage.d.ts +2 -0
  8. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -0
  9. package/dist-lib/components/voorraad/FustenPage.js +97 -0
  10. package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts +2 -0
  11. package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts.map +1 -0
  12. package/dist-lib/components/voorraad/LogistiekTakenCard.js +54 -0
  13. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +5 -0
  14. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -0
  15. package/dist-lib/components/voorraad/ProductCustomFieldsCard.js +65 -0
  16. package/dist-lib/components/voorraad/PublicatiesPage.d.ts +2 -0
  17. package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -0
  18. package/dist-lib/components/voorraad/PublicatiesPage.js +60 -0
  19. package/dist-lib/components/voorraad/PublishProgressCard.d.ts +12 -0
  20. package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -0
  21. package/dist-lib/components/voorraad/PublishProgressCard.js +30 -0
  22. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +10 -0
  23. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -0
  24. package/dist-lib/components/voorraad/PublishReadinessCard.js +12 -0
  25. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  26. package/dist-lib/components/voorraad/StockBulkButtons.js +65 -2
  27. package/dist-lib/components/voorraad/StockSyncStatus.d.ts +2 -0
  28. package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -0
  29. package/dist-lib/components/voorraad/StockSyncStatus.js +23 -0
  30. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  31. package/dist-lib/components/voorraad/ValidationOverviewTable.js +8 -2
  32. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -1
  33. package/dist-lib/components/voorraad/VoorraadDashboard.js +4 -1
  34. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  35. package/dist-lib/components/voorraad/VoorraadPage.js +5 -1
  36. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  37. package/dist-lib/components/voorraad/VoorraadTable.js +10 -2
  38. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +2 -0
  39. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -0
  40. package/dist-lib/components/voorraad/VoorraadVeldenCard.js +97 -0
  41. package/dist-lib/hooks/useFusten.d.ts +17 -0
  42. package/dist-lib/hooks/useFusten.d.ts.map +1 -0
  43. package/dist-lib/hooks/useFusten.js +81 -0
  44. package/dist-lib/hooks/useLocalTradeItems.d.ts +17 -7
  45. package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
  46. package/dist-lib/hooks/useLocalTradeItems.js +139 -37
  47. package/dist-lib/hooks/useLogisticsTasks.d.ts +13 -0
  48. package/dist-lib/hooks/useLogisticsTasks.d.ts.map +1 -0
  49. package/dist-lib/hooks/useLogisticsTasks.js +155 -0
  50. package/dist-lib/hooks/usePublishJob.d.ts +13 -0
  51. package/dist-lib/hooks/usePublishJob.d.ts.map +1 -0
  52. package/dist-lib/hooks/usePublishJob.js +67 -0
  53. package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts +2 -0
  54. package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts.map +1 -0
  55. package/dist-lib/hooks/useRegisterModuleBaseUrl.js +31 -0
  56. package/dist-lib/hooks/useStockSyncHealth.d.ts +8 -0
  57. package/dist-lib/hooks/useStockSyncHealth.d.ts.map +1 -0
  58. package/dist-lib/hooks/useStockSyncHealth.js +42 -0
  59. package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
  60. package/dist-lib/hooks/useTradeItemStock.js +37 -1
  61. package/dist-lib/hooks/useVoorraadCustomFields.d.ts +9 -0
  62. package/dist-lib/hooks/useVoorraadCustomFields.d.ts.map +1 -0
  63. package/dist-lib/hooks/useVoorraadCustomFields.js +26 -0
  64. package/dist-lib/index.d.ts +2 -0
  65. package/dist-lib/index.d.ts.map +1 -1
  66. package/dist-lib/index.js +9 -2
  67. package/dist-lib/integrations/supabase/auth-middleware.d.ts +8467 -4487
  68. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  69. package/dist-lib/integrations/supabase/client.d.ts +8467 -4487
  70. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  71. package/dist-lib/integrations/supabase/client.server.d.ts +8467 -4487
  72. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  73. package/dist-lib/integrations/supabase/types.d.ts +8714 -4631
  74. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  75. package/dist-lib/integrations/supabase/types.js +49 -0
  76. package/dist-lib/lib/floricode-required-features.functions.d.ts +8467 -4487
  77. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
  78. package/dist-lib/lib/floriday-client.d.ts +1 -1
  79. package/dist-lib/lib/floriday-client.d.ts.map +1 -1
  80. package/dist-lib/lib/floriday-client.js +1 -2
  81. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +8467 -4487
  82. package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
  83. package/dist-lib/lib/floriday-customer-offer.functions.js +14 -19
  84. package/dist-lib/lib/floriday-env.functions.d.ts +35712 -0
  85. package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -0
  86. package/dist-lib/lib/floriday-env.functions.js +16 -0
  87. package/dist-lib/lib/floriday-env.server.d.ts +12 -0
  88. package/dist-lib/lib/floriday-env.server.d.ts.map +1 -1
  89. package/dist-lib/lib/floriday-env.server.js +15 -2
  90. package/dist-lib/lib/floriday-gateway.functions.d.ts +77902 -40145
  91. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
  92. package/dist-lib/lib/floriday-gateway.functions.js +12 -3
  93. package/dist-lib/lib/floriday-readiness.server.d.ts +11 -0
  94. package/dist-lib/lib/floriday-readiness.server.d.ts.map +1 -0
  95. package/dist-lib/lib/floriday-readiness.server.js +43 -0
  96. package/dist-lib/lib/floriday-vbn-required.functions.d.ts +23115 -15155
  97. package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
  98. package/dist-lib/lib/floriday-warehouse.functions.d.ts +31362 -19422
  99. package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
  100. package/dist-lib/lib/floriday-warehouse.functions.js +3 -0
  101. package/dist-lib/lib/floriday-writes.functions.d.ts +23191 -15231
  102. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  103. package/dist-lib/lib/fusten.d.ts +87 -0
  104. package/dist-lib/lib/fusten.d.ts.map +1 -0
  105. package/dist-lib/lib/fusten.js +389 -0
  106. package/dist-lib/lib/logistics-engine.d.ts +63 -0
  107. package/dist-lib/lib/logistics-engine.d.ts.map +1 -0
  108. package/dist-lib/lib/logistics-engine.js +57 -0
  109. package/dist-lib/lib/logistics-events.d.ts +18 -0
  110. package/dist-lib/lib/logistics-events.d.ts.map +1 -0
  111. package/dist-lib/lib/logistics-events.js +61 -0
  112. package/dist-lib/lib/module-runtime-config.functions.d.ts +14 -0
  113. package/dist-lib/lib/module-runtime-config.functions.d.ts.map +1 -0
  114. package/dist-lib/lib/module-runtime-config.functions.js +107 -0
  115. package/dist-lib/lib/publish-errors.d.ts +37 -0
  116. package/dist-lib/lib/publish-errors.d.ts.map +1 -0
  117. package/dist-lib/lib/publish-errors.js +183 -0
  118. package/dist-lib/lib/publish-pipeline.d.ts +91 -0
  119. package/dist-lib/lib/publish-pipeline.d.ts.map +1 -0
  120. package/dist-lib/lib/publish-pipeline.js +212 -0
  121. package/dist-lib/lib/publish-readiness.d.ts +42 -0
  122. package/dist-lib/lib/publish-readiness.d.ts.map +1 -0
  123. package/dist-lib/lib/publish-readiness.js +102 -0
  124. package/dist-lib/lib/voorraad-custom-fields.d.ts +22 -0
  125. package/dist-lib/lib/voorraad-custom-fields.d.ts.map +1 -0
  126. package/dist-lib/lib/voorraad-custom-fields.js +71 -0
  127. package/package.json +2 -2
@@ -19,7 +19,10 @@ export function ValidationOverviewTable({ items, connectionId, onChanged, }) {
19
19
  const productId = item.productId ?? item.localId;
20
20
  if (!productId || !connectionId)
21
21
  return;
22
- const payload = item.raw?.floriday_payload ?? item.raw?.data ?? {};
22
+ const payload = item.raw?.custom_fields?.floriday_payload ??
23
+ item.raw?.floriday_payload ??
24
+ item.raw?.data ??
25
+ {};
23
26
  const v = validateDraftForPublish(payload);
24
27
  if (!v.ok) {
25
28
  toast.error("Nog niet compleet: " + v.missing.join(", "));
@@ -47,7 +50,10 @@ export function ValidationOverviewTable({ items, connectionId, onChanged, }) {
47
50
  return (_jsx("div", { className: "p-8 text-center text-sm text-muted-foreground", children: "Alle producten staan actief op Floriday." }));
48
51
  }
49
52
  return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left", children: _jsxs("tr", { children: [_jsx("th", { className: "p-3", children: "Artikelcode" }), _jsx("th", { className: "p-3", children: "Artikelnaam" }), _jsx("th", { className: "p-3", children: "Floriday-status" }), _jsx("th", { className: "p-3", children: "Ontbrekende Floriday-velden" }), _jsx("th", { className: "p-3 text-right", children: "Acties" })] }) }), _jsx("tbody", { children: rows.map((it) => {
50
- const payload = it.raw?.floriday_payload ?? it.raw?.data ?? {};
53
+ const payload = it.raw?.custom_fields?.floriday_payload ??
54
+ it.raw?.floriday_payload ??
55
+ it.raw?.data ??
56
+ {};
51
57
  const v = validateDraftForPublish(payload);
52
58
  return (_jsxs("tr", { className: "border-t align-top", children: [_jsx("td", { className: "p-3 font-mono text-xs", children: it.articleNumber || "—" }), _jsx("td", { className: "p-3", children: it.name }), _jsx("td", { className: "p-3", children: _jsx(Badge, { className: "bg-slate-500/15 text-slate-700 border-slate-500/30", children: "Niet actief op Floriday" }) }), _jsx("td", { className: "p-3", children: v.missing.length === 0 ? (_jsx("span", { className: "text-xs text-emerald-700", children: "Klaar om te activeren" })) : (_jsx("div", { className: "flex flex-wrap gap-1", children: v.missing.map((m) => (_jsx(Badge, { variant: "outline", className: "text-[10px]", children: m }, m))) })) }), _jsx("td", { className: "p-3", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
53
59
  const target = it.productId ?? it.localId ?? it.id;
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadDashboard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA4B3D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,+BAuDA"}
1
+ {"version":3,"file":"VoorraadDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadDashboard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA4B3D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,+BA0DA"}
@@ -23,7 +23,10 @@ export function VoorraadDashboard({ items, connectionId, }) {
23
23
  const missingFields = items.filter((i) => {
24
24
  if (i.floridayActive)
25
25
  return false;
26
- const payload = i.raw?.floriday_payload ?? i.raw?.data ?? {};
26
+ const payload = i.raw?.custom_fields?.floriday_payload ??
27
+ i.raw?.floriday_payload ??
28
+ i.raw?.data ??
29
+ {};
27
30
  return !validateDraftForPublish(payload).ok;
28
31
  }).length;
29
32
  // Nieuw sinds laatste import
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AA4FA,wBAAgB,YAAY,gCAkO3B"}
1
+ {"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AAkGA,wBAAgB,YAAY,gCA+O3B"}
@@ -4,7 +4,10 @@ import { Link } from "@tanstack/react-router";
4
4
  import { Button, Card, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@flowselections/core";
5
5
  import { AlertTriangle, CheckCircle2, FileText, PackageX, Plus, Search, } from "lucide-react";
6
6
  import { useFloridayConnection } from "../../hooks/useFloridayConnection";
7
+ import { useRegisterModuleBaseUrl } from "../../hooks/useRegisterModuleBaseUrl";
7
8
  import { useVoorraadData } from "../../hooks/useVoorraadData";
9
+ import { StockSyncStatus } from "./StockSyncStatus";
10
+ import { LogistiekTakenCard } from "./LogistiekTakenCard";
8
11
  import { ExcelExportButton } from "./ExcelExportButton";
9
12
  import { StockBulkButtons } from "./StockBulkButtons";
10
13
  import { VoorraadTable } from "./VoorraadTable";
@@ -33,6 +36,7 @@ function availableOf(i) {
33
36
  return i.availableQuantity ?? i.quantity ?? 0;
34
37
  }
35
38
  export function VoorraadPage() {
39
+ useRegisterModuleBaseUrl();
36
40
  const { activeId, error: connError } = useFloridayConnection();
37
41
  const { items, loading, error, reload } = useVoorraadData(activeId);
38
42
  const [search, setSearch] = useState("");
@@ -92,7 +96,7 @@ export function VoorraadPage() {
92
96
  { id: "out_of_stock", label: "Niet op voorraad", count: counts.outOfStock },
93
97
  { id: "below_min", label: "Onder minimum", count: counts.belowMin },
94
98
  ];
95
- return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsxs("header", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight truncate", children: "Voorraad" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Beheer je artikelen en voorraadniveaus." })] }), _jsx(Button, { asChild: true, disabled: !activeId, size: "sm", className: "shrink-0", children: _jsxs(Link, { to: "/voorraad/nieuw", children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "Artikel toevoegen"] }) })] }), connError && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/10 text-destructive p-3 text-sm", children: ["Floriday-connectie laden mislukt: ", connError] })), error && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/10 text-destructive p-3 text-sm", children: ["Voorraad laden mislukt: ", error] })), _jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4", children: [_jsx(KpiCard, { icon: _jsx(FileText, { className: "h-4 w-4" }), tone: "primary", label: "Artikelen", count: counts.total, active: stockFilter === "all", onClick: () => toggle("all") }), _jsx(KpiCard, { icon: _jsx(CheckCircle2, { className: "h-4 w-4" }), tone: "emerald", label: "Op voorraad", count: counts.inStock, active: stockFilter === "in_stock", onClick: () => toggle("in_stock") }), _jsx(KpiCard, { icon: _jsx(PackageX, { className: "h-4 w-4" }), tone: "rose", label: "Niet op voorraad", count: counts.outOfStock, active: stockFilter === "out_of_stock", onClick: () => toggle("out_of_stock") }), _jsx(KpiCard, { icon: _jsx(AlertTriangle, { className: "h-4 w-4" }), tone: "amber", label: "Onder minimum", count: counts.belowMin, active: stockFilter === "below_min", onClick: () => toggle("below_min") })] }), _jsxs(Card, { className: "overflow-hidden p-0", children: [_jsx("div", { className: "flex flex-wrap items-center gap-1 border-b px-4", children: TABS.map((t) => {
99
+ return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsxs("header", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight truncate", children: "Voorraad" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Beheer je artikelen en voorraadniveaus." })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsx(Link, { to: "/voorraad/publicaties", children: "Publicaties" }) }), _jsx(Button, { asChild: true, disabled: !activeId, size: "sm", children: _jsxs(Link, { to: "/voorraad/nieuw", children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "Artikel toevoegen"] }) })] })] }), _jsx(StockSyncStatus, {}), _jsx(LogistiekTakenCard, {}), connError && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/10 text-destructive p-3 text-sm", children: ["Floriday-connectie laden mislukt: ", connError] })), error && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/10 text-destructive p-3 text-sm", children: ["Voorraad laden mislukt: ", error] })), _jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4", children: [_jsx(KpiCard, { icon: _jsx(FileText, { className: "h-4 w-4" }), tone: "primary", label: "Artikelen", count: counts.total, active: stockFilter === "all", onClick: () => toggle("all") }), _jsx(KpiCard, { icon: _jsx(CheckCircle2, { className: "h-4 w-4" }), tone: "emerald", label: "Op voorraad", count: counts.inStock, active: stockFilter === "in_stock", onClick: () => toggle("in_stock") }), _jsx(KpiCard, { icon: _jsx(PackageX, { className: "h-4 w-4" }), tone: "rose", label: "Niet op voorraad", count: counts.outOfStock, active: stockFilter === "out_of_stock", onClick: () => toggle("out_of_stock") }), _jsx(KpiCard, { icon: _jsx(AlertTriangle, { className: "h-4 w-4" }), tone: "amber", label: "Onder minimum", count: counts.belowMin, active: stockFilter === "below_min", onClick: () => toggle("below_min") })] }), _jsxs(Card, { className: "overflow-hidden p-0", children: [_jsx("div", { className: "flex flex-wrap items-center gap-1 border-b px-4", children: TABS.map((t) => {
96
100
  const active = stockFilter === t.id;
97
101
  return (_jsxs("button", { type: "button", onClick: () => setStockFilter(t.id), className: `relative py-3 px-3 text-sm font-medium whitespace-nowrap transition-colors ${active
98
102
  ? "text-foreground"
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY3D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,+BA6IA"}
1
+ {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAmB3D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,+BAmKA"}
@@ -2,6 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useNavigate } from "@tanstack/react-router";
3
3
  import { Package } from "lucide-react";
4
4
  import { Badge } from "@flowselections/core";
5
+ import { useVoorraadCustomFields } from "../../hooks/useVoorraadCustomFields";
6
+ import { formatCustomValue } from "../../lib/voorraad-custom-fields";
5
7
  const columns = [
6
8
  { key: "quantity", label: "Liggend" },
7
9
  { key: "minQuantity", label: "Minimum" },
@@ -10,15 +12,21 @@ const columns = [
10
12
  { key: "incomingQuantity", label: "Inkomend" },
11
13
  { key: "economicQuantity", label: "Economisch" },
12
14
  ];
15
+ function customValue(item, key) {
16
+ const cf = item.raw?.custom_fields;
17
+ return cf && typeof cf === "object" ? cf[key] : undefined;
18
+ }
13
19
  export function VoorraadTable({ items, loading, }) {
14
20
  const navigate = useNavigate();
21
+ const { fields } = useVoorraadCustomFields();
22
+ const extraColumns = fields.filter((f) => f.show_in_columns);
15
23
  if (loading) {
16
24
  return _jsx("p", { className: "text-sm text-muted-foreground p-6", children: "Voorraad laden..." });
17
25
  }
18
26
  if (items.length === 0) {
19
27
  return (_jsx("p", { className: "text-sm text-muted-foreground p-6", children: "Geen producten gevonden voor deze connectie." }));
20
28
  }
21
- return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left", children: _jsxs("tr", { children: [_jsx("th", { className: "p-3 w-14" }), _jsx("th", { className: "p-3", children: "Product" }), _jsx("th", { className: "p-3", children: "Type" }), _jsx("th", { className: "p-3", children: "Artikelnummer" }), columns.map((c) => (_jsx("th", { className: "p-3 text-right whitespace-nowrap", children: c.label }, c.key)))] }) }), _jsx("tbody", { children: items.map((item) => {
29
+ return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left", children: _jsxs("tr", { children: [_jsx("th", { className: "p-3 w-14" }), _jsx("th", { className: "p-3", children: "Product" }), _jsx("th", { className: "p-3", children: "Type" }), _jsx("th", { className: "p-3", children: "Artikelnummer" }), columns.map((c) => (_jsx("th", { className: "p-3 text-right whitespace-nowrap", children: c.label }, c.key))), extraColumns.map((f) => (_jsx("th", { className: "p-3 whitespace-nowrap", children: f.field_label }, f.id)))] }) }), _jsx("tbody", { children: items.map((item) => {
22
30
  const low = item.minQuantity > 0 &&
23
31
  item.availableQuantity < item.minQuantity;
24
32
  const linkId = item.productId ?? item.localId ?? item.id;
@@ -41,6 +49,6 @@ export function VoorraadTable({ items, loading, }) {
41
49
  : "Niet online in Floriday", title: floriday
42
50
  ? "Online in Floriday"
43
51
  : "Niet online in Floriday", className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-background px-2 py-0.5 text-[11px] font-medium leading-none text-muted-foreground", children: [_jsx("span", { className: "h-1.5 w-1.5 rounded-full " +
44
- (floriday ? "bg-emerald-500" : "bg-red-500"), "aria-hidden": true }), _jsx("span", { children: "Floriday" })] })] }), low && (_jsx("div", { className: "text-xs text-destructive", children: "onder minimumvoorraad" }))] }), _jsx("td", { className: "p-3", children: item.itemType === "productgroep" ? (_jsx(Badge, { className: "bg-indigo-500/15 text-indigo-700 border-indigo-500/30", children: "Productgroep" })) : item.itemType === "samenstelling" ? (_jsx(Badge, { className: "bg-emerald-500/15 text-emerald-700 border-emerald-500/30", children: "Samenstelling" })) : (_jsx(Badge, { variant: "secondary", children: "Artikel" })) }), _jsx("td", { className: "p-3 font-mono text-xs", children: item.articleNumber || "—" }), columns.map((c) => (_jsx("td", { className: "p-3 text-right tabular-nums text-muted-foreground", children: Number(item[c.key] ?? 0) }, c.key)))] }, item.id));
52
+ (floriday ? "bg-emerald-500" : "bg-red-500"), "aria-hidden": true }), _jsx("span", { children: "Floriday" })] })] }), Boolean(customValue(item, "floriday_sync")?.dirty) && (_jsx("div", { className: "mt-1 inline-flex items-center rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-medium leading-none text-amber-800", title: "Opgeslagen in dit systeem, wacht nog op doorgifte naar Floriday", children: "Wacht op Floriday" })), low && (_jsx("div", { className: "text-xs text-destructive", children: "onder minimumvoorraad" }))] }), _jsx("td", { className: "p-3", children: item.itemType === "productgroep" ? (_jsx(Badge, { className: "bg-indigo-500/15 text-indigo-700 border-indigo-500/30", children: "Productgroep" })) : item.itemType === "samenstelling" ? (_jsx(Badge, { className: "bg-emerald-500/15 text-emerald-700 border-emerald-500/30", children: "Samenstelling" })) : (_jsx(Badge, { variant: "secondary", children: "Artikel" })) }), _jsx("td", { className: "p-3 font-mono text-xs", children: item.articleNumber || "—" }), columns.map((c) => (_jsx("td", { className: "p-3 text-right tabular-nums text-muted-foreground", children: Number(item[c.key] ?? 0) }, c.key))), extraColumns.map((f) => (_jsx("td", { className: "p-3 text-muted-foreground whitespace-nowrap", children: formatCustomValue(customValue(item, f.field_key)) }, f.id)))] }, item.id));
45
53
  }) })] }) }));
46
54
  }
@@ -0,0 +1,2 @@
1
+ export declare function VoorraadVeldenCard(): import("react").JSX.Element;
2
+ //# sourceMappingURL=VoorraadVeldenCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoorraadVeldenCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadVeldenCard.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,kBAAkB,gCAqOjC"}
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Checkbox, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, toast, } from "@flowselections/core";
4
+ import { Loader2, Plus, Trash2 } from "lucide-react";
5
+ import { useVoorraadCustomFields } from "../../hooks/useVoorraadCustomFields";
6
+ import { createVoorraadCustomField, deleteVoorraadCustomField, slugifyFieldKey, updateVoorraadCustomField, } from "../../lib/voorraad-custom-fields";
7
+ const TYPE_LABELS = {
8
+ text: "Tekst",
9
+ number: "Getal",
10
+ date: "Datum",
11
+ select: "Keuzelijst",
12
+ boolean: "Ja / nee",
13
+ };
14
+ export function VoorraadVeldenCard() {
15
+ const { fields, loading, reload } = useVoorraadCustomFields();
16
+ const [label, setLabel] = useState("");
17
+ const [type, setType] = useState("text");
18
+ const [options, setOptions] = useState("");
19
+ const [inTemplate, setInTemplate] = useState(false);
20
+ const [inColumns, setInColumns] = useState(false);
21
+ const [inDetail, setInDetail] = useState(true);
22
+ const [saving, setSaving] = useState(false);
23
+ const add = async () => {
24
+ const trimmed = label.trim();
25
+ if (!trimmed) {
26
+ toast.error("Geef het veld een naam");
27
+ return;
28
+ }
29
+ const key = slugifyFieldKey(trimmed);
30
+ if (!key) {
31
+ toast.error("Ongeldige veldnaam");
32
+ return;
33
+ }
34
+ if (fields.some((f) => f.field_key === key)) {
35
+ toast.error("Er bestaat al een veld met deze naam");
36
+ return;
37
+ }
38
+ setSaving(true);
39
+ try {
40
+ await createVoorraadCustomField({
41
+ field_key: key,
42
+ field_label: trimmed,
43
+ field_type: type,
44
+ options: type === "select"
45
+ ? options
46
+ .split(",")
47
+ .map((o) => o.trim())
48
+ .filter(Boolean)
49
+ : [],
50
+ show_in_template: inTemplate,
51
+ show_in_columns: inColumns,
52
+ show_in_detail: inDetail,
53
+ sort_order: fields.length,
54
+ });
55
+ setLabel("");
56
+ setOptions("");
57
+ setType("text");
58
+ setInTemplate(false);
59
+ setInColumns(false);
60
+ setInDetail(true);
61
+ await reload();
62
+ toast.success("Veld toegevoegd");
63
+ }
64
+ catch (e) {
65
+ toast.error(`Toevoegen mislukt: ${e.message}`);
66
+ }
67
+ finally {
68
+ setSaving(false);
69
+ }
70
+ };
71
+ const toggle = async (id, key, value) => {
72
+ try {
73
+ await updateVoorraadCustomField(id, { [key]: value });
74
+ await reload();
75
+ }
76
+ catch (e) {
77
+ toast.error(`Opslaan mislukt: ${e.message}`);
78
+ }
79
+ };
80
+ const remove = async (id, name) => {
81
+ if (!confirm(`Veld "${name}" verwijderen? Ingevulde waarden blijven bewaard.`))
82
+ return;
83
+ try {
84
+ await deleteVoorraadCustomField(id);
85
+ await reload();
86
+ toast.success("Veld verwijderd");
87
+ }
88
+ catch (e) {
89
+ toast.error(`Verwijderen mislukt: ${e.message}`);
90
+ }
91
+ };
92
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Voorraadvelden" }), _jsx(CardDescription, { children: "Maak eigen velden aan en bepaal per veld waar het zichtbaar is: in de Excel-template, als kolom in de voorraadlijst, en/of op de productpagina." })] }), _jsxs(CardContent, { className: "space-y-6", children: [_jsxs("div", { className: "grid gap-3 sm:grid-cols-[1fr_180px] items-end", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "veld-naam", children: "Veldnaam" }), _jsx(Input, { id: "veld-naam", value: label, onChange: (e) => setLabel(e.target.value), placeholder: "Bijv. Kweeklocatie" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { children: "Type" }), _jsxs(Select, { value: type, onValueChange: (v) => setType(v), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: Object.keys(TYPE_LABELS).map((t) => (_jsx(SelectItem, { value: t, children: TYPE_LABELS[t] }, t))) })] })] })] }), type === "select" && (_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "veld-opties", children: "Keuzes (komma-gescheiden)" }), _jsx(Input, { id: "veld-opties", value: options, onChange: (e) => setOptions(e.target.value), placeholder: "Kas 1, Kas 2, Buiten" })] })), _jsxs("div", { className: "flex flex-wrap gap-6", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: inTemplate, onCheckedChange: (c) => setInTemplate(c === true) }), "In Excel-template"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: inColumns, onCheckedChange: (c) => setInColumns(c === true) }), "Als voorraadkolom"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: inDetail, onCheckedChange: (c) => setInDetail(c === true) }), "Op productpagina"] })] }), _jsxs(Button, { onClick: add, disabled: saving, children: [saving ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Plus, { className: "mr-2 h-4 w-4" })), "Veld toevoegen"] }), _jsx("div", { className: "border-t pt-4", children: loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Velden laden\u2026" })) : fields.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen eigen voorraadvelden aangemaakt." })) : (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "text-left text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "py-2", children: "Veld" }), _jsx("th", { className: "py-2", children: "Type" }), _jsx("th", { className: "py-2 text-center", children: "Template" }), _jsx("th", { className: "py-2 text-center", children: "Kolom" }), _jsx("th", { className: "py-2 text-center", children: "Productpagina" }), _jsx("th", { className: "py-2" })] }) }), _jsx("tbody", { children: fields.map((f) => (_jsxs("tr", { className: "border-t", children: [_jsxs("td", { className: "py-2", children: [_jsx("div", { className: "font-medium text-foreground", children: f.field_label }), _jsx("div", { className: "font-mono text-xs text-muted-foreground", children: f.field_key })] }), _jsx("td", { className: "py-2", children: TYPE_LABELS[f.field_type] ?? f.field_type }), [
93
+ "show_in_template",
94
+ "show_in_columns",
95
+ "show_in_detail",
96
+ ].map((k) => (_jsx("td", { className: "py-2 text-center", children: _jsx(Checkbox, { checked: f[k], onCheckedChange: (c) => toggle(f.id, k, c === true), "aria-label": `${f.field_label} – ${k}` }) }, k))), _jsx("td", { className: "py-2 text-right", children: _jsx(Button, { variant: "ghost", size: "sm", onClick: () => remove(f.id, f.field_label), "aria-label": `Verwijder ${f.field_label}`, children: _jsx(Trash2, { className: "h-4 w-4 text-destructive" }) }) })] }, f.id))) })] }) })) })] })] }));
97
+ }
@@ -0,0 +1,17 @@
1
+ import { type FustType } from "../lib/fusten";
2
+ /**
3
+ * Fustenvoorraad, altijd afgeleid van de beladingen van de producten.
4
+ * Bij het openen én bij elke wijziging aan producten/beladingen wordt
5
+ * automatisch gesynchroniseerd.
6
+ */
7
+ export declare function useFusten(connectionId: string | null): {
8
+ items: FustType[];
9
+ loading: boolean;
10
+ syncing: boolean;
11
+ error: string | null;
12
+ reload: () => Promise<void>;
13
+ sync: () => Promise<void>;
14
+ adjust: (fustTypeId: string, delta: number, note?: string) => Promise<void>;
15
+ patch: (id: string, values: Partial<Pick<FustType, "name" | "minimum_stock" | "notes" | "length_mm" | "width_mm" | "height_mm">>) => Promise<void>;
16
+ };
17
+ //# sourceMappingURL=useFusten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFusten.d.ts","sourceRoot":"","sources":["../../src/hooks/useFusten.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;;;;;;;yBAwE9B,MAAM,SAAS,MAAM,SAAS,MAAM;gBAQ5C,MAAM,UAAU,OAAO,CAChC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,CAC5F;EAQJ"}
@@ -0,0 +1,81 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { supabase } from "../integrations/supabase/client";
3
+ import { adjustFustStock, fetchFustTypes, syncFustTypes, updateFustType, } from "../lib/fusten";
4
+ /**
5
+ * Fustenvoorraad, altijd afgeleid van de beladingen van de producten.
6
+ * Bij het openen én bij elke wijziging aan producten/beladingen wordt
7
+ * automatisch gesynchroniseerd.
8
+ */
9
+ export function useFusten(connectionId) {
10
+ const [items, setItems] = useState([]);
11
+ const [loading, setLoading] = useState(true);
12
+ const [syncing, setSyncing] = useState(false);
13
+ const [error, setError] = useState(null);
14
+ const syncingRef = useRef(false);
15
+ const load = useCallback(async () => {
16
+ try {
17
+ setItems(await fetchFustTypes(connectionId));
18
+ setError(null);
19
+ }
20
+ catch (e) {
21
+ setError(e.message);
22
+ }
23
+ finally {
24
+ setLoading(false);
25
+ }
26
+ }, [connectionId]);
27
+ const sync = useCallback(async () => {
28
+ if (syncingRef.current)
29
+ return;
30
+ syncingRef.current = true;
31
+ setSyncing(true);
32
+ try {
33
+ await syncFustTypes(connectionId);
34
+ setError(null);
35
+ }
36
+ catch (e) {
37
+ setError(e.message);
38
+ }
39
+ finally {
40
+ syncingRef.current = false;
41
+ setSyncing(false);
42
+ await load();
43
+ }
44
+ }, [connectionId, load]);
45
+ useEffect(() => {
46
+ setLoading(true);
47
+ void (async () => {
48
+ await load();
49
+ await sync();
50
+ })();
51
+ }, [load, sync]);
52
+ useEffect(() => {
53
+ const channel = supabase
54
+ .channel(`fusten-${connectionId ?? "none"}`)
55
+ .on("postgres_changes", { event: "*", schema: "public", table: "fust_types" }, () => {
56
+ void load();
57
+ })
58
+ .on("postgres_changes", { event: "*", schema: "public", table: "fust_stock_mutations" }, () => {
59
+ void load();
60
+ })
61
+ .on("postgres_changes", { event: "*", schema: "public", table: "products" }, () => {
62
+ void sync();
63
+ })
64
+ .on("postgres_changes", { event: "*", schema: "public", table: "floriday_trade_items_cache" }, () => {
65
+ void sync();
66
+ })
67
+ .subscribe();
68
+ return () => {
69
+ supabase.removeChannel(channel);
70
+ };
71
+ }, [connectionId, load, sync]);
72
+ const adjust = useCallback(async (fustTypeId, delta, note) => {
73
+ await adjustFustStock({ fustTypeId, delta, note: note ?? null });
74
+ await load();
75
+ }, [load]);
76
+ const patch = useCallback(async (id, values) => {
77
+ await updateFustType(id, values);
78
+ await load();
79
+ }, [load]);
80
+ return { items, loading, syncing, error, reload: load, sync, adjust, patch };
81
+ }
@@ -2,7 +2,7 @@ import type { WizardData } from "../lib/floriday-payload";
2
2
  import { type FloridayLinkStatus, type TradeItem } from "../lib/floriday-client";
3
3
  /**
4
4
  * Concept/Draft is verwijderd. Alle "lokale trade items" leven nu als volwaardige rijen in
5
- * `public.products` met de Floriday-velden in `floriday_payload`. Dit bestand behoudt de
5
+ * `public.products` met de Floriday-velden in `custom_fields.floriday_payload`. Dit bestand behoudt de
6
6
  * oorspronkelijke API-namen zodat bestaande callers blijven werken, maar leest en schrijft
7
7
  * uitsluitend op `products`. `trade_item_drafts` is read-only (trigger blokkeert writes).
8
8
  */
@@ -37,19 +37,29 @@ export interface DraftMeta {
37
37
  lastFloridaySyncAt?: string | null;
38
38
  source?: "manual" | "excel_import";
39
39
  }
40
- /**
41
- * Slaat Floriday-velden op in `products.floriday_payload`. Als `id` ontbreekt maken we een
42
- * nieuw product aan (met minimale ERP-velden uit de payload). Nooit een concept-rij.
43
- */
40
+ /** Status van de doorgifte naar Floriday, opgeslagen in `custom_fields.floriday_sync`. */
41
+ export interface LocalSyncStatus {
42
+ /** true = lokaal opgeslagen maar (nog) niet bevestigd door Floriday. */
43
+ dirty: boolean;
44
+ last_attempt_at?: string | null;
45
+ last_error?: string | null;
46
+ last_synced_at?: string | null;
47
+ }
48
+ export declare function readLocalSyncStatus(customFields: unknown): LocalSyncStatus | null;
44
49
  export declare function upsertLocalTradeItem(params: {
45
50
  id?: string;
46
51
  connectionId: string;
47
52
  data: WizardData;
48
53
  meta?: DraftMeta;
54
+ /** Koppel/maak de lokale rij voor een artikel dat alleen in Floriday bestaat. */
55
+ floridayTradeItemId?: string | null;
56
+ sync?: LocalSyncStatus;
49
57
  }): Promise<string>;
58
+ /** Zet alleen de sync-status bij, zonder de payload te herschrijven. */
59
+ export declare function markLocalSyncStatus(productRowId: string, status: LocalSyncStatus): Promise<void>;
50
60
  /**
51
- * Legacy API. Alleen meta-velden die vandaag nog op `products` bestaan (`floriday_active`,
52
- * `floriday_trade_item_id`) worden gepersisteerd; overige velden worden stilzwijgend genegeerd
61
+ * Legacy API. Alleen meta-velden die vandaag nog op `products` bestaan (`floriday_trade_item_id`
62
+ * en `custom_fields.floriday_id`) worden gepersisteerd; overige velden worden stilzwijgend genegeerd
53
63
  * omdat het draft-model verdwenen is.
54
64
  */
55
65
  export declare function updateDraftMeta(id: string, meta: DraftMeta): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"useLocalTradeItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocalTradeItems.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGvG;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA2DD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;;;;EA0B9D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAsBrF;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ElB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
1
+ {"version":3,"file":"useLocalTradeItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocalTradeItems.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGvG;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAwED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;;;;EA0B9D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA4BrF;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;CACpC;AAED,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAWjF;AAqBD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqGlB;AAED,wEAAwE;AACxE,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAGD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}