@burdenoff/microfe-assethandler 2026.625.1 → 2026.625.2

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 (113) hide show
  1. package/dist/assethandler/pages/AiPredictionsPage.js +42 -41
  2. package/dist/assethandler/pages/AiPredictionsPage.js.map +1 -1
  3. package/dist/assethandler/pages/AnalyticsPage.js +538 -534
  4. package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
  5. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +135 -125
  6. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
  7. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +90 -92
  8. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCreatePage.js +131 -124
  10. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetDetailPage.js +214 -185
  12. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetEditPage.js +168 -156
  14. package/dist/assethandler/pages/AssetsAssetEditPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetListPage.js +207 -187
  16. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  17. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +82 -71
  18. package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
  19. package/dist/assethandler/pages/AuditTrailPage.js +93 -91
  20. package/dist/assethandler/pages/AuditTrailPage.js.map +1 -1
  21. package/dist/assethandler/pages/CmdbBrowserPage.js +32 -33
  22. package/dist/assethandler/pages/CmdbBrowserPage.js.map +1 -1
  23. package/dist/assethandler/pages/DashboardPage.js +157 -126
  24. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  25. package/dist/assethandler/pages/DigitalTwinPage.js +25 -26
  26. package/dist/assethandler/pages/DigitalTwinPage.js.map +1 -1
  27. package/dist/assethandler/pages/DiscoveryJobsPage.js +50 -50
  28. package/dist/assethandler/pages/DiscoveryJobsPage.js.map +1 -1
  29. package/dist/assethandler/pages/EsgDashboardPage.js +43 -42
  30. package/dist/assethandler/pages/EsgDashboardPage.js.map +1 -1
  31. package/dist/assethandler/pages/FinanceBudgetDetailPage.js +96 -82
  32. package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
  33. package/dist/assethandler/pages/FinanceFinanceHubPage.js +137 -103
  34. package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
  35. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +77 -66
  36. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
  37. package/dist/assethandler/pages/IotDevicesPage.js +34 -35
  38. package/dist/assethandler/pages/IotDevicesPage.js.map +1 -1
  39. package/dist/assethandler/pages/ItilChangeDetailPage.js +236 -199
  40. package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
  41. package/dist/assethandler/pages/ItilChangeManagementPage.js +66 -64
  42. package/dist/assethandler/pages/ItilChangeManagementPage.js.map +1 -1
  43. package/dist/assethandler/pages/ItilIncidentDetailPage.js +237 -200
  44. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  45. package/dist/assethandler/pages/ItilIncidentManagementPage.js +99 -97
  46. package/dist/assethandler/pages/ItilIncidentManagementPage.js.map +1 -1
  47. package/dist/assethandler/pages/ItilItilhubPage.js +166 -122
  48. package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
  49. package/dist/assethandler/pages/ItilProblemDetailPage.js +193 -156
  50. package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
  51. package/dist/assethandler/pages/ItilProblemManagementPage.js +63 -61
  52. package/dist/assethandler/pages/ItilProblemManagementPage.js.map +1 -1
  53. package/dist/assethandler/pages/KnowledgeBasePage.js +45 -43
  54. package/dist/assethandler/pages/KnowledgeBasePage.js.map +1 -1
  55. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +70 -68
  56. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
  57. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +77 -62
  58. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
  59. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +162 -151
  60. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +1 -1
  61. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +64 -57
  62. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +1 -1
  63. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +125 -108
  64. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +1 -1
  65. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +67 -61
  66. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +1 -1
  67. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +203 -166
  68. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  69. package/dist/assethandler/pages/OperationsOperationsHubPage.js +125 -95
  70. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  71. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +165 -151
  72. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  73. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +83 -81
  74. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
  75. package/dist/assethandler/pages/ProvenancePage.js +56 -53
  76. package/dist/assethandler/pages/ProvenancePage.js.map +1 -1
  77. package/dist/assethandler/pages/ReportsReportBuilderPage.js +80 -73
  78. package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +1 -1
  79. package/dist/assethandler/pages/ReportsReportsDashboardPage.js +112 -77
  80. package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +1 -1
  81. package/dist/assethandler/pages/ReportsReportsListPage.js +119 -103
  82. package/dist/assethandler/pages/ReportsReportsListPage.js.map +1 -1
  83. package/dist/assethandler/pages/SamLicensesPage.js +32 -33
  84. package/dist/assethandler/pages/SamLicensesPage.js.map +1 -1
  85. package/dist/assethandler/pages/SecurityComplianceDetailPage.js +60 -52
  86. package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
  87. package/dist/assethandler/pages/SecurityPolicyDetailPage.js +134 -117
  88. package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
  89. package/dist/assethandler/pages/SecurityScheduleBackupPage.js +63 -57
  90. package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +1 -1
  91. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +131 -117
  92. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
  93. package/dist/assethandler/pages/SecuritySecurityHubPage.js +147 -113
  94. package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
  95. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +235 -218
  96. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  97. package/dist/assethandler/pages/TransactionsTransactionListPage.js +118 -116
  98. package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
  99. package/dist/assethandler/pages/UsersPage.js +108 -99
  100. package/dist/assethandler/pages/UsersPage.js.map +1 -1
  101. package/dist/assethandler/pages/UsersUserCreatePage.js +74 -67
  102. package/dist/assethandler/pages/UsersUserCreatePage.js.map +1 -1
  103. package/dist/assethandler/pages/UsersUserManagementHubPage.js +128 -93
  104. package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +1 -1
  105. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +211 -193
  106. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +1 -1
  107. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +88 -86
  108. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +1 -1
  109. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +68 -60
  110. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +1 -1
  111. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +71 -68
  112. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +1 -1
  113. package/package.json +2 -2
@@ -1,597 +1,601 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { useState as t } from "react";
3
3
  import { Activity as n, ArrowUpRight as r, BarChart3 as i, Box as a, DollarSign as o, Download as s, PieChart as c, TrendingDown as l } from "lucide-react";
4
- import { Badge as u, CTAOverflowMenu as d, Card as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as g, EmphasisPanel as _, GlassCard as v, GradientText as y, Separator as b, Tabs as x, TabsContent as S, TabsList as C, TabsTrigger as w } from "@burdenoff/fe-libs/ui";
5
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
4
+ import { Badge as u, CTAOverflowMenu as d, Card as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as g, EmphasisPanel as _, GlassCard as v, GradientText as y, PagePurpose as b, Separator as x, Tabs as S, TabsContent as C, TabsList as w, TabsTrigger as T } from "@burdenoff/fe-libs/ui";
5
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
6
6
  //#region src/assethandler/pages/AnalyticsPage.tsx
7
- function D() {
8
- let { assets: D, portfolio: O, transactions: k, incidents: A, maintenanceRecords: j, workflows: M } = e(), [N, P] = t("30d"), F = D.reduce((e, t) => e + t.currentValue, 0), I = D.reduce((e, t) => e + t.value, 0), L = I - F, R = I > 0 ? (L / I * 100).toFixed(1) : "0", z = D.length > 0 ? Math.round(F / D.length) : 0, B = D.reduce((e, t) => {
7
+ function O() {
8
+ let { assets: O, portfolio: k, transactions: A, incidents: j, maintenanceRecords: M, workflows: N } = e(), [P, F] = t("30d"), I = O.reduce((e, t) => e + t.currentValue, 0), L = O.reduce((e, t) => e + t.value, 0), R = L - I, z = L > 0 ? (R / L * 100).toFixed(1) : "0", B = O.length > 0 ? Math.round(I / O.length) : 0, V = O.reduce((e, t) => {
9
9
  let n = t.category.replace("_", " ");
10
10
  return e[n] || (e[n] = {
11
11
  count: 0,
12
12
  value: 0
13
13
  }), e[n].count++, e[n].value += t.currentValue, e;
14
- }, {}), V = D.reduce((e, t) => (e[t.status] = (e[t.status] || 0) + 1, e), {}), H = D.reduce((e, t) => (e[t.department] || (e[t.department] = {
14
+ }, {}), H = O.reduce((e, t) => (e[t.status] = (e[t.status] || 0) + 1, e), {}), U = O.reduce((e, t) => (e[t.department] || (e[t.department] = {
15
15
  count: 0,
16
16
  value: 0
17
- }), e[t.department].count++, e[t.department].value += t.currentValue, e), {}), U = A.filter((e) => e.status === "resolved" || e.status === "closed"), W = A.filter((e) => e.slaBreached), G = j.filter((e) => e.status === "completed"), K = j.reduce((e, t) => e + t.cost, 0);
18
- return /* @__PURE__ */ E("div", {
17
+ }), e[t.department].count++, e[t.department].value += t.currentValue, e), {}), W = j.filter((e) => e.status === "resolved" || e.status === "closed"), G = j.filter((e) => e.slaBreached), K = M.filter((e) => e.status === "completed"), q = M.reduce((e, t) => e + t.cost, 0);
18
+ return /* @__PURE__ */ D("div", {
19
19
  className: "space-y-6 p-6",
20
- children: [/* @__PURE__ */ E("div", {
21
- className: "flex items-center justify-between",
22
- children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h1", {
23
- className: "text-3xl font-bold",
24
- children: /* @__PURE__ */ T(y, { children: "Analytics & Business Intelligence" })
25
- }), /* @__PURE__ */ T("p", {
26
- className: "text-sm text-text-secondary mt-1",
27
- children: "Comprehensive asset management analytics and insights"
28
- })] }), /* @__PURE__ */ E("div", {
29
- className: "flex gap-2",
30
- children: [/* @__PURE__ */ E("select", {
31
- value: N,
32
- onChange: (e) => P(e.target.value),
33
- className: "rounded-md border border-border-default bg-bg-surface px-3 py-1.5 text-sm",
34
- children: [
35
- /* @__PURE__ */ T("option", {
36
- value: "7d",
37
- children: "Last 7 days"
20
+ children: [
21
+ /* @__PURE__ */ D("div", {
22
+ className: "flex items-center justify-between",
23
+ children: [/* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("h1", {
24
+ className: "text-3xl font-bold",
25
+ children: /* @__PURE__ */ E(y, { children: "Analytics & Business Intelligence" })
26
+ }), /* @__PURE__ */ E("p", {
27
+ className: "text-sm text-text-secondary mt-1",
28
+ children: "Comprehensive asset management analytics and insights"
29
+ })] }), /* @__PURE__ */ D("div", {
30
+ className: "flex gap-2",
31
+ children: [/* @__PURE__ */ D("select", {
32
+ value: P,
33
+ onChange: (e) => F(e.target.value),
34
+ className: "rounded-md border border-border-default bg-bg-surface px-3 py-1.5 text-sm",
35
+ children: [
36
+ /* @__PURE__ */ E("option", {
37
+ value: "7d",
38
+ children: "Last 7 days"
39
+ }),
40
+ /* @__PURE__ */ E("option", {
41
+ value: "30d",
42
+ children: "Last 30 days"
43
+ }),
44
+ /* @__PURE__ */ E("option", {
45
+ value: "90d",
46
+ children: "Last 90 days"
47
+ }),
48
+ /* @__PURE__ */ E("option", {
49
+ value: "1y",
50
+ children: "Last year"
51
+ })
52
+ ]
53
+ }), /* @__PURE__ */ E(d, {
54
+ primary: {
55
+ label: "Generate Report",
56
+ onSelect: () => {}
57
+ },
58
+ actions: [{
59
+ label: "Export",
60
+ onSelect: () => {},
61
+ icon: /* @__PURE__ */ E(s, { className: "h-4 w-4" })
62
+ }]
63
+ })]
64
+ })]
65
+ }),
66
+ /* @__PURE__ */ E(b, { children: "Turn raw asset data into decisions. See where value is concentrated, how it is depreciating, which categories cost the most to run, and how operations are trending — so you can plan budgets, justify replacements and spot risk before it shows up as downtime." }),
67
+ /* @__PURE__ */ D(S, {
68
+ defaultValue: "overview",
69
+ children: [
70
+ /* @__PURE__ */ D(w, { children: [
71
+ /* @__PURE__ */ E(T, {
72
+ value: "overview",
73
+ children: "Overview"
38
74
  }),
39
- /* @__PURE__ */ T("option", {
40
- value: "30d",
41
- children: "Last 30 days"
75
+ /* @__PURE__ */ E(T, {
76
+ value: "financial",
77
+ children: "Financial"
42
78
  }),
43
- /* @__PURE__ */ T("option", {
44
- value: "90d",
45
- children: "Last 90 days"
79
+ /* @__PURE__ */ E(T, {
80
+ value: "operational",
81
+ children: "Operational"
46
82
  }),
47
- /* @__PURE__ */ T("option", {
48
- value: "1y",
49
- children: "Last year"
83
+ /* @__PURE__ */ E(T, {
84
+ value: "insights",
85
+ children: "Insights"
50
86
  })
51
- ]
52
- }), /* @__PURE__ */ T(d, {
53
- primary: {
54
- label: "Generate Report",
55
- onSelect: () => {}
56
- },
57
- actions: [{
58
- label: "Export",
59
- onSelect: () => {},
60
- icon: /* @__PURE__ */ T(s, { className: "h-4 w-4" })
61
- }]
62
- })]
63
- })]
64
- }), /* @__PURE__ */ E(x, {
65
- defaultValue: "overview",
66
- children: [
67
- /* @__PURE__ */ E(C, { children: [
68
- /* @__PURE__ */ T(w, {
87
+ ] }),
88
+ /* @__PURE__ */ D(C, {
69
89
  value: "overview",
70
- children: "Overview"
90
+ className: "space-y-6 mt-6",
91
+ children: [
92
+ /* @__PURE__ */ D("div", {
93
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
94
+ children: [
95
+ /* @__PURE__ */ D(v, {
96
+ treatment: "metric",
97
+ className: "border-border-seam",
98
+ children: [/* @__PURE__ */ D(h, {
99
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
100
+ children: [/* @__PURE__ */ E(g, {
101
+ className: "text-sm font-medium",
102
+ children: "Total Portfolio Value"
103
+ }), /* @__PURE__ */ E(o, { className: "h-4 w-4 text-text-secondary" })]
104
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ D("div", {
105
+ className: "text-2xl font-bold tabular-nums",
106
+ children: ["$", k.totalValue.toLocaleString()]
107
+ }), /* @__PURE__ */ D("p", {
108
+ className: "text-xs text-text-secondary flex items-center mt-1",
109
+ children: [
110
+ /* @__PURE__ */ E(r, { className: "mr-1 h-3 w-3 text-status-success-text" }),
111
+ /* @__PURE__ */ E("span", {
112
+ className: "text-status-success-text",
113
+ children: "+5.6%"
114
+ }),
115
+ " from last quarter"
116
+ ]
117
+ })] })]
118
+ }),
119
+ /* @__PURE__ */ D(v, {
120
+ treatment: "metric",
121
+ className: "border-border-seam",
122
+ children: [/* @__PURE__ */ D(h, {
123
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
124
+ children: [/* @__PURE__ */ E(g, {
125
+ className: "text-sm font-medium",
126
+ children: "Total Depreciation"
127
+ }), /* @__PURE__ */ E(l, { className: "h-4 w-4 text-text-secondary" })]
128
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ D("div", {
129
+ className: "text-2xl font-bold text-status-error-text",
130
+ children: ["-$", R.toLocaleString()]
131
+ }), /* @__PURE__ */ D("p", {
132
+ className: "text-xs text-text-secondary",
133
+ children: [z, "% of original value"]
134
+ })] })]
135
+ }),
136
+ /* @__PURE__ */ D(v, {
137
+ treatment: "metric",
138
+ className: "border-border-seam",
139
+ children: [/* @__PURE__ */ D(h, {
140
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
141
+ children: [/* @__PURE__ */ E(g, {
142
+ className: "text-sm font-medium",
143
+ children: "Total Assets"
144
+ }), /* @__PURE__ */ E(a, { className: "h-4 w-4 text-text-secondary" })]
145
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
146
+ className: "text-2xl font-bold tabular-nums",
147
+ children: k.totalAssets
148
+ }), /* @__PURE__ */ D("p", {
149
+ className: "text-xs text-text-secondary",
150
+ children: [O.filter((e) => e.status === "active").length, " currently active"]
151
+ })] })]
152
+ }),
153
+ /* @__PURE__ */ D(v, {
154
+ treatment: "metric",
155
+ className: "border-border-seam",
156
+ children: [/* @__PURE__ */ D(h, {
157
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
158
+ children: [/* @__PURE__ */ E(g, {
159
+ className: "text-sm font-medium",
160
+ children: "Avg. Asset Value"
161
+ }), /* @__PURE__ */ E(i, { className: "h-4 w-4 text-text-secondary" })]
162
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ D("div", {
163
+ className: "text-2xl font-bold tabular-nums",
164
+ children: ["$", B.toLocaleString()]
165
+ }), /* @__PURE__ */ E("p", {
166
+ className: "text-xs text-text-secondary",
167
+ children: "Across all categories"
168
+ })] })]
169
+ })
170
+ ]
171
+ }),
172
+ /* @__PURE__ */ D("div", {
173
+ className: "grid gap-6 lg:grid-cols-2",
174
+ children: [/* @__PURE__ */ D(f, { children: [/* @__PURE__ */ D(h, { children: [/* @__PURE__ */ D(g, {
175
+ className: "flex items-center gap-2",
176
+ children: [/* @__PURE__ */ E(c, { className: "h-4 w-4" }), "Category Distribution"]
177
+ }), /* @__PURE__ */ E(m, { children: "Assets by category with values" })] }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ E("div", {
178
+ className: "space-y-3",
179
+ children: Object.entries(V).sort((e, t) => t[1].value - e[1].value).map(([e, t]) => {
180
+ let n = Math.round(t.count / O.length * 100);
181
+ return /* @__PURE__ */ D("div", {
182
+ className: "space-y-1",
183
+ children: [/* @__PURE__ */ D("div", {
184
+ className: "flex items-center justify-between text-sm",
185
+ children: [/* @__PURE__ */ E("span", {
186
+ className: "font-medium capitalize",
187
+ children: e
188
+ }), /* @__PURE__ */ D("span", {
189
+ className: "text-text-secondary",
190
+ children: [
191
+ t.count,
192
+ " · $",
193
+ (t.value / 1e3).toFixed(1),
194
+ "K"
195
+ ]
196
+ })]
197
+ }), /* @__PURE__ */ E("div", {
198
+ className: "h-2 rounded-full bg-bg-sunken overflow-hidden",
199
+ children: /* @__PURE__ */ E("div", {
200
+ className: "h-full rounded-full bg-action-primary-bg",
201
+ style: { width: `${n}%` }
202
+ })
203
+ })]
204
+ }, e);
205
+ })
206
+ }) })] }), /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ D(h, { children: [/* @__PURE__ */ D(g, {
207
+ className: "flex items-center gap-2",
208
+ children: [/* @__PURE__ */ E(n, { className: "h-4 w-4" }), "Status Breakdown"]
209
+ }), /* @__PURE__ */ E(m, { children: "Current asset status distribution" })] }), /* @__PURE__ */ D(p, { children: [
210
+ /* @__PURE__ */ E("div", {
211
+ className: "space-y-3",
212
+ children: Object.entries(H).map(([e, t]) => {
213
+ let n = Math.round(t / O.length * 100);
214
+ return /* @__PURE__ */ D("div", {
215
+ className: "flex items-center justify-between",
216
+ children: [/* @__PURE__ */ E("div", {
217
+ className: "flex items-center gap-2",
218
+ children: /* @__PURE__ */ E(u, {
219
+ variant: e === "active" ? "default" : e === "under_maintenance" ? "secondary" : "outline",
220
+ children: e.replace("_", " ")
221
+ })
222
+ }), /* @__PURE__ */ D("div", {
223
+ className: "flex items-center gap-3",
224
+ children: [/* @__PURE__ */ E("div", {
225
+ className: "h-2 w-24 rounded-full bg-bg-sunken overflow-hidden",
226
+ children: /* @__PURE__ */ E("div", {
227
+ className: "h-full rounded-full bg-action-primary-bg",
228
+ style: { width: `${n}%` }
229
+ })
230
+ }), /* @__PURE__ */ E("span", {
231
+ className: "text-sm font-medium w-8 text-right",
232
+ children: t
233
+ })]
234
+ })]
235
+ }, e);
236
+ })
237
+ }),
238
+ /* @__PURE__ */ E(x, { className: "my-4" }),
239
+ /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("h4", {
240
+ className: "text-sm font-medium mb-3",
241
+ children: "By Department"
242
+ }), /* @__PURE__ */ E("div", {
243
+ className: "space-y-2",
244
+ children: Object.entries(U).sort((e, t) => t[1].count - e[1].count).slice(0, 5).map(([e, t]) => /* @__PURE__ */ D("div", {
245
+ className: "flex items-center justify-between text-sm",
246
+ children: [/* @__PURE__ */ E("span", { children: e }), /* @__PURE__ */ D("span", {
247
+ className: "text-text-secondary",
248
+ children: [t.count, " assets"]
249
+ })]
250
+ }, e))
251
+ })] })
252
+ ] })] })]
253
+ }),
254
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ D(h, { children: [/* @__PURE__ */ E(g, { children: "Depreciation Trend" }), /* @__PURE__ */ E(m, { children: "Portfolio depreciation over the last 6 months" })] }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ E("div", {
255
+ className: "flex items-end gap-2 h-40",
256
+ children: k.depreciationTrend.map((e) => {
257
+ let t = Math.max(...k.depreciationTrend.map((e) => e.value)), n = t > 0 ? e.value / t * 100 : 0;
258
+ return /* @__PURE__ */ D("div", {
259
+ className: "flex-1 flex flex-col items-center gap-1",
260
+ children: [
261
+ /* @__PURE__ */ D("span", {
262
+ className: "text-[10px] text-text-secondary",
263
+ children: [
264
+ "$",
265
+ (e.value / 1e6).toFixed(2),
266
+ "M"
267
+ ]
268
+ }),
269
+ /* @__PURE__ */ E("div", {
270
+ className: "w-full bg-action-primary-bg/80 rounded-t",
271
+ style: { height: `${n}%` }
272
+ }),
273
+ /* @__PURE__ */ E("span", {
274
+ className: "text-[10px] text-text-secondary",
275
+ children: e.month.replace(" 20", "'")
276
+ })
277
+ ]
278
+ }, e.month);
279
+ })
280
+ }) })] })
281
+ ]
71
282
  }),
72
- /* @__PURE__ */ T(w, {
283
+ /* @__PURE__ */ D(C, {
73
284
  value: "financial",
74
- children: "Financial"
75
- }),
76
- /* @__PURE__ */ T(w, {
77
- value: "operational",
78
- children: "Operational"
79
- }),
80
- /* @__PURE__ */ T(w, {
81
- value: "insights",
82
- children: "Insights"
83
- })
84
- ] }),
85
- /* @__PURE__ */ E(S, {
86
- value: "overview",
87
- className: "space-y-6 mt-6",
88
- children: [
89
- /* @__PURE__ */ E("div", {
90
- className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
91
- children: [
92
- /* @__PURE__ */ E(v, {
93
- treatment: "metric",
94
- className: "border-border-seam",
95
- children: [/* @__PURE__ */ E(h, {
96
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
97
- children: [/* @__PURE__ */ T(g, {
285
+ className: "space-y-6 mt-6",
286
+ children: [
287
+ /* @__PURE__ */ D("div", {
288
+ className: "grid gap-4 md:grid-cols-3",
289
+ children: [
290
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
291
+ className: "pb-2",
292
+ children: /* @__PURE__ */ E(g, {
98
293
  className: "text-sm font-medium",
99
- children: "Total Portfolio Value"
100
- }), /* @__PURE__ */ T(o, { className: "h-4 w-4 text-text-secondary" })]
101
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ E("div", {
294
+ children: "Total Transactions"
295
+ })
296
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
102
297
  className: "text-2xl font-bold tabular-nums",
103
- children: ["$", O.totalValue.toLocaleString()]
104
- }), /* @__PURE__ */ E("p", {
105
- className: "text-xs text-text-secondary flex items-center mt-1",
298
+ children: A.length
299
+ }), /* @__PURE__ */ D("p", {
300
+ className: "text-xs text-text-secondary",
106
301
  children: [
107
- /* @__PURE__ */ T(r, { className: "mr-1 h-3 w-3 text-status-success-text" }),
108
- /* @__PURE__ */ T("span", {
109
- className: "text-status-success-text",
110
- children: "+5.6%"
111
- }),
112
- " from last quarter"
302
+ "$",
303
+ A.reduce((e, t) => e + Math.abs(t.amount), 0).toLocaleString(),
304
+ " total value"
113
305
  ]
114
- })] })]
115
- }),
116
- /* @__PURE__ */ E(v, {
117
- treatment: "metric",
118
- className: "border-border-seam",
119
- children: [/* @__PURE__ */ E(h, {
120
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
121
- children: [/* @__PURE__ */ T(g, {
122
- className: "text-sm font-medium",
123
- children: "Total Depreciation"
124
- }), /* @__PURE__ */ T(l, { className: "h-4 w-4 text-text-secondary" })]
125
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ E("div", {
126
- className: "text-2xl font-bold text-status-error-text",
127
- children: ["-$", L.toLocaleString()]
128
- }), /* @__PURE__ */ E("p", {
129
- className: "text-xs text-text-secondary",
130
- children: [R, "% of original value"]
131
- })] })]
132
- }),
133
- /* @__PURE__ */ E(v, {
134
- treatment: "metric",
135
- className: "border-border-seam",
136
- children: [/* @__PURE__ */ E(h, {
137
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
138
- children: [/* @__PURE__ */ T(g, {
306
+ })] })] }),
307
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
308
+ className: "pb-2",
309
+ children: /* @__PURE__ */ E(g, {
139
310
  className: "text-sm font-medium",
140
- children: "Total Assets"
141
- }), /* @__PURE__ */ T(a, { className: "h-4 w-4 text-text-secondary" })]
142
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
311
+ children: "Maintenance Cost"
312
+ })
313
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ D("div", {
143
314
  className: "text-2xl font-bold tabular-nums",
144
- children: O.totalAssets
145
- }), /* @__PURE__ */ E("p", {
315
+ children: ["$", q.toLocaleString()]
316
+ }), /* @__PURE__ */ D("p", {
146
317
  className: "text-xs text-text-secondary",
147
- children: [D.filter((e) => e.status === "active").length, " currently active"]
148
- })] })]
149
- }),
150
- /* @__PURE__ */ E(v, {
151
- treatment: "metric",
152
- className: "border-border-seam",
153
- children: [/* @__PURE__ */ E(h, {
154
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
155
- children: [/* @__PURE__ */ T(g, {
318
+ children: [M.length, " maintenance records"]
319
+ })] })] }),
320
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
321
+ className: "pb-2",
322
+ children: /* @__PURE__ */ E(g, {
156
323
  className: "text-sm font-medium",
157
- children: "Avg. Asset Value"
158
- }), /* @__PURE__ */ T(i, { className: "h-4 w-4 text-text-secondary" })]
159
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ E("div", {
324
+ children: "Acquisitions (6mo)"
325
+ })
326
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
160
327
  className: "text-2xl font-bold tabular-nums",
161
- children: ["$", z.toLocaleString()]
162
- }), /* @__PURE__ */ T("p", {
328
+ children: k.acquisitionTrend.reduce((e, t) => e + t.count, 0)
329
+ }), /* @__PURE__ */ D("p", {
163
330
  className: "text-xs text-text-secondary",
164
- children: "Across all categories"
165
- })] })]
166
- })
167
- ]
168
- }),
169
- /* @__PURE__ */ E("div", {
170
- className: "grid gap-6 lg:grid-cols-2",
171
- children: [/* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(h, { children: [/* @__PURE__ */ E(g, {
172
- className: "flex items-center gap-2",
173
- children: [/* @__PURE__ */ T(c, { className: "h-4 w-4" }), "Category Distribution"]
174
- }), /* @__PURE__ */ T(m, { children: "Assets by category with values" })] }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ T("div", {
175
- className: "space-y-3",
176
- children: Object.entries(B).sort((e, t) => t[1].value - e[1].value).map(([e, t]) => {
177
- let n = Math.round(t.count / D.length * 100);
178
- return /* @__PURE__ */ E("div", {
179
- className: "space-y-1",
180
- children: [/* @__PURE__ */ E("div", {
181
- className: "flex items-center justify-between text-sm",
182
- children: [/* @__PURE__ */ T("span", {
183
- className: "font-medium capitalize",
184
- children: e
185
- }), /* @__PURE__ */ E("span", {
186
- className: "text-text-secondary",
187
- children: [
188
- t.count,
189
- " · $",
190
- (t.value / 1e3).toFixed(1),
191
- "K"
192
- ]
193
- })]
194
- }), /* @__PURE__ */ T("div", {
195
- className: "h-2 rounded-full bg-bg-sunken overflow-hidden",
196
- children: /* @__PURE__ */ T("div", {
197
- className: "h-full rounded-full bg-action-primary-bg",
198
- style: { width: `${n}%` }
331
+ children: [
332
+ "$",
333
+ (k.acquisitionTrend.reduce((e, t) => e + t.value, 0) / 1e3).toFixed(0),
334
+ "K total spend"
335
+ ]
336
+ })] })] })
337
+ ]
338
+ }),
339
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ D(h, { children: [/* @__PURE__ */ E(g, { children: "Acquisition Trend" }), /* @__PURE__ */ E(m, { children: "New assets acquired over the last 6 months" })] }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ E("div", {
340
+ className: "flex items-end gap-2 h-40",
341
+ children: k.acquisitionTrend.map((e) => {
342
+ let t = Math.max(...k.acquisitionTrend.map((e) => e.count)), n = t > 0 ? e.count / t * 100 : 0;
343
+ return /* @__PURE__ */ D("div", {
344
+ className: "flex-1 flex flex-col items-center gap-1",
345
+ children: [
346
+ /* @__PURE__ */ D("span", {
347
+ className: "text-[10px] text-text-secondary",
348
+ children: [e.count, " units"]
349
+ }),
350
+ /* @__PURE__ */ E("div", {
351
+ className: "w-full bg-status-success-bg rounded-t",
352
+ style: { height: `${n}%` }
353
+ }),
354
+ /* @__PURE__ */ E("span", {
355
+ className: "text-[10px] text-text-secondary",
356
+ children: e.month.replace(" 20", "'")
199
357
  })
200
- })]
201
- }, e);
358
+ ]
359
+ }, e.month);
202
360
  })
203
- }) })] }), /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(h, { children: [/* @__PURE__ */ E(g, {
204
- className: "flex items-center gap-2",
205
- children: [/* @__PURE__ */ T(n, { className: "h-4 w-4" }), "Status Breakdown"]
206
- }), /* @__PURE__ */ T(m, { children: "Current asset status distribution" })] }), /* @__PURE__ */ E(p, { children: [
207
- /* @__PURE__ */ T("div", {
208
- className: "space-y-3",
209
- children: Object.entries(V).map(([e, t]) => {
210
- let n = Math.round(t / D.length * 100);
211
- return /* @__PURE__ */ E("div", {
212
- className: "flex items-center justify-between",
213
- children: [/* @__PURE__ */ T("div", {
214
- className: "flex items-center gap-2",
215
- children: /* @__PURE__ */ T(u, {
216
- variant: e === "active" ? "default" : e === "under_maintenance" ? "secondary" : "outline",
217
- children: e.replace("_", " ")
361
+ }) })] }),
362
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, { children: /* @__PURE__ */ E(g, { children: "Recent Transactions" }) }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ E("div", {
363
+ className: "overflow-x-auto",
364
+ children: /* @__PURE__ */ D("table", {
365
+ className: "w-full text-sm",
366
+ children: [/* @__PURE__ */ E("thead", { children: /* @__PURE__ */ D("tr", {
367
+ className: "border-b",
368
+ children: [
369
+ /* @__PURE__ */ E("th", {
370
+ className: "text-left py-2 font-medium",
371
+ children: "ID"
372
+ }),
373
+ /* @__PURE__ */ E("th", {
374
+ className: "text-left py-2 font-medium",
375
+ children: "Type"
376
+ }),
377
+ /* @__PURE__ */ E("th", {
378
+ className: "text-left py-2 font-medium",
379
+ children: "Description"
380
+ }),
381
+ /* @__PURE__ */ E("th", {
382
+ className: "text-right py-2 font-medium",
383
+ children: "Amount"
384
+ }),
385
+ /* @__PURE__ */ E("th", {
386
+ className: "text-left py-2 font-medium",
387
+ children: "Status"
388
+ })
389
+ ]
390
+ }) }), /* @__PURE__ */ E("tbody", { children: A.slice(0, 5).map((e) => /* @__PURE__ */ D("tr", {
391
+ className: "border-b hover:bg-bg-sunken/50",
392
+ children: [
393
+ /* @__PURE__ */ E("td", {
394
+ className: "py-2 font-mono text-xs",
395
+ children: e.id
396
+ }),
397
+ /* @__PURE__ */ E("td", {
398
+ className: "py-2 capitalize",
399
+ children: e.type
400
+ }),
401
+ /* @__PURE__ */ E("td", {
402
+ className: "py-2 truncate max-w-xs",
403
+ children: e.description
404
+ }),
405
+ /* @__PURE__ */ D("td", {
406
+ className: `py-2 text-right font-medium ${e.amount < 0 ? "text-status-error-text" : ""}`,
407
+ children: ["$", Math.abs(e.amount).toLocaleString()]
408
+ }),
409
+ /* @__PURE__ */ E("td", {
410
+ className: "py-2",
411
+ children: /* @__PURE__ */ E(u, {
412
+ variant: "outline",
413
+ children: e.status
218
414
  })
219
- }), /* @__PURE__ */ E("div", {
220
- className: "flex items-center gap-3",
221
- children: [/* @__PURE__ */ T("div", {
222
- className: "h-2 w-24 rounded-full bg-bg-sunken overflow-hidden",
223
- children: /* @__PURE__ */ T("div", {
224
- className: "h-full rounded-full bg-action-primary-bg",
225
- style: { width: `${n}%` }
226
- })
227
- }), /* @__PURE__ */ T("span", {
228
- className: "text-sm font-medium w-8 text-right",
229
- children: t
230
- })]
231
- })]
232
- }, e);
233
- })
234
- }),
235
- /* @__PURE__ */ T(b, { className: "my-4" }),
236
- /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h4", {
237
- className: "text-sm font-medium mb-3",
238
- children: "By Department"
239
- }), /* @__PURE__ */ T("div", {
240
- className: "space-y-2",
241
- children: Object.entries(H).sort((e, t) => t[1].count - e[1].count).slice(0, 5).map(([e, t]) => /* @__PURE__ */ E("div", {
242
- className: "flex items-center justify-between text-sm",
243
- children: [/* @__PURE__ */ T("span", { children: e }), /* @__PURE__ */ E("span", {
244
- className: "text-text-secondary",
245
- children: [t.count, " assets"]
246
- })]
247
- }, e))
248
- })] })
249
- ] })] })]
250
- }),
251
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(h, { children: [/* @__PURE__ */ T(g, { children: "Depreciation Trend" }), /* @__PURE__ */ T(m, { children: "Portfolio depreciation over the last 6 months" })] }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ T("div", {
252
- className: "flex items-end gap-2 h-40",
253
- children: O.depreciationTrend.map((e) => {
254
- let t = Math.max(...O.depreciationTrend.map((e) => e.value)), n = t > 0 ? e.value / t * 100 : 0;
255
- return /* @__PURE__ */ E("div", {
256
- className: "flex-1 flex flex-col items-center gap-1",
257
- children: [
258
- /* @__PURE__ */ E("span", {
259
- className: "text-[10px] text-text-secondary",
260
- children: [
261
- "$",
262
- (e.value / 1e6).toFixed(2),
263
- "M"
264
- ]
265
- }),
266
- /* @__PURE__ */ T("div", {
267
- className: "w-full bg-action-primary-bg/80 rounded-t",
268
- style: { height: `${n}%` }
269
- }),
270
- /* @__PURE__ */ T("span", {
271
- className: "text-[10px] text-text-secondary",
272
- children: e.month.replace(" 20", "'")
273
- })
274
- ]
275
- }, e.month);
276
- })
277
- }) })] })
278
- ]
279
- }),
280
- /* @__PURE__ */ E(S, {
281
- value: "financial",
282
- className: "space-y-6 mt-6",
283
- children: [
284
- /* @__PURE__ */ E("div", {
285
- className: "grid gap-4 md:grid-cols-3",
415
+ })
416
+ ]
417
+ }, e.id)) })]
418
+ })
419
+ }) })] })
420
+ ]
421
+ }),
422
+ /* @__PURE__ */ E(C, {
423
+ value: "operational",
424
+ className: "space-y-6 mt-6",
425
+ children: /* @__PURE__ */ D("div", {
426
+ className: "grid gap-4 md:grid-cols-4",
286
427
  children: [
287
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
428
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
288
429
  className: "pb-2",
289
- children: /* @__PURE__ */ T(g, {
430
+ children: /* @__PURE__ */ E(g, {
290
431
  className: "text-sm font-medium",
291
- children: "Total Transactions"
432
+ children: "Incidents"
292
433
  })
293
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
434
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
294
435
  className: "text-2xl font-bold tabular-nums",
295
- children: k.length
296
- }), /* @__PURE__ */ E("p", {
436
+ children: j.length
437
+ }), /* @__PURE__ */ D("p", {
297
438
  className: "text-xs text-text-secondary",
298
- children: [
299
- "$",
300
- k.reduce((e, t) => e + Math.abs(t.amount), 0).toLocaleString(),
301
- " total value"
302
- ]
439
+ children: [W.length, " resolved"]
303
440
  })] })] }),
304
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
441
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
305
442
  className: "pb-2",
306
- children: /* @__PURE__ */ T(g, {
443
+ children: /* @__PURE__ */ E(g, {
307
444
  className: "text-sm font-medium",
308
- children: "Maintenance Cost"
445
+ children: "SLA Breaches"
309
446
  })
310
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ E("div", {
311
- className: "text-2xl font-bold tabular-nums",
312
- children: ["$", K.toLocaleString()]
313
- }), /* @__PURE__ */ E("p", {
447
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
448
+ className: "text-2xl font-bold text-status-error-text",
449
+ children: G.length
450
+ }), /* @__PURE__ */ D("p", {
314
451
  className: "text-xs text-text-secondary",
315
- children: [j.length, " maintenance records"]
452
+ children: [((1 - G.length / Math.max(j.length, 1)) * 100).toFixed(1), "% compliance"]
316
453
  })] })] }),
317
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
454
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
318
455
  className: "pb-2",
319
- children: /* @__PURE__ */ T(g, {
456
+ children: /* @__PURE__ */ E(g, {
320
457
  className: "text-sm font-medium",
321
- children: "Acquisitions (6mo)"
458
+ children: "Maintenance Done"
322
459
  })
323
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
460
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ E("div", {
324
461
  className: "text-2xl font-bold tabular-nums",
325
- children: O.acquisitionTrend.reduce((e, t) => e + t.count, 0)
326
- }), /* @__PURE__ */ E("p", {
462
+ children: K.length
463
+ }), /* @__PURE__ */ D("p", {
327
464
  className: "text-xs text-text-secondary",
328
465
  children: [
329
- "$",
330
- (O.acquisitionTrend.reduce((e, t) => e + t.value, 0) / 1e3).toFixed(0),
331
- "K total spend"
466
+ "of ",
467
+ M.length,
468
+ " total"
332
469
  ]
470
+ })] })] }),
471
+ /* @__PURE__ */ D(f, { children: [/* @__PURE__ */ E(h, {
472
+ className: "pb-2",
473
+ children: /* @__PURE__ */ E(g, {
474
+ className: "text-sm font-medium",
475
+ children: "Workflow Success"
476
+ })
477
+ }), /* @__PURE__ */ D(p, { children: [/* @__PURE__ */ D("div", {
478
+ className: "text-2xl font-bold tabular-nums",
479
+ children: [(N.reduce((e, t) => e + t.successRate, 0) / Math.max(N.length, 1)).toFixed(1), "%"]
480
+ }), /* @__PURE__ */ D("p", {
481
+ className: "text-xs text-text-secondary",
482
+ children: [N.length, " active workflows"]
333
483
  })] })] })
334
484
  ]
335
- }),
336
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(h, { children: [/* @__PURE__ */ T(g, { children: "Acquisition Trend" }), /* @__PURE__ */ T(m, { children: "New assets acquired over the last 6 months" })] }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ T("div", {
337
- className: "flex items-end gap-2 h-40",
338
- children: O.acquisitionTrend.map((e) => {
339
- let t = Math.max(...O.acquisitionTrend.map((e) => e.count)), n = t > 0 ? e.count / t * 100 : 0;
340
- return /* @__PURE__ */ E("div", {
341
- className: "flex-1 flex flex-col items-center gap-1",
342
- children: [
343
- /* @__PURE__ */ E("span", {
344
- className: "text-[10px] text-text-secondary",
345
- children: [e.count, " units"]
346
- }),
347
- /* @__PURE__ */ T("div", {
348
- className: "w-full bg-status-success-bg rounded-t",
349
- style: { height: `${n}%` }
350
- }),
351
- /* @__PURE__ */ T("span", {
352
- className: "text-[10px] text-text-secondary",
353
- children: e.month.replace(" 20", "'")
354
- })
355
- ]
356
- }, e.month);
357
- })
358
- }) })] }),
359
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, { children: /* @__PURE__ */ T(g, { children: "Recent Transactions" }) }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ T("div", {
360
- className: "overflow-x-auto",
361
- children: /* @__PURE__ */ E("table", {
362
- className: "w-full text-sm",
363
- children: [/* @__PURE__ */ T("thead", { children: /* @__PURE__ */ E("tr", {
364
- className: "border-b",
365
- children: [
366
- /* @__PURE__ */ T("th", {
367
- className: "text-left py-2 font-medium",
368
- children: "ID"
369
- }),
370
- /* @__PURE__ */ T("th", {
371
- className: "text-left py-2 font-medium",
372
- children: "Type"
373
- }),
374
- /* @__PURE__ */ T("th", {
375
- className: "text-left py-2 font-medium",
376
- children: "Description"
377
- }),
378
- /* @__PURE__ */ T("th", {
379
- className: "text-right py-2 font-medium",
380
- children: "Amount"
381
- }),
382
- /* @__PURE__ */ T("th", {
383
- className: "text-left py-2 font-medium",
384
- children: "Status"
385
- })
386
- ]
387
- }) }), /* @__PURE__ */ T("tbody", { children: k.slice(0, 5).map((e) => /* @__PURE__ */ E("tr", {
388
- className: "border-b hover:bg-bg-sunken/50",
389
- children: [
390
- /* @__PURE__ */ T("td", {
391
- className: "py-2 font-mono text-xs",
392
- children: e.id
393
- }),
394
- /* @__PURE__ */ T("td", {
395
- className: "py-2 capitalize",
396
- children: e.type
397
- }),
398
- /* @__PURE__ */ T("td", {
399
- className: "py-2 truncate max-w-xs",
400
- children: e.description
401
- }),
402
- /* @__PURE__ */ E("td", {
403
- className: `py-2 text-right font-medium ${e.amount < 0 ? "text-status-error-text" : ""}`,
404
- children: ["$", Math.abs(e.amount).toLocaleString()]
405
- }),
406
- /* @__PURE__ */ T("td", {
407
- className: "py-2",
408
- children: /* @__PURE__ */ T(u, {
409
- variant: "outline",
410
- children: e.status
411
- })
412
- })
413
- ]
414
- }, e.id)) })]
415
- })
416
- }) })] })
417
- ]
418
- }),
419
- /* @__PURE__ */ T(S, {
420
- value: "operational",
421
- className: "space-y-6 mt-6",
422
- children: /* @__PURE__ */ E("div", {
423
- className: "grid gap-4 md:grid-cols-4",
424
- children: [
425
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
426
- className: "pb-2",
427
- children: /* @__PURE__ */ T(g, {
428
- className: "text-sm font-medium",
429
- children: "Incidents"
430
- })
431
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
432
- className: "text-2xl font-bold tabular-nums",
433
- children: A.length
434
- }), /* @__PURE__ */ E("p", {
435
- className: "text-xs text-text-secondary",
436
- children: [U.length, " resolved"]
437
- })] })] }),
438
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
439
- className: "pb-2",
440
- children: /* @__PURE__ */ T(g, {
441
- className: "text-sm font-medium",
442
- children: "SLA Breaches"
443
- })
444
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
445
- className: "text-2xl font-bold text-status-error-text",
446
- children: W.length
447
- }), /* @__PURE__ */ E("p", {
448
- className: "text-xs text-text-secondary",
449
- children: [((1 - W.length / Math.max(A.length, 1)) * 100).toFixed(1), "% compliance"]
450
- })] })] }),
451
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
452
- className: "pb-2",
453
- children: /* @__PURE__ */ T(g, {
454
- className: "text-sm font-medium",
455
- children: "Maintenance Done"
456
- })
457
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ T("div", {
458
- className: "text-2xl font-bold tabular-nums",
459
- children: G.length
460
- }), /* @__PURE__ */ E("p", {
461
- className: "text-xs text-text-secondary",
462
- children: [
463
- "of ",
464
- j.length,
465
- " total"
466
- ]
467
- })] })] }),
468
- /* @__PURE__ */ E(f, { children: [/* @__PURE__ */ T(h, {
469
- className: "pb-2",
470
- children: /* @__PURE__ */ T(g, {
471
- className: "text-sm font-medium",
472
- children: "Workflow Success"
473
- })
474
- }), /* @__PURE__ */ E(p, { children: [/* @__PURE__ */ E("div", {
475
- className: "text-2xl font-bold tabular-nums",
476
- children: [(M.reduce((e, t) => e + t.successRate, 0) / Math.max(M.length, 1)).toFixed(1), "%"]
477
- }), /* @__PURE__ */ E("p", {
478
- className: "text-xs text-text-secondary",
479
- children: [M.length, " active workflows"]
480
- })] })] })
481
- ]
482
- })
483
- }),
484
- /* @__PURE__ */ E(S, {
485
- value: "insights",
486
- className: "space-y-6 mt-6",
487
- children: [/* @__PURE__ */ E("div", {
488
- className: "grid gap-4 md:grid-cols-3",
489
- children: [
490
- /* @__PURE__ */ E(f, {
491
- className: "border-status-info-border bg-status-info-bg-subtle",
492
- children: [/* @__PURE__ */ T(h, { children: /* @__PURE__ */ T(g, {
493
- className: "text-status-info-text text-base",
494
- children: "Diversification"
495
- }) }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ E("p", {
496
- className: "text-sm text-status-info-text",
497
- children: [
498
- "Your portfolio spans ",
499
- Object.keys(B).length,
500
- " categories across",
501
- " ",
502
- Object.keys(H).length,
503
- " departments. IT Hardware represents the largest segment at ",
504
- O.byCategory[0]?.count || 0,
505
- " assets."
506
- ]
507
- }) })]
508
- }),
509
- /* @__PURE__ */ E(f, {
510
- className: "border-status-success-border bg-status-success-bg-subtle",
511
- children: [/* @__PURE__ */ T(h, { children: /* @__PURE__ */ T(g, {
512
- className: "text-status-success-text text-base",
513
- children: "Performance"
514
- }) }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ E("p", {
515
- className: "text-sm text-status-success-text",
516
- children: [
517
- "Portfolio depreciated value stands at $",
518
- (O.depreciatedValue / 1e6).toFixed(2),
519
- "M. Depreciation rate is within expected range at ",
520
- R,
521
- "% of original cost."
522
- ]
523
- }) })]
524
- }),
525
- /* @__PURE__ */ E(f, {
526
- className: "border-status-warning-border bg-status-warning-bg-subtle",
527
- children: [/* @__PURE__ */ T(h, { children: /* @__PURE__ */ T(g, {
528
- className: "text-status-warning-text text-base",
529
- children: "Maintenance"
530
- }) }), /* @__PURE__ */ T(p, { children: /* @__PURE__ */ E("p", {
531
- className: "text-sm text-status-warning-text",
532
- children: [
533
- j.filter((e) => e.status === "scheduled").length,
534
- " maintenance tasks are scheduled. Total maintenance spend is $",
535
- K.toLocaleString(),
536
- ". Stay on top of preventive maintenance."
537
- ]
538
- }) })]
539
- })
540
- ]
541
- }), /* @__PURE__ */ E(_, { children: [/* @__PURE__ */ E(h, {
542
- className: "px-0 pt-0",
543
- children: [/* @__PURE__ */ T(g, { children: "Top Assets by Value" }), /* @__PURE__ */ T(m, { children: "Highest value assets in your portfolio" })]
544
- }), /* @__PURE__ */ T(p, {
545
- className: "px-0 pb-0",
546
- children: /* @__PURE__ */ T("div", {
547
- className: "space-y-3",
548
- children: [...D].sort((e, t) => t.currentValue - e.currentValue).slice(0, 5).map((e, t) => /* @__PURE__ */ E("div", {
549
- className: "flex items-center justify-between p-3 rounded-lg border border-border-seam bg-gloss-card",
550
- children: [/* @__PURE__ */ E("div", {
551
- className: "flex items-center gap-3",
552
- children: [/* @__PURE__ */ T("div", {
553
- className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-xs font-medium text-primary",
554
- children: t + 1
555
- }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
556
- className: "text-sm font-medium",
557
- children: e.name
558
- }), /* @__PURE__ */ E("p", {
559
- className: "text-xs text-text-secondary",
485
+ })
486
+ }),
487
+ /* @__PURE__ */ D(C, {
488
+ value: "insights",
489
+ className: "space-y-6 mt-6",
490
+ children: [/* @__PURE__ */ D("div", {
491
+ className: "grid gap-4 md:grid-cols-3",
492
+ children: [
493
+ /* @__PURE__ */ D(f, {
494
+ className: "border-status-info-border bg-status-info-bg-subtle",
495
+ children: [/* @__PURE__ */ E(h, { children: /* @__PURE__ */ E(g, {
496
+ className: "text-status-info-text text-base",
497
+ children: "Diversification"
498
+ }) }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ D("p", {
499
+ className: "text-sm text-status-info-text",
560
500
  children: [
561
- e.department,
562
- " · ",
563
- e.category.replace("_", " ")
501
+ "Your portfolio spans ",
502
+ Object.keys(V).length,
503
+ " categories across",
504
+ " ",
505
+ Object.keys(U).length,
506
+ " departments. IT Hardware represents the largest segment at ",
507
+ k.byCategory[0]?.count || 0,
508
+ " assets."
564
509
  ]
565
- })] })]
566
- }), /* @__PURE__ */ E("div", {
567
- className: "text-right",
568
- children: [/* @__PURE__ */ E("p", {
569
- className: "text-sm font-medium",
570
- children: ["$", e.currentValue.toLocaleString()]
571
- }), /* @__PURE__ */ T("p", {
572
- className: "text-xs text-text-secondary",
573
- children: e.currentValue < e.value ? /* @__PURE__ */ E("span", {
574
- className: "text-status-error-text",
510
+ }) })]
511
+ }),
512
+ /* @__PURE__ */ D(f, {
513
+ className: "border-status-success-border bg-status-success-bg-subtle",
514
+ children: [/* @__PURE__ */ E(h, { children: /* @__PURE__ */ E(g, {
515
+ className: "text-status-success-text text-base",
516
+ children: "Performance"
517
+ }) }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ D("p", {
518
+ className: "text-sm text-status-success-text",
519
+ children: [
520
+ "Portfolio depreciated value stands at $",
521
+ (k.depreciatedValue / 1e6).toFixed(2),
522
+ "M. Depreciation rate is within expected range at ",
523
+ z,
524
+ "% of original cost."
525
+ ]
526
+ }) })]
527
+ }),
528
+ /* @__PURE__ */ D(f, {
529
+ className: "border-status-warning-border bg-status-warning-bg-subtle",
530
+ children: [/* @__PURE__ */ E(h, { children: /* @__PURE__ */ E(g, {
531
+ className: "text-status-warning-text text-base",
532
+ children: "Maintenance"
533
+ }) }), /* @__PURE__ */ E(p, { children: /* @__PURE__ */ D("p", {
534
+ className: "text-sm text-status-warning-text",
535
+ children: [
536
+ M.filter((e) => e.status === "scheduled").length,
537
+ " maintenance tasks are scheduled. Total maintenance spend is $",
538
+ q.toLocaleString(),
539
+ ". Stay on top of preventive maintenance."
540
+ ]
541
+ }) })]
542
+ })
543
+ ]
544
+ }), /* @__PURE__ */ D(_, { children: [/* @__PURE__ */ D(h, {
545
+ className: "px-0 pt-0",
546
+ children: [/* @__PURE__ */ E(g, { children: "Top Assets by Value" }), /* @__PURE__ */ E(m, { children: "Highest value assets in your portfolio" })]
547
+ }), /* @__PURE__ */ E(p, {
548
+ className: "px-0 pb-0",
549
+ children: /* @__PURE__ */ E("div", {
550
+ className: "space-y-3",
551
+ children: [...O].sort((e, t) => t.currentValue - e.currentValue).slice(0, 5).map((e, t) => /* @__PURE__ */ D("div", {
552
+ className: "flex items-center justify-between p-3 rounded-lg border border-border-seam bg-gloss-card",
553
+ children: [/* @__PURE__ */ D("div", {
554
+ className: "flex items-center gap-3",
555
+ children: [/* @__PURE__ */ E("div", {
556
+ className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-xs font-medium text-primary",
557
+ children: t + 1
558
+ }), /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
559
+ className: "text-sm font-medium",
560
+ children: e.name
561
+ }), /* @__PURE__ */ D("p", {
562
+ className: "text-xs text-text-secondary",
575
563
  children: [
576
- "-",
577
- ((1 - e.currentValue / e.value) * 100).toFixed(1),
578
- "%"
564
+ e.department,
565
+ " · ",
566
+ e.category.replace("_", " ")
579
567
  ]
580
- }) : /* @__PURE__ */ T("span", {
581
- className: "text-status-success-text",
582
- children: "No depreciation"
583
- })
568
+ })] })]
569
+ }), /* @__PURE__ */ D("div", {
570
+ className: "text-right",
571
+ children: [/* @__PURE__ */ D("p", {
572
+ className: "text-sm font-medium",
573
+ children: ["$", e.currentValue.toLocaleString()]
574
+ }), /* @__PURE__ */ E("p", {
575
+ className: "text-xs text-text-secondary",
576
+ children: e.currentValue < e.value ? /* @__PURE__ */ D("span", {
577
+ className: "text-status-error-text",
578
+ children: [
579
+ "-",
580
+ ((1 - e.currentValue / e.value) * 100).toFixed(1),
581
+ "%"
582
+ ]
583
+ }) : /* @__PURE__ */ E("span", {
584
+ className: "text-status-success-text",
585
+ children: "No depreciation"
586
+ })
587
+ })]
584
588
  })]
585
- })]
586
- }, e.id))
587
- })
588
- })] })]
589
- })
590
- ]
591
- })]
589
+ }, e.id))
590
+ })
591
+ })] })]
592
+ })
593
+ ]
594
+ })
595
+ ]
592
596
  });
593
597
  }
594
598
  //#endregion
595
- export { D as AnalyticsPage };
599
+ export { O as AnalyticsPage };
596
600
 
597
601
  //# sourceMappingURL=AnalyticsPage.js.map