@flowselections/floriday-voorraad 1.0.155 → 1.0.157

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 (249) hide show
  1. package/dist-lib/components/TemplatePage.d.ts +2 -0
  2. package/dist-lib/components/TemplatePage.d.ts.map +1 -0
  3. package/dist-lib/components/TemplatePage.js +4 -0
  4. package/dist-lib/components/fs-ui/DataTable.d.ts +1 -1
  5. package/dist-lib/components/fs-ui/DataTable.d.ts.map +1 -1
  6. package/dist-lib/components/fs-ui/EmptyState.d.ts +1 -1
  7. package/dist-lib/components/fs-ui/EmptyState.d.ts.map +1 -1
  8. package/dist-lib/components/fs-ui/FilterChips.d.ts +1 -1
  9. package/dist-lib/components/fs-ui/FilterChips.d.ts.map +1 -1
  10. package/dist-lib/components/fs-ui/FilterPanel.d.ts +2 -2
  11. package/dist-lib/components/fs-ui/FilterPanel.d.ts.map +1 -1
  12. package/dist-lib/components/fs-ui/FiltersButton.d.ts +1 -1
  13. package/dist-lib/components/fs-ui/FiltersButton.d.ts.map +1 -1
  14. package/dist-lib/components/fs-ui/HeaderButton.d.ts +2 -2
  15. package/dist-lib/components/fs-ui/HeaderButton.d.ts.map +1 -1
  16. package/dist-lib/components/fs-ui/HoverTip.d.ts +1 -1
  17. package/dist-lib/components/fs-ui/HoverTip.d.ts.map +1 -1
  18. package/dist-lib/components/fs-ui/InlineAlert.d.ts +1 -1
  19. package/dist-lib/components/fs-ui/InlineAlert.d.ts.map +1 -1
  20. package/dist-lib/components/fs-ui/KpiRow.d.ts +1 -1
  21. package/dist-lib/components/fs-ui/KpiRow.d.ts.map +1 -1
  22. package/dist-lib/components/fs-ui/KpiTile.d.ts +1 -1
  23. package/dist-lib/components/fs-ui/KpiTile.d.ts.map +1 -1
  24. package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts +1 -1
  25. package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts.map +1 -1
  26. package/dist-lib/components/fs-ui/NoticeBar.d.ts +1 -1
  27. package/dist-lib/components/fs-ui/NoticeBar.d.ts.map +1 -1
  28. package/dist-lib/components/fs-ui/PageHeader.d.ts +1 -1
  29. package/dist-lib/components/fs-ui/PageHeader.d.ts.map +1 -1
  30. package/dist-lib/components/fs-ui/Pagination.d.ts +1 -1
  31. package/dist-lib/components/fs-ui/Pagination.d.ts.map +1 -1
  32. package/dist-lib/components/fs-ui/PillTabs.d.ts +1 -1
  33. package/dist-lib/components/fs-ui/PillTabs.d.ts.map +1 -1
  34. package/dist-lib/components/fs-ui/RowMenu.d.ts +1 -1
  35. package/dist-lib/components/fs-ui/RowMenu.d.ts.map +1 -1
  36. package/dist-lib/components/fs-ui/SearchInput.d.ts +1 -1
  37. package/dist-lib/components/fs-ui/SearchInput.d.ts.map +1 -1
  38. package/dist-lib/components/fs-ui/ShortcutHelp.d.ts +1 -1
  39. package/dist-lib/components/fs-ui/ShortcutHelp.d.ts.map +1 -1
  40. package/dist-lib/components/fs-ui/StatusIcon.d.ts +1 -1
  41. package/dist-lib/components/fs-ui/StatusIcon.d.ts.map +1 -1
  42. package/dist-lib/components/fs-ui/TableSkeleton.d.ts +1 -1
  43. package/dist-lib/components/fs-ui/TableSkeleton.d.ts.map +1 -1
  44. package/dist-lib/components/fs-ui/Toolbar.d.ts +1 -1
  45. package/dist-lib/components/fs-ui/Toolbar.d.ts.map +1 -1
  46. package/dist-lib/components/fs-ui/UpdatedAt.d.ts +1 -1
  47. package/dist-lib/components/fs-ui/UpdatedAt.d.ts.map +1 -1
  48. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
  49. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
  50. package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
  51. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +1 -1
  52. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
  53. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
  54. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
  55. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
  56. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  57. package/dist-lib/components/voorraad/CollapsibleText.d.ts +1 -1
  58. package/dist-lib/components/voorraad/CollapsibleText.d.ts.map +1 -1
  59. package/dist-lib/components/voorraad/ConnectionBadge.d.ts +6 -0
  60. package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -0
  61. package/dist-lib/components/voorraad/ConnectionBadge.js +12 -0
  62. package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
  63. package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
  64. package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
  65. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
  66. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  67. package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
  68. package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
  69. package/dist-lib/components/voorraad/FloridayConnectionNotice.d.ts +1 -1
  70. package/dist-lib/components/voorraad/FloridayConnectionNotice.d.ts.map +1 -1
  71. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
  72. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
  73. package/dist-lib/components/voorraad/FloridayLoadCarriers.d.ts +1 -1
  74. package/dist-lib/components/voorraad/FloridayLoadCarriers.d.ts.map +1 -1
  75. package/dist-lib/components/voorraad/FloridaySentCard.d.ts +1 -1
  76. package/dist-lib/components/voorraad/FloridaySentCard.d.ts.map +1 -1
  77. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +4 -0
  78. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -0
  79. package/dist-lib/components/voorraad/FloridayStatusBadge.js +8 -0
  80. package/dist-lib/components/voorraad/FloridayTakeoverPanel.d.ts +2 -2
  81. package/dist-lib/components/voorraad/FloridayTakeoverPanel.d.ts.map +1 -1
  82. package/dist-lib/components/voorraad/FustAdministratie.d.ts +2 -2
  83. package/dist-lib/components/voorraad/FustAdministratie.d.ts.map +1 -1
  84. package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
  85. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
  86. package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +1 -1
  87. package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
  88. package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +1 -1
  89. package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
  90. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts +1 -1
  91. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts.map +1 -1
  92. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +2 -0
  93. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -0
  94. package/dist-lib/components/voorraad/ModuleHealthCard.js +40 -0
  95. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
  96. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
  97. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
  98. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
  99. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
  100. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
  101. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
  102. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
  103. package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
  104. package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
  105. package/dist-lib/components/voorraad/ProductSalePriceField.d.ts +2 -2
  106. package/dist-lib/components/voorraad/ProductSalePriceField.d.ts.map +1 -1
  107. package/dist-lib/components/voorraad/ProductStructureCard.d.ts +2 -2
  108. package/dist-lib/components/voorraad/ProductStructureCard.d.ts.map +1 -1
  109. package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
  110. package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
  111. package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
  112. package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
  113. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
  114. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
  115. package/dist-lib/components/voorraad/Sneltoetsen.d.ts +2 -2
  116. package/dist-lib/components/voorraad/Sneltoetsen.d.ts.map +1 -1
  117. package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
  118. package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
  119. package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
  120. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  121. package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
  122. package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
  123. package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
  124. package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
  125. package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
  126. package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
  127. package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
  128. package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
  129. package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts +1 -1
  130. package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts.map +1 -1
  131. package/dist-lib/components/voorraad/TelmomentButton.d.ts +1 -1
  132. package/dist-lib/components/voorraad/TelmomentButton.d.ts.map +1 -1
  133. package/dist-lib/components/voorraad/TrayStickerCard.d.ts +1 -1
  134. package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -1
  135. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
  136. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  137. package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
  138. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  139. package/dist-lib/components/voorraad/VoorraadBeheerCard.d.ts +1 -1
  140. package/dist-lib/components/voorraad/VoorraadBeheerCard.d.ts.map +1 -1
  141. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +10 -0
  142. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -0
  143. package/dist-lib/components/voorraad/VoorraadDashboard.js +53 -0
  144. package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
  145. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  146. package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
  147. package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
  148. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
  149. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  150. package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts +1 -1
  151. package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts.map +1 -1
  152. package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
  153. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  154. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
  155. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
  156. package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts +1 -1
  157. package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts.map +1 -1
  158. package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts +1 -1
  159. package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts.map +1 -1
  160. package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts +1 -1
  161. package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts.map +1 -1
  162. package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts +1 -1
  163. package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts.map +1 -1
  164. package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts +2 -2
  165. package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts.map +1 -1
  166. package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts +2 -2
  167. package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts.map +1 -1
  168. package/dist-lib/integrations/supabase/client.js +1 -1
  169. package/dist-lib/integrations/supabase/client.server.js +1 -1
  170. package/dist-lib/lib/__tests__/floricode-required-features.test.js +3 -7
  171. package/dist-lib/lib/floriday-field-sources.d.ts +18 -0
  172. package/dist-lib/lib/floriday-field-sources.d.ts.map +1 -0
  173. package/dist-lib/lib/floriday-field-sources.js +45 -0
  174. package/dist-lib/lib/floriday-schema-to-zod.d.ts +9 -0
  175. package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +1 -0
  176. package/dist-lib/lib/floriday-schema-to-zod.js +53 -0
  177. package/dist-lib/lib/merge-products.d.ts +8 -0
  178. package/dist-lib/lib/merge-products.d.ts.map +1 -0
  179. package/dist-lib/lib/merge-products.js +17 -0
  180. package/dist-lib/lib/module-health.functions.d.ts +53497 -0
  181. package/dist-lib/lib/module-health.functions.d.ts.map +1 -0
  182. package/dist-lib/lib/module-health.functions.js +261 -0
  183. package/dist-lib/lib/validationSchemas.d.ts +15 -0
  184. package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
  185. package/dist-lib/lib/validationSchemas.js +25 -0
  186. package/dist-lib/server-hooks/floriday-stock-reconcile.d.ts.map +1 -1
  187. package/dist-lib/server-hooks/floriday-stock-reconcile.js +14 -1
  188. package/package.json +2 -2
  189. package/sql/floriday-voorraad-schema.sql +13 -27
  190. package/dist-lib/components/voorraad/__tests__/count-stock-free.test.d.ts +0 -2
  191. package/dist-lib/components/voorraad/__tests__/count-stock-free.test.d.ts.map +0 -1
  192. package/dist-lib/components/voorraad/__tests__/count-stock-free.test.js +0 -12
  193. package/dist-lib/lib/__tests__/article-code.test.d.ts +0 -2
  194. package/dist-lib/lib/__tests__/article-code.test.d.ts.map +0 -1
  195. package/dist-lib/lib/__tests__/article-code.test.js +0 -11
  196. package/dist-lib/lib/__tests__/erp-test-123.test.d.ts +0 -2
  197. package/dist-lib/lib/__tests__/erp-test-123.test.d.ts.map +0 -1
  198. package/dist-lib/lib/__tests__/erp-test-123.test.js +0 -43
  199. package/dist-lib/lib/__tests__/floriday-customer-offers.test.d.ts +0 -2
  200. package/dist-lib/lib/__tests__/floriday-customer-offers.test.d.ts.map +0 -1
  201. package/dist-lib/lib/__tests__/floriday-customer-offers.test.js +0 -36
  202. package/dist-lib/lib/__tests__/floriday-fetch-status.test.d.ts +0 -2
  203. package/dist-lib/lib/__tests__/floriday-fetch-status.test.d.ts.map +0 -1
  204. package/dist-lib/lib/__tests__/floriday-fetch-status.test.js +0 -25
  205. package/dist-lib/lib/__tests__/floriday-write-mode.test.d.ts +0 -2
  206. package/dist-lib/lib/__tests__/floriday-write-mode.test.d.ts.map +0 -1
  207. package/dist-lib/lib/__tests__/floriday-write-mode.test.js +0 -40
  208. package/dist-lib/lib/__tests__/fust-dimensions.test.d.ts +0 -2
  209. package/dist-lib/lib/__tests__/fust-dimensions.test.d.ts.map +0 -1
  210. package/dist-lib/lib/__tests__/fust-dimensions.test.js +0 -27
  211. package/dist-lib/lib/__tests__/load-carriers.test.d.ts +0 -2
  212. package/dist-lib/lib/__tests__/load-carriers.test.d.ts.map +0 -1
  213. package/dist-lib/lib/__tests__/load-carriers.test.js +0 -15
  214. package/dist-lib/lib/__tests__/mirror-products.test.d.ts +0 -2
  215. package/dist-lib/lib/__tests__/mirror-products.test.d.ts.map +0 -1
  216. package/dist-lib/lib/__tests__/mirror-products.test.js +0 -13
  217. package/dist-lib/lib/__tests__/product-packings.test.d.ts +0 -2
  218. package/dist-lib/lib/__tests__/product-packings.test.d.ts.map +0 -1
  219. package/dist-lib/lib/__tests__/product-packings.test.js +0 -42
  220. package/dist-lib/lib/__tests__/publish-114.test.d.ts +0 -2
  221. package/dist-lib/lib/__tests__/publish-114.test.d.ts.map +0 -1
  222. package/dist-lib/lib/__tests__/publish-114.test.js +0 -31
  223. package/dist-lib/lib/__tests__/publish-packing-block.test.d.ts +0 -2
  224. package/dist-lib/lib/__tests__/publish-packing-block.test.d.ts.map +0 -1
  225. package/dist-lib/lib/__tests__/publish-packing-block.test.js +0 -14
  226. package/dist-lib/lib/__tests__/release-130.test.d.ts +0 -2
  227. package/dist-lib/lib/__tests__/release-130.test.d.ts.map +0 -1
  228. package/dist-lib/lib/__tests__/release-130.test.js +0 -103
  229. package/dist-lib/lib/__tests__/release-134.test.d.ts +0 -2
  230. package/dist-lib/lib/__tests__/release-134.test.d.ts.map +0 -1
  231. package/dist-lib/lib/__tests__/release-134.test.js +0 -50
  232. package/dist-lib/lib/__tests__/release-136.test.d.ts +0 -2
  233. package/dist-lib/lib/__tests__/release-136.test.d.ts.map +0 -1
  234. package/dist-lib/lib/__tests__/release-136.test.js +0 -36
  235. package/dist-lib/lib/__tests__/release-140.test.d.ts +0 -2
  236. package/dist-lib/lib/__tests__/release-140.test.d.ts.map +0 -1
  237. package/dist-lib/lib/__tests__/release-140.test.js +0 -42
  238. package/dist-lib/lib/__tests__/request-guard.test.d.ts +0 -2
  239. package/dist-lib/lib/__tests__/request-guard.test.d.ts.map +0 -1
  240. package/dist-lib/lib/__tests__/request-guard.test.js +0 -50
  241. package/dist-lib/lib/__tests__/stock-save.test.d.ts +0 -2
  242. package/dist-lib/lib/__tests__/stock-save.test.d.ts.map +0 -1
  243. package/dist-lib/lib/__tests__/stock-save.test.js +0 -35
  244. package/dist-lib/lib/__tests__/stock-scope.test.d.ts +0 -2
  245. package/dist-lib/lib/__tests__/stock-scope.test.d.ts.map +0 -1
  246. package/dist-lib/lib/__tests__/stock-scope.test.js +0 -44
  247. package/dist-lib/server-hooks/__tests__/trade-item-photo.test.d.ts +0 -2
  248. package/dist-lib/server-hooks/__tests__/trade-item-photo.test.d.ts.map +0 -1
  249. package/dist-lib/server-hooks/__tests__/trade-item-photo.test.js +0 -19
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ import { Card } from "@flowselections/core";
4
+ import { validateDraftForPublish } from "../../lib/floriday-import-validator.js";
5
+ function Stat({ label, value, tone = "default", }) {
6
+ const toneCls = tone === "danger"
7
+ ? "text-destructive"
8
+ : tone === "warn"
9
+ ? "text-amber-600"
10
+ : tone === "good"
11
+ ? "text-emerald-600"
12
+ : "text-foreground";
13
+ return (_jsxs("div", { children: [_jsx("div", { className: "text-xs text-muted-foreground", children: label }), _jsx("div", { className: `text-2xl font-semibold tabular-nums ${toneCls}`, children: value })] }));
14
+ }
15
+ /**
16
+ * Producten zijn altijd volwaardig. De dashboard-statistieken tonen alleen of ze op
17
+ * Floriday actief zijn — geen concept-status meer.
18
+ */
19
+ export function VoorraadDashboard({ items, connectionId, }) {
20
+ const total = items.length;
21
+ const active = items.filter((i) => i.floridayActive).length;
22
+ const inactive = total - active;
23
+ const missingFields = items.filter((i) => {
24
+ if (i.floridayActive)
25
+ return false;
26
+ const payload = i.raw?.custom_fields?.floriday_payload ??
27
+ i.raw?.floriday_payload ??
28
+ i.raw?.data ??
29
+ {};
30
+ return !validateDraftForPublish(payload).ok;
31
+ }).length;
32
+ // Nieuw sinds laatste import
33
+ let lastImport = null;
34
+ try {
35
+ if (connectionId) {
36
+ const s = localStorage.getItem(`voorraad_last_import_${connectionId}`);
37
+ if (s)
38
+ lastImport = new Date(s);
39
+ }
40
+ }
41
+ catch {
42
+ /* ignore */
43
+ }
44
+ const newSinceImport = lastImport
45
+ ? items.filter((i) => {
46
+ const raw = i.raw;
47
+ const src = raw?.source ?? raw?.data?.source;
48
+ const created = raw?.created_at ? new Date(raw.created_at) : null;
49
+ return src === "excel_import" && created && created >= lastImport;
50
+ }).length
51
+ : 0;
52
+ return (_jsxs(Card, { className: "p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3 mb-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium", children: "Voorraad-overzicht" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Alle producten zijn volwaardig; alleen de Floriday-activatie verschilt." })] }), _jsx(Link, { to: "/voorraad/validatie", className: "text-xs text-primary hover:underline", children: "Producten zonder Floriday-activatie \u2192" })] }), _jsxs("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4", children: [_jsx(Stat, { label: "Producten", value: total }), _jsx(Stat, { label: "Actief op Floriday", value: active, tone: "good" }), _jsx(Stat, { label: "Niet actief op Floriday", value: inactive }), _jsx(Stat, { label: "Ontbrekende Floriday-velden", value: missingFields, tone: "warn" }), _jsx(Stat, { label: "Nieuw sinds import", value: newSinceImport })] })] }));
53
+ }
@@ -1,3 +1,3 @@
1
1
  export { countStock } from "../../lib/count-stock.js";
2
- export declare function VoorraadPage(): import("react").JSX.Element;
2
+ export declare function VoorraadPage(): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=VoorraadPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AA2EA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAsDnD,wBAAgB,YAAY,gCA+M3B"}
1
+ {"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AA2EA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAsDnD,wBAAgB,YAAY,4CA+M3B"}
@@ -6,5 +6,5 @@ export interface VoorraadPaginationProps {
6
6
  onPageChange: (page: number) => void;
7
7
  onPageSizeChange: (size: number) => void;
8
8
  }
9
- export declare function VoorraadPagination({ total, page, pageSize, pageSizeOptions, onPageChange, onPageSizeChange, }: VoorraadPaginationProps): import("react").JSX.Element;
9
+ export declare function VoorraadPagination({ total, page, pageSize, pageSizeOptions, onPageChange, onPageSizeChange, }: VoorraadPaginationProps): import("react/jsx-runtime").JSX.Element;
10
10
  //# sourceMappingURL=VoorraadPagination.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadPagination.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPagination.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,eAAmC,EACnC,YAAY,EACZ,gBAAgB,GACjB,EAAE,uBAAuB,+BAuDzB"}
1
+ {"version":3,"file":"VoorraadPagination.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPagination.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,eAAmC,EACnC,YAAY,EACZ,gBAAgB,GACjB,EAAE,uBAAuB,2CAuDzB"}
@@ -4,6 +4,6 @@ interface Props {
4
4
  draftId?: string | null;
5
5
  productId?: string | null;
6
6
  }
7
- export declare function VoorraadStockCard({ connectionId, tradeItemId, draftId, productId }: Props): import("react").JSX.Element | null;
7
+ export declare function VoorraadStockCard({ connectionId, tradeItemId, draftId, productId }: Props): import("react/jsx-runtime").JSX.Element | null;
8
8
  export {};
9
9
  //# sourceMappingURL=VoorraadStockCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadStockCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadStockCard.tsx"],"names":[],"mappings":"AA4BA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,sCA+RzF"}
1
+ {"version":3,"file":"VoorraadStockCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadStockCard.tsx"],"names":[],"mappings":"AA4BA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,kDA+RzF"}
@@ -2,5 +2,5 @@
2
2
  * Shellinstelling: welke voorraadsturing krijgen artikelen die automatisch uit
3
3
  * Floriday worden aangemaakt. Bestaande artikelen veranderen niet.
4
4
  */
5
- export declare function VoorraadSturingCard(): import("react").JSX.Element;
5
+ export declare function VoorraadSturingCard(): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=VoorraadSturingCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadSturingCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadSturingCard.tsx"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,mBAAmB,gCAgElC"}
1
+ {"version":3,"file":"VoorraadSturingCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadSturingCard.tsx"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,mBAAmB,4CAgElC"}
@@ -10,5 +10,5 @@ export declare function VoorraadTable({ items, loading, settingsByKey, selected,
10
10
  onToggleSelect?: (productId: string) => void;
11
11
  onToggleAll?: (productIds: string[]) => void;
12
12
  onOpenSettings?: (productId: string) => void;
13
- }): import("react").JSX.Element;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
14
  //# sourceMappingURL=VoorraadTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAgFzE,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,GACf,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,+BAoUA"}
1
+ {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAgFzE,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,GACf,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,2CAoUA"}
@@ -1,2 +1,2 @@
1
- export declare function VoorraadVeldenCard(): import("react").JSX.Element;
1
+ export declare function VoorraadVeldenCard(): import("react/jsx-runtime").JSX.Element;
2
2
  //# sourceMappingURL=VoorraadVeldenCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadVeldenCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadVeldenCard.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,kBAAkB,gCAqOjC"}
1
+ {"version":3,"file":"VoorraadVeldenCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadVeldenCard.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,kBAAkB,4CAqOjC"}
@@ -2,5 +2,5 @@ export declare function ArtikelPagina({ id, resumeJobId, onNietGevonden }: {
2
2
  id: string;
3
3
  resumeJobId?: string;
4
4
  onNietGevonden?: () => void;
5
- }): import("react").JSX.Element;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=ArtikelPagina.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArtikelPagina.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/artikel/ArtikelPagina.tsx"],"names":[],"mappings":"AAmGA,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,+BA6enI"}
1
+ {"version":3,"file":"ArtikelPagina.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/artikel/ArtikelPagina.tsx"],"names":[],"mappings":"AAmGA,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CA6enI"}
@@ -3,5 +3,5 @@ export declare function TwijfelKiezen({ productId, floridayId, onGekozen }: {
3
3
  productId?: string;
4
4
  floridayId?: string;
5
5
  onGekozen?: () => void;
6
- }): import("react").JSX.Element | null;
6
+ }): import("react/jsx-runtime").JSX.Element | null;
7
7
  //# sourceMappingURL=TwijfelKiezen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TwijfelKiezen.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/artikel/TwijfelKiezen.tsx"],"names":[],"mappings":"AASA,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,sCAiEtI"}
1
+ {"version":3,"file":"TwijfelKiezen.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/artikel/TwijfelKiezen.tsx"],"names":[],"mappings":"AASA,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,kDAiEtI"}
@@ -1,5 +1,5 @@
1
1
  export declare function ImporteerKnop({ connectionId, onImported }: {
2
2
  connectionId: string | null;
3
3
  onImported: () => void;
4
- }): import("react").JSX.Element;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
5
  //# sourceMappingURL=ImporteerKnop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImporteerKnop.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/ImporteerKnop.tsx"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,+BAkBlH"}
1
+ {"version":3,"file":"ImporteerKnop.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/ImporteerKnop.tsx"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,2CAkBlH"}
@@ -2,5 +2,5 @@ import { type LijstVraag } from "../../../hooks/useVoorraadLijst.js";
2
2
  /** Excel-export van het huidige filter en de zoekopdracht, in porties van de server (geen limiet). */
3
3
  export declare function LijstExportKnop({ vraag }: {
4
4
  vraag: Omit<LijstVraag, "pagina" | "grootte">;
5
- }): import("react").JSX.Element;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=LijstExportKnop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LijstExportKnop.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/LijstExportKnop.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGrF,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAA;CAAE,+BAsC3F"}
1
+ {"version":3,"file":"LijstExportKnop.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/LijstExportKnop.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGrF,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAA;CAAE,2CAsC3F"}
@@ -6,11 +6,11 @@ export declare function AanpassenDialog({ rij, onClose, onDone }: {
6
6
  rij: LijstRij | null;
7
7
  onClose: () => void;
8
8
  onDone: () => void;
9
- }): import("react").JSX.Element | null;
9
+ }): import("react/jsx-runtime").JSX.Element | null;
10
10
  export declare function AfboekenDialog({ rij, connectionId, onClose, onDone, }: {
11
11
  rij: LijstRij | null;
12
12
  connectionId: string | null;
13
13
  onClose: () => void;
14
14
  onDone: () => void;
15
- }): import("react").JSX.Element | null;
15
+ }): import("react/jsx-runtime").JSX.Element | null;
16
16
  //# sourceMappingURL=SnelActieDialogen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SnelActieDialogen.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/SnelActieDialogen.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpE,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,sCAyD1H;AAED,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,YAAY,EACZ,OAAO,EACP,MAAM,GACP,EAAE;IACD,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,sCAwEA"}
1
+ {"version":3,"file":"SnelActieDialogen.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/SnelActieDialogen.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpE,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,kDAyD1H;AAED,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,YAAY,EACZ,OAAO,EACP,MAAM,GACP,EAAE;IACD,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,kDAwEA"}
@@ -7,7 +7,7 @@ export declare const OPTIONELE_KOLOMMEN: Array<{
7
7
  }>;
8
8
  export declare function ArtikelStatusIcoon({ status }: {
9
9
  status: LijstStatus;
10
- }): import("react").JSX.Element;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
11
  export declare function VoorraadLijstTabel({ rijen, loading, sort, oplopend, onSort, kolommen, selected, onToggleSelect, onToggleAll, onAanpassen, onAfboeken, heeftKoppeling, leeg, }: {
12
12
  heeftKoppeling?: boolean;
13
13
  rijen: LijstRij[];
@@ -23,5 +23,5 @@ export declare function VoorraadLijstTabel({ rijen, loading, sort, oplopend, onS
23
23
  onAfboeken: (r: LijstRij) => void;
24
24
  /** Lege staat (verschilt per filter/zoekopdracht). */
25
25
  leeg?: ReactNode;
26
- }): import("react").JSX.Element;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
27
  //# sourceMappingURL=VoorraadLijstTabel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadLijstTabel.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/VoorraadLijstTabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,OAAO,CAAC;AAOrD,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAChF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK5E,CAAC;AAmBF,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,+BAGrE;AAmBD,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAsB,EACtB,IAAI,GACL,EAAE;IACD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,+BA6FA"}
1
+ {"version":3,"file":"VoorraadLijstTabel.d.ts","sourceRoot":"","sources":["../../../../src/components/voorraad/lijst/VoorraadLijstTabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,OAAO,CAAC;AAOrD,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAChF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK5E,CAAC;AAmBF,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,2CAGrE;AAmBD,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAsB,EACtB,IAAI,GACL,EAAE;IACD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,2CA6FA"}
@@ -2,5 +2,5 @@
2
2
  // aanmelden, rollen en alle modulevragen altijd dezelfde actieve sessie.
3
3
  import { supabase as sharedSupabase } from '@flowselections/core';
4
4
  // Import the supabase client like this:
5
- // import { supabase } from "./client.js";
5
+ // import { supabase } from "../../integrations/supabase/client.js";
6
6
  export const supabase = sharedSupabase;
@@ -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)
@@ -155,8 +155,7 @@ describe("computeVbnRequiredFeatures — VBN 100023", () => {
155
155
  });
156
156
  it("sorteert verplicht vóór advies", async () => {
157
157
  const res = await computeVbnRequiredFeatures(client, "100023");
158
- // S62 en S98 eist Floriday altijd (FORCED_REQUIRED), dus ook verplicht.
159
- expect(res.features.map((f) => f.code)).toEqual(["S01", "S02", "S62", "S98", "S05"]);
158
+ expect(res.features.map((f) => f.code)).toEqual(["S01", "S02", "S05"]);
160
159
  });
161
160
  it("levert toegestane waarden per feature (gededupliceerd, zonder vervallen)", async () => {
162
161
  const res = await computeVbnRequiredFeatures(client, "100023");
@@ -164,10 +163,9 @@ describe("computeVbnRequiredFeatures — VBN 100023", () => {
164
163
  expect(s01?.values.map((v) => v.code).sort()).toEqual(["003", "004"]);
165
164
  expect(s01?.values.some((v) => v.code === "999")).toBe(false);
166
165
  });
167
- it("geeft alleen de door Floriday altijd verplichte kenmerken voor onbekende VBN-code", async () => {
166
+ it("geeft lege lijst terug voor onbekende VBN-code", async () => {
168
167
  const res = await computeVbnRequiredFeatures(client, "99999");
169
- expect(res.vbnCode).toBe("99999");
170
- expect(res.features.map((f) => f.code)).toEqual(["S62", "S98"]);
168
+ expect(res).toEqual({ vbnCode: "99999", features: [] });
171
169
  });
172
170
  it("vindt regulatory rows via record_id-prefix als data.product_id ontbreekt", async () => {
173
171
  const prefixOnlyClient = makeFakeClient({
@@ -182,8 +180,6 @@ describe("computeVbnRequiredFeatures — VBN 100023", () => {
182
180
  expect(res.features.map((f) => [f.code, f.regulation])).toEqual([
183
181
  ["S01", "required"],
184
182
  ["S02", "required"],
185
- ["S62", "required"],
186
- ["S98", "required"],
187
183
  ["S05", "advised"],
188
184
  ]);
189
185
  });
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Mapping van Floriday-veldnamen naar hun waarde-bron.
3
+ *
4
+ * - CODE_LIST_BY_FIELD: veld met vaste enum-waardes uit /gateway/code-list.
5
+ * - REF_ENTITY_BY_FIELD: veld dat verwijst naar een rij in een stamdata-cache,
6
+ * te lezen via /gateway/cached-list. Waarden zijn kebab-case Floriday-
7
+ * resources (GatewayEntity) — NIET de Supabase-tabelnaam.
8
+ * - REF_TABLE_BY_FIELD: identieke mapping naar de Supabase-cache-tabelnaam,
9
+ * uitsluitend voor directe `supabase.from(...)` reads in deze module.
10
+ */
11
+ import { type GatewayEntity } from "./floriday-gateway-entities.js";
12
+ export declare const CODE_LIST_BY_FIELD: Record<string, string>;
13
+ export declare const REF_ENTITY_BY_FIELD: Record<string, GatewayEntity>;
14
+ export declare const REF_TABLE_BY_FIELD: Record<string, string>;
15
+ export declare function codeListFor(field: string): string | undefined;
16
+ export declare function refEntityFor(field: string): GatewayEntity | undefined;
17
+ export declare function refTableFor(field: string): string | undefined;
18
+ //# sourceMappingURL=floriday-field-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floriday-field-sources.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-field-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEnF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUrD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAM7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMrD,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAErE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Mapping van Floriday-veldnamen naar hun waarde-bron.
3
+ *
4
+ * - CODE_LIST_BY_FIELD: veld met vaste enum-waardes uit /gateway/code-list.
5
+ * - REF_ENTITY_BY_FIELD: veld dat verwijst naar een rij in een stamdata-cache,
6
+ * te lezen via /gateway/cached-list. Waarden zijn kebab-case Floriday-
7
+ * resources (GatewayEntity) — NIET de Supabase-tabelnaam.
8
+ * - REF_TABLE_BY_FIELD: identieke mapping naar de Supabase-cache-tabelnaam,
9
+ * uitsluitend voor directe `supabase.from(...)` reads in deze module.
10
+ */
11
+ import { GATEWAY_ENTITIES } from "./floriday-gateway-entities.js";
12
+ export const CODE_LIST_BY_FIELD = {
13
+ currency: "Currency",
14
+ salesUnit: "SalesUnit",
15
+ auctionLocation: "AuctionLocation",
16
+ supplyType: "SupplyType",
17
+ loadCarrierType: "SupplyLoadCarrierType",
18
+ packingType: "PackingType",
19
+ qualityMark: "QualityMark",
20
+ country: "Country",
21
+ countryOfOrigin: "Country",
22
+ };
23
+ export const REF_ENTITY_BY_FIELD = {
24
+ packingId: GATEWAY_ENTITIES.packings,
25
+ warehouseId: GATEWAY_ENTITIES.warehouses,
26
+ deliveryLocationId: GATEWAY_ENTITIES.deliveryLocations,
27
+ priceGroupId: GATEWAY_ENTITIES.priceGroups,
28
+ collectionId: GATEWAY_ENTITIES.collections,
29
+ };
30
+ export const REF_TABLE_BY_FIELD = {
31
+ packingId: "floriday_packings_cache",
32
+ warehouseId: "floriday_warehouses_cache",
33
+ deliveryLocationId: "floriday_delivery_locations_cache",
34
+ priceGroupId: "floriday_price_groups_cache",
35
+ collectionId: "floriday_collections_cache",
36
+ };
37
+ export function codeListFor(field) {
38
+ return CODE_LIST_BY_FIELD[field];
39
+ }
40
+ export function refEntityFor(field) {
41
+ return REF_ENTITY_BY_FIELD[field];
42
+ }
43
+ export function refTableFor(field) {
44
+ return REF_TABLE_BY_FIELD[field];
45
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Bouwt een Zod-schema op basis van de fields[]-projectie van /gateway/schema.
3
+ * Wordt gebruikt voor snelle client-side UX-feedback. De gateway valideert
4
+ * altijd nogmaals server-side (validateEnums + Floriday zelf).
5
+ */
6
+ import { z, type ZodTypeAny } from "zod";
7
+ import type { FloridaySchemaField } from "../hooks/useFloriday.js";
8
+ export declare function buildZodFromFields(fields: FloridaySchemaField[]): z.ZodObject<Record<string, ZodTypeAny>>;
9
+ //# sourceMappingURL=floriday-schema-to-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floriday-schema-to-zod.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAmChE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,mBAAmB,EAAE,GAC5B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAIzC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Bouwt een Zod-schema op basis van de fields[]-projectie van /gateway/schema.
3
+ * Wordt gebruikt voor snelle client-side UX-feedback. De gateway valideert
4
+ * altijd nogmaals server-side (validateEnums + Floriday zelf).
5
+ */
6
+ import { z } from "zod";
7
+ function fieldToZod(f) {
8
+ let schema;
9
+ if (f.enum && f.enum.length > 0) {
10
+ schema = z.enum(f.enum);
11
+ }
12
+ else if (f.type === "number" || f.type === "integer") {
13
+ let n = z.number();
14
+ if (typeof f.minimum === "number")
15
+ n = n.min(f.minimum);
16
+ if (typeof f.maximum === "number")
17
+ n = n.max(f.maximum);
18
+ if (f.type === "integer")
19
+ n = n.int();
20
+ schema = n;
21
+ }
22
+ else if (f.type === "boolean") {
23
+ schema = z.boolean();
24
+ }
25
+ else if (f.type === "array") {
26
+ schema = z.array(z.any());
27
+ }
28
+ else {
29
+ let s = z.string();
30
+ if (typeof f.minLength === "number")
31
+ s = s.min(f.minLength);
32
+ if (typeof f.maxLength === "number")
33
+ s = s.max(f.maxLength);
34
+ if (f.pattern) {
35
+ try {
36
+ s = s.regex(new RegExp(f.pattern));
37
+ }
38
+ catch {
39
+ // ongeldige pattern uit schema → negeren
40
+ }
41
+ }
42
+ schema = s;
43
+ }
44
+ if (!f.required)
45
+ schema = schema.optional().nullable();
46
+ return schema;
47
+ }
48
+ export function buildZodFromFields(fields) {
49
+ const shape = {};
50
+ for (const f of fields)
51
+ shape[f.name] = fieldToZod(f);
52
+ return z.object(shape);
53
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Voegt twee producten samen: alle voorraad, samenstellingen en orderregels
3
+ * van `loserProductId` verhuizen naar `canonicalProductId`. Daarna wordt de
4
+ * loser-rij verwijderd. Roept de `merge_products`-SQL-functie aan; audit-log
5
+ * wordt automatisch bijgehouden in `product_merge_log`.
6
+ */
7
+ export declare function mergeProducts(canonicalProductId: string, loserProductId: string): Promise<void>;
8
+ //# sourceMappingURL=merge-products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-products.d.ts","sourceRoot":"","sources":["../../src/lib/merge-products.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,17 @@
1
+ import { supabase } from "../integrations/supabase/client.js";
2
+ /**
3
+ * Voegt twee producten samen: alle voorraad, samenstellingen en orderregels
4
+ * van `loserProductId` verhuizen naar `canonicalProductId`. Daarna wordt de
5
+ * loser-rij verwijderd. Roept de `merge_products`-SQL-functie aan; audit-log
6
+ * wordt automatisch bijgehouden in `product_merge_log`.
7
+ */
8
+ export async function mergeProducts(canonicalProductId, loserProductId) {
9
+ if (canonicalProductId === loserProductId)
10
+ return;
11
+ const { error } = await supabase.rpc("merge_products", {
12
+ _canonical: canonicalProductId,
13
+ _loser: loserProductId,
14
+ });
15
+ if (error)
16
+ throw new Error(error.message);
17
+ }