@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,158 +1,184 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { CheckCircle as t, Clock as n, Download as r, FileText as i, Loader2 as a, Plus as o, XCircle as s } from "lucide-react";
3
- import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, GradientText as m } from "@burdenoff/fe-libs/ui";
4
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
3
+ import { useNavigate as c } from "react-router-dom";
4
+ import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, EmphasisPanel as h, GradientText as g, IllustratedEmptyState as _, NextSteps as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
5
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
5
6
  //#region src/assethandler/pages/ReportsReportsDashboardPage.tsx
6
- function _() {
7
- let { reports: _, reportExecutions: v } = e(), y = v.filter((e) => e.status === "completed"), b = v.filter((e) => e.status === "running");
8
- v.filter((e) => e.status === "failed");
9
- let x = _.filter((e) => e.schedule);
10
- return /* @__PURE__ */ g("div", {
7
+ function S() {
8
+ let S = c(), { reports: C, reportExecutions: w } = e(), T = w.filter((e) => e.status === "completed"), E = w.filter((e) => e.status === "running");
9
+ w.filter((e) => e.status === "failed");
10
+ let D = C.filter((e) => e.schedule);
11
+ return /* @__PURE__ */ x("div", {
11
12
  className: "space-y-6 p-6",
12
13
  children: [
13
- /* @__PURE__ */ g("div", {
14
+ /* @__PURE__ */ x("div", {
14
15
  className: "flex items-center justify-between",
15
- children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h1", {
16
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h1", {
16
17
  className: "text-2xl font-bold",
17
- children: /* @__PURE__ */ h(m, { children: "Reports Dashboard" })
18
- }), /* @__PURE__ */ h("p", {
18
+ children: /* @__PURE__ */ b(g, { children: "Reports Dashboard" })
19
+ }), /* @__PURE__ */ b("p", {
19
20
  className: "text-sm text-text-secondary",
20
21
  children: "Overview of all reports and executions"
21
- })] }), /* @__PURE__ */ g(l, {
22
+ })] }), /* @__PURE__ */ x(u, {
22
23
  size: "sm",
23
- children: [/* @__PURE__ */ h(o, { className: "mr-2 h-4 w-4" }), "New Report"]
24
+ children: [/* @__PURE__ */ b(o, { className: "mr-2 h-4 w-4" }), "New Report"]
24
25
  })]
25
26
  }),
26
- /* @__PURE__ */ g("div", {
27
+ /* @__PURE__ */ b(y, { children: "Your reporting home base — see every report you can run, what is scheduled, and the status of recent runs. Use it to launch a report, grab a finished export, or jump into the builder to create a new one, all from one place." }),
28
+ /* @__PURE__ */ b(v, {
29
+ storageKey: "assethandler-reports-dashboard",
30
+ steps: [
31
+ {
32
+ id: "build",
33
+ label: "Build a new report",
34
+ description: "Pick data, columns and filters in the report builder.",
35
+ onClick: () => S("/reports/report-builder")
36
+ },
37
+ {
38
+ id: "browse",
39
+ label: "Browse saved reports",
40
+ description: "Run or schedule a report you have already defined.",
41
+ onClick: () => S("/reports/reports-list")
42
+ },
43
+ {
44
+ id: "analytics",
45
+ label: "Explore analytics",
46
+ description: "See ready-made insights across the asset estate.",
47
+ onClick: () => S("/analytics")
48
+ }
49
+ ]
50
+ }),
51
+ /* @__PURE__ */ x("div", {
27
52
  className: "grid gap-4 md:grid-cols-4",
28
53
  children: [
29
- /* @__PURE__ */ h(u, { children: /* @__PURE__ */ g(d, {
54
+ /* @__PURE__ */ x(h, { children: [/* @__PURE__ */ x("div", {
55
+ className: "flex items-center gap-2 text-sm text-text-secondary",
56
+ children: [/* @__PURE__ */ b(i, { className: "h-4 w-4" }), "Total Reports"]
57
+ }), /* @__PURE__ */ b("p", {
58
+ className: "text-2xl font-bold mt-1 tabular-nums",
59
+ children: C.length
60
+ })] }),
61
+ /* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
30
62
  className: "pt-4",
31
- children: [/* @__PURE__ */ g("div", {
63
+ children: [/* @__PURE__ */ x("div", {
32
64
  className: "flex items-center gap-2 text-sm text-text-secondary",
33
- children: [/* @__PURE__ */ h(i, { className: "h-4 w-4" }), "Total Reports"]
34
- }), /* @__PURE__ */ h("p", {
65
+ children: [/* @__PURE__ */ b(n, { className: "h-4 w-4" }), "Scheduled"]
66
+ }), /* @__PURE__ */ b("p", {
35
67
  className: "text-2xl font-bold mt-1",
36
- children: _.length
68
+ children: D.length
37
69
  })]
38
70
  }) }),
39
- /* @__PURE__ */ h(u, { children: /* @__PURE__ */ g(d, {
71
+ /* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
40
72
  className: "pt-4",
41
- children: [/* @__PURE__ */ g("div", {
73
+ children: [/* @__PURE__ */ x("div", {
42
74
  className: "flex items-center gap-2 text-sm text-text-secondary",
43
- children: [/* @__PURE__ */ h(n, { className: "h-4 w-4" }), "Scheduled"]
44
- }), /* @__PURE__ */ h("p", {
45
- className: "text-2xl font-bold mt-1",
46
- children: x.length
47
- })]
48
- }) }),
49
- /* @__PURE__ */ h(u, { children: /* @__PURE__ */ g(d, {
50
- className: "pt-4",
51
- children: [/* @__PURE__ */ g("div", {
52
- className: "flex items-center gap-2 text-sm text-text-secondary",
53
- children: [/* @__PURE__ */ h(t, { className: "h-4 w-4" }), "Completed"]
54
- }), /* @__PURE__ */ h("p", {
75
+ children: [/* @__PURE__ */ b(t, { className: "h-4 w-4" }), "Completed"]
76
+ }), /* @__PURE__ */ b("p", {
55
77
  className: "text-2xl font-bold mt-1 text-status-success-text",
56
- children: y.length
78
+ children: T.length
57
79
  })]
58
80
  }) }),
59
- /* @__PURE__ */ h(u, { children: /* @__PURE__ */ g(d, {
81
+ /* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
60
82
  className: "pt-4",
61
- children: [/* @__PURE__ */ g("div", {
83
+ children: [/* @__PURE__ */ x("div", {
62
84
  className: "flex items-center gap-2 text-sm text-text-secondary",
63
- children: [/* @__PURE__ */ h(a, { className: "h-4 w-4" }), "Running"]
64
- }), /* @__PURE__ */ h("p", {
85
+ children: [/* @__PURE__ */ b(a, { className: "h-4 w-4" }), "Running"]
86
+ }), /* @__PURE__ */ b("p", {
65
87
  className: "text-2xl font-bold mt-1 text-status-info-text",
66
- children: b.length
88
+ children: E.length
67
89
  })]
68
90
  }) })
69
91
  ]
70
92
  }),
71
- /* @__PURE__ */ g(u, { children: [/* @__PURE__ */ h(f, { children: /* @__PURE__ */ h(p, { children: "Recent Executions" }) }), /* @__PURE__ */ h(d, {
93
+ /* @__PURE__ */ x(d, { children: [/* @__PURE__ */ b(p, { children: /* @__PURE__ */ b(m, { children: "Recent Executions" }) }), /* @__PURE__ */ b(f, {
72
94
  className: "p-0",
73
- children: /* @__PURE__ */ h("div", {
95
+ children: w.length === 0 ? /* @__PURE__ */ b(_, {
96
+ illustration: "empty-data",
97
+ title: "No report runs yet",
98
+ description: "Run a report and its execution history will appear here, ready to download."
99
+ }) : /* @__PURE__ */ b("div", {
74
100
  className: "overflow-x-auto",
75
- children: /* @__PURE__ */ g("table", {
101
+ children: /* @__PURE__ */ x("table", {
76
102
  className: "w-full text-sm",
77
- children: [/* @__PURE__ */ h("thead", { children: /* @__PURE__ */ g("tr", {
103
+ children: [/* @__PURE__ */ b("thead", { children: /* @__PURE__ */ x("tr", {
78
104
  className: "border-b bg-bg-sunken/50",
79
105
  children: [
80
- /* @__PURE__ */ h("th", {
106
+ /* @__PURE__ */ b("th", {
81
107
  className: "text-left p-3 font-medium",
82
108
  children: "Report"
83
109
  }),
84
- /* @__PURE__ */ h("th", {
110
+ /* @__PURE__ */ b("th", {
85
111
  className: "text-left p-3 font-medium",
86
112
  children: "Executed By"
87
113
  }),
88
- /* @__PURE__ */ h("th", {
114
+ /* @__PURE__ */ b("th", {
89
115
  className: "text-left p-3 font-medium",
90
116
  children: "Status"
91
117
  }),
92
- /* @__PURE__ */ h("th", {
118
+ /* @__PURE__ */ b("th", {
93
119
  className: "text-left p-3 font-medium",
94
120
  children: "Format"
95
121
  }),
96
- /* @__PURE__ */ h("th", {
122
+ /* @__PURE__ */ b("th", {
97
123
  className: "text-left p-3 font-medium",
98
124
  children: "Duration"
99
125
  }),
100
- /* @__PURE__ */ h("th", {
126
+ /* @__PURE__ */ b("th", {
101
127
  className: "text-left p-3 font-medium",
102
128
  children: "Time"
103
129
  }),
104
- /* @__PURE__ */ h("th", { className: "p-3" })
130
+ /* @__PURE__ */ b("th", { className: "p-3" })
105
131
  ]
106
- }) }), /* @__PURE__ */ h("tbody", { children: v.map((e) => /* @__PURE__ */ g("tr", {
132
+ }) }), /* @__PURE__ */ b("tbody", { children: w.map((e) => /* @__PURE__ */ x("tr", {
107
133
  className: "border-b hover:bg-bg-sunken/50",
108
134
  children: [
109
- /* @__PURE__ */ h("td", {
135
+ /* @__PURE__ */ b("td", {
110
136
  className: "p-3 font-medium",
111
137
  children: e.reportName
112
138
  }),
113
- /* @__PURE__ */ h("td", {
139
+ /* @__PURE__ */ b("td", {
114
140
  className: "p-3 text-xs",
115
141
  children: e.executedBy
116
142
  }),
117
- /* @__PURE__ */ g("td", {
143
+ /* @__PURE__ */ x("td", {
118
144
  className: "p-3",
119
145
  children: [
120
- e.status === "completed" && /* @__PURE__ */ g(c, {
146
+ e.status === "completed" && /* @__PURE__ */ x(l, {
121
147
  variant: "default",
122
- children: [/* @__PURE__ */ h(t, { className: "mr-1 h-3 w-3" }), "Completed"]
148
+ children: [/* @__PURE__ */ b(t, { className: "mr-1 h-3 w-3" }), "Completed"]
123
149
  }),
124
- e.status === "running" && /* @__PURE__ */ g(c, {
150
+ e.status === "running" && /* @__PURE__ */ x(l, {
125
151
  variant: "secondary",
126
- children: [/* @__PURE__ */ h(a, { className: "mr-1 h-3 w-3 animate-spin" }), "Running"]
152
+ children: [/* @__PURE__ */ b(a, { className: "mr-1 h-3 w-3 animate-spin" }), "Running"]
127
153
  }),
128
- e.status === "failed" && /* @__PURE__ */ g(c, {
154
+ e.status === "failed" && /* @__PURE__ */ x(l, {
129
155
  variant: "destructive",
130
- children: [/* @__PURE__ */ h(s, { className: "mr-1 h-3 w-3" }), "Failed"]
156
+ children: [/* @__PURE__ */ b(s, { className: "mr-1 h-3 w-3" }), "Failed"]
131
157
  }),
132
- e.status === "queued" && /* @__PURE__ */ h(c, {
158
+ e.status === "queued" && /* @__PURE__ */ b(l, {
133
159
  variant: "outline",
134
160
  children: "Queued"
135
161
  })
136
162
  ]
137
163
  }),
138
- /* @__PURE__ */ h("td", {
164
+ /* @__PURE__ */ b("td", {
139
165
  className: "p-3 text-xs",
140
166
  children: e.format
141
167
  }),
142
- /* @__PURE__ */ g("td", {
168
+ /* @__PURE__ */ x("td", {
143
169
  className: "p-3 text-xs",
144
170
  children: [e.duration, "s"]
145
171
  }),
146
- /* @__PURE__ */ h("td", {
172
+ /* @__PURE__ */ b("td", {
147
173
  className: "p-3 text-xs",
148
174
  children: new Date(e.executedAt).toLocaleString()
149
175
  }),
150
- /* @__PURE__ */ h("td", {
176
+ /* @__PURE__ */ b("td", {
151
177
  className: "p-3",
152
- children: e.status === "completed" && /* @__PURE__ */ h(l, {
178
+ children: e.status === "completed" && /* @__PURE__ */ b(u, {
153
179
  variant: "ghost",
154
180
  size: "sm",
155
- children: /* @__PURE__ */ h(r, { className: "h-3 w-3" })
181
+ children: /* @__PURE__ */ b(r, { className: "h-3 w-3" })
156
182
  })
157
183
  })
158
184
  ]
@@ -160,34 +186,43 @@ function _() {
160
186
  })
161
187
  })
162
188
  })] }),
163
- /* @__PURE__ */ g(u, { children: [/* @__PURE__ */ h(f, { children: /* @__PURE__ */ h(p, { children: "Available Reports" }) }), /* @__PURE__ */ h(d, { children: /* @__PURE__ */ h("div", {
189
+ /* @__PURE__ */ x(d, { children: [/* @__PURE__ */ b(p, { children: /* @__PURE__ */ b(m, { children: "Available Reports" }) }), /* @__PURE__ */ b(f, { children: C.length === 0 ? /* @__PURE__ */ b(_, {
190
+ illustration: "empty-files",
191
+ title: "No reports defined",
192
+ description: "Create your first report in the builder to make it available here.",
193
+ action: /* @__PURE__ */ x(u, {
194
+ size: "sm",
195
+ onClick: () => S("/reports/report-builder"),
196
+ children: [/* @__PURE__ */ b(o, { className: "mr-2 h-4 w-4" }), "New Report"]
197
+ })
198
+ }) : /* @__PURE__ */ b("div", {
164
199
  className: "grid gap-3 md:grid-cols-2 lg:grid-cols-3",
165
- children: _.map((e) => /* @__PURE__ */ g("div", {
200
+ children: C.map((e) => /* @__PURE__ */ x("div", {
166
201
  className: "rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer",
167
202
  children: [
168
- /* @__PURE__ */ g("div", {
203
+ /* @__PURE__ */ x("div", {
169
204
  className: "flex items-center justify-between",
170
- children: [/* @__PURE__ */ h(c, {
205
+ children: [/* @__PURE__ */ b(l, {
171
206
  variant: "outline",
172
207
  className: "text-xs",
173
208
  children: e.type
174
- }), /* @__PURE__ */ h(c, {
209
+ }), /* @__PURE__ */ b(l, {
175
210
  variant: "secondary",
176
211
  className: "text-xs",
177
212
  children: e.category
178
213
  })]
179
214
  }),
180
- /* @__PURE__ */ h("h4", {
215
+ /* @__PURE__ */ b("h4", {
181
216
  className: "font-medium mt-2",
182
217
  children: e.name
183
218
  }),
184
- /* @__PURE__ */ h("p", {
219
+ /* @__PURE__ */ b("p", {
185
220
  className: "text-xs text-text-secondary mt-1",
186
221
  children: e.description
187
222
  }),
188
- /* @__PURE__ */ g("div", {
223
+ /* @__PURE__ */ x("div", {
189
224
  className: "flex items-center gap-2 mt-2 text-xs text-text-secondary",
190
- children: [e.schedule && /* @__PURE__ */ g("span", { children: ["Schedule: ", e.schedule] }), e.lastRun && /* @__PURE__ */ g("span", { children: ["· Last: ", new Date(e.lastRun).toLocaleDateString()] })]
225
+ children: [e.schedule && /* @__PURE__ */ x("span", { children: ["Schedule: ", e.schedule] }), e.lastRun && /* @__PURE__ */ x("span", { children: ["· Last: ", new Date(e.lastRun).toLocaleDateString()] })]
191
226
  })
192
227
  ]
193
228
  }, e.id))
@@ -196,6 +231,6 @@ function _() {
196
231
  });
197
232
  }
198
233
  //#endregion
199
- export { _ as ReportsReportsDashboardPage };
234
+ export { S as ReportsReportsDashboardPage };
200
235
 
201
236
  //# sourceMappingURL=ReportsReportsDashboardPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsReportsDashboardPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BarChart3,\n FileText,\n Clock,\n Download,\n Plus,\n CheckCircle,\n XCircle,\n Loader2,\n} from 'lucide-react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function ReportsReportsDashboardPage() {\n const { reports, reportExecutions } = useAssetHandlerStore();\n\n const completed = reportExecutions.filter((e) => e.status === 'completed');\n const running = reportExecutions.filter((e) => e.status === 'running');\n const failed = reportExecutions.filter((e) => e.status === 'failed');\n const scheduled = reports.filter((r) => r.schedule);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Reports Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Overview of all reports and executions</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <FileText className=\"h-4 w-4\" />\n Total Reports\n </div>\n <p className=\"text-2xl font-bold mt-1\">{reports.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Scheduled\n </div>\n <p className=\"text-2xl font-bold mt-1\">{scheduled.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <CheckCircle className=\"h-4 w-4\" />\n Completed\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-success-text\">{completed.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4\" />\n Running\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-info-text\">{running.length}</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent Executions */}\n <Card>\n <CardHeader>\n <CardTitle>Recent Executions</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Report</th>\n <th className=\"text-left p-3 font-medium\">Executed By</th>\n <th className=\"text-left p-3 font-medium\">Status</th>\n <th className=\"text-left p-3 font-medium\">Format</th>\n <th className=\"text-left p-3 font-medium\">Duration</th>\n <th className=\"text-left p-3 font-medium\">Time</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {reportExecutions.map((exec) => (\n <tr key={exec.id} className=\"border-b hover:bg-bg-sunken/50\">\n <td className=\"p-3 font-medium\">{exec.reportName}</td>\n <td className=\"p-3 text-xs\">{exec.executedBy}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Badge variant=\"default\">\n <CheckCircle className=\"mr-1 h-3 w-3\" />\n Completed\n </Badge>\n )}\n {exec.status === 'running' && (\n <Badge variant=\"secondary\">\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n Running\n </Badge>\n )}\n {exec.status === 'failed' && (\n <Badge variant=\"destructive\">\n <XCircle className=\"mr-1 h-3 w-3\" />\n Failed\n </Badge>\n )}\n {exec.status === 'queued' && <Badge variant=\"outline\">Queued</Badge>}\n </td>\n <td className=\"p-3 text-xs\">{exec.format}</td>\n <td className=\"p-3 text-xs\">{exec.duration}s</td>\n <td className=\"p-3 text-xs\">{new Date(exec.executedAt).toLocaleString()}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Button variant=\"ghost\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n\n {/* Report Configs */}\n <Card>\n <CardHeader>\n <CardTitle>Available Reports</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {reports.map((report) => (\n <div\n key={report.id}\n className=\"rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer\"\n >\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {report.type}\n </Badge>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {report.category}\n </Badge>\n </div>\n <h4 className=\"font-medium mt-2\">{report.name}</h4>\n <p className=\"text-xs text-text-secondary mt-1\">{report.description}</p>\n <div className=\"flex items-center gap-2 mt-2 text-xs text-text-secondary\">\n {report.schedule && <span>Schedule: {report.schedule}</span>}\n {report.lastRun && (\n <span>&middot; Last: {new Date(report.lastRun).toLocaleDateString()}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReportsReportsDashboardPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport {\n FileText,\n Clock,\n Download,\n Plus,\n CheckCircle,\n XCircle,\n Loader2,\n} from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function ReportsReportsDashboardPage() {\n const navigate = useNavigate();\n const { reports, reportExecutions } = useAssetHandlerStore();\n\n const completed = reportExecutions.filter((e) => e.status === 'completed');\n const running = reportExecutions.filter((e) => e.status === 'running');\n const failed = reportExecutions.filter((e) => e.status === 'failed');\n const scheduled = reports.filter((r) => r.schedule);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Reports Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Overview of all reports and executions</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n </div>\n\n <PagePurpose>\n Your reporting home base — see every report you can run, what is scheduled, and the status\n of recent runs. Use it to launch a report, grab a finished export, or jump into the builder\n to create a new one, all from one place.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-reports-dashboard\"\n steps={[\n {\n id: 'build',\n label: 'Build a new report',\n description: 'Pick data, columns and filters in the report builder.',\n onClick: () => navigate('/reports/report-builder'),\n },\n {\n id: 'browse',\n label: 'Browse saved reports',\n description: 'Run or schedule a report you have already defined.',\n onClick: () => navigate('/reports/reports-list'),\n },\n {\n id: 'analytics',\n label: 'Explore analytics',\n description: 'See ready-made insights across the asset estate.',\n onClick: () => navigate('/analytics'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <EmphasisPanel>\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <FileText className=\"h-4 w-4\" />\n Total Reports\n </div>\n <p className=\"text-2xl font-bold mt-1 tabular-nums\">{reports.length}</p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Scheduled\n </div>\n <p className=\"text-2xl font-bold mt-1\">{scheduled.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <CheckCircle className=\"h-4 w-4\" />\n Completed\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-success-text\">{completed.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4\" />\n Running\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-info-text\">{running.length}</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent Executions */}\n <Card>\n <CardHeader>\n <CardTitle>Recent Executions</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {reportExecutions.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No report runs yet\"\n description=\"Run a report and its execution history will appear here, ready to download.\"\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Report</th>\n <th className=\"text-left p-3 font-medium\">Executed By</th>\n <th className=\"text-left p-3 font-medium\">Status</th>\n <th className=\"text-left p-3 font-medium\">Format</th>\n <th className=\"text-left p-3 font-medium\">Duration</th>\n <th className=\"text-left p-3 font-medium\">Time</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {reportExecutions.map((exec) => (\n <tr key={exec.id} className=\"border-b hover:bg-bg-sunken/50\">\n <td className=\"p-3 font-medium\">{exec.reportName}</td>\n <td className=\"p-3 text-xs\">{exec.executedBy}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Badge variant=\"default\">\n <CheckCircle className=\"mr-1 h-3 w-3\" />\n Completed\n </Badge>\n )}\n {exec.status === 'running' && (\n <Badge variant=\"secondary\">\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n Running\n </Badge>\n )}\n {exec.status === 'failed' && (\n <Badge variant=\"destructive\">\n <XCircle className=\"mr-1 h-3 w-3\" />\n Failed\n </Badge>\n )}\n {exec.status === 'queued' && <Badge variant=\"outline\">Queued</Badge>}\n </td>\n <td className=\"p-3 text-xs\">{exec.format}</td>\n <td className=\"p-3 text-xs\">{exec.duration}s</td>\n <td className=\"p-3 text-xs\">{new Date(exec.executedAt).toLocaleString()}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Button variant=\"ghost\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Report Configs */}\n <Card>\n <CardHeader>\n <CardTitle>Available Reports</CardTitle>\n </CardHeader>\n <CardContent>\n {reports.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No reports defined\"\n description=\"Create your first report in the builder to make it available here.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/reports/report-builder')}>\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n }\n />\n ) : (\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {reports.map((report) => (\n <div\n key={report.id}\n className=\"rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer\"\n >\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {report.type}\n </Badge>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {report.category}\n </Badge>\n </div>\n <h4 className=\"font-medium mt-2\">{report.name}</h4>\n <p className=\"text-xs text-text-secondary mt-1\">{report.description}</p>\n <div className=\"flex items-center gap-2 mt-2 text-xs text-text-secondary\">\n {report.schedule && <span>Schedule: {report.schedule}</span>}\n {report.lastRun && (\n <span>&middot; Last: {new Date(report.lastRun).toLocaleDateString()}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}