@burdenoff/microfe-assethandler 2026.703.2 → 2026.703.3

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 (64) hide show
  1. package/dist/assethandler/AssetHandlerRoot.js +18 -18
  2. package/dist/assethandler/hooks/useAssetHandlerNavigate.js +19 -0
  3. package/dist/assethandler/hooks/useAssetHandlerNavigate.js.map +1 -0
  4. package/dist/assethandler/pages/AiPredictionsPage.js +29 -29
  5. package/dist/assethandler/pages/AnalyticsPage.js +154 -154
  6. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +48 -48
  7. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +84 -84
  8. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCreatePage.js +82 -82
  10. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetDetailPage.js +104 -103
  12. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetListPage.js +132 -132
  14. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +52 -52
  16. package/dist/assethandler/pages/CmdbBrowserPage.js +27 -27
  17. package/dist/assethandler/pages/DashboardPage.js +119 -119
  18. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  19. package/dist/assethandler/pages/DigitalTwinPage.js +22 -22
  20. package/dist/assethandler/pages/DiscoveryJobsPage.js +35 -35
  21. package/dist/assethandler/pages/EsgDashboardPage.js +32 -32
  22. package/dist/assethandler/pages/FinanceBudgetDetailPage.js +57 -56
  23. package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
  24. package/dist/assethandler/pages/FinanceFinanceHubPage.js +98 -98
  25. package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
  26. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +58 -57
  27. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
  28. package/dist/assethandler/pages/IotDevicesPage.js +29 -29
  29. package/dist/assethandler/pages/ItilChangeDetailPage.js +76 -75
  30. package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
  31. package/dist/assethandler/pages/ItilChangeManagementPage.js +49 -49
  32. package/dist/assethandler/pages/ItilIncidentDetailPage.js +63 -62
  33. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  34. package/dist/assethandler/pages/ItilIncidentManagementPage.js +72 -72
  35. package/dist/assethandler/pages/ItilItilhubPage.js +112 -112
  36. package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
  37. package/dist/assethandler/pages/ItilProblemDetailPage.js +61 -60
  38. package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
  39. package/dist/assethandler/pages/ItilProblemManagementPage.js +46 -46
  40. package/dist/assethandler/pages/KnowledgeBasePage.js +28 -28
  41. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +52 -52
  42. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +29 -29
  43. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +58 -57
  44. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  45. package/dist/assethandler/pages/OperationsOperationsHubPage.js +80 -80
  46. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  47. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +49 -48
  48. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  49. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +52 -52
  50. package/dist/assethandler/pages/ProvenancePage.js +36 -36
  51. package/dist/assethandler/pages/SamLicensesPage.js +27 -27
  52. package/dist/assethandler/pages/SecurityComplianceDetailPage.js +39 -38
  53. package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
  54. package/dist/assethandler/pages/SecurityPolicyDetailPage.js +50 -49
  55. package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
  56. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +47 -46
  57. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
  58. package/dist/assethandler/pages/SecuritySecurityHubPage.js +104 -104
  59. package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
  60. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +74 -73
  61. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  62. package/dist/assethandler/pages/TransactionsTransactionListPage.js +77 -77
  63. package/dist/assethandler/providers/AssetHandlerProvider.js +12 -12
  64. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  import { Box as e } from "lucide-react";
2
- import { GlassCard as t, GradientText as n, IllustratedEmptyState as r, PagePurpose as i } from "@burdenoff/fe-libs/ui";
3
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
- import { gql as s } from "@apollo/client";
5
- import { useQuery as c } from "@apollo/client/react";
2
+ import { gql as t } from "@apollo/client";
3
+ import { useQuery as n } from "@apollo/client/react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ import { GlassCard as a, GradientText as o, IllustratedEmptyState as s, PagePurpose as c } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/assethandler/pages/DigitalTwinPage.tsx
7
- var l = s`
7
+ var l = t`
8
8
  query AssetHandlerDigitalTwins {
9
9
  digitalTwins {
10
10
  id
@@ -17,49 +17,49 @@ var l = s`
17
17
  }
18
18
  `;
19
19
  function u() {
20
- let { data: s, loading: u } = c(l, { fetchPolicy: "cache-and-network" }), d = s?.digitalTwins ?? [];
21
- return /* @__PURE__ */ o("div", {
20
+ let { data: t, loading: u } = n(l, { fetchPolicy: "cache-and-network" }), d = t?.digitalTwins ?? [];
21
+ return /* @__PURE__ */ i("div", {
22
22
  className: "space-y-4 p-4",
23
23
  children: [
24
- /* @__PURE__ */ o("h1", {
24
+ /* @__PURE__ */ i("h1", {
25
25
  className: "flex items-center gap-2 text-2xl font-semibold",
26
26
  children: [
27
- /* @__PURE__ */ a(e, { className: "h-6 w-6" }),
27
+ /* @__PURE__ */ r(e, { className: "h-6 w-6" }),
28
28
  " ",
29
- /* @__PURE__ */ a(n, { children: "Digital Twin" })
29
+ /* @__PURE__ */ r(o, { children: "Digital Twin" })
30
30
  ]
31
31
  }),
32
- /* @__PURE__ */ a(i, { children: "A live virtual replica of your most critical assets. Use digital twins to simulate what-if scenarios, validate maintenance changes, and visualise condition without touching the physical equipment — so you can de-risk decisions on high-value or hard-to-access assets." }),
33
- /* @__PURE__ */ o("div", {
32
+ /* @__PURE__ */ r(c, { children: "A live virtual replica of your most critical assets. Use digital twins to simulate what-if scenarios, validate maintenance changes, and visualise condition without touching the physical equipment — so you can de-risk decisions on high-value or hard-to-access assets." }),
33
+ /* @__PURE__ */ i("div", {
34
34
  className: "grid gap-3 md:grid-cols-2",
35
35
  children: [
36
- u && d.length === 0 ? /* @__PURE__ */ a("div", {
36
+ u && d.length === 0 ? /* @__PURE__ */ r("div", {
37
37
  className: "space-y-2 px-4 py-4",
38
- children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ a("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
38
+ children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ r("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
39
39
  }) : null,
40
- !u && d.length === 0 ? /* @__PURE__ */ a(r, {
40
+ !u && d.length === 0 ? /* @__PURE__ */ r(s, {
41
41
  illustration: "empty-data",
42
42
  title: "No digital twins found",
43
43
  description: "Digital twins of your assets will appear here."
44
44
  }) : null,
45
- d.map((e, n) => /* @__PURE__ */ o(t, {
46
- treatment: n === 0 ? "glass" : "plain",
47
- glow: n === 0,
45
+ d.map((e, t) => /* @__PURE__ */ i(a, {
46
+ treatment: t === 0 ? "glass" : "plain",
47
+ glow: t === 0,
48
48
  className: "p-4 border-border-seam",
49
49
  children: [
50
- /* @__PURE__ */ o("p", {
50
+ /* @__PURE__ */ i("p", {
51
51
  className: "text-xs uppercase tracking-wide text-text-secondary",
52
52
  children: ["Asset ", e.assetId]
53
53
  }),
54
- /* @__PURE__ */ a("h2", {
54
+ /* @__PURE__ */ r("h2", {
55
55
  className: "mt-1 text-base font-semibold",
56
56
  children: e.modelRef
57
57
  }),
58
- /* @__PURE__ */ o("p", {
58
+ /* @__PURE__ */ i("p", {
59
59
  className: "mt-1 text-sm text-text-secondary",
60
60
  children: ["Fidelity: ", e.fidelityLevel]
61
61
  }),
62
- /* @__PURE__ */ o("p", {
62
+ /* @__PURE__ */ i("p", {
63
63
  className: "mt-1 text-sm text-text-secondary",
64
64
  children: ["Geometry: ", e.geometryRef ?? "Not linked"]
65
65
  })
@@ -1,11 +1,11 @@
1
1
  import { useState as e } from "react";
2
2
  import { Radar as t } from "lucide-react";
3
- import { EmphasisPanel as n, GradientText as r, IllustratedEmptyState as i, PagePurpose as a } from "@burdenoff/fe-libs/ui";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { gql as c } from "@apollo/client";
6
- import { useMutation as l, useQuery as u } from "@apollo/client/react";
3
+ import { gql as n } from "@apollo/client";
4
+ import { useMutation as r, useQuery as i } from "@apollo/client/react";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ import { EmphasisPanel as s, GradientText as c, IllustratedEmptyState as l, PagePurpose as u } from "@burdenoff/fe-libs/ui";
7
7
  //#region src/assethandler/pages/DiscoveryJobsPage.tsx
8
- var d = c`
8
+ var d = n`
9
9
  query AssetHandlerDiscoveryJobs {
10
10
  discoveryJobs {
11
11
  id
@@ -17,7 +17,7 @@ var d = c`
17
17
  completedAt
18
18
  }
19
19
  }
20
- `, f = c`
20
+ `, f = n`
21
21
  mutation AssetHandlerStartDiscoveryJob($input: StartDiscoveryJobInput!) {
22
22
  startDiscoveryJob(input: $input) {
23
23
  id
@@ -25,46 +25,46 @@ var d = c`
25
25
  }
26
26
  `;
27
27
  function p() {
28
- let [c, p] = e("Nightly Datacenter Scan"), [m, h] = e("aws-ap-south-1"), { data: g, loading: _, refetch: v } = u(d, { fetchPolicy: "cache-and-network" }), [y, { loading: b }] = l(f, { onCompleted: () => {
28
+ let [n, p] = e("Nightly Datacenter Scan"), [m, h] = e("aws-ap-south-1"), { data: g, loading: _, refetch: v } = i(d, { fetchPolicy: "cache-and-network" }), [y, { loading: b }] = r(f, { onCompleted: () => {
29
29
  v();
30
30
  } }), x = g?.discoveryJobs ?? [];
31
- return /* @__PURE__ */ s("div", {
31
+ return /* @__PURE__ */ o("div", {
32
32
  className: "space-y-4 p-4",
33
33
  children: [
34
- /* @__PURE__ */ s("h1", {
34
+ /* @__PURE__ */ o("h1", {
35
35
  className: "flex items-center gap-2 text-2xl font-semibold",
36
36
  children: [
37
- /* @__PURE__ */ o(t, { className: "h-6 w-6" }),
37
+ /* @__PURE__ */ a(t, { className: "h-6 w-6" }),
38
38
  " ",
39
- /* @__PURE__ */ o(r, { children: "Discovery Jobs" })
39
+ /* @__PURE__ */ a(c, { children: "Discovery Jobs" })
40
40
  ]
41
41
  }),
42
- /* @__PURE__ */ o(a, { children: "Automatically find assets across your cloud and on-prem environments instead of entering them by hand. Point a discovery job at a source (e.g. an AWS region) and it scans for new or changed assets and feeds them into your inventory — keeping the estate complete and up to date." }),
43
- /* @__PURE__ */ s(n, { children: [/* @__PURE__ */ o("h2", {
42
+ /* @__PURE__ */ a(u, { children: "Automatically find assets across your cloud and on-prem environments instead of entering them by hand. Point a discovery job at a source (e.g. an AWS region) and it scans for new or changed assets and feeds them into your inventory — keeping the estate complete and up to date." }),
43
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a("h2", {
44
44
  className: "text-sm font-semibold mb-3",
45
45
  children: "Start a discovery scan"
46
- }), /* @__PURE__ */ s("form", {
46
+ }), /* @__PURE__ */ o("form", {
47
47
  className: "grid gap-3 md:grid-cols-3",
48
48
  onSubmit: (e) => {
49
49
  e.preventDefault(), y({ variables: { input: {
50
- name: c,
50
+ name: n,
51
51
  source: m
52
52
  } } });
53
53
  },
54
54
  children: [
55
- /* @__PURE__ */ o("input", {
55
+ /* @__PURE__ */ a("input", {
56
56
  className: "rounded-md border px-3 py-2",
57
- value: c,
57
+ value: n,
58
58
  onChange: (e) => p(e.target.value),
59
59
  placeholder: "Job name"
60
60
  }),
61
- /* @__PURE__ */ o("input", {
61
+ /* @__PURE__ */ a("input", {
62
62
  className: "rounded-md border px-3 py-2",
63
63
  value: m,
64
64
  onChange: (e) => h(e.target.value),
65
65
  placeholder: "Discovery source"
66
66
  }),
67
- /* @__PURE__ */ o("button", {
67
+ /* @__PURE__ */ a("button", {
68
68
  className: "rounded-md bg-action-primary-bg px-3 py-2 text-action-primary-text",
69
69
  disabled: b,
70
70
  type: "submit",
@@ -72,39 +72,39 @@ function p() {
72
72
  })
73
73
  ]
74
74
  })] }),
75
- /* @__PURE__ */ s("div", {
75
+ /* @__PURE__ */ o("div", {
76
76
  className: "rounded-lg border",
77
77
  children: [
78
- /* @__PURE__ */ s("div", {
78
+ /* @__PURE__ */ o("div", {
79
79
  className: "grid grid-cols-5 gap-3 border-b px-4 py-3 text-xs font-semibold uppercase tracking-wide text-text-secondary",
80
80
  children: [
81
- /* @__PURE__ */ o("span", { children: "Name" }),
82
- /* @__PURE__ */ o("span", { children: "Source" }),
83
- /* @__PURE__ */ o("span", { children: "Status" }),
84
- /* @__PURE__ */ o("span", { children: "Discovered" }),
85
- /* @__PURE__ */ o("span", { children: "Started" })
81
+ /* @__PURE__ */ a("span", { children: "Name" }),
82
+ /* @__PURE__ */ a("span", { children: "Source" }),
83
+ /* @__PURE__ */ a("span", { children: "Status" }),
84
+ /* @__PURE__ */ a("span", { children: "Discovered" }),
85
+ /* @__PURE__ */ a("span", { children: "Started" })
86
86
  ]
87
87
  }),
88
- _ && x.length === 0 ? /* @__PURE__ */ o("div", {
88
+ _ && x.length === 0 ? /* @__PURE__ */ a("div", {
89
89
  className: "space-y-2 px-4 py-4",
90
- children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ o("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
90
+ children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ a("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
91
91
  }) : null,
92
- !_ && x.length === 0 ? /* @__PURE__ */ o(i, {
92
+ !_ && x.length === 0 ? /* @__PURE__ */ a(l, {
93
93
  illustration: "empty-data",
94
94
  title: "No discovery jobs found",
95
95
  description: "Run a discovery job to populate this list."
96
96
  }) : null,
97
- x.map((e) => /* @__PURE__ */ s("div", {
97
+ x.map((e) => /* @__PURE__ */ o("div", {
98
98
  className: "grid grid-cols-5 gap-3 border-b px-4 py-3 text-sm last:border-b-0",
99
99
  children: [
100
- /* @__PURE__ */ o("span", {
100
+ /* @__PURE__ */ a("span", {
101
101
  className: "font-medium",
102
102
  children: e.name
103
103
  }),
104
- /* @__PURE__ */ o("span", { children: e.source }),
105
- /* @__PURE__ */ o("span", { children: e.status }),
106
- /* @__PURE__ */ o("span", { children: e.assetsDiscovered }),
107
- /* @__PURE__ */ o("span", {
104
+ /* @__PURE__ */ a("span", { children: e.source }),
105
+ /* @__PURE__ */ a("span", { children: e.status }),
106
+ /* @__PURE__ */ a("span", { children: e.assetsDiscovered }),
107
+ /* @__PURE__ */ a("span", {
108
108
  className: "text-text-secondary",
109
109
  children: e.startedAt ? new Date(e.startedAt).toLocaleString() : "n/a"
110
110
  })
@@ -1,11 +1,11 @@
1
1
  import { useState as e } from "react";
2
2
  import { Leaf as t } from "lucide-react";
3
- import { EmphasisPanel as n, GradientText as r, IllustratedEmptyState as i, PagePurpose as a } from "@burdenoff/fe-libs/ui";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { gql as c } from "@apollo/client";
6
- import { useMutation as l, useQuery as u } from "@apollo/client/react";
3
+ import { gql as n } from "@apollo/client";
4
+ import { useMutation as r, useQuery as i } from "@apollo/client/react";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ import { EmphasisPanel as s, GradientText as c, IllustratedEmptyState as l, PagePurpose as u } from "@burdenoff/fe-libs/ui";
7
7
  //#region src/assethandler/pages/EsgDashboardPage.tsx
8
- var d = c`
8
+ var d = n`
9
9
  query AssetHandlerEsgMetrics {
10
10
  esgMetrics {
11
11
  id
@@ -20,7 +20,7 @@ var d = c`
20
20
  periodEnd
21
21
  }
22
22
  }
23
- `, f = c`
23
+ `, f = n`
24
24
  mutation AssetHandlerUpsertEsgMetric($input: UpsertEsgMetricInput!) {
25
25
  upsertEsgMetric(input: $input) {
26
26
  id
@@ -28,53 +28,53 @@ var d = c`
28
28
  }
29
29
  `;
30
30
  function p() {
31
- let [c, p] = e("42.5"), { data: m, loading: h, refetch: g } = u(d, { fetchPolicy: "cache-and-network" }), [_, { loading: v }] = l(f, { onCompleted: () => {
31
+ let [n, p] = e("42.5"), { data: m, loading: h, refetch: g } = i(d, { fetchPolicy: "cache-and-network" }), [_, { loading: v }] = r(f, { onCompleted: () => {
32
32
  g();
33
33
  } }), y = m?.esgMetrics ?? [];
34
- return /* @__PURE__ */ s("div", {
34
+ return /* @__PURE__ */ o("div", {
35
35
  className: "space-y-4 p-4",
36
36
  children: [
37
- /* @__PURE__ */ s("h1", {
37
+ /* @__PURE__ */ o("h1", {
38
38
  className: "flex items-center gap-2 text-2xl font-semibold",
39
39
  children: [
40
- /* @__PURE__ */ o(t, { className: "h-6 w-6" }),
40
+ /* @__PURE__ */ a(t, { className: "h-6 w-6" }),
41
41
  " ",
42
- /* @__PURE__ */ o(r, { children: "ESG Dashboard" })
42
+ /* @__PURE__ */ a(c, { children: "ESG Dashboard" })
43
43
  ]
44
44
  }),
45
- /* @__PURE__ */ o(a, { children: "Measure the environmental and governance impact of your asset estate against targets — energy use, carbon emissions, responsible disposal. Record metrics here to track progress toward sustainability goals and produce the evidence ESG reporting and audits require." }),
46
- /* @__PURE__ */ s(n, { children: [/* @__PURE__ */ o("h2", {
45
+ /* @__PURE__ */ a(u, { children: "Measure the environmental and governance impact of your asset estate against targets — energy use, carbon emissions, responsible disposal. Record metrics here to track progress toward sustainability goals and produce the evidence ESG reporting and audits require." }),
46
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a("h2", {
47
47
  className: "text-sm font-semibold mb-3",
48
48
  children: "Record an ESG metric"
49
- }), /* @__PURE__ */ s("form", {
49
+ }), /* @__PURE__ */ o("form", {
50
50
  className: "grid gap-3 md:grid-cols-4",
51
51
  onSubmit: (e) => {
52
52
  e.preventDefault();
53
- let t = new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth(), 1).toISOString(), n = (/* @__PURE__ */ new Date()).toISOString();
53
+ let t = new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth(), 1).toISOString(), r = (/* @__PURE__ */ new Date()).toISOString();
54
54
  _({ variables: { input: {
55
55
  metricKey: "carbon-footprint-scope2",
56
56
  metricName: "Scope 2 Carbon Emissions",
57
57
  category: "environment",
58
58
  unit: "tCO2e",
59
- value: Number(c),
59
+ value: Number(n),
60
60
  target: 40,
61
61
  trend: "improving",
62
62
  periodStart: t,
63
- periodEnd: n
63
+ periodEnd: r
64
64
  } } });
65
65
  },
66
66
  children: [
67
- /* @__PURE__ */ o("input", {
67
+ /* @__PURE__ */ a("input", {
68
68
  className: "rounded-md border px-3 py-2",
69
- value: c,
69
+ value: n,
70
70
  onChange: (e) => p(e.target.value),
71
71
  "aria-label": "Metric value"
72
72
  }),
73
- /* @__PURE__ */ o("div", {
73
+ /* @__PURE__ */ a("div", {
74
74
  className: "text-sm text-text-secondary md:col-span-2",
75
75
  children: "Metric: Scope 2 Carbon Emissions (monthly)"
76
76
  }),
77
- /* @__PURE__ */ o("button", {
77
+ /* @__PURE__ */ a("button", {
78
78
  className: "rounded-md bg-action-primary-bg px-3 py-2 text-action-primary-text",
79
79
  disabled: v,
80
80
  type: "submit",
@@ -82,45 +82,45 @@ function p() {
82
82
  })
83
83
  ]
84
84
  })] }),
85
- /* @__PURE__ */ s("div", {
85
+ /* @__PURE__ */ o("div", {
86
86
  className: "grid gap-3 md:grid-cols-2",
87
87
  children: [
88
- h && y.length === 0 ? /* @__PURE__ */ o("div", {
88
+ h && y.length === 0 ? /* @__PURE__ */ a("div", {
89
89
  className: "space-y-2 px-4 py-4",
90
- children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ o("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
90
+ children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ a("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
91
91
  }) : null,
92
- !h && y.length === 0 ? /* @__PURE__ */ o(i, {
92
+ !h && y.length === 0 ? /* @__PURE__ */ a(l, {
93
93
  illustration: "empty-data",
94
94
  title: "No ESG metrics recorded yet",
95
95
  description: "Sustainability and ESG metrics will appear here once recorded."
96
96
  }) : null,
97
- y.map((e) => /* @__PURE__ */ s("article", {
97
+ y.map((e) => /* @__PURE__ */ o("article", {
98
98
  className: "rounded-lg border p-4",
99
99
  children: [
100
- /* @__PURE__ */ o("p", {
100
+ /* @__PURE__ */ a("p", {
101
101
  className: "text-xs uppercase tracking-wide text-text-secondary",
102
102
  children: e.category
103
103
  }),
104
- /* @__PURE__ */ o("h2", {
104
+ /* @__PURE__ */ a("h2", {
105
105
  className: "mt-1 text-base font-semibold",
106
106
  children: e.metricName
107
107
  }),
108
- /* @__PURE__ */ s("p", {
108
+ /* @__PURE__ */ o("p", {
109
109
  className: "mt-2 text-sm",
110
110
  children: [
111
- /* @__PURE__ */ o("span", {
111
+ /* @__PURE__ */ a("span", {
112
112
  className: "font-semibold",
113
113
  children: e.value
114
114
  }),
115
115
  " ",
116
116
  e.unit,
117
- e.target === null ? null : /* @__PURE__ */ s("span", {
117
+ e.target === null ? null : /* @__PURE__ */ o("span", {
118
118
  className: "text-text-secondary",
119
119
  children: [" / target ", e.target]
120
120
  })
121
121
  ]
122
122
  }),
123
- /* @__PURE__ */ s("p", {
123
+ /* @__PURE__ */ o("p", {
124
124
  className: "mt-1 text-xs text-text-secondary",
125
125
  children: ["Trend: ", e.trend ?? "stable"]
126
126
  })
@@ -1,18 +1,19 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
- import { ArrowLeft as t, Edit as n } from "lucide-react";
3
- import { useNavigate as r, useParams as i } from "react-router-dom";
4
- import { Badge as a, Button as o, Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d, EmphasisPanel as f, GradientText as p, IllustratedEmptyState as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
5
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
2
+ import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
3
+ import { ArrowLeft as n, Edit as r } from "lucide-react";
4
+ import { useParams as i } from "react-router-dom";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ import { Badge as s, Button as c, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p, EmphasisPanel as m, GradientText as h, IllustratedEmptyState as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
6
7
  //#region src/assethandler/pages/FinanceBudgetDetailPage.tsx
7
8
  function v() {
8
- let v = r(), { budgetId: y } = i(), { budgets: b, transactions: x } = e(), S = b.find((e) => e.id === y) ?? b[0];
9
- if (!S) return /* @__PURE__ */ g("div", {
9
+ let v = t(), { budgetId: y } = i(), { budgets: b, transactions: x } = e(), S = b.find((e) => e.id === y) ?? b[0];
10
+ if (!S) return /* @__PURE__ */ a("div", {
10
11
  className: "p-6",
11
- children: /* @__PURE__ */ g(m, {
12
+ children: /* @__PURE__ */ a(g, {
12
13
  illustration: "empty-search",
13
14
  title: "Budget not found",
14
15
  description: "This budget may have been archived or removed. Return to the finance hub to find it.",
15
- action: /* @__PURE__ */ g(o, {
16
+ action: /* @__PURE__ */ a(c, {
16
17
  size: "sm",
17
18
  onClick: () => v("/finance/finance-hub"),
18
19
  children: "Back to finance"
@@ -20,28 +21,28 @@ function v() {
20
21
  })
21
22
  });
22
23
  let C = x.filter((e) => e.category === S.category), w = Math.round(S.spent / S.allocated * 100);
23
- return /* @__PURE__ */ _("div", {
24
+ return /* @__PURE__ */ o("div", {
24
25
  className: "space-y-6 p-6",
25
26
  children: [
26
- /* @__PURE__ */ _("div", {
27
+ /* @__PURE__ */ o("div", {
27
28
  className: "flex items-center justify-between",
28
- children: [/* @__PURE__ */ _("div", {
29
+ children: [/* @__PURE__ */ o("div", {
29
30
  className: "flex items-center gap-4",
30
- children: [/* @__PURE__ */ g(o, {
31
+ children: [/* @__PURE__ */ a(c, {
31
32
  variant: "ghost",
32
33
  size: "icon",
33
34
  onClick: () => v("/finance/finance-hub"),
34
- children: /* @__PURE__ */ g(t, { className: "h-4 w-4" })
35
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("div", {
35
+ children: /* @__PURE__ */ a(n, { className: "h-4 w-4" })
36
+ }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("div", {
36
37
  className: "flex items-center gap-3",
37
- children: [/* @__PURE__ */ g("h1", {
38
+ children: [/* @__PURE__ */ a("h1", {
38
39
  className: "text-2xl font-bold",
39
- children: /* @__PURE__ */ g(p, { children: S.name })
40
- }), /* @__PURE__ */ g(a, {
40
+ children: /* @__PURE__ */ a(h, { children: S.name })
41
+ }), /* @__PURE__ */ a(s, {
41
42
  variant: S.status === "over_budget" ? "destructive" : S.status === "under_budget" ? "secondary" : "default",
42
43
  children: S.status.replace("_", " ")
43
44
  })]
44
- }), /* @__PURE__ */ _("p", {
45
+ }), /* @__PURE__ */ o("p", {
45
46
  className: "text-sm text-text-secondary mt-1",
46
47
  children: [
47
48
  S.department,
@@ -49,66 +50,66 @@ function v() {
49
50
  S.period
50
51
  ]
51
52
  })] })]
52
- }), /* @__PURE__ */ _(o, {
53
+ }), /* @__PURE__ */ o(c, {
53
54
  size: "sm",
54
- children: [/* @__PURE__ */ g(n, { className: "mr-2 h-4 w-4" }), "Edit Budget"]
55
+ children: [/* @__PURE__ */ a(r, { className: "mr-2 h-4 w-4" }), "Edit Budget"]
55
56
  })]
56
57
  }),
57
- /* @__PURE__ */ g(h, { children: "Drill into a single budget to see exactly how it is being consumed: what was allocated, what has been spent, what remains, and every transaction charged against it. Use it to catch overruns early and decide whether to reallocate, cut spend or top up." }),
58
- /* @__PURE__ */ _("div", {
58
+ /* @__PURE__ */ a(_, { children: "Drill into a single budget to see exactly how it is being consumed: what was allocated, what has been spent, what remains, and every transaction charged against it. Use it to catch overruns early and decide whether to reallocate, cut spend or top up." }),
59
+ /* @__PURE__ */ o("div", {
59
60
  className: "grid gap-4 md:grid-cols-3",
60
61
  children: [
61
- /* @__PURE__ */ g(s, { children: /* @__PURE__ */ _(c, {
62
+ /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
62
63
  className: "pt-4",
63
- children: [/* @__PURE__ */ g("p", {
64
+ children: [/* @__PURE__ */ a("p", {
64
65
  className: "text-sm text-text-secondary",
65
66
  children: "Allocated"
66
- }), /* @__PURE__ */ _("p", {
67
+ }), /* @__PURE__ */ o("p", {
67
68
  className: "text-2xl font-bold tabular-nums",
68
69
  children: ["$", S.allocated.toLocaleString()]
69
70
  })]
70
71
  }) }),
71
- /* @__PURE__ */ g(s, { children: /* @__PURE__ */ _(c, {
72
+ /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
72
73
  className: "pt-4",
73
74
  children: [
74
- /* @__PURE__ */ g("p", {
75
+ /* @__PURE__ */ a("p", {
75
76
  className: "text-sm text-text-secondary",
76
77
  children: "Spent"
77
78
  }),
78
- /* @__PURE__ */ _("p", {
79
+ /* @__PURE__ */ o("p", {
79
80
  className: "text-2xl font-bold tabular-nums",
80
81
  children: ["$", S.spent.toLocaleString()]
81
82
  }),
82
- /* @__PURE__ */ _("p", {
83
+ /* @__PURE__ */ o("p", {
83
84
  className: "text-xs text-text-secondary",
84
85
  children: [w, "% utilized"]
85
86
  })
86
87
  ]
87
88
  }) }),
88
- /* @__PURE__ */ g(s, { children: /* @__PURE__ */ _(c, {
89
+ /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
89
90
  className: "pt-4",
90
- children: [/* @__PURE__ */ g("p", {
91
+ children: [/* @__PURE__ */ a("p", {
91
92
  className: "text-sm text-text-secondary",
92
93
  children: "Remaining"
93
- }), /* @__PURE__ */ _("p", {
94
+ }), /* @__PURE__ */ o("p", {
94
95
  className: `text-2xl font-bold ${S.remaining < 0 ? "text-status-error-text" : "text-status-success-text"}`,
95
96
  children: ["$", S.remaining.toLocaleString()]
96
97
  })]
97
98
  }) })
98
99
  ]
99
100
  }),
100
- /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(u, {
101
+ /* @__PURE__ */ o(m, { children: [/* @__PURE__ */ a(f, {
101
102
  className: "px-0 pt-0",
102
- children: /* @__PURE__ */ g(d, { children: "Budget Utilization" })
103
- }), /* @__PURE__ */ _(c, {
103
+ children: /* @__PURE__ */ a(p, { children: "Budget Utilization" })
104
+ }), /* @__PURE__ */ o(u, {
104
105
  className: "px-0 pb-0",
105
- children: [/* @__PURE__ */ g("div", {
106
+ children: [/* @__PURE__ */ a("div", {
106
107
  className: "h-4 rounded-full bg-bg-sunken overflow-hidden",
107
- children: /* @__PURE__ */ g("div", {
108
+ children: /* @__PURE__ */ a("div", {
108
109
  className: `h-full rounded-full transition-all ${S.status === "over_budget" ? "bg-status-error-bg" : "bg-action-primary-bg"}`,
109
110
  style: { width: `${Math.min(w, 100)}%` }
110
111
  })
111
- }), /* @__PURE__ */ _("p", {
112
+ }), /* @__PURE__ */ o("p", {
112
113
  className: "text-sm text-text-secondary mt-2",
113
114
  children: [
114
115
  w,
@@ -118,69 +119,69 @@ function v() {
118
119
  ]
119
120
  })]
120
121
  })] }),
121
- /* @__PURE__ */ _(s, { children: [/* @__PURE__ */ _(u, { children: [/* @__PURE__ */ g(d, { children: "Related Transactions" }), /* @__PURE__ */ _(l, { children: [
122
+ /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o(f, { children: [/* @__PURE__ */ a(p, { children: "Related Transactions" }), /* @__PURE__ */ o(d, { children: [
122
123
  "Transactions in ",
123
124
  S.category,
124
125
  " category"
125
- ] })] }), /* @__PURE__ */ g(c, {
126
+ ] })] }), /* @__PURE__ */ a(u, {
126
127
  className: "p-0",
127
- children: /* @__PURE__ */ _("div", {
128
+ children: /* @__PURE__ */ o("div", {
128
129
  className: "overflow-x-auto",
129
- children: [/* @__PURE__ */ _("table", {
130
+ children: [/* @__PURE__ */ o("table", {
130
131
  className: "w-full text-sm",
131
- children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
132
+ children: [/* @__PURE__ */ a("thead", { children: /* @__PURE__ */ o("tr", {
132
133
  className: "border-b bg-bg-sunken/50",
133
134
  children: [
134
- /* @__PURE__ */ g("th", {
135
+ /* @__PURE__ */ a("th", {
135
136
  className: "text-left p-3 font-medium",
136
137
  children: "ID"
137
138
  }),
138
- /* @__PURE__ */ g("th", {
139
+ /* @__PURE__ */ a("th", {
139
140
  className: "text-left p-3 font-medium",
140
141
  children: "Description"
141
142
  }),
142
- /* @__PURE__ */ g("th", {
143
+ /* @__PURE__ */ a("th", {
143
144
  className: "text-right p-3 font-medium",
144
145
  children: "Amount"
145
146
  }),
146
- /* @__PURE__ */ g("th", {
147
+ /* @__PURE__ */ a("th", {
147
148
  className: "text-left p-3 font-medium",
148
149
  children: "Status"
149
150
  }),
150
- /* @__PURE__ */ g("th", {
151
+ /* @__PURE__ */ a("th", {
151
152
  className: "text-left p-3 font-medium",
152
153
  children: "Date"
153
154
  })
154
155
  ]
155
- }) }), /* @__PURE__ */ g("tbody", { children: C.map((e) => /* @__PURE__ */ _("tr", {
156
+ }) }), /* @__PURE__ */ a("tbody", { children: C.map((e) => /* @__PURE__ */ o("tr", {
156
157
  className: "border-b hover:bg-bg-sunken/50",
157
158
  children: [
158
- /* @__PURE__ */ g("td", {
159
+ /* @__PURE__ */ a("td", {
159
160
  className: "p-3 font-mono text-xs",
160
161
  children: e.id
161
162
  }),
162
- /* @__PURE__ */ g("td", {
163
+ /* @__PURE__ */ a("td", {
163
164
  className: "p-3 truncate max-w-xs",
164
165
  children: e.description
165
166
  }),
166
- /* @__PURE__ */ _("td", {
167
+ /* @__PURE__ */ o("td", {
167
168
  className: "p-3 text-right font-medium",
168
169
  children: ["$", Math.abs(e.amount).toLocaleString()]
169
170
  }),
170
- /* @__PURE__ */ g("td", {
171
+ /* @__PURE__ */ a("td", {
171
172
  className: "p-3",
172
- children: /* @__PURE__ */ g(a, {
173
+ children: /* @__PURE__ */ a(s, {
173
174
  variant: "outline",
174
175
  children: e.status
175
176
  })
176
177
  }),
177
- /* @__PURE__ */ g("td", {
178
+ /* @__PURE__ */ a("td", {
178
179
  className: "p-3 text-xs",
179
180
  children: new Date(e.date).toLocaleDateString()
180
181
  })
181
182
  ]
182
183
  }, e.id)) })]
183
- }), C.length === 0 && /* @__PURE__ */ g(m, {
184
+ }), C.length === 0 && /* @__PURE__ */ a(g, {
184
185
  illustration: "empty-data",
185
186
  title: "No related transactions",
186
187
  description: `No spend has been charged to the ${S.category} category yet.`