@burdenoff/microfe-movethewheels 2026.828.1 → 2026.830.2
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/MoveTheWheelsRoot.js +86 -83
- package/dist/MoveTheWheelsRoutes.js +107 -104
- package/dist/hooks/index.js +1 -0
- package/dist/index.js +38 -37
- package/dist/movethewheels/hooks/index.d.ts +1 -0
- package/dist/movethewheels/shared/hooks/useTr.d.ts +16 -0
- package/dist/pages/AIAssistantPage.js +45 -43
- package/dist/pages/DashboardPage.js +6 -6
- package/dist/pages/FleetPage.js +7 -7
- package/dist/pages/InventoryPage.js +6 -6
- package/dist/pages/OrdersListPage.js +5 -5
- package/dist/pages/SettingsPage.js +175 -154
- package/dist/pages/TrackingPage.js +5 -5
- package/dist/shared/hooks/useTr.js +12 -0
- package/package.json +1 -1
- package/src/movethewheels/MoveTheWheelsRoot.tsx +28 -24
- package/src/movethewheels/MoveTheWheelsRoutes.tsx +7 -2
- package/src/movethewheels/hooks/index.ts +3 -0
- package/src/movethewheels/pages/AIAssistantPage.tsx +53 -32
- package/src/movethewheels/pages/SettingsPage.tsx +172 -70
- package/src/movethewheels/shared/hooks/useTr.ts +37 -0
package/dist/index.js
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
import { useMoveTheWheels as e, useMoveTheWheelsNavigate as t } from "./providers/MoveTheWheelsProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { useEntityDocuments as J } from "./hooks/useEntityDocuments.js";
|
|
16
|
-
import { useCaptureEpod as Y, useEpod as X, useEpodPhotoUpload as Z, useEpodPhotoUrl as Q, useMyPendingEpodDeliveryJobs as $ } from "./hooks/useEpod.js";
|
|
2
|
+
import { useTr as n } from "./shared/hooks/useTr.js";
|
|
3
|
+
import { useOrder as r, useOrderStats as i, useOrders as a } from "./hooks/useOrders.js";
|
|
4
|
+
import { useDriver as o, useDriverStatusCounts as s, useDrivers as c, useFleet as l, useFleetStats as u, useVehicle as d, useVehicleDrivers as f, useVehicles as p } from "./hooks/useFleet.js";
|
|
5
|
+
import { useInventory as m, useInventoryStats as h, useInventoryTransactions as g, useProduct as _, useProductStockLevels as v, useProducts as y, useWarehouse as b, useWarehouses as x } from "./hooks/useInventory.js";
|
|
6
|
+
import { useCustomer as S, useCustomerStats as C, useCustomers as w } from "./hooks/useCustomers.js";
|
|
7
|
+
import { useRoute as T, useRouteStats as E, useRoutes as D } from "./hooks/useRoutes.js";
|
|
8
|
+
import { useAnalytics as O, useDashboardMetrics as k, useEmissionsSummary as A, useFinanceMetrics as j, useFleetAnalytics as M, useOrderAnalytics as N, usePerformanceAnalytics as P, useRevenueAnalytics as F } from "./hooks/useAnalytics.js";
|
|
9
|
+
import { useDriverTracking as I, useGeofence as L, useLiveTracking as R, useOrderTracking as z, useTracking as B, useTrackingAlerts as V, useVehicleTracking as H } from "./hooks/useTracking.js";
|
|
10
|
+
import { useReports as U } from "./hooks/useReports.js";
|
|
11
|
+
import { useImportExport as W } from "./hooks/useImportExport.js";
|
|
12
|
+
import { useModuleSettings as G } from "./hooks/useSettings.js";
|
|
13
|
+
import { useEntityDocuments as K } from "./hooks/useEntityDocuments.js";
|
|
14
|
+
import { useCaptureEpod as q, useEpod as J, useEpodPhotoUpload as Y, useEpodPhotoUrl as X, useMyPendingEpodDeliveryJobs as Z } from "./hooks/useEpod.js";
|
|
17
15
|
import "./hooks/index.js";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
16
|
+
import { MoveTheWheelsRoot as Q } from "./MoveTheWheelsRoot.js";
|
|
17
|
+
import { useMoveTheWheelsStore as $ } from "./store/movethewheelsStore.js";
|
|
18
|
+
import { useSandboxAssistantTransport as ee } from "./services/createSandboxAssistantTransport.js";
|
|
19
|
+
import { Avatar as te, AvatarFallback as ne, AvatarImage as re, Badge as ie, Button as ae, Card as oe, CardContent as se, CardDescription as ce, CardFooter as le, CardHeader as ue, CardTitle as de, Checkbox as fe, Dialog as pe, DialogContent as me, DialogDescription as he, DialogFooter as ge, DialogHeader as _e, DialogTitle as ve, DialogTrigger as ye, DropdownMenu as be, DropdownMenuContent as xe, DropdownMenuItem as Se, DropdownMenuSeparator as Ce, DropdownMenuTrigger as we, Input as Te, Label as Ee, Progress as De, ScrollArea as Oe, Select as ke, SelectContent as Ae, SelectItem as je, SelectTrigger as Me, SelectValue as Ne, Separator as Pe, Skeleton as Fe, Switch as Ie, Table as Le, TableBody as Re, TableCell as ze, TableHead as Be, TableHeader as Ve, TableRow as He, Tabs as Ue, TabsContent as We, TabsList as Ge, TabsTrigger as Ke, Textarea as qe, Tooltip as Je, TooltipContent as Ye, TooltipProvider as Xe, TooltipTrigger as Ze } from "./components/ui.js";
|
|
20
|
+
import { EmptyState as Qe, ErrorState as $e, LoadingState as et, PageLayout as tt, PageSection as nt } from "./components/PageLayout.js";
|
|
21
|
+
import { chartTokens as rt, seriesColor as it } from "./components/charts/chartTokens.js";
|
|
22
|
+
import { Sparkline as at } from "./components/charts/Sparkline.js";
|
|
23
|
+
import { MetricCard as ot, MetricCardSkeleton as st, MetricGrid as ct } from "./components/MetricCard.js";
|
|
24
|
+
import { GlassPanel as lt } from "./components/GlassPanel.js";
|
|
25
|
+
import { ChartEmpty as ut, ChartTooltip as dt } from "./components/charts/ChartShell.js";
|
|
26
|
+
import { TrendChart as ft } from "./components/charts/TrendChart.js";
|
|
27
|
+
import { VolumeBar as pt } from "./components/charts/VolumeBar.js";
|
|
28
|
+
import { StatusDonut as mt } from "./components/charts/StatusDonut.js";
|
|
29
|
+
import { createCurrentIcon as ht, createPinIcon as gt, createStopIcon as _t, isRealCoord as vt } from "./components/maps/leaflet-setup.js";
|
|
30
|
+
import { MapCanvas as yt } from "./components/maps/MapCanvas.js";
|
|
31
|
+
import { LogisticsMap as bt } from "./components/maps/LogisticsMap.js";
|
|
32
|
+
import { RouteMap as xt } from "./components/maps/RouteMap.js";
|
|
33
|
+
import { TrackingMap as St } from "./components/maps/TrackingMap.js";
|
|
34
|
+
import { PaymentStatusBadge as Ct, PriorityBadge as wt, StatusBadge as Tt, TypeBadge as Et, VehicleTypeBadge as Dt } from "./components/StatusBadge.js";
|
|
35
|
+
import { DataTable as Ot } from "./components/DataTable.js";
|
|
36
|
+
import { FormError as kt } from "./components/FormError.js";
|
|
37
|
+
import { Notice as At, useNotice as jt } from "./components/Notice.js";
|
|
38
|
+
import { DocumentsCard as Mt } from "./components/DocumentsCard.js";
|
|
39
|
+
import { CarbonFootprintPanel as Nt } from "./components/CarbonFootprintPanel.js";
|
|
39
40
|
import "./components/index.js";
|
|
40
|
-
export {
|
|
41
|
+
export { te as Avatar, ne as AvatarFallback, re as AvatarImage, ie as Badge, ae as Button, Nt as CarbonFootprintPanel, oe as Card, se as CardContent, ce as CardDescription, le as CardFooter, ue as CardHeader, de as CardTitle, ut as ChartEmpty, dt as ChartTooltip, fe as Checkbox, Ot as DataTable, pe as Dialog, me as DialogContent, he as DialogDescription, ge as DialogFooter, _e as DialogHeader, ve as DialogTitle, ye as DialogTrigger, Mt as DocumentsCard, be as DropdownMenu, xe as DropdownMenuContent, Se as DropdownMenuItem, Ce as DropdownMenuSeparator, we as DropdownMenuTrigger, Qe as EmptyState, $e as ErrorState, kt as FormError, lt as GlassPanel, Te as Input, Ee as Label, et as LoadingState, bt as LogisticsMap, yt as MapCanvas, ot as MetricCard, st as MetricCardSkeleton, ct as MetricGrid, Q as MoveTheWheelsRoot, At as Notice, tt as PageLayout, nt as PageSection, Ct as PaymentStatusBadge, wt as PriorityBadge, De as Progress, xt as RouteMap, Oe as ScrollArea, ke as Select, Ae as SelectContent, je as SelectItem, Me as SelectTrigger, Ne as SelectValue, Pe as Separator, Fe as Skeleton, at as Sparkline, Tt as StatusBadge, mt as StatusDonut, Ie as Switch, Le as Table, Re as TableBody, ze as TableCell, Be as TableHead, Ve as TableHeader, He as TableRow, Ue as Tabs, We as TabsContent, Ge as TabsList, Ke as TabsTrigger, qe as Textarea, Je as Tooltip, Ye as TooltipContent, Xe as TooltipProvider, Ze as TooltipTrigger, St as TrackingMap, ft as TrendChart, Et as TypeBadge, Dt as VehicleTypeBadge, pt as VolumeBar, rt as chartTokens, ht as createCurrentIcon, gt as createPinIcon, _t as createStopIcon, vt as isRealCoord, it as seriesColor, O as useAnalytics, q as useCaptureEpod, S as useCustomer, C as useCustomerStats, w as useCustomers, k as useDashboardMetrics, o as useDriver, s as useDriverStatusCounts, I as useDriverTracking, c as useDrivers, A as useEmissionsSummary, K as useEntityDocuments, J as useEpod, Y as useEpodPhotoUpload, X as useEpodPhotoUrl, j as useFinanceMetrics, l as useFleet, M as useFleetAnalytics, u as useFleetStats, L as useGeofence, W as useImportExport, m as useInventory, h as useInventoryStats, g as useInventoryTransactions, R as useLiveTracking, G as useModuleSettings, e as useMoveTheWheels, t as useMoveTheWheelsNavigate, $ as useMoveTheWheelsStore, Z as useMyPendingEpodDeliveryJobs, jt as useNotice, r as useOrder, N as useOrderAnalytics, i as useOrderStats, z as useOrderTracking, a as useOrders, P as usePerformanceAnalytics, _ as useProduct, v as useProductStockLevels, y as useProducts, U as useReports, F as useRevenueAnalytics, T as useRoute, E as useRouteStats, D as useRoutes, ee as useSandboxAssistantTransport, n as useTr, B as useTracking, V as useTrackingAlerts, d as useVehicle, f as useVehicleDrivers, H as useVehicleTracking, p as useVehicles, b as useWarehouse, x as useWarehouses };
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* All custom hooks for data access and operations.
|
|
5
5
|
*/
|
|
6
|
+
export { useTr } from '../shared/hooks/useTr';
|
|
6
7
|
export { useOrders, useOrder, useOrderStats } from './useOrders';
|
|
7
8
|
export { useFleet, useVehicles, useVehicle, useVehicleDrivers, useDrivers, useDriver, useDriverStatusCounts, useFleetStats, type DriverStatusCounts, } from './useFleet';
|
|
8
9
|
export { useInventory, useProducts, useProduct, useProductStockLevels, useWarehouses, useWarehouse, useInventoryStats, useInventoryTransactions, type InventoryStats, type InventoryTransaction, type InventoryTransactionType, type ProductStockLevel, } from './useInventory';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useTr — translation hook with fallback semantics.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `useI18n().t()` so that when a key has no translation (i.e. the
|
|
5
|
+
* provider returns the key itself), the caller's English fallback is used
|
|
6
|
+
* instead. This keeps consumer call sites consistent and avoids leaking
|
|
7
|
+
* untranslated keys into the UI.
|
|
8
|
+
*
|
|
9
|
+
* Supports optional interpolation params using `{{key}}` placeholders.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const tr = useTr();
|
|
13
|
+
* return <h1>{tr('movethewheels.dashboard.title', 'Dashboard')}</h1>;
|
|
14
|
+
* return <p>{tr('movethewheels.delete.confirm', 'Delete {{count}} items?', { count: 5 })}</p>;
|
|
15
|
+
*/
|
|
16
|
+
export declare function useTr(): (key: string, fallback: string, params?: Record<string, string | number>) => string;
|
|
@@ -3,70 +3,72 @@ import { Bot as t } from "../node_modules/lucide-react/dist/esm/icons/bot.js";
|
|
|
3
3
|
import { MessageCircle as n } from "../node_modules/lucide-react/dist/esm/icons/message-circle.js";
|
|
4
4
|
import { ShieldCheck as r } from "../node_modules/lucide-react/dist/esm/icons/shield-check.js";
|
|
5
5
|
import { Wallet as i } from "../node_modules/lucide-react/dist/esm/icons/wallet.js";
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { useTr as a } from "../shared/hooks/useTr.js";
|
|
7
|
+
import "../hooks/index.js";
|
|
8
|
+
import { Card as o, CardContent as s, CardHeader as c, CardTitle as l } from "../components/ui.js";
|
|
9
|
+
import { EmptyState as u, PageLayout as d } from "../components/PageLayout.js";
|
|
10
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
11
|
+
import { GlassCard as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
|
|
10
12
|
//#region src/movethewheels/pages/AIAssistantPage.tsx
|
|
11
|
-
var h = [
|
|
12
|
-
{
|
|
13
|
-
icon: e,
|
|
14
|
-
title: "Agent activity feed",
|
|
15
|
-
description: "A live log of what the AI decided, on which shipments, with trigger, model, latency and cost — so an autonomous run is never a black box."
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
icon: r,
|
|
19
|
-
title: "Dispatch decision cards",
|
|
20
|
-
description: "Proposed driver/vehicle assignments and carrier recommendations with rationale and confidence, requiring an explicit accept or reject before anything is written."
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
icon: i,
|
|
24
|
-
title: "AI credit visibility",
|
|
25
|
-
description: "Per-workspace AI spend for admins, so cost is visible before the invoice."
|
|
26
|
-
}
|
|
27
|
-
];
|
|
28
13
|
function g() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
14
|
+
let g = a(), _ = [
|
|
15
|
+
{
|
|
16
|
+
icon: e,
|
|
17
|
+
title: g("movethewheels.ai.roadmap.agentActivity.title", "Agent activity feed"),
|
|
18
|
+
description: g("movethewheels.ai.roadmap.agentActivity.description", "A live log of what the AI decided, on which shipments, with trigger, model, latency and cost — so an autonomous run is never a black box.")
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
icon: r,
|
|
22
|
+
title: g("movethewheels.ai.roadmap.dispatchDecisionCards.title", "Dispatch decision cards"),
|
|
23
|
+
description: g("movethewheels.ai.roadmap.dispatchDecisionCards.description", "Proposed driver/vehicle assignments and carrier recommendations with rationale and confidence, requiring an explicit accept or reject before anything is written.")
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
icon: i,
|
|
27
|
+
title: g("movethewheels.ai.roadmap.aiCreditVisibility.title", "AI credit visibility"),
|
|
28
|
+
description: g("movethewheels.ai.roadmap.aiCreditVisibility.description", "Per-workspace AI spend for admins, so cost is visible before the invoice.")
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
return /* @__PURE__ */ p(d, {
|
|
32
|
+
title: g("movethewheels.ai.title", "AI Operations"),
|
|
33
|
+
subtitle: g("movethewheels.ai.subtitle", "What the AI is doing on your workspace, and why"),
|
|
34
|
+
icon: /* @__PURE__ */ f(t, { size: 24 }),
|
|
33
35
|
children: [
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
icon: /* @__PURE__ */
|
|
36
|
-
children: "This page will surface AI-driven dispatch decisions and their outcomes once the shared AI runtime lands. It does not host a chat box — chat with your live operational data is always available from the assistant icon anywhere in the app."
|
|
36
|
+
/* @__PURE__ */ f(h, {
|
|
37
|
+
icon: /* @__PURE__ */ f(t, { size: 18 }),
|
|
38
|
+
children: g("movethewheels.ai.purpose", "This page will surface AI-driven dispatch decisions and their outcomes once the shared AI runtime lands. It does not host a chat box — chat with your live operational data is always available from the assistant icon anywhere in the app.")
|
|
37
39
|
}),
|
|
38
|
-
/* @__PURE__ */
|
|
40
|
+
/* @__PURE__ */ f(m, {
|
|
39
41
|
treatment: "glass",
|
|
40
42
|
className: "p-4",
|
|
41
|
-
children: /* @__PURE__ */
|
|
43
|
+
children: /* @__PURE__ */ p("div", {
|
|
42
44
|
className: "flex items-start gap-3",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
45
|
+
children: [/* @__PURE__ */ f(n, {
|
|
44
46
|
size: 20,
|
|
45
47
|
className: "text-primary flex-shrink-0 mt-0.5"
|
|
46
|
-
}), /* @__PURE__ */
|
|
48
|
+
}), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
|
|
47
49
|
className: "text-sm font-medium text-text-primary",
|
|
48
|
-
children: "Looking to ask a question about your operations?"
|
|
49
|
-
}), /* @__PURE__ */
|
|
50
|
+
children: g("movethewheels.ai.callout.title", "Looking to ask a question about your operations?")
|
|
51
|
+
}), /* @__PURE__ */ f("p", {
|
|
50
52
|
className: "text-sm text-text-secondary mt-1",
|
|
51
|
-
children: "Open the assistant from its icon in the corner of the screen — it answers from your live orders, shipments, fleet and inventory data, and it is the only chat surface in this product."
|
|
53
|
+
children: g("movethewheels.ai.callout.description", "Open the assistant from its icon in the corner of the screen — it answers from your live orders, shipments, fleet and inventory data, and it is the only chat surface in this product.")
|
|
52
54
|
})] })]
|
|
53
55
|
})
|
|
54
56
|
}),
|
|
55
|
-
/* @__PURE__ */
|
|
57
|
+
/* @__PURE__ */ p(o, { children: [/* @__PURE__ */ f(c, { children: /* @__PURE__ */ f(l, { children: g("movethewheels.ai.roadmap.title", "On the roadmap") }) }), /* @__PURE__ */ p(s, { children: [/* @__PURE__ */ f(u, {
|
|
56
58
|
illustration: "empty-agents",
|
|
57
|
-
title: "Autonomous dispatch operations aren't live yet",
|
|
58
|
-
description: "Autonomous dispatch isn't available yet — these capabilities are still in development. Nothing below is available today."
|
|
59
|
-
}), /* @__PURE__ */
|
|
59
|
+
title: g("movethewheels.ai.emptyState.title", "Autonomous dispatch operations aren't live yet"),
|
|
60
|
+
description: g("movethewheels.ai.emptyState.description", "Autonomous dispatch isn't available yet — these capabilities are still in development. Nothing below is available today.")
|
|
61
|
+
}), /* @__PURE__ */ f("ul", {
|
|
60
62
|
className: "mt-4 space-y-4",
|
|
61
|
-
children:
|
|
63
|
+
children: _.map((e) => /* @__PURE__ */ p("li", {
|
|
62
64
|
className: "flex items-start gap-3",
|
|
63
|
-
children: [/* @__PURE__ */
|
|
65
|
+
children: [/* @__PURE__ */ f(e.icon, {
|
|
64
66
|
size: 18,
|
|
65
67
|
className: "text-text-secondary flex-shrink-0 mt-0.5"
|
|
66
|
-
}), /* @__PURE__ */
|
|
68
|
+
}), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
|
|
67
69
|
className: "text-sm font-medium text-text-primary",
|
|
68
70
|
children: e.title
|
|
69
|
-
}), /* @__PURE__ */
|
|
71
|
+
}), /* @__PURE__ */ f("p", {
|
|
70
72
|
className: "text-xs text-text-secondary",
|
|
71
73
|
children: e.description
|
|
72
74
|
})] })]
|
|
@@ -27,8 +27,8 @@ import { formatCurrency as O, formatDate as k } from "../utils/formatters.js";
|
|
|
27
27
|
import { deliveryMarkerStatus as oe, firstRealLatLng as se } from "../utils/mapMarkers.js";
|
|
28
28
|
import { useMemo as A } from "react";
|
|
29
29
|
import { jsx as j, jsxs as M } from "react/jsx-runtime";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
30
|
+
import { useI18n as ce } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
31
|
+
import { CTAOverflowMenu as N, EmphasisPanel as P, PagePurpose as F } from "@burdenoff/fe-libs/ui";
|
|
32
32
|
//#region src/movethewheels/pages/DashboardPage.tsx
|
|
33
33
|
function I(e, t = !1) {
|
|
34
34
|
if (e.length < 2) return;
|
|
@@ -42,7 +42,7 @@ function I(e, t = !1) {
|
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
function L() {
|
|
45
|
-
let { t: L } =
|
|
45
|
+
let { t: L } = ce(), R = (e, t) => {
|
|
46
46
|
let n = L(e);
|
|
47
47
|
return n === e ? t : n;
|
|
48
48
|
}, { basePath: z, navigate: B } = u(), { metrics: V } = m(), { analytics: H } = ne(), { orders: U } = f({ limit: 5 }), { stats: W } = d(), { stats: G } = p(), { activeDeliveries: K } = re(), { unacknowledgedAlerts: q } = ie(), J = A(() => H.trends.dailyOrders.map((e) => e.orders), [H.trends.dailyOrders]), Y = A(() => H.trends.dailyOrders.map((e) => e.deliveries), [H.trends.dailyOrders]), X = A(() => H.trends.revenue.map((e) => e.revenue), [H.trends.revenue]), le = A(() => H.trends.dailyOrders.slice(-7), [H.trends.dailyOrders]), ue = A(() => K.flatMap((e) => {
|
|
@@ -67,7 +67,7 @@ function L() {
|
|
|
67
67
|
title: R("movethewheels.dashboard.title", "Dashboard"),
|
|
68
68
|
subtitle: R("movethewheels.dashboard.subtitle", "Overview of your logistics operations"),
|
|
69
69
|
icon: /* @__PURE__ */ j(s, { size: 24 }),
|
|
70
|
-
headerActions: /* @__PURE__ */ j(
|
|
70
|
+
headerActions: /* @__PURE__ */ j(N, {
|
|
71
71
|
primary: {
|
|
72
72
|
label: R("movethewheels.dashboard.actions.newOrder", "New Order"),
|
|
73
73
|
icon: /* @__PURE__ */ j(a, { size: 16 }),
|
|
@@ -84,7 +84,7 @@ function L() {
|
|
|
84
84
|
}]
|
|
85
85
|
}),
|
|
86
86
|
children: [
|
|
87
|
-
/* @__PURE__ */ j(
|
|
87
|
+
/* @__PURE__ */ j(F, {
|
|
88
88
|
icon: /* @__PURE__ */ j(s, { size: 18 }),
|
|
89
89
|
children: R("movethewheels.dashboard.purpose", "Your logistics command center — a live snapshot of orders, active deliveries, fleet health and revenue. Start here each day to spot what needs attention, then jump straight into an order, the live map or fleet status.")
|
|
90
90
|
}),
|
|
@@ -381,7 +381,7 @@ function L() {
|
|
|
381
381
|
/* @__PURE__ */ M("div", {
|
|
382
382
|
className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
|
|
383
383
|
children: [
|
|
384
|
-
/* @__PURE__ */ M(
|
|
384
|
+
/* @__PURE__ */ M(P, {
|
|
385
385
|
className: "space-y-4",
|
|
386
386
|
children: [/* @__PURE__ */ j("h2", {
|
|
387
387
|
className: "text-base font-semibold text-text-primary",
|
package/dist/pages/FleetPage.js
CHANGED
|
@@ -12,11 +12,11 @@ import { PageLayout as y, PageSection as b } from "../components/PageLayout.js";
|
|
|
12
12
|
import { MetricCard as x, MetricCardSkeleton as S, MetricGrid as C } from "../components/MetricCard.js";
|
|
13
13
|
import { StatusBadge as w, VehicleTypeBadge as T } from "../components/StatusBadge.js";
|
|
14
14
|
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
16
|
+
import { CTAOverflowMenu as k, EmphasisPanel as A, NextSteps as j, PagePurpose as M } from "@burdenoff/fe-libs/ui";
|
|
17
17
|
//#region src/movethewheels/pages/FleetPage.tsx
|
|
18
18
|
function N() {
|
|
19
|
-
let { t: N } =
|
|
19
|
+
let { t: N } = O(), P = (e, t) => {
|
|
20
20
|
let n = N(e);
|
|
21
21
|
return n === e ? t : n;
|
|
22
22
|
}, { basePath: F, navigate: I } = s(), { stats: L, isLoading: R, error: z, refetch: B } = l(), { vehicles: V, isLoading: H, error: U, refetch: W } = u(), { drivers: G, isLoading: K, error: q, refetch: J } = c(), Y = R || H || K, X = z ?? U ?? q, Z = () => {
|
|
@@ -30,7 +30,7 @@ function N() {
|
|
|
30
30
|
title: P("movethewheels.fleet.title", "Fleet Management"),
|
|
31
31
|
subtitle: P("movethewheels.fleet.subtitle", "Manage your vehicles and drivers"),
|
|
32
32
|
icon: /* @__PURE__ */ E(r, { size: 24 }),
|
|
33
|
-
headerActions: /* @__PURE__ */ E(
|
|
33
|
+
headerActions: /* @__PURE__ */ E(k, {
|
|
34
34
|
primary: {
|
|
35
35
|
label: P("movethewheels.fleet.actions.allVehicles", "All Vehicles"),
|
|
36
36
|
icon: /* @__PURE__ */ E(r, { size: 16 }),
|
|
@@ -43,11 +43,11 @@ function N() {
|
|
|
43
43
|
}]
|
|
44
44
|
}),
|
|
45
45
|
children: [
|
|
46
|
-
/* @__PURE__ */ E(
|
|
46
|
+
/* @__PURE__ */ E(M, {
|
|
47
47
|
icon: /* @__PURE__ */ E(r, { size: 18 }),
|
|
48
48
|
children: P("movethewheels.fleet.purpose", "Your command center for vehicles and drivers. See utilization at a glance, keep an eye on availability and ratings, and act on maintenance alerts so you always have road-ready capacity to fulfil orders.")
|
|
49
49
|
}),
|
|
50
|
-
/* @__PURE__ */ E(
|
|
50
|
+
/* @__PURE__ */ E(j, {
|
|
51
51
|
storageKey: "movethewheels-fleet",
|
|
52
52
|
steps: [
|
|
53
53
|
{
|
|
@@ -278,7 +278,7 @@ function N() {
|
|
|
278
278
|
}),
|
|
279
279
|
/* @__PURE__ */ D("div", {
|
|
280
280
|
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
281
|
-
children: [/* @__PURE__ */ D(
|
|
281
|
+
children: [/* @__PURE__ */ D(A, {
|
|
282
282
|
className: "space-y-4",
|
|
283
283
|
children: [/* @__PURE__ */ E("h2", {
|
|
284
284
|
className: "text-base font-semibold text-text-primary",
|
|
@@ -21,8 +21,8 @@ import { DataTable as ne } from "../components/DataTable.js";
|
|
|
21
21
|
import { formatCurrency as re, formatDate as ie } from "../utils/formatters.js";
|
|
22
22
|
import { useMemo as ae } from "react";
|
|
23
23
|
import { jsx as O, jsxs as k } from "react/jsx-runtime";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
24
|
+
import { useI18n as A } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
25
|
+
import { CTAOverflowMenu as j, EmphasisPanel as M, PagePurpose as N } from "@burdenoff/fe-libs/ui";
|
|
26
26
|
//#region src/movethewheels/pages/InventoryPage.tsx
|
|
27
27
|
var P = {
|
|
28
28
|
out_of_stock: {
|
|
@@ -51,7 +51,7 @@ var P = {
|
|
|
51
51
|
ADJUSTMENT: "Adjustment"
|
|
52
52
|
};
|
|
53
53
|
function L() {
|
|
54
|
-
let { t: L } =
|
|
54
|
+
let { t: L } = A(), R = (e, t) => {
|
|
55
55
|
let n = L(e);
|
|
56
56
|
return n === e ? t : n;
|
|
57
57
|
}, { basePath: z, navigate: B } = p(), { inventory: V, products: H, warehouses: U, isLoading: W, error: G, refetch: K } = ee(), { stats: q } = m(), { transactions: J, isLoading: oe, error: Y } = h({ limit: 8 }), X = (e) => B?.(f(z, e)), Z = (e, t) => {
|
|
@@ -153,7 +153,7 @@ function L() {
|
|
|
153
153
|
title: R("movethewheels.inventory.title", "Inventory"),
|
|
154
154
|
subtitle: R("movethewheels.inventory.subtitle", "Manage your products and warehouses"),
|
|
155
155
|
icon: /* @__PURE__ */ O(c, { size: 24 }),
|
|
156
|
-
headerActions: /* @__PURE__ */ O(
|
|
156
|
+
headerActions: /* @__PURE__ */ O(j, {
|
|
157
157
|
primary: {
|
|
158
158
|
label: R("movethewheels.inventory.actions.addProduct", "Add Product"),
|
|
159
159
|
icon: /* @__PURE__ */ O(l, { size: 16 }),
|
|
@@ -168,7 +168,7 @@ function L() {
|
|
|
168
168
|
}]
|
|
169
169
|
}),
|
|
170
170
|
children: [
|
|
171
|
-
/* @__PURE__ */ O(
|
|
171
|
+
/* @__PURE__ */ O(N, {
|
|
172
172
|
icon: /* @__PURE__ */ O(c, { size: 18 }),
|
|
173
173
|
children: R("movethewheels.inventory.purpose", "A real-time view of what you have and where. Track on-hand, allocated and free-to-promise quantities across warehouses, follow every stock movement, catch low-stock items before they run out, and drill into products or warehouses to manage what you can promise on an order.")
|
|
174
174
|
}),
|
|
@@ -242,7 +242,7 @@ function L() {
|
|
|
242
242
|
})
|
|
243
243
|
]
|
|
244
244
|
}),
|
|
245
|
-
Q.length > 0 && /* @__PURE__ */ k(
|
|
245
|
+
Q.length > 0 && /* @__PURE__ */ k(M, {
|
|
246
246
|
className: "space-y-4",
|
|
247
247
|
children: [/* @__PURE__ */ k("h2", {
|
|
248
248
|
className: "flex items-center gap-2 text-base font-semibold text-status-warning-text",
|
|
@@ -19,11 +19,11 @@ import { DataTable as w } from "../components/DataTable.js";
|
|
|
19
19
|
import { formatCurrency as ie, formatDate as T } from "../utils/formatters.js";
|
|
20
20
|
import { useState as E } from "react";
|
|
21
21
|
import { jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
22
|
+
import { useI18n as k } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
23
|
+
import { CTAOverflowMenu as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
|
|
24
24
|
//#region src/movethewheels/pages/OrdersListPage.tsx
|
|
25
25
|
function M() {
|
|
26
|
-
let { t: M } =
|
|
26
|
+
let { t: M } = k(), N = (e, t) => {
|
|
27
27
|
let n = M(e);
|
|
28
28
|
return n === e ? t : n;
|
|
29
29
|
}, { basePath: P, navigate: F } = u(), [I, L] = E("all"), [R, z] = E(!1), [B, V] = E(0), [H, U] = E(25), W = I !== "all" || R, { orders: G, hasMore: K, isLoading: q, error: J, refetch: Y } = f({
|
|
@@ -190,7 +190,7 @@ function M() {
|
|
|
190
190
|
title: N("movethewheels.orders.title", "Orders"),
|
|
191
191
|
subtitle: `${Z} ${N("movethewheels.orders.subtitle", "total orders")}`,
|
|
192
192
|
icon: /* @__PURE__ */ D(r, { size: 24 }),
|
|
193
|
-
headerActions: /* @__PURE__ */ D(
|
|
193
|
+
headerActions: /* @__PURE__ */ D(A, {
|
|
194
194
|
primary: {
|
|
195
195
|
label: N("movethewheels.orders.actions.newOrder", "New Order"),
|
|
196
196
|
icon: /* @__PURE__ */ D(i, { size: 16 }),
|
|
@@ -207,7 +207,7 @@ function M() {
|
|
|
207
207
|
}]
|
|
208
208
|
}),
|
|
209
209
|
children: [
|
|
210
|
-
/* @__PURE__ */ D(
|
|
210
|
+
/* @__PURE__ */ D(j, {
|
|
211
211
|
icon: /* @__PURE__ */ D(r, { size: 18 }),
|
|
212
212
|
children: N("movethewheels.orders.purpose", "Every delivery job lives here — their status, priority and value. Use this list to find an order, filter by status, and open one to assign a driver, track it, or update fulfilment.")
|
|
213
213
|
}),
|