@burdenoff/microfe-theglobalfuel 2026.509.101
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/README.md +12 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/theglobalfuel/TheGlobalFuelRoot.d.ts +5 -0
- package/dist/theglobalfuel/TheGlobalFuelRoot.d.ts.map +1 -0
- package/dist/theglobalfuel/TheGlobalFuelRoot.js +175 -0
- package/dist/theglobalfuel/TheGlobalFuelRoot.js.map +1 -0
- package/dist/theglobalfuel/TheGlobalFuelRoutes.d.ts +2 -0
- package/dist/theglobalfuel/TheGlobalFuelRoutes.d.ts.map +1 -0
- package/dist/theglobalfuel/TheGlobalFuelRoutes.js +91 -0
- package/dist/theglobalfuel/TheGlobalFuelRoutes.js.map +1 -0
- package/dist/theglobalfuel/index.d.ts +5 -0
- package/dist/theglobalfuel/index.d.ts.map +1 -0
- package/dist/theglobalfuel/index.js +3 -0
- package/dist/theglobalfuel/pages/AiIntelligencePage.d.ts +2 -0
- package/dist/theglobalfuel/pages/AiIntelligencePage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/AiIntelligencePage.js +190 -0
- package/dist/theglobalfuel/pages/AiIntelligencePage.js.map +1 -0
- package/dist/theglobalfuel/pages/AnalyticsPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/AnalyticsPage.js +241 -0
- package/dist/theglobalfuel/pages/AnalyticsPage.js.map +1 -0
- package/dist/theglobalfuel/pages/CompliancePage.d.ts +2 -0
- package/dist/theglobalfuel/pages/CompliancePage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/CompliancePage.js +173 -0
- package/dist/theglobalfuel/pages/CompliancePage.js.map +1 -0
- package/dist/theglobalfuel/pages/DashboardPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/DashboardPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/DashboardPage.js +145 -0
- package/dist/theglobalfuel/pages/DashboardPage.js.map +1 -0
- package/dist/theglobalfuel/pages/FinancialPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/FinancialPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/FinancialPage.js +204 -0
- package/dist/theglobalfuel/pages/FinancialPage.js.map +1 -0
- package/dist/theglobalfuel/pages/FleetManagementPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/FleetManagementPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/FleetManagementPage.js +244 -0
- package/dist/theglobalfuel/pages/FleetManagementPage.js.map +1 -0
- package/dist/theglobalfuel/pages/MarketplacePage.d.ts +2 -0
- package/dist/theglobalfuel/pages/MarketplacePage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/MarketplacePage.js +260 -0
- package/dist/theglobalfuel/pages/MarketplacePage.js.map +1 -0
- package/dist/theglobalfuel/pages/OperationsPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/OperationsPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/OperationsPage.js +190 -0
- package/dist/theglobalfuel/pages/OperationsPage.js.map +1 -0
- package/dist/theglobalfuel/pages/QualityControlPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/QualityControlPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/QualityControlPage.js +215 -0
- package/dist/theglobalfuel/pages/QualityControlPage.js.map +1 -0
- package/dist/theglobalfuel/pages/ReportsPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/ReportsPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/ReportsPage.js +247 -0
- package/dist/theglobalfuel/pages/ReportsPage.js.map +1 -0
- package/dist/theglobalfuel/pages/ResourcesPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/ResourcesPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/ResourcesPage.js +225 -0
- package/dist/theglobalfuel/pages/ResourcesPage.js.map +1 -0
- package/dist/theglobalfuel/pages/RiskManagementPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/RiskManagementPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/RiskManagementPage.js +230 -0
- package/dist/theglobalfuel/pages/RiskManagementPage.js.map +1 -0
- package/dist/theglobalfuel/pages/SupplyChainPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/SupplyChainPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/SupplyChainPage.js +214 -0
- package/dist/theglobalfuel/pages/SupplyChainPage.js.map +1 -0
- package/dist/theglobalfuel/pages/SustainabilityPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/SustainabilityPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/SustainabilityPage.js +261 -0
- package/dist/theglobalfuel/pages/SustainabilityPage.js.map +1 -0
- package/dist/theglobalfuel/pages/TrainingPage.d.ts +2 -0
- package/dist/theglobalfuel/pages/TrainingPage.d.ts.map +1 -0
- package/dist/theglobalfuel/pages/TrainingPage.js +253 -0
- package/dist/theglobalfuel/pages/TrainingPage.js.map +1 -0
- package/dist/theglobalfuel/providers/TheGlobalFuelProvider.d.ts +6 -0
- package/dist/theglobalfuel/providers/TheGlobalFuelProvider.d.ts.map +1 -0
- package/dist/theglobalfuel/providers/TheGlobalFuelProvider.js +27 -0
- package/dist/theglobalfuel/providers/TheGlobalFuelProvider.js.map +1 -0
- package/dist/theglobalfuel/store/theglobalfuelStore.d.ts +163 -0
- package/dist/theglobalfuel/store/theglobalfuelStore.d.ts.map +1 -0
- package/dist/theglobalfuel/store/theglobalfuelStore.js +712 -0
- package/dist/theglobalfuel/store/theglobalfuelStore.js.map +1 -0
- package/dist/theglobalfuel/types/index.d.ts +51 -0
- package/dist/theglobalfuel/types/index.d.ts.map +1 -0
- package/dist/theglobalfuel/utils/cn.d.ts +4 -0
- package/dist/theglobalfuel/utils/cn.d.ts.map +1 -0
- package/dist/theglobalfuel/utils/cn.js +10 -0
- package/dist/theglobalfuel/utils/cn.js.map +1 -0
- package/dist/theglobalfuel/utils/i18n.d.ts +6 -0
- package/dist/theglobalfuel/utils/i18n.d.ts.map +1 -0
- package/dist/theglobalfuel/utils/i18n.js +15 -0
- package/dist/theglobalfuel/utils/i18n.js.map +1 -0
- package/dist/theglobalfuel/utils/navigation.d.ts +2 -0
- package/dist/theglobalfuel/utils/navigation.d.ts.map +1 -0
- package/dist/theglobalfuel/utils/navigation.js +8 -0
- package/dist/theglobalfuel/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { useTheGlobalFuelStore as e } from "../store/theglobalfuelStore.js";
|
|
2
|
+
import { Activity as t, AlertTriangle as n, CheckCircle as r, FileText as i, Shield as a, TrendingDown as o } from "lucide-react";
|
|
3
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, Tabs as h, TabsContent as g, TabsList as _, TabsTrigger as v } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/theglobalfuel/pages/RiskManagementPage.tsx
|
|
6
|
+
function y() {
|
|
7
|
+
let { risks: y } = e(), b = y.filter((e) => e.riskLevel === "high" || e.riskLevel === "critical").length, x = y.filter((e) => e.status === "mitigated").length;
|
|
8
|
+
return /* @__PURE__ */ c("div", {
|
|
9
|
+
className: "space-y-6 p-6",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ c("div", {
|
|
12
|
+
className: "flex items-center justify-between",
|
|
13
|
+
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("h1", {
|
|
14
|
+
className: "flex items-center gap-2 text-2xl font-semibold",
|
|
15
|
+
children: [/* @__PURE__ */ s(a, { className: "h-7 w-7 text-blue-600" }), "Risk Management"]
|
|
16
|
+
}), /* @__PURE__ */ s("p", {
|
|
17
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
18
|
+
children: "Operational, environmental, and financial risk assessment for energy operations"
|
|
19
|
+
})] }), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(i, { className: "mr-2 h-4 w-4" }), "New Assessment"] })]
|
|
20
|
+
}),
|
|
21
|
+
/* @__PURE__ */ c("div", {
|
|
22
|
+
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
|
|
25
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
26
|
+
children: [/* @__PURE__ */ s(m, {
|
|
27
|
+
className: "text-sm font-medium",
|
|
28
|
+
children: "Total Risks"
|
|
29
|
+
}), /* @__PURE__ */ s(t, { className: "h-4 w-4 text-gray-600" })]
|
|
30
|
+
}), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
|
|
31
|
+
className: "text-2xl font-bold",
|
|
32
|
+
children: y.length
|
|
33
|
+
}), /* @__PURE__ */ c("p", {
|
|
34
|
+
className: "text-xs text-muted-foreground",
|
|
35
|
+
children: [y.filter((e) => e.status === "active").length, " active"]
|
|
36
|
+
})] })] }),
|
|
37
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
|
|
38
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
39
|
+
children: [/* @__PURE__ */ s(m, {
|
|
40
|
+
className: "text-sm font-medium",
|
|
41
|
+
children: "High/Critical"
|
|
42
|
+
}), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-red-600" })]
|
|
43
|
+
}), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
|
|
44
|
+
className: "text-2xl font-bold",
|
|
45
|
+
children: b
|
|
46
|
+
}), /* @__PURE__ */ s("p", {
|
|
47
|
+
className: "text-xs text-muted-foreground",
|
|
48
|
+
children: "Require immediate attention"
|
|
49
|
+
})] })] }),
|
|
50
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
|
|
51
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
52
|
+
children: [/* @__PURE__ */ s(m, {
|
|
53
|
+
className: "text-sm font-medium",
|
|
54
|
+
children: "Mitigation Rate"
|
|
55
|
+
}), /* @__PURE__ */ s(o, { className: "h-4 w-4 text-green-600" })]
|
|
56
|
+
}), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
|
|
57
|
+
className: "text-2xl font-bold",
|
|
58
|
+
children: "82%"
|
|
59
|
+
}), /* @__PURE__ */ c("p", {
|
|
60
|
+
className: "flex items-center text-xs text-green-600",
|
|
61
|
+
children: [/* @__PURE__ */ s(r, { className: "mr-1 h-3 w-3" }), "Above target"]
|
|
62
|
+
})] })] }),
|
|
63
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
|
|
64
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
65
|
+
children: [/* @__PURE__ */ s(m, {
|
|
66
|
+
className: "text-sm font-medium",
|
|
67
|
+
children: "Mitigated"
|
|
68
|
+
}), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-green-600" })]
|
|
69
|
+
}), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
|
|
70
|
+
className: "text-2xl font-bold",
|
|
71
|
+
children: x
|
|
72
|
+
}), /* @__PURE__ */ s("p", {
|
|
73
|
+
className: "text-xs text-muted-foreground",
|
|
74
|
+
children: "Successfully addressed"
|
|
75
|
+
})] })] })
|
|
76
|
+
]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ c(h, {
|
|
79
|
+
defaultValue: "assessments",
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ c(_, { children: [/* @__PURE__ */ s(v, {
|
|
82
|
+
value: "assessments",
|
|
83
|
+
children: "Risk Assessments"
|
|
84
|
+
}), /* @__PURE__ */ s(v, {
|
|
85
|
+
value: "monitoring",
|
|
86
|
+
children: "Monitoring"
|
|
87
|
+
})] }),
|
|
88
|
+
/* @__PURE__ */ s(g, {
|
|
89
|
+
value: "assessments",
|
|
90
|
+
className: "mt-4",
|
|
91
|
+
children: /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, { children: /* @__PURE__ */ s(m, { children: "Risk Register" }) }), /* @__PURE__ */ s(f, {
|
|
92
|
+
className: "space-y-4",
|
|
93
|
+
children: y.map((e) => /* @__PURE__ */ c("div", {
|
|
94
|
+
className: `rounded-lg border-2 p-4 ${e.riskLevel === "critical" ? "border-red-300 bg-red-50" : e.riskLevel === "high" ? "border-orange-200 bg-orange-50" : e.riskLevel === "medium" ? "border-yellow-200 bg-yellow-50" : "border-blue-200 bg-blue-50"}`,
|
|
95
|
+
children: [/* @__PURE__ */ s("div", {
|
|
96
|
+
className: "mb-2 flex items-start justify-between",
|
|
97
|
+
children: /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
98
|
+
className: "mb-1 flex items-center gap-2",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ s("h4", {
|
|
101
|
+
className: "font-semibold",
|
|
102
|
+
children: e.title
|
|
103
|
+
}),
|
|
104
|
+
/* @__PURE__ */ s(l, {
|
|
105
|
+
variant: "outline",
|
|
106
|
+
className: e.riskLevel === "critical" ? "text-red-600" : e.riskLevel === "high" ? "text-orange-600" : e.riskLevel === "medium" ? "text-yellow-600" : "text-blue-600",
|
|
107
|
+
children: e.riskLevel.toUpperCase()
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ s(l, {
|
|
110
|
+
variant: "outline",
|
|
111
|
+
children: e.category.replace(/_/g, " ")
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
}), /* @__PURE__ */ s("p", {
|
|
115
|
+
className: "text-sm text-muted-foreground",
|
|
116
|
+
children: e.description
|
|
117
|
+
})] })
|
|
118
|
+
}), /* @__PURE__ */ c("div", {
|
|
119
|
+
className: "grid grid-cols-2 gap-3 text-sm md:grid-cols-4",
|
|
120
|
+
children: [
|
|
121
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("span", {
|
|
122
|
+
className: "text-xs text-muted-foreground",
|
|
123
|
+
children: "Probability"
|
|
124
|
+
}), /* @__PURE__ */ s("p", {
|
|
125
|
+
className: "font-medium capitalize",
|
|
126
|
+
children: e.probability
|
|
127
|
+
})] }),
|
|
128
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("span", {
|
|
129
|
+
className: "text-xs text-muted-foreground",
|
|
130
|
+
children: "Impact"
|
|
131
|
+
}), /* @__PURE__ */ s("p", {
|
|
132
|
+
className: "font-medium capitalize",
|
|
133
|
+
children: e.impact
|
|
134
|
+
})] }),
|
|
135
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("span", {
|
|
136
|
+
className: "text-xs text-muted-foreground",
|
|
137
|
+
children: "Owner"
|
|
138
|
+
}), /* @__PURE__ */ s("p", {
|
|
139
|
+
className: "font-medium",
|
|
140
|
+
children: e.owner
|
|
141
|
+
})] }),
|
|
142
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("span", {
|
|
143
|
+
className: "text-xs text-muted-foreground",
|
|
144
|
+
children: "Budget"
|
|
145
|
+
}), /* @__PURE__ */ s("p", {
|
|
146
|
+
className: "font-medium",
|
|
147
|
+
children: e.mitigationBudget
|
|
148
|
+
})] })
|
|
149
|
+
]
|
|
150
|
+
})]
|
|
151
|
+
}, e.id))
|
|
152
|
+
})] })
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ s(g, {
|
|
155
|
+
value: "monitoring",
|
|
156
|
+
className: "mt-4",
|
|
157
|
+
children: /* @__PURE__ */ c("div", {
|
|
158
|
+
className: "grid gap-4 lg:grid-cols-2",
|
|
159
|
+
children: [/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, { children: /* @__PURE__ */ s(m, { children: "Risk Distribution" }) }), /* @__PURE__ */ s(f, {
|
|
160
|
+
className: "space-y-3",
|
|
161
|
+
children: [
|
|
162
|
+
{
|
|
163
|
+
label: "Critical",
|
|
164
|
+
count: y.filter((e) => e.riskLevel === "critical").length,
|
|
165
|
+
color: "bg-red-500"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
label: "High",
|
|
169
|
+
count: y.filter((e) => e.riskLevel === "high").length,
|
|
170
|
+
color: "bg-orange-500"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
label: "Medium",
|
|
174
|
+
count: y.filter((e) => e.riskLevel === "medium").length,
|
|
175
|
+
color: "bg-yellow-500"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
label: "Low",
|
|
179
|
+
count: y.filter((e) => e.riskLevel === "low").length,
|
|
180
|
+
color: "bg-blue-500"
|
|
181
|
+
}
|
|
182
|
+
].map((e) => /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
183
|
+
className: "mb-1 flex items-center justify-between",
|
|
184
|
+
children: [/* @__PURE__ */ c("div", {
|
|
185
|
+
className: "flex items-center gap-2",
|
|
186
|
+
children: [/* @__PURE__ */ s("div", { className: `h-3 w-3 rounded ${e.color}` }), /* @__PURE__ */ s("span", {
|
|
187
|
+
className: "text-sm",
|
|
188
|
+
children: e.label
|
|
189
|
+
})]
|
|
190
|
+
}), /* @__PURE__ */ s("span", {
|
|
191
|
+
className: "text-sm font-bold",
|
|
192
|
+
children: e.count
|
|
193
|
+
})]
|
|
194
|
+
}), /* @__PURE__ */ s("div", {
|
|
195
|
+
className: "h-2 w-full rounded-full bg-muted",
|
|
196
|
+
children: /* @__PURE__ */ s("div", {
|
|
197
|
+
className: `h-2 rounded-full ${e.color}`,
|
|
198
|
+
style: { width: `${e.count / y.length * 100}%` }
|
|
199
|
+
})
|
|
200
|
+
})] }, e.label))
|
|
201
|
+
})] }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, { children: /* @__PURE__ */ s(m, { children: "By Category" }) }), /* @__PURE__ */ s(f, {
|
|
202
|
+
className: "space-y-3",
|
|
203
|
+
children: [
|
|
204
|
+
"operational",
|
|
205
|
+
"supply_chain",
|
|
206
|
+
"environmental",
|
|
207
|
+
"financial",
|
|
208
|
+
"safety"
|
|
209
|
+
].map((e) => /* @__PURE__ */ c("div", {
|
|
210
|
+
className: "flex items-center justify-between rounded border p-3",
|
|
211
|
+
children: [/* @__PURE__ */ s("span", {
|
|
212
|
+
className: "font-medium capitalize",
|
|
213
|
+
children: e.replace(/_/g, " ")
|
|
214
|
+
}), /* @__PURE__ */ c(l, {
|
|
215
|
+
variant: "outline",
|
|
216
|
+
children: [y.filter((t) => t.category === e).length, " risks"]
|
|
217
|
+
})]
|
|
218
|
+
}, e))
|
|
219
|
+
})] })]
|
|
220
|
+
})
|
|
221
|
+
})
|
|
222
|
+
]
|
|
223
|
+
})
|
|
224
|
+
]
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//#endregion
|
|
228
|
+
export { y as RiskManagementPage };
|
|
229
|
+
|
|
230
|
+
//# sourceMappingURL=RiskManagementPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiskManagementPage.js","names":[],"sources":["../../../src/theglobalfuel/pages/RiskManagementPage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from '@burdenoff/fe-libs/ui';\nimport { Shield, AlertTriangle, TrendingDown, CheckCircle, FileText, Activity } from 'lucide-react';\nimport { useTheGlobalFuelStore } from '../store/theglobalfuelStore';\n\nexport function RiskManagementPage() {\n const { risks } = useTheGlobalFuelStore();\n const highRisks = risks.filter(\n (r) => r.riskLevel === 'high' || r.riskLevel === 'critical'\n ).length;\n const mitigated = risks.filter((r) => r.status === 'mitigated').length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <Shield className=\"h-7 w-7 text-blue-600\" />\n Risk Management\n </h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Operational, environmental, and financial risk assessment for energy operations\n </p>\n </div>\n <Button>\n <FileText className=\"mr-2 h-4 w-4\" />\n New Assessment\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Risks</CardTitle>\n <Activity className=\"h-4 w-4 text-gray-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{risks.length}</div>\n <p className=\"text-xs text-muted-foreground\">\n {risks.filter((r) => r.status === 'active').length} active\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">High/Critical</CardTitle>\n <AlertTriangle className=\"h-4 w-4 text-red-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{highRisks}</div>\n <p className=\"text-xs text-muted-foreground\">Require immediate attention</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Mitigation Rate</CardTitle>\n <TrendingDown className=\"h-4 w-4 text-green-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">82%</div>\n <p className=\"flex items-center text-xs text-green-600\">\n <CheckCircle className=\"mr-1 h-3 w-3\" />\n Above target\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Mitigated</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-green-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{mitigated}</div>\n <p className=\"text-xs text-muted-foreground\">Successfully addressed</p>\n </CardContent>\n </Card>\n </div>\n <Tabs defaultValue=\"assessments\">\n <TabsList>\n <TabsTrigger value=\"assessments\">Risk Assessments</TabsTrigger>\n <TabsTrigger value=\"monitoring\">Monitoring</TabsTrigger>\n </TabsList>\n <TabsContent value=\"assessments\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle>Risk Register</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {risks.map((r) => (\n <div\n key={r.id}\n className={`rounded-lg border-2 p-4 ${r.riskLevel === 'critical' ? 'border-red-300 bg-red-50' : r.riskLevel === 'high' ? 'border-orange-200 bg-orange-50' : r.riskLevel === 'medium' ? 'border-yellow-200 bg-yellow-50' : 'border-blue-200 bg-blue-50'}`}\n >\n <div className=\"mb-2 flex items-start justify-between\">\n <div>\n <div className=\"mb-1 flex items-center gap-2\">\n <h4 className=\"font-semibold\">{r.title}</h4>\n <Badge\n variant=\"outline\"\n className={\n r.riskLevel === 'critical'\n ? 'text-red-600'\n : r.riskLevel === 'high'\n ? 'text-orange-600'\n : r.riskLevel === 'medium'\n ? 'text-yellow-600'\n : 'text-blue-600'\n }\n >\n {r.riskLevel.toUpperCase()}\n </Badge>\n <Badge variant=\"outline\">{r.category.replace(/_/g, ' ')}</Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">{r.description}</p>\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-3 text-sm md:grid-cols-4\">\n <div>\n <span className=\"text-xs text-muted-foreground\">Probability</span>\n <p className=\"font-medium capitalize\">{r.probability}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">Impact</span>\n <p className=\"font-medium capitalize\">{r.impact}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">Owner</span>\n <p className=\"font-medium\">{r.owner}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">Budget</span>\n <p className=\"font-medium\">{r.mitigationBudget}</p>\n </div>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"monitoring\" className=\"mt-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Risk Distribution</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n {\n label: 'Critical',\n count: risks.filter((r) => r.riskLevel === 'critical').length,\n color: 'bg-red-500',\n },\n {\n label: 'High',\n count: risks.filter((r) => r.riskLevel === 'high').length,\n color: 'bg-orange-500',\n },\n {\n label: 'Medium',\n count: risks.filter((r) => r.riskLevel === 'medium').length,\n color: 'bg-yellow-500',\n },\n {\n label: 'Low',\n count: risks.filter((r) => r.riskLevel === 'low').length,\n color: 'bg-blue-500',\n },\n ].map((d) => (\n <div key={d.label}>\n <div className=\"mb-1 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div className={`h-3 w-3 rounded ${d.color}`} />\n <span className=\"text-sm\">{d.label}</span>\n </div>\n <span className=\"text-sm font-bold\">{d.count}</span>\n </div>\n <div className=\"h-2 w-full rounded-full bg-muted\">\n <div\n className={`h-2 rounded-full ${d.color}`}\n style={{ width: `${(d.count / risks.length) * 100}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>By Category</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {['operational', 'supply_chain', 'environmental', 'financial', 'safety'].map(\n (cat) => (\n <div key={cat} className=\"flex items-center justify-between rounded border p-3\">\n <span className=\"font-medium capitalize\">{cat.replace(/_/g, ' ')}</span>\n <Badge variant=\"outline\">\n {risks.filter((r) => r.category === cat).length} risks\n </Badge>\n </div>\n )\n )}\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupplyChainPage.d.ts","sourceRoot":"","sources":["../../../src/theglobalfuel/pages/SupplyChainPage.tsx"],"names":[],"mappings":"AAeA,wBAAgB,eAAe,4CA4K9B"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { useTheGlobalFuelStore as e } from "../store/theglobalfuelStore.js";
|
|
2
|
+
import { AlertCircle as t, Fuel as n, Package as r, Truck as i, Users as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, Tabs as m, TabsContent as h, TabsList as g, TabsTrigger as _ } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/theglobalfuel/pages/SupplyChainPage.tsx
|
|
6
|
+
function v() {
|
|
7
|
+
let { supplyChain: v } = e(), y = v.reduce((e, t) => e + t.volumeBarrels, 0);
|
|
8
|
+
return /* @__PURE__ */ s("div", {
|
|
9
|
+
className: "space-y-6 p-6",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ s("div", {
|
|
12
|
+
className: "flex items-center justify-between",
|
|
13
|
+
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("h1", {
|
|
14
|
+
className: "flex items-center gap-2 text-2xl font-semibold",
|
|
15
|
+
children: [/* @__PURE__ */ o(r, { className: "h-7 w-7 text-green-600" }), "Supply Chain Management"]
|
|
16
|
+
}), /* @__PURE__ */ o("p", {
|
|
17
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
18
|
+
children: "Crude oil logistics, pipeline shipments, and procurement operations"
|
|
19
|
+
})] }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o(i, { className: "mr-2 h-4 w-4" }), "Track Shipment"] })]
|
|
20
|
+
}),
|
|
21
|
+
/* @__PURE__ */ s("div", {
|
|
22
|
+
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(f, {
|
|
25
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
26
|
+
children: [/* @__PURE__ */ o(p, {
|
|
27
|
+
className: "text-sm font-medium",
|
|
28
|
+
children: "Active Shipments"
|
|
29
|
+
}), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-blue-600" })]
|
|
30
|
+
}), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("div", {
|
|
31
|
+
className: "text-2xl font-bold",
|
|
32
|
+
children: v.length
|
|
33
|
+
}), /* @__PURE__ */ s("p", {
|
|
34
|
+
className: "text-xs text-muted-foreground",
|
|
35
|
+
children: [v.filter((e) => e.status === "in-transit").length, " in transit"]
|
|
36
|
+
})] })] }),
|
|
37
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(f, {
|
|
38
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
39
|
+
children: [/* @__PURE__ */ o(p, {
|
|
40
|
+
className: "text-sm font-medium",
|
|
41
|
+
children: "Volume In Transit"
|
|
42
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-amber-600" })]
|
|
43
|
+
}), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ s("div", {
|
|
44
|
+
className: "text-2xl font-bold",
|
|
45
|
+
children: [(y / 1e6).toFixed(1), "M bbl"]
|
|
46
|
+
}), /* @__PURE__ */ o("p", {
|
|
47
|
+
className: "text-xs text-muted-foreground",
|
|
48
|
+
children: "Crude & refined products"
|
|
49
|
+
})] })] }),
|
|
50
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(f, {
|
|
51
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
52
|
+
children: [/* @__PURE__ */ o(p, {
|
|
53
|
+
className: "text-sm font-medium",
|
|
54
|
+
children: "Active Carriers"
|
|
55
|
+
}), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-purple-600" })]
|
|
56
|
+
}), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("div", {
|
|
57
|
+
className: "text-2xl font-bold",
|
|
58
|
+
children: new Set(v.map((e) => e.carrier)).size
|
|
59
|
+
}), /* @__PURE__ */ o("p", {
|
|
60
|
+
className: "text-xs text-muted-foreground",
|
|
61
|
+
children: "Logistics partners"
|
|
62
|
+
})] })] }),
|
|
63
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(f, {
|
|
64
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
65
|
+
children: [/* @__PURE__ */ o(p, {
|
|
66
|
+
className: "text-sm font-medium",
|
|
67
|
+
children: "Delayed"
|
|
68
|
+
}), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-red-600" })]
|
|
69
|
+
}), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("div", {
|
|
70
|
+
className: "text-2xl font-bold",
|
|
71
|
+
children: v.filter((e) => e.status === "delayed").length
|
|
72
|
+
}), /* @__PURE__ */ o("p", {
|
|
73
|
+
className: "text-xs text-muted-foreground",
|
|
74
|
+
children: "Requires attention"
|
|
75
|
+
})] })] })
|
|
76
|
+
]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ s(m, {
|
|
79
|
+
defaultValue: "shipments",
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ s(g, { children: [/* @__PURE__ */ o(_, {
|
|
82
|
+
value: "shipments",
|
|
83
|
+
children: "Shipments"
|
|
84
|
+
}), /* @__PURE__ */ o(_, {
|
|
85
|
+
value: "carriers",
|
|
86
|
+
children: "Carriers"
|
|
87
|
+
})] }),
|
|
88
|
+
/* @__PURE__ */ o(h, {
|
|
89
|
+
value: "shipments",
|
|
90
|
+
className: "mt-4",
|
|
91
|
+
children: /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "Active Shipments" }) }), /* @__PURE__ */ o(d, {
|
|
92
|
+
className: "space-y-4",
|
|
93
|
+
children: v.map((e) => /* @__PURE__ */ s("div", {
|
|
94
|
+
className: "rounded-lg border p-4",
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ s("div", {
|
|
97
|
+
className: "mb-2 flex items-center justify-between",
|
|
98
|
+
children: [/* @__PURE__ */ s("div", {
|
|
99
|
+
className: "flex items-center gap-2",
|
|
100
|
+
children: [/* @__PURE__ */ o("p", {
|
|
101
|
+
className: "font-semibold",
|
|
102
|
+
children: e.id
|
|
103
|
+
}), /* @__PURE__ */ o(c, {
|
|
104
|
+
variant: "outline",
|
|
105
|
+
className: e.status === "in-transit" ? "text-blue-600" : e.status === "delivered" ? "text-green-600" : e.status === "delayed" ? "text-red-600" : "text-amber-600",
|
|
106
|
+
children: e.status.toUpperCase()
|
|
107
|
+
})]
|
|
108
|
+
}), /* @__PURE__ */ s("span", {
|
|
109
|
+
className: "text-sm font-medium",
|
|
110
|
+
children: [e.volumeBarrels.toLocaleString(), " bbl"]
|
|
111
|
+
})]
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ s("div", {
|
|
114
|
+
className: "grid grid-cols-2 gap-3 text-sm md:grid-cols-4",
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
|
|
117
|
+
className: "text-xs text-muted-foreground",
|
|
118
|
+
children: "Commodity"
|
|
119
|
+
}), /* @__PURE__ */ o("p", {
|
|
120
|
+
className: "font-medium",
|
|
121
|
+
children: e.commodity
|
|
122
|
+
})] }),
|
|
123
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
|
|
124
|
+
className: "text-xs text-muted-foreground",
|
|
125
|
+
children: "Origin"
|
|
126
|
+
}), /* @__PURE__ */ o("p", {
|
|
127
|
+
className: "font-medium",
|
|
128
|
+
children: e.origin
|
|
129
|
+
})] }),
|
|
130
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
|
|
131
|
+
className: "text-xs text-muted-foreground",
|
|
132
|
+
children: "Destination"
|
|
133
|
+
}), /* @__PURE__ */ o("p", {
|
|
134
|
+
className: "font-medium",
|
|
135
|
+
children: e.destination
|
|
136
|
+
})] }),
|
|
137
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
|
|
138
|
+
className: "text-xs text-muted-foreground",
|
|
139
|
+
children: "ETA"
|
|
140
|
+
}), /* @__PURE__ */ o("p", {
|
|
141
|
+
className: "font-medium",
|
|
142
|
+
children: e.eta
|
|
143
|
+
})] })
|
|
144
|
+
]
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ s("p", {
|
|
147
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
148
|
+
children: ["Carrier: ", e.carrier]
|
|
149
|
+
})
|
|
150
|
+
]
|
|
151
|
+
}, e.id))
|
|
152
|
+
})] })
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ o(h, {
|
|
155
|
+
value: "carriers",
|
|
156
|
+
className: "mt-4",
|
|
157
|
+
children: /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "Key Carriers" }) }), /* @__PURE__ */ o(d, {
|
|
158
|
+
className: "space-y-3",
|
|
159
|
+
children: [
|
|
160
|
+
{
|
|
161
|
+
name: "Plains All American",
|
|
162
|
+
type: "Pipeline",
|
|
163
|
+
reliability: "98.5%",
|
|
164
|
+
rating: "A+"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "Enterprise Products",
|
|
168
|
+
type: "Midstream",
|
|
169
|
+
reliability: "97.2%",
|
|
170
|
+
rating: "A"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "VLCC Tanker Fleet",
|
|
174
|
+
type: "Maritime",
|
|
175
|
+
reliability: "95.8%",
|
|
176
|
+
rating: "A"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "Colonial Pipeline",
|
|
180
|
+
type: "Pipeline",
|
|
181
|
+
reliability: "99.1%",
|
|
182
|
+
rating: "A+"
|
|
183
|
+
}
|
|
184
|
+
].map((e) => /* @__PURE__ */ s("div", {
|
|
185
|
+
className: "flex items-center justify-between rounded-lg border p-3",
|
|
186
|
+
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
187
|
+
className: "font-medium",
|
|
188
|
+
children: e.name
|
|
189
|
+
}), /* @__PURE__ */ o("p", {
|
|
190
|
+
className: "text-sm text-muted-foreground",
|
|
191
|
+
children: e.type
|
|
192
|
+
})] }), /* @__PURE__ */ s("div", {
|
|
193
|
+
className: "text-right",
|
|
194
|
+
children: [/* @__PURE__ */ o(c, {
|
|
195
|
+
variant: "outline",
|
|
196
|
+
className: "text-green-600",
|
|
197
|
+
children: e.rating
|
|
198
|
+
}), /* @__PURE__ */ o("p", {
|
|
199
|
+
className: "text-xs text-muted-foreground",
|
|
200
|
+
children: e.reliability
|
|
201
|
+
})]
|
|
202
|
+
})]
|
|
203
|
+
}, e.name))
|
|
204
|
+
})] })
|
|
205
|
+
})
|
|
206
|
+
]
|
|
207
|
+
})
|
|
208
|
+
]
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
//#endregion
|
|
212
|
+
export { v as SupplyChainPage };
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=SupplyChainPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupplyChainPage.js","names":[],"sources":["../../../src/theglobalfuel/pages/SupplyChainPage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from '@burdenoff/fe-libs/ui';\nimport { Truck, Package, AlertCircle, Users, Fuel } from 'lucide-react';\nimport { useTheGlobalFuelStore } from '../store/theglobalfuelStore';\n\nexport function SupplyChainPage() {\n const { supplyChain } = useTheGlobalFuelStore();\n const totalVolume = supplyChain.reduce((a, s) => a + s.volumeBarrels, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <Package className=\"h-7 w-7 text-green-600\" />\n Supply Chain Management\n </h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Crude oil logistics, pipeline shipments, and procurement operations\n </p>\n </div>\n <Button>\n <Truck className=\"mr-2 h-4 w-4\" />\n Track Shipment\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Shipments</CardTitle>\n <Truck className=\"h-4 w-4 text-blue-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{supplyChain.length}</div>\n <p className=\"text-xs text-muted-foreground\">\n {supplyChain.filter((s) => s.status === 'in-transit').length} in transit\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Volume In Transit</CardTitle>\n <Fuel className=\"h-4 w-4 text-amber-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{(totalVolume / 1_000_000).toFixed(1)}M bbl</div>\n <p className=\"text-xs text-muted-foreground\">Crude & refined products</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Carriers</CardTitle>\n <Users className=\"h-4 w-4 text-purple-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {new Set(supplyChain.map((s) => s.carrier)).size}\n </div>\n <p className=\"text-xs text-muted-foreground\">Logistics partners</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Delayed</CardTitle>\n <AlertCircle className=\"h-4 w-4 text-red-600\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {supplyChain.filter((s) => s.status === 'delayed').length}\n </div>\n <p className=\"text-xs text-muted-foreground\">Requires attention</p>\n </CardContent>\n </Card>\n </div>\n <Tabs defaultValue=\"shipments\">\n <TabsList>\n <TabsTrigger value=\"shipments\">Shipments</TabsTrigger>\n <TabsTrigger value=\"carriers\">Carriers</TabsTrigger>\n </TabsList>\n <TabsContent value=\"shipments\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle>Active Shipments</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {supplyChain.map((s) => (\n <div key={s.id} className=\"rounded-lg border p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <p className=\"font-semibold\">{s.id}</p>\n <Badge\n variant=\"outline\"\n className={\n s.status === 'in-transit'\n ? 'text-blue-600'\n : s.status === 'delivered'\n ? 'text-green-600'\n : s.status === 'delayed'\n ? 'text-red-600'\n : 'text-amber-600'\n }\n >\n {s.status.toUpperCase()}\n </Badge>\n </div>\n <span className=\"text-sm font-medium\">\n {s.volumeBarrels.toLocaleString()} bbl\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-3 text-sm md:grid-cols-4\">\n <div>\n <span className=\"text-xs text-muted-foreground\">Commodity</span>\n <p className=\"font-medium\">{s.commodity}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">Origin</span>\n <p className=\"font-medium\">{s.origin}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">Destination</span>\n <p className=\"font-medium\">{s.destination}</p>\n </div>\n <div>\n <span className=\"text-xs text-muted-foreground\">ETA</span>\n <p className=\"font-medium\">{s.eta}</p>\n </div>\n </div>\n <p className=\"mt-2 text-xs text-muted-foreground\">Carrier: {s.carrier}</p>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"carriers\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle>Key Carriers</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n {\n name: 'Plains All American',\n type: 'Pipeline',\n reliability: '98.5%',\n rating: 'A+',\n },\n {\n name: 'Enterprise Products',\n type: 'Midstream',\n reliability: '97.2%',\n rating: 'A',\n },\n { name: 'VLCC Tanker Fleet', type: 'Maritime', reliability: '95.8%', rating: 'A' },\n { name: 'Colonial Pipeline', type: 'Pipeline', reliability: '99.1%', rating: 'A+' },\n ].map((c) => (\n <div\n key={c.name}\n className=\"flex items-center justify-between rounded-lg border p-3\"\n >\n <div>\n <p className=\"font-medium\">{c.name}</p>\n <p className=\"text-sm text-muted-foreground\">{c.type}</p>\n </div>\n <div className=\"text-right\">\n <Badge variant=\"outline\" className=\"text-green-600\">\n {c.rating}\n </Badge>\n <p className=\"text-xs text-muted-foreground\">{c.reliability}</p>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SustainabilityPage.d.ts","sourceRoot":"","sources":["../../../src/theglobalfuel/pages/SustainabilityPage.tsx"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,4CA4MjC"}
|