@burdenoff/microfe-movethewheels 2026.510.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +82 -0
  2. package/dist/AIAssistantPage-hD0VYJdH.js +210 -0
  3. package/dist/AnalyticsPage-DHTHCUtr.js +201 -0
  4. package/dist/CreateOrderPage-Cprg4Y9V.js +471 -0
  5. package/dist/CustomerDetailsPage-DNDEw7IW.js +239 -0
  6. package/dist/CustomersPage-CDjjeCEL.js +119 -0
  7. package/dist/DashboardPage-8iTPXRAG.js +374 -0
  8. package/dist/DataTable-CRIKfdIN.js +239 -0
  9. package/dist/DriverDetailsPage-CRyRCno7.js +297 -0
  10. package/dist/DriversPage-16O8fVmf.js +127 -0
  11. package/dist/FinancePage-BYUxK5dR.js +154 -0
  12. package/dist/FleetPage-CHYETCWT.js +293 -0
  13. package/dist/ImportExportPage-C3MKKxfc.js +232 -0
  14. package/dist/InventoryPage--822AxZM.js +223 -0
  15. package/dist/LiveTrackingPage-Dp3rTJDr.js +332 -0
  16. package/dist/MarketplacePage-DjEqudfM.js +192 -0
  17. package/dist/MetricCard-GTbxAk1a.js +135 -0
  18. package/dist/OrderDetailsPage-BIuYG0ub.js +398 -0
  19. package/dist/OrdersListPage-CW5V0Uvh.js +257 -0
  20. package/dist/PageLayout-B7b0vl0R.js +1894 -0
  21. package/dist/ProductDetailsPage-Q3X7AT-7.js +168 -0
  22. package/dist/ProductsPage-CUj9JpnW.js +131 -0
  23. package/dist/ReportsPage-DblO5CdJ.js +227 -0
  24. package/dist/RouteDetailsPage-CLctgk6A.js +240 -0
  25. package/dist/RoutesPage-8hrv6RWT.js +116 -0
  26. package/dist/SettingsPage-BJ5BQeqn.js +247 -0
  27. package/dist/StatusBadge-BrrwraIA.js +206 -0
  28. package/dist/TrackingPage-BGqHDh-w.js +322 -0
  29. package/dist/VehicleDetailsPage-XnDH4iQR.js +194 -0
  30. package/dist/VehiclesPage-Cs4XxHkA.js +127 -0
  31. package/dist/WarehouseDetailsPage-GemdMvr_.js +215 -0
  32. package/dist/WarehousesPage-QTiuDuXy.js +121 -0
  33. package/dist/arrow-left-6CiLhqVp.js +11 -0
  34. package/dist/box-BunB_4UH.js +18 -0
  35. package/dist/chart-column-DWwVEVQ-.js +22 -0
  36. package/dist/chevron-right-DhZVf20o.js +8 -0
  37. package/dist/circle-alert-D5f6RZxt.js +26 -0
  38. package/dist/circle-check-big-D-JMHcTe.js +11 -0
  39. package/dist/clock-CvwBKbQP.js +13 -0
  40. package/dist/dev/main.d.ts +1 -0
  41. package/dist/dollar-sign-CP9qeU5d.js +14 -0
  42. package/dist/download-CIuG04pJ.js +21 -0
  43. package/dist/file-text-Dd_thxkn.js +26 -0
  44. package/dist/filter-DyRMX9CU.js +8 -0
  45. package/dist/formatters-_vJlC-47.js +50 -0
  46. package/dist/generated/global-operations.d.ts +1 -0
  47. package/dist/generated/global-types.d.ts +20715 -0
  48. package/dist/generated/wspace-operations.d.ts +3704 -0
  49. package/dist/generated/wspace-types.d.ts +53362 -0
  50. package/dist/graphqlClient-CdJyR_ed.js +55 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/index.js +772 -0
  53. package/dist/map-BqH1cBJi.js +18 -0
  54. package/dist/map-pin-CFBOmh-A.js +13 -0
  55. package/dist/movethewheels/MoveTheWheelsRoot.d.ts +25 -0
  56. package/dist/movethewheels/MoveTheWheelsRoutes.d.ts +7 -0
  57. package/dist/movethewheels/components/DataTable.d.ts +32 -0
  58. package/dist/movethewheels/components/MetricCard.d.ts +43 -0
  59. package/dist/movethewheels/components/PageLayout.d.ts +68 -0
  60. package/dist/movethewheels/components/StatusBadge.d.ts +49 -0
  61. package/dist/movethewheels/components/index.d.ts +10 -0
  62. package/dist/movethewheels/components/ui.d.ts +22 -0
  63. package/dist/movethewheels/constants/index.d.ts +24 -0
  64. package/dist/movethewheels/constants/mockData.d.ts +33 -0
  65. package/dist/movethewheels/hooks/index.d.ts +12 -0
  66. package/dist/movethewheels/hooks/useAnalytics.d.ts +118 -0
  67. package/dist/movethewheels/hooks/useCustomers.d.ts +37 -0
  68. package/dist/movethewheels/hooks/useFleet.d.ts +71 -0
  69. package/dist/movethewheels/hooks/useInventory.d.ts +60 -0
  70. package/dist/movethewheels/hooks/useOrders.d.ts +47 -0
  71. package/dist/movethewheels/hooks/useRoutes.d.ts +41 -0
  72. package/dist/movethewheels/hooks/useTracking.d.ts +69 -0
  73. package/dist/movethewheels/index.d.ts +30 -0
  74. package/dist/movethewheels/pages/AIAssistantPage.d.ts +4 -0
  75. package/dist/movethewheels/pages/AnalyticsPage.d.ts +4 -0
  76. package/dist/movethewheels/pages/CreateOrderPage.d.ts +6 -0
  77. package/dist/movethewheels/pages/CustomerDetailsPage.d.ts +4 -0
  78. package/dist/movethewheels/pages/CustomersPage.d.ts +4 -0
  79. package/dist/movethewheels/pages/DashboardPage.d.ts +6 -0
  80. package/dist/movethewheels/pages/DriverDetailsPage.d.ts +4 -0
  81. package/dist/movethewheels/pages/DriversPage.d.ts +4 -0
  82. package/dist/movethewheels/pages/FinancePage.d.ts +4 -0
  83. package/dist/movethewheels/pages/FleetPage.d.ts +6 -0
  84. package/dist/movethewheels/pages/ImportExportPage.d.ts +4 -0
  85. package/dist/movethewheels/pages/InventoryPage.d.ts +4 -0
  86. package/dist/movethewheels/pages/LiveTrackingPage.d.ts +6 -0
  87. package/dist/movethewheels/pages/MarketplacePage.d.ts +4 -0
  88. package/dist/movethewheels/pages/OrderDetailsPage.d.ts +6 -0
  89. package/dist/movethewheels/pages/OrdersListPage.d.ts +6 -0
  90. package/dist/movethewheels/pages/ProductDetailsPage.d.ts +4 -0
  91. package/dist/movethewheels/pages/ProductsPage.d.ts +4 -0
  92. package/dist/movethewheels/pages/ReportsPage.d.ts +4 -0
  93. package/dist/movethewheels/pages/RouteDetailsPage.d.ts +4 -0
  94. package/dist/movethewheels/pages/RoutesPage.d.ts +4 -0
  95. package/dist/movethewheels/pages/SettingsPage.d.ts +4 -0
  96. package/dist/movethewheels/pages/TrackingPage.d.ts +6 -0
  97. package/dist/movethewheels/pages/VehicleDetailsPage.d.ts +4 -0
  98. package/dist/movethewheels/pages/VehiclesPage.d.ts +4 -0
  99. package/dist/movethewheels/pages/WarehouseDetailsPage.d.ts +4 -0
  100. package/dist/movethewheels/pages/WarehousesPage.d.ts +4 -0
  101. package/dist/movethewheels/providers/MoveTheWheelsProvider.d.ts +16 -0
  102. package/dist/movethewheels/store/movethewheelsStore.d.ts +73 -0
  103. package/dist/movethewheels/types/index.d.ts +655 -0
  104. package/dist/movethewheels/utils/cn.d.ts +6 -0
  105. package/dist/movethewheels/utils/formatters.d.ts +60 -0
  106. package/dist/movethewheels/utils/graphqlClient.d.ts +11 -0
  107. package/dist/movethewheels/utils/index.d.ts +7 -0
  108. package/dist/movethewheels/utils/navigation.d.ts +23 -0
  109. package/dist/navigation-BgnOfsVd.js +6 -0
  110. package/dist/navigation-C2fY_aS9.js +8 -0
  111. package/dist/package-DVZbDRcV.js +22 -0
  112. package/dist/phone-KdwpVmC4.js +18 -0
  113. package/dist/plus-Bl7uX6Ji.js +11 -0
  114. package/dist/refresh-cw-BYjl3K-8.js +22 -0
  115. package/dist/route-Ce_poKFi.js +51 -0
  116. package/dist/save-C-qDVat-.js +18 -0
  117. package/dist/search-5pdn5eOO.js +13 -0
  118. package/dist/settings-C4kIDsYg.js +28 -0
  119. package/dist/square-pen-BwQ67vLE.js +11 -0
  120. package/dist/star-BlVsC3Ad.js +8 -0
  121. package/dist/store-DTmQT5M0.js +26 -0
  122. package/dist/trending-up-C1faflCI.js +11 -0
  123. package/dist/triangle-alert-CUoVAA4L.js +18 -0
  124. package/dist/truck-BmDAzu05.js +30 -0
  125. package/dist/useAnalytics-ph7eTIK6.js +297 -0
  126. package/dist/useCustomers-bS3a4ytk.js +186 -0
  127. package/dist/useFleet-BdETplNE.js +398 -0
  128. package/dist/useInventory-Dwn18FPz.js +323 -0
  129. package/dist/useOrders-D_3_hGMp.js +324 -0
  130. package/dist/useRoutes-v4aBaS-E.js +224 -0
  131. package/dist/useTracking-De2KIUNu.js +261 -0
  132. package/dist/user-BplzDrLP.js +13 -0
  133. package/dist/users-i-igmsP4.js +24 -0
  134. package/dist/warehouse-DewG0PXh.js +25 -0
  135. package/dist/wrench-CoSDEIC7.js +31 -0
  136. package/package.json +107 -0
  137. package/src/dev/main.tsx +110 -0
  138. package/src/dev/styles.css +139 -0
  139. package/src/generated/global-operations.ts +2 -0
  140. package/src/generated/global-types.ts +24048 -0
  141. package/src/generated/wspace-operations.ts +3734 -0
  142. package/src/generated/wspace-types.ts +60715 -0
  143. package/src/index.ts +4 -0
  144. package/src/movethewheels/MoveTheWheelsRoot.tsx +258 -0
  145. package/src/movethewheels/MoveTheWheelsRoutes.tsx +119 -0
  146. package/src/movethewheels/components/DataTable.tsx +367 -0
  147. package/src/movethewheels/components/MetricCard.tsx +180 -0
  148. package/src/movethewheels/components/PageLayout.tsx +234 -0
  149. package/src/movethewheels/components/StatusBadge.tsx +243 -0
  150. package/src/movethewheels/components/index.ts +26 -0
  151. package/src/movethewheels/components/ui.tsx +124 -0
  152. package/src/movethewheels/constants/index.ts +65 -0
  153. package/src/movethewheels/constants/mockData.ts +1342 -0
  154. package/src/movethewheels/hooks/index.ts +55 -0
  155. package/src/movethewheels/hooks/useAnalytics.ts +476 -0
  156. package/src/movethewheels/hooks/useCustomers.ts +359 -0
  157. package/src/movethewheels/hooks/useFleet.ts +778 -0
  158. package/src/movethewheels/hooks/useInventory.ts +632 -0
  159. package/src/movethewheels/hooks/useOrders.ts +703 -0
  160. package/src/movethewheels/hooks/useRoutes.ts +453 -0
  161. package/src/movethewheels/hooks/useTracking.ts +505 -0
  162. package/src/movethewheels/index.ts +68 -0
  163. package/src/movethewheels/pages/AIAssistantPage.tsx +160 -0
  164. package/src/movethewheels/pages/AnalyticsPage.tsx +190 -0
  165. package/src/movethewheels/pages/CreateOrderPage.tsx +454 -0
  166. package/src/movethewheels/pages/CustomerDetailsPage.tsx +207 -0
  167. package/src/movethewheels/pages/CustomersPage.tsx +115 -0
  168. package/src/movethewheels/pages/DashboardPage.tsx +414 -0
  169. package/src/movethewheels/pages/DriverDetailsPage.tsx +261 -0
  170. package/src/movethewheels/pages/DriversPage.tsx +118 -0
  171. package/src/movethewheels/pages/FinancePage.tsx +141 -0
  172. package/src/movethewheels/pages/FleetPage.tsx +289 -0
  173. package/src/movethewheels/pages/ImportExportPage.tsx +165 -0
  174. package/src/movethewheels/pages/InventoryPage.tsx +212 -0
  175. package/src/movethewheels/pages/LiveTrackingPage.tsx +325 -0
  176. package/src/movethewheels/pages/MarketplacePage.tsx +235 -0
  177. package/src/movethewheels/pages/OrderDetailsPage.tsx +387 -0
  178. package/src/movethewheels/pages/OrdersListPage.tsx +241 -0
  179. package/src/movethewheels/pages/ProductDetailsPage.tsx +155 -0
  180. package/src/movethewheels/pages/ProductsPage.tsx +124 -0
  181. package/src/movethewheels/pages/ReportsPage.tsx +164 -0
  182. package/src/movethewheels/pages/RouteDetailsPage.tsx +245 -0
  183. package/src/movethewheels/pages/RoutesPage.tsx +104 -0
  184. package/src/movethewheels/pages/SettingsPage.tsx +242 -0
  185. package/src/movethewheels/pages/TrackingPage.tsx +419 -0
  186. package/src/movethewheels/pages/VehicleDetailsPage.tsx +218 -0
  187. package/src/movethewheels/pages/VehiclesPage.tsx +124 -0
  188. package/src/movethewheels/pages/WarehouseDetailsPage.tsx +216 -0
  189. package/src/movethewheels/pages/WarehousesPage.tsx +122 -0
  190. package/src/movethewheels/providers/MoveTheWheelsProvider.tsx +66 -0
  191. package/src/movethewheels/store/movethewheelsStore.ts +136 -0
  192. package/src/movethewheels/types/index.ts +744 -0
  193. package/src/movethewheels/utils/cn.ts +9 -0
  194. package/src/movethewheels/utils/formatters.ts +215 -0
  195. package/src/movethewheels/utils/graphqlClient.ts +63 -0
  196. package/src/movethewheels/utils/index.ts +8 -0
  197. package/src/movethewheels/utils/navigation.ts +70 -0
  198. package/src/operations/global/.gitkeep +0 -0
  199. package/src/operations/wspace/movethewheels/fragments/core.graphql +191 -0
  200. package/src/operations/wspace/movethewheels/mutations/entities.graphql +87 -0
  201. package/src/operations/wspace/movethewheels/mutations/logistics.graphql +86 -0
  202. package/src/operations/wspace/movethewheels/mutations/marketplace-reports.graphql +81 -0
  203. package/src/operations/wspace/movethewheels/mutations/orders.graphql +21 -0
  204. package/src/operations/wspace/movethewheels/queries/dashboard.graphql +61 -0
  205. package/src/operations/wspace/movethewheels/queries/entities.graphql +83 -0
  206. package/src/operations/wspace/movethewheels/queries/logistics.graphql +84 -0
  207. package/src/operations/wspace/movethewheels/queries/marketplace-reports.graphql +40 -0
  208. package/src/operations/wspace/movethewheels/queries/orders.graphql +43 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * AI Assistant Page
3
+ */
4
+
5
+ import { useState } from 'react';
6
+ import { Bot, Send, Sparkles, Lightbulb, TrendingUp, Route, AlertCircle } from 'lucide-react';
7
+ import { PageLayout } from '../components/PageLayout';
8
+ import {
9
+ Card,
10
+ CardContent,
11
+ CardHeader,
12
+ CardTitle,
13
+ Button,
14
+ Input,
15
+ Badge,
16
+ ScrollArea,
17
+ } from '../components/ui';
18
+
19
+ export default function AIAssistantPage() {
20
+ const [message, setMessage] = useState('');
21
+ const [messages, setMessages] = useState([
22
+ {
23
+ role: 'assistant',
24
+ content:
25
+ "Hello! I'm your logistics AI assistant. I can help you with route optimization, demand forecasting, fleet management insights, and more. How can I help you today?",
26
+ },
27
+ ]);
28
+
29
+ const suggestions = [
30
+ { icon: Route, text: "Optimize today's delivery routes", category: 'Route Planning' },
31
+ { icon: TrendingUp, text: 'Show demand forecast for next week', category: 'Analytics' },
32
+ { icon: AlertCircle, text: 'Identify potential delivery delays', category: 'Alerts' },
33
+ { icon: Lightbulb, text: 'Suggest fleet efficiency improvements', category: 'Insights' },
34
+ ];
35
+
36
+ const capabilities = [
37
+ 'Route Optimization - Find the most efficient delivery routes',
38
+ 'Demand Forecasting - Predict order volumes and trends',
39
+ 'Fleet Analysis - Insights on vehicle and driver performance',
40
+ 'Cost Optimization - Identify ways to reduce operational costs',
41
+ 'Natural Language Queries - Ask questions in plain English',
42
+ ];
43
+
44
+ const handleSend = () => {
45
+ if (!message.trim()) return;
46
+ setMessages([
47
+ ...messages,
48
+ { role: 'user', content: message },
49
+ {
50
+ role: 'assistant',
51
+ content: `I understand you're asking about "${message}". Let me analyze that for you...\n\nBased on your current data, here are my findings:\n\n1. Your fleet utilization is currently at 78%, which is within the optimal range.\n2. There are 5 pending orders that could benefit from route consolidation.\n3. Estimated fuel savings from optimization: $120/day.\n\nWould you like me to generate a detailed report or take any action?`,
52
+ },
53
+ ]);
54
+ setMessage('');
55
+ };
56
+
57
+ return (
58
+ <PageLayout
59
+ title="AI Assistant"
60
+ subtitle="Intelligent logistics support"
61
+ icon={<Bot size={24} />}
62
+ >
63
+ <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
64
+ <div className="lg:col-span-2 space-y-4">
65
+ <Card className="h-[600px] flex flex-col">
66
+ <CardHeader className="border-b">
67
+ <CardTitle className="flex items-center gap-2">
68
+ <Sparkles size={18} className="text-primary" /> Chat with AI
69
+ </CardTitle>
70
+ </CardHeader>
71
+ <ScrollArea className="flex-1 p-4">
72
+ <div className="space-y-4">
73
+ {messages.map((msg, i) => (
74
+ <div
75
+ key={i}
76
+ className={`flex ${msg.role === 'user' ? 'justify-end' : 'justify-start'}`}
77
+ >
78
+ <div
79
+ className={`max-w-[80%] p-3 rounded-lg ${msg.role === 'user' ? 'bg-primary text-primary-foreground' : 'bg-muted'}`}
80
+ >
81
+ <p className="whitespace-pre-line text-sm">{msg.content}</p>
82
+ </div>
83
+ </div>
84
+ ))}
85
+ </div>
86
+ </ScrollArea>
87
+ <div className="p-4 border-t">
88
+ <div className="flex gap-2">
89
+ <Input
90
+ value={message}
91
+ onChange={(e) => setMessage(e.target.value)}
92
+ placeholder="Ask me anything about your logistics operations..."
93
+ onKeyPress={(e) => e.key === 'Enter' && handleSend()}
94
+ />
95
+ <Button onClick={handleSend}>
96
+ <Send size={16} />
97
+ </Button>
98
+ </div>
99
+ </div>
100
+ </Card>
101
+ </div>
102
+
103
+ <div className="space-y-6">
104
+ <Card>
105
+ <CardHeader>
106
+ <CardTitle>Quick Actions</CardTitle>
107
+ </CardHeader>
108
+ <CardContent className="space-y-2">
109
+ {suggestions.map((s, i) => (
110
+ <Button
111
+ key={i}
112
+ variant="outline"
113
+ className="w-full justify-start text-left h-auto py-3"
114
+ onClick={() => setMessage(s.text)}
115
+ >
116
+ <s.icon size={16} className="mr-2 flex-shrink-0" />
117
+ <span className="flex-1">{s.text}</span>
118
+ <Badge variant="secondary" className="text-xs">
119
+ {s.category}
120
+ </Badge>
121
+ </Button>
122
+ ))}
123
+ </CardContent>
124
+ </Card>
125
+
126
+ <Card>
127
+ <CardHeader>
128
+ <CardTitle>Capabilities</CardTitle>
129
+ </CardHeader>
130
+ <CardContent>
131
+ <ul className="space-y-2 text-sm">
132
+ {capabilities.map((cap, i) => (
133
+ <li key={i} className="flex items-start gap-2">
134
+ <Sparkles size={14} className="text-primary mt-0.5 flex-shrink-0" />
135
+ <span>{cap}</span>
136
+ </li>
137
+ ))}
138
+ </ul>
139
+ </CardContent>
140
+ </Card>
141
+
142
+ <Card className="bg-primary/5 border-primary/20">
143
+ <CardContent className="p-4">
144
+ <div className="flex items-start gap-3">
145
+ <Lightbulb size={20} className="text-primary flex-shrink-0" />
146
+ <div>
147
+ <p className="font-medium text-sm">Pro Tip</p>
148
+ <p className="text-xs text-muted-foreground">
149
+ You can ask complex questions like "What would happen if I added 2 more vehicles
150
+ to my fleet?" for scenario analysis.
151
+ </p>
152
+ </div>
153
+ </div>
154
+ </CardContent>
155
+ </Card>
156
+ </div>
157
+ </div>
158
+ </PageLayout>
159
+ );
160
+ }
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Analytics Page
3
+ */
4
+
5
+ import { BarChart3, TrendingUp, Package, Truck, DollarSign, Users } from 'lucide-react';
6
+ import { PageLayout } from '../components/PageLayout';
7
+ import { MetricCard, MetricGrid } from '../components/MetricCard';
8
+ import { Card, CardContent, CardHeader, CardTitle, Progress } from '../components/ui';
9
+ import { useAnalytics, useOrderAnalytics, useFleetAnalytics } from '../hooks/useAnalytics';
10
+ import { formatCurrency } from '../utils/formatters';
11
+
12
+ export default function AnalyticsPage() {
13
+ const { analytics } = useAnalytics();
14
+ const { orderData } = useOrderAnalytics();
15
+ const { fleetData } = useFleetAnalytics();
16
+
17
+ return (
18
+ <PageLayout
19
+ title="Analytics"
20
+ subtitle="Business performance and insights"
21
+ icon={<BarChart3 size={24} />}
22
+ >
23
+ <MetricGrid columns={5}>
24
+ <MetricCard
25
+ label="Total Orders"
26
+ value={analytics.overview.totalOrders.toLocaleString()}
27
+ icon={<Package size={20} />}
28
+ change="+8.2%"
29
+ changeType="positive"
30
+ trend="up"
31
+ />
32
+ <MetricCard
33
+ label="Revenue"
34
+ value={formatCurrency(analytics.overview.totalRevenue)}
35
+ icon={<DollarSign size={20} />}
36
+ change="+12.5%"
37
+ changeType="positive"
38
+ trend="up"
39
+ />
40
+ <MetricCard
41
+ label="Active Vehicles"
42
+ value={analytics.overview.activeVehicles}
43
+ icon={<Truck size={20} />}
44
+ />
45
+ <MetricCard
46
+ label="On-Time Rate"
47
+ value={`${analytics.overview.onTimeDeliveryRate}%`}
48
+ icon={<TrendingUp size={20} />}
49
+ changeType={analytics.overview.onTimeDeliveryRate >= 90 ? 'positive' : 'negative'}
50
+ />
51
+ <MetricCard
52
+ label="Satisfaction"
53
+ value={analytics.overview.customerSatisfaction.toFixed(1)}
54
+ icon={<Users size={20} />}
55
+ subtitle="out of 5"
56
+ />
57
+ </MetricGrid>
58
+
59
+ <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
60
+ <Card>
61
+ <CardHeader>
62
+ <CardTitle>Order Trends</CardTitle>
63
+ </CardHeader>
64
+ <CardContent>
65
+ <div className="h-64 flex items-center justify-center bg-muted/50 rounded-lg">
66
+ <div className="text-center text-muted-foreground">
67
+ <BarChart3 size={48} className="mx-auto mb-2 opacity-50" />
68
+ <p>Order trend chart</p>
69
+ <p className="text-xs">(Chart library integration needed)</p>
70
+ </div>
71
+ </div>
72
+ <div className="mt-4 grid grid-cols-4 gap-2">
73
+ {orderData.trends.slice(-4).map((t) => (
74
+ <div key={t.date} className="text-center p-2 bg-muted/50 rounded">
75
+ <p className="text-xs text-muted-foreground">
76
+ {t.date.split('-').slice(1).join('/')}
77
+ </p>
78
+ <p className="font-medium">{t.orders}</p>
79
+ </div>
80
+ ))}
81
+ </div>
82
+ </CardContent>
83
+ </Card>
84
+
85
+ <Card>
86
+ <CardHeader>
87
+ <CardTitle>Revenue Trends</CardTitle>
88
+ </CardHeader>
89
+ <CardContent>
90
+ <div className="h-64 flex items-center justify-center bg-muted/50 rounded-lg">
91
+ <div className="text-center text-muted-foreground">
92
+ <TrendingUp size={48} className="mx-auto mb-2 opacity-50" />
93
+ <p>Revenue trend chart</p>
94
+ </div>
95
+ </div>
96
+ <div className="mt-4 grid grid-cols-5 gap-2">
97
+ {analytics.trends.revenue.map((r) => (
98
+ <div key={r.month} className="text-center p-2 bg-muted/50 rounded">
99
+ <p className="text-xs text-muted-foreground">{r.month}</p>
100
+ <p className="font-medium text-sm">{formatCurrency(r.revenue / 1000)}k</p>
101
+ </div>
102
+ ))}
103
+ </div>
104
+ </CardContent>
105
+ </Card>
106
+ </div>
107
+
108
+ <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
109
+ <Card>
110
+ <CardHeader>
111
+ <CardTitle>Orders by Status</CardTitle>
112
+ </CardHeader>
113
+ <CardContent className="space-y-3">
114
+ {orderData.byStatus
115
+ .filter((s) => s.count > 0)
116
+ .map(({ status, count }) => (
117
+ <div key={status} className="flex items-center justify-between">
118
+ <span className="text-sm capitalize">{status.replace('_', ' ')}</span>
119
+ <div className="flex items-center gap-2">
120
+ <Progress
121
+ value={(count / analytics.overview.totalOrders) * 100}
122
+ className="w-20 h-2"
123
+ />
124
+ <span className="font-medium w-8 text-right">{count}</span>
125
+ </div>
126
+ </div>
127
+ ))}
128
+ </CardContent>
129
+ </Card>
130
+
131
+ <Card>
132
+ <CardHeader>
133
+ <CardTitle>Fleet Performance</CardTitle>
134
+ </CardHeader>
135
+ <CardContent className="space-y-4">
136
+ <div>
137
+ <div className="flex justify-between text-sm mb-1">
138
+ <span>Vehicle Utilization</span>
139
+ <span>{fleetData.vehicleUtilization.toFixed(0)}%</span>
140
+ </div>
141
+ <Progress value={fleetData.vehicleUtilization} />
142
+ </div>
143
+ <div>
144
+ <div className="flex justify-between text-sm mb-1">
145
+ <span>Avg Fuel Level</span>
146
+ <span>{fleetData.avgFuelLevel.toFixed(0)}%</span>
147
+ </div>
148
+ <Progress value={fleetData.avgFuelLevel} />
149
+ </div>
150
+ <div className="pt-2">
151
+ <p className="text-sm text-muted-foreground mb-2">Vehicles by Type</p>
152
+ {fleetData.vehiclesByType.map(({ type, count }) => (
153
+ <div key={type} className="flex justify-between text-sm py-1">
154
+ <span className="capitalize">{type}</span>
155
+ <span className="font-medium">{count}</span>
156
+ </div>
157
+ ))}
158
+ </div>
159
+ </CardContent>
160
+ </Card>
161
+
162
+ <Card>
163
+ <CardHeader>
164
+ <CardTitle>Performance Metrics</CardTitle>
165
+ </CardHeader>
166
+ <CardContent className="space-y-4">
167
+ <div>
168
+ <p className="text-sm text-muted-foreground">On-Time Pickup</p>
169
+ <p className="text-2xl font-bold">{analytics.performance.onTimePickup}%</p>
170
+ </div>
171
+ <div>
172
+ <p className="text-sm text-muted-foreground">On-Time Delivery</p>
173
+ <p className="text-2xl font-bold">{analytics.performance.onTimeDelivery}%</p>
174
+ </div>
175
+ <div>
176
+ <p className="text-sm text-muted-foreground">Damaged Items</p>
177
+ <p className="text-2xl font-bold text-green-600">
178
+ {analytics.performance.damagedItems}%
179
+ </p>
180
+ </div>
181
+ <div>
182
+ <p className="text-sm text-muted-foreground">Driver Ratings</p>
183
+ <p className="text-2xl font-bold">{analytics.performance.driverRatings}/5</p>
184
+ </div>
185
+ </CardContent>
186
+ </Card>
187
+ </div>
188
+ </PageLayout>
189
+ );
190
+ }