@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/index.js CHANGED
@@ -1,40 +1,41 @@
1
1
  import { useMoveTheWheels as e, useMoveTheWheelsNavigate as t } from "./providers/MoveTheWheelsProvider.js";
2
- import { MoveTheWheelsRoot as n } from "./MoveTheWheelsRoot.js";
3
- import { useMoveTheWheelsStore as r } from "./store/movethewheelsStore.js";
4
- import { useSandboxAssistantTransport as i } from "./services/createSandboxAssistantTransport.js";
5
- import { useOrder as a, useOrderStats as o, useOrders as s } from "./hooks/useOrders.js";
6
- import { useDriver as c, useDriverStatusCounts as l, useDrivers as u, useFleet as d, useFleetStats as f, useVehicle as p, useVehicleDrivers as m, useVehicles as h } from "./hooks/useFleet.js";
7
- import { useInventory as g, useInventoryStats as _, useInventoryTransactions as v, useProduct as y, useProductStockLevels as b, useProducts as x, useWarehouse as S, useWarehouses as C } from "./hooks/useInventory.js";
8
- import { useCustomer as w, useCustomerStats as T, useCustomers as E } from "./hooks/useCustomers.js";
9
- import { useRoute as D, useRouteStats as O, useRoutes as k } from "./hooks/useRoutes.js";
10
- import { useAnalytics as A, useDashboardMetrics as j, useEmissionsSummary as M, useFinanceMetrics as N, useFleetAnalytics as P, useOrderAnalytics as F, usePerformanceAnalytics as I, useRevenueAnalytics as L } from "./hooks/useAnalytics.js";
11
- import { useDriverTracking as R, useGeofence as z, useLiveTracking as B, useOrderTracking as V, useTracking as H, useTrackingAlerts as U, useVehicleTracking as W } from "./hooks/useTracking.js";
12
- import { useReports as G } from "./hooks/useReports.js";
13
- import { useImportExport as K } from "./hooks/useImportExport.js";
14
- import { useModuleSettings as q } from "./hooks/useSettings.js";
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 { Avatar as ee, AvatarFallback as te, AvatarImage as ne, Badge as re, Button as ie, Card as ae, CardContent as oe, CardDescription as se, CardFooter as ce, CardHeader as le, CardTitle as ue, Checkbox as de, Dialog as fe, DialogContent as pe, DialogDescription as me, DialogFooter as he, DialogHeader as ge, DialogTitle as _e, DialogTrigger as ve, DropdownMenu as ye, DropdownMenuContent as be, DropdownMenuItem as xe, DropdownMenuSeparator as Se, DropdownMenuTrigger as Ce, Input as we, Label as Te, Progress as Ee, ScrollArea as De, Select as Oe, SelectContent as ke, SelectItem as Ae, SelectTrigger as je, SelectValue as Me, Separator as Ne, Skeleton as Pe, Switch as Fe, Table as Ie, TableBody as Le, TableCell as Re, TableHead as ze, TableHeader as Be, TableRow as Ve, Tabs as He, TabsContent as Ue, TabsList as We, TabsTrigger as Ge, Textarea as Ke, Tooltip as qe, TooltipContent as Je, TooltipProvider as Ye, TooltipTrigger as Xe } from "./components/ui.js";
19
- import { EmptyState as Ze, ErrorState as Qe, LoadingState as $e, PageLayout as et, PageSection as tt } from "./components/PageLayout.js";
20
- import { chartTokens as nt, seriesColor as rt } from "./components/charts/chartTokens.js";
21
- import { Sparkline as it } from "./components/charts/Sparkline.js";
22
- import { MetricCard as at, MetricCardSkeleton as ot, MetricGrid as st } from "./components/MetricCard.js";
23
- import { GlassPanel as ct } from "./components/GlassPanel.js";
24
- import { ChartEmpty as lt, ChartTooltip as ut } from "./components/charts/ChartShell.js";
25
- import { TrendChart as dt } from "./components/charts/TrendChart.js";
26
- import { VolumeBar as ft } from "./components/charts/VolumeBar.js";
27
- import { StatusDonut as pt } from "./components/charts/StatusDonut.js";
28
- import { createCurrentIcon as mt, createPinIcon as ht, createStopIcon as gt, isRealCoord as _t } from "./components/maps/leaflet-setup.js";
29
- import { MapCanvas as vt } from "./components/maps/MapCanvas.js";
30
- import { LogisticsMap as yt } from "./components/maps/LogisticsMap.js";
31
- import { RouteMap as bt } from "./components/maps/RouteMap.js";
32
- import { TrackingMap as xt } from "./components/maps/TrackingMap.js";
33
- import { PaymentStatusBadge as St, PriorityBadge as Ct, StatusBadge as wt, TypeBadge as Tt, VehicleTypeBadge as Et } from "./components/StatusBadge.js";
34
- import { DataTable as Dt } from "./components/DataTable.js";
35
- import { FormError as Ot } from "./components/FormError.js";
36
- import { Notice as kt, useNotice as At } from "./components/Notice.js";
37
- import { DocumentsCard as jt } from "./components/DocumentsCard.js";
38
- import { CarbonFootprintPanel as Mt } from "./components/CarbonFootprintPanel.js";
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 { ee as Avatar, te as AvatarFallback, ne as AvatarImage, re as Badge, ie as Button, Mt as CarbonFootprintPanel, ae as Card, oe as CardContent, se as CardDescription, ce as CardFooter, le as CardHeader, ue as CardTitle, lt as ChartEmpty, ut as ChartTooltip, de as Checkbox, Dt as DataTable, fe as Dialog, pe as DialogContent, me as DialogDescription, he as DialogFooter, ge as DialogHeader, _e as DialogTitle, ve as DialogTrigger, jt as DocumentsCard, ye as DropdownMenu, be as DropdownMenuContent, xe as DropdownMenuItem, Se as DropdownMenuSeparator, Ce as DropdownMenuTrigger, Ze as EmptyState, Qe as ErrorState, Ot as FormError, ct as GlassPanel, we as Input, Te as Label, $e as LoadingState, yt as LogisticsMap, vt as MapCanvas, at as MetricCard, ot as MetricCardSkeleton, st as MetricGrid, n as MoveTheWheelsRoot, kt as Notice, et as PageLayout, tt as PageSection, St as PaymentStatusBadge, Ct as PriorityBadge, Ee as Progress, bt as RouteMap, De as ScrollArea, Oe as Select, ke as SelectContent, Ae as SelectItem, je as SelectTrigger, Me as SelectValue, Ne as Separator, Pe as Skeleton, it as Sparkline, wt as StatusBadge, pt as StatusDonut, Fe as Switch, Ie as Table, Le as TableBody, Re as TableCell, ze as TableHead, Be as TableHeader, Ve as TableRow, He as Tabs, Ue as TabsContent, We as TabsList, Ge as TabsTrigger, Ke as Textarea, qe as Tooltip, Je as TooltipContent, Ye as TooltipProvider, Xe as TooltipTrigger, xt as TrackingMap, dt as TrendChart, Tt as TypeBadge, Et as VehicleTypeBadge, ft as VolumeBar, nt as chartTokens, mt as createCurrentIcon, ht as createPinIcon, gt as createStopIcon, _t as isRealCoord, rt as seriesColor, A as useAnalytics, Y as useCaptureEpod, w as useCustomer, T as useCustomerStats, E as useCustomers, j as useDashboardMetrics, c as useDriver, l as useDriverStatusCounts, R as useDriverTracking, u as useDrivers, M as useEmissionsSummary, J as useEntityDocuments, X as useEpod, Z as useEpodPhotoUpload, Q as useEpodPhotoUrl, N as useFinanceMetrics, d as useFleet, P as useFleetAnalytics, f as useFleetStats, z as useGeofence, K as useImportExport, g as useInventory, _ as useInventoryStats, v as useInventoryTransactions, B as useLiveTracking, q as useModuleSettings, e as useMoveTheWheels, t as useMoveTheWheelsNavigate, r as useMoveTheWheelsStore, $ as useMyPendingEpodDeliveryJobs, At as useNotice, a as useOrder, F as useOrderAnalytics, o as useOrderStats, V as useOrderTracking, s as useOrders, I as usePerformanceAnalytics, y as useProduct, b as useProductStockLevels, x as useProducts, G as useReports, L as useRevenueAnalytics, D as useRoute, O as useRouteStats, k as useRoutes, i as useSandboxAssistantTransport, H as useTracking, U as useTrackingAlerts, p as useVehicle, m as useVehicleDrivers, W as useVehicleTracking, h as useVehicles, S as useWarehouse, C as useWarehouses };
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 { Card as a, CardContent as o, CardHeader as s, CardTitle as c } from "../components/ui.js";
7
- import { EmptyState as l, PageLayout as u } from "../components/PageLayout.js";
8
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
- import { GlassCard as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
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
- return /* @__PURE__ */ f(u, {
30
- title: "AI Operations",
31
- subtitle: "What the AI is doing on your workspace, and why",
32
- icon: /* @__PURE__ */ d(t, { size: 24 }),
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__ */ d(m, {
35
- icon: /* @__PURE__ */ d(t, { size: 18 }),
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__ */ d(p, {
40
+ /* @__PURE__ */ f(m, {
39
41
  treatment: "glass",
40
42
  className: "p-4",
41
- children: /* @__PURE__ */ f("div", {
43
+ children: /* @__PURE__ */ p("div", {
42
44
  className: "flex items-start gap-3",
43
- children: [/* @__PURE__ */ d(n, {
45
+ children: [/* @__PURE__ */ f(n, {
44
46
  size: 20,
45
47
  className: "text-primary flex-shrink-0 mt-0.5"
46
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
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__ */ d("p", {
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__ */ f(a, { children: [/* @__PURE__ */ d(s, { children: /* @__PURE__ */ d(c, { children: "On the roadmap" }) }), /* @__PURE__ */ f(o, { children: [/* @__PURE__ */ d(l, {
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__ */ d("ul", {
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: h.map((e) => /* @__PURE__ */ f("li", {
63
+ children: _.map((e) => /* @__PURE__ */ p("li", {
62
64
  className: "flex items-start gap-3",
63
- children: [/* @__PURE__ */ d(e.icon, {
65
+ children: [/* @__PURE__ */ f(e.icon, {
64
66
  size: 18,
65
67
  className: "text-text-secondary flex-shrink-0 mt-0.5"
66
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
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__ */ d("p", {
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 { CTAOverflowMenu as ce, EmphasisPanel as N, PagePurpose as P } from "@burdenoff/fe-libs/ui";
31
- import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
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 } = F(), R = (e, t) => {
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(ce, {
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(P, {
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(N, {
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",
@@ -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 { CTAOverflowMenu as O, EmphasisPanel as k, NextSteps as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
16
- import { useI18n as M } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
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 } = M(), P = (e, t) => {
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(O, {
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(j, {
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(A, {
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(k, {
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 { CTAOverflowMenu as A, EmphasisPanel as j, PagePurpose as M } from "@burdenoff/fe-libs/ui";
25
- import { useI18n as N } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
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 } = N(), R = (e, t) => {
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(A, {
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(M, {
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(j, {
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 { CTAOverflowMenu as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
23
- import { useI18n as j } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
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 } = j(), N = (e, t) => {
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(k, {
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(A, {
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
  }),