@burdenoff/microfe-theglobalfuel 2026.705.2 → 2026.705.4

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 (80) hide show
  1. package/dist/theglobalfuel/TheGlobalFuelRoot.js +54 -46
  2. package/dist/theglobalfuel/TheGlobalFuelRoot.js.map +1 -1
  3. package/dist/theglobalfuel/TheGlobalFuelRoutes.js +10 -6
  4. package/dist/theglobalfuel/TheGlobalFuelRoutes.js.map +1 -1
  5. package/dist/theglobalfuel/components/DataTable.js +126 -58
  6. package/dist/theglobalfuel/components/DataTable.js.map +1 -1
  7. package/dist/theglobalfuel/components/EmptyState.js +4 -4
  8. package/dist/theglobalfuel/components/EmptyState.js.map +1 -1
  9. package/dist/theglobalfuel/components/MetricsCard.js +2 -2
  10. package/dist/theglobalfuel/components/MetricsCard.js.map +1 -1
  11. package/dist/theglobalfuel/components/WorldMap.js +115 -0
  12. package/dist/theglobalfuel/components/WorldMap.js.map +1 -0
  13. package/dist/theglobalfuel/components/index.js +9 -0
  14. package/dist/theglobalfuel/components/viz/AllocationBar.js +68 -0
  15. package/dist/theglobalfuel/components/viz/AllocationBar.js.map +1 -0
  16. package/dist/theglobalfuel/components/viz/AreaChart.js +102 -0
  17. package/dist/theglobalfuel/components/viz/AreaChart.js.map +1 -0
  18. package/dist/theglobalfuel/components/viz/AvatarStack.js +2 -0
  19. package/dist/theglobalfuel/components/viz/BarChart.js +4 -0
  20. package/dist/theglobalfuel/components/viz/CertificateCard.js +4 -0
  21. package/dist/theglobalfuel/components/viz/DonutChart.js +109 -0
  22. package/dist/theglobalfuel/components/viz/DonutChart.js.map +1 -0
  23. package/dist/theglobalfuel/components/viz/HBarFunnel.js +3 -0
  24. package/dist/theglobalfuel/components/viz/Heatmap.js +3 -0
  25. package/dist/theglobalfuel/components/viz/KanbanBoard.js +2 -0
  26. package/dist/theglobalfuel/components/viz/LineChart.js +4 -0
  27. package/dist/theglobalfuel/components/viz/OrgTree.js +2 -0
  28. package/dist/theglobalfuel/components/viz/PathSteps.js +68 -0
  29. package/dist/theglobalfuel/components/viz/PathSteps.js.map +1 -0
  30. package/dist/theglobalfuel/components/viz/ProgressRing.js +6 -0
  31. package/dist/theglobalfuel/components/viz/ProgressRing.js.map +1 -0
  32. package/dist/theglobalfuel/components/viz/RatingStars.js +3 -0
  33. package/dist/theglobalfuel/components/viz/SegmentedTabs.js +3 -0
  34. package/dist/theglobalfuel/components/viz/SkillBar.js +3 -0
  35. package/dist/theglobalfuel/components/viz/Sparkline.js +74 -0
  36. package/dist/theglobalfuel/components/viz/Sparkline.js.map +1 -0
  37. package/dist/theglobalfuel/components/viz/StatCard.js +3 -0
  38. package/dist/theglobalfuel/components/viz/StepProgress.js +64 -0
  39. package/dist/theglobalfuel/components/viz/StepProgress.js.map +1 -0
  40. package/dist/theglobalfuel/components/viz/Timeline.js +66 -0
  41. package/dist/theglobalfuel/components/viz/Timeline.js.map +1 -0
  42. package/dist/theglobalfuel/components/viz/index.js +23 -0
  43. package/dist/theglobalfuel/components/viz/lib/Avatar.js +1 -0
  44. package/dist/theglobalfuel/components/viz/lib/CartesianFrame.js +119 -0
  45. package/dist/theglobalfuel/components/viz/lib/CartesianFrame.js.map +1 -0
  46. package/dist/theglobalfuel/components/viz/lib/ResponsiveSvg.js +35 -0
  47. package/dist/theglobalfuel/components/viz/lib/ResponsiveSvg.js.map +1 -0
  48. package/dist/theglobalfuel/components/viz/lib/format.js +17 -0
  49. package/dist/theglobalfuel/components/viz/lib/format.js.map +1 -0
  50. package/dist/theglobalfuel/components/viz/lib/geometry.js +61 -0
  51. package/dist/theglobalfuel/components/viz/lib/geometry.js.map +1 -0
  52. package/dist/theglobalfuel/components/viz/lib/hooks.js +39 -0
  53. package/dist/theglobalfuel/components/viz/lib/hooks.js.map +1 -0
  54. package/dist/theglobalfuel/components/viz/lib/palette.js +27 -0
  55. package/dist/theglobalfuel/components/viz/lib/palette.js.map +1 -0
  56. package/dist/theglobalfuel/hooks/useCursorPager.js +6 -15
  57. package/dist/theglobalfuel/hooks/useCursorPager.js.map +1 -1
  58. package/dist/theglobalfuel/pages/assets/AssetDetailPage.js +431 -316
  59. package/dist/theglobalfuel/pages/assets/AssetDetailPage.js.map +1 -1
  60. package/dist/theglobalfuel/pages/assets/AssetsPage.js +99 -99
  61. package/dist/theglobalfuel/pages/assets/AssetsPage.js.map +1 -1
  62. package/dist/theglobalfuel/pages/compliance/CompliancePage.js +250 -250
  63. package/dist/theglobalfuel/pages/compliance/CompliancePage.js.map +1 -1
  64. package/dist/theglobalfuel/pages/contracts/ContractsPage.js +2 -2
  65. package/dist/theglobalfuel/pages/contracts/ContractsPage.js.map +1 -1
  66. package/dist/theglobalfuel/pages/dashboard/DashboardPage.js +525 -227
  67. package/dist/theglobalfuel/pages/dashboard/DashboardPage.js.map +1 -1
  68. package/dist/theglobalfuel/pages/emissions/EmissionsPage.js +255 -206
  69. package/dist/theglobalfuel/pages/emissions/EmissionsPage.js.map +1 -1
  70. package/dist/theglobalfuel/pages/inventory/InventoryPage.js +60 -60
  71. package/dist/theglobalfuel/pages/inventory/InventoryPage.js.map +1 -1
  72. package/dist/theglobalfuel/pages/production/ProductionPage.js +2 -2
  73. package/dist/theglobalfuel/pages/production/ProductionPage.js.map +1 -1
  74. package/dist/theglobalfuel/pages/provenance/ProvenancePage.js +465 -0
  75. package/dist/theglobalfuel/pages/provenance/ProvenancePage.js.map +1 -0
  76. package/dist/theglobalfuel/pages/reserves/ReservesPage.js +152 -152
  77. package/dist/theglobalfuel/pages/reserves/ReservesPage.js.map +1 -1
  78. package/dist/theglobalfuel/pages/shipments/ShipmentsPage.js +356 -227
  79. package/dist/theglobalfuel/pages/shipments/ShipmentsPage.js.map +1 -1
  80. package/package.json +1 -1
@@ -14,9 +14,9 @@ import { FilterTabs as c } from "../../components/FilterTabs.js";
14
14
  import { Pagination as l } from "../../components/Pagination.js";
15
15
  import "../../components/index.js";
16
16
  import { useMemo as u, useState as d } from "react";
17
- import { Fuel as f, MapPin as se, Plus as p } from "lucide-react";
18
- import { Fragment as ce, jsx as m, jsxs as h } from "react/jsx-runtime";
19
- import { Button as g, Input as _, Label as v, ResponsiveDialog as y, ResponsiveDialogContent as b, ResponsiveDialogDescription as x, ResponsiveDialogFooter as S, ResponsiveDialogHeader as C, ResponsiveDialogTitle as w, Select as T, SelectContent as E, SelectItem as D, SelectTrigger as O, SelectValue as k } from "@burdenoff/fe-libs/ui";
17
+ import { Fuel as f, MapPin as p, Plus as m } from "lucide-react";
18
+ import { Fragment as se, jsx as h, jsxs as g } from "react/jsx-runtime";
19
+ import { Button as _, Input as v, Label as y, ResponsiveDialog as ce, ResponsiveDialogContent as b, ResponsiveDialogDescription as x, ResponsiveDialogFooter as S, ResponsiveDialogHeader as C, ResponsiveDialogTitle as w, Select as T, SelectContent as E, SelectItem as D, SelectTrigger as O, SelectValue as k } from "@burdenoff/fe-libs/ui";
20
20
  //#region src/theglobalfuel/pages/assets/AssetsPage.tsx
21
21
  var A = [
22
22
  {
@@ -106,23 +106,23 @@ function I() {
106
106
  kind: H === "ALL" ? void 0 : H,
107
107
  pagination: {
108
108
  limit: P,
109
- cursor: U.cursor
109
+ offset: U.page * P
110
110
  }
111
111
  }), Z = a(), Q = u(() => X?.items ?? [], [X]), pe = R !== "ALL" || B !== "ALL" || H !== "ALL", me = [
112
112
  {
113
113
  key: "name",
114
114
  header: "Asset",
115
- render: (e) => /* @__PURE__ */ h("div", {
115
+ render: (e) => /* @__PURE__ */ g("div", {
116
116
  className: "flex items-center gap-3",
117
- children: [/* @__PURE__ */ m("span", {
117
+ children: [/* @__PURE__ */ h("span", {
118
118
  className: "grid size-9 shrink-0 place-items-center rounded-lg bg-bg-sunken text-text-secondary",
119
- children: /* @__PURE__ */ m(f, { className: "h-4 w-4" })
120
- }), /* @__PURE__ */ h("div", {
119
+ children: /* @__PURE__ */ h(f, { className: "h-4 w-4" })
120
+ }), /* @__PURE__ */ g("div", {
121
121
  className: "min-w-0",
122
- children: [/* @__PURE__ */ m("p", {
122
+ children: [/* @__PURE__ */ h("p", {
123
123
  className: "truncate font-semibold text-text-primary",
124
124
  children: e.name
125
- }), e.code && /* @__PURE__ */ m("p", {
125
+ }), e.code && /* @__PURE__ */ h("p", {
126
126
  className: "truncate text-xs text-text-tertiary",
127
127
  children: e.code
128
128
  })]
@@ -133,7 +133,7 @@ function I() {
133
133
  key: "kind",
134
134
  header: "Kind",
135
135
  hideOnMobile: !0,
136
- render: (e) => /* @__PURE__ */ m("span", {
136
+ render: (e) => /* @__PURE__ */ h("span", {
137
137
  className: "text-text-secondary",
138
138
  children: n(e.kind)
139
139
  })
@@ -142,7 +142,7 @@ function I() {
142
142
  key: "commodity",
143
143
  header: "Commodity",
144
144
  hideOnMobile: !0,
145
- render: (e) => /* @__PURE__ */ m("span", {
145
+ render: (e) => /* @__PURE__ */ h("span", {
146
146
  className: "text-text-secondary",
147
147
  children: n(e.commodity)
148
148
  })
@@ -150,7 +150,7 @@ function I() {
150
150
  {
151
151
  key: "status",
152
152
  header: "Status",
153
- render: (e) => /* @__PURE__ */ m(ne, { status: e.status })
153
+ render: (e) => /* @__PURE__ */ h(ne, { status: e.status })
154
154
  },
155
155
  {
156
156
  key: "capacity",
@@ -158,10 +158,10 @@ function I() {
158
158
  align: "right",
159
159
  hideOnMobile: !0,
160
160
  sortValue: (e) => e.capacityPerDay,
161
- render: (e) => e.capacityPerDay > 0 ? /* @__PURE__ */ h("span", {
161
+ render: (e) => e.capacityPerDay > 0 ? /* @__PURE__ */ g("span", {
162
162
  className: "tabular-nums text-text-secondary",
163
163
  children: [te(e.capacityPerDay, e.capacityUnit), "/day"]
164
- }) : /* @__PURE__ */ m("span", {
164
+ }) : /* @__PURE__ */ h("span", {
165
165
  className: "text-text-tertiary",
166
166
  children: "—"
167
167
  })
@@ -172,7 +172,7 @@ function I() {
172
172
  align: "right",
173
173
  hideOnMobile: !0,
174
174
  sortValue: (e) => e.workingInterestPct,
175
- render: (e) => /* @__PURE__ */ m("span", {
175
+ render: (e) => /* @__PURE__ */ h("span", {
176
176
  className: "tabular-nums text-text-secondary",
177
177
  children: r(e.workingInterestPct)
178
178
  })
@@ -181,10 +181,10 @@ function I() {
181
181
  key: "location",
182
182
  header: "Location",
183
183
  hideOnMobile: !0,
184
- render: (e) => e.location ? /* @__PURE__ */ h("span", {
184
+ render: (e) => e.location ? /* @__PURE__ */ g("span", {
185
185
  className: "inline-flex items-center gap-1.5 text-text-secondary",
186
- children: [/* @__PURE__ */ m(se, { className: "h-3.5 w-3.5 shrink-0 text-text-tertiary" }), e.location]
187
- }) : /* @__PURE__ */ m("span", {
186
+ children: [/* @__PURE__ */ h(p, { className: "h-3.5 w-3.5 shrink-0 text-text-tertiary" }), e.location]
187
+ }) : /* @__PURE__ */ h("span", {
188
188
  className: "text-text-tertiary",
189
189
  children: "—"
190
190
  })
@@ -194,7 +194,7 @@ function I() {
194
194
  header: "Updated",
195
195
  align: "right",
196
196
  hideOnMobile: !0,
197
- render: (e) => /* @__PURE__ */ m("span", {
197
+ render: (e) => /* @__PURE__ */ h("span", {
198
198
  className: "text-text-tertiary",
199
199
  children: ee(e.updatedAt)
200
200
  })
@@ -226,107 +226,107 @@ function I() {
226
226
  L.fromError(e), Y(e instanceof Error ? e.message : "Failed to create asset.");
227
227
  }
228
228
  };
229
- return /* @__PURE__ */ h(t, {
229
+ return /* @__PURE__ */ g(t, {
230
230
  title: "Assets",
231
231
  description: "Resource registry — fields, wells, mines, plants, terminals & pipelines across every commodity.",
232
- actions: /* @__PURE__ */ h(g, {
232
+ actions: /* @__PURE__ */ g(_, {
233
233
  onClick: () => G(!0),
234
- children: [/* @__PURE__ */ m(p, { className: "mr-1.5 h-4 w-4" }), " New asset"]
234
+ children: [/* @__PURE__ */ h(m, { className: "mr-1.5 h-4 w-4" }), " New asset"]
235
235
  }),
236
236
  children: [
237
- /* @__PURE__ */ h("div", {
237
+ /* @__PURE__ */ g("div", {
238
238
  className: "mb-5 flex flex-wrap items-center gap-3",
239
239
  children: [
240
- /* @__PURE__ */ m(c, {
240
+ /* @__PURE__ */ h(c, {
241
241
  options: A,
242
242
  value: R,
243
243
  onChange: (e) => {
244
244
  z(e), U.reset();
245
245
  }
246
246
  }),
247
- /* @__PURE__ */ h(T, {
247
+ /* @__PURE__ */ g(T, {
248
248
  value: B,
249
249
  onValueChange: (e) => {
250
250
  V(e), U.reset();
251
251
  },
252
- children: [/* @__PURE__ */ m(O, {
252
+ children: [/* @__PURE__ */ h(O, {
253
253
  className: "w-48",
254
254
  "aria-label": "Filter by commodity",
255
- children: /* @__PURE__ */ m(k, { placeholder: "All commodities" })
256
- }), /* @__PURE__ */ h(E, { children: [/* @__PURE__ */ m(D, {
255
+ children: /* @__PURE__ */ h(k, { placeholder: "All commodities" })
256
+ }), /* @__PURE__ */ g(E, { children: [/* @__PURE__ */ h(D, {
257
257
  value: "ALL",
258
258
  children: "All commodities"
259
- }), M.map((e) => /* @__PURE__ */ m(D, {
259
+ }), M.map((e) => /* @__PURE__ */ h(D, {
260
260
  value: e,
261
261
  children: n(e)
262
262
  }, e))] })]
263
263
  }),
264
- /* @__PURE__ */ h(T, {
264
+ /* @__PURE__ */ g(T, {
265
265
  value: H,
266
266
  onValueChange: (e) => {
267
267
  le(e), U.reset();
268
268
  },
269
- children: [/* @__PURE__ */ m(O, {
269
+ children: [/* @__PURE__ */ h(O, {
270
270
  className: "w-48",
271
271
  "aria-label": "Filter by kind",
272
- children: /* @__PURE__ */ m(k, { placeholder: "All kinds" })
273
- }), /* @__PURE__ */ h(E, { children: [/* @__PURE__ */ m(D, {
272
+ children: /* @__PURE__ */ h(k, { placeholder: "All kinds" })
273
+ }), /* @__PURE__ */ g(E, { children: [/* @__PURE__ */ h(D, {
274
274
  value: "ALL",
275
275
  children: "All kinds"
276
- }), j.map((e) => /* @__PURE__ */ m(D, {
276
+ }), j.map((e) => /* @__PURE__ */ h(D, {
277
277
  value: e,
278
278
  children: n(e)
279
279
  }, e))] })]
280
280
  })
281
281
  ]
282
282
  }),
283
- ue ? /* @__PURE__ */ m(i, { label: "Loading assets…" }) : de ? /* @__PURE__ */ m(ie, {
283
+ ue ? /* @__PURE__ */ h(i, { label: "Loading assets…" }) : de ? /* @__PURE__ */ h(ie, {
284
284
  message: "Couldn't load assets.",
285
285
  onRetry: () => fe()
286
- }) : Q.length === 0 ? /* @__PURE__ */ m(ae, {
286
+ }) : Q.length === 0 ? /* @__PURE__ */ h(ae, {
287
287
  illustration: "empty-data",
288
- icon: /* @__PURE__ */ m(f, { className: "h-10 w-10" }),
288
+ icon: /* @__PURE__ */ h(f, { className: "h-10 w-10" }),
289
289
  title: "No assets yet",
290
290
  description: pe ? "No assets match these filters." : "Register your first resource asset to start tracking production, reserves & emissions.",
291
- action: /* @__PURE__ */ h(g, {
291
+ action: /* @__PURE__ */ g(_, {
292
292
  onClick: () => G(!0),
293
- children: [/* @__PURE__ */ m(p, { className: "mr-1.5 h-4 w-4" }), " New asset"]
293
+ children: [/* @__PURE__ */ h(m, { className: "mr-1.5 h-4 w-4" }), " New asset"]
294
294
  })
295
- }) : /* @__PURE__ */ h(ce, { children: [/* @__PURE__ */ m(re, {
295
+ }) : /* @__PURE__ */ g(se, { children: [/* @__PURE__ */ h(re, {
296
296
  columns: me,
297
297
  rows: Q,
298
298
  rowKey: (e) => e.id,
299
299
  onRowClick: (e) => I(`assets/${e.id}`),
300
300
  rowLabel: (e) => `Open ${e.name}`
301
- }), /* @__PURE__ */ m(l, {
301
+ }), /* @__PURE__ */ h(l, {
302
302
  page: U.page,
303
303
  pageSize: P,
304
304
  itemCount: Q.length,
305
305
  hasMore: X?.pageInfo?.hasMore ?? !1,
306
- onPageChange: (e) => U.onPageChange(e, X?.pageInfo?.cursor)
306
+ onPageChange: U.onPageChange
307
307
  })] }),
308
- /* @__PURE__ */ m(y, {
308
+ /* @__PURE__ */ h(ce, {
309
309
  open: W,
310
310
  onOpenChange: (e) => {
311
311
  G(e), e || $();
312
312
  },
313
- children: /* @__PURE__ */ h(b, { children: [
314
- /* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(w, { children: "New asset" }), /* @__PURE__ */ m(x, { children: "Register a resource asset — a field, well, mine, plant, terminal or pipeline." })] }),
315
- /* @__PURE__ */ h("form", {
313
+ children: /* @__PURE__ */ g(b, { children: [
314
+ /* @__PURE__ */ g(C, { children: [/* @__PURE__ */ h(w, { children: "New asset" }), /* @__PURE__ */ h(x, { children: "Register a resource asset — a field, well, mine, plant, terminal or pipeline." })] }),
315
+ /* @__PURE__ */ g("form", {
316
316
  id: "createAssetForm",
317
317
  onSubmit: (e) => {
318
318
  e.preventDefault(), he();
319
319
  },
320
320
  className: "grid gap-4 py-2",
321
321
  children: [
322
- /* @__PURE__ */ h("div", {
322
+ /* @__PURE__ */ g("div", {
323
323
  className: "grid gap-2 sm:grid-cols-2",
324
- children: [/* @__PURE__ */ h("div", {
324
+ children: [/* @__PURE__ */ g("div", {
325
325
  className: "grid gap-1.5",
326
- children: [/* @__PURE__ */ m(v, {
326
+ children: [/* @__PURE__ */ h(y, {
327
327
  htmlFor: "assetName",
328
328
  children: "Name *"
329
- }), /* @__PURE__ */ m(_, {
329
+ }), /* @__PURE__ */ h(v, {
330
330
  id: "assetName",
331
331
  value: K.name,
332
332
  onChange: (e) => q({
@@ -335,12 +335,12 @@ function I() {
335
335
  }),
336
336
  placeholder: "Rumaila North Field"
337
337
  })]
338
- }), /* @__PURE__ */ h("div", {
338
+ }), /* @__PURE__ */ g("div", {
339
339
  className: "grid gap-1.5",
340
- children: [/* @__PURE__ */ m(v, {
340
+ children: [/* @__PURE__ */ h(y, {
341
341
  htmlFor: "assetCode",
342
342
  children: "Code"
343
- }), /* @__PURE__ */ m(_, {
343
+ }), /* @__PURE__ */ h(v, {
344
344
  id: "assetCode",
345
345
  value: K.code,
346
346
  onChange: (e) => q({
@@ -351,64 +351,64 @@ function I() {
351
351
  })]
352
352
  })]
353
353
  }),
354
- /* @__PURE__ */ h("div", {
354
+ /* @__PURE__ */ g("div", {
355
355
  className: "grid gap-2 sm:grid-cols-3",
356
356
  children: [
357
- /* @__PURE__ */ h("div", {
357
+ /* @__PURE__ */ g("div", {
358
358
  className: "grid gap-1.5",
359
- children: [/* @__PURE__ */ m(v, {
359
+ children: [/* @__PURE__ */ h(y, {
360
360
  htmlFor: "assetCommodity",
361
361
  children: "Commodity *"
362
- }), /* @__PURE__ */ h(T, {
362
+ }), /* @__PURE__ */ g(T, {
363
363
  value: K.commodity,
364
364
  onValueChange: (e) => q({
365
365
  ...K,
366
366
  commodity: e
367
367
  }),
368
- children: [/* @__PURE__ */ m(O, {
368
+ children: [/* @__PURE__ */ h(O, {
369
369
  id: "assetCommodity",
370
- children: /* @__PURE__ */ m(k, {})
371
- }), /* @__PURE__ */ m(E, { children: M.map((e) => /* @__PURE__ */ m(D, {
370
+ children: /* @__PURE__ */ h(k, {})
371
+ }), /* @__PURE__ */ h(E, { children: M.map((e) => /* @__PURE__ */ h(D, {
372
372
  value: e,
373
373
  children: n(e)
374
374
  }, e)) })]
375
375
  })]
376
376
  }),
377
- /* @__PURE__ */ h("div", {
377
+ /* @__PURE__ */ g("div", {
378
378
  className: "grid gap-1.5",
379
- children: [/* @__PURE__ */ m(v, {
379
+ children: [/* @__PURE__ */ h(y, {
380
380
  htmlFor: "assetKind",
381
381
  children: "Kind"
382
- }), /* @__PURE__ */ h(T, {
382
+ }), /* @__PURE__ */ g(T, {
383
383
  value: K.kind,
384
384
  onValueChange: (e) => q({
385
385
  ...K,
386
386
  kind: e
387
387
  }),
388
- children: [/* @__PURE__ */ m(O, {
388
+ children: [/* @__PURE__ */ h(O, {
389
389
  id: "assetKind",
390
- children: /* @__PURE__ */ m(k, {})
391
- }), /* @__PURE__ */ m(E, { children: j.map((e) => /* @__PURE__ */ m(D, {
390
+ children: /* @__PURE__ */ h(k, {})
391
+ }), /* @__PURE__ */ h(E, { children: j.map((e) => /* @__PURE__ */ h(D, {
392
392
  value: e,
393
393
  children: n(e)
394
394
  }, e)) })]
395
395
  })]
396
396
  }),
397
- /* @__PURE__ */ h("div", {
397
+ /* @__PURE__ */ g("div", {
398
398
  className: "grid gap-1.5",
399
- children: [/* @__PURE__ */ m(v, {
399
+ children: [/* @__PURE__ */ h(y, {
400
400
  htmlFor: "assetStatus",
401
401
  children: "Status"
402
- }), /* @__PURE__ */ h(T, {
402
+ }), /* @__PURE__ */ g(T, {
403
403
  value: K.status,
404
404
  onValueChange: (e) => q({
405
405
  ...K,
406
406
  status: e
407
407
  }),
408
- children: [/* @__PURE__ */ m(O, {
408
+ children: [/* @__PURE__ */ h(O, {
409
409
  id: "assetStatus",
410
- children: /* @__PURE__ */ m(k, {})
411
- }), /* @__PURE__ */ m(E, { children: A.filter((e) => e.value !== "ALL").map((e) => /* @__PURE__ */ m(D, {
410
+ children: /* @__PURE__ */ h(k, {})
411
+ }), /* @__PURE__ */ h(E, { children: A.filter((e) => e.value !== "ALL").map((e) => /* @__PURE__ */ h(D, {
412
412
  value: e.value,
413
413
  children: e.label
414
414
  }, e.value)) })]
@@ -416,12 +416,12 @@ function I() {
416
416
  })
417
417
  ]
418
418
  }),
419
- /* @__PURE__ */ h("div", {
419
+ /* @__PURE__ */ g("div", {
420
420
  className: "grid gap-1.5",
421
- children: [/* @__PURE__ */ m(v, {
421
+ children: [/* @__PURE__ */ h(y, {
422
422
  htmlFor: "assetLocation",
423
423
  children: "Location"
424
- }), /* @__PURE__ */ m(_, {
424
+ }), /* @__PURE__ */ h(v, {
425
425
  id: "assetLocation",
426
426
  value: K.location,
427
427
  onChange: (e) => q({
@@ -431,14 +431,14 @@ function I() {
431
431
  placeholder: "Basra, Iraq"
432
432
  })]
433
433
  }),
434
- /* @__PURE__ */ h("div", {
434
+ /* @__PURE__ */ g("div", {
435
435
  className: "grid gap-2 sm:grid-cols-2",
436
- children: [/* @__PURE__ */ h("div", {
436
+ children: [/* @__PURE__ */ g("div", {
437
437
  className: "grid gap-1.5",
438
- children: [/* @__PURE__ */ m(v, {
438
+ children: [/* @__PURE__ */ h(y, {
439
439
  htmlFor: "assetLat",
440
440
  children: "Latitude"
441
- }), /* @__PURE__ */ m(_, {
441
+ }), /* @__PURE__ */ h(v, {
442
442
  id: "assetLat",
443
443
  type: "number",
444
444
  step: "any",
@@ -449,12 +449,12 @@ function I() {
449
449
  }),
450
450
  placeholder: "30.5085"
451
451
  })]
452
- }), /* @__PURE__ */ h("div", {
452
+ }), /* @__PURE__ */ g("div", {
453
453
  className: "grid gap-1.5",
454
- children: [/* @__PURE__ */ m(v, {
454
+ children: [/* @__PURE__ */ h(y, {
455
455
  htmlFor: "assetLng",
456
456
  children: "Longitude"
457
- }), /* @__PURE__ */ m(_, {
457
+ }), /* @__PURE__ */ h(v, {
458
458
  id: "assetLng",
459
459
  type: "number",
460
460
  step: "any",
@@ -467,15 +467,15 @@ function I() {
467
467
  })]
468
468
  })]
469
469
  }),
470
- /* @__PURE__ */ h("div", {
470
+ /* @__PURE__ */ g("div", {
471
471
  className: "grid gap-2 sm:grid-cols-3",
472
472
  children: [
473
- /* @__PURE__ */ h("div", {
473
+ /* @__PURE__ */ g("div", {
474
474
  className: "grid gap-1.5 sm:col-span-1",
475
- children: [/* @__PURE__ */ m(v, {
475
+ children: [/* @__PURE__ */ h(y, {
476
476
  htmlFor: "assetCapacity",
477
477
  children: "Capacity / day"
478
- }), /* @__PURE__ */ m(_, {
478
+ }), /* @__PURE__ */ h(v, {
479
479
  id: "assetCapacity",
480
480
  type: "number",
481
481
  min: "0",
@@ -488,32 +488,32 @@ function I() {
488
488
  placeholder: "120000"
489
489
  })]
490
490
  }),
491
- /* @__PURE__ */ h("div", {
491
+ /* @__PURE__ */ g("div", {
492
492
  className: "grid gap-1.5",
493
- children: [/* @__PURE__ */ m(v, {
493
+ children: [/* @__PURE__ */ h(y, {
494
494
  htmlFor: "assetUnit",
495
495
  children: "Capacity unit"
496
- }), /* @__PURE__ */ h(T, {
496
+ }), /* @__PURE__ */ g(T, {
497
497
  value: K.capacityUnit,
498
498
  onValueChange: (e) => q({
499
499
  ...K,
500
500
  capacityUnit: e
501
501
  }),
502
- children: [/* @__PURE__ */ m(O, {
502
+ children: [/* @__PURE__ */ h(O, {
503
503
  id: "assetUnit",
504
- children: /* @__PURE__ */ m(k, {})
505
- }), /* @__PURE__ */ m(E, { children: N.map((e) => /* @__PURE__ */ m(D, {
504
+ children: /* @__PURE__ */ h(k, {})
505
+ }), /* @__PURE__ */ h(E, { children: N.map((e) => /* @__PURE__ */ h(D, {
506
506
  value: e,
507
507
  children: n(e)
508
508
  }, e)) })]
509
509
  })]
510
510
  }),
511
- /* @__PURE__ */ h("div", {
511
+ /* @__PURE__ */ g("div", {
512
512
  className: "grid gap-1.5",
513
- children: [/* @__PURE__ */ m(v, {
513
+ children: [/* @__PURE__ */ h(y, {
514
514
  htmlFor: "assetWi",
515
515
  children: "Working interest (%)"
516
- }), /* @__PURE__ */ m(_, {
516
+ }), /* @__PURE__ */ h(v, {
517
517
  id: "assetWi",
518
518
  type: "number",
519
519
  min: "0",
@@ -529,20 +529,20 @@ function I() {
529
529
  })
530
530
  ]
531
531
  }),
532
- J && /* @__PURE__ */ m("p", {
532
+ J && /* @__PURE__ */ h("p", {
533
533
  className: "text-sm text-status-error-text",
534
534
  children: J
535
535
  })
536
536
  ]
537
537
  }),
538
- /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(g, {
538
+ /* @__PURE__ */ g(S, { children: [/* @__PURE__ */ h(_, {
539
539
  variant: "outline",
540
540
  type: "button",
541
541
  onClick: () => {
542
542
  G(!1), $();
543
543
  },
544
544
  children: "Cancel"
545
- }), /* @__PURE__ */ m(g, {
545
+ }), /* @__PURE__ */ h(_, {
546
546
  type: "submit",
547
547
  form: "createAssetForm",
548
548
  disabled: Z.isPending,
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsPage.js","names":[],"sources":["../../../../src/theglobalfuel/pages/assets/AssetsPage.tsx"],"sourcesContent":["/**\n * Assets — the resource registry: list, filter & register energy/mineral assets.\n * @module theglobalfuel/pages/assets\n *\n * Reads `theListAssets` (cursor-paginated) with status / commodity / kind\n * filters; writes `theCreateAsset`. Rows drill into `assets/:id`. No mock data —\n * every field comes from the `wspace-theglobalfuel-svc` GraphQL contract.\n */\n\nimport { useMemo, useState } from 'react';\nimport { Plus, Fuel, MapPin } from 'lucide-react';\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n StatusBadge,\n DataTable,\n type Column,\n FilterTabs,\n type FilterOption,\n LoadingView,\n ErrorView,\n EmptyState,\n Pagination,\n} from '../../components';\nimport { useTheGlobalFuel } from '../../context';\nimport { useTheAssets, useTheCreateAsset, useCursorPager, useNotify } from '../../hooks';\nimport { formatEnumLabel, formatVolume, formatPercent, formatRelativeTime } from '../../utils';\nimport type {\n TheAsset,\n TheAssetKind,\n TheAssetStatus,\n TheCommodityType,\n TheUnit,\n} from '../../types';\n\nconst STATUS_FILTERS: FilterOption<TheAssetStatus | 'ALL'>[] = [\n { value: 'ALL', label: 'All' },\n { value: 'EXPLORATION', label: 'Exploration' },\n { value: 'APPRAISAL', label: 'Appraisal' },\n { value: 'DEVELOPMENT', label: 'Development' },\n { value: 'PRODUCING', label: 'Producing' },\n { value: 'SUSPENDED', label: 'Suspended' },\n { value: 'DECOMMISSIONING', label: 'Decommissioning' },\n { value: 'RETIRED', label: 'Retired' },\n];\n\nconst ASSET_KINDS: TheAssetKind[] = [\n 'OIL_FIELD',\n 'GAS_FIELD',\n 'WELL',\n 'MINE',\n 'QUARRY',\n 'REFINERY',\n 'PROCESSING_PLANT',\n 'POWER_PLANT',\n 'SOLAR_FARM',\n 'WIND_FARM',\n 'STORAGE_TERMINAL',\n 'PIPELINE',\n];\n\nconst COMMODITIES: TheCommodityType[] = [\n 'CRUDE_OIL',\n 'NATURAL_GAS',\n 'LNG',\n 'COAL',\n 'ELECTRICITY',\n 'HYDROGEN',\n 'BIOFUEL',\n 'IRON_ORE',\n 'COPPER',\n 'BAUXITE',\n 'GOLD',\n 'LITHIUM',\n 'RARE_EARTH',\n];\n\nconst UNITS: TheUnit[] = ['BARRELS', 'CUBIC_METERS', 'TONNES', 'KILOGRAMS', 'MWH', 'GJ', 'MCF'];\n\nconst PAGE_SIZE = 25;\n\ninterface CreateFormState {\n name: string;\n code: string;\n commodity: TheCommodityType;\n kind: TheAssetKind;\n status: TheAssetStatus;\n location: string;\n latitude: string;\n longitude: string;\n capacityPerDay: string;\n capacityUnit: TheUnit;\n workingInterestPct: string;\n}\n\nconst EMPTY_FORM: CreateFormState = {\n name: '',\n code: '',\n commodity: 'CRUDE_OIL',\n kind: 'OIL_FIELD',\n status: 'EXPLORATION',\n location: '',\n latitude: '',\n longitude: '',\n capacityPerDay: '',\n capacityUnit: 'BARRELS',\n workingInterestPct: '',\n};\n\nexport function AssetsPage() {\n const { navigateTo } = useTheGlobalFuel();\n const notify = useNotify();\n const [status, setStatus] = useState<TheAssetStatus | 'ALL'>('ALL');\n const [commodity, setCommodity] = useState<TheCommodityType | 'ALL'>('ALL');\n const [kind, setKind] = useState<TheAssetKind | 'ALL'>('ALL');\n const pager = useCursorPager();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [form, setForm] = useState<CreateFormState>(EMPTY_FORM);\n const [formError, setFormError] = useState<string | null>(null);\n\n const { data, isLoading, isError, refetch } = useTheAssets({\n status: status === 'ALL' ? undefined : status,\n commodity: commodity === 'ALL' ? undefined : commodity,\n kind: kind === 'ALL' ? undefined : kind,\n pagination: { limit: PAGE_SIZE, cursor: pager.cursor },\n });\n const createAsset = useTheCreateAsset();\n\n const rows = useMemo(() => data?.items ?? [], [data]);\n const filtersActive = status !== 'ALL' || commodity !== 'ALL' || kind !== 'ALL';\n\n const columns: Column<TheAsset>[] = [\n {\n key: 'name',\n header: 'Asset',\n render: (a) => (\n <div className=\"flex items-center gap-3\">\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-bg-sunken text-text-secondary\">\n <Fuel className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate font-semibold text-text-primary\">{a.name}</p>\n {a.code && <p className=\"truncate text-xs text-text-tertiary\">{a.code}</p>}\n </div>\n </div>\n ),\n },\n {\n key: 'kind',\n header: 'Kind',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-secondary\">{formatEnumLabel(a.kind)}</span>,\n },\n {\n key: 'commodity',\n header: 'Commodity',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-secondary\">{formatEnumLabel(a.commodity)}</span>,\n },\n { key: 'status', header: 'Status', render: (a) => <StatusBadge status={a.status} /> },\n {\n key: 'capacity',\n header: 'Capacity',\n align: 'right',\n hideOnMobile: true,\n sortValue: (a) => a.capacityPerDay,\n render: (a) =>\n a.capacityPerDay > 0 ? (\n <span className=\"tabular-nums text-text-secondary\">\n {formatVolume(a.capacityPerDay, a.capacityUnit)}/day\n </span>\n ) : (\n <span className=\"text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'workingInterest',\n header: 'Working interest',\n align: 'right',\n hideOnMobile: true,\n sortValue: (a) => a.workingInterestPct,\n render: (a) => (\n <span className=\"tabular-nums text-text-secondary\">\n {formatPercent(a.workingInterestPct)}\n </span>\n ),\n },\n {\n key: 'location',\n header: 'Location',\n hideOnMobile: true,\n render: (a) =>\n a.location ? (\n <span className=\"inline-flex items-center gap-1.5 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0 text-text-tertiary\" />\n {a.location}\n </span>\n ) : (\n <span className=\"text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'updated',\n header: 'Updated',\n align: 'right',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-tertiary\">{formatRelativeTime(a.updatedAt)}</span>,\n },\n ];\n\n const resetForm = () => {\n setForm(EMPTY_FORM);\n setFormError(null);\n };\n\n const handleCreate = async () => {\n if (!form.name.trim()) {\n setFormError('Asset name is required.');\n return;\n }\n setFormError(null);\n try {\n const created = await createAsset.mutateAsync({\n name: form.name.trim(),\n code: form.code.trim() || null,\n commodity: form.commodity,\n kind: form.kind,\n status: form.status,\n location: form.location.trim() || null,\n latitude: form.latitude ? Number(form.latitude) : null,\n longitude: form.longitude ? Number(form.longitude) : null,\n capacityPerDay: form.capacityPerDay ? Number(form.capacityPerDay) : null,\n capacityUnit: form.capacityUnit,\n workingInterestPct: form.workingInterestPct ? Number(form.workingInterestPct) : null,\n });\n notify.success('Asset created');\n setDialogOpen(false);\n resetForm();\n navigateTo(`assets/${created.id}`);\n } catch (err) {\n notify.fromError(err);\n setFormError(err instanceof Error ? err.message : 'Failed to create asset.');\n }\n };\n\n return (\n <PageLayout\n title=\"Assets\"\n description=\"Resource registry — fields, wells, mines, plants, terminals & pipelines across every commodity.\"\n actions={\n <Button onClick={() => setDialogOpen(true)}>\n <Plus className=\"mr-1.5 h-4 w-4\" /> New asset\n </Button>\n }\n >\n <div className=\"mb-5 flex flex-wrap items-center gap-3\">\n <FilterTabs\n options={STATUS_FILTERS}\n value={status}\n onChange={(v) => {\n setStatus(v);\n pager.reset();\n }}\n />\n <Select\n value={commodity}\n onValueChange={(v) => {\n setCommodity(v as TheCommodityType | 'ALL');\n pager.reset();\n }}\n >\n <SelectTrigger className=\"w-48\" aria-label=\"Filter by commodity\">\n <SelectValue placeholder=\"All commodities\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All commodities</SelectItem>\n {COMMODITIES.map((c) => (\n <SelectItem key={c} value={c}>\n {formatEnumLabel(c)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select\n value={kind}\n onValueChange={(v) => {\n setKind(v as TheAssetKind | 'ALL');\n pager.reset();\n }}\n >\n <SelectTrigger className=\"w-48\" aria-label=\"Filter by kind\">\n <SelectValue placeholder=\"All kinds\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All kinds</SelectItem>\n {ASSET_KINDS.map((k) => (\n <SelectItem key={k} value={k}>\n {formatEnumLabel(k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {isLoading ? (\n <LoadingView label=\"Loading assets…\" />\n ) : isError ? (\n <ErrorView message=\"Couldn't load assets.\" onRetry={() => refetch()} />\n ) : rows.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Fuel className=\"h-10 w-10\" />}\n title=\"No assets yet\"\n description={\n filtersActive\n ? 'No assets match these filters.'\n : 'Register your first resource asset to start tracking production, reserves & emissions.'\n }\n action={\n <Button onClick={() => setDialogOpen(true)}>\n <Plus className=\"mr-1.5 h-4 w-4\" /> New asset\n </Button>\n }\n />\n ) : (\n <>\n <DataTable\n columns={columns}\n rows={rows}\n rowKey={(a) => a.id}\n onRowClick={(a) => navigateTo(`assets/${a.id}`)}\n rowLabel={(a) => `Open ${a.name}`}\n />\n <Pagination\n page={pager.page}\n pageSize={PAGE_SIZE}\n itemCount={rows.length}\n hasMore={data?.pageInfo?.hasMore ?? false}\n onPageChange={(target) => pager.onPageChange(target, data?.pageInfo?.cursor)}\n />\n </>\n )}\n\n {/* New asset dialog */}\n <ResponsiveDialog\n open={dialogOpen}\n onOpenChange={(open) => {\n setDialogOpen(open);\n if (!open) resetForm();\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New asset</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Register a resource asset — a field, well, mine, plant, terminal or pipeline.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form\n id=\"createAssetForm\"\n onSubmit={(e) => {\n e.preventDefault();\n handleCreate();\n }}\n className=\"grid gap-4 py-2\"\n >\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetName\">Name *</Label>\n <Input\n id=\"assetName\"\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n placeholder=\"Rumaila North Field\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetCode\">Code</Label>\n <Input\n id=\"assetCode\"\n value={form.code}\n onChange={(e) => setForm({ ...form, code: e.target.value })}\n placeholder=\"AST-RMB-N\"\n />\n </div>\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetCommodity\">Commodity *</Label>\n <Select\n value={form.commodity}\n onValueChange={(v) => setForm({ ...form, commodity: v as TheCommodityType })}\n >\n <SelectTrigger id=\"assetCommodity\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {COMMODITIES.map((c) => (\n <SelectItem key={c} value={c}>\n {formatEnumLabel(c)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetKind\">Kind</Label>\n <Select\n value={form.kind}\n onValueChange={(v) => setForm({ ...form, kind: v as TheAssetKind })}\n >\n <SelectTrigger id=\"assetKind\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ASSET_KINDS.map((k) => (\n <SelectItem key={k} value={k}>\n {formatEnumLabel(k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetStatus\">Status</Label>\n <Select\n value={form.status}\n onValueChange={(v) => setForm({ ...form, status: v as TheAssetStatus })}\n >\n <SelectTrigger id=\"assetStatus\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STATUS_FILTERS.filter((o) => o.value !== 'ALL').map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLocation\">Location</Label>\n <Input\n id=\"assetLocation\"\n value={form.location}\n onChange={(e) => setForm({ ...form, location: e.target.value })}\n placeholder=\"Basra, Iraq\"\n />\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLat\">Latitude</Label>\n <Input\n id=\"assetLat\"\n type=\"number\"\n step=\"any\"\n value={form.latitude}\n onChange={(e) => setForm({ ...form, latitude: e.target.value })}\n placeholder=\"30.5085\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLng\">Longitude</Label>\n <Input\n id=\"assetLng\"\n type=\"number\"\n step=\"any\"\n value={form.longitude}\n onChange={(e) => setForm({ ...form, longitude: e.target.value })}\n placeholder=\"47.7804\"\n />\n </div>\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <div className=\"grid gap-1.5 sm:col-span-1\">\n <Label htmlFor=\"assetCapacity\">Capacity / day</Label>\n <Input\n id=\"assetCapacity\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n value={form.capacityPerDay}\n onChange={(e) => setForm({ ...form, capacityPerDay: e.target.value })}\n placeholder=\"120000\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetUnit\">Capacity unit</Label>\n <Select\n value={form.capacityUnit}\n onValueChange={(v) => setForm({ ...form, capacityUnit: v as TheUnit })}\n >\n <SelectTrigger id=\"assetUnit\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {UNITS.map((u) => (\n <SelectItem key={u} value={u}>\n {formatEnumLabel(u)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetWi\">Working interest (%)</Label>\n <Input\n id=\"assetWi\"\n type=\"number\"\n min=\"0\"\n max=\"100\"\n step=\"any\"\n value={form.workingInterestPct}\n onChange={(e) => setForm({ ...form, workingInterestPct: e.target.value })}\n placeholder=\"47.5\"\n />\n </div>\n </div>\n\n {formError && <p className=\"text-sm text-status-error-text\">{formError}</p>}\n </form>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n setDialogOpen(false);\n resetForm();\n }}\n >\n Cancel\n </Button>\n <Button type=\"submit\" form=\"createAssetForm\" disabled={createAsset.isPending}>\n {createAsset.isPending ? 'Creating…' : 'Create asset'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssetsPage.js","names":[],"sources":["../../../../src/theglobalfuel/pages/assets/AssetsPage.tsx"],"sourcesContent":["/**\n * Assets — the resource registry: list, filter & register energy/mineral assets.\n * @module theglobalfuel/pages/assets\n *\n * Reads `theListAssets` (cursor-paginated) with status / commodity / kind\n * filters; writes `theCreateAsset`. Rows drill into `assets/:id`. No mock data —\n * every field comes from the `wspace-theglobalfuel-svc` GraphQL contract.\n */\n\nimport { useMemo, useState } from 'react';\nimport { Plus, Fuel, MapPin } from 'lucide-react';\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n StatusBadge,\n DataTable,\n type Column,\n FilterTabs,\n type FilterOption,\n LoadingView,\n ErrorView,\n EmptyState,\n Pagination,\n} from '../../components';\nimport { useTheGlobalFuel } from '../../context';\nimport { useTheAssets, useTheCreateAsset, useCursorPager, useNotify } from '../../hooks';\nimport { formatEnumLabel, formatVolume, formatPercent, formatRelativeTime } from '../../utils';\nimport type {\n TheAsset,\n TheAssetKind,\n TheAssetStatus,\n TheCommodityType,\n TheUnit,\n} from '../../types';\n\nconst STATUS_FILTERS: FilterOption<TheAssetStatus | 'ALL'>[] = [\n { value: 'ALL', label: 'All' },\n { value: 'EXPLORATION', label: 'Exploration' },\n { value: 'APPRAISAL', label: 'Appraisal' },\n { value: 'DEVELOPMENT', label: 'Development' },\n { value: 'PRODUCING', label: 'Producing' },\n { value: 'SUSPENDED', label: 'Suspended' },\n { value: 'DECOMMISSIONING', label: 'Decommissioning' },\n { value: 'RETIRED', label: 'Retired' },\n];\n\nconst ASSET_KINDS: TheAssetKind[] = [\n 'OIL_FIELD',\n 'GAS_FIELD',\n 'WELL',\n 'MINE',\n 'QUARRY',\n 'REFINERY',\n 'PROCESSING_PLANT',\n 'POWER_PLANT',\n 'SOLAR_FARM',\n 'WIND_FARM',\n 'STORAGE_TERMINAL',\n 'PIPELINE',\n];\n\nconst COMMODITIES: TheCommodityType[] = [\n 'CRUDE_OIL',\n 'NATURAL_GAS',\n 'LNG',\n 'COAL',\n 'ELECTRICITY',\n 'HYDROGEN',\n 'BIOFUEL',\n 'IRON_ORE',\n 'COPPER',\n 'BAUXITE',\n 'GOLD',\n 'LITHIUM',\n 'RARE_EARTH',\n];\n\nconst UNITS: TheUnit[] = ['BARRELS', 'CUBIC_METERS', 'TONNES', 'KILOGRAMS', 'MWH', 'GJ', 'MCF'];\n\nconst PAGE_SIZE = 25;\n\ninterface CreateFormState {\n name: string;\n code: string;\n commodity: TheCommodityType;\n kind: TheAssetKind;\n status: TheAssetStatus;\n location: string;\n latitude: string;\n longitude: string;\n capacityPerDay: string;\n capacityUnit: TheUnit;\n workingInterestPct: string;\n}\n\nconst EMPTY_FORM: CreateFormState = {\n name: '',\n code: '',\n commodity: 'CRUDE_OIL',\n kind: 'OIL_FIELD',\n status: 'EXPLORATION',\n location: '',\n latitude: '',\n longitude: '',\n capacityPerDay: '',\n capacityUnit: 'BARRELS',\n workingInterestPct: '',\n};\n\nexport function AssetsPage() {\n const { navigateTo } = useTheGlobalFuel();\n const notify = useNotify();\n const [status, setStatus] = useState<TheAssetStatus | 'ALL'>('ALL');\n const [commodity, setCommodity] = useState<TheCommodityType | 'ALL'>('ALL');\n const [kind, setKind] = useState<TheAssetKind | 'ALL'>('ALL');\n const pager = useCursorPager();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [form, setForm] = useState<CreateFormState>(EMPTY_FORM);\n const [formError, setFormError] = useState<string | null>(null);\n\n const { data, isLoading, isError, refetch } = useTheAssets({\n status: status === 'ALL' ? undefined : status,\n commodity: commodity === 'ALL' ? undefined : commodity,\n kind: kind === 'ALL' ? undefined : kind,\n pagination: { limit: PAGE_SIZE, offset: pager.page * PAGE_SIZE },\n });\n const createAsset = useTheCreateAsset();\n\n const rows = useMemo(() => data?.items ?? [], [data]);\n const filtersActive = status !== 'ALL' || commodity !== 'ALL' || kind !== 'ALL';\n\n const columns: Column<TheAsset>[] = [\n {\n key: 'name',\n header: 'Asset',\n render: (a) => (\n <div className=\"flex items-center gap-3\">\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-bg-sunken text-text-secondary\">\n <Fuel className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate font-semibold text-text-primary\">{a.name}</p>\n {a.code && <p className=\"truncate text-xs text-text-tertiary\">{a.code}</p>}\n </div>\n </div>\n ),\n },\n {\n key: 'kind',\n header: 'Kind',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-secondary\">{formatEnumLabel(a.kind)}</span>,\n },\n {\n key: 'commodity',\n header: 'Commodity',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-secondary\">{formatEnumLabel(a.commodity)}</span>,\n },\n { key: 'status', header: 'Status', render: (a) => <StatusBadge status={a.status} /> },\n {\n key: 'capacity',\n header: 'Capacity',\n align: 'right',\n hideOnMobile: true,\n sortValue: (a) => a.capacityPerDay,\n render: (a) =>\n a.capacityPerDay > 0 ? (\n <span className=\"tabular-nums text-text-secondary\">\n {formatVolume(a.capacityPerDay, a.capacityUnit)}/day\n </span>\n ) : (\n <span className=\"text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'workingInterest',\n header: 'Working interest',\n align: 'right',\n hideOnMobile: true,\n sortValue: (a) => a.workingInterestPct,\n render: (a) => (\n <span className=\"tabular-nums text-text-secondary\">\n {formatPercent(a.workingInterestPct)}\n </span>\n ),\n },\n {\n key: 'location',\n header: 'Location',\n hideOnMobile: true,\n render: (a) =>\n a.location ? (\n <span className=\"inline-flex items-center gap-1.5 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0 text-text-tertiary\" />\n {a.location}\n </span>\n ) : (\n <span className=\"text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'updated',\n header: 'Updated',\n align: 'right',\n hideOnMobile: true,\n render: (a) => <span className=\"text-text-tertiary\">{formatRelativeTime(a.updatedAt)}</span>,\n },\n ];\n\n const resetForm = () => {\n setForm(EMPTY_FORM);\n setFormError(null);\n };\n\n const handleCreate = async () => {\n if (!form.name.trim()) {\n setFormError('Asset name is required.');\n return;\n }\n setFormError(null);\n try {\n const created = await createAsset.mutateAsync({\n name: form.name.trim(),\n code: form.code.trim() || null,\n commodity: form.commodity,\n kind: form.kind,\n status: form.status,\n location: form.location.trim() || null,\n latitude: form.latitude ? Number(form.latitude) : null,\n longitude: form.longitude ? Number(form.longitude) : null,\n capacityPerDay: form.capacityPerDay ? Number(form.capacityPerDay) : null,\n capacityUnit: form.capacityUnit,\n workingInterestPct: form.workingInterestPct ? Number(form.workingInterestPct) : null,\n });\n notify.success('Asset created');\n setDialogOpen(false);\n resetForm();\n navigateTo(`assets/${created.id}`);\n } catch (err) {\n notify.fromError(err);\n setFormError(err instanceof Error ? err.message : 'Failed to create asset.');\n }\n };\n\n return (\n <PageLayout\n title=\"Assets\"\n description=\"Resource registry — fields, wells, mines, plants, terminals & pipelines across every commodity.\"\n actions={\n <Button onClick={() => setDialogOpen(true)}>\n <Plus className=\"mr-1.5 h-4 w-4\" /> New asset\n </Button>\n }\n >\n <div className=\"mb-5 flex flex-wrap items-center gap-3\">\n <FilterTabs\n options={STATUS_FILTERS}\n value={status}\n onChange={(v) => {\n setStatus(v);\n pager.reset();\n }}\n />\n <Select\n value={commodity}\n onValueChange={(v) => {\n setCommodity(v as TheCommodityType | 'ALL');\n pager.reset();\n }}\n >\n <SelectTrigger className=\"w-48\" aria-label=\"Filter by commodity\">\n <SelectValue placeholder=\"All commodities\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All commodities</SelectItem>\n {COMMODITIES.map((c) => (\n <SelectItem key={c} value={c}>\n {formatEnumLabel(c)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select\n value={kind}\n onValueChange={(v) => {\n setKind(v as TheAssetKind | 'ALL');\n pager.reset();\n }}\n >\n <SelectTrigger className=\"w-48\" aria-label=\"Filter by kind\">\n <SelectValue placeholder=\"All kinds\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All kinds</SelectItem>\n {ASSET_KINDS.map((k) => (\n <SelectItem key={k} value={k}>\n {formatEnumLabel(k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {isLoading ? (\n <LoadingView label=\"Loading assets…\" />\n ) : isError ? (\n <ErrorView message=\"Couldn't load assets.\" onRetry={() => refetch()} />\n ) : rows.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Fuel className=\"h-10 w-10\" />}\n title=\"No assets yet\"\n description={\n filtersActive\n ? 'No assets match these filters.'\n : 'Register your first resource asset to start tracking production, reserves & emissions.'\n }\n action={\n <Button onClick={() => setDialogOpen(true)}>\n <Plus className=\"mr-1.5 h-4 w-4\" /> New asset\n </Button>\n }\n />\n ) : (\n <>\n <DataTable\n columns={columns}\n rows={rows}\n rowKey={(a) => a.id}\n onRowClick={(a) => navigateTo(`assets/${a.id}`)}\n rowLabel={(a) => `Open ${a.name}`}\n />\n <Pagination\n page={pager.page}\n pageSize={PAGE_SIZE}\n itemCount={rows.length}\n hasMore={data?.pageInfo?.hasMore ?? false}\n onPageChange={pager.onPageChange}\n />\n </>\n )}\n\n {/* New asset dialog */}\n <ResponsiveDialog\n open={dialogOpen}\n onOpenChange={(open) => {\n setDialogOpen(open);\n if (!open) resetForm();\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New asset</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Register a resource asset — a field, well, mine, plant, terminal or pipeline.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form\n id=\"createAssetForm\"\n onSubmit={(e) => {\n e.preventDefault();\n handleCreate();\n }}\n className=\"grid gap-4 py-2\"\n >\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetName\">Name *</Label>\n <Input\n id=\"assetName\"\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n placeholder=\"Rumaila North Field\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetCode\">Code</Label>\n <Input\n id=\"assetCode\"\n value={form.code}\n onChange={(e) => setForm({ ...form, code: e.target.value })}\n placeholder=\"AST-RMB-N\"\n />\n </div>\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetCommodity\">Commodity *</Label>\n <Select\n value={form.commodity}\n onValueChange={(v) => setForm({ ...form, commodity: v as TheCommodityType })}\n >\n <SelectTrigger id=\"assetCommodity\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {COMMODITIES.map((c) => (\n <SelectItem key={c} value={c}>\n {formatEnumLabel(c)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetKind\">Kind</Label>\n <Select\n value={form.kind}\n onValueChange={(v) => setForm({ ...form, kind: v as TheAssetKind })}\n >\n <SelectTrigger id=\"assetKind\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ASSET_KINDS.map((k) => (\n <SelectItem key={k} value={k}>\n {formatEnumLabel(k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetStatus\">Status</Label>\n <Select\n value={form.status}\n onValueChange={(v) => setForm({ ...form, status: v as TheAssetStatus })}\n >\n <SelectTrigger id=\"assetStatus\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STATUS_FILTERS.filter((o) => o.value !== 'ALL').map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLocation\">Location</Label>\n <Input\n id=\"assetLocation\"\n value={form.location}\n onChange={(e) => setForm({ ...form, location: e.target.value })}\n placeholder=\"Basra, Iraq\"\n />\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLat\">Latitude</Label>\n <Input\n id=\"assetLat\"\n type=\"number\"\n step=\"any\"\n value={form.latitude}\n onChange={(e) => setForm({ ...form, latitude: e.target.value })}\n placeholder=\"30.5085\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetLng\">Longitude</Label>\n <Input\n id=\"assetLng\"\n type=\"number\"\n step=\"any\"\n value={form.longitude}\n onChange={(e) => setForm({ ...form, longitude: e.target.value })}\n placeholder=\"47.7804\"\n />\n </div>\n </div>\n\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <div className=\"grid gap-1.5 sm:col-span-1\">\n <Label htmlFor=\"assetCapacity\">Capacity / day</Label>\n <Input\n id=\"assetCapacity\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n value={form.capacityPerDay}\n onChange={(e) => setForm({ ...form, capacityPerDay: e.target.value })}\n placeholder=\"120000\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetUnit\">Capacity unit</Label>\n <Select\n value={form.capacityUnit}\n onValueChange={(v) => setForm({ ...form, capacityUnit: v as TheUnit })}\n >\n <SelectTrigger id=\"assetUnit\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {UNITS.map((u) => (\n <SelectItem key={u} value={u}>\n {formatEnumLabel(u)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"assetWi\">Working interest (%)</Label>\n <Input\n id=\"assetWi\"\n type=\"number\"\n min=\"0\"\n max=\"100\"\n step=\"any\"\n value={form.workingInterestPct}\n onChange={(e) => setForm({ ...form, workingInterestPct: e.target.value })}\n placeholder=\"47.5\"\n />\n </div>\n </div>\n\n {formError && <p className=\"text-sm text-status-error-text\">{formError}</p>}\n </form>\n\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n setDialogOpen(false);\n resetForm();\n }}\n >\n Cancel\n </Button>\n <Button type=\"submit\" form=\"createAssetForm\" disabled={createAsset.isPending}>\n {createAsset.isPending ? 'Creating…' : 'Create asset'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkDA,IAAM,IAAyD;CAC7D;EAAE,OAAO;EAAO,OAAO;EAAO;CAC9B;EAAE,OAAO;EAAe,OAAO;EAAe;CAC9C;EAAE,OAAO;EAAa,OAAO;EAAa;CAC1C;EAAE,OAAO;EAAe,OAAO;EAAe;CAC9C;EAAE,OAAO;EAAa,OAAO;EAAa;CAC1C;EAAE,OAAO;EAAa,OAAO;EAAa;CAC1C;EAAE,OAAO;EAAmB,OAAO;EAAmB;CACtD;EAAE,OAAO;EAAW,OAAO;EAAW;CACvC,EAEK,IAA8B;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,IAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,IAAmB;CAAC;CAAW;CAAgB;CAAU;CAAa;CAAO;CAAM;CAAM,EAEzF,IAAY,IAgBZ,IAA8B;CAClC,MAAM;CACN,MAAM;CACN,WAAW;CACX,MAAM;CACN,QAAQ;CACR,UAAU;CACV,UAAU;CACV,WAAW;CACX,gBAAgB;CAChB,cAAc;CACd,oBAAoB;CACrB;AAED,SAAgB,IAAa;CAC3B,IAAM,EAAE,kBAAe,GAAkB,EACnC,IAAS,GAAW,EACpB,CAAC,GAAQ,KAAa,EAAiC,MAAM,EAC7D,CAAC,GAAW,KAAgB,EAAmC,MAAM,EACrE,CAAC,GAAM,MAAW,EAA+B,MAAM,EACvD,IAAQ,GAAgB,EACxB,CAAC,GAAY,KAAiB,EAAS,GAAM,EAC7C,CAAC,GAAM,KAAW,EAA0B,EAAW,EACvD,CAAC,GAAW,KAAgB,EAAwB,KAAK,EAEzD,EAAE,SAAM,eAAW,aAAS,gBAAY,GAAa;EACzD,QAAQ,MAAW,QAAQ,KAAA,IAAY;EACvC,WAAW,MAAc,QAAQ,KAAA,IAAY;EAC7C,MAAM,MAAS,QAAQ,KAAA,IAAY;EACnC,YAAY;GAAE,OAAO;GAAW,QAAQ,EAAM,OAAO;GAAW;EACjE,CAAC,EACI,IAAc,GAAmB,EAEjC,IAAO,QAAc,GAAM,SAAS,EAAE,EAAE,CAAC,EAAK,CAAC,EAC/C,KAAgB,MAAW,SAAS,MAAc,SAAS,MAAS,OAEpE,KAA8B;EAClC;GACE,KAAK;GACL,QAAQ;GACR,SAAS,MACP,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eACd,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;KACvB,CAAA,EACP,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAA4C,EAAE;MAAS,CAAA,EACnE,EAAE,QAAQ,kBAAC,KAAD;MAAG,WAAU;gBAAuC,EAAE;MAAS,CAAA,CACtE;OACF;;GAET;EACD;GACE,KAAK;GACL,QAAQ;GACR,cAAc;GACd,SAAS,MAAM,kBAAC,QAAD;IAAM,WAAU;cAAuB,EAAgB,EAAE,KAAK;IAAQ,CAAA;GACtF;EACD;GACE,KAAK;GACL,QAAQ;GACR,cAAc;GACd,SAAS,MAAM,kBAAC,QAAD;IAAM,WAAU;cAAuB,EAAgB,EAAE,UAAU;IAAQ,CAAA;GAC3F;EACD;GAAE,KAAK;GAAU,QAAQ;GAAU,SAAS,MAAM,kBAAC,IAAD,EAAa,QAAQ,EAAE,QAAU,CAAA;GAAE;EACrF;GACE,KAAK;GACL,QAAQ;GACR,OAAO;GACP,cAAc;GACd,YAAY,MAAM,EAAE;GACpB,SAAS,MACP,EAAE,iBAAiB,IACjB,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACG,GAAa,EAAE,gBAAgB,EAAE,aAAa,EAAC,OAC3C;QAEP,kBAAC,QAAD;IAAM,WAAU;cAAqB;IAAQ,CAAA;GAElD;EACD;GACE,KAAK;GACL,QAAQ;GACR,OAAO;GACP,cAAc;GACd,YAAY,MAAM,EAAE;GACpB,SAAS,MACP,kBAAC,QAAD;IAAM,WAAU;cACb,EAAc,EAAE,mBAAmB;IAC/B,CAAA;GAEV;EACD;GACE,KAAK;GACL,QAAQ;GACR,cAAc;GACd,SAAS,MACP,EAAE,WACA,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,kBAAC,GAAD,EAAQ,WAAU,2CAA4C,CAAA,EAC7D,EAAE,SACE;QAEP,kBAAC,QAAD;IAAM,WAAU;cAAqB;IAAQ,CAAA;GAElD;EACD;GACE,KAAK;GACL,QAAQ;GACR,OAAO;GACP,cAAc;GACd,SAAS,MAAM,kBAAC,QAAD;IAAM,WAAU;cAAsB,GAAmB,EAAE,UAAU;IAAQ,CAAA;GAC7F;EACF,EAEK,UAAkB;AAEtB,EADA,EAAQ,EAAW,EACnB,EAAa,KAAK;IAGd,KAAe,YAAY;AAC/B,MAAI,CAAC,EAAK,KAAK,MAAM,EAAE;AACrB,KAAa,0BAA0B;AACvC;;AAEF,IAAa,KAAK;AAClB,MAAI;GACF,IAAM,IAAU,MAAM,EAAY,YAAY;IAC5C,MAAM,EAAK,KAAK,MAAM;IACtB,MAAM,EAAK,KAAK,MAAM,IAAI;IAC1B,WAAW,EAAK;IAChB,MAAM,EAAK;IACX,QAAQ,EAAK;IACb,UAAU,EAAK,SAAS,MAAM,IAAI;IAClC,UAAU,EAAK,WAAW,OAAO,EAAK,SAAS,GAAG;IAClD,WAAW,EAAK,YAAY,OAAO,EAAK,UAAU,GAAG;IACrD,gBAAgB,EAAK,iBAAiB,OAAO,EAAK,eAAe,GAAG;IACpE,cAAc,EAAK;IACnB,oBAAoB,EAAK,qBAAqB,OAAO,EAAK,mBAAmB,GAAG;IACjF,CAAC;AAIF,GAHA,EAAO,QAAQ,gBAAgB,EAC/B,EAAc,GAAM,EACpB,GAAW,EACX,EAAW,UAAU,EAAQ,KAAK;WAC3B,GAAK;AAEZ,GADA,EAAO,UAAU,EAAI,EACrB,EAAa,aAAe,QAAQ,EAAI,UAAU,0BAA0B;;;AAIhF,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,GAAD;GAAQ,eAAe,EAAc,GAAK;aAA1C,CACE,kBAAC,GAAD,EAAM,WAAU,kBAAmB,CAAA,EAAA,aAC5B;;YANb;GASE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,SAAS;MACT,OAAO;MACP,WAAW,MAAM;AAEf,OADA,EAAU,EAAE,EACZ,EAAM,OAAO;;MAEf,CAAA;KACF,kBAAC,GAAD;MACE,OAAO;MACP,gBAAgB,MAAM;AAEpB,OADA,EAAa,EAA8B,EAC3C,EAAM,OAAO;;gBAJjB,CAOE,kBAAC,GAAD;OAAe,WAAU;OAAO,cAAW;iBACzC,kBAAC,GAAD,EAAa,aAAY,mBAAoB,CAAA;OAC/B,CAAA,EAChB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;OAAY,OAAM;iBAAM;OAA4B,CAAA,EACnD,EAAY,KAAK,MAChB,kBAAC,GAAD;OAAoB,OAAO;iBACxB,EAAgB,EAAE;OACR,EAFI,EAEJ,CACb,CACY,EAAA,CAAA,CACT;;KACT,kBAAC,GAAD;MACE,OAAO;MACP,gBAAgB,MAAM;AAEpB,OADA,GAAQ,EAA0B,EAClC,EAAM,OAAO;;gBAJjB,CAOE,kBAAC,GAAD;OAAe,WAAU;OAAO,cAAW;iBACzC,kBAAC,GAAD,EAAa,aAAY,aAAc,CAAA;OACzB,CAAA,EAChB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;OAAY,OAAM;iBAAM;OAAsB,CAAA,EAC7C,EAAY,KAAK,MAChB,kBAAC,GAAD;OAAoB,OAAO;iBACxB,EAAgB,EAAE;OACR,EAFI,EAEJ,CACb,CACY,EAAA,CAAA,CACT;;KACL;;GAEL,KACC,kBAAC,GAAD,EAAa,OAAM,mBAAoB,CAAA,GACrC,KACF,kBAAC,IAAD;IAAW,SAAQ;IAAwB,eAAe,IAAS;IAAI,CAAA,GACrE,EAAK,WAAW,IAClB,kBAAC,IAAD;IACE,cAAa;IACb,MAAM,kBAAC,GAAD,EAAM,WAAU,aAAc,CAAA;IACpC,OAAM;IACN,aACE,KACI,mCACA;IAEN,QACE,kBAAC,GAAD;KAAQ,eAAe,EAAc,GAAK;eAA1C,CACE,kBAAC,GAAD,EAAM,WAAU,kBAAmB,CAAA,EAAA,aAC5B;;IAEX,CAAA,GAEF,kBAAA,IAAA,EAAA,UAAA,CACE,kBAAC,IAAD;IACW;IACH;IACN,SAAS,MAAM,EAAE;IACjB,aAAa,MAAM,EAAW,UAAU,EAAE,KAAK;IAC/C,WAAW,MAAM,QAAQ,EAAE;IAC3B,CAAA,EACF,kBAAC,GAAD;IACE,MAAM,EAAM;IACZ,UAAU;IACV,WAAW,EAAK;IAChB,SAAS,GAAM,UAAU,WAAW;IACpC,cAAc,EAAM;IACpB,CAAA,CACD,EAAA,CAAA;GAIL,kBAAC,IAAD;IACE,MAAM;IACN,eAAe,MAAS;AAEtB,KADA,EAAc,EAAK,EACd,KAAM,GAAW;;cAGxB,kBAAC,GAAD,EAAA,UAAA;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAuB,aAAiC,CAAA,EACxD,kBAAC,GAAD,EAAA,UAA6B,iFAEC,CAAA,CACP,EAAA,CAAA;KAEzB,kBAAC,QAAD;MACE,IAAG;MACH,WAAW,MAAM;AAEf,OADA,EAAE,gBAAgB,EAClB,IAAc;;MAEhB,WAAU;gBANZ;OAQE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD;UAAO,SAAQ;oBAAY;UAAc,CAAA,EACzC,kBAAC,GAAD;UACE,IAAG;UACH,OAAO,EAAK;UACZ,WAAW,MAAM,EAAQ;WAAE,GAAG;WAAM,MAAM,EAAE,OAAO;WAAO,CAAC;UAC3D,aAAY;UACZ,CAAA,CACE;YACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD;UAAO,SAAQ;oBAAY;UAAY,CAAA,EACvC,kBAAC,GAAD;UACE,IAAG;UACH,OAAO,EAAK;UACZ,WAAW,MAAM,EAAQ;WAAE,GAAG;WAAM,MAAM,EAAE,OAAO;WAAO,CAAC;UAC3D,aAAY;UACZ,CAAA,CACE;WACF;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAiB;WAAmB,CAAA,EACnD,kBAAC,GAAD;WACE,OAAO,EAAK;WACZ,gBAAgB,MAAM,EAAQ;YAAE,GAAG;YAAM,WAAW;YAAuB,CAAC;qBAF9E,CAIE,kBAAC,GAAD;YAAe,IAAG;sBAChB,kBAAC,GAAD,EAAe,CAAA;YACD,CAAA,EAChB,kBAAC,GAAD,EAAA,UACG,EAAY,KAAK,MAChB,kBAAC,GAAD;YAAoB,OAAO;sBACxB,EAAgB,EAAE;YACR,EAFI,EAEJ,CACb,EACY,CAAA,CACT;aACL;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAY;WAAY,CAAA,EACvC,kBAAC,GAAD;WACE,OAAO,EAAK;WACZ,gBAAgB,MAAM,EAAQ;YAAE,GAAG;YAAM,MAAM;YAAmB,CAAC;qBAFrE,CAIE,kBAAC,GAAD;YAAe,IAAG;sBAChB,kBAAC,GAAD,EAAe,CAAA;YACD,CAAA,EAChB,kBAAC,GAAD,EAAA,UACG,EAAY,KAAK,MAChB,kBAAC,GAAD;YAAoB,OAAO;sBACxB,EAAgB,EAAE;YACR,EAFI,EAEJ,CACb,EACY,CAAA,CACT;aACL;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAc;WAAc,CAAA,EAC3C,kBAAC,GAAD;WACE,OAAO,EAAK;WACZ,gBAAgB,MAAM,EAAQ;YAAE,GAAG;YAAM,QAAQ;YAAqB,CAAC;qBAFzE,CAIE,kBAAC,GAAD;YAAe,IAAG;sBAChB,kBAAC,GAAD,EAAe,CAAA;YACD,CAAA,EAChB,kBAAC,GAAD,EAAA,UACG,EAAe,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,KAAK,MACpD,kBAAC,GAAD;YAA0B,OAAO,EAAE;sBAChC,EAAE;YACQ,EAFI,EAAE,MAEN,CACb,EACY,CAAA,CACT;aACL;;SACF;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SAAO,SAAQ;mBAAgB;SAAgB,CAAA,EAC/C,kBAAC,GAAD;SACE,IAAG;SACH,OAAO,EAAK;SACZ,WAAW,MAAM,EAAQ;UAAE,GAAG;UAAM,UAAU,EAAE,OAAO;UAAO,CAAC;SAC/D,aAAY;SACZ,CAAA,CACE;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD;UAAO,SAAQ;oBAAW;UAAgB,CAAA,EAC1C,kBAAC,GAAD;UACE,IAAG;UACH,MAAK;UACL,MAAK;UACL,OAAO,EAAK;UACZ,WAAW,MAAM,EAAQ;WAAE,GAAG;WAAM,UAAU,EAAE,OAAO;WAAO,CAAC;UAC/D,aAAY;UACZ,CAAA,CACE;YACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD;UAAO,SAAQ;oBAAW;UAAiB,CAAA,EAC3C,kBAAC,GAAD;UACE,IAAG;UACH,MAAK;UACL,MAAK;UACL,OAAO,EAAK;UACZ,WAAW,MAAM,EAAQ;WAAE,GAAG;WAAM,WAAW,EAAE,OAAO;WAAO,CAAC;UAChE,aAAY;UACZ,CAAA,CACE;WACF;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAgB;WAAsB,CAAA,EACrD,kBAAC,GAAD;WACE,IAAG;WACH,MAAK;WACL,KAAI;WACJ,MAAK;WACL,OAAO,EAAK;WACZ,WAAW,MAAM,EAAQ;YAAE,GAAG;YAAM,gBAAgB,EAAE,OAAO;YAAO,CAAC;WACrE,aAAY;WACZ,CAAA,CACE;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAY;WAAqB,CAAA,EAChD,kBAAC,GAAD;WACE,OAAO,EAAK;WACZ,gBAAgB,MAAM,EAAQ;YAAE,GAAG;YAAM,cAAc;YAAc,CAAC;qBAFxE,CAIE,kBAAC,GAAD;YAAe,IAAG;sBAChB,kBAAC,GAAD,EAAe,CAAA;YACD,CAAA,EAChB,kBAAC,GAAD,EAAA,UACG,EAAM,KAAK,MACV,kBAAC,GAAD;YAAoB,OAAO;sBACxB,EAAgB,EAAE;YACR,EAFI,EAEJ,CACb,EACY,CAAA,CACT;aACL;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;qBAAU;WAA4B,CAAA,EACrD,kBAAC,GAAD;WACE,IAAG;WACH,MAAK;WACL,KAAI;WACJ,KAAI;WACJ,MAAK;WACL,OAAO,EAAK;WACZ,WAAW,MAAM,EAAQ;YAAE,GAAG;YAAM,oBAAoB,EAAE,OAAO;YAAO,CAAC;WACzE,aAAY;WACZ,CAAA,CACE;;SACF;;OAEL,KAAa,kBAAC,KAAD;QAAG,WAAU;kBAAkC;QAAc,CAAA;OACtE;;KAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MACE,SAAQ;MACR,MAAK;MACL,eAAe;AAEb,OADA,EAAc,GAAM,EACpB,GAAW;;gBAEd;MAEQ,CAAA,EACT,kBAAC,GAAD;MAAQ,MAAK;MAAS,MAAK;MAAkB,UAAU,EAAY;gBAChE,EAAY,YAAY,cAAc;MAChC,CAAA,CACc,EAAA,CAAA;KACD,EAAA,CAAA;IACT,CAAA;GACR"}