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