@flowselections/floriday-voorraad 1.0.76 → 1.0.78
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.
- package/dist-lib/components/TemplatePage.d.ts +2 -0
- package/dist-lib/components/TemplatePage.d.ts.map +1 -0
- package/dist-lib/components/TemplatePage.js +4 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +2 -2
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.js +2 -2
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.js +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +49 -49
- package/dist-lib/components/voorraad/CollapsibleText.d.ts +1 -1
- package/dist-lib/components/voorraad/CollapsibleText.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts +6 -0
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ConnectionBadge.js +12 -0
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.js +4 -4
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +2 -2
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.js +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.js +3 -3
- package/dist-lib/components/voorraad/FloridaySentCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridaySentCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridaySentCard.js +4 -4
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +4 -0
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/FloridayStatusBadge.js +8 -0
- package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.js +4 -4
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +2 -2
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.js +3 -3
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +3 -3
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.js +2 -2
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +2 -0
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ModuleHealthCard.js +40 -0
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.js +3 -3
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.js +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.js +2 -2
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.js +6 -6
- package/dist-lib/components/voorraad/ProductSalePriceField.d.ts +2 -2
- package/dist-lib/components/voorraad/ProductSalePriceField.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductSalePriceField.js +2 -2
- package/dist-lib/components/voorraad/ProductStructureCard.d.ts +2 -2
- package/dist-lib/components/voorraad/ProductStructureCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductStructureCard.js +3 -3
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.js +2 -2
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts +2 -2
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +2 -2
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts +2 -2
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.js +98 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts +2 -2
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.js +6 -6
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.js +1 -1
- package/dist-lib/components/voorraad/StockIntegrityAlert.d.ts +1 -1
- package/dist-lib/components/voorraad/StockIntegrityAlert.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockIntegrityAlert.js +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.js +2 -2
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.js +8 -8
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.js +2 -2
- package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts +1 -1
- package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts.map +1 -1
- package/dist-lib/components/voorraad/SupplyReadScopeAlert.js +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +2 -2
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.js +5 -5
- package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationPage.js +3 -3
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +10 -0
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/VoorraadDashboard.js +53 -0
- package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.js +35 -16
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.js +3 -3
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +3 -3
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.js +122 -39
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.js +2 -2
- package/dist-lib/hooks/useFloriday.d.ts +1 -1
- package/dist-lib/hooks/useFloriday.js +4 -4
- package/dist-lib/hooks/useFloridayConnection.d.ts +1 -1
- package/dist-lib/hooks/useFloridayConnection.js +1 -1
- package/dist-lib/hooks/useFloridayContinuousStock.js +1 -1
- package/dist-lib/hooks/useFloridayPriceGroups.js +1 -1
- package/dist-lib/hooks/useFloridayVbnRequired.js +1 -1
- package/dist-lib/hooks/useFlorydayCustomers.js +1 -1
- package/dist-lib/hooks/useFusten.d.ts +1 -1
- package/dist-lib/hooks/useFusten.js +2 -2
- package/dist-lib/hooks/useInventorySettings.d.ts +1 -1
- package/dist-lib/hooks/useInventorySettings.js +1 -1
- package/dist-lib/hooks/useLocalTradeItems.d.ts +2 -2
- package/dist-lib/hooks/useLocalTradeItems.js +3 -3
- package/dist-lib/hooks/usePublishJob.d.ts +1 -1
- package/dist-lib/hooks/usePublishJob.js +2 -2
- package/dist-lib/hooks/useStockPushJobs.js +1 -1
- package/dist-lib/hooks/useStockSyncHealth.js +1 -1
- package/dist-lib/hooks/useTradeItemSpec.d.ts +2 -2
- package/dist-lib/hooks/useTradeItemStock.js +3 -3
- package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +1 -1
- package/dist-lib/hooks/useVbnRegulatoryFeatures.js +1 -1
- package/dist-lib/hooks/useVoorraadCustomFields.d.ts +1 -1
- package/dist-lib/hooks/useVoorraadCustomFields.js +1 -1
- package/dist-lib/hooks/useVoorraadData.d.ts +1 -1
- package/dist-lib/hooks/useVoorraadData.js +6 -6
- package/dist-lib/hooks-entry.d.ts +5 -5
- package/dist-lib/hooks-entry.js +5 -5
- package/dist-lib/index.d.ts +11 -11
- package/dist-lib/index.js +12 -12
- package/dist-lib/integrations/supabase/auth-attacher.js +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +1 -1
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +450 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/floricode-required-features.test.js +1 -1
- package/dist-lib/lib/__tests__/floriday-base-supply.test.js +1 -1
- package/dist-lib/lib/base-supply-reader.server.js +2 -2
- package/dist-lib/lib/ensure-article-codes.d.ts +1 -1
- package/dist-lib/lib/ensure-article-codes.js +1 -1
- package/dist-lib/lib/floricode-client.js +1 -1
- package/dist-lib/lib/floriday-2026v1.server.js +2 -2
- package/dist-lib/lib/floriday-client.d.ts +2 -2
- package/dist-lib/lib/floriday-client.js +2 -2
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +1 -1
- package/dist-lib/lib/floriday-customer-offer.functions.js +4 -4
- package/dist-lib/lib/floriday-env.functions.d.ts +4 -4
- package/dist-lib/lib/floriday-env.functions.js +4 -4
- package/dist-lib/lib/floriday-env.server.d.ts +2 -2
- package/dist-lib/lib/floriday-env.server.js +2 -2
- package/dist-lib/lib/floriday-field-sources.d.ts +18 -0
- package/dist-lib/lib/floriday-field-sources.d.ts.map +1 -0
- package/dist-lib/lib/floriday-field-sources.js +45 -0
- package/dist-lib/lib/floriday-gateway.functions.d.ts +10 -10
- package/dist-lib/lib/floriday-gateway.functions.js +14 -14
- package/dist-lib/lib/floriday-gateway.server.d.ts +1 -1
- package/dist-lib/lib/floriday-gateway.server.js +9 -9
- package/dist-lib/lib/floriday-import-validator.d.ts +1 -1
- package/dist-lib/lib/floriday-readiness.server.d.ts +1 -1
- package/dist-lib/lib/floriday-readiness.server.js +2 -2
- package/dist-lib/lib/floriday-relink.js +1 -1
- package/dist-lib/lib/floriday-schema-to-zod.d.ts +9 -0
- package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +1 -0
- package/dist-lib/lib/floriday-schema-to-zod.js +53 -0
- package/dist-lib/lib/floriday-stock-supply.server.d.ts +1 -1
- package/dist-lib/lib/floriday-stock-supply.server.js +2 -2
- package/dist-lib/lib/floriday-supply-line.js +2 -2
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts +2 -2
- package/dist-lib/lib/floriday-vbn-required.functions.js +2 -2
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +6 -6
- package/dist-lib/lib/floriday-warehouse.functions.js +7 -7
- package/dist-lib/lib/floriday-write-gate.server.js +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +2 -2
- package/dist-lib/lib/floriday-writes.functions.js +6 -6
- package/dist-lib/lib/fusten.d.ts +1 -1
- package/dist-lib/lib/fusten.js +2 -2
- package/dist-lib/lib/inventory-settings.functions.js +1 -1
- package/dist-lib/lib/logistics-buffer-events.server.js +2 -2
- package/dist-lib/lib/logistics-events.js +2 -2
- package/dist-lib/lib/logistics-tasks.server.js +5 -5
- package/dist-lib/lib/merge-products.d.ts +8 -0
- package/dist-lib/lib/merge-products.d.ts.map +1 -0
- package/dist-lib/lib/merge-products.js +17 -0
- package/dist-lib/lib/module-health.functions.d.ts +53497 -0
- package/dist-lib/lib/module-health.functions.d.ts.map +1 -0
- package/dist-lib/lib/module-health.functions.js +261 -0
- package/dist-lib/lib/module-runtime-config.functions.d.ts +1 -1
- package/dist-lib/lib/module-runtime-config.functions.js +2 -2
- package/dist-lib/lib/module-runtime.server.js +1 -1
- package/dist-lib/lib/product-packing.js +1 -1
- package/dist-lib/lib/product-types.js +1 -1
- package/dist-lib/lib/publish-pipeline.d.ts +1 -1
- package/dist-lib/lib/publish-pipeline.js +2 -2
- package/dist-lib/lib/publish-readiness.d.ts +2 -2
- package/dist-lib/lib/trade-item-prices.d.ts +1 -1
- package/dist-lib/lib/trade-item-prices.js +2 -2
- package/dist-lib/lib/validationSchemas.d.ts +15 -0
- package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
- package/dist-lib/lib/validationSchemas.js +25 -0
- package/dist-lib/lib/voorraad-custom-fields.js +1 -1
- package/dist-lib/server-hooks/floriday-base-supply.js +1 -1
- package/dist-lib/server-hooks/floriday-continuous-stock-pull.js +1 -1
- package/dist-lib/server-hooks/floriday-continuous-stock.js +1 -1
- package/dist-lib/server-hooks/floriday-stock-reconcile.js +1 -1
- package/dist-lib/server-hooks/logistics-tasks-run.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockHistoryChart.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockHistoryChart.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE
|
|
1
|
+
{"version":3,"file":"StockHistoryChart.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockHistoryChart.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,2CAoGlF"}
|
|
@@ -7,7 +7,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { Card } from "@flowselections/core";
|
|
9
9
|
import { CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts";
|
|
10
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
10
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
11
11
|
export function StockHistoryChart({ connectionId }) {
|
|
12
12
|
const [points, setPoints] = useState([]);
|
|
13
13
|
const [loading, setLoading] = useState(false);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function StockIntegrityAlert(): import("react").JSX.Element | null;
|
|
1
|
+
export declare function StockIntegrityAlert(): import("react/jsx-runtime").JSX.Element | null;
|
|
2
2
|
//# sourceMappingURL=StockIntegrityAlert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockIntegrityAlert.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockIntegrityAlert.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"StockIntegrityAlert.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockIntegrityAlert.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,mBAAmB,mDA2GlC"}
|
|
@@ -7,7 +7,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
8
|
import { AlertOctagon } from "lucide-react";
|
|
9
9
|
import { toast } from "sonner";
|
|
10
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
10
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
11
11
|
const keyToProductId = (k) => k.replace(/^product:/, "");
|
|
12
12
|
function label(it, names) {
|
|
13
13
|
const found = names.get(it.trade_item_key);
|
|
@@ -2,6 +2,6 @@ interface Props {
|
|
|
2
2
|
tradeItemKey: string | null;
|
|
3
3
|
productId?: string | null;
|
|
4
4
|
}
|
|
5
|
-
export declare function StockMutationHistoryCard({ tradeItemKey, productId }: Props): import("react").JSX.Element;
|
|
5
|
+
export declare function StockMutationHistoryCard({ tradeItemKey, productId }: Props): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=StockMutationHistoryCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockMutationHistoryCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockMutationHistoryCard.tsx"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA+CD,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,KAAK
|
|
1
|
+
{"version":3,"file":"StockMutationHistoryCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockMutationHistoryCard.tsx"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA+CD,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,KAAK,2CAyN1E"}
|
|
@@ -7,8 +7,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { Card, CardContent, Badge, Button } from "@flowselections/core";
|
|
9
9
|
import { ChevronDown, ChevronUp, Loader2, History } from "lucide-react";
|
|
10
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
11
|
-
import { CollapsibleText } from "./CollapsibleText";
|
|
10
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
11
|
+
import { CollapsibleText } from "./CollapsibleText.js";
|
|
12
12
|
const TYPE_LABEL = {
|
|
13
13
|
consumption: { label: "Afboeking (verkoop)", tone: "bg-rose-100 text-rose-800 border-rose-200" },
|
|
14
14
|
consumption_blocked: { label: "Afboeking geblokkeerd", tone: "bg-amber-100 text-amber-800 border-amber-200" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockPushMonitor.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockPushMonitor.tsx"],"names":[],"mappings":"AA4NA,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE
|
|
1
|
+
{"version":3,"file":"StockPushMonitor.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockPushMonitor.tsx"],"names":[],"mappings":"AA4NA,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,2CAkNjF"}
|
|
@@ -13,9 +13,9 @@ import { useServerFn } from "@tanstack/react-start";
|
|
|
13
13
|
import { toast } from "sonner";
|
|
14
14
|
import { ChevronDown, ChevronRight, RefreshCw, Send } from "lucide-react";
|
|
15
15
|
import { Button, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@flowselections/core";
|
|
16
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
17
|
-
import { useStockPushJobs, useCentralAuthBlockade } from "../../hooks/useStockPushJobs";
|
|
18
|
-
import { enqueueTestStockPush } from "../../lib/stock-sync.functions";
|
|
16
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
17
|
+
import { useStockPushJobs, useCentralAuthBlockade } from "../../hooks/useStockPushJobs.js";
|
|
18
|
+
import { enqueueTestStockPush } from "../../lib/stock-sync.functions.js";
|
|
19
19
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
20
20
|
/** Een verwerker houdt een regel maximaal 5 minuten vast. */
|
|
21
21
|
const LOCK_STALE_MS = 5 * 60000;
|
|
@@ -60,7 +60,7 @@ function explainError(raw) {
|
|
|
60
60
|
const m = raw.toLowerCase();
|
|
61
61
|
if (m.includes("token") || m.includes("requested path is invalid")) {
|
|
62
62
|
return {
|
|
63
|
-
text: "De Floriday
|
|
63
|
+
text: "De koppeling met Floriday werkt niet; de voorraad wordt niet doorgegeven. Neem contact op met Flow Selections.",
|
|
64
64
|
action: "Controleer in de Floriday-Authenticatiemodule het adres van Central Auth en of de gepubliceerde versie actueel is. Plan de opdracht daarna opnieuw in.",
|
|
65
65
|
};
|
|
66
66
|
}
|
|
@@ -89,7 +89,7 @@ function displayStatus(job) {
|
|
|
89
89
|
return {
|
|
90
90
|
label: "Vastgelopen",
|
|
91
91
|
tone: "error",
|
|
92
|
-
hint: "
|
|
92
|
+
hint: "Deze wijziging bleef hangen en wordt automatisch opnieuw verstuurd.",
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
95
|
return { label: "Bezig", tone: "warn" };
|
|
@@ -98,7 +98,7 @@ function displayStatus(job) {
|
|
|
98
98
|
return {
|
|
99
99
|
label: "Geen magazijn, niet verzonden",
|
|
100
100
|
tone: "error",
|
|
101
|
-
hint: job.skipReason ?? "Geen voorkeursmagazijn voor deze koppeling; kies er een
|
|
101
|
+
hint: job.skipReason ?? "Geen voorkeursmagazijn voor deze koppeling; kies er een in Instellingen › Floriday",
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
if (job.status === "skipped_no_price") {
|
|
@@ -237,9 +237,9 @@ export function StockPushMonitor({ connectionId }) {
|
|
|
237
237
|
return `laatste: ${displayStatus(last).label} om ${timeLabel(last.createdAt)}`;
|
|
238
238
|
}, [rows, jobs.isError, jobsError]);
|
|
239
239
|
const stuckCount = rows.filter((r) => displayStatus(r).label === "Vastgelopen").length;
|
|
240
|
-
return (_jsxs("section", { className: "rounded-lg border bg-card", children: [_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 px-4 py-3 text-left text-sm font-medium", onClick: () => setOpen((v) => !v), children: [open ? (_jsx(ChevronDown, { className: "h-4 w-4 text-muted-foreground" })) : (_jsx(ChevronRight, { className: "h-4 w-4 text-muted-foreground" })), "
|
|
240
|
+
return (_jsxs("section", { className: "rounded-lg border bg-card", children: [_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 px-4 py-3 text-left text-sm font-medium", onClick: () => setOpen((v) => !v), children: [open ? (_jsx(ChevronDown, { className: "h-4 w-4 text-muted-foreground" })) : (_jsx(ChevronRight, { className: "h-4 w-4 text-muted-foreground" })), "Voorraad naar Floriday testen", _jsx("span", { className: "ml-auto text-xs font-normal text-muted-foreground", children: summary })] }), open && (_jsxs("div", { className: "space-y-4 border-t px-4 py-4 text-sm", children: [_jsx("p", { className: "text-muted-foreground", children: "Elke voorraadwijziging van een gekoppeld artikel zet automatisch opdrachten in de wachtrij. De Floriday-Authenticatiemodule verwerkt die elke minuut. Hieronder plan je een testopdracht in met de huidige voorraadstand, zonder iets te wijzigen." }), _jsxs("p", { className: "rounded-md border bg-muted/40 px-3 py-2 text-muted-foreground", children: ["E\u00E9n wijziging levert bewust meerdere berichten op: \u00E9\u00E9n met de", " ", _jsx("span", { className: "font-medium text-foreground", children: "actuele voorraad" }), " en daarnaast \u00E9\u00E9n per week met de ", _jsx("span", { className: "font-medium text-foreground", children: "verwachte beschikbaarheid" }), " voor de komende weken. Ze lijken op elkaar, maar gaan elk over een andere periode \u2014 zie de kolom \u201CGeldt voor\u201D. Plan je opnieuw een wijziging in, dan wordt een nog wachtende opdracht voor dezelfde week vervangen."] }), blockade.data?.blocked && (_jsxs("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-destructive", children: [_jsx("span", { className: "font-medium", children: "Actie nodig: " }), "De koppeling met Floriday werkt niet; de voorraad wordt niet doorgegeven. Neem contact op met Flow Selections.", blockade.data.message && (_jsxs("details", { className: "mt-1 opacity-80", children: [_jsx("summary", { className: "cursor-pointer", children: "Details voor beheer" }), blockade.data.message] }))] })), stuckCount > 0 && (_jsxs("div", { className: "rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-amber-800", children: [stuckCount === 1 ? "Eén wijziging bleef" : `${stuckCount} wijzigingen bleven`, " hangen en ", stuckCount === 1 ? "wordt" : "worden", " automatisch opnieuw verstuurd."] })), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Select, { value: selected, onValueChange: setSelected, disabled: !connectionId || items.isLoading || itemList.length === 0, children: [_jsx(SelectTrigger, { className: "h-9 w-[22rem]", children: _jsx(SelectValue, { placeholder: items.isLoading ? "Artikelen laden…" : "Geen gekoppelde artikelen gevonden" }) }), _jsx(SelectContent, { className: "max-h-72", children: itemList.map((i) => (_jsx(SelectItem, { value: i.id, children: _jsxs("span", { className: "flex w-full items-center justify-between gap-3", children: [_jsx("span", { className: "truncate", children: i.name }), _jsxs("span", { className: "tabular-nums text-muted-foreground", children: [i.stock, " stuks"] })] }) }, i.id))) })] }), _jsxs(Button, { type: "button", disabled: !selected || mutation.isPending, onClick: () => selected && mutation.mutate(selected), children: [_jsx(Send, { className: "mr-2 h-4 w-4" }), "Test versturen"] }), _jsxs(Button, { type: "button", variant: "outline", disabled: jobs.isFetching, onClick: () => void jobs.refetch(), children: [_jsx(RefreshCw, { className: `mr-2 h-4 w-4 ${jobs.isFetching ? "animate-spin" : ""}` }), "Ververs"] })] }), _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-xs", children: [_jsx("thead", { className: "text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "py-1 pr-3 font-medium", children: "Artikel" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Geldt voor" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Stuks" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Status" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Pogingen" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Aangemaakt" }), _jsx("th", { className: "py-1 pr-3 font-medium", children: "Bijgewerkt" }), _jsx("th", { className: "py-1 font-medium", children: "Melding" })] }) }), _jsxs("tbody", { children: [rows.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 8, className: "py-3 text-muted-foreground", children: jobs.isError
|
|
241
241
|
? `Pushes konden niet worden geladen${jobsError?.code ? ` (fout ${jobsError.code})` : ""}: ${jobsError?.message ?? "onbekende fout"}`
|
|
242
|
-
: "Er
|
|
242
|
+
: "Er is nog geen voorraad naar Floriday gestuurd." }) })), rows.map((r) => {
|
|
243
243
|
const status = displayStatus(r);
|
|
244
244
|
const detail = explainError(r.lastError);
|
|
245
245
|
const scope = scopeLabel(r);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function StockSyncStatus(): import("react").JSX.Element | null;
|
|
1
|
+
export declare function StockSyncStatus(): import("react/jsx-runtime").JSX.Element | null;
|
|
2
2
|
//# sourceMappingURL=StockSyncStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockSyncStatus.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockSyncStatus.tsx"],"names":[],"mappings":"AAYA,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"StockSyncStatus.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/StockSyncStatus.tsx"],"names":[],"mappings":"AAYA,wBAAgB,eAAe,mDA6E9B"}
|
|
@@ -8,8 +8,8 @@ import { AlertTriangle, RotateCw } from "lucide-react";
|
|
|
8
8
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
9
9
|
import { useServerFn } from "@tanstack/react-start";
|
|
10
10
|
import { toast } from "sonner";
|
|
11
|
-
import { useStockSyncHealth } from "../../hooks/useStockSyncHealth";
|
|
12
|
-
import { retryFailedStockSync } from "../../lib/stock-sync.functions";
|
|
11
|
+
import { useStockSyncHealth } from "../../hooks/useStockSyncHealth.js";
|
|
12
|
+
import { retryFailedStockSync } from "../../lib/stock-sync.functions.js";
|
|
13
13
|
export function StockSyncStatus() {
|
|
14
14
|
const { data } = useStockSyncHealth();
|
|
15
15
|
const queryClient = useQueryClient();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function SupplyReadScopeAlert(): import("react").JSX.Element | null;
|
|
1
|
+
export declare function SupplyReadScopeAlert(): import("react/jsx-runtime").JSX.Element | null;
|
|
2
2
|
//# sourceMappingURL=SupplyReadScopeAlert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupplyReadScopeAlert.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/SupplyReadScopeAlert.tsx"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SupplyReadScopeAlert.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/SupplyReadScopeAlert.tsx"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,mDAmCnC"}
|
|
@@ -5,7 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
*/
|
|
6
6
|
import { useEffect, useState } from "react";
|
|
7
7
|
import { ShieldAlert } from "lucide-react";
|
|
8
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
8
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
9
9
|
export function SupplyReadScopeAlert() {
|
|
10
10
|
const [run, setRun] = useState(null);
|
|
11
11
|
useEffect(() => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Traysticker-afbeelding per product — los van de Floriday-productfoto (`products.image_url`). */
|
|
2
2
|
export declare function TrayStickerCard({ productId }: {
|
|
3
3
|
productId: string;
|
|
4
|
-
}): import("react").JSX.Element;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
//# sourceMappingURL=TrayStickerCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrayStickerCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/TrayStickerCard.tsx"],"names":[],"mappings":"AAyBA,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE
|
|
1
|
+
{"version":3,"file":"TrayStickerCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/TrayStickerCard.tsx"],"names":[],"mappings":"AAyBA,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2CA+HnE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TradeItem } from "../../lib/floriday-client";
|
|
1
|
+
import type { TradeItem } from "../../lib/floriday-client.js";
|
|
2
2
|
/**
|
|
3
3
|
* Overzicht van producten die (nog) niet actief op Floriday staan. Er is geen concept-status
|
|
4
4
|
* meer — het gaat puur om welke Floriday-velden ontbreken en of het product klaar is om te
|
|
@@ -8,5 +8,5 @@ export declare function ValidationOverviewTable({ items, connectionId, onChanged
|
|
|
8
8
|
items: TradeItem[];
|
|
9
9
|
connectionId: string | null;
|
|
10
10
|
onChanged: () => void | Promise<void>;
|
|
11
|
-
}): import("react").JSX.Element;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
//# sourceMappingURL=ValidationOverviewTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationOverviewTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ValidationOverviewTable.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAQ3D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,YAAY,EACZ,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC
|
|
1
|
+
{"version":3,"file":"ValidationOverviewTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ValidationOverviewTable.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAQ3D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,YAAY,EACZ,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,2CAwKA"}
|
|
@@ -3,10 +3,10 @@ import { useMemo, useState } from "react";
|
|
|
3
3
|
import { useNavigate } from "@tanstack/react-router";
|
|
4
4
|
import { Badge, Button } from "@flowselections/core";
|
|
5
5
|
import { Link2, Loader2, Pencil, Send } from "lucide-react";
|
|
6
|
-
import { validateDraftForPublish } from "../../lib/floriday-import-validator";
|
|
7
|
-
import { updateDraftMeta } from "../../hooks/useLocalTradeItems";
|
|
8
|
-
import { floriday } from "../../lib/floriday-client";
|
|
9
|
-
import { relinkProducts } from "../../lib/floriday-relink";
|
|
6
|
+
import { validateDraftForPublish } from "../../lib/floriday-import-validator.js";
|
|
7
|
+
import { updateDraftMeta } from "../../hooks/useLocalTradeItems.js";
|
|
8
|
+
import { floriday } from "../../lib/floriday-client.js";
|
|
9
|
+
import { relinkProducts } from "../../lib/floriday-relink.js";
|
|
10
10
|
import { toast } from "@flowselections/core";
|
|
11
11
|
/**
|
|
12
12
|
* Overzicht van producten die (nog) niet actief op Floriday staan. Er is geen concept-status
|
|
@@ -59,7 +59,7 @@ export function ValidationOverviewTable({ items, connectionId, onChanged, }) {
|
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
try {
|
|
62
|
-
const { buildAddTradeItemPayload } = await import("../../lib/floriday-payload");
|
|
62
|
+
const { buildAddTradeItemPayload } = await import("../../lib/floriday-payload.js");
|
|
63
63
|
const built = buildAddTradeItemPayload(payload);
|
|
64
64
|
const res = await floriday.createTradeItem(connectionId, built);
|
|
65
65
|
await updateDraftMeta(productId, {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function ValidationPage(): import("react").JSX.Element;
|
|
1
|
+
export declare function ValidationPage(): import("react/jsx-runtime").JSX.Element;
|
|
2
2
|
//# sourceMappingURL=ValidationPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ValidationPage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"ValidationPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ValidationPage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,4CAiC7B"}
|
|
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Link } from "@tanstack/react-router";
|
|
3
3
|
import { Card } from "@flowselections/core";
|
|
4
4
|
import { ArrowLeft } from "lucide-react";
|
|
5
|
-
import { useFloridayConnection } from "../../hooks/useFloridayConnection";
|
|
6
|
-
import { useVoorraadData } from "../../hooks/useVoorraadData";
|
|
7
|
-
import { ValidationOverviewTable } from "./ValidationOverviewTable";
|
|
5
|
+
import { useFloridayConnection } from "../../hooks/useFloridayConnection.js";
|
|
6
|
+
import { useVoorraadData } from "../../hooks/useVoorraadData.js";
|
|
7
|
+
import { ValidationOverviewTable } from "./ValidationOverviewTable.js";
|
|
8
8
|
export function ValidationPage() {
|
|
9
9
|
const { activeId } = useFloridayConnection();
|
|
10
10
|
const { items, loading, reload } = useVoorraadData(activeId);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TradeItem } from "../../lib/floriday-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Producten zijn altijd volwaardig. De dashboard-statistieken tonen alleen of ze op
|
|
4
|
+
* Floriday actief zijn — geen concept-status meer.
|
|
5
|
+
*/
|
|
6
|
+
export declare function VoorraadDashboard({ items, connectionId, }: {
|
|
7
|
+
items: TradeItem[];
|
|
8
|
+
connectionId: string | null;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=VoorraadDashboard.d.ts.map
|
|
@@ -0,0 +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,2CA0DA"}
|
|
@@ -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,2 +1,2 @@
|
|
|
1
|
-
export declare function VoorraadPage(): import("react").JSX.Element;
|
|
1
|
+
export declare function VoorraadPage(): import("react/jsx-runtime").JSX.Element;
|
|
2
2
|
//# sourceMappingURL=VoorraadPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AAyGA,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"VoorraadPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadPage.tsx"],"names":[],"mappings":"AAyGA,wBAAgB,YAAY,4CAmX3B"}
|
|
@@ -3,20 +3,20 @@ import { useEffect, useMemo, useState } from "react";
|
|
|
3
3
|
import { Link } from "@tanstack/react-router";
|
|
4
4
|
import { Button, Card, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, useAuthState, } from "@flowselections/core";
|
|
5
5
|
import { AlertTriangle, CheckCircle2, FileText, PackageX, Plus, Search, } from "lucide-react";
|
|
6
|
-
import { useFloridayConnection } from "../../hooks/useFloridayConnection";
|
|
7
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
8
|
-
import { useVoorraadData } from "../../hooks/useVoorraadData";
|
|
9
|
-
import { StockSyncStatus } from "./StockSyncStatus";
|
|
10
|
-
import { StockIntegrityAlert } from "./StockIntegrityAlert";
|
|
11
|
-
import { SupplyReadScopeAlert } from "./SupplyReadScopeAlert";
|
|
12
|
-
import { StockPushMonitor } from "./StockPushMonitor";
|
|
13
|
-
import { ExcelExportButton } from "./ExcelExportButton";
|
|
14
|
-
import { StockBulkButtons } from "./StockBulkButtons";
|
|
15
|
-
import { VoorraadTable } from "./VoorraadTable";
|
|
16
|
-
import { VoorraadPagination } from "./VoorraadPagination";
|
|
17
|
-
import { StockHistoryChart } from "./StockHistoryChart";
|
|
18
|
-
import { InventorySettingsDrawer } from "./InventorySettingsDrawer";
|
|
19
|
-
import { useInventorySettings } from "../../hooks/useInventorySettings";
|
|
6
|
+
import { useFloridayConnection } from "../../hooks/useFloridayConnection.js";
|
|
7
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
8
|
+
import { useVoorraadData } from "../../hooks/useVoorraadData.js";
|
|
9
|
+
import { StockSyncStatus } from "./StockSyncStatus.js";
|
|
10
|
+
import { StockIntegrityAlert } from "./StockIntegrityAlert.js";
|
|
11
|
+
import { SupplyReadScopeAlert } from "./SupplyReadScopeAlert.js";
|
|
12
|
+
import { StockPushMonitor } from "./StockPushMonitor.js";
|
|
13
|
+
import { ExcelExportButton } from "./ExcelExportButton.js";
|
|
14
|
+
import { StockBulkButtons } from "./StockBulkButtons.js";
|
|
15
|
+
import { VoorraadTable } from "./VoorraadTable.js";
|
|
16
|
+
import { VoorraadPagination } from "./VoorraadPagination.js";
|
|
17
|
+
import { StockHistoryChart } from "./StockHistoryChart.js";
|
|
18
|
+
import { InventorySettingsDrawer } from "./InventorySettingsDrawer.js";
|
|
19
|
+
import { useInventorySettings } from "../../hooks/useInventorySettings.js";
|
|
20
20
|
function isLinkedToFloriday(i) {
|
|
21
21
|
return Boolean(i.floridayId) || i.source === "published";
|
|
22
22
|
}
|
|
@@ -56,6 +56,7 @@ export function VoorraadPage() {
|
|
|
56
56
|
const [drawerOpen, setDrawerOpen] = useState(false);
|
|
57
57
|
// Artikelen zonder geldige prijs per stuk (eenheid "stuks", prijs > 0), op id.
|
|
58
58
|
const [noPriceIds, setNoPriceIds] = useState(new Set());
|
|
59
|
+
const [noPriceBreakdown, setNoPriceBreakdown] = useState({ empty: 0, zero: 0, unit: 0 });
|
|
59
60
|
const [noPriceOnly, setNoPriceOnly] = useState(false);
|
|
60
61
|
useEffect(() => {
|
|
61
62
|
let cancelled = false;
|
|
@@ -66,12 +67,24 @@ export function VoorraadPage() {
|
|
|
66
67
|
if (cancelled)
|
|
67
68
|
return;
|
|
68
69
|
const s = new Set();
|
|
70
|
+
const b = { empty: 0, zero: 0, unit: 0 };
|
|
69
71
|
for (const p of (data ?? [])) {
|
|
70
72
|
const isPiece = (p.unit ?? "").trim().toLowerCase() === "stuks";
|
|
71
|
-
if (!isPiece
|
|
73
|
+
if (!isPiece) {
|
|
72
74
|
s.add(p.id);
|
|
75
|
+
b.unit++;
|
|
76
|
+
}
|
|
77
|
+
else if (p.sale_price == null) {
|
|
78
|
+
s.add(p.id);
|
|
79
|
+
b.empty++;
|
|
80
|
+
}
|
|
81
|
+
else if (!(Number(p.sale_price) > 0)) {
|
|
82
|
+
s.add(p.id);
|
|
83
|
+
b.zero++;
|
|
84
|
+
}
|
|
73
85
|
}
|
|
74
86
|
setNoPriceIds(s);
|
|
87
|
+
setNoPriceBreakdown(b);
|
|
75
88
|
});
|
|
76
89
|
return () => {
|
|
77
90
|
cancelled = true;
|
|
@@ -146,7 +159,13 @@ export function VoorraadPage() {
|
|
|
146
159
|
{ id: "out_of_stock", label: "Niet op voorraad", count: counts.outOfStock },
|
|
147
160
|
{ id: "below_min", label: "Onder minimum", count: counts.belowMin },
|
|
148
161
|
];
|
|
149
|
-
return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "min-w-[12rem] flex-1", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: "Voorraad" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Beheer je artikelen en voorraadniveaus." })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsx(Link, { to: "/voorraad/validatie", children: "Validatie" }) }), _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(StockIntegrityAlert, {}), _jsx(SupplyReadScopeAlert, {}), _jsx(StockSyncStatus, {}), noPriceIds.size > 0 && (_jsxs("div", { className: "flex flex-wrap items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-800", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("div", { className: "flex-1 min-w-[12rem]", children: [_jsxs("span", { className: "font-medium", children: [noPriceIds.size, " artikel", noPriceIds.size === 1 ? "" : "en", "
|
|
162
|
+
return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "min-w-[12rem] flex-1", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: "Voorraad" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Beheer je artikelen en voorraadniveaus." })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsx(Link, { to: "/voorraad/validatie", children: "Validatie" }) }), _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(StockIntegrityAlert, {}), _jsx(SupplyReadScopeAlert, {}), _jsx(StockSyncStatus, {}), noPriceIds.size > 0 && (_jsxs("div", { className: "flex flex-wrap items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-800", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("div", { className: "flex-1 min-w-[12rem]", children: [_jsxs("span", { className: "font-medium", children: [noPriceIds.size, " artikel", noPriceIds.size === 1 ? " staat" : "en staan", " niet in Floriday zonder geldige prijs:", " ", [
|
|
163
|
+
noPriceBreakdown.empty > 0 ? `${noPriceBreakdown.empty} zonder verkoopprijs` : null,
|
|
164
|
+
noPriceBreakdown.zero > 0 ? `${noPriceBreakdown.zero} met prijs € 0,00` : null,
|
|
165
|
+
noPriceBreakdown.unit > 0 ? `${noPriceBreakdown.unit} met een andere eenheid dan stuks` : null,
|
|
166
|
+
]
|
|
167
|
+
.filter(Boolean)
|
|
168
|
+
.join(", "), "."] }), " ", "Kies \"Toon deze artikelen\", open een artikel en vul bij Artikel regulier de verkoopprijs per stuk (excl. btw) in. De voorraadsturing van elk artikel heeft ook een link \"Prijs invullen\"."] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => setNoPriceOnly((v) => !v), children: noPriceOnly ? "Alle artikelen tonen" : "Toon deze artikelen" })] })), auth.isAdmin && _jsx(StockPushMonitor, { connectionId: activeId ?? null }), connError && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/10 text-destructive p-3 text-sm", children: ["Floriday-koppeling laden mislukt. ", _jsxs("details", { className: "inline", children: [_jsx("summary", { className: "cursor-pointer inline", children: "Details voor beheer" }), 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) => {
|
|
150
169
|
const active = stockFilter === t.id;
|
|
151
170
|
return (_jsxs("button", { type: "button", onClick: () => setStockFilter(t.id), className: `relative py-3 px-3 text-sm font-medium whitespace-nowrap transition-colors ${active
|
|
152
171
|
? "text-foreground"
|
|
@@ -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
|
|
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":"AAeA,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,
|
|
1
|
+
{"version":3,"file":"VoorraadStockCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadStockCard.tsx"],"names":[],"mappings":"AAeA,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,kDAoMzF"}
|
|
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
3
|
import { Button, Card, CardContent, Input, Label, Textarea, toast, } from "@flowselections/core";
|
|
4
4
|
import { Loader2, Package, Check } from "lucide-react";
|
|
5
|
-
import { useTradeItemStock, stockKeysFor } from "../../hooks/useTradeItemStock";
|
|
6
|
-
import { supabase } from "../../integrations/supabase/client";
|
|
7
|
-
import { FloridaySentCard } from "./FloridaySentCard";
|
|
5
|
+
import { useTradeItemStock, stockKeysFor } from "../../hooks/useTradeItemStock.js";
|
|
6
|
+
import { supabase } from "../../integrations/supabase/client.js";
|
|
7
|
+
import { FloridaySentCard } from "./FloridaySentCard.js";
|
|
8
8
|
export function VoorraadStockCard({ connectionId, tradeItemId, draftId, productId }) {
|
|
9
9
|
const keys = stockKeysFor({
|
|
10
10
|
tradeItemId,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { TradeItem } from "../../lib/floriday-client";
|
|
2
|
-
import type { InventorySetting } from "../../hooks/useInventorySettings";
|
|
1
|
+
import type { TradeItem } from "../../lib/floriday-client.js";
|
|
2
|
+
import type { InventorySetting } from "../../hooks/useInventorySettings.js";
|
|
3
3
|
/** Sleutel waarmee een rij aan zijn Floriday-voorraadinstelling wordt gekoppeld. */
|
|
4
4
|
export declare function settingKeyOf(item: TradeItem): string | null;
|
|
5
5
|
export declare function VoorraadTable({ items, loading, settingsByKey, selected, onToggleSelect, onToggleAll, onOpenSettings, }: {
|
|
@@ -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":"
|
|
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;AA6EzE,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,2CAuSA"}
|