@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,104 @@
1
+ /**
2
+ * Routes Page
3
+ */
4
+
5
+ import { Plus, RefreshCw, Navigation } from 'lucide-react';
6
+ import { PageLayout } from '../components/PageLayout';
7
+ import { DataTable, type Column } from '../components/DataTable';
8
+ import { StatusBadge } from '../components/StatusBadge';
9
+ import { Button, Badge } from '../components/ui';
10
+ import { useRoutes } from '../hooks/useRoutes';
11
+ import { useMoveTheWheels } from '../providers/MoveTheWheelsProvider';
12
+ import { formatDate } from '../utils/formatters';
13
+ import { joinPath } from '../utils/navigation';
14
+ import type { Route } from '../types';
15
+
16
+ export default function RoutesPage() {
17
+ const { basePath, navigate } = useMoveTheWheels();
18
+ const { routes, totalRoutes, isLoading, refetch } = useRoutes();
19
+
20
+ const goTo = (path: string) => navigate?.(joinPath(basePath, path));
21
+
22
+ const columns: Column<Route>[] = [
23
+ {
24
+ id: 'name',
25
+ header: 'Route Name',
26
+ accessorKey: 'name',
27
+ sortable: true,
28
+ cell: (row) => <span className="font-medium">{row.name}</span>,
29
+ },
30
+ {
31
+ id: 'status',
32
+ header: 'Status',
33
+ accessorKey: 'status',
34
+ sortable: true,
35
+ cell: (row) => {
36
+ const colors = {
37
+ planned: { bg: 'bg-blue-100', text: 'text-blue-700' },
38
+ in_progress: { bg: 'bg-yellow-100', text: 'text-yellow-700' },
39
+ completed: { bg: 'bg-green-100', text: 'text-green-700' },
40
+ cancelled: { bg: 'bg-red-100', text: 'text-red-700' },
41
+ };
42
+ return <StatusBadge status={row.status} customColors={colors[row.status]} />;
43
+ },
44
+ },
45
+ {
46
+ id: 'stops',
47
+ header: 'Stops',
48
+ cell: (row) => <Badge variant="secondary">{row.stops.length} stops</Badge>,
49
+ },
50
+ {
51
+ id: 'distance',
52
+ header: 'Distance',
53
+ accessorKey: 'distance',
54
+ sortable: true,
55
+ cell: (row) => `${row.distance.toFixed(1)} km`,
56
+ },
57
+ { id: 'duration', header: 'Est. Duration', cell: (row) => `${row.estimatedDuration} min` },
58
+ {
59
+ id: 'optimized',
60
+ header: 'Optimized',
61
+ cell: (row) => (
62
+ <Badge variant={row.optimized ? 'default' : 'outline'}>
63
+ {row.optimized ? 'Yes' : 'No'}
64
+ </Badge>
65
+ ),
66
+ },
67
+ {
68
+ id: 'created',
69
+ header: 'Created',
70
+ accessorKey: 'createdAt',
71
+ sortable: true,
72
+ cell: (row) => formatDate(row.createdAt, 'short'),
73
+ },
74
+ ];
75
+
76
+ return (
77
+ <PageLayout
78
+ title="Routes"
79
+ subtitle={`${totalRoutes} routes`}
80
+ icon={<Navigation size={24} />}
81
+ headerActions={
82
+ <div className="flex gap-2">
83
+ <Button variant="outline" onClick={refetch}>
84
+ <RefreshCw size={16} /> Refresh
85
+ </Button>
86
+ <Button onClick={() => goTo('routes/new')}>
87
+ <Plus size={16} /> Create Route
88
+ </Button>
89
+ </div>
90
+ }
91
+ >
92
+ <DataTable
93
+ columns={columns}
94
+ data={routes}
95
+ isLoading={isLoading}
96
+ searchable
97
+ searchPlaceholder="Search routes..."
98
+ searchFields={['name'] as (keyof Route)[]}
99
+ onRowClick={(row) => goTo(`routes/${row.id}`)}
100
+ getRowId={(row) => row.id}
101
+ />
102
+ </PageLayout>
103
+ );
104
+ }
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Settings Page
3
+ */
4
+
5
+ import { Settings, User, Bell, Shield, Globe, Webhook, Save } from 'lucide-react';
6
+ import { PageLayout } from '../components/PageLayout';
7
+ import {
8
+ Card,
9
+ CardContent,
10
+ CardHeader,
11
+ CardTitle,
12
+ CardDescription,
13
+ Button,
14
+ Input,
15
+ Label,
16
+ Switch,
17
+ Select,
18
+ SelectContent,
19
+ SelectItem,
20
+ SelectTrigger,
21
+ SelectValue,
22
+ Tabs,
23
+ TabsList,
24
+ TabsTrigger,
25
+ TabsContent,
26
+ } from '../components/ui';
27
+
28
+ export default function SettingsPage() {
29
+ return (
30
+ <PageLayout
31
+ title="Settings"
32
+ subtitle="Manage your account and preferences"
33
+ icon={<Settings size={24} />}
34
+ >
35
+ <Tabs defaultValue="general">
36
+ <TabsList className="mb-6">
37
+ <TabsTrigger value="general">
38
+ <User size={16} /> General
39
+ </TabsTrigger>
40
+ <TabsTrigger value="notifications">
41
+ <Bell size={16} /> Notifications
42
+ </TabsTrigger>
43
+ <TabsTrigger value="security">
44
+ <Shield size={16} /> Security
45
+ </TabsTrigger>
46
+ <TabsTrigger value="integrations">
47
+ <Webhook size={16} /> Integrations
48
+ </TabsTrigger>
49
+ </TabsList>
50
+
51
+ <TabsContent value="general" className="space-y-6">
52
+ <Card>
53
+ <CardHeader>
54
+ <CardTitle>Company Information</CardTitle>
55
+ <CardDescription>Basic company details</CardDescription>
56
+ </CardHeader>
57
+ <CardContent className="space-y-4">
58
+ <div className="grid grid-cols-2 gap-4">
59
+ <div>
60
+ <Label>Company Name</Label>
61
+ <Input defaultValue="QuickLogistics Pro" />
62
+ </div>
63
+ <div>
64
+ <Label>Contact Email</Label>
65
+ <Input defaultValue="contact@quicklogistics.com" />
66
+ </div>
67
+ <div>
68
+ <Label>Phone</Label>
69
+ <Input defaultValue="+1-555-QUICK" />
70
+ </div>
71
+ <div>
72
+ <Label>Website</Label>
73
+ <Input defaultValue="https://quicklogistics.com" />
74
+ </div>
75
+ </div>
76
+ </CardContent>
77
+ </Card>
78
+
79
+ <Card>
80
+ <CardHeader>
81
+ <CardTitle className="flex items-center gap-2">
82
+ <Globe size={18} /> Localization
83
+ </CardTitle>
84
+ </CardHeader>
85
+ <CardContent className="space-y-4">
86
+ <div className="grid grid-cols-3 gap-4">
87
+ <div>
88
+ <Label>Timezone</Label>
89
+ <Select defaultValue="pst">
90
+ <SelectTrigger>
91
+ <SelectValue />
92
+ </SelectTrigger>
93
+ <SelectContent>
94
+ <SelectItem value="pst">Pacific Time (PST)</SelectItem>
95
+ <SelectItem value="est">Eastern Time (EST)</SelectItem>
96
+ <SelectItem value="utc">UTC</SelectItem>
97
+ </SelectContent>
98
+ </Select>
99
+ </div>
100
+ <div>
101
+ <Label>Currency</Label>
102
+ <Select defaultValue="usd">
103
+ <SelectTrigger>
104
+ <SelectValue />
105
+ </SelectTrigger>
106
+ <SelectContent>
107
+ <SelectItem value="usd">USD ($)</SelectItem>
108
+ <SelectItem value="eur">EUR (€)</SelectItem>
109
+ <SelectItem value="gbp">GBP (£)</SelectItem>
110
+ </SelectContent>
111
+ </Select>
112
+ </div>
113
+ <div>
114
+ <Label>Language</Label>
115
+ <Select defaultValue="en">
116
+ <SelectTrigger>
117
+ <SelectValue />
118
+ </SelectTrigger>
119
+ <SelectContent>
120
+ <SelectItem value="en">English</SelectItem>
121
+ <SelectItem value="es">Spanish</SelectItem>
122
+ <SelectItem value="fr">French</SelectItem>
123
+ </SelectContent>
124
+ </Select>
125
+ </div>
126
+ </div>
127
+ </CardContent>
128
+ </Card>
129
+ </TabsContent>
130
+
131
+ <TabsContent value="notifications" className="space-y-6">
132
+ <Card>
133
+ <CardHeader>
134
+ <CardTitle>Email Notifications</CardTitle>
135
+ </CardHeader>
136
+ <CardContent className="space-y-4">
137
+ {[
138
+ { label: 'Order updates', desc: 'Receive notifications for order status changes' },
139
+ { label: 'Delivery alerts', desc: 'Get notified about delivery issues' },
140
+ { label: 'System notifications', desc: 'Important system updates and maintenance' },
141
+ { label: 'Weekly reports', desc: 'Receive weekly performance summary' },
142
+ ].map((item) => (
143
+ <div key={item.label} className="flex items-center justify-between">
144
+ <div>
145
+ <p className="font-medium">{item.label}</p>
146
+ <p className="text-sm text-muted-foreground">{item.desc}</p>
147
+ </div>
148
+ <Switch defaultChecked />
149
+ </div>
150
+ ))}
151
+ </CardContent>
152
+ </Card>
153
+ </TabsContent>
154
+
155
+ <TabsContent value="security" className="space-y-6">
156
+ <Card>
157
+ <CardHeader>
158
+ <CardTitle>Password</CardTitle>
159
+ </CardHeader>
160
+ <CardContent className="space-y-4">
161
+ <div>
162
+ <Label>Current Password</Label>
163
+ <Input type="password" />
164
+ </div>
165
+ <div className="grid grid-cols-2 gap-4">
166
+ <div>
167
+ <Label>New Password</Label>
168
+ <Input type="password" />
169
+ </div>
170
+ <div>
171
+ <Label>Confirm Password</Label>
172
+ <Input type="password" />
173
+ </div>
174
+ </div>
175
+ <Button>Update Password</Button>
176
+ </CardContent>
177
+ </Card>
178
+ <Card>
179
+ <CardHeader>
180
+ <CardTitle>Two-Factor Authentication</CardTitle>
181
+ <CardDescription>Add an extra layer of security</CardDescription>
182
+ </CardHeader>
183
+ <CardContent>
184
+ <div className="flex items-center justify-between">
185
+ <div>
186
+ <p>
187
+ Status: <span className="text-red-500 font-medium">Disabled</span>
188
+ </p>
189
+ </div>
190
+ <Button variant="outline">Enable 2FA</Button>
191
+ </div>
192
+ </CardContent>
193
+ </Card>
194
+ </TabsContent>
195
+
196
+ <TabsContent value="integrations" className="space-y-6">
197
+ <Card>
198
+ <CardHeader>
199
+ <CardTitle>API Keys</CardTitle>
200
+ <CardDescription>Manage your API access</CardDescription>
201
+ </CardHeader>
202
+ <CardContent className="space-y-4">
203
+ <div className="p-4 bg-muted rounded-lg">
204
+ <p className="font-medium">Production API Key</p>
205
+ <code className="text-sm">pk_live_••••••••••••••••</code>
206
+ </div>
207
+ <Button variant="outline">Generate New Key</Button>
208
+ </CardContent>
209
+ </Card>
210
+ <Card>
211
+ <CardHeader>
212
+ <CardTitle>Connected Services</CardTitle>
213
+ </CardHeader>
214
+ <CardContent className="space-y-3">
215
+ {[
216
+ { name: 'Google Maps', status: 'Connected' },
217
+ { name: 'Stripe', status: 'Connected' },
218
+ { name: 'Twilio', status: 'Not Connected' },
219
+ ].map((s) => (
220
+ <div
221
+ key={s.name}
222
+ className="flex items-center justify-between p-3 border rounded-lg"
223
+ >
224
+ <span>{s.name}</span>
225
+ <Button variant={s.status === 'Connected' ? 'outline' : 'default'} size="sm">
226
+ {s.status === 'Connected' ? 'Manage' : 'Connect'}
227
+ </Button>
228
+ </div>
229
+ ))}
230
+ </CardContent>
231
+ </Card>
232
+ </TabsContent>
233
+ </Tabs>
234
+
235
+ <div className="flex justify-end">
236
+ <Button>
237
+ <Save size={16} /> Save Changes
238
+ </Button>
239
+ </div>
240
+ </PageLayout>
241
+ );
242
+ }