@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.
Files changed (112) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +18199 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +2 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +43046 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  16. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  17. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
  18. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  19. package/dist/theglobalfuel/TheGlobalFuelRoot.d.ts +5 -0
  20. package/dist/theglobalfuel/TheGlobalFuelRoot.d.ts.map +1 -0
  21. package/dist/theglobalfuel/TheGlobalFuelRoot.js +175 -0
  22. package/dist/theglobalfuel/TheGlobalFuelRoot.js.map +1 -0
  23. package/dist/theglobalfuel/TheGlobalFuelRoutes.d.ts +2 -0
  24. package/dist/theglobalfuel/TheGlobalFuelRoutes.d.ts.map +1 -0
  25. package/dist/theglobalfuel/TheGlobalFuelRoutes.js +91 -0
  26. package/dist/theglobalfuel/TheGlobalFuelRoutes.js.map +1 -0
  27. package/dist/theglobalfuel/index.d.ts +5 -0
  28. package/dist/theglobalfuel/index.d.ts.map +1 -0
  29. package/dist/theglobalfuel/index.js +3 -0
  30. package/dist/theglobalfuel/pages/AiIntelligencePage.d.ts +2 -0
  31. package/dist/theglobalfuel/pages/AiIntelligencePage.d.ts.map +1 -0
  32. package/dist/theglobalfuel/pages/AiIntelligencePage.js +190 -0
  33. package/dist/theglobalfuel/pages/AiIntelligencePage.js.map +1 -0
  34. package/dist/theglobalfuel/pages/AnalyticsPage.d.ts +2 -0
  35. package/dist/theglobalfuel/pages/AnalyticsPage.d.ts.map +1 -0
  36. package/dist/theglobalfuel/pages/AnalyticsPage.js +241 -0
  37. package/dist/theglobalfuel/pages/AnalyticsPage.js.map +1 -0
  38. package/dist/theglobalfuel/pages/CompliancePage.d.ts +2 -0
  39. package/dist/theglobalfuel/pages/CompliancePage.d.ts.map +1 -0
  40. package/dist/theglobalfuel/pages/CompliancePage.js +173 -0
  41. package/dist/theglobalfuel/pages/CompliancePage.js.map +1 -0
  42. package/dist/theglobalfuel/pages/DashboardPage.d.ts +2 -0
  43. package/dist/theglobalfuel/pages/DashboardPage.d.ts.map +1 -0
  44. package/dist/theglobalfuel/pages/DashboardPage.js +145 -0
  45. package/dist/theglobalfuel/pages/DashboardPage.js.map +1 -0
  46. package/dist/theglobalfuel/pages/FinancialPage.d.ts +2 -0
  47. package/dist/theglobalfuel/pages/FinancialPage.d.ts.map +1 -0
  48. package/dist/theglobalfuel/pages/FinancialPage.js +204 -0
  49. package/dist/theglobalfuel/pages/FinancialPage.js.map +1 -0
  50. package/dist/theglobalfuel/pages/FleetManagementPage.d.ts +2 -0
  51. package/dist/theglobalfuel/pages/FleetManagementPage.d.ts.map +1 -0
  52. package/dist/theglobalfuel/pages/FleetManagementPage.js +244 -0
  53. package/dist/theglobalfuel/pages/FleetManagementPage.js.map +1 -0
  54. package/dist/theglobalfuel/pages/MarketplacePage.d.ts +2 -0
  55. package/dist/theglobalfuel/pages/MarketplacePage.d.ts.map +1 -0
  56. package/dist/theglobalfuel/pages/MarketplacePage.js +260 -0
  57. package/dist/theglobalfuel/pages/MarketplacePage.js.map +1 -0
  58. package/dist/theglobalfuel/pages/OperationsPage.d.ts +2 -0
  59. package/dist/theglobalfuel/pages/OperationsPage.d.ts.map +1 -0
  60. package/dist/theglobalfuel/pages/OperationsPage.js +190 -0
  61. package/dist/theglobalfuel/pages/OperationsPage.js.map +1 -0
  62. package/dist/theglobalfuel/pages/QualityControlPage.d.ts +2 -0
  63. package/dist/theglobalfuel/pages/QualityControlPage.d.ts.map +1 -0
  64. package/dist/theglobalfuel/pages/QualityControlPage.js +215 -0
  65. package/dist/theglobalfuel/pages/QualityControlPage.js.map +1 -0
  66. package/dist/theglobalfuel/pages/ReportsPage.d.ts +2 -0
  67. package/dist/theglobalfuel/pages/ReportsPage.d.ts.map +1 -0
  68. package/dist/theglobalfuel/pages/ReportsPage.js +247 -0
  69. package/dist/theglobalfuel/pages/ReportsPage.js.map +1 -0
  70. package/dist/theglobalfuel/pages/ResourcesPage.d.ts +2 -0
  71. package/dist/theglobalfuel/pages/ResourcesPage.d.ts.map +1 -0
  72. package/dist/theglobalfuel/pages/ResourcesPage.js +225 -0
  73. package/dist/theglobalfuel/pages/ResourcesPage.js.map +1 -0
  74. package/dist/theglobalfuel/pages/RiskManagementPage.d.ts +2 -0
  75. package/dist/theglobalfuel/pages/RiskManagementPage.d.ts.map +1 -0
  76. package/dist/theglobalfuel/pages/RiskManagementPage.js +230 -0
  77. package/dist/theglobalfuel/pages/RiskManagementPage.js.map +1 -0
  78. package/dist/theglobalfuel/pages/SupplyChainPage.d.ts +2 -0
  79. package/dist/theglobalfuel/pages/SupplyChainPage.d.ts.map +1 -0
  80. package/dist/theglobalfuel/pages/SupplyChainPage.js +214 -0
  81. package/dist/theglobalfuel/pages/SupplyChainPage.js.map +1 -0
  82. package/dist/theglobalfuel/pages/SustainabilityPage.d.ts +2 -0
  83. package/dist/theglobalfuel/pages/SustainabilityPage.d.ts.map +1 -0
  84. package/dist/theglobalfuel/pages/SustainabilityPage.js +261 -0
  85. package/dist/theglobalfuel/pages/SustainabilityPage.js.map +1 -0
  86. package/dist/theglobalfuel/pages/TrainingPage.d.ts +2 -0
  87. package/dist/theglobalfuel/pages/TrainingPage.d.ts.map +1 -0
  88. package/dist/theglobalfuel/pages/TrainingPage.js +253 -0
  89. package/dist/theglobalfuel/pages/TrainingPage.js.map +1 -0
  90. package/dist/theglobalfuel/providers/TheGlobalFuelProvider.d.ts +6 -0
  91. package/dist/theglobalfuel/providers/TheGlobalFuelProvider.d.ts.map +1 -0
  92. package/dist/theglobalfuel/providers/TheGlobalFuelProvider.js +27 -0
  93. package/dist/theglobalfuel/providers/TheGlobalFuelProvider.js.map +1 -0
  94. package/dist/theglobalfuel/store/theglobalfuelStore.d.ts +163 -0
  95. package/dist/theglobalfuel/store/theglobalfuelStore.d.ts.map +1 -0
  96. package/dist/theglobalfuel/store/theglobalfuelStore.js +712 -0
  97. package/dist/theglobalfuel/store/theglobalfuelStore.js.map +1 -0
  98. package/dist/theglobalfuel/types/index.d.ts +51 -0
  99. package/dist/theglobalfuel/types/index.d.ts.map +1 -0
  100. package/dist/theglobalfuel/utils/cn.d.ts +4 -0
  101. package/dist/theglobalfuel/utils/cn.d.ts.map +1 -0
  102. package/dist/theglobalfuel/utils/cn.js +10 -0
  103. package/dist/theglobalfuel/utils/cn.js.map +1 -0
  104. package/dist/theglobalfuel/utils/i18n.d.ts +6 -0
  105. package/dist/theglobalfuel/utils/i18n.d.ts.map +1 -0
  106. package/dist/theglobalfuel/utils/i18n.js +15 -0
  107. package/dist/theglobalfuel/utils/i18n.js.map +1 -0
  108. package/dist/theglobalfuel/utils/navigation.d.ts +2 -0
  109. package/dist/theglobalfuel/utils/navigation.d.ts.map +1 -0
  110. package/dist/theglobalfuel/utils/navigation.js +8 -0
  111. package/dist/theglobalfuel/utils/navigation.js.map +1 -0
  112. 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,2 @@
1
+ export declare function SupplyChainPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=SupplyChainPage.d.ts.map
@@ -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 &amp; 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,2 @@
1
+ export declare function SustainabilityPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=SustainabilityPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SustainabilityPage.d.ts","sourceRoot":"","sources":["../../../src/theglobalfuel/pages/SustainabilityPage.tsx"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,4CA4MjC"}